$NetBSD$

--- src/Unix/sigsegv.cpp.orig	2006-03-30 22:45:49.000000000 +0000
+++ src/Unix/sigsegv.cpp
@@ -226,7 +226,7 @@ static void powerpc_decode_instruction(i
 
 #if HAVE_SIGINFO_T
 // Generic extended signal handler
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__)
 #define SIGSEGV_ALL_SIGNALS				FAULT_HANDLER(SIGBUS)
 #else
 #define SIGSEGV_ALL_SIGNALS				FAULT_HANDLER(SIGSEGV)
@@ -264,7 +264,7 @@ static void powerpc_decode_instruction(i
 #define SIGSEGV_SKIP_INSTRUCTION		ix86_skip_instruction
 #endif
 #endif
-#if defined(__FreeBSD__) || defined(__OpenBSD__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
 #if (defined(i386) || defined(__i386__))
 #define SIGSEGV_FAULT_INSTRUCTION		(((struct sigcontext *)scp)->sc_eip)
 #define SIGSEGV_REGISTER_FILE			((unsigned long *)&(((struct sigcontext *)scp)->sc_edi)) /* EDI is the first GPR (even below EIP) in sigcontext */
@@ -451,7 +451,7 @@ static sigsegv_address_t get_fault_addre
 #define SIGSEGV_ALL_SIGNALS				FAULT_HANDLER(SIGSEGV)
 #endif
 #endif
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__)
 #if (defined(i386) || defined(__i386__))
 #define SIGSEGV_ALL_SIGNALS				FAULT_HANDLER(SIGBUS)
 #define SIGSEGV_FAULT_HANDLER_ARGLIST	int sig, int code, struct sigcontext *scp, char *addr
@@ -721,10 +721,14 @@ enum {
 #endif
 };
 #endif
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__)
 enum {
 #if (defined(i386) || defined(__i386__))
+#  if (defined(__FreeBSD__) && __FreeBSD_version >= 500000)
 	X86_REG_EIP = 10,
+#else
+	X86_REG_EIP = 11,
+#endif
 	X86_REG_EAX = 7,
 	X86_REG_ECX = 6,
 	X86_REG_EDX = 5,
