[MIPS] Store sign-extend register values for PTRACE_GETREGS
authorAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Thu, 25 Oct 2007 15:53:02 +0000 (00:53 +0900)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 29 Oct 2007 19:35:36 +0000 (19:35 +0000)
A comment on ptrace_getregs() states "Registers are sign extended to
fill the available space." but it is not true.  Fix code to match the
comment.  Also fix casts on each caller to get rid of some warnings.

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/ptrace.c
arch/mips/kernel/ptrace32.c

index 999f7853de26162893be99098d2a7221809ca40d..35234b92b9a58f9d5c9e8a2063c292e35c3ac327 100644 (file)
@@ -65,13 +65,13 @@ int ptrace_getregs(struct task_struct *child, __s64 __user *data)
        regs = task_pt_regs(child);
 
        for (i = 0; i < 32; i++)
-               __put_user(regs->regs[i], data + i);
-       __put_user(regs->lo, data + EF_LO - EF_R0);
-       __put_user(regs->hi, data + EF_HI - EF_R0);
-       __put_user(regs->cp0_epc, data + EF_CP0_EPC - EF_R0);
-       __put_user(regs->cp0_badvaddr, data + EF_CP0_BADVADDR - EF_R0);
-       __put_user(regs->cp0_status, data + EF_CP0_STATUS - EF_R0);
-       __put_user(regs->cp0_cause, data + EF_CP0_CAUSE - EF_R0);
+               __put_user((long)regs->regs[i], data + i);
+       __put_user((long)regs->lo, data + EF_LO - EF_R0);
+       __put_user((long)regs->hi, data + EF_HI - EF_R0);
+       __put_user((long)regs->cp0_epc, data + EF_CP0_EPC - EF_R0);
+       __put_user((long)regs->cp0_badvaddr, data + EF_CP0_BADVADDR - EF_R0);
+       __put_user((long)regs->cp0_status, data + EF_CP0_STATUS - EF_R0);
+       __put_user((long)regs->cp0_cause, data + EF_CP0_CAUSE - EF_R0);
 
        return 0;
 }
@@ -390,11 +390,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                }
 
        case PTRACE_GETREGS:
-               ret = ptrace_getregs(child, (__u64 __user *) data);
+               ret = ptrace_getregs(child, (__s64 __user *) data);
                break;
 
        case PTRACE_SETREGS:
-               ret = ptrace_setregs(child, (__u64 __user *) data);
+               ret = ptrace_setregs(child, (__s64 __user *) data);
                break;
 
        case PTRACE_GETFPREGS:
index f2bffed94fa312ba4c9b0c8f68a8d7b79cb58b32..76818be6ba7ce1511b37061c5cf4c9649d9397c7 100644 (file)
@@ -346,11 +346,11 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
                }
 
        case PTRACE_GETREGS:
-               ret = ptrace_getregs(child, (__u64 __user *) (__u64) data);
+               ret = ptrace_getregs(child, (__s64 __user *) (__u64) data);
                break;
 
        case PTRACE_SETREGS:
-               ret = ptrace_setregs(child, (__u64 __user *) (__u64) data);
+               ret = ptrace_setregs(child, (__s64 __user *) (__u64) data);
                break;
 
        case PTRACE_GETFPREGS: