authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-31 11:51:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-31 11:51:08-07:00
logb1bde35651ad38b930956b97d077ec823cceb078
tree7c6d2dbab012bf3d79089543deaed9affd0769df
parent235b9fc28a6ec50522f8548f8d54c97356a7f568

std.c.openbsd: add ucontext_t for aarch64

Reapplies 1585ed637d101ed16adb6b9ebdfa465299bfdb13 which was reverted in f3adbe249b0dfad91318916142a33619232a968f. I removed use of `usingnamespace` in this commit. @semarie audited this struct definition.

1 files changed, 48 insertions(+), 35 deletions(-)

lib/std/c/openbsd.zig+48-35
......@@ -1092,44 +1092,57 @@ comptime {
10921092}
10931093
10941094pub usingnamespace switch (builtin.cpu.arch) {
1095 .x86_64 => struct {
1096 pub const ucontext_t = extern struct {
1097 sc_rdi: c_long,
1098 sc_rsi: c_long,
1099 sc_rdx: c_long,
1100 sc_rcx: c_long,
1101 sc_r8: c_long,
1102 sc_r9: c_long,
1103 sc_r10: c_long,
1104 sc_r11: c_long,
1105 sc_r12: c_long,
1106 sc_r13: c_long,
1107 sc_r14: c_long,
1108 sc_r15: c_long,
1109 sc_rbp: c_long,
1110 sc_rbx: c_long,
1111 sc_rax: c_long,
1112 sc_gs: c_long,
1113 sc_fs: c_long,
1114 sc_es: c_long,
1115 sc_ds: c_long,
1116 sc_trapno: c_long,
1117 sc_err: c_long,
1118 sc_rip: c_long,
1119 sc_cs: c_long,
1120 sc_rflags: c_long,
1121 sc_rsp: c_long,
1122 sc_ss: c_long,
1123
1124 sc_fpstate: *anyopaque, // struct fxsave64 *
1125 __sc_unused: c_int,
1126 sc_mask: c_int,
1127 sc_cookie: c_long,
1128 };
1129 },
1095 .x86_64 => struct {},
11301096 else => struct {},
11311097};
11321098
1099pub const ucontext_t = switch (builtin.cpu.arch) {
1100 .x86_64 => extern struct {
1101 sc_rdi: c_long,
1102 sc_rsi: c_long,
1103 sc_rdx: c_long,
1104 sc_rcx: c_long,
1105 sc_r8: c_long,
1106 sc_r9: c_long,
1107 sc_r10: c_long,
1108 sc_r11: c_long,
1109 sc_r12: c_long,
1110 sc_r13: c_long,
1111 sc_r14: c_long,
1112 sc_r15: c_long,
1113 sc_rbp: c_long,
1114 sc_rbx: c_long,
1115 sc_rax: c_long,
1116 sc_gs: c_long,
1117 sc_fs: c_long,
1118 sc_es: c_long,
1119 sc_ds: c_long,
1120 sc_trapno: c_long,
1121 sc_err: c_long,
1122 sc_rip: c_long,
1123 sc_cs: c_long,
1124 sc_rflags: c_long,
1125 sc_rsp: c_long,
1126 sc_ss: c_long,
1127
1128 sc_fpstate: *anyopaque, // struct fxsave64 *
1129 __sc_unused: c_int,
1130 sc_mask: c_int,
1131 sc_cookie: c_long,
1132 },
1133 .aarch64 => extern struct {
1134 __sc_unused: c_int,
1135 sc_mask: c_int,
1136 sc_sp: c_ulong,
1137 sc_lr: c_ulong,
1138 sc_elr: c_ulong,
1139 sc_spsr: c_ulong,
1140 sc_x: [30]c_ulong,
1141 sc_cookie: c_long,
1142 },
1143 else => @compileError("missing ucontext_t type definition"),
1144};
1145
11331146pub const sigset_t = c_uint;
11341147pub const empty_sigset: sigset_t = 0;
11351148