diff -up a/clang/lib/Driver/ToolChains.cpp.TRIPLETS b/clang/lib/Driver/ToolChains.cpp --- a/clang/lib/Driver/ToolChains/Gnu.cpp.TRIPLETS 2016-11-23 22:25:50.000000000 +0100 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp 2017-01-06 22:59:39.416911839 +0100 @@ -2094,7 +2094,7 @@ void Generic_GCC::GCCInstallationDetecto // lists should shrink over time. Please don't add more elements to *Triples. static const char *const AArch64LibDirs[] = {"/lib64", "/lib"}; static const char *const AArch64Triples[] = { - "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", + "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-mageia-linux", "aarch64-redhat-linux", "aarch64-suse-linux"}; static const char *const AArch64beLibDirs[] = {"/lib"}; static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu", @@ -2104,6 +2104,7 @@ void Generic_GCC::GCCInstallationDetecto static const char *const ARMTriples[] = {"arm-linux-gnueabi"}; static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf", "armv7hl-redhat-linux-gnueabi", + "armv7hl-mageia-linux-gnueabi", "armv6hl-suse-linux-gnueabi", "armv7hl-suse-linux-gnueabi"}; static const char *const ARMebLibDirs[] = {"/lib"}; @@ -2120,6 +2121,7 @@ void Generic_GCC::GCCInstallationDetecto "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E", "x86_64-redhat-linux", "x86_64-suse-linux", "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", + "x86_64-mageia-linux", "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", "x86_64-slackware-linux", "x86_64-unknown-linux", "x86_64-amazon-linux"}; static const char *const X32Triples[] = {"x86_64-linux-gnux32", @@ -2129,7 +2131,7 @@ void Generic_GCC::GCCInstallationDetecto static const char *const X86Triples[] = { "i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux", - "i586-suse-linux", "i686-montavista-linux", "i686-gnu", + "i586-suse-linux", "i586-mageia-linux", "i686-montavista-linux", "i686-gnu", }; static const char *const M68kLibDirs[] = {"/lib"}; diff -up ./lib/Driver/ToolChains/Linux.cpp.tv ./lib/Driver/ToolChains/Linux.cpp --- a/clang/lib/Driver/ToolChains/Linux.cpp.tv 2017-06-03 18:47:06.000000000 +0200 +++ b/clang/lib/Driver/ToolChains/Linux.cpp 2017-10-18 20:36:09.266005559 +0200 @@ -283,7 +283,7 @@ Linux::Linux(const Driver &D, const llvm // Android loader does not support .gnu.hash until API 23. // Hexagon linker/loader does not support .gnu.hash if (!IsMips && !IsHexagon) { - if (Distro.IsRedhat() || Distro.IsOpenSUSE() || Distro.IsAlpineLinux() || + if (Distro.IsRedhat() || Distro.IsOpenSUSE() || Distro.IsAlpineLinux() || Distro.IsMageia() || (Distro.IsUbuntu() && Distro >= Distro::UbuntuMaverick) || (IsAndroid && !Triple.isAndroidVersionLT(23))) ExtraOpts.push_back("--hash-style=gnu"); diff -up ./include/clang/Driver/Distro.h.tv ./include/clang/Driver/Distro.h --- a/clang/include/clang/Driver/Distro.h.tv 2017-09-21 15:52:02.310905300 +0200 +++ b/clang/include/clang/Driver/Distro.h 2017-09-21 15:53:27.909422016 +0200 @@ -39,6 +39,7 @@ public: RHEL6, RHEL7, Fedora, + Mageia, Gentoo, OpenSUSE, UbuntuHardy, @@ -116,6 +116,8 @@ public: return DistroVal == Fedora || (DistroVal >= RHEL5 && DistroVal <= RHEL7); } + bool IsMageia() const { return DistroVal == Mageia; } + bool IsOpenSUSE() const { return DistroVal == OpenSUSE; } bool IsDebian() const { diff -up ./lib/Driver/Distro.cpp.tv ./lib/Driver/Distro.cpp --- a/clang/lib/Driver/Distro.cpp.tv 2017-09-21 15:53:58.541964793 +0200 +++ b/clang/lib/Driver/Distro.cpp 2017-09-21 16:10:59.342121213 +0200 @@ -36,6 +36,7 @@ static Distro::DistroType DetectOsReleas for (StringRef Line : Lines) if (Version == Distro::UnknownDistro && Line.startswith("ID=")) Version = llvm::StringSwitch<Distro::DistroType>(Line.substr(3)) + .Case("mageia", Distro::Mageia) .Case("alpine", Distro::AlpineLinux) .Case("fedora", Distro::Fedora) .Case("gentoo", Distro::Gentoo) @@ -106,6 +107,11 @@ static Distro::DistroType DetectDistro(l if (Version != Distro::UnknownDistro) return Version; + /* // Just rely on /etc/redhat-release symlink + llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File = + VFS.getBufferForFile("/etc/mageia-release"); + */ + // Otherwise try some distro-specific quirks for RedHat... llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File = VFS.getBufferForFile("/etc/redhat-release");