Skip to content

GCC7로 빌드시 PLT hook 세그멘테이션 폴트 이슈 #5

@interruping

Description

@interruping

gcc 5.4.1 버전으로 빌드 시엔 문제가 없습니다.
하지만 7.0.1 버전으로 빌드 시에 PTL hook 관련 세그멘테이션 폴트가 생기는 것을 발견했습니다. (아래 참조)

# normal tracing

$ uftrace tests/t-abc
WARN: invalid task file
child terminated by signal: 11: Segmentation fault
# DURATION    TID     FUNCTION

--no-libcall 옵션을 사용해보면 세그멘테이션 폴트가 안 생깁니다.

$ uftrace --no-libcall t-abc
# DURATION    TID     FUNCTION
            [ 5133] | main() {
            [ 5133] |   a() {
            [ 5133] |     b() {
   0.982 us [ 5133] |       c();
   1.854 us [ 5133] |     } /* b */
   2.170 us [ 5133] |   } /* a */
   2.792 us [ 5133] | } /* main */

코어 파일을 체크해 보면 libmcount/plthook.c:429에서 세그멘테이션 폴트가 나타난 것을 볼 수 있습니다.

Reading symbols from t-abc...(no debugging symbols found)...done.
[New LWP 5249]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `t-abc'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007ff5a1b8a322 in plthook_entry (ret_addr=0x7ffd79fb0378, child_idx=1, 
    module_id=140692961395048, regs=0x7ffd79fb0338)
    at /home/taeung/git/uftrace/libmcount/plthook.c:429
429		struct ftrace_trigger tr = {

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions