src/sys/sys/siginfo.h

201 lines
6.2 KiB
C

/* $OpenBSD: siginfo.h,v 1.14 2024/02/21 15:53:07 deraadt Exp $ */
/*
* Copyright (c) 1997 Theo de Raadt
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SYS_SIGINFO_H
#define _SYS_SIGINFO_H
#include <sys/cdefs.h>
union sigval {
int sival_int; /* integer value */
void *sival_ptr; /* pointer value */
};
/*
* Negative signal codes are reserved for future use for
* user generated signals.
*/
#define SI_FROMUSER(sip) ((sip)->si_code <= 0)
#define SI_FROMKERNEL(sip) ((sip)->si_code > 0)
#define SI_NOINFO 32767 /* no signal information */
#define SI_USER 0 /* user generated signal via kill() */
#define SI_LWP (-1) /* user generated signal via lwp_kill()*/
#define SI_QUEUE (-2) /* user generated signal via sigqueue()*/
#define SI_TIMER (-3) /* from timer expiration */
#if __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE
/*
* The machine dependent signal codes (SIGILL, SIGFPE,
* SIGSEGV, and SIGBUS)
*/
#define ILL_ILLOPC 1 /* illegal opcode */
#define ILL_ILLOPN 2 /* illegal operand */
#define ILL_ILLADR 3 /* illegal addressing mode */
#define ILL_ILLTRP 4 /* illegal trap */
#define ILL_PRVOPC 5 /* privileged opcode */
#define ILL_PRVREG 6 /* privileged register */
#define ILL_COPROC 7 /* co-processor */
#define ILL_BADSTK 8 /* bad stack */
#define ILL_BTCFI 9 /* IBT missing on indirect call */
#define NSIGILL 9
#define EMT_TAGOVF 1 /* tag overflow */
#define NSIGEMT 1
#define FPE_INTDIV 1 /* integer divide by zero */
#define FPE_INTOVF 2 /* integer overflow */
#define FPE_FLTDIV 3 /* floating point divide by zero */
#define FPE_FLTOVF 4 /* floating point overflow */
#define FPE_FLTUND 5 /* floating point underflow */
#define FPE_FLTRES 6 /* floating point inexact result */
#define FPE_FLTINV 7 /* invalid floating point operation */
#define FPE_FLTSUB 8 /* subscript out of range */
#define NSIGFPE 8
#define SEGV_MAPERR 1 /* address not mapped to object */
#define SEGV_ACCERR 2 /* invalid permissions */
#define NSIGSEGV 2
#define BUS_ADRALN 1 /* invalid address alignment */
#define BUS_ADRERR 2 /* non-existent physical address */
#define BUS_OBJERR 3 /* object specific hardware error */
#define NSIGBUS 3
#endif /* __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE */
/*
* SIGTRAP signal codes
*/
#define TRAP_BRKPT 1 /* breakpoint trap */
#define TRAP_TRACE 2 /* trace trap */
#define NSIGTRAP 2
/*
* SIGCHLD signal codes
*/
#define CLD_EXITED 1 /* child has exited */
#define CLD_KILLED 2 /* child was killed */
#define CLD_DUMPED 3 /* child has coredumped */
#define CLD_TRAPPED 4 /* traced child has stopped */
#define CLD_STOPPED 5 /* child has stopped on signal */
#define CLD_CONTINUED 6 /* stopped child has continued */
#define NSIGCLD 6
#if 0
/*
* SIGPOLL signal codes - not supported
*/
#define POLL_IN 1 /* input available */
#define POLL_OUT 2 /* output possible */
#define POLL_MSG 3 /* message available */
#define POLL_ERR 4 /* I/O error */
#define POLL_PRI 5 /* high priority input available */
#define POLL_HUP 6 /* device disconnected */
#define NSIGPOLL 6
/*
* SIGPROF signal codes - not supported
*/
#define PROF_SIG 1 /* have to set code non-zero */
#define NSIGPROF 1
#endif
#define SI_MAXSZ 128
#define SI_PAD ((SI_MAXSZ / sizeof (int)) - 3)
#include <sys/time.h>
typedef struct {
int si_signo; /* signal from signal.h */
int si_code; /* code from above */
int si_errno; /* error from errno.h */
union {
int _pad[SI_PAD]; /* for future growth */
struct { /* kill(), SIGCHLD */
pid_t _pid; /* process ID */
uid_t _uid;
union {
struct {
union sigval _value;
} _kill;
struct {
clock_t _utime;
clock_t _stime;
int _status;
} _cld;
} _pdata;
} _proc;
struct { /* SIGSEGV, SIGBUS, SIGILL and SIGFPE */
void *_addr; /* faulting address */
int _trapno; /* illegal trap number */
} _fault;
#if 0
struct { /* SIGPOLL, SIGXFSZ */
/* fd not currently available for SIGPOLL */
int _fd; /* file descriptor */
long _band;
} _file;
struct { /* SIGPROF */
caddr_t _faddr; /* last fault address */
timespec _tstamp; /* real time stamp */
short _syscall; /* current syscall */
char _nsysarg; /* number of arguments */
char _fault; /* last fault type */
long _sysarg[8]; /* syscall arguments */
long _mstate[17]; /* exactly fills struct*/
} _prof;
#endif
} _data;
} siginfo_t;
#define si_pid _data._proc._pid
#define si_uid _data._proc._uid
#define si_status _data._proc._pdata._cld._status
#define si_stime _data._proc._pdata._cld._stime
#define si_utime _data._proc._pdata._cld._utime
#define si_value _data._proc._pdata._kill._value
#define si_addr _data._fault._addr
#define si_trapno _data._fault._trapno
#define si_fd _data._file._fd
#define si_band _data._file._band
#define si_tstamp _data._prof._tstamp
#define si_syscall _data._prof._syscall
#define si_nsysarg _data._prof._nsysarg
#define si_sysarg _data._prof._sysarg
#define si_fault _data._prof._fault
#define si_faddr _data._prof._faddr
#define si_mstate _data._prof._mstate
#if defined(_KERNEL)
void initsiginfo(siginfo_t *, int, u_long, int, union sigval);
#endif
#endif /* _SYS_SIGINFO_H */