Prevent clang from using the x18 register on arm64.
This is achieved via the compiler flag -ffixed-x18 for non-LTO builds
and the linker flag -plugin-opt -mattr=+reserve-x18 for LTO builds.
This change should be reverted once we upgrade past LLVM r340889
which does this by default on Android.
Bug: 112907825
Bug: 111759196
Change-Id: I05473ddbb98319d87d442425b4d715647eae3a38
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 330a5e3..527ae33 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -471,6 +471,13 @@
diagSanitizers = append(diagSanitizers, "cfi")
}
+ if ctx.Arch().ArchType == android.Arm64 {
+ // Prevent use of x18 register on arm64.
+ // TODO(pcc): Remove this flag once we upgrade past LLVM r340889
+ // which does this by default on Android.
+ flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-mattr=+reserve-x18")
+ }
+
if ctx.staticBinary() {
_, flags.CFlags = removeFromList("-fsanitize-cfi-cross-dso", flags.CFlags)
_, flags.LdFlags = removeFromList("-fsanitize-cfi-cross-dso", flags.LdFlags)