siginfo.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #ifndef _ASM_IA64_SIGINFO_H
  2. #define _ASM_IA64_SIGINFO_H
  3. /*
  4. * Based on <asm-i386/siginfo.h>.
  5. *
  6. * Modified 1998-2002
  7. * David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
  8. */
  9. #define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
  10. #define HAVE_ARCH_SIGINFO_T
  11. #define HAVE_ARCH_COPY_SIGINFO
  12. #define HAVE_ARCH_COPY_SIGINFO_TO_USER
  13. #include <asm-generic/siginfo.h>
  14. typedef struct siginfo {
  15. int si_signo;
  16. int si_errno;
  17. int si_code;
  18. int __pad0;
  19. union {
  20. int _pad[SI_PAD_SIZE];
  21. /* kill() */
  22. struct {
  23. pid_t _pid; /* sender's pid */
  24. uid_t _uid; /* sender's uid */
  25. } _kill;
  26. /* POSIX.1b timers */
  27. struct {
  28. timer_t _tid; /* timer id */
  29. int _overrun; /* overrun count */
  30. char _pad[sizeof(__ARCH_SI_UID_T) - sizeof(int)];
  31. sigval_t _sigval; /* must overlay ._rt._sigval! */
  32. int _sys_private; /* not to be passed to user */
  33. } _timer;
  34. /* POSIX.1b signals */
  35. struct {
  36. pid_t _pid; /* sender's pid */
  37. uid_t _uid; /* sender's uid */
  38. sigval_t _sigval;
  39. } _rt;
  40. /* SIGCHLD */
  41. struct {
  42. pid_t _pid; /* which child */
  43. uid_t _uid; /* sender's uid */
  44. int _status; /* exit code */
  45. clock_t _utime;
  46. clock_t _stime;
  47. } _sigchld;
  48. /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
  49. struct {
  50. void __user *_addr; /* faulting insn/memory ref. */
  51. int _imm; /* immediate value for "break" */
  52. unsigned int _flags; /* see below */
  53. unsigned long _isr; /* isr */
  54. short _addr_lsb; /* lsb of faulting address */
  55. } _sigfault;
  56. /* SIGPOLL */
  57. struct {
  58. long _band; /* POLL_IN, POLL_OUT, POLL_MSG (XPG requires a "long") */
  59. int _fd;
  60. } _sigpoll;
  61. } _sifields;
  62. } siginfo_t;
  63. #define si_imm _sifields._sigfault._imm /* as per UNIX SysV ABI spec */
  64. #define si_flags _sifields._sigfault._flags
  65. /*
  66. * si_isr is valid for SIGILL, SIGFPE, SIGSEGV, SIGBUS, and SIGTRAP provided that
  67. * si_code is non-zero and __ISR_VALID is set in si_flags.
  68. */
  69. #define si_isr _sifields._sigfault._isr
  70. /*
  71. * Flag values for si_flags:
  72. */
  73. #define __ISR_VALID_BIT 0
  74. #define __ISR_VALID (1 << __ISR_VALID_BIT)
  75. /*
  76. * SIGILL si_codes
  77. */
  78. #define ILL_BADIADDR (__SI_FAULT|9) /* unimplemented instruction address */
  79. #define __ILL_BREAK (__SI_FAULT|10) /* illegal break */
  80. #define __ILL_BNDMOD (__SI_FAULT|11) /* bundle-update (modification) in progress */
  81. #undef NSIGILL
  82. #define NSIGILL 11
  83. /*
  84. * SIGFPE si_codes
  85. */
  86. #define __FPE_DECOVF (__SI_FAULT|9) /* decimal overflow */
  87. #define __FPE_DECDIV (__SI_FAULT|10) /* decimal division by zero */
  88. #define __FPE_DECERR (__SI_FAULT|11) /* packed decimal error */
  89. #define __FPE_INVASC (__SI_FAULT|12) /* invalid ASCII digit */
  90. #define __FPE_INVDEC (__SI_FAULT|13) /* invalid decimal digit */
  91. #undef NSIGFPE
  92. #define NSIGFPE 13
  93. /*
  94. * SIGSEGV si_codes
  95. */
  96. #define __SEGV_PSTKOVF (__SI_FAULT|3) /* paragraph stack overflow */
  97. #undef NSIGSEGV
  98. #define NSIGSEGV 3
  99. #undef NSIGTRAP
  100. #define NSIGTRAP 4
  101. #ifdef __KERNEL__
  102. #include <linux/string.h>
  103. static inline void
  104. copy_siginfo (siginfo_t *to, siginfo_t *from)
  105. {
  106. if (from->si_code < 0)
  107. memcpy(to, from, sizeof(siginfo_t));
  108. else
  109. /* _sigchld is currently the largest know union member */
  110. memcpy(to, from, 4*sizeof(int) + sizeof(from->_sifields._sigchld));
  111. }
  112. #endif /* __KERNEL__ */
  113. #endif /* _ASM_IA64_SIGINFO_H */