diff options
| -rw-r--r-- | lld/ELF/Driver.cpp | 5 | ||||
| -rw-r--r-- | lld/test/ELF/lto/dynamic-list.ll | 25 | ||||
| -rw-r--r-- | lld/test/ELF/lto/shlib-undefined.ll | 27 |
3 files changed, 55 insertions, 2 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 7e6af5ede72..1b1f0beb40b 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -458,14 +458,15 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) { if (Config->OutputFile.empty()) Config->OutputFile = "a.out"; + Symtab.scanShlibUndefined(); + Symtab.scanDynamicList(); + Symtab.addCombinedLtoObject(); for (auto *Arg : Args.filtered(OPT_wrap)) Symtab.wrap(Arg->getValue()); // Write the result to the file. - Symtab.scanShlibUndefined(); - Symtab.scanDynamicList(); if (Config->GcSections) markLive<ELFT>(&Symtab); if (Config->ICF) diff --git a/lld/test/ELF/lto/dynamic-list.ll b/lld/test/ELF/lto/dynamic-list.ll new file mode 100644 index 00000000000..0e950b3c83f --- /dev/null +++ b/lld/test/ELF/lto/dynamic-list.ll @@ -0,0 +1,25 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: echo "{ foo; };" > %t.list +; RUN: ld.lld -m elf_x86_64 -o %t --dynamic-list %t.list -pie %t.o +; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s + +; CHECK: Name: foo@ +; CHECK-NEXT: Value: 0x1010 +; CHECK-NEXT: Size: 1 +; CHECK-NEXT: Binding: Global (0x1) +; CHECK-NEXT: Type: Function +; CHECK-NEXT: Other: 0 +; CHECK-NEXT: Section: .text +; CHECK-NEXT: } + +target triple = "x86_64-unknown-linux-gnu" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +define void @_start() { + ret void +} + +define void @foo() { + ret void +} diff --git a/lld/test/ELF/lto/shlib-undefined.ll b/lld/test/ELF/lto/shlib-undefined.ll new file mode 100644 index 00000000000..db60de8e21b --- /dev/null +++ b/lld/test/ELF/lto/shlib-undefined.ll @@ -0,0 +1,27 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: echo .global __progname > %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 -o %t %t.o %t2.so +; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s + +; CHECK: Name: __progname@ +; CHECK-NEXT: Value: 0x11010 +; CHECK-NEXT: Size: 1 +; CHECK-NEXT: Binding: Global (0x1) +; CHECK-NEXT: Type: Function +; CHECK-NEXT: Other: 0 +; CHECK-NEXT: Section: .text +; CHECK-NEXT: } + +target triple = "x86_64-unknown-linux-gnu" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +define void @_start() { + ret void +} + +define void @__progname() { + ret void +} |

