Merge "Fix -fstack-protector-strong for x86."
This commit is contained in:
commit
6500f51c0e
@ -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)
|
||||
|
@ -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 \
|
||||
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user