[lld] r191567 - [ELF] Handle copy relocations for PC32.

Michael J. Spencer bigcheesegs at gmail.com
Fri Sep 27 14:30:28 PDT 2013


Author: mspencer
Date: Fri Sep 27 16:30:27 2013
New Revision: 191567

URL: http://llvm.org/viewvc/llvm-project?rev=191567&view=rev
Log:
[ELF] Handle copy relocations for PC32.

This will eventually need to be refactored to better handle COPY relocations,
as other relocations can also generate them. I'm not yet sure the exact
circumstances in which they are needed yet.

Added:
    lld/trunk/test/elf/Inputs/undef-pc32.o
Modified:
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
    lld/trunk/test/elf/undef-from-main-dso.test

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp?rev=191567&r1=191566&r2=191567&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp Fri Sep 27 16:30:27 2013
@@ -407,7 +407,10 @@ public:
     if (auto sla = dyn_cast<SharedLibraryAtom>(ref.target())) {
       if (sla->type() == SharedLibraryAtom::Type::Code)
         return handlePLT32(ref);
-      else
+      else if (sla->type() == SharedLibraryAtom::Type::Data) {
+        const_cast<Reference &>(ref).setTarget(getObjectEntry(sla));
+        return error_code::success();
+      } else
         return handleGOTPCREL(ref);
     }
     return handleIFUNC(ref);

Added: lld/trunk/test/elf/Inputs/undef-pc32.o
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/undef-pc32.o?rev=191567&view=auto
==============================================================================
Binary files lld/trunk/test/elf/Inputs/undef-pc32.o (added) and lld/trunk/test/elf/Inputs/undef-pc32.o Fri Sep 27 16:30:27 2013 differ

Modified: lld/trunk/test/elf/undef-from-main-dso.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/undef-from-main-dso.test?rev=191567&r1=191566&r2=191567&view=diff
==============================================================================
--- lld/trunk/test/elf/undef-from-main-dso.test (original)
+++ lld/trunk/test/elf/undef-from-main-dso.test Fri Sep 27 16:30:27 2013
@@ -1,6 +1,9 @@
 RUN: lld -flavor gnu -e main -o %t -L%p/Inputs -lundef %p/Inputs/undef.o
 RUN: llvm-readobj -relocations -symbols %t | FileCheck %s
 
+RUN: lld -flavor gnu -e main -o %t -L%p/Inputs -lundef %p/Inputs/undef-pc32.o
+RUN: llvm-readobj -relocations -symbols %t | FileCheck %s
+
 # DSO source code:
 # int x[2] = { 1, 2 };
 #





More information about the llvm-commits mailing list