diff options
-rw-r--r-- | lld/ELF/MarkLive.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/startstop-gccollect.s | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lld/ELF/MarkLive.cpp b/lld/ELF/MarkLive.cpp index b91be129772..62a0039ef01 100644 --- a/lld/ELF/MarkLive.cpp +++ b/lld/ELF/MarkLive.cpp @@ -74,7 +74,7 @@ static void resolveReloc(InputSectionBase &Sec, RelT &Rel, return; } - if (B.isUndefined()) + if (!B.isInCurrentDSO()) for (InputSectionBase *Sec : CNamedSections.lookup(B.getName())) Fn(Sec, 0); } diff --git a/lld/test/ELF/startstop-gccollect.s b/lld/test/ELF/startstop-gccollect.s index fea4657ba8c..cb0009c54be 100644 --- a/lld/test/ELF/startstop-gccollect.s +++ b/lld/test/ELF/startstop-gccollect.s @@ -11,6 +11,12 @@ # RUN: ld.lld %t --gc-sections -o %tout # RUN: llvm-objdump -d %tout | FileCheck -check-prefix=DISASM %s +# RUN: echo ".global __start_foo; __start_foo:" > %t2.s +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %t2.s -o %t2.o +# RUN: ld.lld -shared %t2.o -o %t2.so +# RUN: ld.lld %t --gc-sections -o %tout %t2.so +# RUN: llvm-objdump -d %tout | FileCheck -check-prefix=DISASM %s + # DISASM: _start: # DISASM-NEXT: 201000: e8 05 00 00 00 callq 5 <__start_foo> # DISASM-NEXT: 201005: e8 02 00 00 00 callq 2 <__stop_bar> |