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")
 }