[lld] r248730 - Add support for got/ptl referring to symbols defined in .o files.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 28 12:48:34 PDT 2015
Author: rafael
Date: Mon Sep 28 14:48:34 2015
New Revision: 248730
URL: http://llvm.org/viewvc/llvm-project?rev=248730&view=rev
Log:
Add support for got/ptl referring to symbols defined in .o files.
Modified:
lld/trunk/ELF/InputSection.cpp
lld/trunk/ELF/Writer.cpp
lld/trunk/test/elf2/plt.s
Modified: lld/trunk/ELF/InputSection.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=248730&r1=248729&r2=248730&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.cpp (original)
+++ lld/trunk/ELF/InputSection.cpp Mon Sep 28 14:48:34 2015
@@ -51,18 +51,12 @@ void InputSection<ELFT>::relocate(
const auto &Body =
*cast<ELFSymbolBody<ELFT>>(File.getSymbolBody(SymIndex));
SymVA = getSymVA<ELFT>(Body, BssSec);
- if (Target->relocNeedsPlt(Type))
+ if (Target->relocNeedsPlt(Type)) {
SymVA = PltSec.getEntryAddr(Body);
- else if (Target->relocNeedsGot(Type))
+ Type = Target->getPCRelReloc();
+ } else if (Target->relocNeedsGot(Type)) {
SymVA = GotSec.getEntryAddr(Body);
-
- if (Body.kind() == SymbolBody::SharedKind) {
- if (Target->relocNeedsPlt(Type))
- Type = Target->getPCRelReloc();
- else if (Target->relocNeedsGot(Type))
- Type = Target->getPCRelReloc();
- else
- continue;
+ Type = Target->getPCRelReloc();
}
}
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=248730&r1=248729&r2=248730&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Mon Sep 28 14:48:34 2015
@@ -244,8 +244,6 @@ void Writer<ELFT>::scanRelocs(
continue;
GotSec.addEntry(Body);
}
- if (!isa<SharedSymbol<ELFT>>(Body))
- continue;
Body->setUsedInDynamicReloc();
RelaDynSec.addReloc({C, RI});
}
Modified: lld/trunk/test/elf2/plt.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/plt.s?rev=248730&r1=248729&r2=248730&view=diff
==============================================================================
--- lld/trunk/test/elf2/plt.s (original)
+++ lld/trunk/test/elf2/plt.s Mon Sep 28 14:48:34 2015
@@ -14,7 +14,7 @@
// CHECK-NEXT: ]
// CHECK-NEXT: Address: 0x16000
// CHECK-NEXT: Offset:
-// CHECK-NEXT: Size: 16
+// CHECK-NEXT: Size: 24
// CHECK-NEXT: Link: 0
// CHECK-NEXT: Info: 0
// CHECK-NEXT: AddressAlignment: 16
@@ -23,6 +23,7 @@
// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
// CHECK-NEXT: 0x15000 R_X86_64_GLOB_DAT bar 0x0
// CHECK-NEXT: 0x15008 R_X86_64_GLOB_DAT zed 0x0
+// CHECK-NEXT: 0x15010 R_X86_64_GLOB_DAT _start 0x0
// CHECK-NEXT: }
// CHECK-NEXT: ]
@@ -55,3 +56,4 @@ _start:
jmp bar at PLT
jmp bar at PLT
jmp zed at PLT
+ jmp _start at plt
More information about the llvm-commits
mailing list