summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-11-05 22:00:27 +0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-11-29 09:01:23 +0400
commit22062a96300dabfef93368a28c34bdf35c9b8308 (patch)
tree6e04303c437911d21079a34ac0853137eeb91f8b /include/linux
parent4f4202fe5ae9a43e59303f20d700571f695d7b1b (diff)
downloadlinux-22062a96300dabfef93368a28c34bdf35c9b8308.tar.xz
new helper: signal_pt_regs()
Always equal to task_pt_regs(current); defined only when we are in signal delivery. It may be different from current_pt_regs() - e.g. architectures like m68k may have pt_regs location on exception different from that on a syscall and signals (just as ptrace handling) may happen on exceptions as well as on syscalls. When they are equal, it's often better to have signal_pt_regs defined (in asm/ptrace.h) as current_pt_regs - that tends to be optimized better than default would be. However, optimisation is the only reason why we might want an arch-specific definition; if current_pt_regs() and task_pt_regs(current) have different values, the latter one is right. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/ptrace.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 7aefbae2452e..b8e6dcec78ae 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -333,6 +333,15 @@ static inline void user_single_step_siginfo(struct task_struct *tsk,
#define ptrace_signal_deliver(regs, cookie) do { } while (0)
#endif
+/*
+ * unlike current_pt_regs(), this one is equal to task_pt_regs(current)
+ * on *all* architectures; the only reason to have a per-arch definition
+ * is optimisation.
+ */
+#ifndef signal_pt_regs
+#define signal_pt_regs() task_pt_regs(current)
+#endif
+
extern int task_current_syscall(struct task_struct *target, long *callno,
unsigned long args[6], unsigned int maxargs,
unsigned long *sp, unsigned long *pc);