aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-01-05 20:33:13 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-01-15 15:11:36 -0800
commite6a5fe7c5566007d9299c75f41455fa48c64db40 (patch)
tree806a3849edfd18aa9fc47faf0e85595831f10b8a /src
parent290d97bd099cde2d9d4daef11bb836bfb942a90a (diff)
downloadzig-e6a5fe7c5566007d9299c75f41455fa48c64db40.tar.gz
zig-e6a5fe7c5566007d9299c75f41455fa48c64db40.zip
wasm linker: apply object relocations to data segments
Diffstat (limited to 'src')
-rw-r--r--src/link/Wasm/Flush.zig8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/link/Wasm/Flush.zig b/src/link/Wasm/Flush.zig
index ee95a6b3dd..dde69db260 100644
--- a/src/link/Wasm/Flush.zig
+++ b/src/link/Wasm/Flush.zig
@@ -796,9 +796,11 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
}
break :append;
},
- .object => |i| c: {
- if (true) @panic("TODO apply data segment relocations");
- break :c i.ptr(wasm).payload;
+ .object => |i| {
+ const ptr = i.ptr(wasm);
+ try binary_bytes.appendSlice(gpa, ptr.payload.slice(wasm));
+ if (!is_obj) applyRelocs(binary_bytes.items[code_start..], ptr.offset, ptr.relocations(wasm), wasm);
+ break :append;
},
inline .uav_exe, .uav_obj, .nav_exe, .nav_obj => |i| i.value(wasm).code,
};