home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / siginfo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  5.5 KB  |  228 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_SIGINFO_H
  11. #define _SYS_SIGINFO_H
  12.  
  13. #ident    "@(#)/usr/include/sys/siginfo.h.sl 1.1 4.0 12/08/90 53998 AT&T-USL"
  14. #if !defined(_POSIX_SOURCE)
  15. /*
  16.  * negative signal codes are reserved for future use for user generated
  17.  * signals 
  18.  */
  19.  
  20. #define SI_FROMUSER(sip)    ((sip)->si_code <= 0)
  21. #define SI_FROMKERNEL(sip)    ((sip)->si_code > 0)
  22.  
  23. #define SI_USER        0    /* user generated signal */
  24.  
  25. /* 
  26.  * SIGILL signal codes 
  27.  */
  28.  
  29. #define    ILL_ILLOPC    1    /* illegal opcode */
  30. #define    ILL_ILLOPN    2    /* illegal operand */
  31. #define    ILL_ILLADR    3    /* illegal addressing mode */
  32. #define    ILL_ILLTRP    4    /* illegal trap */
  33. #define    ILL_PRVOPC    5    /* privileged opcode */
  34. #define    ILL_PRVREG    6    /* privileged register */
  35. #define    ILL_COPROC    7    /* co-processor */
  36. #define    ILL_BADSTK    8    /* bad stack */
  37. #define NSIGILL        8
  38.  
  39. /* 
  40.  * SIGFPE signal codes 
  41.  */
  42.  
  43. #define    FPE_INTDIV    1    /* integer divide by zero */
  44. #define    FPE_INTOVF    2    /* integer overflow */
  45. #define    FPE_FLTDIV    3    /* floating point divide by zero */
  46. #define    FPE_FLTOVF    4    /* floating point overflow */
  47. #define    FPE_FLTUND    5    /* floating point underflow */
  48. #define    FPE_FLTRES    6    /* floating point inexact result */
  49. #define    FPE_FLTINV    7    /* invalid floating point operation */
  50. #define FPE_FLTSUB    8    /* subscript out of range */
  51. #define NSIGFPE        8
  52.  
  53. /* 
  54.  * SIGSEGV signal codes 
  55.  */
  56.  
  57. #define    SEGV_MAPERR    1    /* address not mapped to object */
  58. #define    SEGV_ACCERR    2    /* invalid permissions */
  59. #define NSIGSEGV    2
  60.  
  61. /* 
  62.  * SIGBUS signal codes 
  63.  */
  64.  
  65. #define    BUS_ADRALN    1    /* invalid address alignment */
  66. #define    BUS_ADRERR    2    /* non-existent physical address */
  67. #define    BUS_OBJERR    3    /* object specific hardware error */
  68. #define NSIGBUS        3
  69.  
  70. /* 
  71.  * SIGTRAP signal codes 
  72.  */
  73.  
  74. #define TRAP_BRKPT    1    /* process breakpoint */
  75. #define TRAP_TRACE    2    /* process trace */
  76. #define NSIGTRAP    2
  77.  
  78. /* 
  79.  * SIGCLD signal codes 
  80.  */
  81.  
  82. #define    CLD_EXITED    1    /* child has exited */
  83. #define    CLD_KILLED    2    /* child was killed */
  84. #define    CLD_DUMPED    3    /* child has coredumped */
  85. #define    CLD_TRAPPED    4    /* traced child has stopped */
  86. #define    CLD_STOPPED    5    /* child has stopped on signal */
  87. #define    CLD_CONTINUED    6    /* stopped child has continued */
  88. #define NSIGCLD        6
  89.  
  90. /*
  91.  * SIGPOLL signal codes
  92.  */
  93.  
  94. #define POLL_IN        1    /* input available */
  95. #define    POLL_OUT    2    /* output buffers available */
  96. #define    POLL_MSG    3    /* output buffers available */
  97. #define    POLL_ERR    4    /* I/O error */
  98. #define    POLL_PRI    5    /* high priority input available */
  99. #define    POLL_HUP    6    /* device disconnected */
  100. #define NSIGPOLL    6
  101.  
  102. #define SI_MAXSZ    128
  103. #define SI_PAD        ((SI_MAXSZ / sizeof(int)) - 3)
  104.  
  105. typedef struct siginfo {
  106.  
  107.     int    si_signo;            /* signal from signal.h    */
  108.     int     si_code;            /* code from above    */
  109.     int    si_errno;            /* error from errno.h    */
  110.  
  111.     union {
  112.  
  113.         int    _pad[SI_PAD];        /* for future growth    */
  114.  
  115.         struct {            /* kill(), SIGCLD    */
  116.             pid_t    _pid;        /* process ID        */
  117.             union {
  118.                 struct {
  119.                     uid_t    _uid;
  120.                 } _kill;
  121.                 struct {
  122.                     clock_t _utime;
  123.                     int    _status;
  124.                     clock_t _stime;
  125.                 } _cld;
  126.             } _pdata;
  127.         } _proc;            
  128.  
  129.         struct {    /* SIGSEGV, SIGBUS, SIGILL and SIGFPE    */
  130.             caddr_t    _addr;        /* faulting address    */
  131.         } _fault;
  132.  
  133.         struct {            /* SIGPOLL, SIGXFSZ    */
  134.         /* fd not currently available for SIGPOLL */
  135.             int    _fd;        /* file descriptor    */
  136.             long    _band;
  137.         } _file;
  138.  
  139.     } _data;
  140.  
  141. } siginfo_t;
  142.  
  143. /*
  144.  * XXX -- internal version is identical to siginfo_t but without the padding.
  145.  * This must be maintained in sync with it.
  146.  */
  147.  
  148. typedef struct k_siginfo {
  149.  
  150.     int    si_signo;            /* signal from signal.h    */
  151.     int     si_code;            /* code from above    */
  152.     int    si_errno;            /* error from errno.h    */
  153.  
  154.     union {
  155.         struct {            /* kill(), SIGCLD    */
  156.             pid_t    _pid;        /* process ID        */
  157.             union {
  158.                 struct {
  159.                     uid_t    _uid;
  160.                 } _kill;
  161.                 struct {
  162.                     clock_t _utime;
  163.                     int    _status;
  164.                     clock_t _stime;
  165.                 } _cld;
  166.             } _pdata;
  167.         } _proc;            
  168.  
  169.         struct {    /* SIGSEGV, SIGBUS, SIGILL and SIGFPE    */
  170.             caddr_t    _addr;        /* faulting address    */
  171.         } _fault;
  172.  
  173.         struct {            /* SIGPOLL, SIGXFSZ    */
  174.         /* fd not currently available for SIGPOLL */
  175.             int    _fd;        /* file descriptor    */
  176.             long    _band;
  177.         } _file;
  178.  
  179.     } _data;
  180.  
  181. } k_siginfo_t;
  182.  
  183. #define si_pid        _data._proc._pid
  184. #define si_status    _data._proc._pdata._cld._status
  185. #define si_stime    _data._proc._pdata._cld._stime
  186. #define si_utime    _data._proc._pdata._cld._utime
  187. #define si_uid        _data._proc._pdata._kill._uid
  188. #define si_addr        _data._fault._addr
  189. #define si_fd        _data._file._fd
  190. #define si_band        _data._file._band
  191.  
  192. typedef struct sigqueue {
  193.     struct sigqueue        *sq_next;
  194.     struct k_siginfo    sq_info;
  195. } sigqueue_t;
  196.  
  197. #endif /* !defined(_POSIX_SOURCE) */
  198.  
  199. #ifdef _KERNEL
  200.  
  201. #if defined(__STDC__)
  202.  
  203. extern void sigdeq(proc_t *, int, sigqueue_t **);
  204. extern void sigdelq(proc_t *, int);
  205. extern void sigaddq(proc_t *, k_siginfo_t *, int);
  206. extern void sigdupq(proc_t *, proc_t *);
  207. extern sigqueue_t *sigappend(k_sigset_t *, sigqueue_t *,
  208.     k_sigset_t *, sigqueue_t *);
  209. extern sigqueue_t *sigprepend(k_sigset_t *, sigqueue_t *,
  210.     k_sigset_t *, sigqueue_t *);
  211. extern void winfo(proc_t *, k_siginfo_t *, int);
  212.  
  213. #else
  214.  
  215. extern void sigdeq();
  216. extern void sigdelq();
  217. extern void sigaddq();
  218. extern void sigdupq();
  219. extern sigqueue_t *sigappend();
  220. extern sigqueue_t *sigprepend();
  221. extern void winfo();
  222.  
  223. #endif    /* __STDC__ */
  224.  
  225. #endif    /* _KERNEL */
  226.  
  227. #endif    /* _SYS_SIGINFO_H */
  228.