diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-08-21 15:42:46 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2024-08-28 03:13:01 +0200 |
| commit | d702a21bbcef254f32a1c40498eb81c42c249f28 (patch) | |
| tree | abc1cb37d395758196a7cd42393e7053b5568ee7 /lib/std | |
| parent | 2e2441a89d286f32915218dc7dbc066fe5ff19ce (diff) | |
| download | zig-d702a21bbcef254f32a1c40498eb81c42c249f28.tar.gz zig-d702a21bbcef254f32a1c40498eb81c42c249f28.zip | |
std.os.windows: Define CONTEXT, RUNTIME_FUNCTION, and KNONVOLATILE_CONTEXT_POINTERS for thumb.
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/os/windows.zig | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index aa7b2bd2f8..d277361352 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -4124,6 +4124,10 @@ pub const XMM_SAVE_AREA32 = switch (native_arch) { }; pub const NEON128 = switch (native_arch) { + .thumb => extern struct { + Low: ULONGLONG, + High: LONGLONG, + }, .aarch64 => extern union { DUMMYSTRUCTNAME: extern struct { Low: ULONGLONG, @@ -4252,6 +4256,54 @@ pub const CONTEXT = switch (native_arch) { ctx.Rsp = sp; } }, + .thumb => extern struct { + ContextFlags: ULONG, + R0: ULONG, + R1: ULONG, + R2: ULONG, + R3: ULONG, + R4: ULONG, + R5: ULONG, + R6: ULONG, + R7: ULONG, + R8: ULONG, + R9: ULONG, + R10: ULONG, + R11: ULONG, + R12: ULONG, + Sp: ULONG, + Lr: ULONG, + Pc: ULONG, + Cpsr: ULONG, + Fpcsr: ULONG, + Padding: ULONG, + DUMMYUNIONNAME: extern union { + Q: [16]NEON128, + D: [32]ULONGLONG, + S: [32]ULONG, + }, + Bvr: [8]ULONG, + Bcr: [8]ULONG, + Wvr: [1]ULONG, + Wcr: [1]ULONG, + Padding2: [2]ULONG, + + pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } { + return .{ + .bp = ctx.DUMMYUNIONNAME.S[11], + .ip = ctx.Pc, + .sp = ctx.Sp, + }; + } + + pub fn setIp(ctx: *CONTEXT, ip: usize) void { + ctx.Pc = ip; + } + + pub fn setSp(ctx: *CONTEXT, sp: usize) void { + ctx.Sp = sp; + } + }, .aarch64 => extern struct { ContextFlags: ULONG align(16), Cpsr: ULONG, @@ -4326,6 +4378,23 @@ pub const RUNTIME_FUNCTION = switch (native_arch) { EndAddress: DWORD, UnwindData: DWORD, }, + .thumb => extern struct { + BeginAddress: DWORD, + DUMMYUNIONNAME: extern union { + UnwindData: DWORD, + DUMMYSTRUCTNAME: packed struct { + Flag: u2, + FunctionLength: u11, + Ret: u2, + H: u1, + Reg: u3, + R: u1, + L: u1, + C: u1, + StackAdjust: u10, + }, + }, + }, .aarch64 => extern struct { BeginAddress: DWORD, DUMMYUNIONNAME: extern union { @@ -4349,6 +4418,25 @@ pub const KNONVOLATILE_CONTEXT_POINTERS = switch (native_arch) { FloatingContext: [16]?*M128A, IntegerContext: [16]?*ULONG64, }, + .thumb => extern struct { + R4: ?*DWORD, + R5: ?*DWORD, + R6: ?*DWORD, + R7: ?*DWORD, + R8: ?*DWORD, + R9: ?*DWORD, + R10: ?*DWORD, + R11: ?*DWORD, + Lr: ?*DWORD, + D8: ?*ULONGLONG, + D9: ?*ULONGLONG, + D10: ?*ULONGLONG, + D11: ?*ULONGLONG, + D12: ?*ULONGLONG, + D13: ?*ULONGLONG, + D14: ?*ULONGLONG, + D15: ?*ULONGLONG, + }, .aarch64 => extern struct { X19: ?*DWORD64, X20: ?*DWORD64, |
