[POWERPC] Move stackframe definitions to common header
This moves various definitions used all over the place to parse stack frames to ptrace.h so only one definition is needed. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
committed by
Paul Mackerras
parent
f4ac7b5eb7
commit
ec2b36b9f2
@@ -914,20 +914,6 @@ int validate_sp(unsigned long sp, struct task_struct *p,
|
||||
return valid_irq_stack(sp, p, nbytes);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#define MIN_STACK_FRAME 112 /* same as STACK_FRAME_OVERHEAD, in fact */
|
||||
#define FRAME_LR_SAVE 2
|
||||
#define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288)
|
||||
#define REGS_MARKER 0x7265677368657265ul
|
||||
#define FRAME_MARKER 12
|
||||
#else
|
||||
#define MIN_STACK_FRAME 16
|
||||
#define FRAME_LR_SAVE 1
|
||||
#define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
|
||||
#define REGS_MARKER 0x72656773ul
|
||||
#define FRAME_MARKER 2
|
||||
#endif
|
||||
|
||||
EXPORT_SYMBOL(validate_sp);
|
||||
|
||||
unsigned long get_wchan(struct task_struct *p)
|
||||
@@ -939,15 +925,15 @@ unsigned long get_wchan(struct task_struct *p)
|
||||
return 0;
|
||||
|
||||
sp = p->thread.ksp;
|
||||
if (!validate_sp(sp, p, MIN_STACK_FRAME))
|
||||
if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
|
||||
return 0;
|
||||
|
||||
do {
|
||||
sp = *(unsigned long *)sp;
|
||||
if (!validate_sp(sp, p, MIN_STACK_FRAME))
|
||||
if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
|
||||
return 0;
|
||||
if (count > 0) {
|
||||
ip = ((unsigned long *)sp)[FRAME_LR_SAVE];
|
||||
ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE];
|
||||
if (!in_sched_functions(ip))
|
||||
return ip;
|
||||
}
|
||||
@@ -976,12 +962,12 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
|
||||
lr = 0;
|
||||
printk("Call Trace:\n");
|
||||
do {
|
||||
if (!validate_sp(sp, tsk, MIN_STACK_FRAME))
|
||||
if (!validate_sp(sp, tsk, STACK_FRAME_OVERHEAD))
|
||||
return;
|
||||
|
||||
stack = (unsigned long *) sp;
|
||||
newsp = stack[0];
|
||||
ip = stack[FRAME_LR_SAVE];
|
||||
ip = stack[STACK_FRAME_LR_SAVE];
|
||||
if (!firstframe || ip != lr) {
|
||||
printk("["REG"] ["REG"] ", sp, ip);
|
||||
print_symbol("%s", ip);
|
||||
@@ -995,8 +981,8 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
|
||||
* See if this is an exception frame.
|
||||
* We look for the "regshere" marker in the current frame.
|
||||
*/
|
||||
if (validate_sp(sp, tsk, INT_FRAME_SIZE)
|
||||
&& stack[FRAME_MARKER] == REGS_MARKER) {
|
||||
if (validate_sp(sp, tsk, STACK_INT_FRAME_SIZE)
|
||||
&& stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
|
||||
struct pt_regs *regs = (struct pt_regs *)
|
||||
(sp + STACK_FRAME_OVERHEAD);
|
||||
printk("--- Exception: %lx", regs->trap);
|
||||
|
Reference in New Issue
Block a user