Home | History | Annotate | Download | only in asm
      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