Index: include/clang/Driver/Distro.h =================================================================== --- include/clang/Driver/Distro.h +++ include/clang/Driver/Distro.h @@ -26,6 +26,7 @@ // NB: Releases of a particular Linux distro should be kept together // in this enum, because some tests are done by integer comparison against // the first and last known member in the family, e.g. IsRedHat(). + AlpineLinux, ArchLinux, DebianLenny, DebianSqueeze, Index: lib/Driver/Distro.cpp =================================================================== --- lib/Driver/Distro.cpp +++ lib/Driver/Distro.cpp @@ -129,6 +129,9 @@ if (VFS.exists("/etc/exherbo-release")) return Distro::Exherbo; + if (VFS.exists("/etc/alpine-release")) + return Distro::AlpineLinux; + if (VFS.exists("/etc/arch-release")) return Distro::ArchLinux; Index: lib/Driver/ToolChains/Linux.cpp =================================================================== --- lib/Driver/ToolChains/Linux.cpp +++ lib/Driver/ToolChains/Linux.cpp @@ -210,7 +210,12 @@ Distro Distro(D.getVFS()); - if (Distro.IsOpenSUSE() || Distro.IsUbuntu()) { + if (Distro.IsAlpineLinux()) { + ExtraOpts.push_back("-z"); + ExtraOpts.push_back("now"); + } + + if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux()) { ExtraOpts.push_back("-z"); ExtraOpts.push_back("relro"); } @@ -232,7 +237,7 @@ // Android loader does not support .gnu.hash. // Hexagon linker/loader does not support .gnu.hash if (!IsMips && !IsAndroid && !IsHexagon) { - if (Distro.IsRedhat() || Distro.IsOpenSUSE() || + if (Distro.IsRedhat() || Distro.IsOpenSUSE() || Distro.IsAlpineLinux() || (Distro.IsUbuntu() && Distro >= Distro::UbuntuMaverick)) ExtraOpts.push_back("--hash-style=gnu");