diff --git a/lld/test/wasm/bad-reloc.yaml b/lld/test/wasm/bad-reloc.yaml new file mode 100644 --- /dev/null +++ b/lld/test/wasm/bad-reloc.yaml @@ -0,0 +1,75 @@ +# RUN: yaml2obj %s -o %t.o +# RUN: not wasm-ld --fatal-warnings -o out.wasm %t.o 2>&1 | FileCheck %s +# +# CHECK: bad-reloc.yaml.tmp.o:(_start): unexpected existing value for R_WASM_MEMORY_ADDR_LEB: existing=1 expected=0 +# +# The code section bellow has been modified such that the target of the +# relocation is 8180808000 (LEB of 1) rather than 8080808000 (LEB = 0) + +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: TYPE + Signatures: + - Index: 0 + ParamTypes: [] + ReturnTypes: + - I32 + - Type: IMPORT + Imports: + - Module: env + Field: __linear_memory + Kind: MEMORY + Memory: + Initial: 0x00000001 + - Module: env + Field: __indirect_function_table + Kind: TABLE + Table: + Index: 0 + ElemType: FUNCREF + Limits: + Initial: 0x00000000 + - Type: FUNCTION + FunctionTypes: [ 0 ] + - Type: DATACOUNT + Count: 1 + - Type: CODE + Relocations: + - Type: R_WASM_MEMORY_ADDR_LEB + Index: 1 + Offset: 0x00000007 + Functions: + - Index: 0 + Locals: [] + Body: 4100280281808080002802000B + - Type: DATA + Segments: + - SectionOffset: 6 + InitFlags: 0 + Offset: + Opcode: I32_CONST + Value: 0 + Content: '00000000' + - Type: CUSTOM + Name: linking + Version: 2 + SymbolTable: + - Index: 0 + Kind: FUNCTION + Name: _start + Flags: [ VISIBILITY_HIDDEN ] + Function: 0 + - Index: 1 + Kind: DATA + Name: bar + Flags: [ VISIBILITY_HIDDEN ] + Segment: 0 + Size: 4 + SegmentInfo: + - Index: 0 + Name: .bss.bar + Alignment: 2 + Flags: [ ] + diff --git a/lld/wasm/InputChunks.cpp b/lld/wasm/InputChunks.cpp --- a/lld/wasm/InputChunks.cpp +++ b/lld/wasm/InputChunks.cpp @@ -109,9 +109,9 @@ rel.Type != R_WASM_GLOBAL_INDEX_I32) { auto expectedValue = file->calcExpectedValue(rel); if (expectedValue != existingValue) - warn("unexpected existing value for " + relocTypeToString(rel.Type) + - ": existing=" + Twine(existingValue) + - " expected=" + Twine(expectedValue)); + warn(toString(this) + ": unexpected existing value for " + + relocTypeToString(rel.Type) + ": existing=" + + Twine(existingValue) + " expected=" + Twine(expectedValue)); } } }