From 5f8c2edef355e05c2041eba69b482f13a358abf6 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Tue, 7 May 2019 03:53:16 +0000 Subject: [PATCH] [WebAssembly] Add more test coverage for reloctions against section symbols The only known user of this relocation type and symbol type is the debug info sections, but we were not testing the `--relocatable` output path. This change adds a minimal test case to cover relocations against section symbols includes `--relocatable` output. Differential Revision: https://reviews.llvm.org/D61623 llvm-svn: 360110 --- lld/test/wasm/section-symbol-relocs.yaml | 51 ++++++++++++++++++++++++ llvm/lib/ObjectYAML/WasmYAML.cpp | 3 +- llvm/tools/yaml2obj/yaml2wasm.cpp | 5 --- 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 lld/test/wasm/section-symbol-relocs.yaml diff --git a/lld/test/wasm/section-symbol-relocs.yaml b/lld/test/wasm/section-symbol-relocs.yaml new file mode 100644 index 000000000000..ad292e39f99e --- /dev/null +++ b/lld/test/wasm/section-symbol-relocs.yaml @@ -0,0 +1,51 @@ +# RUN: yaml2obj %s -o %t.o +# RUN: llc -filetype=obj %S/Inputs/custom.ll -o %t2.o +# RUN: wasm-ld --no-entry -o - %t2.o %t.o | obj2yaml | FileCheck %s +# RUN: wasm-ld -r --no-entry -o - %t2.o %t.o | obj2yaml | FileCheck %s -check-prefix=RELOC + +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: CUSTOM + Name: green + Payload: 'AA0000000000000000' + Relocations: + - Type: R_WASM_SECTION_OFFSET_I32 + Index: 0 + Offset: 0x00000001 + - Type: R_WASM_SECTION_OFFSET_I32 + Index: 1 + Offset: 0x00000005 + - Type: CUSTOM + Name: red + Payload: 'BB0000000000000000' + - Type: CUSTOM + Name: linking + Version: 2 + SymbolTable: + - Index: 0 + Kind: SECTION + Section: 0 + Flags: [ BINDING_LOCAL ] + - Index: 1 + Kind: SECTION + Section: 1 + Flags: [ BINDING_LOCAL ] +... + +# CHECK: Name: green +# CHECK-NEXT: Payload: 626172717578AA0600000003000000 +# CHECK: Name: red +# CHECK-NEXT: Payload: 666F6FBB0000000000000000 + +# RELOC: Relocations: +# RELOC-NEXT: - Type: R_WASM_SECTION_OFFSET_I32 +# RELOC-NEXT: Index: 0 +# RELOC-NEXT: Offset: 0x00000007 +# RELOC-NEXT: Addend: 6 +# RELOC-NEXT: - Type: R_WASM_SECTION_OFFSET_I32 +# RELOC-NEXT: Index: 1 +# RELOC-NEXT: Offset: 0x0000000B +# RELOC-NEXT: Addend: 3 +# RELOC-NEXT: Name: green diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp index 214aa1c78082..88491d955c49 100644 --- a/llvm/lib/ObjectYAML/WasmYAML.cpp +++ b/llvm/lib/ObjectYAML/WasmYAML.cpp @@ -484,7 +484,8 @@ void MappingTraits::mapping(IO &IO, WasmYAML::SymbolInfo &Info) { IO.mapRequired("Index", Info.Index); IO.mapRequired("Kind", Info.Kind); - IO.mapRequired("Name", Info.Name); + if (Info.Kind != wasm::WASM_SYMBOL_TYPE_SECTION) + IO.mapRequired("Name", Info.Name); IO.mapRequired("Flags", Info.Flags); if (Info.Kind == wasm::WASM_SYMBOL_TYPE_FUNCTION) { IO.mapRequired("Function", Info.ElementIndex); diff --git a/llvm/tools/yaml2obj/yaml2wasm.cpp b/llvm/tools/yaml2obj/yaml2wasm.cpp index cd07a30b7487..758c498bd35e 100644 --- a/llvm/tools/yaml2obj/yaml2wasm.cpp +++ b/llvm/tools/yaml2obj/yaml2wasm.cpp @@ -532,11 +532,6 @@ int WasmWriter::writeRelocSection(raw_ostream &OS, WasmYAML::Section &Sec, break; case wasm::WASM_SEC_CUSTOM: { auto CustomSection = dyn_cast(&Sec); - if (!CustomSection->Name.startswith(".debug_")) { - llvm_unreachable("not yet implemented (only for debug sections)"); - return 1; - } - writeStringRef(("reloc." + CustomSection->Name).str(), OS); break; }