[lld] r193369 - [ELF][x86-64] Generate PLT for R_*_32S relocs.

Michael J. Spencer bigcheesegs at gmail.com
Thu Oct 24 14:00:26 PDT 2013


Author: mspencer
Date: Thu Oct 24 16:00:25 2013
New Revision: 193369

URL: http://llvm.org/viewvc/llvm-project?rev=193369&view=rev
Log:
[ELF][x86-64] Generate PLT for R_*_32S relocs.

Added:
    lld/trunk/test/elf/Inputs/use-shared-32s.c
    lld/trunk/test/elf/Inputs/use-shared-32s.x86-64
Modified:
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
    lld/trunk/test/elf/x86-64-dynamic.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=193369&r1=193368&r2=193369&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp Thu Oct 24 16:00:25 2013
@@ -384,9 +384,12 @@ public:
   }
 
   ErrorOr<void> handle32S(const Reference &ref) {
-    if (auto sla = dyn_cast_or_null<SharedLibraryAtom>(ref.target()))
+    if (auto sla = dyn_cast_or_null<SharedLibraryAtom>(ref.target())) {
       if (sla->type() == SharedLibraryAtom::Type::Data)
         const_cast<Reference &>(ref).setTarget(getObjectEntry(sla));
+      else if (sla->type() == SharedLibraryAtom::Type::Code)
+        const_cast<Reference &>(ref).setTarget(getPLTEntry(sla));
+    }
     return error_code::success();
   }
 

Added: lld/trunk/test/elf/Inputs/use-shared-32s.c
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/use-shared-32s.c?rev=193369&view=auto
==============================================================================
--- lld/trunk/test/elf/Inputs/use-shared-32s.c (added)
+++ lld/trunk/test/elf/Inputs/use-shared-32s.c Thu Oct 24 16:00:25 2013
@@ -0,0 +1,8 @@
+void foo();
+
+void (*func)();
+
+int main() {
+  func = foo;
+  func();
+}

Added: lld/trunk/test/elf/Inputs/use-shared-32s.x86-64
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/use-shared-32s.x86-64?rev=193369&view=auto
==============================================================================
Binary files lld/trunk/test/elf/Inputs/use-shared-32s.x86-64 (added) and lld/trunk/test/elf/Inputs/use-shared-32s.x86-64 Thu Oct 24 16:00:25 2013 differ

Modified: lld/trunk/test/elf/x86-64-dynamic.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/x86-64-dynamic.test?rev=193369&r1=193368&r2=193369&view=diff
==============================================================================
--- lld/trunk/test/elf/x86-64-dynamic.test (original)
+++ lld/trunk/test/elf/x86-64-dynamic.test Thu Oct 24 16:00:25 2013
@@ -4,6 +4,10 @@ RUN: lld -flavor gnu -target x86_64-linu
 RUN:   %p/Inputs/shared.so-x86-64 --output-filetype=yaml -o %t1 --noinhibit-exec
 RUN: FileCheck %s < %t1
 
+RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared-32s.x86-64 \
+RUN:   %p/Inputs/shared.so-x86-64 --output-filetype=yaml --noinhibit-exec \
+RUN: | FileCheck %s --check-prefix=32S
+
 // Don't check the GOT and PLT names as they are only present in assert builds.
 CHECK:    type:            got
 CHECK:    content:         [ 00, 00, 00, 00, 00, 00, 00, 00 ]
@@ -68,3 +72,10 @@ CHECK:        addend:          -4
 CHECK:shared-library-atoms:
 CHECK:  - name:            foo
 CHECK:    load-name:       shared.so-x86-64
+
+32S: name: main
+32S: kind: R_X86_64_PC32
+32S: target: func
+32S: kind: R_X86_64_32S
+32S: kind: R_X86_64_PC32
+32S: type: stub





More information about the llvm-commits mailing list