linux/arch/mips/include/uapi/asm/siginfo.h
<<
>>
Prefs
   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 */
  35typedef 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