67 lines
2.8 KiB
Plaintext
67 lines
2.8 KiB
Plaintext
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 <amd64/trap.h>
|
|
+
|
|
+#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"
|
|
:
|