Fix: runtime apex is not instrumented with sanitizer
Fixing the problem that IsSanitizerEnabled always returns false due to the different sanitizer names from config.SanitizerDevice() and sanitizerType.String(). Bug: 123708856 Test: SANITIZE_TARGET=hwaddress m com.android.runtime.release $ ls -al out/soong/.intermediates/art/build/apex/com.android.runtime.release/android_common_hwasan_com.android.runtime.release/image.apex/lib | wc -l 34 $ ls -al out/soong/.intermediates/art/build/apex/com.android.runtime.release/android_common_hwasan_com.android.runtime.release/image.apex/lib64 | wc -l 35 $ ls -al out/target/product/blueline/apex/com.android.runtime.release/lib | wc -l 34 $ ls -al out/target/product/blueline/apex/com.android.runtime.release/lib64 | wc -l 35 Test: inspect out/soong/build.ninja - Variant of com.android.runtime.release is "android_common_hwasan_com.android.runtime.release" - Dependencies of com.android.runtime.release are hwasan variants: e.g., out/soong/.intermediates/bionic/libc/libc/android_arm64_armv8-2a_kryo385_core_shared_hwasan_com.android.runtime.release/libc.so Test: ls out/soong/.intermediates/art/build/apex/com.android.runtime.release/android_common_hwasan_com.android.runtime.release/image.apex/lib64/*.so | xargs readelf -d | grep libclang_rt.hwasan | wc -l 29 Change-Id: Idbb1f68a3ea6bdd02351d6f6048c3eedb9cf32d2
This commit is contained in:
parent
df819e6b0c
commit
8222663f1b
1 changed files with 26 additions and 5 deletions
|
@ -79,7 +79,8 @@ const (
|
|||
scs
|
||||
)
|
||||
|
||||
func (t sanitizerType) String() string {
|
||||
// Name of the sanitizer variation for this sanitizer type
|
||||
func (t sanitizerType) variationName() string {
|
||||
switch t {
|
||||
case asan:
|
||||
return "asan"
|
||||
|
@ -98,6 +99,26 @@ func (t sanitizerType) String() string {
|
|||
}
|
||||
}
|
||||
|
||||
// This is the sanitizer names in SANITIZE_[TARGET|HOST]
|
||||
func (t sanitizerType) name() string {
|
||||
switch t {
|
||||
case asan:
|
||||
return "address"
|
||||
case hwasan:
|
||||
return "hwaddress"
|
||||
case tsan:
|
||||
return "thread"
|
||||
case intOverflow:
|
||||
return "integer_overflow"
|
||||
case cfi:
|
||||
return "cfi"
|
||||
case scs:
|
||||
return "shadow-call-stack"
|
||||
default:
|
||||
panic(fmt.Errorf("unknown sanitizerType %d", t))
|
||||
}
|
||||
}
|
||||
|
||||
type SanitizeProperties struct {
|
||||
// enable AddressSanitizer, ThreadSanitizer, or UndefinedBehaviorSanitizer
|
||||
Sanitize struct {
|
||||
|
@ -830,14 +851,14 @@ func sanitizerMutator(t sanitizerType) func(android.BottomUpMutatorContext) {
|
|||
return func(mctx android.BottomUpMutatorContext) {
|
||||
if c, ok := mctx.Module().(*Module); ok && c.sanitize != nil {
|
||||
if c.isDependencyRoot() && c.sanitize.isSanitizerEnabled(t) {
|
||||
modules := mctx.CreateVariations(t.String())
|
||||
modules := mctx.CreateVariations(t.variationName())
|
||||
modules[0].(*Module).sanitize.SetSanitizer(t, true)
|
||||
} else if c.sanitize.isSanitizerEnabled(t) || c.sanitize.Properties.SanitizeDep {
|
||||
// Save original sanitizer status before we assign values to variant
|
||||
// 0 as that overwrites the original.
|
||||
isSanitizerEnabled := c.sanitize.isSanitizerEnabled(t)
|
||||
|
||||
modules := mctx.CreateVariations("", t.String())
|
||||
modules := mctx.CreateVariations("", t.variationName())
|
||||
modules[0].(*Module).sanitize.SetSanitizer(t, false)
|
||||
modules[1].(*Module).sanitize.SetSanitizer(t, true)
|
||||
|
||||
|
@ -926,9 +947,9 @@ func sanitizerMutator(t sanitizerType) func(android.BottomUpMutatorContext) {
|
|||
}
|
||||
}
|
||||
c.sanitize.Properties.SanitizeDep = false
|
||||
} else if sanitizeable, ok := mctx.Module().(Sanitizeable); ok && sanitizeable.IsSanitizerEnabled(mctx, t.String()) {
|
||||
} else if sanitizeable, ok := mctx.Module().(Sanitizeable); ok && sanitizeable.IsSanitizerEnabled(mctx, t.name()) {
|
||||
// APEX modules fall here
|
||||
mctx.CreateVariations(t.String())
|
||||
mctx.CreateVariations(t.variationName())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue