[llvm] 3fe7f1d - [yaml2obj] - Make .symtab to be not mandatory section for SHT_REL[A] section.

Georgii Rymar via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 29 01:49:33 PDT 2019


Author: Georgii Rymar
Date: 2019-10-29T11:43:12+03:00
New Revision: 3fe7f1dcf44ced0648fd0aef2b33056bbee37881

URL: https://github.com/llvm/llvm-project/commit/3fe7f1dcf44ced0648fd0aef2b33056bbee37881
DIFF: https://github.com/llvm/llvm-project/commit/3fe7f1dcf44ced0648fd0aef2b33056bbee37881.diff

LOG: [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

Added: 
    

Modified: 
    llvm/lib/ObjectYAML/ELFEmitter.cpp
    llvm/test/Object/invalid.test
    llvm/test/Object/objdump-sectionheaders.test
    llvm/test/tools/llvm-objcopy/ELF/no-symbol-relocation.test
    llvm/test/tools/llvm-readobj/all.test
    llvm/test/tools/llvm-readobj/elf-reloc-negative-addend-no-sym.test
    llvm/test/tools/obj2yaml/elf-ppc64-relocations.yaml
    llvm/test/tools/obj2yaml/no-symbol-reloc.test
    llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp
index 6a4e00c62857..64b5cd4df5bf 100644
--- a/llvm/lib/ObjectYAML/ELFEmitter.cpp
+++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp
@@ -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);

diff  --git a/llvm/test/Object/invalid.test b/llvm/test/Object/invalid.test
index 396776c5f919..2c95eea74f24 100644
--- a/llvm/test/Object/invalid.test
+++ b/llvm/test/Object/invalid.test
@@ -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.
 

diff  --git a/llvm/test/Object/objdump-sectionheaders.test b/llvm/test/Object/objdump-sectionheaders.test
index fba4fa799805..aab3f54d7dbf 100644
--- a/llvm/test/Object/objdump-sectionheaders.test
+++ b/llvm/test/Object/objdump-sectionheaders.test
@@ -39,3 +39,4 @@ Sections:
     Address: 0x0000000000000038
     Info:    .text
     Relocations:
+Symbols: []

diff  --git a/llvm/test/tools/llvm-objcopy/ELF/no-symbol-relocation.test b/llvm/test/tools/llvm-objcopy/ELF/no-symbol-relocation.test
index 4b13dda6484b..91040170d739 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/no-symbol-relocation.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/no-symbol-relocation.test
@@ -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 {

diff  --git a/llvm/test/tools/llvm-readobj/all.test b/llvm/test/tools/llvm-readobj/all.test
index 944ad0384001..5edda0af1f9c 100644
--- a/llvm/test/tools/llvm-readobj/all.test
+++ b/llvm/test/tools/llvm-readobj/all.test
@@ -110,3 +110,4 @@ ProgramHeaders:
   - Type: PT_NOTE
     Sections:
       - Section: .note.gnu.build-id
+Symbols: []

diff  --git a/llvm/test/tools/llvm-readobj/elf-reloc-negative-addend-no-sym.test b/llvm/test/tools/llvm-readobj/elf-reloc-negative-addend-no-sym.test
index 86ec658f19a8..3a318d52175f 100644
--- a/llvm/test/tools/llvm-readobj/elf-reloc-negative-addend-no-sym.test
+++ b/llvm/test/tools/llvm-readobj/elf-reloc-negative-addend-no-sym.test
@@ -29,7 +29,6 @@ Sections:
     Size: 0x10
   - Name: .rela.text
     Type: SHT_RELA
-    Link: .symtab
     Info: .text
     Relocations:
       - Offset: 0

diff  --git a/llvm/test/tools/obj2yaml/elf-ppc64-relocations.yaml b/llvm/test/tools/obj2yaml/elf-ppc64-relocations.yaml
index 68be4276fc2f..d80d9290cc81 100644
--- a/llvm/test/tools/obj2yaml/elf-ppc64-relocations.yaml
+++ b/llvm/test/tools/obj2yaml/elf-ppc64-relocations.yaml
@@ -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

diff  --git a/llvm/test/tools/obj2yaml/no-symbol-reloc.test b/llvm/test/tools/obj2yaml/no-symbol-reloc.test
index 09299968885a..56d8c1ae101b 100644
--- a/llvm/test/tools/obj2yaml/no-symbol-reloc.test
+++ b/llvm/test/tools/obj2yaml/no-symbol-reloc.test
@@ -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

diff  --git a/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml b/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml
index 54dd2e7b9284..84e5c13b53d6 100644
--- a/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml
+++ b/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml
@@ -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


        


More information about the llvm-commits mailing list