Commit 0ad95cf2 authored by Clemens Backes's avatar Clemens Backes Committed by V8 LUCI CQ

[wasm] Fix data segment address emission in module builder

The module builder was outputting the address as an unsigned LEB value
instead of a signed value, leading to wrong results.

R=manoskouk@chromium.org

Bug: v8:11863
Change-Id: I547ca98defcae0ba15b4004a506b65387534b08a
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3463715Reviewed-by: 's avatarManos Koukoutos <manoskouk@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79090}
parent 516341f3
...@@ -2058,13 +2058,12 @@ class WasmModuleBuilder { ...@@ -2058,13 +2058,12 @@ class WasmModuleBuilder {
if (seg.is_active) { if (seg.is_active) {
section.emit_u8(0); // linear memory index 0 / flags section.emit_u8(0); // linear memory index 0 / flags
if (seg.is_global) { if (seg.is_global) {
// initializer is a global variable // Initializer is a global variable.
section.emit_u8(kExprGlobalGet); section.emit_u8(kExprGlobalGet);
section.emit_u32v(seg.addr); section.emit_u32v(seg.addr);
} else { } else {
// initializer is a constant // Initializer is a constant.
section.emit_u8(kExprI32Const); section.emit_bytes(wasmI32Const(seg.addr));
section.emit_u32v(seg.addr);
} }
section.emit_u8(kExprEnd); section.emit_u8(kExprEnd);
} else { } else {
...@@ -2076,7 +2075,7 @@ class WasmModuleBuilder { ...@@ -2076,7 +2075,7 @@ class WasmModuleBuilder {
}); });
} }
// Add any explicitly added sections // Add any explicitly added sections.
for (let exp of wasm.explicit) { for (let exp of wasm.explicit) {
if (debug) print('emitting explicit @ ' + binary.length); if (debug) print('emitting explicit @ ' + binary.length);
binary.emit_bytes(exp); binary.emit_bytes(exp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment