November 5th is Clang-Day
Nathan Whitehorn
nwhitehorn at freebsd.org
Sun Nov 4 15:42:08 UTC 2012
On 11/04/12 08:29, Dimitry Andric wrote:
> On 2012-11-04 14:18, Konstantin Belousov wrote:
>> On Sun, Nov 04, 2012 at 02:42:13PM +0200, David Naylor wrote:
> ...
>>> I tried building (using gcc) wine with your patch and now (at least)
>>> winecfg
>>> and regedit work with a clang built lib32. I'll email Gerald (wine's
>>> maintainer) about including your patch in wine.
>>
>> The wine is the wrong place to fix. If system libraries suddenly started
>> requiring 16-byte stack alignment on i386, it is unacceptable breakage
>> of the ABI.
>
> So we really must use 4 byte stack alignment on i386 by default? I have
> attached a diff to llvm for this, but I would like to verify that it is
> really correct. Apparently Darwin, Linux and Solaris all use 16 byte
> alignment.
>
> The Sys V ABI seems to say only: "The stack is word aligned. Although
> the architecture does not require any alignment of the stack, software
> convention and the operating system requires that the stack be aligned
> on a word boundary".
This is an ugly business. The stack is really 4 bytes aligned on Linux
and Solaris too, but GCC decided to unilaterally change the ABI a few
years ago (also on FreeBSD). You can find a chunk of the sordid story of
this in a number of GCC bugs marked WONTFIX (e.g.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496). To pacify the people
who were yelling about it, they added some __attribute__(()) foo and
compiler flags to change what it uses for specific programs and add
magic to realign the stack at boundaries. So much water has passed under
the bridge at this point as to reach flood stage, so I think the correct
solution here is to add the same __attribute__(()) and flags to clang
rather than changing the default alignment back to 4. Changing it only
on FreeBSD is especially wrong.
-Nathan
More information about the freebsd-current
mailing list