Index: test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml =================================================================== --- /dev/null +++ test/tools/obj2yaml/elf-reladyn-section-shinfo.yaml @@ -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 need 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: tools/yaml2obj/yaml2elf.cpp =================================================================== --- tools/yaml2obj/yaml2elf.cpp +++ tools/yaml2obj/yaml2elf.cpp @@ -278,8 +278,9 @@ // 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))