How to get 16-byte stack alignment in leaf functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello, I am trying to create a dynamic library for
x86_64-apple-darwin12 (Mac OS) with gcc 4.8.1.  My source code
includes some simple functions that I think are being identified as
leaf functions.  This works fine when compiling to a static library.

However, when compiling to dynamic library (-dynamiclib etc.), seg
fault results immediately on call from one of these leaf-like
functions to another.  GDB tells me that the stack becomes misaligned
in the calling function, and the actual seg fault happens within a
dynamic loader stub function.  The simplified message from GDB is:

   misaligned_stack_error_entering_dyld_stub_binder

And indeed, the stack pointer which was aligned to xxxx0 in previous
functions, is now xxxx8 just before the fatal call to the dynamic
loader.

I read that the Mac ABI requires 16-byte stack alignment.  So, this
seems to be a case where leaf functions are no longer leaf functions
when compiling for dynamic library.  However I can not seem to obtain
16 byte alignment by default, or with the obvious controls such as
-mpreferred-stack-boundary=4.  There are a few kludges that force
alignment, such as adding a fprintf call in the called function.

Is there a straightforward way to obtain 16-byte stack alignment for
all function calls, regardless of their status as leaf?

I will gladly supply a short test case if this is insufficient
information.  Thanks for any insights.

--Dave




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux