diff --git a/cc/cc.go b/cc/cc.go index 53ec89939..1100bac6e 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -65,7 +65,7 @@ func init() { ctx.TopDown("tsan_deps", sanitizerDepsMutator(tsan)) ctx.BottomUp("tsan", sanitizerMutator(tsan)).Parallel() - ctx.TopDown("sanitize_runtime_deps", sanitizerRuntimeDepsMutator) + ctx.TopDown("sanitize_runtime_deps", sanitizerRuntimeDepsMutator).Parallel() ctx.BottomUp("sanitize_runtime", sanitizerRuntimeMutator).Parallel() ctx.BottomUp("coverage", coverageMutator).Parallel() diff --git a/cc/sanitize.go b/cc/sanitize.go index 0af06592f..3756512b4 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -701,8 +701,8 @@ func sanitizerRuntimeDepsMutator(mctx android.TopDownMutatorContext) { if !isSanitizableDependencyTag(mctx.OtherModuleDependencyTag(child)) { return false } - if d, ok := child.(*Module); ok && d.static() && d.sanitize != nil { + if d, ok := child.(*Module); ok && d.static() && d.sanitize != nil { if enableMinimalRuntime(d.sanitize) { // If a static dependency is built with the minimal runtime, // make sure we include the ubsan minimal runtime. @@ -713,8 +713,17 @@ func sanitizerRuntimeDepsMutator(mctx android.TopDownMutatorContext) { // make sure we include the ubsan runtime. c.sanitize.Properties.UbsanRuntimeDep = true } + + if c.sanitize.Properties.MinimalRuntimeDep && + c.sanitize.Properties.UbsanRuntimeDep { + // both flags that this mutator might set are true, so don't bother recursing + return false + } + + return true + } else { + return false } - return true }) } }