diff options
author | ed <ed@FreeBSD.org> | 2009-06-03 21:11:25 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-06-03 21:11:25 +0000 |
commit | 9e262ca77e924f9d84a864b031a1b931d03c5e38 (patch) | |
tree | f0e24d4185187f7d15274dee4bc53908e30f5b76 /lib/Driver/HostInfo.cpp | |
parent | 48ecc7affef226b2bac1e08bdfdc059306a1734c (diff) | |
download | FreeBSD-src-9e262ca77e924f9d84a864b031a1b931d03c5e38.zip FreeBSD-src-9e262ca77e924f9d84a864b031a1b931d03c5e38.tar.gz |
Import Clang, at r72805.
Diffstat (limited to 'lib/Driver/HostInfo.cpp')
-rw-r--r-- | lib/Driver/HostInfo.cpp | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/lib/Driver/HostInfo.cpp b/lib/Driver/HostInfo.cpp index 603b3ab..2d577f8 100644 --- a/lib/Driver/HostInfo.cpp +++ b/lib/Driver/HostInfo.cpp @@ -194,11 +194,13 @@ ToolChain *UnknownHostInfo::getToolChain(const ArgList &Args, std::string Arch = getArchName(); ArchName = Arch.c_str(); if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { - if (getArchName() == "i386" || getArchName() == "x86_64") { - ArchName = + if (Triple.getArch() == llvm::Triple::x86 || + Triple.getArch() == llvm::Triple::x86_64) { + ArchName = (A->getOption().getId() == options::OPT_m32) ? "i386" : "x86_64"; - } else if (getArchName() == "powerpc" || getArchName() == "powerpc64") { - ArchName = + } else if (Triple.getArch() == llvm::Triple::ppc || + Triple.getArch() == llvm::Triple::ppc64) { + ArchName = (A->getOption().getId() == options::OPT_m32) ? "powerpc" : "powerpc64"; } } @@ -361,13 +363,26 @@ ToolChain *LinuxHostInfo::getToolChain(const ArgList &Args, assert(!ArchName && "Unexpected arch name on platform without driver driver support."); - ArchName = getArchName().c_str(); - + // Automatically handle some instances of -m32/-m64 we know about. + std::string Arch = getArchName(); + ArchName = Arch.c_str(); + if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) { + if (Triple.getArch() == llvm::Triple::x86 || + Triple.getArch() == llvm::Triple::x86_64) { + ArchName = + (A->getOption().getId() == options::OPT_m32) ? "i386" : "x86_64"; + } else if (Triple.getArch() == llvm::Triple::ppc || + Triple.getArch() == llvm::Triple::ppc64) { + ArchName = + (A->getOption().getId() == options::OPT_m32) ? "powerpc" : "powerpc64"; + } + } + ToolChain *&TC = ToolChains[ArchName]; if (!TC) { llvm::Triple TCTriple(getTriple()); - TCTriple.setArchName(getArchName()); + TCTriple.setArchName(ArchName); TC = new toolchains::Linux(*this, TCTriple); } |