[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