diff options
author | Ryan Prichard <rprichard@google.com> | 2018-02-08 18:37:26 -0800 |
---|---|---|
committer | Ryan Prichard <rprichard@google.com> | 2018-02-08 20:55:57 -0800 |
commit | a0d177d0105a4ca8ea15901843357817c64e777e (patch) | |
tree | 632e35a408cbeca24173ea0ca7fc9fbefd586a44 /libc/malloc_hooks/malloc_hooks.cpp | |
parent | 12d96ed7f59d1e463df581ad6ec7ccfc87d9ef5d (diff) |
crtbegin: Correctly align ESP to 16 for __i386__
The (lowest) address of the argument area (aka ESP immediately prior to
the call instruction) must be aligned to 0 mod 16. Here, it is aligned to
12 mod 16.
From the SysV ABI doc (2.2.2 The Stack Frame)
"""The end of the input argument area shall be aligned on a 16 (32, if
__m256 is passed on stack) byte boundary. In other words, the value
(%esp + 4) is always a multiple of 16 (32) when control is transferred to
the function entry point."""
Test: extract code into a separate C file and verify stack alignment in a
"start_main" function
Test: use the upcoming NDK r17-beta1 (with new Bionic crtbegin*.o files)
with an M-23 x86 system image, check alignment in main (compiled with
Clang not GCC, compiled w/o -mstackrealign)
Bug: b/73140672
Change-Id: Ia8d93fe5668d0a514a9fd22c40bf8362805111e6
Diffstat (limited to 'libc/malloc_hooks/malloc_hooks.cpp')
0 files changed, 0 insertions, 0 deletions