Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Nov 2012 16:36:59 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Dimitry Andric <dim@freebsd.org>
Cc:        David Chisnall <theraven@freebsd.org>, freebsd-current@freebsd.org, David Naylor <naylor.b.david@gmail.com>, Brooks Davis <brooks@freebsd.org>, Jan Beich <jbeich@tormail.org>
Subject:   Re: November 5th is Clang-Day
Message-ID:  <20121104143658.GM73505@kib.kiev.ua>
In-Reply-To: <50967BD6.9090806@FreeBSD.org>
References:  <20121102032945.GF65074@lor.one-eyed-alien.net> <201211030948.43530.naylor.b.david@gmail.com> <1TUlad-0008bB-OF@internal.tormail.org> <201211041442.16620.naylor.b.david@gmail.com> <20121104131830.GL73505@kib.kiev.ua> <50967BD6.9090806@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--PlDVpzlhHY5RV9ko
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sun, Nov 04, 2012 at 03:29:42PM +0100, 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) w=
inecfg
> >> 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.
>=20
> 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.
No, this is a misunderstanding.

We must provide libraries that tolerate the 4-byte aligned stack.
Also, to be compatible with broken compilers (both older versions of gcc
and some versions of clang) we must provide the libraries which preserve
the %esp mod 0x10 across the functions entry/leave points.

The crt ensures that the stack is 16-byte aligned on entry to main.
>=20
> 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".
Right, this is ABI which some binaries follow. There are some other binarie=
s,
generated by arguably broken compilers, which require 16-byte alignment.
The system shall support both.

> Index: contrib/llvm/lib/Target/X86/X86Subtarget.cpp
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- contrib/llvm/lib/Target/X86/X86Subtarget.cpp	(revision 242480)
> +++ contrib/llvm/lib/Target/X86/X86Subtarget.cpp	(working copy)
> @@ -416,12 +416,12 @@ X86Subtarget::X86Subtarget(const std::string &TT,
>    assert((!In64BitMode || HasX86_64) &&
>           "64-bit code requested on a subtarget that doesn't support it!"=
);
> =20
> -  // Stack alignment is 16 bytes on Darwin, FreeBSD, Linux and Solaris (=
both
> -  // 32 and 64 bit) and for all 64-bit targets.
> +  // Stack alignment is 16 bytes on Darwin, Linux and Solaris (both 32 a=
nd 64
> +  // bit) and for all 64-bit targets.
>    if (StackAlignOverride)
> -    stackAlignment =3D StackAlignOverride;
> -  else if (isTargetDarwin() || isTargetFreeBSD() || isTargetLinux() ||
> -           isTargetSolaris() || In64BitMode)
> +	  stackAlignment =3D StackAlignOverride;
> +  else if (isTargetDarwin() || isTargetLinux() || isTargetSolaris() ||
> +           In64BitMode)
>      stackAlignment =3D 16;
>  }
> =20


--PlDVpzlhHY5RV9ko
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)

iEYEARECAAYFAlCWfYoACgkQC3+MBN1Mb4g8SACfXYluKR7qLZ6kHg+aXgYAbc/l
GzUAn1u0IfN7lHr+4FS7TpqyXZTq8x5O
=crOO
-----END PGP SIGNATURE-----

--PlDVpzlhHY5RV9ko--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121104143658.GM73505>