diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2009-06-03 18:59:56 +0000 | 
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2009-06-03 18:59:56 +0000 | 
| commit | 7c54f66058735d4078219a0dd60b79bc83d88db4 (patch) | |
| tree | 18c6216fa74d0cc640e0e1965908351a213e75e5 /clang/lib | |
| parent | 6d36343ed8ab32ffdb536b37f38a24bed4bfabc0 (diff) | |
| download | bcm5719-llvm-7c54f66058735d4078219a0dd60b79bc83d88db4.tar.gz bcm5719-llvm-7c54f66058735d4078219a0dd60b79bc83d88db4.zip | |
PR4308: Fix support for -m32/-m64 on Linux.
I'll look into cleaning this up a bit as a followup.
llvm-svn: 72794
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/HostInfo.cpp | 29 | 
1 files changed, 22 insertions, 7 deletions
| diff --git a/clang/lib/Driver/HostInfo.cpp b/clang/lib/Driver/HostInfo.cpp index 603b3ab230f..2d577f82fd4 100644 --- a/clang/lib/Driver/HostInfo.cpp +++ b/clang/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);    } | 

