aboutsummaryrefslogtreecommitdiff
path: root/lib/std/debug/SelfInfo.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-08-02 12:00:08 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-08-02 14:14:59 -0700
commit975c185b92a7d470ea705b28f46a8004bdda3c60 (patch)
treecb0d037c9a2f38b348ae10b621db417e2f941fa1 /lib/std/debug/SelfInfo.zig
parent48d584e3a33a76ef4ea643905a11d311e9ed8bbf (diff)
downloadzig-975c185b92a7d470ea705b28f46a8004bdda3c60.tar.gz
zig-975c185b92a7d470ea705b28f46a8004bdda3c60.zip
fix compilation on powerpc GNU systems
...which have a ucontext_t but not a PC register. The current stack unwinding implementation does not yet support this architecture. Also fix name of `std.debug.SelfInfo.openSelf` to remove redundancy. Also removed this hook into root providing an "openSelfDebugInfo" function. Sorry, this debugging code is not of sufficient quality to offer a plugin API right now.
Diffstat (limited to 'lib/std/debug/SelfInfo.zig')
-rw-r--r--lib/std/debug/SelfInfo.zig13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/std/debug/SelfInfo.zig b/lib/std/debug/SelfInfo.zig
index 80a8cb4cd9..b1679a224b 100644
--- a/lib/std/debug/SelfInfo.zig
+++ b/lib/std/debug/SelfInfo.zig
@@ -34,18 +34,15 @@ allocator: Allocator,
address_map: std.AutoHashMap(usize, *Module),
modules: if (native_os == .windows) std.ArrayListUnmanaged(WindowsModule) else void,
-pub const OpenSelfError = error{
+pub const OpenError = error{
MissingDebugInfo,
UnsupportedOperatingSystem,
} || @typeInfo(@typeInfo(@TypeOf(SelfInfo.init)).Fn.return_type.?).ErrorUnion.error_set;
-pub fn openSelf(allocator: Allocator) OpenSelfError!SelfInfo {
+pub fn open(allocator: Allocator) OpenError!SelfInfo {
nosuspend {
if (builtin.strip_debug_info)
return error.MissingDebugInfo;
- if (@hasDecl(root, "os") and @hasDecl(root.os, "debug") and @hasDecl(root.os.debug, "openSelfDebugInfo")) {
- return root.os.debug.openSelfDebugInfo(allocator);
- }
switch (native_os) {
.linux,
.freebsd,
@@ -1721,6 +1718,8 @@ pub const UnwindContext = struct {
allocator: Allocator,
thread_context: *std.debug.ThreadContext,
) !UnwindContext {
+ comptime assert(supports_unwinding);
+
const pc = stripInstructionPtrAuthCode(
(try regValueNative(thread_context, ip_reg_num, null)).*,
);
@@ -1982,8 +1981,8 @@ fn spRegNum(reg_context: Dwarf.abi.RegisterContext) u8 {
return Dwarf.abi.spRegNum(native_arch, reg_context);
}
-const ip_reg_num = Dwarf.abi.ipRegNum(native_arch);
-const supports_unwinding = Dwarf.abi.supportsUnwinding(builtin.target);
+const ip_reg_num = Dwarf.abi.ipRegNum(native_arch).?;
+pub const supports_unwinding = Dwarf.supportsUnwinding(builtin.target);
fn unwindFrameMachODwarf(
context: *UnwindContext,