--- 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(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) typedef struct sigcontext SIGCONTEXT; @@ -332,6 +332,39 @@ #endif /* __APPLE__ */ +#if defined(__NetBSD__) +# include +# include +# include + +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 */