summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChain.cpp
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2011-09-20 20:44:06 +0000
committerChad Rosier <mcrosier@apple.com>2011-09-20 20:44:06 +0000
commitd3a0f954a389c0df3643085fcc63a282f1fc2ea7 (patch)
treed10388e71f15781405a979612445b0043d01ec2e /clang/lib/Driver/ToolChain.cpp
parent2b37261fd61466dcf3c2a5adc51ad8e8d693a1ad (diff)
downloadbcm5719-llvm-d3a0f954a389c0df3643085fcc63a282f1fc2ea7.tar.gz
bcm5719-llvm-d3a0f954a389c0df3643085fcc63a282f1fc2ea7.zip
[driver] Default to arm mode when using the integrated assembler.
rdar://10125227 llvm-svn: 140179
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r--clang/lib/Driver/ToolChain.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index d83fd9af258..074f1a34813 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -169,7 +169,8 @@ static const char *getLLVMArchSuffixForARM(StringRef CPU) {
return "";
}
-std::string ToolChain::ComputeLLVMTriple(const ArgList &Args) const {
+std::string ToolChain::ComputeLLVMTriple(const ArgList &Args,
+ types::ID InputType) const {
switch (getTriple().getArch()) {
default:
return getTripleString();
@@ -187,7 +188,10 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args) const {
bool ThumbDefault =
(Suffix == "v7" && getTriple().getOS() == llvm::Triple::Darwin);
std::string ArchName = "arm";
- if (Args.hasFlag(options::OPT_mthumb, options::OPT_mno_thumb, ThumbDefault))
+
+ // Assembly files should start in ARM mode.
+ if (InputType != types::TY_PP_Asm &&
+ Args.hasFlag(options::OPT_mthumb, options::OPT_mno_thumb, ThumbDefault))
ArchName = "thumb";
Triple.setArchName(ArchName + Suffix.str());
@@ -196,7 +200,8 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args) const {
}
}
-std::string ToolChain::ComputeEffectiveClangTriple(const ArgList &Args) const {
+std::string ToolChain::ComputeEffectiveClangTriple(const ArgList &Args,
+ types::ID InputType) const {
// Diagnose use of Darwin OS deployment target arguments on non-Darwin.
if (Arg *A = Args.getLastArg(options::OPT_mmacosx_version_min_EQ,
options::OPT_miphoneos_version_min_EQ,
@@ -204,7 +209,7 @@ std::string ToolChain::ComputeEffectiveClangTriple(const ArgList &Args) const {
getDriver().Diag(diag::err_drv_clang_unsupported)
<< A->getAsString(Args);
- return ComputeLLVMTriple(Args);
+ return ComputeLLVMTriple(Args, InputType);
}
ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{
OpenPOWER on IntegriCloud