Merge "Fix -fstack-protector-strong for x86."

This commit is contained in:
Elliott Hughes 2015-12-10 02:33:34 +00:00 committed by Gerrit Code Review
commit 6500f51c0e
3 changed files with 7 additions and 2 deletions

View File

@ -697,6 +697,9 @@ endef
include $(CLEAR_VARS)
LOCAL_SRC_FILES := bionic/__stack_chk_fail.cpp
# On x86, the __set_tls implementation is complex enough that
# -fstack-protector-strong inserts a check.
LOCAL_SRC_FILES_x86 := arch-x86/bionic/__set_tls.c
LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector
LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
LOCAL_CPPFLAGS := $(libc_common_cppflags)

View File

@ -109,7 +109,6 @@ libc_bionic_src_files_x86 += \
arch-x86/bionic/libgcc_compat.c \
arch-x86/bionic/__restore.S \
arch-x86/bionic/setjmp.S \
arch-x86/bionic/__set_tls.c \
arch-x86/bionic/syscall.S \
arch-x86/bionic/vfork.S \

View File

@ -79,6 +79,10 @@ void __libc_init_main_thread(KernelArgumentBlock& args) {
static pthread_internal_t main_thread;
// The x86 -fstack-protector implementation uses TLS, so make sure that's
// set up before we call any function that might get a stack check inserted.
__set_tls(main_thread.tls);
// Tell the kernel to clear our tid field when we exit, so we're like any other pthread.
// As a side-effect, this tells us our pid (which is the same as the main thread's tid).
main_thread.tid = __set_tid_address(&main_thread.tid);
@ -97,7 +101,6 @@ void __libc_init_main_thread(KernelArgumentBlock& args) {
__init_thread(&main_thread);
__init_tls(&main_thread);
__set_tls(main_thread.tls);
// Store a pointer to the kernel argument block in a TLS slot to be
// picked up by the libc constructor.