diff options
author | Igor Kudrin <ikudrin.dev@gmail.com> | 2015-11-16 17:44:08 +0000 |
---|---|---|
committer | Igor Kudrin <ikudrin.dev@gmail.com> | 2015-11-16 17:44:08 +0000 |
commit | 351b41de4e73b060562f81c8fef0f83a480f9b57 (patch) | |
tree | ab129ea3c38c6fedcf539af7981cf40a816c8a59 /lld/ELF/Target.cpp | |
parent | 7378e7a333d16755104fa4c3f1f6cc50a5b78c0d (diff) | |
download | bcm5719-llvm-351b41de4e73b060562f81c8fef0f83a480f9b57.tar.gz bcm5719-llvm-351b41de4e73b060562f81c8fef0f83a480f9b57.zip |
[ELF2] Remove target specific code from GotPltSection.
The content of reserved entries of the .got.plt section is target specific.
In particular, on x86_64 the zero entry holds the address of the .dynamic section,
but on AArch64 the same info is stored in the zero entry of the .got section.
Differential revision: http://reviews.llvm.org/D14703
llvm-svn: 253239
Diffstat (limited to 'lld/ELF/Target.cpp')
-rw-r--r-- | lld/ELF/Target.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index d28fcfee2b1..269a4d7dc63 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -62,6 +62,7 @@ class X86_64TargetInfo final : public TargetInfo { public: X86_64TargetInfo(); unsigned getPLTRefReloc(unsigned Type) const override; + void writeGotPltHeaderEntries(uint8_t *Buf) const override; void writeGotPltEntry(uint8_t *Buf, uint64_t Plt) const override; void writePltZeroEntry(uint8_t *Buf, uint64_t GotEntryAddr, uint64_t PltEntryAddr) const override; @@ -159,6 +160,8 @@ bool TargetInfo::isRelRelative(uint32_t Type) const { return true; } void TargetInfo::writeGotHeaderEntries(uint8_t *Buf) const {} +void TargetInfo::writeGotPltHeaderEntries(uint8_t *Buf) const {} + X86TargetInfo::X86TargetInfo() { PCRelReloc = R_386_PC32; GotReloc = R_386_GLOB_DAT; @@ -226,6 +229,10 @@ X86_64TargetInfo::X86_64TargetInfo() { PltZeroEntrySize = 16; } +void X86_64TargetInfo::writeGotPltHeaderEntries(uint8_t *Buf) const { + write64le(Buf, Out<ELF64LE>::Dynamic->getVA()); +} + void X86_64TargetInfo::writeGotPltEntry(uint8_t *Buf, uint64_t Plt) const { // Skip 6 bytes of "jmpq *got(%rip)" write32le(Buf, Plt + 6); |