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) {...@@ -4124,6 +4124,10 @@ pub const XMM_SAVE_AREA32 = switch (native_arch) {
4124};4124};
41254125
4126pub const NEON128 = switch (native_arch) {4126pub const NEON128 = switch (native_arch) {
4127 .thumb => extern struct {
4128 Low: ULONGLONG,
4129 High: LONGLONG,
4130 },
4127 .aarch64 => extern union {4131 .aarch64 => extern union {
4128 DUMMYSTRUCTNAME: extern struct {4132 DUMMYSTRUCTNAME: extern struct {
4129 Low: ULONGLONG,4133 Low: ULONGLONG,
...@@ -4252,6 +4256,54 @@ pub const CONTEXT = switch (native_arch) {...@@ -4252,6 +4256,54 @@ pub const CONTEXT = switch (native_arch) {
4252 ctx.Rsp = sp;4256 ctx.Rsp = sp;
4253 }4257 }
4254 },4258 },
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 },
4255 .aarch64 => extern struct {4307 .aarch64 => extern struct {
4256 ContextFlags: ULONG align(16),4308 ContextFlags: ULONG align(16),
4257 Cpsr: ULONG,4309 Cpsr: ULONG,
...@@ -4326,6 +4378,23 @@ pub const RUNTIME_FUNCTION = switch (native_arch) {...@@ -4326,6 +4378,23 @@ pub const RUNTIME_FUNCTION = switch (native_arch) {
4326 EndAddress: DWORD,4378 EndAddress: DWORD,
4327 UnwindData: DWORD,4379 UnwindData: DWORD,
4328 },4380 },
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 },
4329 .aarch64 => extern struct {4398 .aarch64 => extern struct {
4330 BeginAddress: DWORD,4399 BeginAddress: DWORD,
4331 DUMMYUNIONNAME: extern union {4400 DUMMYUNIONNAME: extern union {
...@@ -4349,6 +4418,25 @@ pub const KNONVOLATILE_CONTEXT_POINTERS = switch (native_arch) {...@@ -4349,6 +4418,25 @@ pub const KNONVOLATILE_CONTEXT_POINTERS = switch (native_arch) {
4349 FloatingContext: [16]?*M128A,4418 FloatingContext: [16]?*M128A,
4350 IntegerContext: [16]?*ULONG64,4419 IntegerContext: [16]?*ULONG64,
4351 },4420 },
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 },
4352 .aarch64 => extern struct {4440 .aarch64 => extern struct {
4353 X19: ?*DWORD64,4441 X19: ?*DWORD64,
4354 X20: ?*DWORD64,4442 X20: ?*DWORD64,