Matthew Dillon wrote:
    I'm surprised Bruce hasn't chimed in here yet.  I guess he's tired of
    repeating himself.

    In 4.9, libcsu, which generates crt1.o (which is the start code for
    C programs which the linker links in automatically) has this line in it:

andl $~0xf, %%esp # align stack to 16-byte boundary

So anything linked with 4.9 is going to align the stack on a 16 byte boundary no matter WHAT the kernel does.

    FreeBSD-5 does not have this alignment in its crt1.o because GCC3
    automatically aligns the stack on a per-procedure basis.  Or at least
    it is supposed to.  Maybe it's broke?  :-)

I've not looked at 3.3, but I seem to recall that GCC 3.2 did not actually align the stack within each function, but preserved the alignment. (That is, each function assumed the stack had a certain alignment on entry and ensured that alignment was preserved for any subsequent function calls.)

I had my doubts about this, as it meant there was a LOT
of stack fiddling before and after every function call.
(The alignment was handled at caller, not callee.  A lot of
functions don't need any alignment at all, really, so
it seems like it could be wasted effort in a lot of cases.)

If I'm remembering this correctly, then aligning
the stack in crt1.o would be pretty much essential.

Tim Kientzle

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to