Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kill(1)

kill(2)

ptrace(2)

sigblock(2)

sigpause(2)

sigsetmask(2)

sigstack(2)

sigvec(2)

setjmp(3c)

setjmp(3f)

tty(4)



SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



NAME
     sigvec - software signal facilities

SYNOPSIS
     #include <sys/signal.h>

     sigvec(sig, vec, ovec)
     int sig;
     struct sigvec *vec, *ovec;

DESCRIPTION
     The sigvec facility assigns a handler for a specific signal
     sig, using the following structure, defined in
     <sys/signal.h>:

          struct    sigvec {
               int  (*sv_handler)();
               int  sv_mask;
               int  sv_flags;
          };

     If vec is non-zero, it specifies a handler routine
     sv_handler() and mask sv_mask to be used when delivering
     sig. Further, if sv_flags is 1, the system delivers the
     signal to the process on a signal stack, specified with
     sigstack(2).  If sv_flags is 2, the system is not restarted
     on signal return.  If ovec is non-zero, the previous
     handling information for the signal is returned to the user.

     The system defines a set of signals that may be delivered to
     a process.  Signal delivery resembles the occurrence of a
     hardware interrupt: the signal is blocked from further
     occurrence, the current process context is saved, and a new
     one is built.  A process may specify a handler to which a
     signal is delivered, may reinstate the default action for a
     signal, or may specify that a signal is to be ignored.  A
     process may also specify that a default action is to be
     taken by the system when a signal occurs.  Normally, signal
     handlers execute on the current stack of the process; this
     may be changed, on a per-handler basis, so that signals are
     taken on a special signal stack.

     All signals have the same priority.  Signal routines execute
     with the signal that caused their invocation blocked, but
     other signals may yet occur.  A global signal mask defines
     the set of signals currently blocked from delivery to a
     process.  The signal mask for a process is initialized from
     that of its parent (normally 0); it may be changed with a
     sigblock(2) or sigsetmask(2) call, or when a signal is
     delivered to the process.





Printed 4/6/89                                                  1





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



     When a signal condition arises for a process, the signal is
     added to a set of signals pending for the process.  If the
     signal is not currently blocked by the process then it is
     delivered to the process.  When a signal is delivered, the
     current state of the process is saved, a new signal mask is
     calculated (as described later), and the signal handler is
     invoked.  The call to the handler is arranged so that if the
     signal handling routine returns normally the process resumes
     execution in the context from before the signal's delivery.
     If the process wishes to resume in a different context, then
     it must arrange to restore the previous context itself.

     When a signal is delivered to a process a new signal mask is
     installed for the duration of the process' signal handler
     (or until a sigblock or sigsetmask call is made).  This new
     mask is formed by taking the current signal mask, adding the
     signal to be delivered, and or'ing in the signal mask
     associated with the handler to be invoked.

     The following is a list of all signals with names as in the
     include file  <sys/signal.h>:

 SIGHUP        1    hangup
 SIGINT        2    interrupt
 SIGQUIT       3*   quit
 SIGILL        4*   illegal instruction (not reset when caught)
 SIGTRAP       5*   trace trap (not reset when caught)
 SIGIOT        6*   FLAG instruction when F condition set
 SIGDISPLAY    7*   event/timer
 SIGFPE        8*   floating point exception
 SIGKILL       9    kill (cannot be caught or ignored)
 SIGBUS       10*   bus error
 SIGSEGV      11*   segmentation violation
 SIGSYS       12*   bad argument to system call
 SIGPIPE      13    write on a pipe with no one to read it
 SIGALRM      14    alarm clock
 SIGTERM      15    software termination signal from kill
 SIGURG       16•   urgent condition present on socket,
                    exception condition present on a device
 SIGSTOP      17†   stop (cannot be caught or ignored)
 SIGTSTP      18†   stop signal generated from keyboard
 SIGCONT      19•   continue after stop (cannot be blocked)
 SIGCHLD      20•   to parent on child stop or exit
 SIGCLD       20•   synonym for SIGCHLD (for System V compatibility)
 SIGTTIN      21†   background read attempted from control terminal
 SIGTTOU      22†   background write attempted to control terminal
 SIGIO        23•   I/O is possible on a descriptor (see fcntl(2))
 SIGXCPU      24    cpu time limit exceeded (see setrlimit(2))
 SIGXFSZ      25    file size limit exceeded (see setrlimit(2))
 SIGVTALRM    26    virtual time alarm (see setitimer(2))
 SIGPROF      27    profiling timer alarm (see setitimer(2))
 SIGUSR1      28    user-defined signal 1



Printed 4/6/89                                                  2





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



 SIGUSR2      29    user-defined signal 2
 SIGWINCH     30•   window size changed
 SIGPWR       31    power fail
 SIGLOST      32    resource lost (e.g., record-lock lost)

     The starred signals in the list cause a core image if not
     caught or ignored.

     Once a signal handler is installed, it remains installed
     until another sigvec call is made, or an execve(2) is
     performed.  The default action for a signal may be
     reinstated by setting sv_handler to SIG_DFL; this default is
     termination (with a core image for starred signals) except
     for signals marked with • or †.  Signals marked with • are
     discarded if the action is SIG_DFL; signals marked with †
     stop the process.  If sv_handler is SIG_IGN the signal is
     subsequently ignored, and pending instances of the signal
     are discarded.

     If a caught signal occurs during certain system calls,
     terminating the call prematurely, the call is automatically
     restarted.  In particular, this can occur during a read(2)
     or write(2) on a slow device (such as a terminal but not a
     file) and during a wait(2).

     After a fork(2) the child inherits all signals, the signal
     mask, and the signal stack.

     The system call execve(2) resets all caught signals to
     default action; ignored signals remain ignored; the signal
     mask remains the same; the signal stack state is reset.

     The mask specified in vec is not allowed to block SIGKILL,
     SIGSTOP, or SIGCONT; this is done silently by the system.

     The handler routine can be declared:

          handler(sig, code, scp)
          int sig, code;
          struct sigcontext *scp;

     Here sig is the signal number, into which the hardware
     faults and traps are mapped as defined here; code is a
     parameter, a constant, as explained here; scp is a pointer
     to the sigcontext structure (defined in <sys/signal.h>),
     used to restore the context from before the signal.

     The following defines the mapping of hardware traps to
     signals and codes.  All symbols are defined in detail in
     <sys/signal.h>:
    Hardware Condition                  Signal    Code
    Arithmetic traps:



Printed 4/6/89                                                  3





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



    Integer division by zero            SIGFPE    FPE_INTDIV_TRAP
    Floating overflow                   SIGFPE    FPE_FLTOVF_TRAP
    Floating division by zero           SIGFPE    FPE_FLTDIV_TRAP
    Floating underflow                  SIGFPE    FPE_FLTUND_TRAP
    Floating inexact result             SIGFPE    FPE_INEXCT_TRAP
    Branch/set on unordered condition   SIGFPE    FPE_BRCOND_TRAP
    Not a number                        SIGFPE    FPE_NAN_TRAP
    Operand error                       SIGFPE    FPE_OPRND_TRAP
    Write to read-only memory           SIGBUS
    Read/write unmapped memory          SIGSEGV
    Undefined instruction trap          SIGILL    ILL_UNDEF_TRAP
    Privileged instruction trap         SIGILL    ILL_PRIVIN_TRAP
    A-line instruction trap             SIGILL    ILL_ALINE_TRAP
    F-line instruction trap             SIGILL    ILL_FLINE_TRAP
    Format error trap                   SIGILL    ILL_FORMAT_TRAP
    Trace pending                       SIGTRAP   TRAP_TRC
    Breakpoint (TRAP #12) instruction   SIGTRAP   TRAP_BPT
    CHK or CHK2 instruction             SIGIOT    IOT_CHK_TRAP
    Trap instructions:
    ccTRAPcc/TRAPcc/TRAPV/FTRAPcc       SIGIOT    IOT_TRAPV_TRAP
    TRAP #0                             SIGIOT    IOT_TRAP0_TRAP
    TRAP #1                             SIGIOT    IOT_TRAP1_TRAP
    TRAP #2                             SIGIOT    IOT_TRAP2_TRAP
    TRAP #3                             SIGIOT    IOT_TRAP3_TRAP
    TRAP #4                             SIGIOT    IOT_TRAP4_TRAP
    TRAP #5                             SIGIOT    IOT_TRAP5_TRAP
    TRAP #6                             SIGIOT    IOT_TRAP6_TRAP
    TRAP #7                             SIGIOT    IOT_TRAP7_TRAP

     All entries for SIGFPE are dependent upon the 68881
     exception register (see setfp(3m).

     The programmer familiar with the Motorola 68020 exception
     vectors may be more comfortable with the following table,
     organized by exception vector offset, which describes how
     each exception is handled by the kernel.  For each exception
     causing a signal delivery to the process, the signal and
     code are given.  UPPER_CASE_CONSTANTs for signals and codes
     are defined in <sys/signal.h>.

     (Note that numeric values of the codes assigned to
     exceptions which result in SIGIOT are the offset of the
     exception vector; for example, the code for exception vector
     0x18, CHK instruction, is IOT_CHK_TRAP which is equated to
     0x18.)

     0x08 bus error
        Directed to page fault handler, this is normally
        transparent to the user program unless a segmentation
        violation has occurred.

     0x0C address error



Printed 4/6/89                                                  4





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



        signal=SIGBUS, code=0

     0x10 illegal instruction
        signal=SIGILL, code=ILL_UNDEF_TRAP

     0x14 zero divide
        signal=SIGFPE, code=FPE_INTDIV_TRAP

     0x18 CHK, CHK2
        signal=SIGIOT, code=IOT_CHK_TRAP (0x18)

     0x1C cpTRAPcc, TRAPcc, TRAPV (and FTRAPcc)
        signal=SIGIOT, code=IOT_TRAPV_TRAP (0x1C)

     0x20 privilege violation
        signal=SIGILL, code=ILL_PRIVIN_TRAP

     0x24 trace
        (user process T bit cleared) signal=SIGTRAP code=TRAP_TRC

     0x28 line 1010 emulator
        signal=SIGILL code=ILL_ALINE_TRAP

     0x2C line 1111 emulator
        signal=SIGILL code=ILL_FLINE_TRAP

     0x30 (unassigned, reserved)
        prints stray interrupt message on console

     0x34 coprocessor protocol violation
        prints stray interrupt message on console

     0x38 format error
        signal=SIGILL code=ILL_FORMAT_TRAP

     0x3C uninitialized interrupt
        prints stray interrupt message on console

     0x40-0x5C (unassigned, reserved)
        prints stray interrupt message on console

     0x60 spurious interrupt
        prints stray interrupt message on console

     0x64-0x7C interrupt vectors
        handled by device drivers

     0x80 TRAP #0
        signal=SIGIOT code=IOT_TRAP0_TRAP (0x80)

     0x84 TRAP #1
        signal=SIGIOT code=IOT_TRAP1_TRAP (0x84)



Printed 4/6/89                                                  5





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



     0x88 TRAP #2
        signal=SIGIOT code=IOT_TRAP2_TRAP (0x88)

     0x8C TRAP #3
        signal=SIGIOT code=IOT_TRAP3_TRAP (0x8C)

     0x90 TRAP #4
        signal=SIGIOT code=IOT_TRAP4_TRAP (0x90)

     0x94 TRAP #5
        signal=SIGIOT code=IOT_TRAP5_TRAP (0x94)

     0x98 TRAP #6
        signal=SIGIOT code=IOT_TRAP6_TRAP (0x98)

     0x9C TRAP #7
        signal=SIGIOT code=IOT_TRAP7_TRAP (0x9C)

     0xA0 TRAP #8
        used by kernel (for vector complete)

     0xA4 TRAP #9
        used by kernel (for vcall)

     0xA8 TRAP #10 (decimal)
        used by kernel (for return from signal handler)

     0xAC TRAP #11 (decimal)
        used by kernel (for normal system call)

     0xB0 TRAP #12 (decimal)
        (used as breakpoint instruction; user process T bit
        cleared)

     signal=SIGTRAP code=TRAP_BPT

     0xB4 TRAP #13 (decimal)
        signal=SIGIOT code=IOT_TRAP13_TRAP (0xB4)

     2P This trap is used by the 4300 series UTek workstation
        display subsystem.  Programs intended to run on a 4300
        series workstation must avoid use of this trap.

     0xB8 TRAP #14 (decimal)
        signal=SIGIOT code=IOT_TRAP14_TRAP (0xB8)

     2P This trap is used by the 4300 series UTek workstation ROM
        and the PDB kernel debugger.  Programs intended to run on
        a 4300 series UTek workstation must avoid use of this
        trap.

     0xBC TRAP #15 (decimal)



Printed 4/6/89                                                  6





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



        signal=SIGIOT code=IOT_TRAP15_TRAP (0xBC)

     2P This trap is used by the 4300 series UTek workstation
        kernel to emulate system calls to the UniFLEXr operating
        system.  Programs intended to run on a 4300 series UTek
        workstation must avoid use of this trap.

     0xC0 FPCP branch or set on unordered condition
        signal=SIGFPE code=FPE_BRCOND_TRAP

     0xC4 FPCP inexact result
        signal=SIGFPE code=FPE_INEXCT_TRAP

     0xC8 FPCP divide by zero
        signal=SIGFPE code=FPE_FLTDIV_TRAP

     0xCC FPCP underflow
        signal=SIGFPE code=FPE_FLTUND_TRAP

     0xD0 FPCP operand error
        signal=SIGFPE code=FPE_OPRND_TRAP

     0xD4 FPCP overflow
        signal=SIGFPE code=FPE_FLTOVF_TRAP

     0xD8 FPCP signaling NAN
        signal=SIGFPE code=FPE_NAN_TRAP

     0xDC (unassigned, reserved)
        prints stray interrupt message on console

     0xE0 PMMU configuration
        prints stray interrupt message on console

     0xE4 PMMU illegal operation
        prints stray interrupt message on console

     0xE8 PMMU access level violation
        prints stray interrupt message on console

     0xEC-0xFC (unassigned, reserved)
        prints stray interrupt message on console

     0x100-0x3F0 (user defined vectors)
        prints stray interrupt message on console

     0x3F4 (user defined vector)
        used for internal kernel use

     0x3F8 (user defined vector)
        used for internal kernel use




Printed 4/6/89                                                  7





SIGVEC(2)               COMMAND REFERENCE               SIGVEC(2)



     0x3FC (user defined vector)
        used for internal kernel use

DIAGNOSTICS
     The sigvec facility fails and no new signal handler is
     installed if one of the following occurs:

     [EFAULT]     Either vec or ovec points to memory which is
                  not a valid part of the process address space.

     [EINVAL]     Sig is not a valid signal number.

     [EINVAL]     An attempt is made to ignore or supply a
                  handler for SIGKILL or SIGSTOP.

     [EINVAL]     An attempt is made to ignore SIGCONT (by
                  default SIGCONT is ignored).

RETURN VALUE
     If ovec is non-zero, upon successful completion the previous
     handling information is returned in ovec. If ovec is NULL,
     upon successful completion a 0 is returned.  If an error
     occurs, a value of -1 is returned and errno is set to
     indicate the error.

SEE ALSO
     kill(1), kill(2), ptrace(2), sigblock(2), sigpause(2),
     sigsetmask(2), sigstack(2), sigvec(2), setjmp(3c),
     setjmp(3f), and tty(4).


























Printed 4/6/89                                                  8



%%index%%
na:288,87;
sy:375,914;
de:1289,2414;4063,2952;7375,2782;10517,2775;13652,1342;15354,1496;17210,1474;19044,71;
di:19115,709;
rv:19824,434;
se:20258,411;
%%index%%000000000185

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