Merge "Add header-abi-linker dependency on so file."
diff --git a/cc/config/mips64_device.go b/cc/config/mips64_device.go
index 23d5560..3a49e7b 100644
--- a/cc/config/mips64_device.go
+++ b/cc/config/mips64_device.go
@@ -82,9 +82,6 @@
 		"mips64r6": []string{
 			"-mips64r6",
 			"-msynci",
-
-			// revert once clang picks up r278824
-			"-mcompact-branches=never",
 		},
 	}
 )
diff --git a/cc/config/mips_device.go b/cc/config/mips_device.go
index ec8f133..c135029 100644
--- a/cc/config/mips_device.go
+++ b/cc/config/mips_device.go
@@ -113,9 +113,6 @@
 			"-mfp64",
 			"-mno-odd-spreg",
 			"-msynci",
-
-			// revert once clang picks up r278824
-			"-mcompact-branches=never",
 		},
 	}
 )
diff --git a/cc/linker.go b/cc/linker.go
index 2c39132..1a842ae 100644
--- a/cc/linker.go
+++ b/cc/linker.go
@@ -152,11 +152,23 @@
 		}
 
 		if !ctx.static() {
+			// libdl should always appear after libc in dt_needed list - see below
+			// the only exception is when libc is not in linker.Properties.System_shared_libs
+			// such as for libc module itself
+			if inList("libc", linker.Properties.System_shared_libs) {
+				_, deps.SharedLibs = removeFromList("libdl", deps.SharedLibs)
+			}
+
 			if linker.Properties.System_shared_libs != nil {
+				if !inList("libdl", linker.Properties.System_shared_libs) &&
+					inList("libc", linker.Properties.System_shared_libs) {
+					linker.Properties.System_shared_libs = append(linker.Properties.System_shared_libs,
+						"libdl")
+				}
 				deps.LateSharedLibs = append(deps.LateSharedLibs,
 					linker.Properties.System_shared_libs...)
 			} else if !ctx.sdk() && !ctx.vndk() {
-				deps.LateSharedLibs = append(deps.LateSharedLibs, "libc", "libm")
+				deps.LateSharedLibs = append(deps.LateSharedLibs, "libc", "libm", "libdl")
 			}
 		}
 
@@ -164,10 +176,11 @@
 			deps.SharedLibs = append(deps.SharedLibs,
 				"libc",
 				"libm",
+				"libdl",
 			)
 		}
 		if ctx.vndk() {
-			deps.LateSharedLibs = append(deps.LateSharedLibs, "libc", "libm")
+			deps.LateSharedLibs = append(deps.LateSharedLibs, "libc", "libm", "libdl")
 		}
 	}
 
diff --git a/cc/sanitize.go b/cc/sanitize.go
index b847c6f..e54ece6 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -324,7 +324,7 @@
 	}
 
 	if Bool(sanitize.Properties.Sanitize.Coverage) {
-		flags.CFlags = append(flags.CFlags, "-fsanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp")
+		flags.CFlags = append(flags.CFlags, "-fsanitize-coverage=trace-pc-guard")
 	}
 
 	if Bool(sanitize.Properties.Sanitize.Safestack) {