diff options
author | Sam Clegg <sbc@chromium.org> | 2019-05-07 03:53:16 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2019-05-07 03:53:16 +0000 |
commit | 5f8c2edef355e05c2041eba69b482f13a358abf6 (patch) | |
tree | 6674c0ab08df28e79d16e2ff6b1d7fde08ce6c68 | |
parent | c72aaf62d3f92c0c6d33b4df2253505f6eb22996 (diff) | |
download | bcm5719-llvm-5f8c2edef355e05c2041eba69b482f13a358abf6.tar.gz bcm5719-llvm-5f8c2edef355e05c2041eba69b482f13a358abf6.zip |
[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
-rw-r--r-- | lld/test/wasm/section-symbol-relocs.yaml | 51 | ||||
-rw-r--r-- | llvm/lib/ObjectYAML/WasmYAML.cpp | 3 | ||||
-rw-r--r-- | llvm/tools/yaml2obj/yaml2wasm.cpp | 5 |
3 files changed, 53 insertions, 6 deletions
diff --git a/lld/test/wasm/section-symbol-relocs.yaml b/lld/test/wasm/section-symbol-relocs.yaml new file mode 100644 index 00000000000..ad292e39f99 --- /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 214aa1c7808..88491d955c4 100644 --- a/llvm/lib/ObjectYAML/WasmYAML.cpp +++ b/llvm/lib/ObjectYAML/WasmYAML.cpp @@ -484,7 +484,8 @@ void MappingTraits<WasmYAML::SymbolInfo>::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 cd07a30b748..758c498bd35 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<WasmYAML::CustomSection>(&Sec); - if (!CustomSection->Name.startswith(".debug_")) { - llvm_unreachable("not yet implemented (only for debug sections)"); - return 1; - } - writeStringRef(("reloc." + CustomSection->Name).str(), OS); break; } |