This is the mail archive of the
cygwin
mailing list for the Cygwin project.
I want my FPE!
- From: Mark Geisert <mark at maxrnd dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 17 Sep 2009 19:46:15 +0000 (UTC)
- Subject: I want my FPE!
I would like to get control when floating-point exceptions occur, but the simple
approach doesn't seem to work; see the STC below. It shows SIGSEGV can be
trapped but not SIGFPE. In another experiment I tried extending libsigsegv to
handle FP exceptions but got the same results.
Is there something I need to do to "condition" the Cygwin environment to
generate FP exceptions? I saw the code in winsup/something/or/other to map x86
FP exceptions to SIGFPE but it seems somehow the exceptions aren't being
generated in the first place.
Thanks much,
..mark
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
jmp_buf trapoline;
void segv_handler(int x)
{
puts("SIGSEGV handled, continuing");
longjmp(trapoline, 1);
}
void fpe_handler(int x)
{
puts("SIGFPE handled, continuing");
longjmp(trapoline, 2);
}
int main()
{
signal(SIGSEGV, segv_handler);
signal(SIGFPE, fpe_handler);
switch(setjmp(trapoline)) {
case 0:
// first, force a SIGSEGV
printf("%X\n", *(int *) 42);
break;
case 1:
// second, force a SIGFPE
printf("%f\n", 1E200 * 1E200);
break;
case 2:
// all done
break;
}
return 0;
}
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple