Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
1da177e4 | 12 | |
629c83f8 | 13 | #define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int)) |
1da177e4 LT |
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 | */ | |
875d43e7 | 28 | #ifdef CONFIG_32BIT |
1da177e4 LT |
29 | #define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int)) |
30 | #endif | |
875d43e7 | 31 | #ifdef CONFIG_64BIT |
1da177e4 LT |
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 */ |