diff --git a/core/binary.mk b/core/binary.mk index 36d8a543d..e54edbec8 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1330,6 +1330,22 @@ $(call track-src-file-obj,$(asm_sources_asm),$(asm_objects_asm)) asm_objects += $(asm_objects_asm) endif +################################################################### +## When compiling a CFI enabled target, use the .cfi variant of any +## static dependencies (where they exist). +################################################################## +define use_soong_cfi_static_libraries + $(foreach l,$(1),$(if $(filter $(l),$(SOONG_CFI_STATIC_LIBRARIES)),\ + $(l).cfi,$(l))) +endef + +ifneq ($(filter cfi,$(my_sanitize)),) + my_whole_static_libraries := $(call use_soong_cfi_static_libraries,\ + $(my_whole_static_libraries)) + my_static_libraries := $(call use_soong_cfi_static_libraries,\ + $(my_static_libraries)) +endif + ########################################################### ## When compiling against the VNDK, use LL-NDK libraries ########################################################### diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index 8bd92486e..94151430f 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -132,6 +132,12 @@ ifneq ($(filter mips mips64,$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)),) my_sanitize_diag := $(filter-out cfi,$(my_sanitize_diag)) endif +# Disable CFI for host targets +ifdef LOCAL_IS_HOST_MODULE + my_sanitize := $(filter-out cfi,$(my_sanitize)) + my_sanitize_diag := $(filter-out cfi,$(my_sanitize_diag)) +endif + # Support for local sanitize blacklist paths. ifneq ($(my_sanitize)$(my_global_sanitize),) ifneq ($(LOCAL_SANITIZE_BLACKLIST),)