summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/HostInfo.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2009-06-03 18:59:56 +0000
committerEli Friedman <eli.friedman@gmail.com>2009-06-03 18:59:56 +0000
commit7c54f66058735d4078219a0dd60b79bc83d88db4 (patch)
tree18c6216fa74d0cc640e0e1965908351a213e75e5 /clang/lib/Driver/HostInfo.cpp
parent6d36343ed8ab32ffdb536b37f38a24bed4bfabc0 (diff)
downloadbcm5719-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/Driver/HostInfo.cpp')
-rw-r--r--clang/lib/Driver/HostInfo.cpp29
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);
}
OpenPOWER on IntegriCloud