Commit 62b14c24 authored by Atsushi Nemoto's avatar Atsushi Nemoto Committed by Ralf Baechle

[MIPS] Store sign-extend register values for PTRACE_GETREGS

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: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 26c288f8
...@@ -65,13 +65,13 @@ int ptrace_getregs(struct task_struct *child, __s64 __user *data) ...@@ -65,13 +65,13 @@ int ptrace_getregs(struct task_struct *child, __s64 __user *data)
regs = task_pt_regs(child); regs = task_pt_regs(child);
for (i = 0; i < 32; i++) for (i = 0; i < 32; i++)
__put_user(regs->regs[i], data + i); __put_user((long)regs->regs[i], data + i);
__put_user(regs->lo, data + EF_LO - EF_R0); __put_user((long)regs->lo, data + EF_LO - EF_R0);
__put_user(regs->hi, data + EF_HI - EF_R0); __put_user((long)regs->hi, data + EF_HI - EF_R0);
__put_user(regs->cp0_epc, data + EF_CP0_EPC - EF_R0); __put_user((long)regs->cp0_epc, data + EF_CP0_EPC - EF_R0);
__put_user(regs->cp0_badvaddr, data + EF_CP0_BADVADDR - EF_R0); __put_user((long)regs->cp0_badvaddr, data + EF_CP0_BADVADDR - EF_R0);
__put_user(regs->cp0_status, data + EF_CP0_STATUS - EF_R0); __put_user((long)regs->cp0_status, data + EF_CP0_STATUS - EF_R0);
__put_user(regs->cp0_cause, data + EF_CP0_CAUSE - EF_R0); __put_user((long)regs->cp0_cause, data + EF_CP0_CAUSE - EF_R0);
return 0; return 0;
} }
...@@ -390,11 +390,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) ...@@ -390,11 +390,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
} }
case PTRACE_GETREGS: case PTRACE_GETREGS:
ret = ptrace_getregs(child, (__u64 __user *) data); ret = ptrace_getregs(child, (__s64 __user *) data);
break; break;
case PTRACE_SETREGS: case PTRACE_SETREGS:
ret = ptrace_setregs(child, (__u64 __user *) data); ret = ptrace_setregs(child, (__s64 __user *) data);
break; break;
case PTRACE_GETFPREGS: case PTRACE_GETFPREGS:
......
...@@ -346,11 +346,11 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) ...@@ -346,11 +346,11 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
} }
case PTRACE_GETREGS: case PTRACE_GETREGS:
ret = ptrace_getregs(child, (__u64 __user *) (__u64) data); ret = ptrace_getregs(child, (__s64 __user *) (__u64) data);
break; break;
case PTRACE_SETREGS: case PTRACE_SETREGS:
ret = ptrace_setregs(child, (__u64 __user *) (__u64) data); ret = ptrace_setregs(child, (__s64 __user *) (__u64) data);
break; break;
case PTRACE_GETFPREGS: case PTRACE_GETFPREGS:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment