[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
This commit is contained in:
Sam Clegg 2019-05-07 03:53:16 +00:00
parent c72aaf62d3
commit 5f8c2edef3
3 changed files with 53 additions and 6 deletions

View File

@ -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

View File

@ -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);

View File

@ -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;
}