summaryrefslogtreecommitdiff
path: root/patches/gcc/3.3.3/pr15089-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/gcc/3.3.3/pr15089-fix.patch')
-rw-r--r--patches/gcc/3.3.3/pr15089-fix.patch25
1 files changed, 25 insertions, 0 deletions
diff --git a/patches/gcc/3.3.3/pr15089-fix.patch b/patches/gcc/3.3.3/pr15089-fix.patch
new file mode 100644
index 0000000..ceaf957
--- /dev/null
+++ b/patches/gcc/3.3.3/pr15089-fix.patch
@@ -0,0 +1,25 @@
+See http://gcc.gnu.org/PR15089
+"In some cases the specified register for a local variable meant to be
+used with inline assembly code is not respected. This breaks code
+relying on this feature to implement non-standard calling convension."
+
+This fix is probably needed to properly implement linux syscalls in some architectures.
+
+First added to crosstool by Jamie Hicks, see
+http://www.handhelds.org/hypermail/kernel-discuss/current/0066.html
+
+Index: gcc/loop.c
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/loop.c,v
+retrieving revision 1.488.2.3
+diff -u -r1.488.2.3 loop.c
+--- gcc-old/gcc/loop.c 14 Feb 2004 14:46:03 -0000 1.488.2.3
++++ gcc-new/gcc/loop.c 28 Apr 2004 22:02:53 -0000
+@@ -929,6 +929,7 @@
+ || (! (GET_CODE (SET_SRC (set)) == REG
+ && (REGNO (SET_SRC (set))
+ < FIRST_PSEUDO_REGISTER))))
++ && regno >= FIRST_PSEUDO_REGISTER
+ /* This test is not redundant; SET_SRC (set) might be
+ a call-clobbered register and the life of REGNO
+ might span a call. */