Index: llvm/test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml =================================================================== --- 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 Index: llvm/test/tools/obj2yaml/rel-rela-section.yaml =================================================================== --- /dev/null +++ llvm/test/tools/obj2yaml/rel-rela-section.yaml @@ -0,0 +1,33 @@ +## 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 +## Add at least one symbol to trigger the .dynsym emission. +DynamicSymbols: + - Name: bar + Binding: STB_GLOBAL Index: llvm/tools/obj2yaml/elf2yaml.cpp =================================================================== --- llvm/tools/obj2yaml/elf2yaml.cpp +++ llvm/tools/obj2yaml/elf2yaml.cpp @@ -575,6 +575,11 @@ 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();