[PATCH] Implement GET_IP/SET_IP for powerpc architecture.

Subsystems: linux for powerpc (32-bit and 64-bit), ptrace support, the rest

STALE5303d

7 messages, 3 authors, 2012-02-09 · open the first message on its own page

[PATCH] Implement GET_IP/SET_IP for powerpc architecture.

From: Srikar Dronamraju <hidden>
Date: 2012-02-02 14:52:59

With this change, helpers such as instruction_pointer() et al, get defined
in the generic header in terms of GET_IP

Signed-off-by: Srikar Dronamraju <redacted>
Signed-off-by: Ananth N Mavinakayanahalli <redacted>
---
 arch/powerpc/include/asm/ptrace.h |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
index 78a2051..889408d 100644
--- a/arch/powerpc/include/asm/ptrace.h
+++ b/arch/powerpc/include/asm/ptrace.h
@@ -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

Re: [PATCH] Implement GET_IP/SET_IP for powerpc architecture.

From: Mike Frysinger <hidden>
Date: 2012-02-02 16:35:11

On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
+#define GET_FP(regs)		(0)
+#define SET_FP(regs, val)
ppc doesn't have a standard FP location ?
+#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

Re: [PATCH] Implement GET_IP/SET_IP for powerpc architecture.

From: Srikar Dronamraju <hidden>
Date: 2012-02-02 16:55:14

* Mike Frysinger [off-list ref] [2012-02-02 11:28:46]:
On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
quoted
+#define GET_FP(regs)		(0)
+#define SET_FP(regs, val)
ppc doesn't have a standard FP location ?
quoted
+#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
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.

-- 
Thanks and Regards
Srikar

Re: [PATCH] Implement GET_IP/SET_IP for powerpc architecture.

From: Mike Frysinger <hidden>
Date: 2012-02-02 17:02:18

On Thursday 02 February 2012 11:36:59 Srikar Dronamraju wrote:
* Mike Frysinger [off-list ref] [2012-02-02 11:28:46]:
quoted
On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
quoted
+#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
On ppc64, profile_pc is an extern function if CONFIG_SMP is set.
else its same as whats defined in asm-generic/ptrace.h
the code i quoted was from !CONFIG_SMP
-mike

Re: [PATCH] Implement GET_IP/SET_IP for powerpc architecture.

From: Benjamin Herrenschmidt <hidden>
Date: 2012-02-02 21:24:04

On Thu, 2012-02-02 at 11:28 -0500, Mike Frysinger wrote:
On Thursday 02 February 2012 09:41:25 Srikar Dronamraju wrote:
quoted
+#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
+#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
Cheers,
Ben.

Re: [PATCH v2 ] Implement GET_IP/SET_IP for powerpc architecture.

From: Srikar Dronamraju <hidden>
Date: 2012-02-08 15:06:11

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.

Signed-off-by: Srikar Dronamraju <redacted>
Signed-off-by: Ananth N Mavinakayanahalli <redacted>
---
 arch/powerpc/include/asm/ptrace.h |   20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
index 78a2051..84cc784 100644
--- a/arch/powerpc/include/asm/ptrace.h
+++ b/arch/powerpc/include/asm/ptrace.h
@@ -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

Re: [PATCH v2 ] Implement GET_IP/SET_IP for powerpc architecture.

From: Mike Frysinger <hidden>
Date: 2012-02-09 02:56:26

Acked-by: Mike Frysinger <redacted>
-mike
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help