xref: /openbmc/linux/arch/mips/include/uapi/asm/siginfo.h (revision c819e2cf)
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 			struct {
96 				void __user *_lower;
97 				void __user *_upper;
98 			} _addr_bnd;
99 		} _sigfault;
100 
101 		/* SIGPOLL, SIGXFSZ (To do ...)	 */
102 		struct {
103 			__ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
104 			int _fd;
105 		} _sigpoll;
106 
107 		/* SIGSYS */
108 		struct {
109 			void __user *_call_addr; /* calling user insn */
110 			int _syscall;	/* triggering system call number */
111 			unsigned int _arch;	/* AUDIT_ARCH_* of syscall */
112 		} _sigsys;
113 	} _sifields;
114 } siginfo_t;
115 
116 /*
117  * si_code values
118  * Again these have been chosen to be IRIX compatible.
119  */
120 #undef SI_ASYNCIO
121 #undef SI_TIMER
122 #undef SI_MESGQ
123 #define SI_ASYNCIO	-2	/* sent by AIO completion */
124 #define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */
125 #define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */
126 
127 
128 #endif /* _UAPI_ASM_SIGINFO_H */
129