SIGFPE
Deb Ryan
deb at kea.wpd.sgi.com
Wed Dec 13 12:05:06 AEST 1989
In article <624 at chem.ucsd.EDU>, tps at chem.ucsd.edu (Tom Stockfisch) writes:
> With 3.2 floating point exceptions are ignored, with NaN's and Infinity's
> propagated through floating point exceptions, presumably according to
> IEEE rules. I happen to prefer that all exceptions result in SIGFPE
> being raised, so that a process stops right away and either aborts
> or calls a signal()-specified error handler.
>
> How can I achieve this?
> --
>
> || Tom Stockfisch, UCSD Chemistry tps at chem.ucsd.edu
You two choices:
1. Wait for the trap handler, comming out in the aspen release.
This will make it easy to core dump, or do anything your heart can code
in a subroutine .
2. If all you really want to do is coredump, this Fortran
callable C routine will show you what to do. signal (2) will also
allow you to specify your own handler, but you will be pretty limited
without information about the exception.
----------------------------------cut here -------------------------------------
#include <stdio.h>
#include <signal.h>
#include <sys/fpu.h>
/* this code uses information from the manpages fpc(3c) and signal(2)
set_traps is a fortran callable subroutine which will enable
foating point exceptions, and coredump upon recieving one
*/
set_traps_() {
union fpc_csr fpstat;
/* enable the floating point traps
*/
fpstat.fc_word = get_fpc_csr();
fpstat.fc_word |= (FPCSR_ENABLES | FPCSR_EXCEPTIONS);
set_fpc_csr (fpstat.fc_word);
/* abort upon recieving floating point trap
*/
signal (SIGFPE, SIG_DFL);
}
/* test routine for set_traps
*/
main() {
float zero=0.0;
float one=1.0;
float result;
set_traps_();
/* divide by zero */
printf( "\n\ndividing by zero:\n");
result = one/zero;
printf("one/zero yields %e\n",result);
}
--
-Deb
deb at sgi.com
Deborah Ryan Caruso @ Silicon Graphics
More information about the Comp.sys.sgi
mailing list