diff options
| author | George Rimar <grimar@accesssoftek.com> | 2019-06-14 11:13:32 +0000 |
|---|---|---|
| committer | George Rimar <grimar@accesssoftek.com> | 2019-06-14 11:13:32 +0000 |
| commit | 43f62ff17c12f5ecfe037a1f366e07f91db58118 (patch) | |
| tree | 03728ba09246ff5c3428d0bf8ff1872b1c5e3531 | |
| parent | cfa1a62a4cc4c5403c999e596f723cd2ea2be587 (diff) | |
| download | bcm5719-llvm-43f62ff17c12f5ecfe037a1f366e07f91db58118.tar.gz bcm5719-llvm-43f62ff17c12f5ecfe037a1f366e07f91db58118.zip | |
[yaml2obj] - Allow setting the custom Address for .strtab
Despite the fact that .strtab is non-allocatable,
there is no reason to disallow setting the custom address
for it.
The patch also adds a test case showing we can set any address
we want for other implicit sections.
Differential revision: https://reviews.llvm.org/D63137
llvm-svn: 363368
| -rw-r--r-- | llvm/test/tools/yaml2obj/dynsym-dynstr-addr.yaml | 40 | ||||
| -rw-r--r-- | llvm/test/tools/yaml2obj/implicit-sections-addr.yaml | 57 | ||||
| -rw-r--r-- | llvm/tools/yaml2obj/yaml2elf.cpp | 5 |
3 files changed, 59 insertions, 43 deletions
diff --git a/llvm/test/tools/yaml2obj/dynsym-dynstr-addr.yaml b/llvm/test/tools/yaml2obj/dynsym-dynstr-addr.yaml deleted file mode 100644 index 194c5e5deb3..00000000000 --- a/llvm/test/tools/yaml2obj/dynsym-dynstr-addr.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# RUN: yaml2obj %s -o %t -# RUN: llvm-readobj --sections %t | FileCheck %s - -## Check yaml2obj does not ignore the address of the -## explicitly listed .dynstr and .dynsym sections. - -# CHECK: Name: .dynstr -# CHECK-NEXT: Type: SHT_STRTAB -# CHECK-NEXT: Flags [ -# CHECK-NEXT: SHF_ALLOC -# CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 - -# CHECK: Name: .dynsym -# CHECK-NEXT: Type: SHT_DYNSYM -# CHECK-NEXT: Flags [ -# CHECK-NEXT: SHF_ALLOC -# CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x2000 - -!ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN - Machine: EM_X86_64 -Sections: - - Name: .dynstr - Type: SHT_STRTAB - Flags: [ SHF_ALLOC ] - Address: 0x1000 - EntSize: 0x1 - - Name: .dynsym - Type: SHT_DYNSYM - Flags: [ SHF_ALLOC ] - Address: 0x2000 - EntSize: 0x18 -DynamicSymbols: - - Name: foo - Binding: STB_GLOBAL diff --git a/llvm/test/tools/yaml2obj/implicit-sections-addr.yaml b/llvm/test/tools/yaml2obj/implicit-sections-addr.yaml new file mode 100644 index 00000000000..8151daed1d6 --- /dev/null +++ b/llvm/test/tools/yaml2obj/implicit-sections-addr.yaml @@ -0,0 +1,57 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-readobj --sections %t | FileCheck %s + +## Check yaml2obj does not ignore the address of the +## explicitly listed .dynstr, .dynsym, .strtab +## and .symtab sections. + +# CHECK: Name: .dynstr +# CHECK-NEXT: Type: SHT_STRTAB +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x1000 + +# CHECK: Name: .dynsym +# CHECK-NEXT: Type: SHT_DYNSYM +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x2000 + +# CHECK: Name: .strtab +# CHECK-NEXT: Type: SHT_STRTAB +# CHECK-NEXT: Flags [ +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x3000 + +# CHECK: Name: .symtab +# CHECK-NEXT: Type: SHT_SYMTAB +# CHECK-NEXT: Flags [ +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x4000 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .dynstr + Type: SHT_STRTAB + Flags: [ SHF_ALLOC ] + Address: 0x1000 + - Name: .dynsym + Type: SHT_DYNSYM + Flags: [ SHF_ALLOC ] + Address: 0x2000 + - Name: .strtab + Type: SHT_STRTAB + Address: 0x3000 + - Name: .symtab + Type: SHT_SYMTAB + Address: 0x4000 +DynamicSymbols: + - Name: foo + Binding: STB_GLOBAL diff --git a/llvm/tools/yaml2obj/yaml2elf.cpp b/llvm/tools/yaml2obj/yaml2elf.cpp index cd61561dc7f..098c3d6f6bf 100644 --- a/llvm/tools/yaml2obj/yaml2elf.cpp +++ b/llvm/tools/yaml2obj/yaml2elf.cpp @@ -489,10 +489,9 @@ void ELFState<ELFT>::initStrtabSectionHeader(Elf_Shdr &SHeader, StringRef Name, else if (Name == ".dynstr") SHeader.sh_flags = ELF::SHF_ALLOC; - // If .dynstr section is explicitly described in the YAML + // If the section is explicitly described in the YAML // then we want to use its section address. - // TODO: Allow this for any explicitly described section. - if (YAMLSec && Name == ".dynstr") + if (YAMLSec) SHeader.sh_addr = YAMLSec->Address; } |

