Index: dlls/ntdll/unix/signal_x86_64.c --- dlls/ntdll/unix/signal_x86_64.c.orig +++ dlls/ntdll/unix/signal_x86_64.c @@ -206,6 +206,39 @@ __ASM_GLOBAL_FUNC( alloc_fs_sel, #define FPU_sig(context) ((XMM_SAVE_AREA32 *)((context)->uc_mcontext.__fpregs)) #define XState_sig(context) NULL +#elif defined(__OpenBSD__) + +#include + +#define RAX_sig(context) ((context)->sc_rax) +#define RBX_sig(context) ((context)->sc_rbx) +#define RCX_sig(context) ((context)->sc_rcx) +#define RDX_sig(context) ((context)->sc_rdx) +#define RSI_sig(context) ((context)->sc_rsi) +#define RDI_sig(context) ((context)->sc_rdi) +#define RBP_sig(context) ((context)->sc_rbp) +#define R8_sig(context) ((context)->sc_r8) +#define R9_sig(context) ((context)->sc_r9) +#define R10_sig(context) ((context)->sc_r10) +#define R11_sig(context) ((context)->sc_r11) +#define R12_sig(context) ((context)->sc_r12) +#define R13_sig(context) ((context)->sc_r13) +#define R14_sig(context) ((context)->sc_r14) +#define R15_sig(context) ((context)->sc_r15) +#define CS_sig(context) ((context)->sc_cs) +#define DS_sig(context) ((context)->sc_ds) +#define ES_sig(context) ((context)->sc_es) +#define FS_sig(context) ((context)->sc_fs) +#define GS_sig(context) ((context)->sc_gs) +#define SS_sig(context) ((context)->sc_ss) +#define EFL_sig(context) ((context)->sc_rflags) +#define RIP_sig(context) ((context)->sc_rip) +#define RSP_sig(context) ((context)->sc_rsp) +#define TRAP_sig(context) ((context)->sc_trapno) +#define ERROR_sig(context) ((context)->sc_err) +#define FPU_sig(context) ((XMM_SAVE_AREA32 *)((context)->sc_fpstate)) +#define XState_sig(context) NULL + #elif defined (__APPLE__) #define RAX_sig(context) ((context)->uc_mcontext->__ss.__rax) @@ -258,8 +291,13 @@ enum i386_trap_code TRAP_x86_PAGEFLT = T_PAGEFLT, /* Page fault */ TRAP_x86_ARITHTRAP = T_ARITHTRAP, /* Floating point exception */ TRAP_x86_ALIGNFLT = T_ALIGNFLT, /* Alignment check exception */ +#if defined(__OpenBSD__) + TRAP_x86_MCHK = T_MCA, /* Machine check exception */ + TRAP_x86_CACHEFLT = T_XMM /* Cache flush exception */ +#else TRAP_x86_MCHK = T_MCHK, /* Machine check exception */ TRAP_x86_CACHEFLT = T_XMMFLT /* Cache flush exception */ +#endif #else TRAP_x86_DIVIDE = 0, /* Division by zero exception */ TRAP_x86_TRCTRAP = 1, /* Single-step exception */ @@ -2931,6 +2969,8 @@ void signal_init_thread( TEB *teb ) amd64_set_gsbase( teb ); #elif defined(__NetBSD__) sysarch( X86_64_SET_GSBASE, &teb ); +#elif defined(__OpenBSD__) + sysarch( 0, &teb ); /* XXX: TODO */ #elif defined (__APPLE__) __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :