Implement GET_IP/SET_IP for powerpc architecture.
Subsystems (2)
PATCH 1/1 Implement GET_IP/SET_IP for powerpc architecture.
With this change, helpers such as instruction_pointer() et al, get defined in the generic header in terms of GET_IP
--- arch/powerpc/include/asm/ptrace.h | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-)
arch/powerpc/include/asm/ptrace.h +14 -8
@@ -83,8 +83,20 @@ struct pt_regs {#ifndef __ASSEMBLY__ -#define instruction_pointer (regs) ((regs)->nip) -#define user_stack_pointer (regs) ((regs)->gpr[1]) +#define GET_IP (regs) ((regs)->nip) +#define GET_USP (regs) ((regs)->gpr[1]) +#define GET_FP (regs) (0) +#define SET_FP (regs, val) + +#ifdef CONFIG_SMP +extern unsigned long profile_pc (struct pt_regs *regs); +#define profile_pc profile_pc +#else +#define profile_pc (regs) GET_IP(regs) +#endif + +#include <asm-generic/ptrace.h> +#define kernel_stack_pointer (regs) ((regs)->gpr[1])static inline int is_syscall_success (struct pt_regs *regs) {
@@ -99,12 +111,6 @@ static inline long regs_return_value(struct pt_regs *regs)return -regs->gpr[3 ]; } -#ifdef CONFIG_SMP -extern unsigned long profile_pc (struct pt_regs *regs); -#else -#define profile_pc (regs) instruction_pointer(regs) -#endif -#ifdef __powerpc64__#define user_mode (regs) ((((regs)->msr) >> MSR_PR_LG) & 0x1)#else
arch/powerpc/include/asm/ptrace.h struct pt_regs { · line 89
Quoted 2 lines · On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
arch/powerpc/include/asm/ptrace.h +2
-0+#define GET_FP (regs) (0) +#define SET_FP (regs, val)
ppc doesn't have a standard FP location ?
Quoted 1 line
+#define
profile_pc(regs)GET_IP(regs)
pretty sure you don't need this as asm-generic/ptrace.h already has a definition for you
-mike
Quoted 10 lines · Mike Frysinger
arch/powerpc/include/asm/ptrace.h struct pt_regs { · line 89
Quoted 2 lines · On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
arch/powerpc/include/asm/ptrace.h +2
-0+#define GET_FP (regs) (0) +#define SET_FP (regs, val)ppc doesn't have a standard FP location ?
Quoted 1 line
+#define
profile_pc(regs)GET_IP(regs)pretty sure you don't need this as
asm-generic/ptrace.halready has a definition for you
On ppc64, profile_pc is an extern function if CONFIG_SMP is set. else its same as whats defined in asm-generic/ptrace.h
Now if we allow asm-generic/ptrace.h definition to take effect, then powerpc/time.h (where the actual profile_pc is defined as an extern function) fails with an error for redefinition.
Hence our approach was to define profile_pc before asm-generic/ptrace.h gets included. One change that we could do was to define profile_pc only under CONFIG_SMP. But I think it makes the code less confusing. Otherwise people might keep wondering why profile_pc is defined only for CONFIG_SMP case.
Signature · 2 lines
Thanks and Regards Srikar
Quoted 9 lines · On Thursday 02 February 2012 11:36:59 Srikar Dronamraju wrote:
Quoted 5 lines · Mike Frysinger
Quoted 1 line · On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
+#define
profile_pc(regs)GET_IP(regs)pretty sure you don't need this as
asm-generic/ptrace.halready has a definition for youOn ppc64,
profile_pcis an extern function ifCONFIG_SMPis set. else its same as whats defined inasm-generic/ptrace.h
the code i quoted was from !CONFIG_SMP
-mike
Quoted 5 lines · Mike Frysinger
arch/powerpc/include/asm/ptrace.h struct pt_regs { · line 89
Quoted 2 lines · On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
arch/powerpc/include/asm/ptrace.h +2
-0+#define GET_FP (regs) (0) +#define SET_FP (regs, val)ppc doesn't have a standard FP location ?
Not really no, it's the sp (r1). r31 might be considered a "frame pointer" under some circumstances but there isn't much you can do with it, it's really r1 that gives you the ability to backtrace (each stack frame contains a pointer to the next one).
Quoted 5 lines
Quoted 1 line
+#define
profile_pc(regs)GET_IP(regs)pretty sure you don't need this as
asm-generic/ptrace.halready has a definition for you
-mike
Cheers,
Ben.
With this change, helpers such as instruction_pointer() et al, get defined in the generic header in terms of GET_IP
Removed the unnecessary definition of profile_pc in !CONFIG_SMP case as suggested by Mike Frysinger.
--- arch/powerpc/include/asm/ptrace.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
arch/powerpc/include/asm/ptrace.h +12 -8
@@ -83,8 +83,18 @@ struct pt_regs {#ifndef __ASSEMBLY__ -#define instruction_pointer (regs) ((regs)->nip) -#define user_stack_pointer (regs) ((regs)->gpr[1]) +#define GET_IP (regs) ((regs)->nip) +#define GET_USP (regs) ((regs)->gpr[1]) +#define GET_FP (regs) (0) +#define SET_FP (regs, val) + +#ifdef CONFIG_SMP +extern unsigned long profile_pc (struct pt_regs *regs); +#define profile_pc profile_pc +#endif + +#include <asm-generic/ptrace.h> +#define kernel_stack_pointer (regs) ((regs)->gpr[1])static inline int is_syscall_success (struct pt_regs *regs) {
@@ -99,12 +109,6 @@ static inline long regs_return_value(struct pt_regs *regs)return -regs->gpr[3 ]; } -#ifdef CONFIG_SMP -extern unsigned long profile_pc (struct pt_regs *regs); -#else -#define profile_pc (regs) instruction_pointer(regs) -#endif -#ifdef __powerpc64__#define user_mode (regs) ((((regs)->msr) >> MSR_PR_LG) & 0x1)#else
Mike Frysinger
Acked-by-mike