Mail Archives: djgpp/1996/02/29/06:13:21
I'm trying to use the signal() routine of DJGPP v.2 to trap floating
point exceptions, and until now I have not been sucessful getting a
prog that does not hang the machine. Apparently, the exception routine
is never reached. But I am not sure I'm using the signal() properly
since I'm more a FORTRAN guy, however I tested the same prog under a
true UNIX (HPUX), and there div by 0 and log(0) are handled
separetely, whereas raise(SIGFPE) correctly goes to the routine
exception.
This is a short summary/prog and what happens
-Emmanuel
Emmanuel BIGLER
courrier electronique bigler AT alpha DOT univ-fcomte DOT fr e-mail
telephone E.B. +33 81 66 69 54 E.B. phone
secretariat LPMO +33 81 66 69 99 LPMO secretary
telecopie +33 81 66 69 98 fax
Laboratoire de Physique et Metrologie des Oscillateurs
LPMO/CNRS, 32, avenue de l'observatoire
25044 Besancon Cedex, FRANCE
--------------------------------------------------
# exceptions and signal test program t.c
# for DJGPP v. 2 / DOS (gcc 2.7.2)
# compiled without optimization :
# gcc -s -o t t.c -lm
#
#include <stdio.h>
#include <signal.h>
#include <math.h>
void exception(int j)
{
printf("exception..!") ;
exit();
}
double one=1, zero=0;
main()
{
double res;
/*signal(SIGFPE, exception);*/ /* this line hangs ; hard reboot
requested*/
signal(SIGFPE, SIG_IGN); /* this one also (nope..) */
/* raise(SIGFPE); */ /* this one *alone* works and exits
even if there is no signal call
before ; with a signal call before,
the prog hangs and never reaches
this line */
res = one/zero;
res = log(zero);
return res=-1.0;
}
- Raw text -