From 741b36e922a09c47507b61cbfc9cd8bba029f476 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 13 Nov 2014 21:24:04 -0800 Subject: [PATCH] Fix the libgcc/libatomic link order. The previous position of libgcc.a/libatomic.a on the link line causes the linker to prefer satisfying dependencies from these libraries from other libraries that might include them, rather than from libgcc.a (or libatomic.a) itself. This imposes an ABI requirement that those intermediate shared libraries _always_ export those symbols, which is undesirable. Change-Id: Ib593236b475d3e98356b2b1be6f96cee2b67378f --- core/binary.mk | 1 - core/definitions.mk | 25 +++++++------------------ 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/core/binary.mk b/core/binary.mk index 9f17fd515..15999972c 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1003,7 +1003,6 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_IMPORT_INCLUDES := $(import_includes) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LDFLAGS := $(my_ldflags) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LDLIBS := $(my_ldlibs) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_NO_CRT := $(strip $(LOCAL_NO_CRT) $(LOCAL_NO_CRT_$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH))) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LIBCXX := $(my_libcxx) # this is really the way to get the files onto the command line instead # of using $^, because then LOCAL_ADDITIONAL_DEPENDENCIES doesn't work diff --git a/core/definitions.mk b/core/definitions.mk index a8ae51abc..79cb1f871 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1301,15 +1301,6 @@ endef ## Commands for running gcc to link a shared library or package ########################################################### -#echo >$@.vers "{"; \ -#echo >>$@.vers " global:"; \ -#$(BUILD_SYSTEM)/filter_symbols.sh $(TARGET_NM) " " ";" $(filter %.o,$^) | sort -u >>$@.vers; \ -#echo >>$@.vers " local:"; \ -#echo >>$@.vers " *;"; \ -#echo >>$@.vers "};"; \ - -# -Wl,--version-script=$@.vers \ - define transform-o-to-shared-lib-inner $(hide) $(PRIVATE_CXX) \ -nostdlib -Wl,-soname,$(notdir $@) \ @@ -1324,14 +1315,13 @@ $(hide) $(PRIVATE_CXX) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ - $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ + $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ + $(PRIVATE_TARGET_LIBATOMIC) \ + $(PRIVATE_TARGET_LIBGCC) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ $(PRIVATE_LDFLAGS) \ - $(PRIVATE_TARGET_LIBATOMIC) \ - $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ - $(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O)) \ $(PRIVATE_LDLIBS) endef @@ -1387,14 +1377,13 @@ $(hide) $(PRIVATE_CXX) -pie \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ - $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ + $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ + $(PRIVATE_TARGET_LIBATOMIC) \ + $(PRIVATE_TARGET_LIBGCC) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ $(PRIVATE_LDFLAGS) \ - $(PRIVATE_TARGET_LIBATOMIC) \ - $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ - $(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) \ $(PRIVATE_LDLIBS) endef @@ -1432,7 +1421,7 @@ $(hide) $(PRIVATE_CXX) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ - $(if $(PRIVATE_LIBCXX),,$(PRIVATE_TARGET_LIBGCC)) \ + $(PRIVATE_TARGET_LIBGCC) \ -Wl,--end-group \ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) endef -- 2.11.0