| Issue |
53156
|
| Summary |
lld breaks perf DWARF backtraces
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
Kha
|
I don't know if this is a bug in lld, perf, or libunwind, only that it doesn't happen with ld: when I link with lld, perf DWARF stack traces are incomplete. In a more complex application, this leads to stack traces being much shorter (and thus less helpful) than when linking with ld, but the following MWE demonstrates a difference in at least the `_start` symbol:
```
$ cat foo.c
#include <stdio.h>
void foo(int d) { int s = 0; for (int i = 0; i < 1000000; i++) { printf(""); s += i / d; } }
int main() { foo(100000); }
$ perf --version
perf version 5.10.89
$ clang -v foo.c && perf record --call-graph dwarf ./a.out && perf report | head -n 30
clang -v foo.c && perf record --call-graph dwarf ./a.out && perf report | head -n 30
clang version 13.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /nix/store/ry469fxcshgi8k6mavw5623ps4wyc2dp-clang-13.0.0/bin
Found candidate GCC installation: /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0
Found candidate GCC installation: /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0
Selected GCC installation: /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/nix/store/ry469fxcshgi8k6mavw5623ps4wyc2dp-clang-13.0.0/bin/clang-13" -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -disable-llvm-verifier -discard-value-names -main-file-name foo.c -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/tmp -nostdsysteminc -resource-dir /nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/resource-root -idirafter /nix/store/12z1nc5fmif2z7wian28n55j61acbmny-glibc-2.33-59-dev/include -internal-isystem /nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/resource-root/include -fdebug-compilation-dir=/tmp -ferror-limit 19 -fgnuc-version=4.2.1 -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/foo-a74ba0.o -x c foo.c
clang -cc1 version 13.0.0 based upon LLVM 13.0.0 default target x86_64-unknown-linux-gnu
#include "..." search starts here:
#include <...> search starts here:
/nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/resource-root/include
/nix/store/12z1nc5fmif2z7wian28n55j61acbmny-glibc-2.33-59-dev/include
End of search list.
"/nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/bin/ld" --eh-frame-hdr -m elf_x86_64 -o a.out /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/crt1.o /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/crti.o /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/crtbegin.o -L/nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib -L/nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0 -L/nix/store/m756011mkf1i0ki78i8y6ac3gf8qphvi-gcc-10.3.0-lib/x86_64-unknown-linux-gnu/lib -L/nix/store/8prp770hvr3cgaab7wn61dq3llc07ryg-clang-13.0.0-lib/lib -L/nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0 -L/nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../../lib64 -L/nix/store/ry469fxcshgi8k6mavw5623ps4wyc2dp-clang-13.0.0/bin/../lib -dynamic-linker=/nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/ld-linux-x86-64.so.2 /tmp/foo-a74ba0.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/crtend.o /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/crtn.o
[ perf record: Woken up 2 times to write data ]
[ perf record: Captured and wrote 0.430 MB perf.data (53 samples) ]
# To display the perf.data header info, please use --header/--header-only options.
#
#
# Total Lost Samples: 0
#
# Samples: 53 of event 'cycles:u'
# Event count (approx.): 47036836
#
# Children Self Command Shared Object Symbol
# ........ ........ ....... ................ .................................
#
99.96% 0.00% a.out a.out [.] _start
|
---_start
__libc_start_main
main
foo
|
--91.78%--__printf (inlined)
|
--84.62%--__vfprintf_internal
|
|--6.46%--_IO_new_file_xsputn (inlined)
|
--2.45%--__strchrnul_avx2
99.96% 0.00% a.out libc-2.33.so [.] __libc_start_main
|
---__libc_start_main
main
$ clang -v -fuse-ld=lld foo.c && perf record --call-graph dwarf ./a.out && perf report | head -n 30
clang version 13.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /nix/store/ry469fxcshgi8k6mavw5623ps4wyc2dp-clang-13.0.0/bin
Found candidate GCC installation: /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0
Found candidate GCC installation: /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0
Selected GCC installation: /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/nix/store/ry469fxcshgi8k6mavw5623ps4wyc2dp-clang-13.0.0/bin/clang-13" -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -disable-llvm-verifier -discard-value-names -main-file-name foo.c -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/tmp -nostdsysteminc -resource-dir /nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/resource-root -idirafter /nix/store/12z1nc5fmif2z7wian28n55j61acbmny-glibc-2.33-59-dev/include -internal-isystem /nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/resource-root/include -fdebug-compilation-dir=/tmp -ferror-limit 19 -fgnuc-version=4.2.1 -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/foo-266589.o -x c foo.c
clang -cc1 version 13.0.0 based upon LLVM 13.0.0 default target x86_64-unknown-linux-gnu
#include "..." search starts here:
#include <...> search starts here:
/nix/store/sjyb4lh03rxfy459i4086k9q897rglgf-clang-wrapper-13.0.0/resource-root/include
/nix/store/12z1nc5fmif2z7wian28n55j61acbmny-glibc-2.33-59-dev/include
End of search list.
"/nix/store/3y82ady9hh6pjyap4l42z638z25m4xxp-llvm-binutils-13.0.0/bin/ld.lld" --eh-frame-hdr -m elf_x86_64 -o a.out /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/crt1.o /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/crti.o /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/crtbegin.o -L/nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib -L/nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0 -L/nix/store/m756011mkf1i0ki78i8y6ac3gf8qphvi-gcc-10.3.0-lib/x86_64-unknown-linux-gnu/lib -L/nix/store/8prp770hvr3cgaab7wn61dq3llc07ryg-clang-13.0.0-lib/lib -L/nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0 -L/nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib64/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../../lib64 -L/nix/store/ry469fxcshgi8k6mavw5623ps4wyc2dp-clang-13.0.0/bin/../lib -dynamic-linker=/nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/ld-linux-x86-64.so.2 /tmp/foo-266589.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /nix/store/mrqrvina0lfgrvdzfyri7sw9vxy6pyms-gcc-10.3.0/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/crtend.o /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/crtn.o
[ perf record: Woken up 2 times to write data ]
[ perf record: Captured and wrote 0.438 MB perf.data (54 samples) ]
# To display the perf.data header info, please use --header/--header-only options.
#
#
# Total Lost Samples: 0
#
# Samples: 54 of event 'cycles:u'
# Event count (approx.): 47911504
#
# Children Self Command Shared Object Symbol
# ........ ........ ....... ................ .................................
#
99.96% 0.00% a.out [unknown] [.] 0xffffffffffffffff
|
---0xffffffffffffffff
__libc_start_main
main
foo
|
--82.89%--__printf (inlined)
|
--67.62%--__vfprintf_internal
|
|--6.38%--_IO_new_file_xsputn (inlined)
|
--2.41%--__strchrnul_avx2
99.96% 0.00% a.out libc-2.33.so [.] __libc_start_main
|
---__libc_start_main
main
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs