On Jan 20, 2009, at 11:22 PM, Jack Howarth wrote:
Are there any observations that you could make concerning
the thread...
http://gcc.gnu.org/ml/gcc/2009-01/msg00297.html
Sure, in i386/darwin.h we have:
/* Since we'll never want a stack boundary less aligned than 128 bits
we need the extra work here otherwise bits of gcc get very grumpy
when we ask for lower alignment. We could just reject values less
than 128 bits for Darwin, but it's easier to up the alignment if
it's below the minimum. */
#undef PREFERRED_STACK_BOUNDARY
#define PREFERRED_STACK_BOUNDARY \
MAX (STACK_BOUNDARY, ix86_preferred_stack_boundary)
This selects the maximal alignment to be 128 (16-bytes), the testcase
works for all alignments of 16-bytes or less. For more aligning, I
think that MAX, should be just a MIN:
/* Since we'll never want a stack boundary less aligned than 128 bits
we need the extra work here otherwise bits of gcc get very grumpy
when we ask for lower alignment. We could just reject values less
than 128 bits for Darwin, but it's easier to up the alignment if
it's below the minimum. */
#undef PREFERRED_STACK_BOUNDARY
#define PREFERRED_STACK_BOUNDARY \
MIN (STACK_BOUNDARY, ix86_preferred_stack_boundary)
this way, the code actually matches the comment as well. Plus, this
then more closely matches non-darwin x86 machines:
/* Boundary (in *bits*) on which the stack pointer prefers to be
aligned; the compiler cannot rely on having this alignment. */
#define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary
GIve that a try and let me know if it works. Seems to have been
caused by -r132332:
r125695 | echristo | 2007-06-13 18:53:17 -0700 (Wed, 13 Jun 2007) | 5
lines
2007-06-13 Eric Christopher <echri...@apple.com>
* config/i386/darwin.h (PREFERRED_STACK_BOUNDARY): Don't
let
the user set a value below STACK_BOUNDARY.
No testcase, bad, plus, the code:
Index: darwin.h
===================================================================
--- darwin.h (revision 125694)
+++ darwin.h (revision 125695)
@@ -75,6 +75,16 @@
#undef STACK_BOUNDARY
#define STACK_BOUNDARY 128
+/* Since we'll never want a stack boundary less aligned than 128 bits
+ we need the extra work here otherwise bits of gcc get very grumpy
+ when we ask for lower alignment. We could just reject values less
+ than 128 bits for Darwin, but it's easier to up the alignment if
+ it's below the minimum. */
+#undef PREFERRED_STACK_BOUNDARY
+#define PREFERRED_STACK_BOUNDARY (ix86_preferred_stack_boundary > 128 \
+ ? ix86_preferred_stack_boundary \
+ : 128)
+
/* We want -fPIC by default, unless we're using -static to compile for
the kernel or some such. */
doesn't seem to match the comment, bad. When researching, we find:
http://gcc.gnu.org/ml/gcc-bugs/2008-02/msg01394.html
IMO, there is no need for extra paranoia in darwin.h and following
defines
should be removed:
/* On Darwin, the stack is 128-bit aligned at the point of every call.
Failure to ensure this will lead to a crash in the system libraries
or dynamic loader. */
#undef STACK_BOUNDARY
#define STACK_BOUNDARY 128
/* Since we'll never want a stack boundary less aligned than 128 bits
we need the extra work here otherwise bits of gcc get very grumpy
when we ask for lower alignment. We could just reject values less
than 128 bits for Darwin, but it's easier to up the alignment if
it's below the minimum. */
#undef PREFERRED_STACK_BOUNDARY
#define PREFERRED_STACK_BOUNDARY (ix86_preferred_stack_boundary >
128 \
?
ix86_preferred_stack_boundary \
: 128)
(Could someone with darwin bootstraps and regtest removal of these
defines? Do
we even have an example of a failure for latest 4.3 if these are not
defined?)
From the original email to patches:
So, with the change to specify STACK_BOUNDARY to 128, bits of gcc get
grumpy if we set the preferred stack boundary to less than that. Since
a value less than 128 doesn't really make sense and erroring out (or
warning) is less than friendly for no reason here I'm just making it a
minimum. It also fixes a few testcases.
Committed to mainline after testing on x86-darwin.
-eric
2007-06-13 Eric Christopher <echri...@apple.com>
* config/i386/darwin.h (PREFERRED_STACK_BOUNDARY): Don't let
the user set a value below STACK_BOUNDARY.