Index: include/llvm/ObjectYAML/ELFYAML.h =================================================================== --- include/llvm/ObjectYAML/ELFYAML.h +++ include/llvm/ObjectYAML/ELFYAML.h @@ -161,7 +161,7 @@ llvm::yaml::Hex64 Offset; int64_t Addend; ELF_REL Type; - StringRef Symbol; + Optional Symbol; }; struct RelocationSection : Section { Index: lib/ObjectYAML/ELFYAML.cpp =================================================================== --- lib/ObjectYAML/ELFYAML.cpp +++ lib/ObjectYAML/ELFYAML.cpp @@ -853,7 +853,7 @@ assert(Object && "The IO context is not initialized"); IO.mapRequired("Offset", Rel.Offset); - IO.mapRequired("Symbol", Rel.Symbol); + IO.mapOptional("Symbol", Rel.Symbol); if (Object->Header.Machine == ELFYAML::ELF_EM(ELF::EM_MIPS) && Object->Header.Class == ELFYAML::ELF_ELFCLASS(ELF::ELFCLASS64)) { Index: test/tools/yaml2obj/symboless-relocation.diff =================================================================== --- /dev/null +++ test/tools/yaml2obj/symboless-relocation.diff @@ -0,0 +1,21 @@ +# Just make sure this isn't an error even though it has no Symbol +# RUN: yaml2obj %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "00000000" + - Name: .rel.text + Type: SHT_REL + Link: .symtab + Info: .text + Relocations: + - Offset: 0x1000 + Type: R_X86_64_RELATIVE Index: tools/yaml2obj/yaml2elf.cpp =================================================================== --- tools/yaml2obj/yaml2elf.cpp +++ tools/yaml2obj/yaml2elf.cpp @@ -459,7 +459,8 @@ // Some special relocation, R_ARM_v4BX for instance, does not have // an external reference. So it ignores the return value of lookup() // here. - SymN2I.lookup(Rel.Symbol, SymIdx); + if (Rel.Symbol) + SymN2I.lookup(*Rel.Symbol, SymIdx); if (IsRela) { Elf_Rela REntry;