aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHang Lu <quic_hangl@quicinc.com>2023-03-17 13:17:22 +0800
committerEvgenii Stepanov <eugenis@google.com>2023-05-02 22:44:03 +0000
commit88086621d16359e1f1925f417dc66e6daca39dac (patch)
treeae71baa6e3d589c87214394a9140704207660a38
parente03c3bb67c9e6556bf87203475e41d5c965c3697 (diff)
downloadsoong-88086621d16359e1f1925f417dc66e6daca39dac.tar.gz
Enable HWASan for multiple modules in one place(Soong)
Environment variables HWASAN_INCLUDE_PATHS and PRODUCT_HWASAN_INCLUDE_PATHS can be used to enable HWASan for multiple modules, by just adding the module directory to the env variable. Bug: b/271948407 Test: Set specific module directory to above env variable and check the assembly codes of output elf files after building, finding hwasan related symbols inside. Merged-In: Ic49b515830c4469ca5fa94f547b26c0fb602fc54 Change-Id: Ic49b515830c4469ca5fa94f547b26c0fb602fc54 (cherry picked from commit a98aab98c45aa7245cd235b8822de35aa6eb4fd6)
-rw-r--r--android/config.go7
-rw-r--r--android/variable.go2
-rw-r--r--cc/sanitize.go6
3 files changed, 15 insertions, 0 deletions
diff --git a/android/config.go b/android/config.go
index 9920fe41b..980460a7b 100644
--- a/android/config.go
+++ b/android/config.go
@@ -1564,6 +1564,13 @@ func (c *config) MemtagHeapSyncEnabledForPath(path string) bool {
return HasAnyPrefix(path, c.productVariables.MemtagHeapSyncIncludePaths) && !c.MemtagHeapDisabledForPath(path)
}
+func (c *config) HWASanEnabledForPath(path string) bool {
+ if len(c.productVariables.HWASanIncludePaths) == 0 {
+ return false
+ }
+ return HasAnyPrefix(path, c.productVariables.HWASanIncludePaths)
+}
+
func (c *config) VendorConfig(name string) VendorConfig {
return soongconfig.Config(c.productVariables.VendorVars[name])
}
diff --git a/android/variable.go b/android/variable.go
index d7152b367..496f523b2 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -307,6 +307,8 @@ type productVariables struct {
MemtagHeapAsyncIncludePaths []string `json:",omitempty"`
MemtagHeapSyncIncludePaths []string `json:",omitempty"`
+ HWASanIncludePaths []string `json:",omitempty"`
+
VendorPath *string `json:",omitempty"`
OdmPath *string `json:",omitempty"`
ProductPath *string `json:",omitempty"`
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 45d7fab4f..7fddc1b83 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -593,6 +593,12 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
}
}
+ // Enable HWASan for all components in the include paths (for Aarch64 only)
+ if s.Hwaddress == nil && ctx.Config().HWASanEnabledForPath(ctx.ModuleDir()) &&
+ ctx.Arch().ArchType == android.Arm64 && ctx.toolchain().Bionic() {
+ s.Hwaddress = proptools.BoolPtr(true)
+ }
+
// Enable CFI for non-host components in the include paths
if s.Cfi == nil && ctx.Config().CFIEnabledForPath(ctx.ModuleDir()) && !ctx.Host() {
s.Cfi = proptools.BoolPtr(true)