aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Lozano <ivanlozano@google.com>2018-11-21 09:04:18 -0800
committerIvan Lozano <ivanlozano@google.com>2018-11-21 09:05:08 -0800
commitfda9a6f38ea9a33986129fa69703c0b43a702556 (patch)
treea5cc98adf23fcbf6655f9b3330ca56f0e9ee63a5
parent12fa690ff6d1e886f749344d48741c09bbc43668 (diff)
downloadbuild-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.mk24
-rw-r--r--core/clear_vars.mk1
-rw-r--r--core/product.mk1
-rw-r--r--core/product_config.mk4
-rw-r--r--core/soong_config.mk2
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)))