GNU Linux-libre 4.14.266-gnu1
[releases.git] / arch / mips / include / uapi / asm / siginfo.h
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 */