From 021b7651a5fcb806d1b8a767c7f4a0a81bc8e4ff Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Mon, 21 Sep 2015 16:36:41 -0700 Subject: [PATCH] Default to hiding libgcc symbols in each object. Bug: http://b/24166967 Change-Id: I3dba264ae70a2e13b3edee7575139e86ef49be71 --- core/binary.mk | 11 +++++++++++ core/clear_vars.mk | 1 + 2 files changed, 12 insertions(+) diff --git a/core/binary.mk b/core/binary.mk index 093cc38f2d..8bb5eff346 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -412,6 +412,17 @@ ifeq ($(my_allow_undefined_symbols),) endif endif +# Target modules shouldn't re-export libgcc.a because we don't want other +# binaries importing them when they should be getting their own copy of the +# builtins. +# +# Unfortunately --exclude-libs always overrides all other attempts to make a +# symbol visible, and libc needs to make sure some of these symbols are +# available for binary compatibility, so libc needs a way to disable this. +ifneq ($(strip $(LOCAL_NO_EXCLUDE_LIBS)),true) + my_ldflags += -Wl,--exclude-libs,libgcc.a +endif + ifeq (true,$(LOCAL_GROUP_STATIC_LIBRARIES)) $(LOCAL_BUILT_MODULE): PRIVATE_GROUP_STATIC_LIBRARIES := true else diff --git a/core/clear_vars.mk b/core/clear_vars.mk index d0d4ff9e33..649fbe576e 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -190,6 +190,7 @@ LOCAL_SANITIZE_RECOVER:= LOCAL_DBUS_PROXY_PREFIX:= LOCAL_INIT_RC:= LOCAL_MODULE_HOST_OS:= +LOCAL_NO_EXCLUDE_LIBS:= # arch specific variables LOCAL_SRC_FILES_$(TARGET_ARCH):=