diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-11-18 21:50:10 +0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-20 03:07:39 +0400 |
commit | 1ca97bb541a1f5a735e697a8bba763cde3aab452 (patch) | |
tree | 548d835c0f13de780678922ba3b3ea4c841e8cd7 /arch/ia64/include | |
parent | 5208ba24e7826519d310474dedaed2f84b0ab6a0 (diff) | |
download | linux-1ca97bb541a1f5a735e697a8bba763cde3aab452.tar.xz |
new helper: current_user_stack_pointer()
Cross-architecture equivalent of rdusp(); default is
user_stack_pointer(current_pt_regs()) - that works for almost all
platforms that have usp saved in pt_regs. The only exception from
that is ia64 - we want memory stack, not the backing store for
register one.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/ia64/include')
-rw-r--r-- | arch/ia64/include/asm/ptrace.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/ptrace.h b/arch/ia64/include/asm/ptrace.h index b0e973649cb9..845143990a1d 100644 --- a/arch/ia64/include/asm/ptrace.h +++ b/arch/ia64/include/asm/ptrace.h @@ -78,6 +78,11 @@ static inline long regs_return_value(struct pt_regs *regs) unsigned long __ip = instruction_pointer(regs); \ (__ip & ~3UL) + ((__ip & 3UL) << 2); \ }) +/* + * Why not default? Because user_stack_pointer() on ia64 gives register + * stack backing store instead... + */ +#define current_user_stack_pointer() (current_pt_regs()->r12) /* given a pointer to a task_struct, return the user's pt_regs */ # define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1) |