79 lines
3.1 KiB
Text
79 lines
3.1 KiB
Text
$NetBSD: patch-af,v 1.25 2008/06/28 00:12:40 jmcneill Exp $
|
|
|
|
--- dlls/ntdll/signal_i386.c.orig 2008-06-17 10:07:31.000000000 -0400
|
|
+++ dlls/ntdll/signal_i386.c 2008-06-27 18:35:37.000000000 -0400
|
|
@@ -199,7 +199,7 @@
|
|
|
|
#endif /* bsdi */
|
|
|
|
-#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__)
|
|
+#if (defined(__NetBSD__) && (__NetBSD_Version__ < 200000000)) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__)
|
|
|
|
typedef struct sigcontext SIGCONTEXT;
|
|
|
|
@@ -332,6 +332,39 @@
|
|
|
|
#endif /* __APPLE__ */
|
|
|
|
+#if defined(__NetBSD__) && (__NetBSD_Version__ >= 200000000)
|
|
+# include <sys/ucontext.h>
|
|
+# include <sys/types.h>
|
|
+# include <signal.h>
|
|
+
|
|
+typedef ucontext_t SIGCONTEXT;
|
|
+
|
|
+#define EAX_sig(context) ((context)->uc_mcontext.__gregs[_REG_EAX])
|
|
+#define EBX_sig(context) ((context)->uc_mcontext.__gregs[_REG_EBX])
|
|
+#define ECX_sig(context) ((context)->uc_mcontext.__gregs[_REG_ECX])
|
|
+#define EDX_sig(context) ((context)->uc_mcontext.__gregs[_REG_EDX])
|
|
+#define ESI_sig(context) ((context)->uc_mcontext.__gregs[_REG_ESI])
|
|
+#define EDI_sig(context) ((context)->uc_mcontext.__gregs[_REG_EDI])
|
|
+#define EBP_sig(context) ((context)->uc_mcontext.__gregs[_REG_EBP])
|
|
+#define ESP_sig(context) _UC_MACHINE_SP(context)
|
|
+
|
|
+#define CS_sig(context) ((context)->uc_mcontext.__gregs[_REG_CS])
|
|
+#define DS_sig(context) ((context)->uc_mcontext.__gregs[_REG_DS])
|
|
+#define ES_sig(context) ((context)->uc_mcontext.__gregs[_REG_ES])
|
|
+#define SS_sig(context) ((context)->uc_mcontext.__gregs[_REG_SS])
|
|
+#define FS_sig(context) ((context)->uc_mcontext.__gregs[_REG_FS])
|
|
+#define GS_sig(context) ((context)->uc_mcontext.__gregs[_REG_GS])
|
|
+
|
|
+#define EFL_sig(context) ((context)->uc_mcontext.__gregs[_REG_EFL])
|
|
+#define EIP_sig(context) _UC_MACHINE_PC(context)
|
|
+#define TRAP_sig(context) ((context)->uc_mcontext.__gregs[_REG_TRAPNO])
|
|
+#define ERROR_sig(context) ((context)->uc_mcontext.__gregs[_REG_ERR])
|
|
+
|
|
+#define FPU_sig(context) NULL
|
|
+#define FPUX_sig(context) ((XMM_SAVE_AREA32 *)&((context)->uc_mcontext.__fpregs))
|
|
+
|
|
+#endif /* __NetBSD__ */
|
|
+
|
|
WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
|
|
|
typedef int (*wine_signal_handler)(unsigned int sig);
|
|
@@ -366,8 +399,13 @@
|
|
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(__NetBSD__)
|
|
+ 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 */
|
|
@@ -1561,7 +1599,11 @@
|
|
#endif /* HAVE_SIGALTSTACK */
|
|
|
|
sig_act.sa_mask = server_block_set;
|
|
+#if defined(__NetBSD__) && (__NetBSD_Version__ < 200000000)
|
|
+ sig_act.sa_flags = SA_RESTART;
|
|
+#else
|
|
sig_act.sa_flags = SA_SIGINFO | SA_RESTART;
|
|
+#endif
|
|
#ifdef SA_ONSTACK
|
|
sig_act.sa_flags |= SA_ONSTACK;
|
|
#endif
|