signal.c (f9cd49033b349b8be3bb1f01b39eed837853d880) signal.c (8b7b80b9ebb46dd88fbb94e918297295cf312b59)
1/*
2 * Common signal handling code for both 32 and 64 bits
3 *
4 * Copyright (c) 2007 Benjamin Herrenschmidt, IBM Coproration
5 * Extracted from signal_32.c and signal_64.c
6 *
7 * This file is subject to the terms and conditions of the GNU General
8 * Public License. See the file README.legal in the main directory of
9 * this archive for more details.
10 */
11
12#include <linux/tracehook.h>
13#include <linux/signal.h>
1/*
2 * Common signal handling code for both 32 and 64 bits
3 *
4 * Copyright (c) 2007 Benjamin Herrenschmidt, IBM Coproration
5 * Extracted from signal_32.c and signal_64.c
6 *
7 * This file is subject to the terms and conditions of the GNU General
8 * Public License. See the file README.legal in the main directory of
9 * this archive for more details.
10 */
11
12#include <linux/tracehook.h>
13#include <linux/signal.h>
14#include <linux/uprobes.h>
14#include <linux/key.h>
15#include <asm/hw_breakpoint.h>
16#include <asm/uaccess.h>
17#include <asm/unistd.h>
18#include <asm/debug.h>
19
20#include "signal.h"
21

--- 130 unchanged lines hidden (view full) ---

152 test_thread_flag(TIF_SINGLESTEP));
153 }
154
155 return ret;
156}
157
158void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
159{
15#include <linux/key.h>
16#include <asm/hw_breakpoint.h>
17#include <asm/uaccess.h>
18#include <asm/unistd.h>
19#include <asm/debug.h>
20
21#include "signal.h"
22

--- 130 unchanged lines hidden (view full) ---

153 test_thread_flag(TIF_SINGLESTEP));
154 }
155
156 return ret;
157}
158
159void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
160{
161 if (thread_info_flags & _TIF_UPROBE) {
162 clear_thread_flag(TIF_UPROBE);
163 uprobe_notify_resume(regs);
164 }
165
160 if (thread_info_flags & _TIF_SIGPENDING)
161 do_signal(regs);
162
163 if (thread_info_flags & _TIF_NOTIFY_RESUME) {
164 clear_thread_flag(TIF_NOTIFY_RESUME);
165 tracehook_notify_resume(regs);
166 }
167}
168
169long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
170 unsigned long r5, unsigned long r6, unsigned long r7,
171 unsigned long r8, struct pt_regs *regs)
172{
173 return do_sigaltstack(uss, uoss, regs->gpr[1]);
174}
166 if (thread_info_flags & _TIF_SIGPENDING)
167 do_signal(regs);
168
169 if (thread_info_flags & _TIF_NOTIFY_RESUME) {
170 clear_thread_flag(TIF_NOTIFY_RESUME);
171 tracehook_notify_resume(regs);
172 }
173}
174
175long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
176 unsigned long r5, unsigned long r6, unsigned long r7,
177 unsigned long r8, struct pt_regs *regs)
178{
179 return do_sigaltstack(uss, uoss, regs->gpr[1]);
180}