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
[-- Attachment #1 --]
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".
[-- Attachment #2 --]
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;
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50967BD6.9090806>
