[powerpc] ptrace: Fix build with gcc 4.6
svn path=/dists/trunk/linux-2.6/; revision=18242
This commit is contained in:
parent
7aa515ffdd
commit
3e1e1a6980
|
@ -3,6 +3,7 @@ linux-2.6 (3.1.0-1~experimental.2) UNRELEASED; urgency=low
|
|||
[ Ben Hutchings ]
|
||||
* [alpha] wire up accept4 syscall, thanks to Michael Cree
|
||||
* iwlagn: fix modinfo display for 135 ucode (Closes: #647958)
|
||||
* [powerpc] ptrace: Fix build with gcc 4.6
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Fri, 04 Nov 2011 15:05:47 +0000
|
||||
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
Date: Mon, 26 Sep 2011 19:37:57 +0000
|
||||
Subject: [PATCH] powerpc/ptrace: Fix build with gcc 4.6
|
||||
|
||||
commit e69b742a6793dc5bf16f6eedca534d4bc10d68b2 upstream.
|
||||
|
||||
gcc (rightfully) complains that we are accessing beyond the
|
||||
end of the fpr array (we do, to access the fpscr).
|
||||
|
||||
The only sane thing to do (whether anything in that code can be
|
||||
called remotely sane is debatable) is to special case fpscr and
|
||||
handle it as a separate statement.
|
||||
|
||||
I initially tried to do it it by making the array access conditional
|
||||
to index < PT_FPSCR and using a 3rd else leg but for some reason gcc
|
||||
was unable to understand it and still spewed the warning.
|
||||
|
||||
So I ended up with something a tad more intricated but it seems to
|
||||
build on 32-bit and on 64-bit with and without VSX.
|
||||
|
||||
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
---
|
||||
arch/powerpc/kernel/ptrace.c | 18 ++++++++++++++----
|
||||
1 files changed, 14 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
|
||||
index 05b7dd2..18447c4 100644
|
||||
--- a/arch/powerpc/kernel/ptrace.c
|
||||
+++ b/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;
|
||||
--
|
||||
1.7.7.2
|
||||
|
|
@ -1,2 +1,3 @@
|
|||
+ bugfix/alpha/alpha-wire-up-accept4-syscall.patch
|
||||
+ bugfix/all/iwlagn-fix-modinfo-display-for-135-ucode.patch
|
||||
+ bugfix/powerpc/powerpc-ptrace-Fix-build-with-gcc-4.6.patch
|
||||
|
|
Loading…
Reference in New Issue