aboutsummaryrefslogtreecommitdiff
path: root/lib/std/debug/SelfInfo/DarwinModule.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2025-09-08 20:08:28 +0100
committermlugg <mlugg@mlugg.co.uk>2025-09-30 13:44:52 +0100
commit1392a7af171c00679b0754775a8f6f54e967eafd (patch)
treeb9b340770b2ecbd274316ccb77ef8e47783902c8 /lib/std/debug/SelfInfo/DarwinModule.zig
parentac4d633ed691159ea61130182a1b51635a95e228 (diff)
downloadzig-1392a7af171c00679b0754775a8f6f54e967eafd.tar.gz
zig-1392a7af171c00679b0754775a8f6f54e967eafd.zip
std.debug: unwinding on Windows
...using `RtlVirtualUnwind` on x86_64 and aarch64, and `RtaCaptureStackBackTrace` on x86.
Diffstat (limited to 'lib/std/debug/SelfInfo/DarwinModule.zig')
-rw-r--r--lib/std/debug/SelfInfo/DarwinModule.zig8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/std/debug/SelfInfo/DarwinModule.zig b/lib/std/debug/SelfInfo/DarwinModule.zig
index 0434b4eaaa..5bce65b89f 100644
--- a/lib/std/debug/SelfInfo/DarwinModule.zig
+++ b/lib/std/debug/SelfInfo/DarwinModule.zig
@@ -252,10 +252,11 @@ pub fn getSymbolAtAddress(module: *const DarwinModule, gpa: Allocator, di: *Debu
};
}
pub const supports_unwinding: bool = true;
+pub const UnwindContext = std.debug.SelfInfo.DwarfUnwindContext;
/// Unwind a frame using MachO compact unwind info (from __unwind_info).
/// If the compact encoding can't encode a way to unwind a frame, it will
/// defer unwinding to DWARF, in which case `.eh_frame` will be used if available.
-pub fn unwindFrame(module: *const DarwinModule, gpa: Allocator, di: *DebugInfo, context: *DwarfUnwindContext) Error!usize {
+pub fn unwindFrame(module: *const DarwinModule, gpa: Allocator, di: *DebugInfo, context: *UnwindContext) Error!usize {
return unwindFrameInner(module, gpa, di, context) catch |err| switch (err) {
error.InvalidDebugInfo,
error.MissingDebugInfo,
@@ -274,7 +275,7 @@ pub fn unwindFrame(module: *const DarwinModule, gpa: Allocator, di: *DebugInfo,
=> return error.InvalidDebugInfo,
};
}
-fn unwindFrameInner(module: *const DarwinModule, gpa: Allocator, di: *DebugInfo, context: *DwarfUnwindContext) !usize {
+fn unwindFrameInner(module: *const DarwinModule, gpa: Allocator, di: *DebugInfo, context: *UnwindContext) !usize {
if (di.unwind == null) di.unwind = module.loadUnwindInfo();
const unwind = &di.unwind.?;
@@ -575,7 +576,7 @@ fn unwindFrameInner(module: *const DarwinModule, gpa: Allocator, di: *DebugInfo,
else => comptime unreachable, // unimplemented
};
- context.pc = DwarfUnwindContext.stripInstructionPtrAuthCode(new_ip);
+ context.pc = UnwindContext.stripInstructionPtrAuthCode(new_ip);
if (context.pc > 0) context.pc -= 1;
return new_ip;
}
@@ -819,7 +820,6 @@ const macho = std.macho;
const mem = std.mem;
const posix = std.posix;
const testing = std.testing;
-const DwarfUnwindContext = std.debug.SelfInfo.DwarfUnwindContext;
const Error = std.debug.SelfInfo.Error;
const regBytes = Dwarf.abi.regBytes;
const regValueNative = Dwarf.abi.regValueNative;