[PATCH] D45825: [WebAssembly] Fix bug where reloc addends were written as unsigned
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 19 10:10:45 PDT 2018
sbc100 updated this revision to Diff 143117.
sbc100 added a comment.
whitespace
Repository:
rLLD LLVM Linker
https://reviews.llvm.org/D45825
Files:
test/wasm/reloc-addend.ll
wasm/InputChunks.cpp
Index: wasm/InputChunks.cpp
===================================================================
--- wasm/InputChunks.cpp
+++ wasm/InputChunks.cpp
@@ -124,7 +124,7 @@
case R_WEBASSEMBLY_MEMORY_ADDR_LEB:
case R_WEBASSEMBLY_MEMORY_ADDR_SLEB:
case R_WEBASSEMBLY_MEMORY_ADDR_I32:
- writeUleb128(OS, Rel.Addend, "reloc addend");
+ writeSleb128(OS, Rel.Addend, "reloc addend");
break;
}
}
Index: test/wasm/reloc-addend.ll
===================================================================
--- /dev/null
+++ test/wasm/reloc-addend.ll
@@ -0,0 +1,19 @@
+; RUN: llc -filetype=obj %s -o %t.o
+; RUN: wasm-ld --check-signatures -r -o %t.wasm %t.o
+; RUN: obj2yaml %t.wasm | FileCheck %s
+
+target triple = "wasm32-unknown-unknown-wasm"
+
+ at foo = hidden global [76 x i32] zeroinitializer, align 16
+
+; bar points to the 16th element, which happens to be 64 bytes
+; This generates an addend of 64 which, is the value at which
+; signed and unsigned LEB encodes will differ.
+ at bar = hidden local_unnamed_addr global i32* getelementptr inbounds ([76 x i32], [76 x i32]* @foo, i32 0, i32 16), align 4
+
+; CHECK: - Type: DATA
+; CHECK-NEXT: Relocations:
+; CHECK-NEXT: - Type: R_WEBASSEMBLY_MEMORY_ADDR_I32
+; CHECK-NEXT: Index: 0
+; CHECK-NEXT: Offset: 0x0000013D
+; CHECK-NEXT: Addend: 64
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45825.143117.patch
Type: text/x-patch
Size: 1412 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180419/3930edcc/attachment.bin>
More information about the llvm-commits
mailing list