diff options
| author | George Rimar <grimar@accesssoftek.com> | 2018-08-15 11:43:00 +0000 |
|---|---|---|
| committer | George Rimar <grimar@accesssoftek.com> | 2018-08-15 11:43:00 +0000 |
| commit | 5290af8ad9ad8f5258305a11ca82936504fe5f42 (patch) | |
| tree | 2ee8b799fb840d5030328d9c68678ad1e8f26012 | |
| parent | 4b2317ebfb816d53cce4cd19f265e1aab0e04268 (diff) | |
| download | bcm5719-llvm-5290af8ad9ad8f5258305a11ca82936504fe5f42.tar.gz bcm5719-llvm-5290af8ad9ad8f5258305a11ca82936504fe5f42.zip | |
[yaml2obj] - Teach tool to produce SHT_GROUP section with a custom type.
Currently, it is possible to use yaml2obj for producing SHT_GROUP sections
of type GRP_COMDAT. For LLD test case I need to produce an object with
a broken (different from GRP_COMDAT) type.
The patch teaches tool to do such things.
Differential revision: https://reviews.llvm.org/D50761
llvm-svn: 339764
| -rw-r--r-- | llvm/test/tools/yaml2obj/elf-comdat-broken.yaml | 34 | ||||
| -rw-r--r-- | llvm/tools/yaml2obj/yaml2elf.cpp | 3 |
2 files changed, 36 insertions, 1 deletions
diff --git a/llvm/test/tools/yaml2obj/elf-comdat-broken.yaml b/llvm/test/tools/yaml2obj/elf-comdat-broken.yaml new file mode 100644 index 00000000000..14b4d53eeeb --- /dev/null +++ b/llvm/test/tools/yaml2obj/elf-comdat-broken.yaml @@ -0,0 +1,34 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-readobj -sections -elf-section-groups %t | FileCheck %s + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .group + Type: SHT_GROUP + Link: .symtab + Info: foo + Members: + - SectionOrType: 0xFF + - SectionOrType: 3 +Symbols: + Global: + - Name: foo + +## Check we are able to produce SHT_GROUP section with a custom Type (0xFF). +# CHECK: Groups { +# CHECK-NEXT: Group { +# CHECK-NEXT: Name: .group +# CHECK-NEXT: Index: 1 +# CHECK-NEXT: Link: 2 +# CHECK-NEXT: Info: 1 +# CHECK-NEXT: Type: COMDAT (0xFF) +# CHECK-NEXT: Signature: foo +# CHECK-NEXT: Section(s) in group [ +# CHECK-NEXT: .strtab (3) +# CHECK-NEXT: ] +# CHECK-NEXT: } diff --git a/llvm/tools/yaml2obj/yaml2elf.cpp b/llvm/tools/yaml2obj/yaml2elf.cpp index 18f8a271d1b..ccf1bc82865 100644 --- a/llvm/tools/yaml2obj/yaml2elf.cpp +++ b/llvm/tools/yaml2obj/yaml2elf.cpp @@ -537,7 +537,8 @@ bool ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader, unsigned int sectionIndex = 0; if (member.sectionNameOrType == "GRP_COMDAT") sectionIndex = llvm::ELF::GRP_COMDAT; - else if (SN2I.lookup(member.sectionNameOrType, sectionIndex)) { + else if (SN2I.lookup(member.sectionNameOrType, sectionIndex) && + !to_integer(member.sectionNameOrType, sectionIndex)) { WithColor::error() << "Unknown section referenced: '" << member.sectionNameOrType << "' at YAML section' " << Section.Name << "\n"; |

