#ifndef _SYS_SIGINFO_H_
#define _SYS_SIGINFO_H_
#include <machine/signal.h>
#include <sys/featuretest.h>
#ifdef _KERNEL
#include <sys/queue.h>
#endif
typedef union sigval {
int sival_int;
void *sival_ptr;
} sigval_t;
struct _ksiginfo {
int _signo;
int _code;
int _errno;
#ifdef _LP64
int _pad;
#endif
union {
struct {
pid_t _pid;
uid_t _uid;
sigval_t _value;
} _rt;
struct {
pid_t _pid;
uid_t _uid;
int _status;
clock_t _utime;
clock_t _stime;
} _child;
struct {
void *_addr;
int _trap;
int _trap2;
int _trap3;
} _fault;
struct {
long _band;
int _fd;
} _poll;
struct {
int _sysnum;
int _retval[2];
int _error;
uint64_t _args[8];
} _syscall;
struct {
int _pe_report_event;
union {
pid_t _pe_other_pid;
lwpid_t _pe_lwp;
} _option;
} _ptrace_state;
} _reason;
};
#ifdef _KERNEL
typedef struct ksiginfo {
u_long ksi_flags;
TAILQ_ENTRY(ksiginfo) ksi_list;
struct _ksiginfo ksi_info;
lwpid_t ksi_lid;
} ksiginfo_t;
#define KSI_TRAP 0x01
#define KSI_EMPTY 0x02
#define KSI_QUEUED 0x04
#define KSI_FROMPOOL 0x08
#define KSI_INIT(ksi) \
do { \
memset((ksi), 0, sizeof(*(ksi))); \
} while (0)
#define KSI_INIT_EMPTY(ksi) \
do { \
KSI_INIT((ksi)); \
(ksi)->ksi_flags = KSI_EMPTY; \
} while (0)
#define KSI_INIT_TRAP(ksi) \
do { \
KSI_INIT((ksi)); \
(ksi)->ksi_flags = KSI_TRAP; \
} while (0)
#define KSI_COPY(fksi, tksi) \
do { \
(tksi)->ksi_info = (fksi)->ksi_info; \
(tksi)->ksi_flags = (fksi)->ksi_flags; \
} while (0)
#define KSI_TRAP_P(ksi) (((ksi)->ksi_flags & KSI_TRAP) != 0)
#define KSI_EMPTY_P(ksi) (((ksi)->ksi_flags & KSI_EMPTY) != 0)
#define KSI_TRAPCODE(ksi) (KSI_TRAP_P(ksi) ? (ksi)->ksi_trap : 0)
#endif
typedef union siginfo {
char si_pad[128];
struct _ksiginfo _info;
} siginfo_t;
#define si_signo _info._signo
#define si_code _info._code
#define si_errno _info._errno
#define si_value _info._reason._rt._value
#define si_pid _info._reason._child._pid
#define si_uid _info._reason._child._uid
#define si_status _info._reason._child._status
#define si_utime _info._reason._child._utime
#define si_stime _info._reason._child._stime
#define si_addr _info._reason._fault._addr
#define si_trap _info._reason._fault._trap
#define si_trap2 _info._reason._fault._trap2
#define si_trap3 _info._reason._fault._trap3
#define si_band _info._reason._poll._band
#define si_fd _info._reason._poll._fd
#define si_sysnum _info._reason._syscall._sysnum
#define si_retval _info._reason._syscall._retval
#define si_error _info._reason._syscall._error
#define si_args _info._reason._syscall._args
#define si_pe_report_event _info._reason._ptrace_state._pe_report_event
#define si_pe_other_pid _info._reason._ptrace_state._option._pe_other_pid
#define si_pe_lwp _info._reason._ptrace_state._option._pe_lwp
#ifdef _KERNEL
#define ksi_signo ksi_info._signo
#define ksi_code ksi_info._code
#define ksi_errno ksi_info._errno
#define ksi_value ksi_info._reason._rt._value
#define ksi_pid ksi_info._reason._child._pid
#define ksi_uid ksi_info._reason._child._uid
#define ksi_status ksi_info._reason._child._status
#define ksi_utime ksi_info._reason._child._utime
#define ksi_stime ksi_info._reason._child._stime
#define ksi_addr ksi_info._reason._fault._addr
#define ksi_trap ksi_info._reason._fault._trap
#define ksi_trap2 ksi_info._reason._fault._trap2
#define ksi_trap3 ksi_info._reason._fault._trap3
#define ksi_band ksi_info._reason._poll._band
#define ksi_fd ksi_info._reason._poll._fd
#define ksi_sysnum ksi_info._reason._syscall._sysnum
#define ksi_retval ksi_info._reason._syscall._retval
#define ksi_error ksi_info._reason._syscall._error
#define ksi_args ksi_info._reason._syscall._args
#define ksi_pe_report_event ksi_info._reason._ptrace_state._pe_report_event
#define ksi_pe_other_pid ksi_info._reason._ptrace_state._option._pe_other_pid
#define ksi_pe_lwp ksi_info._reason._ptrace_state._option._pe_lwp
#endif
#define ILL_ILLOPC 1
#define ILL_ILLOPN 2
#define ILL_ILLADR 3
#define ILL_ILLTRP 4
#define ILL_PRVOPC 5
#define ILL_PRVREG 6
#define ILL_COPROC 7
#define ILL_BADSTK 8
#define FPE_INTDIV 1
#define FPE_INTOVF 2
#define FPE_FLTDIV 3
#define FPE_FLTOVF 4
#define FPE_FLTUND 5
#define FPE_FLTRES 6
#define FPE_FLTINV 7
#define FPE_FLTSUB 8
#define SEGV_MAPERR 1
#define SEGV_ACCERR 2
#define BUS_ADRALN 1
#define BUS_ADRERR 2
#define BUS_OBJERR 3
#define TRAP_BRKPT 1
#define TRAP_TRACE 2
#define TRAP_EXEC 3
#define TRAP_CHLD 4
#define TRAP_LWP 5
#define TRAP_DBREG 6
#define TRAP_SCE 7
#define TRAP_SCX 8
#define CLD_EXITED 1
#define CLD_KILLED 2
#define CLD_DUMPED 3
#define CLD_TRAPPED 4
#define CLD_STOPPED 5
#define CLD_CONTINUED 6
#define POLL_IN 1
#define POLL_OUT 2
#define POLL_MSG 3
#define POLL_ERR 4
#define POLL_PRI 5
#define POLL_HUP 6
#define SI_USER 0
#define SI_QUEUE -1
#define SI_TIMER -2
#define SI_ASYNCIO -3
#define SI_MESGQ -4
#if defined(_KERNEL) || defined(_NETBSD_SOURCE)
#define SI_LWP -5
#define SI_NOINFO 32767
#endif
#endif