summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Pirama Arumuga Nainar <pirama@google.com> 2022-01-10 22:54:34 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-01-10 22:54:34 +0000
commit74eb07ae426d908bae10f5c1c64a238c283ffbc0 (patch)
treeacff29c9fcf4458264ef2229c2386c873ab5fff9
parenta3b597cacb3a4d4f17ea94590fe36a3af4f23d71 (diff)
parent6609484961f68da24684fd3430ea54f74112e209 (diff)
Merge "Enable memory-mapped coverage instrumentation" am: 6609484961
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1729633 Change-Id: I26d495298c4273e8000e17f70ad6d3537a680b48
-rw-r--r--cc/coverage.go12
-rw-r--r--rust/coverage.go5
2 files changed, 17 insertions, 0 deletions
diff --git a/cc/coverage.go b/cc/coverage.go
index 8dd2db19d..59c886439 100644
--- a/cc/coverage.go
+++ b/cc/coverage.go
@@ -22,6 +22,7 @@ import (
"android/soong/android"
)
+// Add '%c' to default specifier after we resolve http://b/210012154
const profileInstrFlag = "-fprofile-instr-generate=/data/misc/trace/clang-%p-%m.profraw"
type CoverageProperties struct {
@@ -77,6 +78,11 @@ func (cov *coverage) deps(ctx DepsContext, deps Deps) Deps {
return deps
}
+func EnableContinuousCoverage(ctx android.BaseModuleContext) bool {
+ // http://b/210012154 Disable continuous coverage if we're instrumenting bionic/libc.
+ return !ctx.DeviceConfig().NativeCoverageEnabledForPath("bionic/libc")
+}
+
func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags, PathDeps) {
clangCoverage := ctx.DeviceConfig().ClangCoverageEnabled()
gcovCoverage := ctx.DeviceConfig().GcovCoverageEnabled()
@@ -98,6 +104,9 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags
} else if clangCoverage {
flags.Local.CommonFlags = append(flags.Local.CommonFlags, profileInstrFlag,
"-fcoverage-mapping", "-Wno-pass-failed", "-D__ANDROID_CLANG_COVERAGE__")
+ if EnableContinuousCoverage(ctx) {
+ flags.Local.CommonFlags = append(flags.Local.CommonFlags, "-mllvm", "-runtime-counter-relocation")
+ }
}
}
@@ -149,6 +158,9 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags
flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,--wrap,getenv")
} else if clangCoverage {
flags.Local.LdFlags = append(flags.Local.LdFlags, profileInstrFlag)
+ if EnableContinuousCoverage(ctx) {
+ flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,-mllvm=-runtime-counter-relocation")
+ }
coverage := ctx.GetDirectDepWithTag(getClangProfileLibraryName(ctx), CoverageDepTag).(*Module)
deps.WholeStaticLibs = append(deps.WholeStaticLibs, coverage.OutputFile().Path())
diff --git a/rust/coverage.go b/rust/coverage.go
index 8fdfa2342..91d34acce 100644
--- a/rust/coverage.go
+++ b/rust/coverage.go
@@ -22,6 +22,7 @@ import (
var CovLibraryName = "libprofile-clang-extras"
+// Add '%c' to default specifier after we resolve http://b/210012154
const profileInstrFlag = "-fprofile-instr-generate=/data/misc/trace/clang-%p-%m.profraw"
type coverage struct {
@@ -70,6 +71,10 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags
"-Wl,-z,nostart-stop-gc",
)
deps.StaticLibs = append(deps.StaticLibs, coverage.OutputFile().Path())
+ if cc.EnableContinuousCoverage(ctx) {
+ flags.RustFlags = append(flags.RustFlags, "-C llvm-args=--runtime-counter-relocation")
+ flags.LinkFlags = append(flags.LinkFlags, "-Wl,-mllvm,-runtime-counter-relocation")
+ }
}
return flags, deps