| ... | ... | @@ -180,11 +180,10 @@ pub fn dumpStackTraceFromBase(bp: usize, ip: usize) void { |
| 180 | 180 | pub fn captureStackTrace(first_address: ?usize, stack_trace: *std.builtin.StackTrace) void { |
| 181 | 181 | if (native_os == .windows) { |
| 182 | 182 | const addrs = stack_trace.instruction_addresses; |
| 183 | | const u32_addrs_len = @intCast(u32, addrs.len); |
| 184 | 183 | const first_addr = first_address orelse { |
| 185 | 184 | stack_trace.index = windows.ntdll.RtlCaptureStackBackTrace( |
| 186 | 185 | 0, |
| 187 | | u32_addrs_len, |
| 186 | @intCast(u32, addrs.len), |
| 188 | 187 | @ptrCast(**anyopaque, addrs.ptr), |
| 189 | 188 | null, |
| 190 | 189 | ); |
| ... | ... | @@ -192,7 +191,7 @@ pub fn captureStackTrace(first_address: ?usize, stack_trace: *std.builtin.StackT |
| 192 | 191 | }; |
| 193 | 192 | var addr_buf_stack: [32]usize = undefined; |
| 194 | 193 | const addr_buf = if (addr_buf_stack.len > addrs.len) addr_buf_stack[0..] else addrs; |
| 195 | | const n = windows.ntdll.RtlCaptureStackBackTrace(0, u32_addrs_len, @ptrCast(**anyopaque, addr_buf.ptr), null); |
| 194 | const n = windows.ntdll.RtlCaptureStackBackTrace(0, @intCast(u32, addr_buf.len), @ptrCast(**anyopaque, addr_buf.ptr), null); |
| 196 | 195 | const first_index = for (addr_buf[0..n]) |addr, i| { |
| 197 | 196 | if (addr == first_addr) { |
| 198 | 197 | break i; |
| ... | ... | @@ -201,7 +200,8 @@ pub fn captureStackTrace(first_address: ?usize, stack_trace: *std.builtin.StackT |
| 201 | 200 | stack_trace.index = 0; |
| 202 | 201 | return; |
| 203 | 202 | }; |
| 204 | | const slice = addr_buf[first_index..n]; |
| 203 | const end_index = math.min(first_index + addrs.len, n); |
| 204 | const slice = addr_buf[first_index..end_index]; |
| 205 | 205 | // We use a for loop here because slice and addrs may alias. |
| 206 | 206 | for (slice) |addr, i| { |
| 207 | 207 | addrs[i] = addr; |