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.

llvm-svn: 167571
This commit is contained in:
Daniel Dunbar 2012-11-08 03:38:26 +00:00
parent 2ffcf43a13
commit c3bd9f5c50
4 changed files with 27 additions and 1 deletions

View File

@ -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();
}

View File

@ -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"

View File

@ -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;
}

View File

@ -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"