| |||
| Home > The ARM C and C++ libraries > ISO-compliant implementation of signals supported by the signal() function in the C library and additional type arguments | |||
Table 11 shows
the signals supported by the signal() function.
It also shows which signals use an additional argument to give more
information about the circumstance in which the signal was raised.
The additional argument is given in the parameter
of type __raise(). For example, division by zero
results in a SIGFPE (signal == 2)
signal with a corresponding additional argument of FE_EX_DIVBYZERO (type
== 2).
Table 11. Signals supported by the signal() function
| Signal | Number | Description | Additional argument |
|---|---|---|---|
| SIGABRT | 1 | Returned when any untrapped exception is thrown, such as:
This
signal is only used if | None |
| SIGFPE | 2 | Used to signal any arithmetic exception, for example, division by zero. Used by hard and soft floating-point and by integer division. | A set of bits from {FE_EX_INEXACT, FE_EX_UNDERFLOW, FE_EX_OVERFLOW, FE_EX_DIVBYZERO, FE_EX_INVALID, DIVBYZERO} |
| SIGILL [a] | 3 | Illegal instruction. | None |
| SIGINT [a] | 4 | Attention request from user. | None |
| SIGSEGV [a] | 5 | Bad memory access. | None |
| SIGTERM [a] | 6 | Termination request. | None |
| SIGSTAK | 7 | Obsolete. | None |
| SIGRTRED | 8 | Redirection failed on a runtime library input/output stream. | Name of file or device being re-opened to redirect a standard stream |
| SIGRTMEM | 9 | Out of heap space during initialization or after corruption. | Size of failed request |
| SIGUSR1 | 10 | User-defined. | User-defined |
| SIGUSR2 | 11 | User-defined. | User-defined |
| SIGPVFN | 12 | A pure virtual function was called from C++. | - |
| SIGCPPL | 13 | Not normally used. | - |
| SIGOUTOFHEAP [b] | 14 | Returned by the C++ function ::operator
new when out of heap space. | Size of failed request |
| reserved | 15-31 | Reserved. | Reserved |
| other | > 31 | User-defined. | User-defined |
[a] This signal is never generated by the library. It is available for you to raise manually, if required. [b] Not used in RVCT 2.1, and later. | |||
Although SIGSTAK exists
in signal.h, this signal is not generated by
the C library and is considered obsolete.
A signal number greater than SIGUSR2 can
be passed through __raise() and caught by the default
signal handler, but it cannot be caught by a handler registered
using signal().
signal() returns an error code if you
try to register a handler for a signal number greater than SIGUSR2.
The default handling of all recognized signals is to print
a diagnostic message and call exit(). This
default behavior applies at program startup and until you change
it.
The IEEE 754 standard for floating-point processing states
that the default action to an exception is to proceed without a
trap. A raised exception in floating-point calculations does not, by
default, generate SIGFPE. You
can modify floating-point error handling by tailoring the functions
and definitions in fenv.h. However, you must
compile these functions with a non-default FP model, such as --fpmode=ieee_fixed and
upwards.
For all the signals in Table 11, when a signal occurs, if the handler
points to a function, the equivalent of signal(sig, SIG_DFL) is
executed before the call to the handler.
If the SIGILL signal is
received by a handler specified to by the signal() function,
the default handling is reset.
ARM® C and C++ Libraries and Floating-Point Support Reference:
IEEE Standard for Floating-Point Arithmetic (IEEE 754), 1985 version