aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os
diff options
context:
space:
mode:
authorSébastien Marie <semarie@online.fr>2020-12-23 12:39:20 +0000
committerVeikka Tuominen <git@vexu.eu>2020-12-23 20:47:06 +0200
commit6e2622661cdf9dd48cf962e5d6902324b15468c3 (patch)
tree18375a45631eaf93c9249c4f9429969adf88f5f6 /lib/std/os
parent588e8287594803fdc06b6dfc3d7591075b88ff1e (diff)
downloadzig-6e2622661cdf9dd48cf962e5d6902324b15468c3.tar.gz
zig-6e2622661cdf9dd48cf962e5d6902324b15468c3.zip
openbsd: implement segfault handling on openbsd x86_64
Diffstat (limited to 'lib/std/os')
-rw-r--r--lib/std/os/bits/openbsd.zig54
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/std/os/bits/openbsd.zig b/lib/std/os/bits/openbsd.zig
index a9ab929a42..c84a6de01a 100644
--- a/lib/std/os/bits/openbsd.zig
+++ b/lib/std/os/bits/openbsd.zig
@@ -809,6 +809,60 @@ comptime {
std.debug.assert(@sizeOf(siginfo_t) == 136);
}
+pub usingnamespace switch (builtin.arch) {
+ .x86_64 => struct {
+ pub const ucontext_t = extern struct {
+ sc_rdi: c_long,
+ sc_rsi: c_long,
+ sc_rdx: c_long,
+ sc_rcx: c_long,
+ sc_r8: c_long,
+ sc_r9: c_long,
+ sc_r10: c_long,
+ sc_r11: c_long,
+ sc_r12: c_long,
+ sc_r13: c_long,
+ sc_r14: c_long,
+ sc_r15: c_long,
+ sc_rbp: c_long,
+ sc_rbx: c_long,
+ sc_rax: c_long,
+ sc_gs: c_long,
+ sc_fs: c_long,
+ sc_es: c_long,
+ sc_ds: c_long,
+ sc_trapno: c_long,
+ sc_err: c_long,
+ sc_rip: c_long,
+ sc_cs: c_long,
+ sc_rflags: c_long,
+ sc_rsp: c_long,
+ sc_ss: c_long,
+
+ sc_fpstate: fxsave64,
+ __sc_unused: c_int,
+ sc_mask: c_int,
+ sc_cookie: c_long,
+ };
+
+ pub const fxsave64 = packed struct {
+ fx_fcw: u16,
+ fx_fsw: u16,
+ fx_ftw: u8,
+ fx_unused1: u8,
+ fx_fop: u16,
+ fx_rip: u64,
+ fx_rdp: u64,
+ fx_mxcsr: u32,
+ fx_mxcsr_mask: u32,
+ fx_st: [8][2]u64,
+ fx_xmm: [16][2]u64,
+ fx_unused3: [96]u8,
+ };
+ },
+ else => struct {},
+};
+
pub const sigset_t = c_uint;
pub const empty_sigset: sigset_t = 0;