Skip site navigation (1)Skip section navigation (2)
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>