diff options
Diffstat (limited to 'arch/mips/include/asm/siginfo.h')
-rw-r--r-- | arch/mips/include/asm/siginfo.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/arch/mips/include/asm/siginfo.h b/arch/mips/include/asm/siginfo.h new file mode 100644 index 000000000000..96e28f18dad1 --- /dev/null +++ b/arch/mips/include/asm/siginfo.h | |||
@@ -0,0 +1,130 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle | ||
7 | * Copyright (C) 2000, 2001 Silicon Graphics, Inc. | ||
8 | */ | ||
9 | #ifndef _ASM_SIGINFO_H | ||
10 | #define _ASM_SIGINFO_H | ||
11 | |||
12 | |||
13 | #define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int)) | ||
14 | #undef __ARCH_SI_TRAPNO /* exception code needs to fill this ... */ | ||
15 | |||
16 | #define HAVE_ARCH_SIGINFO_T | ||
17 | |||
18 | /* | ||
19 | * We duplicate the generic versions - <asm-generic/siginfo.h> is just borked | ||
20 | * by design ... | ||
21 | */ | ||
22 | #define HAVE_ARCH_COPY_SIGINFO | ||
23 | struct siginfo; | ||
24 | |||
25 | /* | ||
26 | * Careful to keep union _sifields from shifting ... | ||
27 | */ | ||
28 | #ifdef CONFIG_32BIT | ||
29 | #define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int)) | ||
30 | #endif | ||
31 | #ifdef CONFIG_64BIT | ||
32 | #define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) | ||
33 | #endif | ||
34 | |||
35 | #include <asm-generic/siginfo.h> | ||
36 | |||
37 | typedef struct siginfo { | ||
38 | int si_signo; | ||
39 | int si_code; | ||
40 | int si_errno; | ||
41 | int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3]; | ||
42 | |||
43 | union { | ||
44 | int _pad[SI_PAD_SIZE]; | ||
45 | |||
46 | /* kill() */ | ||
47 | struct { | ||
48 | pid_t _pid; /* sender's pid */ | ||
49 | __ARCH_SI_UID_T _uid; /* sender's uid */ | ||
50 | } _kill; | ||
51 | |||
52 | /* POSIX.1b timers */ | ||
53 | struct { | ||
54 | timer_t _tid; /* timer id */ | ||
55 | int _overrun; /* overrun count */ | ||
56 | char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; | ||
57 | sigval_t _sigval; /* same as below */ | ||
58 | int _sys_private; /* not to be passed to user */ | ||
59 | } _timer; | ||
60 | |||
61 | /* POSIX.1b signals */ | ||
62 | struct { | ||
63 | pid_t _pid; /* sender's pid */ | ||
64 | __ARCH_SI_UID_T _uid; /* sender's uid */ | ||
65 | sigval_t _sigval; | ||
66 | } _rt; | ||
67 | |||
68 | /* SIGCHLD */ | ||
69 | struct { | ||
70 | pid_t _pid; /* which child */ | ||
71 | __ARCH_SI_UID_T _uid; /* sender's uid */ | ||
72 | int _status; /* exit code */ | ||
73 | clock_t _utime; | ||
74 | clock_t _stime; | ||
75 | } _sigchld; | ||
76 | |||
77 | /* IRIX SIGCHLD */ | ||
78 | struct { | ||
79 | pid_t _pid; /* which child */ | ||
80 | clock_t _utime; | ||
81 | int _status; /* exit code */ | ||
82 | clock_t _stime; | ||
83 | } _irix_sigchld; | ||
84 | |||
85 | /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ | ||
86 | struct { | ||
87 | void __user *_addr; /* faulting insn/memory ref. */ | ||
88 | #ifdef __ARCH_SI_TRAPNO | ||
89 | int _trapno; /* TRAP # which caused the signal */ | ||
90 | #endif | ||
91 | } _sigfault; | ||
92 | |||
93 | /* SIGPOLL, SIGXFSZ (To do ...) */ | ||
94 | struct { | ||
95 | __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */ | ||
96 | int _fd; | ||
97 | } _sigpoll; | ||
98 | } _sifields; | ||
99 | } siginfo_t; | ||
100 | |||
101 | /* | ||
102 | * si_code values | ||
103 | * Again these have been choosen to be IRIX compatible. | ||
104 | */ | ||
105 | #undef SI_ASYNCIO | ||
106 | #undef SI_TIMER | ||
107 | #undef SI_MESGQ | ||
108 | #define SI_ASYNCIO -2 /* sent by AIO completion */ | ||
109 | #define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */ | ||
110 | #define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */ | ||
111 | |||
112 | #ifdef __KERNEL__ | ||
113 | |||
114 | /* | ||
115 | * Duplicated here because of <asm-generic/siginfo.h> braindamage ... | ||
116 | */ | ||
117 | #include <linux/string.h> | ||
118 | |||
119 | static inline void copy_siginfo(struct siginfo *to, struct siginfo *from) | ||
120 | { | ||
121 | if (from->si_code < 0) | ||
122 | memcpy(to, from, sizeof(*to)); | ||
123 | else | ||
124 | /* _sigchld is currently the largest know union member */ | ||
125 | memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld)); | ||
126 | } | ||
127 | |||
128 | #endif | ||
129 | |||
130 | #endif /* _ASM_SIGINFO_H */ | ||