From e649712a00e894910f378cbb391b8874dc07c66b Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Mon, 26 Sep 2011 19:37:57 +0000 Subject: [PATCH] --- yaml --- r: 274207 b: refs/heads/master c: e69b742a6793dc5bf16f6eedca534d4bc10d68b2 h: refs/heads/master i: 274205: 27a4537eed7dee74c39c4ceab6d3187b476e3bb5 274203: 86c566298ae8089f4bd99ab0edad94b618a1dcc9 274199: 0f7d32cccfbac0056bca6bc8740c0a1cf0ba3a7c 274191: bfe43cf8655d154fe042d5e0ec7be9e68bfb19f2 274175: 2216270fbabf696b01b7024492e5f2b8e33f827c v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kernel/ptrace.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 996f44a6eda1..c5b195e7ed1f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 66857b3a9e88ac6f6e279eaa06b84367e662c0dd +refs/heads/master: e69b742a6793dc5bf16f6eedca534d4bc10d68b2 diff --git a/trunk/arch/powerpc/kernel/ptrace.c b/trunk/arch/powerpc/kernel/ptrace.c index 05b7dd217f60..18447c4fbad3 100644 --- a/trunk/arch/powerpc/kernel/ptrace.c +++ b/trunk/arch/powerpc/kernel/ptrace.c @@ -1497,9 +1497,14 @@ long arch_ptrace(struct task_struct *child, long request, if (index < PT_FPR0) { tmp = ptrace_get_reg(child, (int) index); } else { + unsigned int fpidx = index - PT_FPR0; + flush_fp_to_thread(child); - tmp = ((unsigned long *)child->thread.fpr) - [TS_FPRWIDTH * (index - PT_FPR0)]; + if (fpidx < (PT_FPSCR - PT_FPR0)) + tmp = ((unsigned long *)child->thread.fpr) + [fpidx * TS_FPRWIDTH]; + else + tmp = child->thread.fpscr.val; } ret = put_user(tmp, datalp); break; @@ -1525,9 +1530,14 @@ long arch_ptrace(struct task_struct *child, long request, if (index < PT_FPR0) { ret = ptrace_put_reg(child, index, data); } else { + unsigned int fpidx = index - PT_FPR0; + flush_fp_to_thread(child); - ((unsigned long *)child->thread.fpr) - [TS_FPRWIDTH * (index - PT_FPR0)] = data; + if (fpidx < (PT_FPSCR - PT_FPR0)) + ((unsigned long *)child->thread.fpr) + [fpidx * TS_FPRWIDTH] = data; + else + child->thread.fpscr.val = data; ret = 0; } break;