x86_64: all apps compiled with -mno-red-zone (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Jul 2013 18:23:18 +0000 (11:23 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 11 Jul 2013 02:30:02 +0000 (19:30 -0700)
The red-zone is an ABI specification, allowing the compiler to use 128
bytes below the stack pointer.  This helps with some leaf functions.
We make a bunch of assumptions about being able to use the area below
the stack for popping user contexts, so we can't allow the red-zone
optimization.  There is a similar issue with interrupts in the kernel
(given our current interrupt handling strategy).

Copy over ros64.h and rebuild GCC.

tools/compilers/gcc-glibc/gcc-4.6.1-ros/gcc/config/i386/ros64.h

index baca26e..bb9a05f 100644 (file)
@@ -41,7 +41,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
 
 #undef CC1_SPEC
-#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"
+#define CC1_SPEC "%(cc1_cpu) %{profile:-p} -mno-red-zone "
 
 /* The svr4 ABI for the i386 says that records and unions are returned
    in memory.  In the 64bit compilation we will turn this flag off in