aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-04-22 21:30:54 +0300
committerAndrew Kelley <andrew@ziglang.org>2022-05-16 17:42:51 -0700
commiteee8fffec70b1d3e2900970dbe836e346e499231 (patch)
treeba6418a557532cbe2aee2be1045f84ff0f3ee0ce /lib
parent5888446c03b1f77a031f5a8093488a6a2f6decb6 (diff)
downloadzig-eee8fffec70b1d3e2900970dbe836e346e499231.tar.gz
zig-eee8fffec70b1d3e2900970dbe836e346e499231.zip
stage2: implement error return traces
Diffstat (limited to 'lib')
-rw-r--r--lib/std/builtin.zig11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig
index d352ac29dc..a8069fa490 100644
--- a/lib/std/builtin.zig
+++ b/lib/std/builtin.zig
@@ -846,5 +846,16 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace) noreturn
}
}
+pub noinline fn returnError(maybe_st: ?*StackTrace) void {
+ @setCold(true);
+ const st = maybe_st orelse return;
+ addErrRetTraceAddr(st, @returnAddress());
+}
+
+pub inline fn addErrRetTraceAddr(st: *StackTrace, addr: usize) void {
+ st.instruction_addresses[st.index & (st.instruction_addresses.len - 1)] = addr;
+ st.index +%= 1;
+}
+
const std = @import("std.zig");
const root = @import("root");