1633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 2633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * This file is subject to the terms and conditions of the GNU General Public 3633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * License. See the file "COPYING" in the main directory of this archive 4633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * for more details. 5633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * 6633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle 7633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 2000, 2001 Silicon Graphics, Inc. 8633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 9633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifndef _ASM_SIGINFO_H 10633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define _ASM_SIGINFO_H 11633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 12633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 13633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int)) 14633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#undef __ARCH_SI_TRAPNO /* exception code needs to fill this ... */ 15633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 16633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define HAVE_ARCH_SIGINFO_T 17633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 18633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 19633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * We duplicate the generic versions - <asm-generic/siginfo.h> is just borked 20633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * by design ... 21633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 22633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define HAVE_ARCH_COPY_SIGINFO 23633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct siginfo; 24633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 25633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 26633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Careful to keep union _sifields from shifting ... 27633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 28633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef CONFIG_32BIT 29633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int)) 30633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif 31633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef CONFIG_64BIT 32633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) 33633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif 34633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 35633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#include <asm-generic/siginfo.h> 36633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 37633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamtypedef struct siginfo { 38633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int si_signo; 39633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int si_code; 40633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int si_errno; 41633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3]; 42633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 43633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham union { 44633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _pad[SI_PAD_SIZE]; 45633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 46633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* kill() */ 47633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 48633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham pid_t _pid; /* sender's pid */ 49633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __ARCH_SI_UID_T _uid; /* sender's uid */ 50633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _kill; 51633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 52633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* POSIX.1b timers */ 53633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 54633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham timer_t _tid; /* timer id */ 55633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _overrun; /* overrun count */ 56633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; 57633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham sigval_t _sigval; /* same as below */ 58633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _sys_private; /* not to be passed to user */ 59633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _timer; 60633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 61633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* POSIX.1b signals */ 62633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 63633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham pid_t _pid; /* sender's pid */ 64633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __ARCH_SI_UID_T _uid; /* sender's uid */ 65633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham sigval_t _sigval; 66633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _rt; 67633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 68633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* SIGCHLD */ 69633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 70633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham pid_t _pid; /* which child */ 71633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __ARCH_SI_UID_T _uid; /* sender's uid */ 72633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _status; /* exit code */ 73633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham clock_t _utime; 74633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham clock_t _stime; 75633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _sigchld; 76633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 77633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* IRIX SIGCHLD */ 78633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 79633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham pid_t _pid; /* which child */ 80633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham clock_t _utime; 81633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _status; /* exit code */ 82633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham clock_t _stime; 83633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _irix_sigchld; 84633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 85633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ 86633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 87633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham void __user *_addr; /* faulting insn/memory ref. */ 88633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef __ARCH_SI_TRAPNO 89633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _trapno; /* TRAP # which caused the signal */ 90633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif 91633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _sigfault; 92633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 93633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* SIGPOLL, SIGXFSZ (To do ...) */ 94633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct { 95633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */ 96633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int _fd; 97633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _sigpoll; 98633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } _sifields; 99633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham} siginfo_t; 100633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 101633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 102633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * si_code values 103633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Again these have been choosen to be IRIX compatible. 104633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 105633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#undef SI_ASYNCIO 106633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#undef SI_TIMER 107633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#undef SI_MESGQ 108633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SI_ASYNCIO -2 /* sent by AIO completion */ 109633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */ 110633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */ 111633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 112633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef __KERNEL__ 113633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 114633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 115633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Duplicated here because of <asm-generic/siginfo.h> braindamage ... 116633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 117633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#include <linux/string.h> 118633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 119633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstatic inline void copy_siginfo(struct siginfo *to, struct siginfo *from) 120633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham{ 121633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham if (from->si_code < 0) 122633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham memcpy(to, from, sizeof(*to)); 123633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham else 124633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* _sigchld is currently the largest know union member */ 125633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld)); 126633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham} 127633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 128633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif 129633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 130633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* _ASM_SIGINFO_H */ 131