authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-08-21 15:42:46+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-08-28 03:13:01+02:00
logd702a21bbcef254f32a1c40498eb81c42c249f28
treeabc1cb37d395758196a7cd42393e7053b5568ee7
parent2e2441a89d286f32915218dc7dbc066fe5ff19ce
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.windows: Define CONTEXT, RUNTIME_FUNCTION, and KNONVOLATILE_CONTEXT_POINTERS for thumb.


1 files changed, 88 insertions(+), 0 deletions(-)

lib/std/os/windows.zig+88
......@@ -4124,6 +4124,10 @@ pub const XMM_SAVE_AREA32 = switch (native_arch) {
41244124};
41254125
41264126pub const NEON128 = switch (native_arch) {
4127 .thumb => extern struct {
4128 Low: ULONGLONG,
4129 High: LONGLONG,
4130 },
41274131 .aarch64 => extern union {
41284132 DUMMYSTRUCTNAME: extern struct {
41294133 Low: ULONGLONG,
......@@ -4252,6 +4256,54 @@ pub const CONTEXT = switch (native_arch) {
42524256 ctx.Rsp = sp;
42534257 }
42544258 },
4259 .thumb => extern struct {
4260 ContextFlags: ULONG,
4261 R0: ULONG,
4262 R1: ULONG,
4263 R2: ULONG,
4264 R3: ULONG,
4265 R4: ULONG,
4266 R5: ULONG,
4267 R6: ULONG,
4268 R7: ULONG,
4269 R8: ULONG,
4270 R9: ULONG,
4271 R10: ULONG,
4272 R11: ULONG,
4273 R12: ULONG,
4274 Sp: ULONG,
4275 Lr: ULONG,
4276 Pc: ULONG,
4277 Cpsr: ULONG,
4278 Fpcsr: ULONG,
4279 Padding: ULONG,
4280 DUMMYUNIONNAME: extern union {
4281 Q: [16]NEON128,
4282 D: [32]ULONGLONG,
4283 S: [32]ULONG,
4284 },
4285 Bvr: [8]ULONG,
4286 Bcr: [8]ULONG,
4287 Wvr: [1]ULONG,
4288 Wcr: [1]ULONG,
4289 Padding2: [2]ULONG,
4290
4291 pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } {
4292 return .{
4293 .bp = ctx.DUMMYUNIONNAME.S[11],
4294 .ip = ctx.Pc,
4295 .sp = ctx.Sp,
4296 };
4297 }
4298
4299 pub fn setIp(ctx: *CONTEXT, ip: usize) void {
4300 ctx.Pc = ip;
4301 }
4302
4303 pub fn setSp(ctx: *CONTEXT, sp: usize) void {
4304 ctx.Sp = sp;
4305 }
4306 },
42554307 .aarch64 => extern struct {
42564308 ContextFlags: ULONG align(16),
42574309 Cpsr: ULONG,
......@@ -4326,6 +4378,23 @@ pub const RUNTIME_FUNCTION = switch (native_arch) {
43264378 EndAddress: DWORD,
43274379 UnwindData: DWORD,
43284380 },
4381 .thumb => extern struct {
4382 BeginAddress: DWORD,
4383 DUMMYUNIONNAME: extern union {
4384 UnwindData: DWORD,
4385 DUMMYSTRUCTNAME: packed struct {
4386 Flag: u2,
4387 FunctionLength: u11,
4388 Ret: u2,
4389 H: u1,
4390 Reg: u3,
4391 R: u1,
4392 L: u1,
4393 C: u1,
4394 StackAdjust: u10,
4395 },
4396 },
4397 },
43294398 .aarch64 => extern struct {
43304399 BeginAddress: DWORD,
43314400 DUMMYUNIONNAME: extern union {
......@@ -4349,6 +4418,25 @@ pub const KNONVOLATILE_CONTEXT_POINTERS = switch (native_arch) {
43494418 FloatingContext: [16]?*M128A,
43504419 IntegerContext: [16]?*ULONG64,
43514420 },
4421 .thumb => extern struct {
4422 R4: ?*DWORD,
4423 R5: ?*DWORD,
4424 R6: ?*DWORD,
4425 R7: ?*DWORD,
4426 R8: ?*DWORD,
4427 R9: ?*DWORD,
4428 R10: ?*DWORD,
4429 R11: ?*DWORD,
4430 Lr: ?*DWORD,
4431 D8: ?*ULONGLONG,
4432 D9: ?*ULONGLONG,
4433 D10: ?*ULONGLONG,
4434 D11: ?*ULONGLONG,
4435 D12: ?*ULONGLONG,
4436 D13: ?*ULONGLONG,
4437 D14: ?*ULONGLONG,
4438 D15: ?*ULONGLONG,
4439 },
43524440 .aarch64 => extern struct {
43534441 X19: ?*DWORD64,
43544442 X20: ?*DWORD64,