authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-12-18 20:34:58-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-01-15 15:11:36-08:00
log5fac6f380ef77a7650047c65450aec0d3215da2d
treec8d24c03a454954c5e9f526df7b16bcfa1f10fbc
parent568d9936ab4401e53a96bb2b51d31d10861c5545

wasm linker: fix eliding empty data segments


2 files changed, 9 insertions(+), 1 deletions(-)

src/link/Wasm.zig+8
...@@ -1410,6 +1410,14 @@ pub const DataSegment = extern struct {...@@ -1410,6 +1410,14 @@ pub const DataSegment = extern struct {
1410 };1410 };
1411 }1411 }
14121412
1413 pub fn isEmpty(id: Id, wasm: *const Wasm) bool {
1414 return switch (unpack(id, wasm)) {
1415 .__zig_error_name_table => false,
1416 .object => |i| i.ptr(wasm).payload.off == .none,
1417 inline .uav_exe, .uav_obj, .nav_exe, .nav_obj => |i| i.value(wasm).code.off == .none,
1418 };
1419 }
1420
1413 pub fn size(id: Id, wasm: *const Wasm) u32 {1421 pub fn size(id: Id, wasm: *const Wasm) u32 {
1414 return switch (unpack(id, wasm)) {1422 return switch (unpack(id, wasm)) {
1415 .__zig_error_name_table => {1423 .__zig_error_name_table => {
src/link/Wasm/Flush.zig+1-1
...@@ -657,7 +657,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {...@@ -657,7 +657,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
657 var group_index: u32 = 0;657 var group_index: u32 = 0;
658 var offset: u32 = undefined;658 var offset: u32 = undefined;
659 for (segment_ids, segment_offsets) |segment_id, segment_offset| {659 for (segment_ids, segment_offsets) |segment_id, segment_offset| {
660 if (!import_memory and segment_id.isBss(wasm)) {660 if (segment_id.isEmpty(wasm)) {
661 // It counted for virtual memory but it does not go into the binary.661 // It counted for virtual memory but it does not go into the binary.
662 continue;662 continue;
663 }663 }