From 5f18f6e4d684d57b8f2430e5199e60a31ef78db0 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Mon, 22 Oct 2012 18:30:51 +0000 Subject: [PATCH] driver/Darwin: Default to AAPCS for M-class CPUs. - This is an assumption that is currently hardwired into the backend, we need to do this in order for the frontend and backend to agree. llvm-svn: 166428 --- clang/lib/Driver/Tools.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index edaa1dbefeec..7848b488d37b 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -683,6 +683,7 @@ void Clang::AddARMTargetArgs(const ArgList &Args, // Get the effective triple, which takes into account the deployment target. std::string TripleStr = getToolChain().ComputeEffectiveClangTriple(Args); llvm::Triple Triple(TripleStr); + std::string CPUName = getARMTargetCPU(Args, Triple); // Select the ABI to use. // @@ -690,6 +691,14 @@ void Clang::AddARMTargetArgs(const ArgList &Args, const char *ABIName = 0; if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) { ABIName = A->getValue(Args); + } else if (Triple.isOSDarwin()) { + // The backend is hardwired to assume AAPCS for M-class processors, ensure + // the frontend matches that. + if (StringRef(CPUName).startswith("cortex-m")) { + ABIName = "aapcs"; + } else { + ABIName = "apcs-gnu"; + } } else { // Select the default based on the platform. switch(Triple.getEnvironment()) { @@ -710,7 +719,7 @@ void Clang::AddARMTargetArgs(const ArgList &Args, // Set the CPU based on -march= and -mcpu=. CmdArgs.push_back("-target-cpu"); - CmdArgs.push_back(Args.MakeArgString(getARMTargetCPU(Args, Triple))); + CmdArgs.push_back(Args.MakeArgString(CPUName)); // Determine floating point ABI from the options & target defaults. StringRef FloatABI = getARMFloatABI(D, Args, Triple);