From fa5250051f7237418430e6bf6f07c0eef784671e Mon Sep 17 00:00:00 2001 From: Pavel Chupin Date: Wed, 19 Mar 2014 13:55:40 +0400 Subject: [PATCH] Fix x86_64 alignment in crtbegin Sync from bionic Change-Id: Ic2b5f1cf87c4c89f75571f76b6a078990bfcb1e4 Signed-off-by: Pavel Chupin --- ndk/platforms/android-9/arch-x86/src/crtbegin.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ndk/platforms/android-9/arch-x86/src/crtbegin.c b/ndk/platforms/android-9/arch-x86/src/crtbegin.c index 43e9306ba..fa9f3f32b 100644 --- a/ndk/platforms/android-9/arch-x86/src/crtbegin.c +++ b/ndk/platforms/android-9/arch-x86/src/crtbegin.c @@ -40,7 +40,9 @@ __attribute__ ((section (".fini_array"))) void (*__FINI_ARRAY__)(void) = (void (*)(void)) -1; __LIBC_HIDDEN__ +#ifdef __i386__ __attribute__((force_align_arg_pointer)) +#endif void _start() { structors_array_t array; array.preinit_array = &__PREINIT_ARRAY__; @@ -48,9 +50,15 @@ void _start() { array.fini_array = &__FINI_ARRAY__; void* raw_args = (void*) ((uintptr_t) __builtin_frame_address(0) + sizeof(void*)); +#ifdef __x86_64__ + // 16-byte stack alignment is required by x86_64 ABI + asm("andq $~15, %rsp"); +#endif __libc_init(raw_args, NULL, &main, &array); } #include "__dso_handle.h" #include "atexit.h" -#include "__stack_chk_fail_local.h" +#ifdef __i386__ +# include "../../arch-x86/bionic/__stack_chk_fail_local.h" +#endif