diff options
Diffstat (limited to 'include/linux/signal.h')
-rw-r--r-- | include/linux/signal.h | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/include/linux/signal.h b/include/linux/signal.h index 0a89ffc48466..a2dcb94ea49d 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -241,9 +241,6 @@ extern int do_send_sig_info(int sig, struct siginfo *info, | |||
241 | struct task_struct *p, bool group); | 241 | struct task_struct *p, bool group); |
242 | extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); | 242 | extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); |
243 | extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); | 243 | extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); |
244 | extern long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, | ||
245 | siginfo_t *info); | ||
246 | extern long do_sigpending(void __user *, unsigned long); | ||
247 | extern int do_sigtimedwait(const sigset_t *, siginfo_t *, | 244 | extern int do_sigtimedwait(const sigset_t *, siginfo_t *, |
248 | const struct timespec *); | 245 | const struct timespec *); |
249 | extern int sigprocmask(int, sigset_t *, sigset_t *); | 246 | extern int sigprocmask(int, sigset_t *, sigset_t *); |
@@ -252,10 +249,59 @@ extern void __set_current_blocked(const sigset_t *); | |||
252 | extern int show_unhandled_signals; | 249 | extern int show_unhandled_signals; |
253 | extern int sigsuspend(sigset_t *); | 250 | extern int sigsuspend(sigset_t *); |
254 | 251 | ||
252 | struct sigaction { | ||
253 | #ifndef __ARCH_HAS_ODD_SIGACTION | ||
254 | __sighandler_t sa_handler; | ||
255 | unsigned long sa_flags; | ||
256 | #else | ||
257 | unsigned long sa_flags; | ||
258 | __sighandler_t sa_handler; | ||
259 | #endif | ||
260 | #ifdef __ARCH_HAS_SA_RESTORER | ||
261 | __sigrestore_t sa_restorer; | ||
262 | #endif | ||
263 | sigset_t sa_mask; /* mask last for extensibility */ | ||
264 | }; | ||
265 | |||
266 | struct k_sigaction { | ||
267 | struct sigaction sa; | ||
268 | #ifdef __ARCH_HAS_KA_RESTORER | ||
269 | __sigrestore_t ka_restorer; | ||
270 | #endif | ||
271 | }; | ||
272 | |||
273 | #ifdef CONFIG_OLD_SIGACTION | ||
274 | struct old_sigaction { | ||
275 | __sighandler_t sa_handler; | ||
276 | old_sigset_t sa_mask; | ||
277 | unsigned long sa_flags; | ||
278 | __sigrestore_t sa_restorer; | ||
279 | }; | ||
280 | #endif | ||
281 | |||
282 | struct ksignal { | ||
283 | struct k_sigaction ka; | ||
284 | siginfo_t info; | ||
285 | int sig; | ||
286 | }; | ||
287 | |||
255 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); | 288 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); |
289 | extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping); | ||
256 | extern void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka, struct pt_regs *regs, int stepping); | 290 | extern void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka, struct pt_regs *regs, int stepping); |
257 | extern void exit_signals(struct task_struct *tsk); | 291 | extern void exit_signals(struct task_struct *tsk); |
258 | 292 | ||
293 | /* | ||
294 | * Eventually that'll replace get_signal_to_deliver(); macro for now, | ||
295 | * to avoid nastiness with include order. | ||
296 | */ | ||
297 | #define get_signal(ksig) \ | ||
298 | ({ \ | ||
299 | struct ksignal *p = (ksig); \ | ||
300 | p->sig = get_signal_to_deliver(&p->info, &p->ka, \ | ||
301 | signal_pt_regs(), NULL);\ | ||
302 | p->sig > 0; \ | ||
303 | }) | ||
304 | |||
259 | extern struct kmem_cache *sighand_cachep; | 305 | extern struct kmem_cache *sighand_cachep; |
260 | 306 | ||
261 | int unhandled_signal(struct task_struct *tsk, int sig); | 307 | int unhandled_signal(struct task_struct *tsk, int sig); |