CVS: winex/dlls/ntdll signal_i386.c,1.42,1.43

[email protected]
Newsgroups gmane.comp.emulators.winex.cvs
Message-ID <[email protected]>
Subject: winex/dlls/ntdll signal_i386.c,1.42,1.43Update of /var/lib/cvsd/cvsroot/winex/dlls/ntdll
In directory agravaine:/tmp/cvs-serv31204/dlls/ntdll

Modified Files:
	signal_i386.c 
Log Message:

- convert segfault & fpe signal handlers on MacOSX to mach exceptions as
  requested by Gav


Index: signal_i386.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/dlls/ntdll/signal_i386.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- signal_i386.c	30 Mar 2007 14:39:22 -0000	1.42
+++ signal_i386.c	30 Mar 2007 15:55:31 -0000	1.43
@@ -1669,6 +1669,15 @@
          trap_handler (SIGTRAP, NULL, &ucontext);
          break;
 
+      case EXC_BAD_ACCESS:
+      case EXC_BAD_INSTRUCTION:
+         segv_handler (SIGSEGV, NULL, &ucontext);
+         break;
+
+      case EXC_ARITHMETIC:
+         fpe_handler (SIGFPE, NULL, &ucontext);
+         break;
+
       default:
          return KERN_NOT_SUPPORTED;
    }
@@ -1736,7 +1745,8 @@
     }
 
     res = thread_set_exception_ports (mach_thread_self (),
-                                      EXC_MASK_BREAKPOINT,
+                                      EXC_MASK_BREAKPOINT | EXC_MASK_BAD_ACCESS |
+                                      EXC_MASK_BAD_INSTRUCTION | EXC_MASK_ARITHMETIC,
                                       gExceptionPort,
                                       EXCEPTION_STATE_IDENTITY,
                                       x86_THREAD_STATE32);
@@ -1753,17 +1763,19 @@
     /* automatic child reaping to avoid zombies */
     signal( SIGCHLD, SIG_IGN );
 
-    if (set_handler( SIGINT,  have_sigaltstack, (void (*)())int_handler ) == -1) goto error;
+#ifndef __APPLE__
     if (set_handler( SIGFPE,  have_sigaltstack, (void (*)())fpe_handler ) == -1) goto error;
     if (set_handler( SIGSEGV, have_sigaltstack, (void (*)())segv_handler ) == -1) goto error;
+#if defined(SIGTRAP)
+    if (set_handler( SIGTRAP, have_sigaltstack, (void (*)())trap_handler ) == -1) goto error;
+#endif
+#endif
+    if (set_handler( SIGINT,  have_sigaltstack, (void (*)())int_handler ) == -1) goto error;
     if (set_handler( SIGILL,  have_sigaltstack, (void (*)())segv_handler ) == -1) goto error;
     if (set_handler( SIGABRT, have_sigaltstack, (void (*)())abrt_handler ) == -1) goto error;
 #ifdef SIGBUS
     if (set_handler( SIGBUS,  have_sigaltstack, (void (*)())segv_handler ) == -1) goto error;
 #endif
-#if defined(SIGTRAP) && !defined(__APPLE__)
-    if (set_handler( SIGTRAP, have_sigaltstack, (void (*)())trap_handler ) == -1) goto error;
-#endif
 
 
     if (set_handler( SIGUSR1, have_sigaltstack, (void (*)())usr1_handler ) == -1) goto error;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.