* crt1.c (_gnu_exception_handler): Handle illegal instruction
OS exception as a signal if user has defined a SIGILL handler.
This commit is contained in:
parent
89e5f7f81e
commit
45e3403e7b
|
@ -1,3 +1,8 @@
|
||||||
|
2005-05-20 Danny Smith <dannysmith@users.sourceforge
|
||||||
|
|
||||||
|
* crt1.c (_gnu_exception_handler): Handle illegal instruction
|
||||||
|
OS exception as a signal if user has defined a SIGILL handler.
|
||||||
|
|
||||||
2005-05-10 Danny Smith <dannysmith@users.sourceforge.net>
|
2005-05-10 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
* mingwex/math/nexttoward.c: New file.
|
* mingwex/math/nexttoward.c: New file.
|
||||||
|
|
|
@ -124,6 +124,25 @@ _gnu_exception_handler (EXCEPTION_POINTERS * exception_data)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||||
|
case EXCEPTION_PRIV_INSTRUCTION:
|
||||||
|
/* test if the user has set SIGILL */
|
||||||
|
old_handler = signal (SIGILL, SIG_DFL);
|
||||||
|
if (old_handler == SIG_IGN)
|
||||||
|
{
|
||||||
|
/* this is undefined if the signal was raised by anything other
|
||||||
|
than raise (). */
|
||||||
|
signal (SIGILL, SIG_IGN);
|
||||||
|
action = EXCEPTION_CONTINUE_EXECUTION;
|
||||||
|
}
|
||||||
|
else if (old_handler != SIG_DFL)
|
||||||
|
{
|
||||||
|
/* This means 'old' is a user defined function. Call it */
|
||||||
|
(*old_handler) (SIGILL);
|
||||||
|
action = EXCEPTION_CONTINUE_EXECUTION;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case EXCEPTION_FLT_INVALID_OPERATION:
|
case EXCEPTION_FLT_INVALID_OPERATION:
|
||||||
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
|
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
|
||||||
case EXCEPTION_FLT_DENORMAL_OPERAND:
|
case EXCEPTION_FLT_DENORMAL_OPERAND:
|
||||||
|
|
Loading…
Reference in New Issue