Index: test/ExecutionEngine/RuntimeDyld/X86/ELF_x86-64_none.yaml =================================================================== --- test/ExecutionEngine/RuntimeDyld/X86/ELF_x86-64_none.yaml +++ test/ExecutionEngine/RuntimeDyld/X86/ELF_x86-64_none.yaml @@ -20,7 +20,6 @@ Info: .text Relocations: - Offset: 0x0000000000000000 - Symbol: '' Type: R_X86_64_NONE Symbols: Global: Index: test/Object/AMDGPU/elf64-relocs.yaml =================================================================== --- test/Object/AMDGPU/elf64-relocs.yaml +++ test/Object/AMDGPU/elf64-relocs.yaml @@ -38,43 +38,30 @@ AddressAlign: 0x08 Relocations: - Offset: 0x0 - Symbol: s0 Type: R_AMDGPU_NONE - Offset: 0x2 - Symbol: s1 Type: R_AMDGPU_ABS32_LO - Offset: 0x4 - Symbol: s2 Type: R_AMDGPU_ABS32_HI - Offset: 0x6 - Symbol: s3 Type: R_AMDGPU_ABS64 - Offset: 0x8 - Symbol: s4 Type: R_AMDGPU_REL32 - Offset: 0x10 - Symbol: s5 Type: R_AMDGPU_REL64 - Offset: 0x12 - Symbol: s6 Type: R_AMDGPU_ABS32 - Offset: 0x14 - Symbol: s7 Type: R_AMDGPU_GOTPCREL - Offset: 0x16 - Symbol: s8 Type: R_AMDGPU_GOTPCREL32_LO - Offset: 0x18 - Symbol: s9 Type: R_AMDGPU_GOTPCREL32_HI - Offset: 0x20 - Symbol: s10 Type: R_AMDGPU_REL32_LO - Offset: 0x22 - Symbol: s11 Type: R_AMDGPU_REL32_HI - Offset: 0x24 - Symbol: s12 Type: R_AMDGPU_RELATIVE64 Symbols: Index: test/Object/Lanai/yaml2obj-elf-lanai-rel.yaml =================================================================== --- test/Object/Lanai/yaml2obj-elf-lanai-rel.yaml +++ test/Object/Lanai/yaml2obj-elf-lanai-rel.yaml @@ -35,22 +35,16 @@ Symbol: main Type: R_LANAI_32 - Offset: 0x4 - Symbol: a Type: R_LANAI_NONE - Offset: 0x8 - Symbol: b Type: R_LANAI_21 - Offset: 0xC - Symbol: c Type: R_LANAI_21_F - Offset: 0x10 - Symbol: d Type: R_LANAI_25 - Offset: 0x14 - Symbol: e Type: R_LANAI_HI16 - Offset: 0x18 - Symbol: f Type: R_LANAI_LO16 Index: test/Object/X86/yaml-elf-x86-rel-broken.yaml =================================================================== --- test/Object/X86/yaml-elf-x86-rel-broken.yaml +++ test/Object/X86/yaml-elf-x86-rel-broken.yaml @@ -27,3 +27,6 @@ - Offset: 0 Symbol: main Type: 0xFF +Symbols: + Global: + - Name: main Index: test/Object/yaml2obj-elf-rel-noref.yaml =================================================================== --- test/Object/yaml2obj-elf-rel-noref.yaml +++ test/Object/yaml2obj-elf-rel-noref.yaml @@ -21,7 +21,6 @@ Info: .text Relocations: - Offset: 0x000000000000000C - Symbol: '' Type: R_ARM_V4BX - Name: .data Type: SHT_PROGBITS Index: test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml =================================================================== --- test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml +++ test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml @@ -18,4 +18,9 @@ - Offset: 0x1 Symbol: .debug_foo Type: R_X86_64_32 +Symbols: + Global: + - Name: .debug_foo + Type: STT_SECTION + Section: .debug_foo ... Index: test/tools/llvm-objdump/X86/disasm-zeroes-relocations.test =================================================================== --- test/tools/llvm-objdump/X86/disasm-zeroes-relocations.test +++ test/tools/llvm-objdump/X86/disasm-zeroes-relocations.test @@ -50,3 +50,6 @@ - Offset: 0x0000000000000008 Symbol: x Type: R_X86_64_64 +Symbols: + Global: + - Name: x Index: test/tools/sanstats/elf.test =================================================================== --- test/tools/sanstats/elf.test +++ test/tools/sanstats/elf.test @@ -85,46 +85,34 @@ Info: .debug_info Relocations: - Offset: 0x0000000000000006 - Symbol: '' Type: R_X86_64_32 - Offset: 0x000000000000000C - Symbol: '' Type: R_X86_64_32 - Offset: 0x0000000000000012 - Symbol: '' Type: R_X86_64_32 Addend: 55 - Offset: 0x0000000000000016 - Symbol: '' Type: R_X86_64_32 - Offset: 0x000000000000001A - Symbol: '' Type: R_X86_64_32 Addend: 59 - Offset: 0x000000000000001E - Symbol: '' Type: R_X86_64_64 - Offset: 0x000000000000002B - Symbol: '' Type: R_X86_64_64 - Offset: 0x0000000000000039 - Symbol: '' Type: R_X86_64_32 Addend: 64 - Offset: 0x0000000000000040 - Symbol: '' Type: R_X86_64_64 Addend: 16 - Offset: 0x000000000000004E - Symbol: '' Type: R_X86_64_32 Addend: 67 - Offset: 0x0000000000000055 - Symbol: '' Type: R_X86_64_64 Addend: 32 - Offset: 0x0000000000000063 - Symbol: '' Type: R_X86_64_32 Addend: 70 - Name: .debug_ranges @@ -142,7 +130,6 @@ Info: .debug_pubnames Relocations: - Offset: 0x0000000000000006 - Symbol: '' Type: R_X86_64_32 - Name: .comment Type: SHT_PROGBITS @@ -165,14 +152,11 @@ Info: .eh_frame Relocations: - Offset: 0x0000000000000020 - Symbol: '' Type: R_X86_64_PC32 - Offset: 0x000000000000003C - Symbol: '' Type: R_X86_64_PC32 Addend: 16 - Offset: 0x0000000000000058 - Symbol: '' Type: R_X86_64_PC32 Addend: 32 - Name: .debug_line @@ -186,7 +170,6 @@ Info: .debug_line Relocations: - Offset: 0x0000000000000027 - Symbol: '' Type: R_X86_64_64 Symbols: Local: Index: test/tools/yaml2obj/relocation-explicit-symbol-index.yaml =================================================================== --- test/tools/yaml2obj/relocation-explicit-symbol-index.yaml +++ test/tools/yaml2obj/relocation-explicit-symbol-index.yaml @@ -0,0 +1,36 @@ +# Test that a relocation's symbol can be an integer. +# RUN: yaml2obj %s > %t +# LLVM tools (both llvm-readobj and llvm-objdump) reject relocations with +# invalid symbol indexes, so inspect the hex contents instead. +# RUN: llvm-readobj -x .rela.text %t | FileCheck %s + +# CHECK: Hex dump of section '.rela.text': +# CHECK-NEXT: 0x00000000 00000000 00000000 02000000 42000000 +# Symbol index 0x42 --^ +# CHECK-NEXT: 0x00000010 00000000 00000000 00000000 00000000 +# CHECK-NEXT: 0x00000020 02000000 01000000 00000000 00000000 +# Symbol index 0x01 --^ + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + - Name: .rela.text + Type: SHT_RELA + Info: .text + Link: .symtab + Relocations: + - Type: R_X86_64_PC32 + Offset: 0 + Symbol: 0x42 + - Type: R_X86_64_PC32 + Offset: 0 + Symbol: 0x1 +Symbols: + Global: + - Name: foo Index: test/tools/yaml2obj/relocation-missing-symbol.yaml =================================================================== --- test/tools/yaml2obj/relocation-missing-symbol.yaml +++ test/tools/yaml2obj/relocation-missing-symbol.yaml @@ -0,0 +1,24 @@ +# Show that yaml2obj rejects a symbol reference from a relocation if the symbol +# does not exist. + +# RUN: not yaml2obj %s -o %t 2>&1 | FileCheck %s + +# CHECK: Unknown symbol referenced: 'does_not_exist' at YAML section '.rela.text' + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + - Name: .rela.text + Type: SHT_RELA + Info: .text + Link: .symtab + Relocations: + - Type: R_X86_64_PC32 + Offset: 0 + Symbol: does_not_exist Index: tools/yaml2obj/yaml2elf.cpp =================================================================== --- tools/yaml2obj/yaml2elf.cpp +++ tools/yaml2obj/yaml2elf.cpp @@ -527,11 +527,14 @@ for (const auto &Rel : Section.Relocations) { unsigned SymIdx = 0; - // Some special relocation, R_ARM_v4BX for instance, does not have - // an external reference. So it ignores the return value of lookup() - // here. - if (Rel.Symbol) - SymN2I.lookup(*Rel.Symbol, SymIdx); + // If a relocation references a symbol, try to look one up in the symbol + // table. If it is not there, treat the value as a symbol index. + if (Rel.Symbol && SymN2I.lookup(*Rel.Symbol, SymIdx) && + !to_integer(*Rel.Symbol, SymIdx)) { + WithColor::error() << "Unknown symbol referenced: '" << *Rel.Symbol + << "' at YAML section '" << Section.Name << "'.\n"; + return false; + } if (IsRela) { Elf_Rela REntry;