diff --git a/cc/cc.go b/cc/cc.go
index 1e313c0..9722cf0 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -40,7 +40,6 @@
 		ctx.BottomUp("ndk_api", ndkApiMutator).Parallel()
 		ctx.BottomUp("test_per_src", testPerSrcMutator).Parallel()
 		ctx.BottomUp("begin", beginMutator).Parallel()
-		ctx.BottomUp("coverage", coverageLinkingMutator).Parallel()
 	})
 
 	android.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
@@ -55,6 +54,7 @@
 
 		ctx.TopDown("sanitize_runtime_deps", sanitizerRuntimeDepsMutator())
 
+		ctx.BottomUp("coverage", coverageLinkingMutator).Parallel()
 		ctx.TopDown("vndk_deps", sabiDepsMutator)
 
 		ctx.TopDown("lto_deps", ltoDepsMutator)
@@ -809,15 +809,12 @@
 	if c.compiler != nil {
 		deps = c.compiler.compilerDeps(ctx, deps)
 	}
-	// clang_rt.profile runtime libraries necessary for PGO and coverage
-	// depend on symbols from libgcc.  Add the runtime library dependency
-	// before libgcc gets added in linkerDeps().
+	// Add the PGO dependency (the clang_rt.profile runtime library), which
+	// sometimes depends on symbols from libgcc, before libgcc gets added
+	// in linkerDeps().
 	if c.pgo != nil {
 		deps = c.pgo.deps(ctx, deps)
 	}
-	if c.coverage != nil {
-		deps = c.coverage.deps(ctx, deps)
-	}
 	if c.linker != nil {
 		deps = c.linker.linkerDeps(ctx, deps)
 	}
@@ -827,6 +824,9 @@
 	if c.sanitize != nil {
 		deps = c.sanitize.deps(ctx, deps)
 	}
+	if c.coverage != nil {
+		deps = c.coverage.deps(ctx, deps)
+	}
 	if c.sabi != nil {
 		deps = c.sabi.deps(ctx, deps)
 	}
diff --git a/cc/config/toolchain.go b/cc/config/toolchain.go
index 19d2828..ca863a7 100644
--- a/cc/config/toolchain.go
+++ b/cc/config/toolchain.go
@@ -85,8 +85,6 @@
 	AvailableLibraries() []string
 
 	Bionic() bool
-
-	profileRuntimeLibrary() string
 }
 
 type toolchainBase struct {
@@ -171,10 +169,6 @@
 	return true
 }
 
-func (t toolchainBase) profileRuntimeLibrary() string {
-	return ""
-}
-
 func (t toolchainBase) ToolPath() string {
 	return ""
 }
@@ -246,12 +240,6 @@
 }
 
 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")
 }
 
diff --git a/cc/config/x86_linux_bionic_host.go b/cc/config/x86_linux_bionic_host.go
index 290793e..a9fb1f6 100644
--- a/cc/config/x86_linux_bionic_host.go
+++ b/cc/config/x86_linux_bionic_host.go
@@ -151,10 +151,6 @@
 	return true
 }
 
-func (t *toolchainLinuxBionic) profileRuntimeLibrary() string {
-	return "libclang_rt.profile-x86_64"
-}
-
 var toolchainLinuxBionicSingleton Toolchain = &toolchainLinuxBionic{}
 
 func linuxBionicToolchainFactory(arch android.Arch) Toolchain {
diff --git a/cc/config/x86_linux_host.go b/cc/config/x86_linux_host.go
index 653f819..354500e 100644
--- a/cc/config/x86_linux_host.go
+++ b/cc/config/x86_linux_host.go
@@ -270,14 +270,6 @@
 	return "${config.LinuxX8664YasmFlags}"
 }
 
-func (t *toolchainLinuxX86) profileRuntimeLibrary() string {
-	return "libclang_rt.profile-i386"
-}
-
-func (t *toolchainLinuxX8664) profileRuntimeLibrary() string {
-	return "libclang_rt.profile-x86_64"
-}
-
 func (t *toolchainLinux) AvailableLibraries() []string {
 	return linuxAvailableLibraries
 }
diff --git a/cc/coverage.go b/cc/coverage.go
index 671353c..391b118 100644
--- a/cc/coverage.go
+++ b/cc/coverage.go
@@ -16,7 +16,6 @@
 
 import (
 	"android/soong/android"
-	"android/soong/cc/config"
 )
 
 type CoverageProperties struct {
@@ -39,10 +38,6 @@
 func (cov *coverage) begin(ctx BaseModuleContext) {}
 
 func (cov *coverage) deps(ctx BaseModuleContext, deps Deps) Deps {
-	if cov.Properties.CoverageEnabled {
-		runtimeLibrary := config.ProfileRuntimeLibrary(ctx.toolchain())
-		deps.LateStaticLibs = append(deps.LateStaticLibs, runtimeLibrary)
-	}
 	return deps
 }
 
@@ -104,8 +99,9 @@
 
 		if !mctx.DeviceConfig().NativeCoverageEnabled() {
 			// Coverage is disabled globally
-		} else if mctx.Darwin() || mctx.Windows() {
-			// Coverage not supported for Darwin and Windows
+		} else if mctx.Host() {
+			// TODO(dwillemsen): because of -nodefaultlibs, we must depend on libclang_rt.profile-*.a
+			// Just turn off for now.
 		} else if c.coverage.Properties.Native_coverage != nil {
 			enabled = *c.coverage.Properties.Native_coverage
 		} else {
