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
This commit is contained in:
@@ -25,6 +25,11 @@ var (
|
|||||||
arm64Cflags = []string{
|
arm64Cflags = []string{
|
||||||
// Help catch common 32/64-bit errors.
|
// Help catch common 32/64-bit errors.
|
||||||
"-Werror=implicit-function-declaration",
|
"-Werror=implicit-function-declaration",
|
||||||
|
|
||||||
|
// Prevent use of x18 register.
|
||||||
|
// TODO(pcc): Remove this flag once we upgrade past LLVM r340889
|
||||||
|
// which does this by default on Android.
|
||||||
|
"-ffixed-x18",
|
||||||
}
|
}
|
||||||
|
|
||||||
arm64ArchVariantCflags = map[string][]string{
|
arm64ArchVariantCflags = map[string][]string{
|
||||||
|
@@ -113,6 +113,13 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags {
|
|||||||
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-inline-threshold=0")
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-inline-threshold=0")
|
||||||
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-unroll-threshold=0")
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-unroll-threshold=0")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
@@ -471,6 +471,13 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
|
|||||||
diagSanitizers = append(diagSanitizers, "cfi")
|
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() {
|
if ctx.staticBinary() {
|
||||||
_, flags.CFlags = removeFromList("-fsanitize-cfi-cross-dso", flags.CFlags)
|
_, flags.CFlags = removeFromList("-fsanitize-cfi-cross-dso", flags.CFlags)
|
||||||
_, flags.LdFlags = removeFromList("-fsanitize-cfi-cross-dso", flags.LdFlags)
|
_, flags.LdFlags = removeFromList("-fsanitize-cfi-cross-dso", flags.LdFlags)
|
||||||
|
Reference in New Issue
Block a user