| ... | @@ -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 | }; |
| 4125 | | 4125 | |
| 4126 | pub const NEON128 = switch (native_arch) { | 4126 | pub 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, |