mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-04 01:11:44 +00:00
[yaml2obj] - Make .symtab to be not mandatory section for SHT_REL[A] section.
Before this change .symtab section was required for SHT_REL[A] section declarations. yaml2obj automatically defined it in case when YAML document did not have it. With this change it is now possible to produce an object that has a relocation section, but has no symbol table. It simplifies the code and also it is inline with how we handle Link fields for another special sections. Differential revision: https://reviews.llvm.org/D69260
This commit is contained in:
parent
5b3c0f5abf
commit
e3a21fcc35
@ -205,17 +205,10 @@ template <class ELFT>
|
||||
ELFState<ELFT>::ELFState(ELFYAML::Object &D, yaml::ErrorHandler EH)
|
||||
: Doc(D), ErrHandler(EH) {
|
||||
StringSet<> DocSections;
|
||||
for (std::unique_ptr<ELFYAML::Section> &D : Doc.Sections) {
|
||||
for (std::unique_ptr<ELFYAML::Section> &D : Doc.Sections)
|
||||
if (!D->Name.empty())
|
||||
DocSections.insert(D->Name);
|
||||
|
||||
// Some sections wants to link to .symtab by default.
|
||||
// That means we want to create the symbol table for them.
|
||||
if (D->Type == llvm::ELF::SHT_REL || D->Type == llvm::ELF::SHT_RELA)
|
||||
if (!Doc.Symbols && D->Link.empty())
|
||||
Doc.Symbols.emplace();
|
||||
}
|
||||
|
||||
// Insert SHT_NULL section implicitly when it is not defined in YAML.
|
||||
if (Doc.Sections.empty() || Doc.Sections.front()->Type != ELF::SHT_NULL)
|
||||
Doc.Sections.insert(
|
||||
@ -742,8 +735,9 @@ void ELFState<ELFT>::writeSectionContent(
|
||||
SHeader.sh_size = SHeader.sh_entsize * Section.Relocations.size();
|
||||
|
||||
// For relocation section set link to .symtab by default.
|
||||
if (Section.Link.empty())
|
||||
SHeader.sh_link = SN2I.get(".symtab");
|
||||
unsigned Link = 0;
|
||||
if (Section.Link.empty() && SN2I.lookup(".symtab", Link))
|
||||
SHeader.sh_link = Link;
|
||||
|
||||
if (!Section.RelocatableSec.empty())
|
||||
SHeader.sh_info = toSectionIndex(Section.RelocatableSec, Section.Name);
|
||||
|
@ -333,6 +333,7 @@ Sections:
|
||||
- Offset: 0x0
|
||||
Type: R_X86_64_64
|
||||
Symbol: 0xFFFFFF
|
||||
Symbols: []
|
||||
|
||||
## Check llvm-readobj does not crash on a truncated ELF.
|
||||
|
||||
|
@ -39,3 +39,4 @@ Sections:
|
||||
Address: 0x0000000000000038
|
||||
Info: .text
|
||||
Relocations:
|
||||
Symbols: []
|
||||
|
@ -21,6 +21,8 @@ Sections:
|
||||
Relocations:
|
||||
- Offset: 0x1000
|
||||
Type: R_X86_64_RELATIVE
|
||||
## TODO: llvm-objcopy crashes without the following line.
|
||||
Symbols: []
|
||||
|
||||
# CHECK: Relocations [
|
||||
# CHECK-NEXT: Section (2) .rel.text {
|
||||
|
@ -110,3 +110,4 @@ ProgramHeaders:
|
||||
- Type: PT_NOTE
|
||||
Sections:
|
||||
- Section: .note.gnu.build-id
|
||||
Symbols: []
|
||||
|
@ -29,7 +29,6 @@ Sections:
|
||||
Size: 0x10
|
||||
- Name: .rela.text
|
||||
Type: SHT_RELA
|
||||
Link: .symtab
|
||||
Info: .text
|
||||
Relocations:
|
||||
- Offset: 0
|
||||
|
@ -12,7 +12,6 @@
|
||||
# CHECK-NEXT: Sections:
|
||||
# CHECK-NEXT: - Name: .rela.text
|
||||
# CHECK-NEXT: Type: SHT_RELA
|
||||
# CHECK-NEXT: Link: .symtab
|
||||
# CHECK-NEXT: EntSize: 0x0000000000000018
|
||||
# CHECK-NEXT: Relocations:
|
||||
# CHECK-NEXT: - Offset: 0x0000000000000000
|
||||
|
@ -16,7 +16,6 @@
|
||||
# CHECK-NEXT: Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
|
||||
# CHECK-NEXT: - Name: .rela.text
|
||||
# CHECK-NEXT: Type: SHT_RELA
|
||||
# CHECK-NEXT: Link: .symtab
|
||||
# CHECK-NEXT: EntSize: 0x0000000000000018
|
||||
# CHECK-NEXT: Info: .text
|
||||
# CHECK-NEXT: Relocations:
|
||||
@ -24,7 +23,6 @@
|
||||
# CHECK-NEXT: Type: R_X86_64_NONE
|
||||
# CHECK-NEXT: - Offset: 0x0000000000000004
|
||||
# CHECK-NEXT: Type: R_X86_64_NONE
|
||||
# CHECK-NEXT: Symbols: []
|
||||
# CHECK-NEXT: ...
|
||||
|
||||
--- !ELF
|
||||
|
@ -12,7 +12,6 @@
|
||||
# CHECK-NEXT: Sections:
|
||||
# CHECK-NEXT: - Name: .rela.text
|
||||
# CHECK-NEXT: Type: SHT_RELA
|
||||
# CHECK-NEXT: Link: .symtab
|
||||
# CHECK-NEXT: EntSize: 0x0000000000000018
|
||||
# CHECK-NEXT: Relocations:
|
||||
# CHECK-NEXT: - Offset: 0x0000000000000001
|
||||
|
Loading…
Reference in New Issue
Block a user