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
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user