summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2016-10-25 21:44:35 +0000
committerStephen Hines <srhines@google.com>2016-10-25 21:44:35 +0000
commitfa2412b2e706d18c1afb7f70f34353baebb9c0ba (patch)
treea3b24396030811201b0bae914c74684234f310fa /clang/lib/Driver/Tools.cpp
parent3c628af11789bdde668d1689724a42407c9cb517 (diff)
downloadbcm5719-llvm-fa2412b2e706d18c1afb7f70f34353baebb9c0ba.tar.gz
bcm5719-llvm-fa2412b2e706d18c1afb7f70f34353baebb9c0ba.zip
Use linker flag --fix-cortex-a53-843419 on Android ARM64 compilation.
Summary: This is only forced on if there is no non-Cortex-A53 CPU specified as well. Android's platform and NDK builds need to assume that the code can be run on Cortex-A53 devices, so we always enable the fix unless we know specifically that the code is only running on a different kind of CPU. Reviewers: cfe-commits Subscribers: aemerson, rengolin, tberghammer, pirama, danalbert Differential Revision: https://reviews.llvm.org/D25761 llvm-svn: 285127
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 7d77cd1bb91..691bb85a07d 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -9712,6 +9712,14 @@ void gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
if (Arch == llvm::Triple::armeb || Arch == llvm::Triple::thumbeb)
arm::appendEBLinkFlags(Args, CmdArgs, Triple);
+ // Most Android ARM64 targets should enable the linker fix for erratum
+ // 843419. Only non-Cortex-A53 devices are allowed to skip this flag.
+ if (Arch == llvm::Triple::aarch64 && isAndroid) {
+ std::string CPU = getCPUName(Args, Triple);
+ if (CPU.empty() || CPU == "generic" || CPU == "cortex-a53")
+ CmdArgs.push_back("--fix-cortex-a53-843419");
+ }
+
for (const auto &Opt : ToolChain.ExtraOpts)
CmdArgs.push_back(Opt.c_str());
OpenPOWER on IntegriCloud