diff options
-rw-r--r-- | llvm/test/tools/yaml2obj/section-link.yaml | 25 | ||||
-rw-r--r-- | llvm/tools/yaml2obj/yaml2elf.cpp | 2 |
2 files changed, 26 insertions, 1 deletions
diff --git a/llvm/test/tools/yaml2obj/section-link.yaml b/llvm/test/tools/yaml2obj/section-link.yaml new file mode 100644 index 00000000000..3045d36910d --- /dev/null +++ b/llvm/test/tools/yaml2obj/section-link.yaml @@ -0,0 +1,25 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-readobj -sections %t | FileCheck %s + +# CHECK: Name: .text +# CHECK-NEXT: Type: SHT_PROGBITS +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: SHF_EXECINSTR +# CHECK-NEXT: ] +# CHECK-NEXT: Address: +# CHECK-NEXT: Offset: +# CHECK-NEXT: Size: +# CHECK-NEXT: Link: 12345 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Link: 12345 diff --git a/llvm/tools/yaml2obj/yaml2elf.cpp b/llvm/tools/yaml2obj/yaml2elf.cpp index 99f55d11cff..28ffa885080 100644 --- a/llvm/tools/yaml2obj/yaml2elf.cpp +++ b/llvm/tools/yaml2obj/yaml2elf.cpp @@ -245,7 +245,7 @@ bool ELFState<ELFT>::initSectionHeaders(std::vector<Elf_Shdr> &SHeaders, if (!Sec->Link.empty()) { unsigned Index; - if (SN2I.lookup(Sec->Link, Index)) { + if (SN2I.lookup(Sec->Link, Index) && !to_integer(Sec->Link, Index)) { WithColor::error() << "Unknown section referenced: '" << Sec->Link << "' at YAML section '" << Sec->Name << "'.\n"; return false; |