[PATCH] D59553: [LLD][ELF][DebugInfo] llvm-symbolizer shows incorrect source line info if --gc-sections used

Alexey Lapshin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 22 07:00:03 PDT 2019


avl added a comment.

@bd1976llvm

> What does GDB make of -1/-2???

Speaking of GDB it looks like it behaives exactly the same. Please check results for the example from bug 41124 :

[LD]clang++  -gdwarf-5 -O -Wl,--gc-sections -fuse-ld=ld not_used.o main.o -o res.out
gdb res.out
(gdb) break main.cpp:1
Breakpoint 1 at 0x400497: file main.cpp, line 1.
(gdb) break not_used.cpp:1
Breakpoint 2 at 0x0: file not_used.cpp, line 1.
(gdb) list main
1	int main(void) {
2	   return 0;
3	}
(gdb) list foo
Function "foo" not defined.
(gdb) list main.cpp:1
1	int main(void) {
2	   return 0;
3	}
(gdb) list not_used.cpp:1
1	void foo () {
2	    __asm__(".rept 6000000; nop; .endr");
3	}

[LLD]clang++  -gdwarf-5 -O -Wl,--gc-sections -fuse-ld=lld not_used.o main.o -o res.out
gdb res.out
(gdb) break main.cpp:1
Breakpoint 1 at 0x2010e7: file main.cpp, line 1.
(gdb) break not_used.cpp:1
Breakpoint 2 at 0xfffffffffffffffe: file not_used.cpp, line 1.
(gdb) list main
1	int main(void) {
2	   return 0;
3	}
(gdb) list foo
Function "foo" not defined.
(gdb) list main.cpp:1
1	int main(void) {
2	   return 0;
3	}
(gdb) list not_used.cpp:1
1	void foo () {
2	    __asm__(".rept 6000000; nop; .endr");
3	}

Speaking of gnu addr2line it looks like it become to work more correctly :

[LD]clang++  -gdwarf-5 -O -Wl,--gc-sections -fuse-ld=ld not_used.o main.o -o res.out
addr2line -e res.out 0x400497
/home/avl/bugs/gc_debuginfo/not_used.cpp:2   <<<<<<<<<<<<<<<<<<<<<<<<<< incorrect

[LLD]clang++  -gdwarf-5 -O -Wl,--gc-sections -fuse-ld=lld not_used.o main.o -o res.out
addr2line -e res.out 0x2010e7
/home/avl/bugs/gc_debuginfo/main.cpp:3


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59553/new/

https://reviews.llvm.org/D59553





More information about the llvm-commits mailing list