[llvm] r358656 - [yaml2elf/obj2yaml] - Allow normal parsing/dumping of the .rela.dyn section
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 18 04:02:07 PDT 2019
Author: grimar
Date: Thu Apr 18 04:02:07 2019
New Revision: 358656
URL: http://llvm.org/viewvc/llvm-project?rev=358656&view=rev
Log:
[yaml2elf/obj2yaml] - Allow normal parsing/dumping of the .rela.dyn section
.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
Added:
llvm/trunk/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml
Modified:
llvm/trunk/tools/yaml2obj/yaml2elf.cpp
Added: llvm/trunk/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml?rev=358656&view=auto
==============================================================================
--- llvm/trunk/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml (added)
+++ llvm/trunk/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml Thu Apr 18 04:02:07 2019
@@ -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
Modified: llvm/trunk/tools/yaml2obj/yaml2elf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=358656&r1=358655&r2=358656&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Thu Apr 18 04:02:07 2019
@@ -278,8 +278,9 @@ bool ELFState<ELFT>::initSectionHeaders(
// 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))
More information about the llvm-commits
mailing list