ELF2: Add DT_REL{,A}ENT and DT_SYMENT.
According to the ELF specification, these dynamic array entries are mandatory. http://reviews.llvm.org/D13303 llvm-svn: 248952
This commit is contained in:
parent
f1eca25b16
commit
2dfd74f758
|
@ -189,9 +189,11 @@ template <class ELFT> void DynamicSection<ELFT>::finalize() {
|
|||
unsigned NumEntries = 0;
|
||||
if (RelaDynSec.hasRelocs()) {
|
||||
++NumEntries; // DT_RELA / DT_REL
|
||||
++NumEntries; // DT_RELASZ / DTRELSZ
|
||||
++NumEntries; // DT_RELASZ / DT_RELSZ
|
||||
++NumEntries; // DT_RELAENT / DT_RELENT
|
||||
}
|
||||
++NumEntries; // DT_SYMTAB
|
||||
++NumEntries; // DT_SYMENT
|
||||
++NumEntries; // DT_STRTAB
|
||||
++NumEntries; // DT_STRSZ
|
||||
++NumEntries; // DT_HASH
|
||||
|
@ -227,12 +229,20 @@ template <class ELFT> void DynamicSection<ELFT>::writeTo(uint8_t *Buf) {
|
|||
P->d_tag = IsRela ? DT_RELASZ : DT_RELSZ;
|
||||
P->d_un.d_val = RelaDynSec.getSize();
|
||||
++P;
|
||||
|
||||
P->d_tag = IsRela ? DT_RELAENT : DT_RELENT;
|
||||
P->d_un.d_val = IsRela ? sizeof(Elf_Rela) : sizeof(Elf_Rel);
|
||||
++P;
|
||||
}
|
||||
|
||||
P->d_tag = DT_SYMTAB;
|
||||
P->d_un.d_ptr = DynSymSec.getVA();
|
||||
++P;
|
||||
|
||||
P->d_tag = DT_SYMENT;
|
||||
P->d_un.d_ptr = sizeof(Elf_Sym);
|
||||
++P;
|
||||
|
||||
P->d_tag = DT_STRTAB;
|
||||
P->d_un.d_ptr = DynStrSec.getVA();
|
||||
++P;
|
||||
|
|
|
@ -313,6 +313,9 @@ template <class ELFT>
|
|||
class DynamicSection final : public OutputSectionBase<ELFT::Is64Bits> {
|
||||
typedef OutputSectionBase<ELFT::Is64Bits> Base;
|
||||
typedef typename Base::HeaderT HeaderT;
|
||||
typedef typename llvm::object::ELFFile<ELFT>::Elf_Rel Elf_Rel;
|
||||
typedef typename llvm::object::ELFFile<ELFT>::Elf_Rela Elf_Rela;
|
||||
typedef typename llvm::object::ELFFile<ELFT>::Elf_Sym Elf_Sym;
|
||||
|
||||
public:
|
||||
DynamicSection(SymbolTable &SymTab, HashTableSection<ELFT> &HashSec,
|
||||
|
|
|
@ -45,7 +45,9 @@
|
|||
// CHECK-NEXT: Tag Type Name/Value
|
||||
// CHECK-NEXT: 0x0000000000000007 RELA [[RELAADDR]]
|
||||
// CHECK-NEXT: 0x0000000000000008 RELASZ [[RELASIZE]] (bytes)
|
||||
// CHECK-NEXT: 0x0000000000000009 RELAENT 24 (bytes)
|
||||
// CHECK-NEXT: 0x0000000000000006 SYMTAB
|
||||
// CHECK-NEXT: 0x000000000000000B SYMENT 24 (bytes)
|
||||
// CHECK-NEXT: 0x0000000000000005 STRTAB
|
||||
// CHECK-NEXT: 0x000000000000000A STRSZ
|
||||
// CHECK-NEXT: 0x0000000000000004 HASH
|
||||
|
|
|
@ -117,7 +117,22 @@
|
|||
// CHECK-NEXT: Address: [[RELADDR:.*]]
|
||||
// CHECK-NEXT: Offset:
|
||||
// CHECK-NEXT: Size: [[RELSIZE:.*]]
|
||||
// CHECK-NEXT: Link:
|
||||
// CHECK-NEXT: Info:
|
||||
// CHECK-NEXT: AddressAlignment:
|
||||
// CHECK-NEXT: EntrySize: [[RELENT:.*]]
|
||||
|
||||
// CHECK: Name: .symtab
|
||||
// CHECK-NEXT: Type: SHT_SYMTAB
|
||||
// CHECK-NEXT: Flags [
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: Address:
|
||||
// CHECK-NEXT: Offset:
|
||||
// CHECK-NEXT: Size:
|
||||
// CHECK-NEXT: Link:
|
||||
// CHECK-NEXT: Info:
|
||||
// CHECK-NEXT: AddressAlignment:
|
||||
// CHECK-NEXT: EntrySize: [[SYMENT:.*]]
|
||||
|
||||
// CHECK: Symbols [
|
||||
// CHECK-NEXT: Symbol {
|
||||
|
@ -231,7 +246,9 @@
|
|||
// CHECK-NEXT: Tag Type Name/Value
|
||||
// CHECK-NEXT: 0x00000011 REL [[RELADDR]]
|
||||
// CHECK-NEXT: 0x00000012 RELSZ [[RELSIZE]] (bytes)
|
||||
// CHECK-NEXT: 0x00000013 RELENT [[RELENT]] (bytes)
|
||||
// CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]
|
||||
// CHECK-NEXT: 0x0000000B SYMENT [[SYMENT]] (bytes)
|
||||
// CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]
|
||||
// CHECK-NEXT: 0x0000000A STRSZ
|
||||
// CHECK-NEXT: 0x00000004 HASH [[HASHADDR]]
|
||||
|
|
Loading…
Reference in New Issue