pkgsrc/emulators/wine/patches/patch-af
2008-06-28 00:12:40 +00:00

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