Revert "Revert r363377: [yaml2obj] - Allow setting custom section types for implicit sections."

LLD test case will be fixed in a following commit.

Original commit message:

[yaml2obj] - Allow setting custom section types for implicit sections.

We were hardcoding the final section type for sections that
are usually implicit. The patch fixes that.

This also fixes a few issues in existent test cases and removes
one precompiled object.

Differential revision: https://reviews.llvm.org/D63267


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363401 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
George Rimar
2019-06-14 14:25:34 +00:00
parent 642cc2d884
commit b728126619
8 changed files with 113 additions and 31 deletions
@@ -1,11 +1,22 @@
## wrong-shstrtab-type.elf-x86-64 contains .shstrtab section which has SHT_PROGBITS type.
## Check we do not fail to dump the section headers in this case.
## Check we do not fail to dump the section headers when
## a .shstrtab section does not have a SHT_STRTAB type.
# RUN: llvm-readobj -S %p/Inputs/wrong-shstrtab-type.elf-x86-64 | FileCheck %s --check-prefix LLVM
# RUN: llvm-readelf -S %p/Inputs/wrong-shstrtab-type.elf-x86-64 | FileCheck %s --check-prefix GNU
# RUN: yaml2obj %s -o %t1
# RUN: llvm-readobj -S %t1 | FileCheck %s --check-prefix LLVM
# RUN: llvm-readelf -S %t1 | FileCheck %s --check-prefix GNU
# LLVM: Name: .shstrtab
# LLVM-NEXT: Type: SHT_PROGBITS
# GNU: [Nr] Name Type
# GNU: [ 3] .shstrtab PROGBITS
# GNU: [ 1] .shstrtab PROGBITS
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .shstrtab
Type: SHT_PROGBITS
+10 -10
View File
@@ -24,17 +24,17 @@
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .symtab
Info: 42
Type: SHT_SYMTAB
- Name: .dynsym
Info: 26
Type: SHT_SYMTAB
- Name: .symtab
Info: 42
Type: SHT_SYMTAB
- Name: .dynsym
Info: 26
Type: SHT_DYNSYM
Symbols:
- Name: foo
Binding: STB_GLOBAL
+9 -11
View File
@@ -2,20 +2,18 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-readobj --sections %t | FileCheck %s
## TODO: the output is still SHT_SYMTAB because we do not yet
## support changing it.
# CHECK: Name: .symtab
# CHECK-NEXT: Type: SHT_SYMTAB
# CHECK-NEXT: Type: SHT_DYNAMIC
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .symtab
Type: SHT_DYNAMIC
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .symtab
Type: SHT_DYNAMIC
Symbols:
- Name: foo
Binding: STB_GLOBAL
@@ -19,4 +19,4 @@ FileHeader:
Machine: EM_X86_64
Sections:
- Name: .dynsym
Type: SHT_SYMTAB
Type: SHT_DYNSYM
@@ -0,0 +1,69 @@
## Here we check the types set for implicit sections
## in different cases.
## Check the types set by default in case sections were implicitly
## added and not described in the YAML.
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-readobj -S %t1 | FileCheck %s --check-prefix=CASE1
# CASE1: Name: .symtab
# CASE1-NEXT: Type: SHT_SYMTAB
# CASE1: Name: .strtab
# CASE1-NEXT: Type: SHT_STRTAB
# CASE1: Name: .shstrtab
# CASE1-NEXT: Type: SHT_STRTAB
# CASE1: Name: .dynsym
# CASE1-NEXT: Type: SHT_DYNSYM
# CASE1: Name: .dynstr
# CASE1-NEXT: Type: SHT_STRTAB
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
## Needed to force the creation of the .dynsym and .dynstr.
DynamicSymbols:
- Name: foo
- Binding: STB_GLOBAL
## Check we can set any arbitrary types when describing sections
## that are usually implicit.
# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-readobj -S %t2 | FileCheck %s --check-prefix=CASE2
# CASE2: Name: .symtab
# CASE2-NEXT: Type: SHT_DYNAMIC
# CASE2: Name: .strtab
# CASE2-NEXT: Type: SHT_RELA
# CASE2: Name: .shstrtab
# CASE2-NEXT: Type: SHT_PROGBITS
# CASE2: Name: .dynsym
# CASE2-NEXT: Type: SHT_NOTE
# CASE2: Name: .dynstr
# CASE2-NEXT: Type: SHT_NOBITS
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .symtab
Type: SHT_DYNAMIC
- Name: .strtab
Type: SHT_RELA
- Name: .shstrtab
Type: SHT_PROGBITS
- Name: .dynsym
Type: SHT_NOTE
- Name: .dynstr
Type: SHT_NOBITS
## Needed to set the proper content size for .symtab, so
## that llvm-readobj can dump this section.
Symbols:
- Name: foo
@@ -27,7 +27,7 @@ Sections:
- Name: .symtab
Type: SHT_SYMTAB
- Name: .dynsym
Type: SHT_SYMTAB
Type: SHT_DYNSYM
## Check we can set arbitrary flags for .symtab/.dynsym.
@@ -57,7 +57,7 @@ Sections:
Type: SHT_SYMTAB
Flags: [ SHF_ALLOC, SHF_STRINGS ]
- Name: .dynsym
Type: SHT_SYMTAB
Type: SHT_DYNSYM
Flags: [ SHF_STRINGS ]
## Check no flags are set by default for .symtab when it is not
+6 -2
View File
@@ -403,7 +403,11 @@ void ELFState<ELFT>::initSymtabSectionHeader(Elf_Shdr &SHeader,
zero(SHeader);
SHeader.sh_name = DotShStrtab.getOffset(IsStatic ? ".symtab" : ".dynsym");
SHeader.sh_type = IsStatic ? ELF::SHT_SYMTAB : ELF::SHT_DYNSYM;
if (YAMLSec)
SHeader.sh_type = YAMLSec->Type;
else
SHeader.sh_type = IsStatic ? ELF::SHT_SYMTAB : ELF::SHT_DYNSYM;
if (RawSec && !RawSec->Link.empty()) {
// If the Link field is explicitly defined in the document,
@@ -467,7 +471,7 @@ void ELFState<ELFT>::initStrtabSectionHeader(Elf_Shdr &SHeader, StringRef Name,
ELFYAML::Section *YAMLSec) {
zero(SHeader);
SHeader.sh_name = DotShStrtab.getOffset(Name);
SHeader.sh_type = ELF::SHT_STRTAB;
SHeader.sh_type = YAMLSec ? YAMLSec->Type : ELF::SHT_STRTAB;
SHeader.sh_addralign = YAMLSec ? (uint64_t)YAMLSec->AddressAlign : 1;
ELFYAML::RawContentSection *RawSec =