PltRel = R_AARCH64_JUMP_SLOT;
TlsDescRel = R_AARCH64_TLSDESC;
TlsGotRel = R_AARCH64_TLS_TPREL64;
- GotEntrySize = 8;
- GotPltEntrySize = 8;
PltEntrySize = 16;
PltHeaderSize = 32;
DefaultMaxPageSize = 65536;
RelativeRel = R_AMDGPU_RELATIVE64;
GotRel = R_AMDGPU_ABS64;
NoneRel = R_AMDGPU_NONE;
- GotEntrySize = 8;
}
static uint32_t getEFlags(InputFile *File) {
TlsModuleIndexRel = R_ARM_TLS_DTPMOD32;
TlsOffsetRel = R_ARM_TLS_DTPOFF32;
GotBaseSymInGotPlt = false;
- GotEntrySize = 4;
- GotPltEntrySize = 4;
PltEntrySize = 16;
PltHeaderSize = 32;
TrapInstr = {0xd4, 0xd4, 0xd4, 0xd4};
PltRel = R_HEX_JMP_SLOT;
RelativeRel = R_HEX_RELATIVE;
GotRel = R_HEX_GLOB_DAT;
- GotEntrySize = 4;
+
// The zero'th GOT entry is reserved for the address of _DYNAMIC. The
// next 3 are reserved for the dynamic loader.
GotPltHeaderEntriesNum = 4;
- GotPltEntrySize = 4;
PltEntrySize = 16;
PltHeaderSize = 32;
template <class ELFT> MIPS<ELFT>::MIPS() {
GotPltHeaderEntriesNum = 2;
DefaultMaxPageSize = 65536;
- GotEntrySize = sizeof(typename ELFT::uint);
- GotPltEntrySize = sizeof(typename ELFT::uint);
GotBaseSymInGotPlt = false;
PltEntrySize = 16;
PltHeaderSize = 32;
PltRel = R_PPC64_JMP_SLOT;
RelativeRel = R_PPC64_RELATIVE;
IRelativeRel = R_PPC64_IRELATIVE;
- GotEntrySize = 8;
PltEntrySize = 4;
- GotPltEntrySize = 8;
GotBaseSymInGotPlt = false;
GotHeaderEntriesNum = 1;
GotPltHeaderEntriesNum = 2;
NoneRel = R_SPARC_NONE;
PltRel = R_SPARC_JMP_SLOT;
RelativeRel = R_SPARC_RELATIVE;
- GotEntrySize = 8;
PltEntrySize = 32;
PltHeaderSize = 4 * PltEntrySize;
TlsGotRel = R_386_TLS_TPOFF;
TlsModuleIndexRel = R_386_TLS_DTPMOD32;
TlsOffsetRel = R_386_TLS_DTPOFF32;
- GotEntrySize = 4;
- GotPltEntrySize = 4;
PltEntrySize = 16;
PltHeaderSize = 16;
TrapInstr = {0xcc, 0xcc, 0xcc, 0xcc}; // 0xcc = INT3
TlsGotRel = R_X86_64_TPOFF64;
TlsModuleIndexRel = R_X86_64_DTPMOD64;
TlsOffsetRel = R_X86_64_DTPOFF64;
- GotEntrySize = 8;
- GotPltEntrySize = 8;
PltEntrySize = 16;
PltHeaderSize = 16;
TrapInstr = {0xcc, 0xcc, 0xcc, 0xcc}; // 0xcc = INT3
return In.Got->getVA() + getGotOffset();
}
-uint64_t Symbol::getGotOffset() const {
- return GotIndex * Target->GotEntrySize;
-}
+uint64_t Symbol::getGotOffset() const { return GotIndex * Config->Wordsize; }
uint64_t Symbol::getGotPltVA() const {
if (IsInIplt)
uint64_t Symbol::getGotPltOffset() const {
if (IsInIplt)
- return PltIndex * Target->GotPltEntrySize;
- return (PltIndex + Target->GotPltHeaderEntriesNum) * Target->GotPltEntrySize;
+ return PltIndex * Config->Wordsize;
+ return (PltIndex + Target->GotPltHeaderEntriesNum) * Config->Wordsize;
}
uint64_t Symbol::getPPC64LongBranchOffset() const {
assert(PPC64BranchltIndex != 0xffff);
- return PPC64BranchltIndex * Target->GotPltEntrySize;
+ return PPC64BranchltIndex * Config->Wordsize;
}
uint64_t Symbol::getPltVA() const {
uint64_t Symbol::getPPC64LongBranchTableVA() const {
assert(PPC64BranchltIndex != 0xffff);
return In.PPC64LongBranchTarget->getVA() +
- PPC64BranchltIndex * Target->GotPltEntrySize;
+ PPC64BranchltIndex * Config->Wordsize;
}
uint64_t Symbol::getSize() const {
}
GotSection::GotSection()
- : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
- Target->GotEntrySize, ".got") {
+ : SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS, Config->Wordsize,
+ ".got") {
// PPC64 saves the ElfSym::GlobalOffsetTable .TOC. as the first entry in the
// .got. If there are no references to .TOC. in the symbol table,
// ElfSym::GlobalOffsetTable will not be defined and we won't need to save
GotPltSection::GotPltSection()
: SyntheticSection(SHF_ALLOC | SHF_WRITE,
Config->EMachine == EM_PPC64 ? SHT_NOBITS : SHT_PROGBITS,
- Target->GotPltEntrySize,
+ Config->Wordsize,
Config->EMachine == EM_PPC64 ? ".plt" : ".got.plt") {}
void GotPltSection::addEntry(Symbol &Sym) {
}
size_t GotPltSection::getSize() const {
- return (Target->GotPltHeaderEntriesNum + Entries.size()) *
- Target->GotPltEntrySize;
+ return (Target->GotPltHeaderEntriesNum + Entries.size()) * Config->Wordsize;
}
void GotPltSection::writeTo(uint8_t *Buf) {
Target->writeGotPltHeader(Buf);
- Buf += Target->GotPltHeaderEntriesNum * Target->GotPltEntrySize;
+ Buf += Target->GotPltHeaderEntriesNum * Config->Wordsize;
for (const Symbol *B : Entries) {
Target->writeGotPlt(Buf, *B);
Buf += Config->Wordsize;
IgotPltSection::IgotPltSection()
: SyntheticSection(SHF_ALLOC | SHF_WRITE,
Config->EMachine == EM_PPC64 ? SHT_NOBITS : SHT_PROGBITS,
- Target->GotPltEntrySize, getIgotPltName()) {}
+ Config->Wordsize, getIgotPltName()) {}
void IgotPltSection::addEntry(Symbol &Sym) {
assert(Sym.PltIndex == Entries.size());
}
size_t IgotPltSection::getSize() const {
- return Entries.size() * Target->GotPltEntrySize;
+ return Entries.size() * Config->Wordsize;
}
void IgotPltSection::writeTo(uint8_t *Buf) {
}
void PPC64LongBranchTargetSection::writeTo(uint8_t *Buf) {
- assert(Target->GotPltEntrySize == 8);
// If linking non-pic we have the final addresses of the targets and they get
// written to the table directly. For pic the dynamic linker will allocate
// the section and fill it it.
// must be a local-call.
write64(Buf,
Sym->getVA() + getPPC64GlobalEntryToLocalEntryOffset(Sym->StOther));
- Buf += Target->GotPltEntrySize;
+ Buf += 8;
}
}
RelType TlsGotRel;
RelType TlsModuleIndexRel;
RelType TlsOffsetRel;
- unsigned GotEntrySize = 0;
- unsigned GotPltEntrySize = 0;
unsigned PltEntrySize;
unsigned PltHeaderSize;