125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris/*
3198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * This file is subject to the terms and conditions of the GNU General Public
4198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * License.  See the file "COPYING" in the main directory of this archive
5198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * for more details.
6198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris *
7198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle
8198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
9198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris */
10198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#ifndef _UAPI_ASM_SIGINFO_H
11198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define _UAPI_ASM_SIGINFO_H
12198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
13198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
14198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int))
15198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef __ARCH_SI_TRAPNO /* exception code needs to fill this ...  */
16198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
17198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define HAVE_ARCH_SIGINFO_T
18198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
19198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris/*
20198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Careful to keep union _sifields from shifting ...
21198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris */
22e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#if _MIPS_SZLONG == 32
23198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
24e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#elif _MIPS_SZLONG == 64
25198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
26e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#else
27e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#error _MIPS_SZLONG neither 32 nor 64
28198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#endif
29198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
30e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define __ARCH_SIGSYS
31e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
32d4bfa476e64733d26a737ecb94b81c41860851d6Christopher Ferris#include <asm-generic/siginfo.h>
33198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
3412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* We can't use generic siginfo_t, because our si_code and si_errno are swapped */
35198084289b68143fd4ea72dec91515eec00d700fChristopher Ferristypedef struct siginfo {
36198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int si_signo;
37198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int si_code;
38198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int si_errno;
39198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
40198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
41198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	union {
42198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		int _pad[SI_PAD_SIZE];
43198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
44198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* kill() */
45198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
46ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* sender's pid */
47198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_UID_T _uid;	/* sender's uid */
48198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _kill;
49198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
50198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* POSIX.1b timers */
51198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
52ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_timer_t _tid;	/* timer id */
53198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _overrun;		/* overrun count */
54198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
55198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			sigval_t _sigval;	/* same as below */
56198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _sys_private;	/* not to be passed to user */
57198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _timer;
58198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
59198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* POSIX.1b signals */
60198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
61ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* sender's pid */
62198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_UID_T _uid;	/* sender's uid */
63198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			sigval_t _sigval;
64198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _rt;
65198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
66198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* SIGCHLD */
67198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
68ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* which child */
69198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_UID_T _uid;	/* sender's uid */
70198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _status;		/* exit code */
71ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _utime;
72ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _stime;
73198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _sigchld;
74198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
75198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* IRIX SIGCHLD */
76198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
77ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* which child */
78ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _utime;
79198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _status;		/* exit code */
80ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _stime;
81198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _irix_sigchld;
82198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
83198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
84198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
85198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			void __user *_addr; /* faulting insn/memory ref. */
86198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#ifdef __ARCH_SI_TRAPNO
87198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _trapno;	/* TRAP # which caused the signal */
88198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#endif
89198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			short _addr_lsb;
90ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			union {
91ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				/* used when si_code=SEGV_BNDERR */
92ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				struct {
93ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris					void __user *_lower;
94ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris					void __user *_upper;
95ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				} _addr_bnd;
96ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				/* used when si_code=SEGV_PKUERR */
97ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				__u32 _pkey;
98ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			};
99198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _sigfault;
100198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
101198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* SIGPOLL, SIGXFSZ (To do ...)	 */
102198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
103198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
104198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _fd;
105198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _sigpoll;
106e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
107e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris		/* SIGSYS */
108e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris		struct {
109e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris			void __user *_call_addr; /* calling user insn */
110e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris			int _syscall;	/* triggering system call number */
111e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris			unsigned int _arch;	/* AUDIT_ARCH_* of syscall */
112e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris		} _sigsys;
113198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	} _sifields;
114198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris} siginfo_t;
115198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
116198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris/*
117198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * si_code values
118198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Again these have been chosen to be IRIX compatible.
119198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris */
120198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef SI_ASYNCIO
121198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef SI_TIMER
122198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef SI_MESGQ
123198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define SI_ASYNCIO	-2	/* sent by AIO completion */
12425981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define SI_TIMER	-3	/* sent by timer expiration */
12525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define SI_MESGQ	-4	/* sent by real time mesq state change */
126198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
127198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#endif /* _UAPI_ASM_SIGINFO_H */
128