Support coverage instrumentation for Linux host
Bug: http://b/77792074
- Add the libclang_rt.profile runtime libraries directly to the compile
command (for both host and target) instead of relying on the Clang
driver.
- Move the coverage mutator to PreDepsMutators so the mutation has
already happened when runtime libraries are added during dependence
computation.
- Factor out cc/config/toolchain to identify libclang_rt.profile modules
for the x86 and x86_64 host.
Test: make NATIVE_COVERAGE=true produces coverage-enabled host binaries.
Change-Id: I1ebc8cffdf11622bfc18199a57674672888b3a5f
diff --git a/cc/config/toolchain.go b/cc/config/toolchain.go
index ca863a7..19d2828 100644
--- a/cc/config/toolchain.go
+++ b/cc/config/toolchain.go
@@ -85,6 +85,8 @@
AvailableLibraries() []string
Bionic() bool
+
+ profileRuntimeLibrary() string
}
type toolchainBase struct {
@@ -169,6 +171,10 @@
return true
}
+func (t toolchainBase) profileRuntimeLibrary() string {
+ return ""
+}
+
func (t toolchainBase) ToolPath() string {
return ""
}
@@ -240,6 +246,12 @@
}
func ProfileRuntimeLibrary(t Toolchain) string {
+ lib := t.profileRuntimeLibrary()
+ if lib != "" {
+ // Return the directly exported profile library
+ return lib
+ }
+ // Return the Android-specific library
return SanitizerRuntimeLibrary(t, "profile")
}