ntdll: add signal context function definitions for FreeBSD
Austin English
austinenglish at gmail.com
Mon May 31 15:19:38 CDT 2010
Mostly fixes http://bugs.winehq.org/show_bug.cgi?id=22863. Compile is
still broken, but looks like it's in tools/winebuild now.
--
-Austin
-------------- next part --------------
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index ccea6df..5b4a8ba 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -29,6 +29,10 @@
#include <stdarg.h>
#include <stdio.h>
+#ifdef HAVE_UCONTEXT_H
+# include <ucontext.h>
+#endif
+
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -99,7 +103,7 @@ typedef struct _SCOPE_TABLE
/***********************************************************************
* signal context platform-specific definitions
*/
-#ifdef linux
+#if defined(__linux__)
#include <asm/prctl.h>
extern int arch_prctl(int func, void *ptr);
@@ -125,6 +129,7 @@ extern int arch_prctl(int func, void *ptr);
#define FS_sig(context) (*((WORD *)&(context)->uc_mcontext.gregs[REG_CSGSFS] + 2))
#define RSP_sig(context) ((context)->uc_mcontext.gregs[REG_RSP])
+
#define RIP_sig(context) ((context)->uc_mcontext.gregs[REG_RIP])
#define EFL_sig(context) ((context)->uc_mcontext.gregs[REG_EFL])
#define TRAP_sig(context) ((context)->uc_mcontext.gregs[REG_TRAPNO])
@@ -132,12 +137,45 @@ extern int arch_prctl(int func, void *ptr);
#define FPU_sig(context) ((XMM_SAVE_AREA32 *)((context)->uc_mcontext.fpregs))
-#endif /* linux */
-
-#if defined(__NetBSD__)
-# include <sys/ucontext.h>
-# include <sys/types.h>
-# include <signal.h>
+#elif defined(__FreeBSD__)
+#include <sys/ucontext.h>
+
+#define RAX_sig(context) ((context)->uc_mcontext.mc_rax)
+#define RBX_sig(context) ((context)->uc_mcontext.mc_rbx)
+#define RCX_sig(context) ((context)->uc_mcontext.mc_rcx)
+#define RDX_sig(context) ((context)->uc_mcontext.mc_rdx)
+#define RSI_sig(context) ((context)->uc_mcontext.mc_rsi)
+#define RDI_sig(context) ((context)->uc_mcontext.mc_rdi)
+#define RBP_sig(context) ((context)->uc_mcontext.mc_rbp)
+#define R8_sig(context) ((context)->uc_mcontext.mc_r8)
+#define R9_sig(context) ((context)->uc_mcontext.mc_r9)
+#define R10_sig(context) ((context)->uc_mcontext.mc_r10)
+#define R11_sig(context) ((context)->uc_mcontext.mc_r11)
+#define R12_sig(context) ((context)->uc_mcontext.mc_r12)
+#define R13_sig(context) ((context)->uc_mcontext.mc_r13)
+#define R14_sig(context) ((context)->uc_mcontext.mc_r14)
+#define R15_sig(context) ((context)->uc_mcontext.mc_r15)
+
+#define CS_sig(context) ((context)->uc_mcontext.mc_cs)
+#define DS_sig(context) ((context)->uc_mcontext.mc_ds)
+#define ES_sig(context) ((context)->uc_mcontext.mc_es)
+#define FS_sig(context) ((context)->uc_mcontext.mc_fs)
+#define GS_sig(context) ((context)->uc_mcontext.mc_gs)
+#define SS_sig(context) ((context)->uc_mcontext.mc_ss)
+
+#define EFL_sig(context) ((context)->uc_mcontext.mc_rflags)
+
+#define RIP_sig(context) ((context)->uc_mcontext.mc_rip)
+#define RSP_sig(context) ((context)->uc_mcontext.mc_rsp)
+#define TRAP_sig(context) ((context)->uc_mcontext.mc_trapno)
+#define ERROR_sig(context) ((context)->uc_mcontext.mc_err)
+
+#define FPU_sig(context) ((XMM_SAVE_AREA32 *)((context)->uc_mcontext.mc_fpstate))
+
+#elif defined(__NetBSD__)
+#include <sys/ucontext.h>
+#include <sys/types.h>
+#include <signal.h>
#define RAX_sig(context) ((context)->uc_mcontext.__gregs[_REG_RAX])
#define RBX_sig(context) ((context)->uc_mcontext.__gregs[_REG_RBX])
@@ -171,7 +209,9 @@ extern int arch_prctl(int func, void *ptr);
#define ERROR_sig(context) ((context)->uc_mcontext.__gregs[_REG_ERR])
#define FPU_sig(context) ((XMM_SAVE_AREA32 *)((context)->uc_mcontext.__fpregs))
-#endif /* __NetBSD__ */
+#else
+#error You must define the signal context functions for your platform
+#endif
enum i386_trap_code
{
More information about the wine-patches
mailing list