--- /dev/null
+/* $OpenBSD: siginfo.h,v 1.1 1997/01/27 01:15:29 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Theo de Raadt.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * 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
+
+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 !defined(_POSIX_C_SOURCE)
+/*
+ * 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 NSIGILL 8
+
+#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_C_SOURCE */
+
+/*
+ * SIGTRAP signal codes
+ */
+
+#define TRAP_BRKPT 1 /* breakpoint trap */
+#define TRAP_TRACE 2 /* trace trap */
+#define NSIGTRAP 2
+
+/*
+ * SIGCLD 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
+
+/*
+ * SIGPOLL signal codes
+ */
+
+#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
+ */
+
+#define PROF_SIG 1 /* have to set code non-zero */
+#define NSIGPROF 1
+
+
+#define SI_MAXSZ 128
+#define SI_PAD ((SI_MAXSZ / sizeof (int)) - 3)
+
+/*
+ * We need <sys/time.h> for the declaration of timestruc_t.
+ */
+#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(), SIGCLD,siqqueue() */
+ pid_t _pid; /* process ID */
+ union {
+ struct {
+ uid_t _uid;
+ union sigval _value;
+ } _kill;
+ struct {
+ clock_t _utime;
+ int _status;
+ clock_t _stime;
+ } _cld;
+ } _pdata;
+ } _proc;
+ struct { /* SIGSEGV, SIGBUS, SIGILL and SIGFPE */
+ caddr_t _addr; /* faulting address */
+ int _trapno; /* illegal trap number */
+ } _fault;
+ struct { /* SIGPOLL, SIGXFSZ */
+ /* fd not currently available for SIGPOLL */
+ int _fd; /* file descriptor */
+ long _band;
+ } _file;
+ struct { /* SIGPROF */
+ caddr_t _faddr; /* last fault address */
+#if 0
+ timestruc_t _tstamp; /* real time stamp */
+#endif
+ short _syscall; /* current syscall */
+ char _nsysarg; /* number of arguments */
+ char _fault; /* last fault type */
+ long _sysarg[8]; /* syscall arguments */
+#if 0
+ long _mstate[17]; /* exactly fills struct*/
+#endif
+ } _prof;
+ } _data;
+} siginfo_t;
+
+/* collides with select inside the kernel */
+#ifdef _KERNEL
+#define si_pid_XXX _data._proc._pid
+#else
+#define si_pid _data._proc._pid
+#endif
+
+#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_uid _data._proc._pdata._kill._uid
+#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 __P((siginfo_t *, int));
+void fixsiginfo __P((siginfo_t *, int, u_long, caddr_t));
+#endif
+
+#endif /* _SYS_SIGINFO_H */