Commit 36aa1b18 authored by Ulrich Weigand's avatar Ulrich Weigand Committed by Benjamin Herrenschmidt

powerpc: PTRACE_PEEKUSR always returns FPR0

There is a bug in using ptrace to access FPRs via PTRACE_PEEKUSR /
PTRACE_POKEUSR. In effect, trying to access any of the FPRs always
really accesses FPR0, which does seriously break debugging :-)

The problem seems to have been introduced by commit 3ad26e5c
(Merge branch 'for-kvm' into next).

[ It is indeed a merge conflict between Paul's FPU/VSX state rework
and my LE patches - Anton ]
Signed-off-by: default avatarUlrich Weigand <Ulrich.Weigand@de.ibm.com>
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent e641eb03
...@@ -1555,7 +1555,7 @@ long arch_ptrace(struct task_struct *child, long request, ...@@ -1555,7 +1555,7 @@ long arch_ptrace(struct task_struct *child, long request,
flush_fp_to_thread(child); flush_fp_to_thread(child);
if (fpidx < (PT_FPSCR - PT_FPR0)) if (fpidx < (PT_FPSCR - PT_FPR0))
memcpy(&tmp, &child->thread.fp_state.fpr, memcpy(&tmp, &child->thread.TS_FPR(fpidx),
sizeof(long)); sizeof(long));
else else
tmp = child->thread.fp_state.fpscr; tmp = child->thread.fp_state.fpscr;
...@@ -1588,7 +1588,7 @@ long arch_ptrace(struct task_struct *child, long request, ...@@ -1588,7 +1588,7 @@ long arch_ptrace(struct task_struct *child, long request,
flush_fp_to_thread(child); flush_fp_to_thread(child);
if (fpidx < (PT_FPSCR - PT_FPR0)) if (fpidx < (PT_FPSCR - PT_FPR0))
memcpy(&child->thread.fp_state.fpr, &data, memcpy(&child->thread.TS_FPR(fpidx), &data,
sizeof(long)); sizeof(long));
else else
child->thread.fp_state.fpscr = data; child->thread.fp_state.fpscr = data;
......
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