aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2012-11-08 03:38:26 +0000
committerDaniel Dunbar <daniel@zuster.org>2012-11-08 03:38:26 +0000
commitd2a527eae6df377b326e8d764782bc34f1e64189 (patch)
treec6410a4e9171e570ee1ce23ea4347270baddb31d
parent85b7f7ddf2f09778ec303f5a39f9e67e3aae1115 (diff)
Driver/Darwin: The -arch argument values aren't exactly the arch names from a
triple. - Translate the special case of powerpc to its expected -arch name. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167571 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Driver/ToolChain.h4
-rw-r--r--lib/Driver/Driver.cpp2
-rw-r--r--lib/Driver/ToolChain.cpp15
-rw-r--r--test/Driver/darwin-arch-default.c7
4 files changed, 27 insertions, 1 deletions
diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h
index d694e0f27d..71736d666e 100644
--- a/include/clang/Driver/ToolChain.h
+++ b/include/clang/Driver/ToolChain.h
@@ -85,6 +85,10 @@ public:
StringRef getPlatform() const { return Triple.getVendorName(); }
StringRef getOS() const { return Triple.getOSName(); }
+ /// \brief Provide the default architecture name (as expected by -arch) for
+ /// this toolchain. Note t
+ std::string getDefaultUniversalArchName() const;
+
std::string getTripleString() const {
return Triple.getTriple();
}
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 0c1641007a..7d63bf4ae6 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -806,7 +806,7 @@ void Driver::BuildUniversalActions(const ToolChain &TC,
// When there is no explicit arch for this platform, make sure we still bind
// the architecture (to the default) so that -Xarch_ is handled correctly.
if (!Archs.size())
- Archs.push_back(Args.MakeArgString(TC.getArchName()));
+ Archs.push_back(Args.MakeArgString(TC.getDefaultUniversalArchName()));
// FIXME: We killed off some others but these aren't yet detected in a
// functional manner. If we added information to jobs about which "auxiliary"
diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp
index 9dcdafc872..de8ed1d1c5 100644
--- a/lib/Driver/ToolChain.cpp
+++ b/lib/Driver/ToolChain.cpp
@@ -33,6 +33,21 @@ const Driver &ToolChain::getDriver() const {
return D;
}
+std::string ToolChain::getDefaultUniversalArchName() const {
+ // In universal driver terms, the arch name accepted by -arch isn't exactly
+ // the same as the ones that appear in the triple. Roughly speaking, this is
+ // an inverse of the darwin::getArchTypeForDarwinArchName() function, but the
+ // only interesting special case is powerpc.
+ switch (Triple.getArch()) {
+ case llvm::Triple::ppc:
+ return "ppc";
+ case llvm::Triple::ppc64:
+ return "ppc64";
+ default:
+ return Triple.getArchName();
+ }
+}
+
bool ToolChain::IsUnwindTablesDefault() const {
return false;
}
diff --git a/test/Driver/darwin-arch-default.c b/test/Driver/darwin-arch-default.c
new file mode 100644
index 0000000000..60bf61de8a
--- /dev/null
+++ b/test/Driver/darwin-arch-default.c
@@ -0,0 +1,7 @@
+// Check that the name of the arch we bind is "ppc" not "powerpc".
+//
+// RUN: %clang -target powerpc-apple-darwin8 -### \
+// RUN: -ccc-print-phases %s 2> %t
+// RUN: FileCheck --check-prefix=CHECK-POWERPC < %t %s
+//
+// CHECK-POWERPC: bind-arch, "ppc"