aboutsummaryrefslogtreecommitdiff
path: root/src/link/Wasm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-12-18 15:10:50 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-01-15 15:11:35 -0800
commit85b53730fe248cf02468a213903ddac4bffe8234 (patch)
tree22f04c8edeed5562a6dce6383fdf55c846f69317 /src/link/Wasm.zig
parent2d899e9a9f0864385939955902e0ba5f322176fc (diff)
downloadzig-85b53730fe248cf02468a213903ddac4bffe8234.tar.gz
zig-85b53730fe248cf02468a213903ddac4bffe8234.zip
add safety for calling functions that get virtual addrs
Diffstat (limited to 'src/link/Wasm.zig')
-rw-r--r--src/link/Wasm.zig12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig
index 3150375230..39f8fab20d 100644
--- a/src/link/Wasm.zig
+++ b/src/link/Wasm.zig
@@ -3331,21 +3331,27 @@ pub fn refUavExe(wasm: *Wasm, pt: Zcu.PerThread, ip_index: InternPool.Index) !Ua
return uav_index;
}
-pub fn uavAddr(wasm: *Wasm, uav_index: UavsExeIndex) Allocator.Error!u32 {
+/// Asserts it is called after `Wasm.data_segments` is fully populated and sorted.
+pub fn uavAddr(wasm: *Wasm, uav_index: UavsExeIndex) u32 {
+ assert(wasm.flush_buffer.memory_layout_finished);
const comp = wasm.base.comp;
assert(comp.config.output_mode != .Obj);
const ds_id: DataSegment.Id = .pack(wasm, .{ .uav_exe = uav_index });
return wasm.data_segments.get(ds_id).?;
}
-pub fn navAddr(wasm: *Wasm, nav_index: InternPool.Nav.Index) Allocator.Error!u32 {
+/// Asserts it is called after `Wasm.data_segments` is fully populated and sorted.
+pub fn navAddr(wasm: *Wasm, nav_index: InternPool.Nav.Index) u32 {
+ assert(wasm.flush_buffer.memory_layout_finished);
const comp = wasm.base.comp;
assert(comp.config.output_mode != .Obj);
const ds_id: DataSegment.Id = .pack(wasm, .{ .nav_exe = @enumFromInt(wasm.navs_exe.getIndex(nav_index).?) });
return wasm.data_segments.get(ds_id).?;
}
-pub fn errorNameTableAddr(wasm: *Wasm) Allocator.Error!u32 {
+/// Asserts it is called after `Wasm.data_segments` is fully populated and sorted.
+pub fn errorNameTableAddr(wasm: *Wasm) u32 {
+ assert(wasm.flush_buffer.memory_layout_finished);
const comp = wasm.base.comp;
assert(comp.config.output_mode != .Obj);
return wasm.data_segments.get(.__zig_error_name_table).?;