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
diff --git a/libc/Android.mk b/libc/Android.mk
index de0bb41..d5252de 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -147,7 +147,6 @@
     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 \
@@ -673,6 +672,30 @@
 
 
 # ========================================================
+# 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_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)