aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/process.c')
-rw-r--r--arch/powerpc/kernel/process.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 4ec605521504..703100d5e458 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -868,11 +868,6 @@ int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
868 flush_spe_to_thread(current); 868 flush_spe_to_thread(current);
869 error = do_execve(filename, (char __user * __user *) a1, 869 error = do_execve(filename, (char __user * __user *) a1,
870 (char __user * __user *) a2, regs); 870 (char __user * __user *) a2, regs);
871 if (error == 0) {
872 task_lock(current);
873 current->ptrace &= ~PT_DTRACE;
874 task_unlock(current);
875 }
876 putname(filename); 871 putname(filename);
877out: 872out:
878 return error; 873 return error;
@@ -919,20 +914,6 @@ int validate_sp(unsigned long sp, struct task_struct *p,
919 return valid_irq_stack(sp, p, nbytes); 914 return valid_irq_stack(sp, p, nbytes);
920} 915}
921 916
922#ifdef CONFIG_PPC64
923#define MIN_STACK_FRAME 112 /* same as STACK_FRAME_OVERHEAD, in fact */
924#define FRAME_LR_SAVE 2
925#define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288)
926#define REGS_MARKER 0x7265677368657265ul
927#define FRAME_MARKER 12
928#else
929#define MIN_STACK_FRAME 16
930#define FRAME_LR_SAVE 1
931#define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
932#define REGS_MARKER 0x72656773ul
933#define FRAME_MARKER 2
934#endif
935
936EXPORT_SYMBOL(validate_sp); 917EXPORT_SYMBOL(validate_sp);
937 918
938unsigned long get_wchan(struct task_struct *p) 919unsigned long get_wchan(struct task_struct *p)
@@ -944,15 +925,15 @@ unsigned long get_wchan(struct task_struct *p)
944 return 0; 925 return 0;
945 926
946 sp = p->thread.ksp; 927 sp = p->thread.ksp;
947 if (!validate_sp(sp, p, MIN_STACK_FRAME)) 928 if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
948 return 0; 929 return 0;
949 930
950 do { 931 do {
951 sp = *(unsigned long *)sp; 932 sp = *(unsigned long *)sp;
952 if (!validate_sp(sp, p, MIN_STACK_FRAME)) 933 if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
953 return 0; 934 return 0;
954 if (count > 0) { 935 if (count > 0) {
955 ip = ((unsigned long *)sp)[FRAME_LR_SAVE]; 936 ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE];
956 if (!in_sched_functions(ip)) 937 if (!in_sched_functions(ip))
957 return ip; 938 return ip;
958 } 939 }
@@ -981,12 +962,12 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
981 lr = 0; 962 lr = 0;
982 printk("Call Trace:\n"); 963 printk("Call Trace:\n");
983 do { 964 do {
984 if (!validate_sp(sp, tsk, MIN_STACK_FRAME)) 965 if (!validate_sp(sp, tsk, STACK_FRAME_OVERHEAD))
985 return; 966 return;
986 967
987 stack = (unsigned long *) sp; 968 stack = (unsigned long *) sp;
988 newsp = stack[0]; 969 newsp = stack[0];
989 ip = stack[FRAME_LR_SAVE]; 970 ip = stack[STACK_FRAME_LR_SAVE];
990 if (!firstframe || ip != lr) { 971 if (!firstframe || ip != lr) {
991 printk("["REG"] ["REG"] ", sp, ip); 972 printk("["REG"] ["REG"] ", sp, ip);
992 print_symbol("%s", ip); 973 print_symbol("%s", ip);
@@ -1000,8 +981,8 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
1000 * See if this is an exception frame. 981 * See if this is an exception frame.
1001 * We look for the "regshere" marker in the current frame. 982 * We look for the "regshere" marker in the current frame.
1002 */ 983 */
1003 if (validate_sp(sp, tsk, INT_FRAME_SIZE) 984 if (validate_sp(sp, tsk, STACK_INT_FRAME_SIZE)
1004 && stack[FRAME_MARKER] == REGS_MARKER) { 985 && stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
1005 struct pt_regs *regs = (struct pt_regs *) 986 struct pt_regs *regs = (struct pt_regs *)
1006 (sp + STACK_FRAME_OVERHEAD); 987 (sp + STACK_FRAME_OVERHEAD);
1007 printk("--- Exception: %lx", regs->trap); 988 printk("--- Exception: %lx", regs->trap);