diff options
author | Ivan Lozano <ivanlozano@google.com> | 2018-11-21 09:04:18 -0800 |
---|---|---|
committer | Ivan Lozano <ivanlozano@google.com> | 2018-11-21 09:05:08 -0800 |
commit | fda9a6f38ea9a33986129fa69703c0b43a702556 (patch) | |
tree | a5cc98adf23fcbf6655f9b3330ca56f0e9ee63a5 | |
parent | 12fa690ff6d1e886f749344d48741c09bbc43668 (diff) | |
download | build-fda9a6f38ea9a33986129fa69703c0b43a702556.tar.gz |
Add support for AArch64 XOM binaries.
Adds build system support for generating AArch64 binaries with
execute-only memory layouts via a new LOCAL_XOM property. Also adds
support for an ENABLE_XOM build flag for global builds.
Bug: 77958880
Test: make -j ENABLE_XOM=true
Change-Id: I6af9e3615d0a9fdff802eae50e6ad94311ec8046
-rw-r--r-- | core/binary.mk | 24 | ||||
-rw-r--r-- | core/clear_vars.mk | 1 | ||||
-rw-r--r-- | core/product.mk | 1 | ||||
-rw-r--r-- | core/product_config.mk | 4 | ||||
-rw-r--r-- | core/soong_config.mk | 2 |
5 files changed, 32 insertions, 0 deletions
diff --git a/core/binary.mk b/core/binary.mk index d7112b614d..23defdc5d1 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -73,6 +73,30 @@ else my_native_coverage := false endif +ifeq ($(strip $(ENABLE_XOM)),true) + ifndef LOCAL_IS_HOST_MODULE + my_xom := true + # Disable XOM in excluded paths. + combined_xom_exclude_paths := $(XOM_EXCLUDE_PATHS) \ + $(PRODUCT_XOM_EXCLUDE_PATHS) + ifneq ($(strip $(foreach dir,$(subst $(comma),$(space),$(combined_xom_exclude_paths)),\ + $(filter $(dir)%,$(LOCAL_PATH)))),) + my_xom := false + endif + + # Allow LOCAL_XOM to override the above + ifdef LOCAL_XOM + my_xom := $(LOCAL_XOM) + endif + + ifeq ($(strip $(my_xom)),true) + ifeq (arm64,$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) + my_ldflags += -Wl,-execute-only + endif + endif + endif +endif + my_allow_undefined_symbols := $(strip $(LOCAL_ALLOW_UNDEFINED_SYMBOLS)) ifdef SANITIZE_HOST ifdef LOCAL_IS_HOST_MODULE diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 64caa18ee8..0417e1389a 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -302,6 +302,7 @@ LOCAL_VTS_INCLUDES:= LOCAL_VTS_MODE:= LOCAL_WARNINGS_ENABLE:= LOCAL_WHOLE_STATIC_LIBRARIES:= +LOCAL_XOM:= LOCAL_YACCFLAGS:= # TODO: deprecate, it does nothing OVERRIDE_BUILT_MODULE_PATH:= diff --git a/core/product.mk b/core/product.mk index 7d5f9b3de8..fbdd23754a 100644 --- a/core/product.mk +++ b/core/product.mk @@ -212,6 +212,7 @@ _product_var_list := \ PRODUCT_USE_DYNAMIC_PARTITIONS \ PRODUCT_RETROFIT_DYNAMIC_PARTITIONS \ PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS \ + PRODUCT_XOM_EXCLUDE_PATHS \ define dump-product $(info ==== $(1) ====)\ diff --git a/core/product_config.mk b/core/product_config.mk index d4275d2e8e..ac7fe9108c 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -501,6 +501,10 @@ PRODUCT_CFI_EXCLUDE_PATHS := \ PRODUCT_CFI_INCLUDE_PATHS := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_CFI_INCLUDE_PATHS)) +# Whether any paths are excluded from being set XOM when ENABLE_XOM=true +PRODUCT_XOM_EXCLUDE_PATHS := \ + $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_XOM_EXCLUDE_PATHS)) + # which Soong namespaces to export to Make PRODUCT_SOONG_NAMESPACES := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SOONG_NAMESPACES)) diff --git a/core/soong_config.mk b/core/soong_config.mk index 43284535a8..48dd2287cf 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -82,6 +82,8 @@ $(call add_json_bool, Safestack, $(filter true,$(USE_SAF $(call add_json_bool, EnableCFI, $(call invert_bool,$(filter false,$(ENABLE_CFI)))) $(call add_json_list, CFIExcludePaths, $(CFI_EXCLUDE_PATHS) $(PRODUCT_CFI_EXCLUDE_PATHS)) $(call add_json_list, CFIIncludePaths, $(CFI_INCLUDE_PATHS) $(PRODUCT_CFI_INCLUDE_PATHS)) +$(call add_json_bool, EnableXOM, $(filter true,$(ENABLE_XOM))) +$(call add_json_list, XOMExcludePaths, $(XOM_EXCLUDE_PATHS) $(PRODUCT_XOM_EXCLUDE_PATHS)) $(call add_json_list, IntegerOverflowExcludePaths, $(INTEGER_OVERFLOW_EXCLUDE_PATHS) $(PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS)) $(call add_json_bool, ClangTidy, $(filter 1 true,$(WITH_TIDY))) |