1.23.3 ISO-compliant implementation of signals supported by the signal() function in the C library and additional type arguments

The signal() function supports a number of signals.

The following table 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 type parameter of __raise(). For example, division by floating-point zero results in a SIGFPE signal with a corresponding additional argument of FE_EX_DIVBYZERO.

Table 1-10 Signals supported by the signal() function

Signal Number Description Additional argument

Returned when the abort() function is called.

The abort() function is triggered when there is an untrapped C++ exception, or when an assertion fails.

SIGFPE 2 Signals 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 a
SIGILL 3 Illegal instruction. None
SIGINT b 4 Attention request from user. None
SIGSEGV b 5 Bad memory access. None
SIGTERM b 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++. -

Not normally used.

reserved 15-31 Reserved. Reserved
other > 31 User-defined. User-defined

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 the above table, 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.


These constants are defined in fenv.h. FE_EX_DIVBYZERO is for floating-point division while DIVBYZERO is for integer division.


The library never generates this signal. It is available for you to raise manually, if required.

Non-ConfidentialPDF file icon PDF versionARM DUI0475M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.