Date: Sun, 04 Nov 2012 15:29:42 +0100 From: Dimitry Andric <dim@FreeBSD.org> To: Konstantin Belousov <kostikbel@gmail.com> 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: <50967BD6.9090806@FreeBSD.org> In-Reply-To: <20121104131830.GL73505@kib.kiev.ua> 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>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------080601050205030809080704 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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". --------------080601050205030809080704 Content-Type: text/x-diff; name="fix-llvm-i386-alignment-1.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fix-llvm-i386-alignment-1.diff" Index: contrib/llvm/lib/Target/X86/X86Subtarget.cpp =================================================================== --- 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!"); - // 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 and 64 + // bit) and for all 64-bit targets. if (StackAlignOverride) - stackAlignment = StackAlignOverride; - else if (isTargetDarwin() || isTargetFreeBSD() || isTargetLinux() || - isTargetSolaris() || In64BitMode) + stackAlignment = StackAlignOverride; + else if (isTargetDarwin() || isTargetLinux() || isTargetSolaris() || + In64BitMode) stackAlignment = 16; } --------------080601050205030809080704--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50967BD6.9090806>