zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 5fac6f380ef77a7650047c65450aec0d3215da2d (tree)
parent 568d9936ab4401e53a96bb2b51d31d10861c5545
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Wed, 18 Dec 2024 20:34:58 -0800

wasm linker: fix eliding empty data segments

Diffstat:
Msrc/link/Wasm.zig | 8++++++++
Msrc/link/Wasm/Flush.zig | 2+-
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig @@ -1410,6 +1410,14 @@ pub const DataSegment = extern struct { }; } + pub fn isEmpty(id: Id, wasm: *const Wasm) bool { + return switch (unpack(id, wasm)) { + .__zig_error_name_table => false, + .object => |i| i.ptr(wasm).payload.off == .none, + inline .uav_exe, .uav_obj, .nav_exe, .nav_obj => |i| i.value(wasm).code.off == .none, + }; + } + pub fn size(id: Id, wasm: *const Wasm) u32 { return switch (unpack(id, wasm)) { .__zig_error_name_table => { diff --git a/src/link/Wasm/Flush.zig b/src/link/Wasm/Flush.zig @@ -657,7 +657,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void { var group_index: u32 = 0; var offset: u32 = undefined; for (segment_ids, segment_offsets) |segment_id, segment_offset| { - if (!import_memory and segment_id.isBss(wasm)) { + if (segment_id.isEmpty(wasm)) { // It counted for virtual memory but it does not go into the binary. continue; }