Skip to content

Commit

Permalink
[yaml2elf/obj2yaml] - Allow normal parsing/dumping of the .rela.dyn s…
Browse files Browse the repository at this point in the history
…ection

.rela.dyn is a section that has sh_info normally
set to zero. And Info is an optional field in the description
of the relocation section in YAML.

But currently, yaml2obj would fail to produce the object when
Info is not explicitly listed.

The patch fixes the issue.

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

llvm-svn: 358656
  • Loading branch information
George Rimar committed Apr 18, 2019
1 parent 99b7277 commit a630b34
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
44 changes: 44 additions & 0 deletions llvm/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml
@@ -0,0 +1,44 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-readobj --sections %t | FileCheck %s
# RUN: obj2yaml %t | FileCheck %s --check-prefix=YAML

## .rela.dyn is a dynamic relocation section that normally has
## no value in sh_info field. Check we are able to use
## yaml2obj/obj2yaml without needing to explicitly set it.

# CHECK: Name: .rela.dyn
# CHECK-NEXT: Type: SHT_RELA
# CHECK-NEXT: Flags [
# CHECK-NEXT: SHF_ALLOC
# CHECK-NEXT: ]
# CHECK-NEXT: Address:
# CHECK-NEXT: Offset:
# CHECK-NEXT: Size:
# CHECK-NEXT: Link:
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment:
# CHECK-NEXT: EntrySize:

# YAML: - Name: .rela.dyn
# YAML-NEXT: Type: SHT_RELA
# YAML-NEXT: Flags: [ SHF_ALLOC ]
# YAML-NEXT: Link: .dynsym
# YAML-NEXT: EntSize: 0x0000000000000018

--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Entry: 0x0000000000001000
Sections:
- Name: .rela.dyn
Type: SHT_RELA
Flags: [ SHF_ALLOC ]
Link: .dynsym
EntSize: 0x0000000000000018
# Add at least one symbol to trigger the .dynsym emission.
DynamicSymbols:
- Name: bar
Binding: STB_GLOBAL
5 changes: 3 additions & 2 deletions llvm/tools/yaml2obj/yaml2elf.cpp
Expand Up @@ -278,8 +278,9 @@ bool ELFState<ELFT>::initSectionHeaders(std::vector<Elf_Shdr> &SHeaders,
// For relocation section set link to .symtab by default.
SHeader.sh_link = getDotSymTabSecNo();

unsigned Index;
if (!convertSectionIndex(SN2I, S->Name, S->RelocatableSec, Index))
unsigned Index = 0;
if (!S->RelocatableSec.empty() &&
!convertSectionIndex(SN2I, S->Name, S->RelocatableSec, Index))
return false;
SHeader.sh_info = Index;
if (!writeSectionContent(SHeader, *S, CBA))
Expand Down

0 comments on commit a630b34

Please sign in to comment.