summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2019-05-07 03:53:16 +0000
committerSam Clegg <sbc@chromium.org>2019-05-07 03:53:16 +0000
commit5f8c2edef355e05c2041eba69b482f13a358abf6 (patch)
tree6674c0ab08df28e79d16e2ff6b1d7fde08ce6c68
parentc72aaf62d3f92c0c6d33b4df2253505f6eb22996 (diff)
downloadbcm5719-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.yaml51
-rw-r--r--llvm/lib/ObjectYAML/WasmYAML.cpp3
-rw-r--r--llvm/tools/yaml2obj/yaml2wasm.cpp5
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;
}
OpenPOWER on IntegriCloud