@@ -, +, @@ --- lib/Support/Triple.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- a/lib/Support/Triple.cpp +++ a/lib/Support/Triple.cpp @@ -874,6 +874,27 @@ std::string Triple::normalize(StringRef Str) { } } + // Gentoo abuses the vendor field for softfloat/hardfloat ARM + // e.g. arm-softfloat-linux-gnueabi, arm-hardfloat-linux-gnueabi + if (Arch == Triple::arm && Components[1] == "hardfloat") { + switch (Environment) { + case Triple::EABI: + Environment = Triple::EABIHF; + Components[3] = Triple::getEnvironmentTypeName(Environment); + break; + case Triple::GNUEABI: + Environment = Triple::GNUEABIHF; + Components[3] = Triple::getEnvironmentTypeName(Environment); + break; + case Triple::MuslEABI: + Environment = Triple::MuslEABIHF; + Components[3] = Triple::getEnvironmentTypeName(Environment); + break; + default: + break; + } + } + // Stick the corrected components back together to form the normalized string. std::string Normalized; for (unsigned i = 0, e = Components.size(); i != e; ++i) { --