Commit a7f6e73812
Changed files (1)
lib
std
lib/std/os/windows.zig
@@ -3796,290 +3796,300 @@ pub const EXCEPTION_RECORD = extern struct {
ExceptionInformation: [15]usize,
};
-pub usingnamespace switch (native_arch) {
- .x86 => struct {
- pub const FLOATING_SAVE_AREA = extern struct {
- ControlWord: DWORD,
- StatusWord: DWORD,
- TagWord: DWORD,
- ErrorOffset: DWORD,
- ErrorSelector: DWORD,
- DataOffset: DWORD,
- DataSelector: DWORD,
- RegisterArea: [80]BYTE,
- Cr0NpxState: DWORD,
- };
+pub const FLOATING_SAVE_AREA = switch (native_arch) {
+ .x86 => extern struct {
+ ControlWord: DWORD,
+ StatusWord: DWORD,
+ TagWord: DWORD,
+ ErrorOffset: DWORD,
+ ErrorSelector: DWORD,
+ DataOffset: DWORD,
+ DataSelector: DWORD,
+ RegisterArea: [80]BYTE,
+ Cr0NpxState: DWORD,
+ },
+ else => @compileError("FLOATING_SAVE_AREA only defined on x86"),
+};
- pub const CONTEXT = extern struct {
- ContextFlags: DWORD,
- Dr0: DWORD,
- Dr1: DWORD,
- Dr2: DWORD,
- Dr3: DWORD,
- Dr6: DWORD,
- Dr7: DWORD,
- FloatSave: FLOATING_SAVE_AREA,
- SegGs: DWORD,
- SegFs: DWORD,
- SegEs: DWORD,
- SegDs: DWORD,
- Edi: DWORD,
- Esi: DWORD,
- Ebx: DWORD,
- Edx: DWORD,
- Ecx: DWORD,
- Eax: DWORD,
- Ebp: DWORD,
- Eip: DWORD,
- SegCs: DWORD,
- EFlags: DWORD,
- Esp: DWORD,
- SegSs: DWORD,
- ExtendedRegisters: [512]BYTE,
-
- pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize } {
- return .{ .bp = ctx.Ebp, .ip = ctx.Eip };
- }
- };
+pub const M128A = switch (native_arch) {
+ .x86_64 => extern struct {
+ Low: ULONGLONG,
+ High: LONGLONG,
+ },
+ else => @compileError("M128A only defined on x86_64"),
+};
+
+pub const XMM_SAVE_AREA32 = switch (native_arch) {
+ .x86_64 => extern struct {
+ ControlWord: WORD,
+ StatusWord: WORD,
+ TagWord: BYTE,
+ Reserved1: BYTE,
+ ErrorOpcode: WORD,
+ ErrorOffset: DWORD,
+ ErrorSelector: WORD,
+ Reserved2: WORD,
+ DataOffset: DWORD,
+ DataSelector: WORD,
+ Reserved3: WORD,
+ MxCsr: DWORD,
+ MxCsr_Mask: DWORD,
+ FloatRegisters: [8]M128A,
+ XmmRegisters: [16]M128A,
+ Reserved4: [96]BYTE,
},
- .x86_64 => struct {
- pub const M128A = extern struct {
+ else => @compileError("XMM_SAVE_AREA32 only defined on x86_64"),
+};
+
+pub const NEON128 = switch (native_arch) {
+ .aarch64 => extern union {
+ DUMMYSTRUCTNAME: extern struct {
Low: ULONGLONG,
High: LONGLONG,
- };
-
- pub const XMM_SAVE_AREA32 = extern struct {
- ControlWord: WORD,
- StatusWord: WORD,
- TagWord: BYTE,
- Reserved1: BYTE,
- ErrorOpcode: WORD,
- ErrorOffset: DWORD,
- ErrorSelector: WORD,
- Reserved2: WORD,
- DataOffset: DWORD,
- DataSelector: WORD,
- Reserved3: WORD,
- MxCsr: DWORD,
- MxCsr_Mask: DWORD,
- FloatRegisters: [8]M128A,
- XmmRegisters: [16]M128A,
- Reserved4: [96]BYTE,
- };
-
- pub const CONTEXT = extern struct {
- P1Home: DWORD64 align(16),
- P2Home: DWORD64,
- P3Home: DWORD64,
- P4Home: DWORD64,
- P5Home: DWORD64,
- P6Home: DWORD64,
- ContextFlags: DWORD,
- MxCsr: DWORD,
- SegCs: WORD,
- SegDs: WORD,
- SegEs: WORD,
- SegFs: WORD,
- SegGs: WORD,
- SegSs: WORD,
- EFlags: DWORD,
- Dr0: DWORD64,
- Dr1: DWORD64,
- Dr2: DWORD64,
- Dr3: DWORD64,
- Dr6: DWORD64,
- Dr7: DWORD64,
- Rax: DWORD64,
- Rcx: DWORD64,
- Rdx: DWORD64,
- Rbx: DWORD64,
- Rsp: DWORD64,
- Rbp: DWORD64,
- Rsi: DWORD64,
- Rdi: DWORD64,
- R8: DWORD64,
- R9: DWORD64,
- R10: DWORD64,
- R11: DWORD64,
- R12: DWORD64,
- R13: DWORD64,
- R14: DWORD64,
- R15: DWORD64,
- Rip: DWORD64,
- DUMMYUNIONNAME: extern union {
- FltSave: XMM_SAVE_AREA32,
- FloatSave: XMM_SAVE_AREA32,
- DUMMYSTRUCTNAME: extern struct {
- Header: [2]M128A,
- Legacy: [8]M128A,
- Xmm0: M128A,
- Xmm1: M128A,
- Xmm2: M128A,
- Xmm3: M128A,
- Xmm4: M128A,
- Xmm5: M128A,
- Xmm6: M128A,
- Xmm7: M128A,
- Xmm8: M128A,
- Xmm9: M128A,
- Xmm10: M128A,
- Xmm11: M128A,
- Xmm12: M128A,
- Xmm13: M128A,
- Xmm14: M128A,
- Xmm15: M128A,
- },
+ },
+ D: [2]f64,
+ S: [4]f32,
+ H: [8]WORD,
+ B: [16]BYTE,
+ },
+ else => @compileError("NEON128 only defined on aarch64"),
+};
+
+pub const CONTEXT = switch (native_arch) {
+ .x86 => extern struct {
+ ContextFlags: DWORD,
+ Dr0: DWORD,
+ Dr1: DWORD,
+ Dr2: DWORD,
+ Dr3: DWORD,
+ Dr6: DWORD,
+ Dr7: DWORD,
+ FloatSave: FLOATING_SAVE_AREA,
+ SegGs: DWORD,
+ SegFs: DWORD,
+ SegEs: DWORD,
+ SegDs: DWORD,
+ Edi: DWORD,
+ Esi: DWORD,
+ Ebx: DWORD,
+ Edx: DWORD,
+ Ecx: DWORD,
+ Eax: DWORD,
+ Ebp: DWORD,
+ Eip: DWORD,
+ SegCs: DWORD,
+ EFlags: DWORD,
+ Esp: DWORD,
+ SegSs: DWORD,
+ ExtendedRegisters: [512]BYTE,
+
+ pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize } {
+ return .{ .bp = ctx.Ebp, .ip = ctx.Eip };
+ }
+ },
+ .x86_64 => extern struct {
+ P1Home: DWORD64 align(16),
+ P2Home: DWORD64,
+ P3Home: DWORD64,
+ P4Home: DWORD64,
+ P5Home: DWORD64,
+ P6Home: DWORD64,
+ ContextFlags: DWORD,
+ MxCsr: DWORD,
+ SegCs: WORD,
+ SegDs: WORD,
+ SegEs: WORD,
+ SegFs: WORD,
+ SegGs: WORD,
+ SegSs: WORD,
+ EFlags: DWORD,
+ Dr0: DWORD64,
+ Dr1: DWORD64,
+ Dr2: DWORD64,
+ Dr3: DWORD64,
+ Dr6: DWORD64,
+ Dr7: DWORD64,
+ Rax: DWORD64,
+ Rcx: DWORD64,
+ Rdx: DWORD64,
+ Rbx: DWORD64,
+ Rsp: DWORD64,
+ Rbp: DWORD64,
+ Rsi: DWORD64,
+ Rdi: DWORD64,
+ R8: DWORD64,
+ R9: DWORD64,
+ R10: DWORD64,
+ R11: DWORD64,
+ R12: DWORD64,
+ R13: DWORD64,
+ R14: DWORD64,
+ R15: DWORD64,
+ Rip: DWORD64,
+ DUMMYUNIONNAME: extern union {
+ FltSave: XMM_SAVE_AREA32,
+ FloatSave: XMM_SAVE_AREA32,
+ DUMMYSTRUCTNAME: extern struct {
+ Header: [2]M128A,
+ Legacy: [8]M128A,
+ Xmm0: M128A,
+ Xmm1: M128A,
+ Xmm2: M128A,
+ Xmm3: M128A,
+ Xmm4: M128A,
+ Xmm5: M128A,
+ Xmm6: M128A,
+ Xmm7: M128A,
+ Xmm8: M128A,
+ Xmm9: M128A,
+ Xmm10: M128A,
+ Xmm11: M128A,
+ Xmm12: M128A,
+ Xmm13: M128A,
+ Xmm14: M128A,
+ Xmm15: M128A,
},
- VectorRegister: [26]M128A,
- VectorControl: DWORD64,
- DebugControl: DWORD64,
- LastBranchToRip: DWORD64,
- LastBranchFromRip: DWORD64,
- LastExceptionToRip: DWORD64,
- LastExceptionFromRip: DWORD64,
-
- pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } {
- return .{ .bp = ctx.Rbp, .ip = ctx.Rip, .sp = ctx.Rsp };
- }
-
- pub fn setIp(ctx: *CONTEXT, ip: usize) void {
- ctx.Rip = ip;
- }
-
- pub fn setSp(ctx: *CONTEXT, sp: usize) void {
- ctx.Rsp = sp;
- }
- };
+ },
+ VectorRegister: [26]M128A,
+ VectorControl: DWORD64,
+ DebugControl: DWORD64,
+ LastBranchToRip: DWORD64,
+ LastBranchFromRip: DWORD64,
+ LastExceptionToRip: DWORD64,
+ LastExceptionFromRip: DWORD64,
+
+ pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } {
+ return .{ .bp = ctx.Rbp, .ip = ctx.Rip, .sp = ctx.Rsp };
+ }
- pub const RUNTIME_FUNCTION = extern struct {
- BeginAddress: DWORD,
- EndAddress: DWORD,
- UnwindData: DWORD,
- };
+ pub fn setIp(ctx: *CONTEXT, ip: usize) void {
+ ctx.Rip = ip;
+ }
- pub const KNONVOLATILE_CONTEXT_POINTERS = extern struct {
- FloatingContext: [16]?*M128A,
- IntegerContext: [16]?*ULONG64,
- };
+ pub fn setSp(ctx: *CONTEXT, sp: usize) void {
+ ctx.Rsp = sp;
+ }
},
- .aarch64 => struct {
- pub const NEON128 = extern union {
+ .aarch64 => extern struct {
+ ContextFlags: ULONG align(16),
+ Cpsr: ULONG,
+ DUMMYUNIONNAME: extern union {
DUMMYSTRUCTNAME: extern struct {
- Low: ULONGLONG,
- High: LONGLONG,
- },
- D: [2]f64,
- S: [4]f32,
- H: [8]WORD,
- B: [16]BYTE,
- };
-
- pub const CONTEXT = extern struct {
- ContextFlags: ULONG align(16),
- Cpsr: ULONG,
- DUMMYUNIONNAME: extern union {
- DUMMYSTRUCTNAME: extern struct {
- X0: DWORD64,
- X1: DWORD64,
- X2: DWORD64,
- X3: DWORD64,
- X4: DWORD64,
- X5: DWORD64,
- X6: DWORD64,
- X7: DWORD64,
- X8: DWORD64,
- X9: DWORD64,
- X10: DWORD64,
- X11: DWORD64,
- X12: DWORD64,
- X13: DWORD64,
- X14: DWORD64,
- X15: DWORD64,
- X16: DWORD64,
- X17: DWORD64,
- X18: DWORD64,
- X19: DWORD64,
- X20: DWORD64,
- X21: DWORD64,
- X22: DWORD64,
- X23: DWORD64,
- X24: DWORD64,
- X25: DWORD64,
- X26: DWORD64,
- X27: DWORD64,
- X28: DWORD64,
- Fp: DWORD64,
- Lr: DWORD64,
- },
- X: [31]DWORD64,
+ X0: DWORD64,
+ X1: DWORD64,
+ X2: DWORD64,
+ X3: DWORD64,
+ X4: DWORD64,
+ X5: DWORD64,
+ X6: DWORD64,
+ X7: DWORD64,
+ X8: DWORD64,
+ X9: DWORD64,
+ X10: DWORD64,
+ X11: DWORD64,
+ X12: DWORD64,
+ X13: DWORD64,
+ X14: DWORD64,
+ X15: DWORD64,
+ X16: DWORD64,
+ X17: DWORD64,
+ X18: DWORD64,
+ X19: DWORD64,
+ X20: DWORD64,
+ X21: DWORD64,
+ X22: DWORD64,
+ X23: DWORD64,
+ X24: DWORD64,
+ X25: DWORD64,
+ X26: DWORD64,
+ X27: DWORD64,
+ X28: DWORD64,
+ Fp: DWORD64,
+ Lr: DWORD64,
},
- Sp: DWORD64,
- Pc: DWORD64,
- V: [32]NEON128,
- Fpcr: DWORD,
- Fpsr: DWORD,
- Bcr: [8]DWORD,
- Bvr: [8]DWORD64,
- Wcr: [2]DWORD,
- Wvr: [2]DWORD64,
-
- pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } {
- return .{
- .bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp,
- .ip = ctx.Pc,
- .sp = ctx.Sp,
- };
- }
+ X: [31]DWORD64,
+ },
+ Sp: DWORD64,
+ Pc: DWORD64,
+ V: [32]NEON128,
+ Fpcr: DWORD,
+ Fpsr: DWORD,
+ Bcr: [8]DWORD,
+ Bvr: [8]DWORD64,
+ Wcr: [2]DWORD,
+ Wvr: [2]DWORD64,
+
+ pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } {
+ return .{
+ .bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp,
+ .ip = ctx.Pc,
+ .sp = ctx.Sp,
+ };
+ }
- pub fn setIp(ctx: *CONTEXT, ip: usize) void {
- ctx.Pc = ip;
- }
+ pub fn setIp(ctx: *CONTEXT, ip: usize) void {
+ ctx.Pc = ip;
+ }
- pub fn setSp(ctx: *CONTEXT, sp: usize) void {
- ctx.Sp = sp;
- }
- };
+ pub fn setSp(ctx: *CONTEXT, sp: usize) void {
+ ctx.Sp = sp;
+ }
+ },
+ else => @compileError("CONTEXT is not defined for this architecture"),
+};
- pub const RUNTIME_FUNCTION = extern struct {
- BeginAddress: DWORD,
- DUMMYUNIONNAME: extern union {
- UnwindData: DWORD,
- DUMMYSTRUCTNAME: packed struct {
- Flag: u2,
- FunctionLength: u11,
- RegF: u3,
- RegI: u4,
- H: u1,
- CR: u2,
- FrameSize: u9,
- },
+pub const RUNTIME_FUNCTION = switch (native_arch) {
+ .x86_64 => extern struct {
+ BeginAddress: DWORD,
+ EndAddress: DWORD,
+ UnwindData: DWORD,
+ },
+ .aarch64 => extern struct {
+ BeginAddress: DWORD,
+ DUMMYUNIONNAME: extern union {
+ UnwindData: DWORD,
+ DUMMYSTRUCTNAME: packed struct {
+ Flag: u2,
+ FunctionLength: u11,
+ RegF: u3,
+ RegI: u4,
+ H: u1,
+ CR: u2,
+ FrameSize: u9,
},
- };
+ },
+ },
+ else => @compileError("RUNTIME_FUNCTION is not defined for this architecture"),
+};
- pub const KNONVOLATILE_CONTEXT_POINTERS = extern struct {
- X19: ?*DWORD64,
- X20: ?*DWORD64,
- X21: ?*DWORD64,
- X22: ?*DWORD64,
- X23: ?*DWORD64,
- X24: ?*DWORD64,
- X25: ?*DWORD64,
- X26: ?*DWORD64,
- X27: ?*DWORD64,
- X28: ?*DWORD64,
- Fp: ?*DWORD64,
- Lr: ?*DWORD64,
- D8: ?*DWORD64,
- D9: ?*DWORD64,
- D10: ?*DWORD64,
- D11: ?*DWORD64,
- D12: ?*DWORD64,
- D13: ?*DWORD64,
- D14: ?*DWORD64,
- D15: ?*DWORD64,
- };
+pub const KNONVOLATILE_CONTEXT_POINTERS = switch (native_arch) {
+ .x86_64 => extern struct {
+ FloatingContext: [16]?*M128A,
+ IntegerContext: [16]?*ULONG64,
+ },
+ .aarch64 => extern struct {
+ X19: ?*DWORD64,
+ X20: ?*DWORD64,
+ X21: ?*DWORD64,
+ X22: ?*DWORD64,
+ X23: ?*DWORD64,
+ X24: ?*DWORD64,
+ X25: ?*DWORD64,
+ X26: ?*DWORD64,
+ X27: ?*DWORD64,
+ X28: ?*DWORD64,
+ Fp: ?*DWORD64,
+ Lr: ?*DWORD64,
+ D8: ?*DWORD64,
+ D9: ?*DWORD64,
+ D10: ?*DWORD64,
+ D11: ?*DWORD64,
+ D12: ?*DWORD64,
+ D13: ?*DWORD64,
+ D14: ?*DWORD64,
+ D15: ?*DWORD64,
},
- else => struct {},
+ else => @compileError("KNONVOLATILE_CONTEXT_POINTERS is not defined for this architecture"),
};
pub const EXCEPTION_POINTERS = extern struct {