CVS: winex/dlls/ntdll signal_i386.c,1.42,1.43
[email protected] 30 Mar 2007 15:55:34 -0000
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;