| Updated: October 28, 2024 | 
Information about a signal
#include <sys/siginfo.h>
typedef struct {
    int             si_signo;
    int             si_code;
    int             si_errno;
    union {
        int             __pad[7];
        struct {
            pid_t           __pid;
            union {
                struct {
                    uid_t           __uid;
                    union sigval    __value;
                } __kill;     /* si_code <= 0 SI_FROMUSER */
                struct {
                    clock_t         __utime;
                    int             __status; /* CLD_EXITED status, else signo */
                    clock_t         __stime;
                } __chld; /* si_signo=SIGCHLD si_code=CLD_* */
            } __pdata;
        } __proc;
        struct {
            int             __fltno;
            void            *__fltip;   
            void            *__addr;    
            int             __bdslot;
        } __fault;                /* si_signo=SIGSEGV,ILL,FPE,TRAP,BUS */
    } __data;
} siginfo_t;
#define si_pid      __data.__proc.__pid
#define si_value    __data.__proc.__pdata.__kill.__value
#define si_uid      __data.__proc.__pdata.__kill.__uid
#define si_status   __data.__proc.__pdata.__chld.__status
#define si_utime    __data.__proc.__pdata.__chld.__utime
#define si_stime    __data.__proc.__pdata.__chld.__stime
#define si_fltno    __data.__fault.__fltno
#define si_trapno   si_fltno
#define si_addr     __data.__fault.__addr
#define si_fltip    __data.__fault.__fltip
#define si_bdslot   __data.__fault.__bdslot
The siginfo_t structure is used to hold information about a signal. It's defined in <sys/siginfo.h>, which <signal.h> includes. This structure includes the following:
| Value | Description | 
|---|---|
| -128 <= si_code <= 0 | User values; you can provide this when you call SignalKill() or SignalKillSigval() | 
| 0 < si_code <= 127 | System values generated by the kernel | 
QNX Neutrino defines SI_FROMUSER() and SI_FROMKERNEL() macros that determine whether or not an si_code value falls in the above ranges.
POSIX defines the following values, not all of which QNX Neutrino uses:
| Signal | Code | Reason | 
|---|---|---|
| SIGILL | ILL_ILLOPC | Illegal opcode | 
| ILL_ILLOPN | Illegal operand (not currently used) | |
| ILL_ILLADR | Illegal addressing mode (not currently used) | |
| ILL_ILLTRP | Illegal trap (not currently used) | |
| ILL_PRVOPC | Privileged opcode; instruction requires privileged CPU mode | |
| ILL_PRVREG | Privileged register (not currently used) | |
| ILL_COPROC | Coprocessor instruction error | |
| ILL_BADSTK | Internal stack error | |
| SIGFPE | FPE_INTDIV | Integer division by zero | 
| FPE_INTOVF | Integer overflow | |
| FPE_FLTDIV | Floating-point divide by zero | |
| FPE_FLTOVF | Floating-point overflow | |
| FPE_FLTUND | Floating-point underflow | |
| FPE_FLTRES | Floating-point inexact result | |
| FPE_FLTINV | Invalid floating-point operation | |
| FPE_FLTSUB | Subscript out of range (not currently used) | |
| SIGSEGV | SEGV_MAPERR | Address isn't mapped to an object | 
| SEGV_ACCERR | The mapping doesn't allow the attempted access | |
| SIGBUS | BUS_ADRALN | Invalid address alignment | 
| BUS_ADRERR | The MMU detected a problem with page table translation | |
| BUS_OBJERR | Object-specific hardware error | |
| BUS_ENDOBJ | The mapping doesn't span the area of the memory object | |
| BUS_ENOMEM | A fault failed to allocate memory; this should only occur when using lazy mappings | |
| BUS_SRVERR | Used in conjunction with another SIGBUS code to represent an error returned by an external resource manager when faulting on a page backed by the resource manager. For example, BUS_SRVERR + BUS_EINVAL means that the resource manager replied with EINVAL to the memory manager's request to read or write a page. | |
| SIGTRAP | TRAP_BRKPT | Process breakpoint trap | 
| TRAP_TRACE | Process trace trap | |
| SIGCHLD | CLD_EXITED | Child has exited | 
| CLD_KILLED | Child has terminated abnormally and did not create a core file | |
| CLD_DUMPED | Child has terminated abnormally and created a core file | |
| CLD_TRAPPED | Traced child has trapped | |
| CLD_STOPPED | Child has stopped | |
| CLD_CONTINUED | Stopped child has continued | |
| SIGPOLL | POLL_IN | Data input available | 
| POLL_OUT | Output buffers available | |
| POLL_MSG | Input message available | |
| POLL_ERR | I/O error | |
| POLL_PRI | High priority input available | |
| POLL_HUP | Device disconnected | |
| Any | SI_USER | Signal sent by kill() | 
| SI_QUEUE | Signal sent by sigqueue() | |
| SI_TIMER | Signal generated by expiration of a timer set by timer_settime() | |
| SI_ASYNCIO | Signal generated by completion of an asynchronous I/O request | |
| SI_MESGQ | Signal generated by arrival of a message on an empty POSIX (not QNX) message queue | 
QNX Neutrino also defines the following:
| Signal | Code | Reason | 
|---|---|---|
| SIGFPE | FPE_NOFPU | No floating point hardware or software emulator present | 
| FPE_NOMEM | No memory for floating point context save area | |
| SIGSEGV | SEGV_STKERR | Stack exception | 
| SEGV_GPERR | General protection | |
| SEGV_IRQERR | Interrupt handler fault (not currently used) | |
| SIGTRAP | TRAP_KDBRK | Kdebug breakpoint | 
| TRAP_CRASH | Crash | 
As a QNX Neutrino extension, if si_code is SI_NOINFO, only si_signo is valid.
| Signal | Member | Value | 
|---|---|---|
| SIGILL, SIGFPE | void *si_addr | The address of the faulting instruction | 
| SIGSEGV, SIGBUS | void *si_addr | The address of the faulting memory reference | 
| SIGCHLD | pid_t si_pid | The child process ID | 
| int si_status | The exit value or signal | |
| uid_t si_uid | The real user ID of the process that sent the signal | 
QNX Neutrino defines the following:
| Signal | Member | Value | 
|---|---|---|
| SIGILL, SIGFPE, SIGSEGV, SIGBUS | int si_fltno | The fault number (see below) | 
| void * si_fltip | The address of the instruction that caused the fault | |
| int si_bdslot | (QNX Neutrino 6.3.2 or later) Nonzero if the faulting instruction
           is in a branch delay slot on architectures that support them
            Earlier versions of procnto left this field as a random value, so you should check the procnto version number before examining this field.  | 
  |
| SIGTRAP | int si_trapno | The trap number | 
| SIGCHLD | clock_t si_utime | The user time consumed, in clock ticks | 
| clock_t si_stime | The system time consumed, in clock ticks | 
The fault numbers (reported in si_fltno), are defined in <sys/fault.h> and include:
Target-specific fault numbers are defined in <platform/fault.h>.
POSIX 1003.1, with QNX Neutrino extensions