aboutsummaryrefslogtreecommitdiffstats
path: root/apex
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2019-01-28 19:47:32 +0900
committerJiyong Park <jiyong@google.com>2019-01-29 07:10:31 +0900
commit388ef3f5aacd8023102a076e81be14bc1a62a294 (patch)
tree54abefda09f30d61a951de2ac75cd526ac6aeb71 /apex
parentee0413915438f2cfe1b84ae4be64d3974e80be85 (diff)
downloadbuild_soong-388ef3f5aacd8023102a076e81be14bc1a62a294.tar.gz
build_soong-388ef3f5aacd8023102a076e81be14bc1a62a294.tar.bz2
build_soong-388ef3f5aacd8023102a076e81be14bc1a62a294.zip
Create sanitizer variants of APEX only when SANITIZE_TARGET is set
This fixes a problem that APEX is unconditionally mutated for all sanitizer types. This can make an APEX to include sanitized version of a lib even when SANITIZE_TARGET is not set. It can happen when lib X is directly depended on by an APEX (e.g. via native_shared_libs) and X has a sanitized variant due to the dependency from another library Y which is force sanitized (via 'sanitize' property). In that case, regardless of lib Y is in the APEX or not, the APEX chooses the sanitized variant of lib X since the dependency from APEX to the lib is created with AddFarVariationDependency. Fixing this problem by mutating the APEX for a sanitizer type only when the device is requested to be sanitized. Bug: 122717287 Test: add libnetd_client to com.android.runtime APEX. Inspect build.ninja to verify that libnetd_client.so in the runtime APEX is not a sanitized one. Change-Id: I918bc8407137d74c5456142b3a29de13df68c0b3
Diffstat (limited to 'apex')
-rw-r--r--apex/apex.go14
1 files changed, 11 insertions, 3 deletions
diff --git a/apex/apex.go b/apex/apex.go
index 46c9dcf0..321e2e89 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -483,9 +483,17 @@ func (a *apexBundle) getImageVariation(config android.DeviceConfig) string {
}
}
-func (a *apexBundle) IsSanitizerEnabled() bool {
- // APEX can be mutated for sanitizers
- return true
+func (a *apexBundle) IsSanitizerEnabled(ctx android.BaseModuleContext, sanitizerName string) bool {
+ globalSanitizerNames := []string{}
+ if a.Host() {
+ globalSanitizerNames = ctx.Config().SanitizeHost()
+ } else {
+ arches := ctx.Config().SanitizeDeviceArch()
+ if len(arches) == 0 || android.InList(a.Arch().ArchType.Name, arches) {
+ globalSanitizerNames = ctx.Config().SanitizeDevice()
+ }
+ }
+ return android.InList(sanitizerName, globalSanitizerNames)
}
func getCopyManifestForNativeLibrary(cc *cc.Module) (fileToCopy android.Path, dirInApex string) {