Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ieee_handler(3) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

floatingpoint(3)

sigfpe(3)

signal(3)

sigvec(3)

signal(2)

abort(3C)



ieee_handler(3M-BSD)
M
ISC. REFERENCE MANUAL PAGE
i
S
e
ee_handler(3M-BSD) NAME ieeehandler - IEEE exception trap handler function SYNOPSIS cc [ flag... ] file ... -lucb #include <fp.h> int ieeehandler(action,exception,hdl) char action[], exception[]; sigfpehandlertype hdl; DESCRIPTION This function provides easy exception handling to exploit ANSI/IEEE Std 754-1985 arithmetic in a C program. All argu- ments are pointers to strings. Results arising from invalid arguments and invalid combinations are undefined for effi- ciency. There are three types of action : ``get'', ``set'', and ``clear''. There are five types of exception : ``inexact'' ``division'' ... division by zero exception ``underflow'' ``overflow'' ``invalid'' ``all'' ... all five exceptions above ``common'' ... invalid, overflow, and division exceptions Note: ``all'' and ``common'' only make sense with ``set'' or ``clear''. hdl contains the address of a signal-handling routine. <fp.h> defines sigfpe_handler_type. ``get'' will get the location of the current handler routine for excep- tion in hdl . ``set'' will set the routine pointed at by hdl to be the handler routine and at the same time enable the trap on exception, except when hdl == SIGFPEDEFAULT or SIGFPEIGNORE; then ieeehandler will disable the trap on exception. When hdl == SIGFPEABORT, any trap on exception will dump core using abort(3). ``clear'' ``all'' disables trapping on all five exceptions. Two steps are required to intercept an IEEE-related SIGFPE code with ieeehandler: 1) Set up a handler with ieeehandler. 2) Perform a floating-point operation that generates the intended IEEE exception. Unlike sigfpe(3), ieeehandler also adjusts floating-point hardware mode bits affecting IEEE trapping. For ``clear'', ``set'' SIGFPEDEFAULT, or ``set'' SIGFPEIGNORE, the hardware trap is disabled. For any other ``set'', the hardware trap is enabled. SIGFPE signals can be handled using sigvec(2), signal(3), signal(3F), sigfpe(3), or ieeehandler(3M). In a particular program, to avoid confusion, use only one of these interfaces to handle SIGFPE signals. 1


ieee_handler(3M-BSD)
M
ISC. REFERENCE MANUAL PAGE
i
S
e
ee_handler(3M-BSD) RETURN VALUE ieeehandler normally returns 0. In the case of ``set'', 1 will be returned if the action is not available (for instance, not supported in hardware). EXAMPLE A user-specified signal handler might look like this: void samplehandler( sig, code, scp, addr) int sig ; /* sig == SIGFPE always */ int code ; struct sigcontext *scp ; char *addr ; { /* Sample user-written sigfpe code handler. Prints a message and continues. struct sigcontext is defined in <signal.h>. */ printf("ieee exception code %x occurred at pc %X \n", code,scp->scpc); } and it might be set up like this: extern void samplehandler; main { sigfpehandlertype hdl, oldhandler1, oldhandler2; /* * save current overflow and invalid handlers */ ieeehandler("get","overflow",oldhandler1); ieeehandler("get","invalid", oldhandler2); /* * set new overflow handler to samplehandler and set new * invalid handler to SIGFPEABORT (abort on invalid) */ hdl = (sigfpehandlertype) samplehandler; if(ieeehandler("set","overflow",hdl) != 0) printf("ieeehandler can't set overflow \n"); if(ieeehandler("set","invalid",SIGFPEABORT) != 0) printf("ieeehandler can't set invalid \n"); ... /* * restore old overflow and invalid handlers */ ieeehandler("set","overflow", oldhandler1); ieeehandler("set","invalid", oldhandler2); } FILES /usr/include/fp.h /usr/include/signal.h 2


ieee_handler(3M-BSD)
M
ISC. REFERENCE MANUAL PAGE
i
S
e
ee_handler(3M-BSD) SEE ALSO floatingpoint(3), ieeehandler(3), sigfpe(3), signal(3) sigvec(3), signal(2), abort(3C) in the Programmer's Refer- ence Manual. 3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026