Annotation of sys/sys/siginfo.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: siginfo.h,v 1.9 2005/12/13 00:35:23 millert Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 1997 Theo de Raadt
! 5: * All rights reserved.
! 6: *
! 7: * Redistribution and use in source and binary forms, with or without
! 8: * modification, are permitted provided that the following conditions
! 9: * are met:
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the above copyright
! 13: * notice, this list of conditions and the following disclaimer in the
! 14: * documentation and/or other materials provided with the distribution.
! 15: *
! 16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 18: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 19: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
! 20: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
! 21: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 22: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
! 23: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! 24: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
! 25: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 26: */
! 27:
! 28: #ifndef _SYS_SIGINFO_H
! 29: #define _SYS_SIGINFO_H
! 30:
! 31: #include <sys/cdefs.h>
! 32:
! 33: union sigval {
! 34: int sival_int; /* integer value */
! 35: void *sival_ptr; /* pointer value */
! 36: };
! 37:
! 38: /*
! 39: * Negative signal codes are reserved for future use for
! 40: * user generated signals.
! 41: */
! 42: #define SI_FROMUSER(sip) ((sip)->si_code <= 0)
! 43: #define SI_FROMKERNEL(sip) ((sip)->si_code > 0)
! 44:
! 45: #define SI_NOINFO 32767 /* no signal information */
! 46: #define SI_USER 0 /* user generated signal via kill() */
! 47: #define SI_LWP (-1) /* user generated signal via lwp_kill()*/
! 48: #define SI_QUEUE (-2) /* user generated signal via sigqueue()*/
! 49: #define SI_TIMER (-3) /* from timer expiration */
! 50:
! 51: #if __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE
! 52: /*
! 53: * The machine dependent signal codes (SIGILL, SIGFPE,
! 54: * SIGSEGV, and SIGBUS)
! 55: */
! 56: #define ILL_ILLOPC 1 /* illegal opcode */
! 57: #define ILL_ILLOPN 2 /* illegal operand */
! 58: #define ILL_ILLADR 3 /* illegal addressing mode */
! 59: #define ILL_ILLTRP 4 /* illegal trap */
! 60: #define ILL_PRVOPC 5 /* privileged opcode */
! 61: #define ILL_PRVREG 6 /* privileged register */
! 62: #define ILL_COPROC 7 /* co-processor */
! 63: #define ILL_BADSTK 8 /* bad stack */
! 64: #define NSIGILL 8
! 65:
! 66: #define EMT_TAGOVF 1 /* tag overflow */
! 67: #define NSIGEMT 1
! 68:
! 69: #define FPE_INTDIV 1 /* integer divide by zero */
! 70: #define FPE_INTOVF 2 /* integer overflow */
! 71: #define FPE_FLTDIV 3 /* floating point divide by zero */
! 72: #define FPE_FLTOVF 4 /* floating point overflow */
! 73: #define FPE_FLTUND 5 /* floating point underflow */
! 74: #define FPE_FLTRES 6 /* floating point inexact result */
! 75: #define FPE_FLTINV 7 /* invalid floating point operation */
! 76: #define FPE_FLTSUB 8 /* subscript out of range */
! 77: #define NSIGFPE 8
! 78:
! 79: #define SEGV_MAPERR 1 /* address not mapped to object */
! 80: #define SEGV_ACCERR 2 /* invalid permissions */
! 81: #define NSIGSEGV 2
! 82:
! 83: #define BUS_ADRALN 1 /* invalid address alignment */
! 84: #define BUS_ADRERR 2 /* non-existent physical address */
! 85: #define BUS_OBJERR 3 /* object specific hardware error */
! 86: #define NSIGBUS 3
! 87:
! 88: #endif /* __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE */
! 89:
! 90: /*
! 91: * SIGTRAP signal codes
! 92: */
! 93: #define TRAP_BRKPT 1 /* breakpoint trap */
! 94: #define TRAP_TRACE 2 /* trace trap */
! 95: #define NSIGTRAP 2
! 96:
! 97: /*
! 98: * SIGCLD signal codes
! 99: */
! 100: #define CLD_EXITED 1 /* child has exited */
! 101: #define CLD_KILLED 2 /* child was killed */
! 102: #define CLD_DUMPED 3 /* child has coredumped */
! 103: #define CLD_TRAPPED 4 /* traced child has stopped */
! 104: #define CLD_STOPPED 5 /* child has stopped on signal */
! 105: #define CLD_CONTINUED 6 /* stopped child has continued */
! 106: #define NSIGCLD 6
! 107:
! 108: #if 0
! 109: /*
! 110: * SIGPOLL signal codes - not supported
! 111: */
! 112: #define POLL_IN 1 /* input available */
! 113: #define POLL_OUT 2 /* output possible */
! 114: #define POLL_MSG 3 /* message available */
! 115: #define POLL_ERR 4 /* I/O error */
! 116: #define POLL_PRI 5 /* high priority input available */
! 117: #define POLL_HUP 6 /* device disconnected */
! 118: #define NSIGPOLL 6
! 119:
! 120: /*
! 121: * SIGPROF signal codes - not supported
! 122: */
! 123: #define PROF_SIG 1 /* have to set code non-zero */
! 124: #define NSIGPROF 1
! 125: #endif
! 126:
! 127: #define SI_MAXSZ 128
! 128: #define SI_PAD ((SI_MAXSZ / sizeof (int)) - 3)
! 129:
! 130: #include <sys/time.h>
! 131:
! 132: typedef struct {
! 133: int si_signo; /* signal from signal.h */
! 134: int si_code; /* code from above */
! 135: int si_errno; /* error from errno.h */
! 136: union {
! 137: int _pad[SI_PAD]; /* for future growth */
! 138: struct { /* kill(), SIGCLD, siqqueue() */
! 139: pid_t _pid; /* process ID */
! 140: union {
! 141: struct {
! 142: uid_t _uid;
! 143: union sigval _value;
! 144: } _kill;
! 145: struct {
! 146: clock_t _utime;
! 147: int _status;
! 148: clock_t _stime;
! 149: } _cld;
! 150: } _pdata;
! 151: } _proc;
! 152: struct { /* SIGSEGV, SIGBUS, SIGILL and SIGFPE */
! 153: caddr_t _addr; /* faulting address */
! 154: int _trapno; /* illegal trap number */
! 155: } _fault;
! 156: #if 0
! 157: struct { /* SIGPOLL, SIGXFSZ */
! 158: /* fd not currently available for SIGPOLL */
! 159: int _fd; /* file descriptor */
! 160: long _band;
! 161: } _file;
! 162: struct { /* SIGPROF */
! 163: caddr_t _faddr; /* last fault address */
! 164: timespec _tstamp; /* real time stamp */
! 165: short _syscall; /* current syscall */
! 166: char _nsysarg; /* number of arguments */
! 167: char _fault; /* last fault type */
! 168: long _sysarg[8]; /* syscall arguments */
! 169: long _mstate[17]; /* exactly fills struct*/
! 170: } _prof;
! 171: #endif
! 172: } _data;
! 173: } siginfo_t;
! 174:
! 175: #define si_pid _data._proc._pid
! 176:
! 177: #define si_status _data._proc._pdata._cld._status
! 178: #define si_stime _data._proc._pdata._cld._stime
! 179: #define si_utime _data._proc._pdata._cld._utime
! 180: #define si_uid _data._proc._pdata._kill._uid
! 181: #define si_value _data._proc._pdata._kill._value
! 182: #define si_addr _data._fault._addr
! 183: #define si_trapno _data._fault._trapno
! 184: #define si_fd _data._file._fd
! 185: #define si_band _data._file._band
! 186:
! 187: #define si_tstamp _data._prof._tstamp
! 188: #define si_syscall _data._prof._syscall
! 189: #define si_nsysarg _data._prof._nsysarg
! 190: #define si_sysarg _data._prof._sysarg
! 191: #define si_fault _data._prof._fault
! 192: #define si_faddr _data._prof._faddr
! 193: #define si_mstate _data._prof._mstate
! 194:
! 195: #if defined(_KERNEL)
! 196: void initsiginfo(siginfo_t *, int, u_long, int, union sigval);
! 197: #endif
! 198:
! 199: #endif /* _SYS_SIGINFO_H */
CVSweb