• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  * This file is subject to the terms and conditions of the GNU General Public
4  * License.  See the file "COPYING" in the main directory of this archive
5  * for more details.
6  *
7  * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle
8  * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
9  */
10 #ifndef _UAPI_ASM_SIGINFO_H
11 #define _UAPI_ASM_SIGINFO_H
12 
13 
14 #define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int))
15 #undef __ARCH_SI_TRAPNO /* exception code needs to fill this ...  */
16 
17 #define HAVE_ARCH_SIGINFO_T
18 
19 /*
20  * Careful to keep union _sifields from shifting ...
21  */
22 #if _MIPS_SZLONG == 32
23 #define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
24 #elif _MIPS_SZLONG == 64
25 #define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
26 #else
27 #error _MIPS_SZLONG neither 32 nor 64
28 #endif
29 
30 #define __ARCH_SIGSYS
31 
32 #include <asm-generic/siginfo.h>
33 
34 /* We can't use generic siginfo_t, because our si_code and si_errno are swapped */
35 typedef struct siginfo {
36 	int si_signo;
37 	int si_code;
38 	int si_errno;
39 	int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
40 
41 	union {
42 		int _pad[SI_PAD_SIZE];
43 
44 		/* kill() */
45 		struct {
46 			__kernel_pid_t _pid;	/* sender's pid */
47 			__ARCH_SI_UID_T _uid;	/* sender's uid */
48 		} _kill;
49 
50 		/* POSIX.1b timers */
51 		struct {
52 			__kernel_timer_t _tid;	/* timer id */
53 			int _overrun;		/* overrun count */
54 			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
55 			sigval_t _sigval;	/* same as below */
56 			int _sys_private;	/* not to be passed to user */
57 		} _timer;
58 
59 		/* POSIX.1b signals */
60 		struct {
61 			__kernel_pid_t _pid;	/* sender's pid */
62 			__ARCH_SI_UID_T _uid;	/* sender's uid */
63 			sigval_t _sigval;
64 		} _rt;
65 
66 		/* SIGCHLD */
67 		struct {
68 			__kernel_pid_t _pid;	/* which child */
69 			__ARCH_SI_UID_T _uid;	/* sender's uid */
70 			int _status;		/* exit code */
71 			__kernel_clock_t _utime;
72 			__kernel_clock_t _stime;
73 		} _sigchld;
74 
75 		/* IRIX SIGCHLD */
76 		struct {
77 			__kernel_pid_t _pid;	/* which child */
78 			__kernel_clock_t _utime;
79 			int _status;		/* exit code */
80 			__kernel_clock_t _stime;
81 		} _irix_sigchld;
82 
83 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
84 		struct {
85 			void __user *_addr; /* faulting insn/memory ref. */
86 #ifdef __ARCH_SI_TRAPNO
87 			int _trapno;	/* TRAP # which caused the signal */
88 #endif
89 			short _addr_lsb;
90 			union {
91 				/* used when si_code=SEGV_BNDERR */
92 				struct {
93 					void __user *_lower;
94 					void __user *_upper;
95 				} _addr_bnd;
96 				/* used when si_code=SEGV_PKUERR */
97 				__u32 _pkey;
98 			};
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	-3	/* sent by timer expiration */
125 #define SI_MESGQ	-4	/* sent by real time mesq state change */
126 
127 #endif /* _UAPI_ASM_SIGINFO_H */
128