siginfo.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. } _sigfault;
  55. /* SIGPOLL */
  56. struct {
  57. long _band; /* POLL_IN, POLL_OUT, POLL_MSG (XPG requires a "long") */
  58. int _fd;
  59. } _sigpoll;
  60. } _sifields;
  61. } siginfo_t;
  62. #define si_imm _sifields._sigfault._imm /* as per UNIX SysV ABI spec */
  63. #define si_flags _sifields._sigfault._flags
  64. /*
  65. * si_isr is valid for SIGILL, SIGFPE, SIGSEGV, SIGBUS, and SIGTRAP provided that
  66. * si_code is non-zero and __ISR_VALID is set in si_flags.
  67. */
  68. #define si_isr _sifields._sigfault._isr
  69. /*
  70. * Flag values for si_flags:
  71. */
  72. #define __ISR_VALID_BIT 0
  73. #define __ISR_VALID (1 << __ISR_VALID_BIT)
  74. /*
  75. * SIGILL si_codes
  76. */
  77. #define ILL_BADIADDR (__SI_FAULT|9) /* unimplemented instruction address */
  78. #define __ILL_BREAK (__SI_FAULT|10) /* illegal break */
  79. #define __ILL_BNDMOD (__SI_FAULT|11) /* bundle-update (modification) in progress */
  80. #undef NSIGILL
  81. #define NSIGILL 11
  82. /*
  83. * SIGFPE si_codes
  84. */
  85. #define __FPE_DECOVF (__SI_FAULT|9) /* decimal overflow */
  86. #define __FPE_DECDIV (__SI_FAULT|10) /* decimal division by zero */
  87. #define __FPE_DECERR (__SI_FAULT|11) /* packed decimal error */
  88. #define __FPE_INVASC (__SI_FAULT|12) /* invalid ASCII digit */
  89. #define __FPE_INVDEC (__SI_FAULT|13) /* invalid decimal digit */
  90. #undef NSIGFPE
  91. #define NSIGFPE 13
  92. /*
  93. * SIGSEGV si_codes
  94. */
  95. #define __SEGV_PSTKOVF (__SI_FAULT|3) /* paragraph stack overflow */
  96. #undef NSIGSEGV
  97. #define NSIGSEGV 3
  98. #undef NSIGTRAP
  99. #define NSIGTRAP 4
  100. #ifdef __KERNEL__
  101. #include <linux/string.h>
  102. static inline void
  103. copy_siginfo (siginfo_t *to, siginfo_t *from)
  104. {
  105. if (from->si_code < 0)
  106. memcpy(to, from, sizeof(siginfo_t));
  107. else
  108. /* _sigchld is currently the largest know union member */
  109. memcpy(to, from, 4*sizeof(int) + sizeof(from->_sifields._sigchld));
  110. }
  111. #endif /* __KERNEL__ */
  112. #endif /* _ASM_IA64_SIGINFO_H */