fix incompatibility with -fstack-protector-strong
The __libc_init_tls function in libc_init_common.cpp takes a reference to a local variable so it ends up being protected. Since this happens before TLS and the stack guard value are initialized, it breaks. The libc_init_common code needs to be compiled with -fno-stack-protector and can then be merged into libc_bionic. Change-Id: Ie95ea2ff533d4af1cfad1c9bc59e49f20a8e119d
This commit is contained in:
parent
cd588f847f
commit
96dd2b6e85
@ -147,7 +147,6 @@ libc_bionic_ndk_src_files := \
|
||||
bionic/lfs64_support.cpp \
|
||||
bionic/__libc_current_sigrtmax.cpp \
|
||||
bionic/__libc_current_sigrtmin.cpp \
|
||||
bionic/libc_init_common.cpp \
|
||||
bionic/libc_logging.cpp \
|
||||
bionic/libgen.cpp \
|
||||
bionic/link.cpp \
|
||||
@ -672,6 +671,30 @@ $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
|
||||
# ========================================================
|
||||
# libc_init_common.a - common static/dynamic init code
|
||||
# ========================================================
|
||||
#
|
||||
# The initialization code needs to be compiled with -fno-stack-protector since
|
||||
# it runs before TLS and initial guard value are set up. It takes the address
|
||||
# of a stack variable, triggering protection with -fstack-protector-strong.
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := bionic/libc_init_common.cpp
|
||||
LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector
|
||||
LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
|
||||
LOCAL_CPPFLAGS := $(libc_common_cppflags)
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
LOCAL_MODULE := libc_init_common
|
||||
LOCAL_CLANG := $(use_clang)
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
$(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
|
||||
# ========================================================
|
||||
# libc_tzcode.a - upstream 'tzcode' code
|
||||
# ========================================================
|
||||
@ -962,6 +985,7 @@ LOCAL_CLANG := $(use_clang)
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
|
||||
LOCAL_CXX_STL := none
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libc_init_common
|
||||
LOCAL_SANITIZE := never
|
||||
LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user