summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Driver.cpp6
-rw-r--r--lld/test/ELF/Inputs/wrap-with-archive.s5
-rw-r--r--lld/test/ELF/wrap-with-archive.s13
3 files changed, 21 insertions, 3 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 51daa81edc8..13b6119e2dc 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -1550,6 +1550,9 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
Out::ElfHeader = make<OutputSection>("", 0, SHF_ALLOC);
Out::ElfHeader->Size = sizeof(typename ELFT::Ehdr);
+ // Create wrapped symbols for -wrap option.
+ std::vector<WrappedSymbol> Wrapped = addWrappedSymbols<ELFT>(Args);
+
// We need to create some reserved symbols such as _end. Create them.
if (!Config->Relocatable)
addReservedSymbols();
@@ -1562,9 +1565,6 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
if (!Config->Relocatable)
Symtab->scanVersionScript();
- // Create wrapped symbols for -wrap option.
- std::vector<WrappedSymbol> Wrapped = addWrappedSymbols<ELFT>(Args);
-
// Do link-time optimization if given files are LLVM bitcode files.
// This compiles bitcode files into real object files.
//
diff --git a/lld/test/ELF/Inputs/wrap-with-archive.s b/lld/test/ELF/Inputs/wrap-with-archive.s
new file mode 100644
index 00000000000..93aaddc8806
--- /dev/null
+++ b/lld/test/ELF/Inputs/wrap-with-archive.s
@@ -0,0 +1,5 @@
+.global __executable_start
+.global __wrap_get_executable_start
+
+__wrap_get_executable_start:
+ movabs $__executable_start,%rdx
diff --git a/lld/test/ELF/wrap-with-archive.s b/lld/test/ELF/wrap-with-archive.s
new file mode 100644
index 00000000000..1bfbdcef30d
--- /dev/null
+++ b/lld/test/ELF/wrap-with-archive.s
@@ -0,0 +1,13 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/wrap-with-archive.s -o %t2
+// RUN: llvm-ar rcs %t3 %t2
+// RUN: ld.lld -o %t4 %t %t3 -wrap get_executable_start
+
+// Regression test for https://bugs.llvm.org/show_bug.cgi?id=40134
+
+.global get_executable_start
+.global _start
+
+_start:
+ jmp get_executable_start
OpenPOWER on IntegriCloud