home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-mips / siginfo.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.0 KB  |  131 lines

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle
  7.  * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
  8.  */
  9. #ifndef _ASM_SIGINFO_H
  10. #define _ASM_SIGINFO_H
  11.  
  12.  
  13. #define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int))
  14. #undef __ARCH_SI_TRAPNO    /* exception code needs to fill this ...  */
  15.  
  16. #define HAVE_ARCH_SIGINFO_T
  17.  
  18. /*
  19.  * We duplicate the generic versions - <asm-generic/siginfo.h> is just borked
  20.  * by design ...
  21.  */
  22. #define HAVE_ARCH_COPY_SIGINFO
  23. struct siginfo;
  24.  
  25. /*
  26.  * Careful to keep union _sifields from shifting ...
  27.  */
  28. #ifdef CONFIG_32BIT
  29. #define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
  30. #endif
  31. #ifdef CONFIG_64BIT
  32. #define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
  33. #endif
  34.  
  35. #include <asm-generic/siginfo.h>
  36.  
  37. typedef struct siginfo {
  38.     int si_signo;
  39.     int si_code;
  40.     int si_errno;
  41.     int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
  42.  
  43.     union {
  44.         int _pad[SI_PAD_SIZE];
  45.  
  46.         /* kill() */
  47.         struct {
  48.             pid_t _pid;        /* sender's pid */
  49.             __ARCH_SI_UID_T _uid;    /* sender's uid */
  50.         } _kill;
  51.  
  52.         /* POSIX.1b timers */
  53.         struct {
  54.             timer_t _tid;        /* timer id */
  55.             int _overrun;        /* overrun count */
  56.             char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
  57.             sigval_t _sigval;    /* same as below */
  58.             int _sys_private;       /* not to be passed to user */
  59.         } _timer;
  60.  
  61.         /* POSIX.1b signals */
  62.         struct {
  63.             pid_t _pid;        /* sender's pid */
  64.             __ARCH_SI_UID_T _uid;    /* sender's uid */
  65.             sigval_t _sigval;
  66.         } _rt;
  67.  
  68.         /* SIGCHLD */
  69.         struct {
  70.             pid_t _pid;        /* which child */
  71.             __ARCH_SI_UID_T _uid;    /* sender's uid */
  72.             int _status;        /* exit code */
  73.             clock_t _utime;
  74.             clock_t _stime;
  75.         } _sigchld;
  76.  
  77.         /* IRIX SIGCHLD */
  78.         struct {
  79.             pid_t _pid;        /* which child */
  80.             clock_t _utime;
  81.             int _status;        /* exit code */
  82.             clock_t _stime;
  83.         } _irix_sigchld;
  84.  
  85.         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
  86.         struct {
  87.             void __user *_addr; /* faulting insn/memory ref. */
  88. #ifdef __ARCH_SI_TRAPNO
  89.             int _trapno;    /* TRAP # which caused the signal */
  90. #endif
  91.         } _sigfault;
  92.  
  93.         /* SIGPOLL, SIGXFSZ (To do ...)  */
  94.         struct {
  95.             __ARCH_SI_BAND_T _band;    /* POLL_IN, POLL_OUT, POLL_MSG */
  96.             int _fd;
  97.         } _sigpoll;
  98.     } _sifields;
  99. } siginfo_t;
  100.  
  101. /*
  102.  * si_code values
  103.  * Again these have been choosen to be IRIX compatible.
  104.  */
  105. #undef SI_ASYNCIO
  106. #undef SI_TIMER
  107. #undef SI_MESGQ
  108. #define SI_ASYNCIO    -2    /* sent by AIO completion */
  109. #define SI_TIMER __SI_CODE(__SI_TIMER,-3) /* sent by timer expiration */
  110. #define SI_MESGQ __SI_CODE(__SI_MESGQ,-4) /* sent by real time mesq state change */
  111.  
  112. #ifdef __KERNEL__
  113.  
  114. /*
  115.  * Duplicated here because of <asm-generic/siginfo.h> braindamage ...
  116.  */
  117. #include <linux/string.h>
  118.  
  119. static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
  120. {
  121.     if (from->si_code < 0)
  122.         memcpy(to, from, sizeof(*to));
  123.     else
  124.         /* _sigchld is currently the largest know union member */
  125.         memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
  126. }
  127.  
  128. #endif
  129.  
  130. #endif /* _ASM_SIGINFO_H */
  131.