Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigfpe(3) — Dell System V Release 4 Issue 2.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sigvec(2)

floatingpoint(3)

signal(3)

abort(3C)



sigfpe(3)          UNIX System V(BSD Compatibility Package)           sigfpe(3)


NAME
      sigfpe - signal handling for specific SIGFPE codes

SYNOPSIS
      cc [ flag. . . ] file . . . -lucb

      #include <signal.h>

      #include <floatingpoint.h>

      sigfpehandlertype sigfpe(code, hdl)
      sigfpecodetype code;
      sigfpehandlertype hdl;

DESCRIPTION
      This function allows signal handling to be specified for particular
      SIGFPE codes.  A call to sigfpe defines a new handler hdl for a
      particular SIGFPE code and returns the old handler as the value of the
      function sigfpe.  Normally handlers are specified as pointers to
      functions; the special cases SIGFPEIGNORE, SIGFPEABORT, and
      SIGFPEDEFAULT allow ignoring, specifying core dump using abort(3), or
      default handling respectively.

      For these IEEE-related codes:

            FPEFLTINEXTRAP    fp_inexact     floating inexact result
            FPEFLTDIVTRAP     fp_division    floating division by zero
            FPEFLTUNDTRAP     fp_underflow   floating underflow
            FPEFLTOVFTRAP     fp_overflow    floating overflow
            FPEFLTBSUNTRAP    fp_invalid     branch or set on unordered
            FPEFLTOPERRTRAP   fp_invalid     floating operand error
            FPEFLTNANTRAP     fp_invalid     floating Not-A-Number

      default handling is defined to be to call the handler specified to
      ieeehandler(3M).

      For all other SIGFPE codes, default handling is to core dump using
      abort(3).

      The compilation option -ffpa causes fpa recomputation to replace the
      default abort action for code FPEFPAERROR.  Note:  SIGFPEDEFAULT will
      restore abort rather than FPA recomputation for this code.

      Three steps are required to intercept an IEEE-related SIGFPE code with
      sigfpe:

            1.
              Set up a handler with sigfpe.

            2.
              Enable the relevant IEEE trapping capability in the hardware,
              perhaps by using assembly-language instructions.


10/89                                                                    Page 1







sigfpe(3)          UNIX System V(BSD Compatibility Package)           sigfpe(3)


            3.
              Perform a floating-point operation that generates the intended
              IEEE exception.

      Unlike ieeehandler(3M), sigfpe never changes floating-point hardware
      mode bits affecting IEEE trapping.  No IEEE-related SIGFPE signals will
      be generated unless those hardware mode bits are enabled.

      SIGFPE signals can be handled using sigvec(2), signal(3), sigfpe(3), or
      ieeehandler(3M).  In a particular program, to avoid confusion, use only
      one of these interfaces to handle SIGFPE signals.

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; set the new
               * overflow handler to samplehandler and set the new
               * invalid handler to SIGFPEABORT (abort on invalid)
               */
                      hdl = (sigfpehandlertype) samplehandler;
                      oldhandler1 = sigfpe(FPEFLTOVFTRAP, hdl);
                      oldhandler2 = sigfpe(FPEFLTOPERRTRAP, SIGFPEABORT);
                      ...
              /*
               * restore old overflow and invalid handlers
               */
                      sigfpe(FPEFLTOVFTRAP,   oldhandler1);
                      sigfpe(FPEFLTOPERRTRAP, oldhandler2);
              }



Page 2                                                                    10/89







sigfpe(3)          UNIX System V(BSD Compatibility Package)           sigfpe(3)


FILES
      /usr/include/floatingpoint.h
      /usr/include/signal.h

SEE ALSO
      sigvec(2), floatingpoint(3), ieeehandler(3M), signal(3),
      abort(3C) in the Programmer's Reference Manual

RETURN VALUE
      sigfpe returns BADSIG if code is not zero or a defined SIGFPE code.












































10/89                                                                    Page 3





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