Home | History | Annotate | Download | only in asm
      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 _UAPI_ASM_SIGINFO_H
     10 #define _UAPI_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 #if _MIPS_SZLONG == 32
     29 #define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
     30 #elif _MIPS_SZLONG == 64
     31 #define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
     32 #else
     33 #error _MIPS_SZLONG neither 32 nor 64
     34 #endif
     35 
     36 #define __ARCH_SIGSYS
     37 
     38 #include <asm-generic/siginfo.h>
     39 
     40 typedef struct siginfo {
     41 	int si_signo;
     42 	int si_code;
     43 	int si_errno;
     44 	int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
     45 
     46 	union {
     47 		int _pad[SI_PAD_SIZE];
     48 
     49 		/* kill() */
     50 		struct {
     51 			pid_t _pid;		/* sender's pid */
     52 			__ARCH_SI_UID_T _uid;	/* sender's uid */
     53 		} _kill;
     54 
     55 		/* POSIX.1b timers */
     56 		struct {
     57 			timer_t _tid;		/* timer id */
     58 			int _overrun;		/* overrun count */
     59 			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
     60 			sigval_t _sigval;	/* same as below */
     61 			int _sys_private;	/* not to be passed to user */
     62 		} _timer;
     63 
     64 		/* POSIX.1b signals */
     65 		struct {
     66 			pid_t _pid;		/* sender's pid */
     67 			__ARCH_SI_UID_T _uid;	/* sender's uid */
     68 			sigval_t _sigval;
     69 		} _rt;
     70 
     71 		/* SIGCHLD */
     72 		struct {
     73 			pid_t _pid;		/* which child */
     74 			__ARCH_SI_UID_T _uid;	/* sender's uid */
     75 			int _status;		/* exit code */
     76 			clock_t _utime;
     77 			clock_t _stime;
     78 		} _sigchld;
     79 
     80 		/* IRIX SIGCHLD */
     81 		struct {
     82 			pid_t _pid;		/* which child */
     83 			clock_t _utime;
     84 			int _status;		/* exit code */
     85 			clock_t _stime;
     86 		} _irix_sigchld;
     87 
     88 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
     89 		struct {
     90 			void __user *_addr; /* faulting insn/memory ref. */
     91 #ifdef __ARCH_SI_TRAPNO
     92 			int _trapno;	/* TRAP # which caused the signal */
     93 #endif
     94 			short _addr_lsb;
     95 		} _sigfault;
     96 
     97 		/* SIGPOLL, SIGXFSZ (To do ...)	 */
     98 		struct {
     99 			__ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
    100 			int _fd;
    101 		} _sigpoll;
    102 
    103 		/* SIGSYS */
    104 		struct {
    105 			void __user *_call_addr; /* calling user insn */
    106 			int _syscall;	/* triggering system call number */
    107 			unsigned int _arch;	/* AUDIT_ARCH_* of syscall */
    108 		} _sigsys;
    109 	} _sifields;
    110 } siginfo_t;
    111 
    112 /*
    113  * si_code values
    114  * Again these have been chosen to be IRIX compatible.
    115  */
    116 #undef SI_ASYNCIO
    117 #undef SI_TIMER
    118 #undef SI_MESGQ
    119 #define SI_ASYNCIO	-2	/* sent by AIO completion */
    120 #define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */
    121 #define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */
    122 
    123 
    124 #endif /* _UAPI_ASM_SIGINFO_H */
    125