aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml44
-rw-r--r--llvm/test/tools/obj2yaml/rel-rela-section.yaml31
-rw-r--r--llvm/tools/obj2yaml/elf2yaml.cpp5
3 files changed, 36 insertions, 44 deletions
diff --git a/llvm/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml b/llvm/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml
deleted file mode 100644
index 0f29064..0000000
--- a/llvm/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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
diff --git a/llvm/test/tools/obj2yaml/rel-rela-section.yaml b/llvm/test/tools/obj2yaml/rel-rela-section.yaml
new file mode 100644
index 0000000..a29c2b2
--- /dev/null
+++ b/llvm/test/tools/obj2yaml/rel-rela-section.yaml
@@ -0,0 +1,31 @@
+## This is a generic test for SHT_REL/SHT_RELA sections.
+
+## Check that we do not print excessive default
+## fields for SHT_REL[A] sections.
+# RUN: yaml2obj %s -o %t1
+# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=YAML
+
+## Note: it is important to have at least two sections with sh_info == 0.
+## Previously we printed a broken Info field in this case.
+## FIXME: We should not print EntSize. Will be fixed by https://reviews.llvm.org/D76227.
+# YAML: - Name: .rela.dyn
+# YAML-NEXT: Type: SHT_RELA
+# YAML-NEXT: EntSize: 0x0000000000000018
+# YAML-NEXT: - Name: .rel.dyn
+# YAML-NEXT: Type: SHT_REL
+# YAML-NEXT: EntSize: 0x0000000000000010
+# YAML-NEXT: - Name
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .rela.dyn
+ Type: SHT_RELA
+ - Name: .rel.dyn
+ Type: SHT_REL
+## Trigger the .dynsym emission.
+DynamicSymbols: []
diff --git a/llvm/tools/obj2yaml/elf2yaml.cpp b/llvm/tools/obj2yaml/elf2yaml.cpp
index 180457b..e6bdc1f 100644
--- a/llvm/tools/obj2yaml/elf2yaml.cpp
+++ b/llvm/tools/obj2yaml/elf2yaml.cpp
@@ -575,6 +575,11 @@ Error ELFDumper<ELFT>::dumpCommonRelocationSection(
if (Error E = dumpCommonSection(Shdr, S))
return E;
+ // Having a zero sh_info field is normal: .rela.dyn is a dynamic
+ // relocation section that normally has no value in this field.
+ if (!Shdr->sh_info)
+ return Error::success();
+
auto InfoSection = Obj.getSection(Shdr->sh_info);
if (!InfoSection)
return InfoSection.takeError();