From 2012f604efa38a79499fbdca790fc881c1f464da Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 18 Nov 2012 12:50:10 -0500 Subject: [PATCH] --- yaml --- r: 347778 b: refs/heads/master c: 1ca97bb541a1f5a735e697a8bba763cde3aab452 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/alpha/include/asm/ptrace.h | 1 + trunk/arch/blackfin/include/asm/ptrace.h | 1 + trunk/arch/cris/include/asm/ptrace.h | 1 + trunk/arch/h8300/include/asm/ptrace.h | 1 + trunk/arch/ia64/include/asm/ptrace.h | 5 +++++ trunk/arch/m68k/include/asm/ptrace.h | 1 + trunk/include/linux/ptrace.h | 4 ++++ 8 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 073677d2ad45..dad6ffed45bd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5208ba24e7826519d310474dedaed2f84b0ab6a0 +refs/heads/master: 1ca97bb541a1f5a735e697a8bba763cde3aab452 diff --git a/trunk/arch/alpha/include/asm/ptrace.h b/trunk/arch/alpha/include/asm/ptrace.h index b4c5b2fbb647..fd53c74ac943 100644 --- a/trunk/arch/alpha/include/asm/ptrace.h +++ b/trunk/arch/alpha/include/asm/ptrace.h @@ -72,6 +72,7 @@ struct switch_stack { #define user_mode(regs) (((regs)->ps & 8) != 0) #define instruction_pointer(regs) ((regs)->pc) #define profile_pc(regs) instruction_pointer(regs) +#define current_user_stack_pointer() rdusp() #define task_pt_regs(task) \ ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) diff --git a/trunk/arch/blackfin/include/asm/ptrace.h b/trunk/arch/blackfin/include/asm/ptrace.h index 10d8641180f2..c42002506a26 100644 --- a/trunk/arch/blackfin/include/asm/ptrace.h +++ b/trunk/arch/blackfin/include/asm/ptrace.h @@ -106,6 +106,7 @@ struct pt_regs { #define arch_has_single_step() (1) /* common code demands this function */ #define ptrace_disable(child) user_disable_single_step(child) +#define current_user_stack_pointer() rdusp() extern int is_user_addr_valid(struct task_struct *child, unsigned long start, unsigned long len); diff --git a/trunk/arch/cris/include/asm/ptrace.h b/trunk/arch/cris/include/asm/ptrace.h index 6618893bfe8e..551c081ab62b 100644 --- a/trunk/arch/cris/include/asm/ptrace.h +++ b/trunk/arch/cris/include/asm/ptrace.h @@ -10,6 +10,7 @@ #define PTRACE_SETREGS 13 #define profile_pc(regs) instruction_pointer(regs) +#define current_user_stack_pointer() rdusp() #endif /* __KERNEL__ */ diff --git a/trunk/arch/h8300/include/asm/ptrace.h b/trunk/arch/h8300/include/asm/ptrace.h index 7468589a128b..6183371d0c93 100644 --- a/trunk/arch/h8300/include/asm/ptrace.h +++ b/trunk/arch/h8300/include/asm/ptrace.h @@ -63,6 +63,7 @@ struct pt_regs { #define current_pt_regs() ((struct pt_regs *) \ (THREAD_SIZE + (unsigned long)current_thread_info()) - 1) #define signal_pt_regs() ((struct pt_regs *)current->thread.esp0) +#define current_user_stack_pointer() rdusp() #endif /* __KERNEL__ */ #endif /* __ASSEMBLY__ */ #endif /* _H8300_PTRACE_H */ diff --git a/trunk/arch/ia64/include/asm/ptrace.h b/trunk/arch/ia64/include/asm/ptrace.h index b0e973649cb9..845143990a1d 100644 --- a/trunk/arch/ia64/include/asm/ptrace.h +++ b/trunk/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) diff --git a/trunk/arch/m68k/include/asm/ptrace.h b/trunk/arch/m68k/include/asm/ptrace.h index 0f717045bdde..a45cb6894ad3 100644 --- a/trunk/arch/m68k/include/asm/ptrace.h +++ b/trunk/arch/m68k/include/asm/ptrace.h @@ -15,6 +15,7 @@ #define profile_pc(regs) instruction_pointer(regs) #define current_pt_regs() \ (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1 +#define current_user_stack_pointer() rdusp() #define arch_has_single_step() (1) diff --git a/trunk/include/linux/ptrace.h b/trunk/include/linux/ptrace.h index a89ff04bddd9..a3a9d085f932 100644 --- a/trunk/include/linux/ptrace.h +++ b/trunk/include/linux/ptrace.h @@ -342,6 +342,10 @@ static inline void user_single_step_siginfo(struct task_struct *tsk, #define signal_pt_regs() task_pt_regs(current) #endif +#ifndef current_user_stack_pointer +#define current_user_stack_pointer() user_stack_pointer(current_pt_regs()) +#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);