[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