diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-12-18 15:10:50 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-01-15 15:11:35 -0800 |
| commit | 85b53730fe248cf02468a213903ddac4bffe8234 (patch) | |
| tree | 22f04c8edeed5562a6dce6383fdf55c846f69317 /src/link/Wasm.zig | |
| parent | 2d899e9a9f0864385939955902e0ba5f322176fc (diff) | |
| download | zig-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.zig | 12 |
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).?; |
