diff options
Diffstat (limited to 'sys-devel/llvm/files/3.9.1/clang/gcc-config.patch')
-rw-r--r-- | sys-devel/llvm/files/3.9.1/clang/gcc-config.patch | 422 |
1 files changed, 422 insertions, 0 deletions
diff --git a/sys-devel/llvm/files/3.9.1/clang/gcc-config.patch b/sys-devel/llvm/files/3.9.1/clang/gcc-config.patch new file mode 100644 index 000000000000..42d5d0405992 --- /dev/null +++ b/sys-devel/llvm/files/3.9.1/clang/gcc-config.patch @@ -0,0 +1,422 @@ +From a0b8bc9ef667ed7158400f7cbf772e470661d203 Mon Sep 17 00:00:00 2001 +From: Michal Gorny <mgorny@gentoo.org> +Date: Tue, 25 Oct 2016 15:07:41 +0000 +Subject: [PATCH] (squashed gcc-config patch, from commits:) + +[Driver] Support obtaining active toolchain from gcc-config on Gentoo + +Support using gcc-config to determine the correct GCC toolchain location +on Gentoo. In order to do that, attempt to read gcc-config configuration +form [[sysroot]]/etc/env.d/gcc, if no custom toolchain location is +provided. + +Differential Revision: https://reviews.llvm.org/D25661 + +git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285074 91177308-0d34-0410-b5e6-96231b3b80d8 + +[Driver] Fix finding multilib gcc install on Gentoo (with gcc-config) + +Fix the gcc-config code to support multilib gcc installs properly. This +solves two problems: -mx32 using the 64-bit gcc directory (due to matching +installation triple), and -m32 not respecting gcc-config at all (due to +mismatched installation triple). + +In order to fix the former issue, split the multilib scan out of +Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple() (the code +is otherwise unchanged), and call it for each installation found via +gcc-config. + +In order to fix the latter issue, split the gcc-config processing out of +Generic_GCC::GCCInstallationDetector::init() and repeat it for all +triples, including extra and biarch triples. The only change +in the gcc-config code itself is adding the call to multilib scan. + +Convert the gentoo_linux_gcc_multi_version_tree test input to multilib +x86_64+32+x32 install, and add appropriate tests to linux-header-search +and linux-ld. + +Differential Revision: https://reviews.llvm.org/D26887 + +git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289436 91177308-0d34-0410-b5e6-96231b3b80d8 + +[Driver] Attempt to fix new linux-ld tests on Windows + +(broken by r289436) + +git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289440 91177308-0d34-0410-b5e6-96231b3b80d8 +--- + lib/Driver/ToolChains.cpp | 104 +++++++++++++++++---- + lib/Driver/ToolChains.h | 10 ++ + .../etc/env.d/gcc/config-x86_64-pc-linux-gnu | 1 + + .../etc/env.d/gcc/x86_64-pc-linux-gnu-4.9.3 | 10 ++ + .../etc/gentoo-release | 1 + + .../usr/include/.keep | 0 + .../gcc/x86_64-pc-linux-gnu/4.9.3/32/crtbegin.o | 0 + .../lib/gcc/x86_64-pc-linux-gnu/4.9.3/crtbegin.o | 0 + .../4.9.3/include/g++-v4.9.3/.keep | 0 + .../gcc/x86_64-pc-linux-gnu/4.9.3/x32/crtbegin.o | 0 + .../gcc/x86_64-pc-linux-gnu/5.4.0/32/crtbegin.o | 0 + .../lib/gcc/x86_64-pc-linux-gnu/5.4.0/crtbegin.o | 0 + .../5.4.0/include/g++-v5.4.0/.keep | 0 + .../gcc/x86_64-pc-linux-gnu/5.4.0/x32/crtbegin.o | 0 + .../usr/x86_64-pc-linux-gnu/lib/.keep | 0 + test/Driver/linux-header-search.cpp | 42 +++++++++ + test/Driver/linux-ld.c | 53 +++++++++++ + 17 files changed, 204 insertions(+), 17 deletions(-) + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/config-x86_64-pc-linux-gnu + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/x86_64-pc-linux-gnu-4.9.3 + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/gentoo-release + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/include/.keep + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/32/crtbegin.o + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/crtbegin.o + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/.keep + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/x32/crtbegin.o + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/32/crtbegin.o + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/crtbegin.o + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/g++-v5.4.0/.keep + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/x32/crtbegin.o + create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/x86_64-pc-linux-gnu/lib/.keep + +diff --git a/tools/clang/lib/Driver/ToolChains.cpp b/tools/clang/lib/Driver/ToolChains.cpp +index 1b02f467c1..84123ea132 100644 +--- a/tools/clang/lib/Driver/ToolChains.cpp ++++ b/tools/clang/lib/Driver/ToolChains.cpp +@@ -1420,6 +1420,25 @@ void Generic_GCC::GCCInstallationDetector::init( + } + } + ++ // Try to respect gcc-config on Gentoo. However, do that only ++ // if --gcc-toolchain is not provided or equal to the Gentoo install ++ // in /usr. This avoids accidentally enforcing the system GCC version ++ // when using a custom toolchain. ++ if (GCCToolchainDir == "" || GCCToolchainDir == D.SysRoot + "/usr") { ++ for (StringRef CandidateTriple : ExtraTripleAliases) { ++ if (ScanGentooGccConfig(TargetTriple, Args, CandidateTriple)) ++ return; ++ } ++ for (StringRef CandidateTriple : CandidateTripleAliases) { ++ if (ScanGentooGccConfig(TargetTriple, Args, CandidateTriple)) ++ return; ++ } ++ for (StringRef CandidateTriple : CandidateBiarchTripleAliases) { ++ if (ScanGentooGccConfig(TargetTriple, Args, CandidateTriple, true)) ++ return; ++ } ++ } ++ + // Loop over the various components which exist and select the best GCC + // installation available. GCC installs are ranked by version number. + Version = GCCVersion::Parse("0.0.0"); +@@ -2546,6 +2565,33 @@ void Generic_GCC::GCCInstallationDetector::scanLibDirForGCCTripleSolaris( + } + } + ++bool Generic_GCC::GCCInstallationDetector::ScanGCCForMultilibs( ++ const llvm::Triple &TargetTriple, const ArgList &Args, ++ StringRef Path, bool NeedsBiarchSuffix) { ++ llvm::Triple::ArchType TargetArch = TargetTriple.getArch(); ++ DetectedMultilibs Detected; ++ ++ // Android standalone toolchain could have multilibs for ARM and Thumb. ++ // Debian mips multilibs behave more like the rest of the biarch ones, ++ // so handle them there ++ if (isArmOrThumbArch(TargetArch) && TargetTriple.isAndroid()) { ++ // It should also work without multilibs in a simplified toolchain. ++ findAndroidArmMultilibs(D, TargetTriple, Path, Args, Detected); ++ } else if (isMipsArch(TargetArch)) { ++ if (!findMIPSMultilibs(D, TargetTriple, Path, Args, Detected)) ++ return false; ++ } else if (!findBiarchMultilibs(D, TargetTriple, Path, Args, ++ NeedsBiarchSuffix, Detected)) { ++ return false; ++ } ++ ++ Multilibs = Detected.Multilibs; ++ SelectedMultilib = Detected.SelectedMultilib; ++ BiarchSibling = Detected.BiarchSibling; ++ ++ return true; ++} ++ + void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple( + const llvm::Triple &TargetTriple, const ArgList &Args, + const std::string &LibDir, StringRef CandidateTriple, +@@ -2601,25 +2647,10 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple( + if (CandidateVersion <= Version) + continue; + +- DetectedMultilibs Detected; +- +- // Android standalone toolchain could have multilibs for ARM and Thumb. +- // Debian mips multilibs behave more like the rest of the biarch ones, +- // so handle them there +- if (isArmOrThumbArch(TargetArch) && TargetTriple.isAndroid()) { +- // It should also work without multilibs in a simplified toolchain. +- findAndroidArmMultilibs(D, TargetTriple, LI->getName(), Args, Detected); +- } else if (isMipsArch(TargetArch)) { +- if (!findMIPSMultilibs(D, TargetTriple, LI->getName(), Args, Detected)) +- continue; +- } else if (!findBiarchMultilibs(D, TargetTriple, LI->getName(), Args, +- NeedsBiarchSuffix, Detected)) { ++ if (!ScanGCCForMultilibs(TargetTriple, Args, LI->getName(), ++ NeedsBiarchSuffix)) + continue; +- } + +- Multilibs = Detected.Multilibs; +- SelectedMultilib = Detected.SelectedMultilib; +- BiarchSibling = Detected.BiarchSibling; + Version = CandidateVersion; + GCCTriple.setTriple(CandidateTriple); + // FIXME: We hack together the directory name here instead of +@@ -2633,6 +2664,45 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple( + } + } + ++bool Generic_GCC::GCCInstallationDetector::ScanGentooGccConfig( ++ const llvm::Triple &TargetTriple, const ArgList &Args, ++ StringRef CandidateTriple, bool NeedsBiarchSuffix) { ++ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File = ++ D.getVFS().getBufferForFile(D.SysRoot + "/etc/env.d/gcc/config-" + ++ CandidateTriple.str()); ++ if (File) { ++ SmallVector<StringRef, 2> Lines; ++ File.get()->getBuffer().split(Lines, "\n"); ++ for (StringRef Line : Lines) { ++ // CURRENT=triple-version ++ if (Line.startswith("CURRENT=")) { ++ const std::pair<StringRef, StringRef> ActiveVersion = ++ Line.substr(8).rsplit('-'); ++ // Note: Strictly speaking, we should be reading ++ // /etc/env.d/gcc/${CURRENT} now. However, the file doesn't ++ // contain anything new or especially useful to us. ++ const std::string GentooPath = D.SysRoot + "/usr/lib/gcc/" + ++ ActiveVersion.first.str() + "/" + ++ ActiveVersion.second.str(); ++ if (D.getVFS().exists(GentooPath + "/crtbegin.o")) { ++ if (!ScanGCCForMultilibs(TargetTriple, Args, GentooPath, ++ NeedsBiarchSuffix)) ++ return false; ++ ++ Version = GCCVersion::Parse(ActiveVersion.second); ++ GCCInstallPath = GentooPath; ++ GCCParentLibPath = GentooPath + "/../../.."; ++ GCCTriple.setTriple(ActiveVersion.first); ++ IsValid = true; ++ return true; ++ } ++ } ++ } ++ } ++ ++ return false; ++} ++ + Generic_GCC::Generic_GCC(const Driver &D, const llvm::Triple &Triple, + const ArgList &Args) + : ToolChain(D, Triple, Args), GCCInstallation(D), CudaInstallation(D) { +diff --git a/tools/clang/lib/Driver/ToolChains.h b/tools/clang/lib/Driver/ToolChains.h +index 369712fa93..6c2d0cb201 100644 +--- a/tools/clang/lib/Driver/ToolChains.h ++++ b/tools/clang/lib/Driver/ToolChains.h +@@ -143,6 +143,11 @@ public: + SmallVectorImpl<StringRef> &BiarchLibDirs, + SmallVectorImpl<StringRef> &BiarchTripleAliases); + ++ bool ScanGCCForMultilibs(const llvm::Triple &TargetTriple, ++ const llvm::opt::ArgList &Args, ++ StringRef Path, ++ bool NeedsBiarchSuffix = false); ++ + void ScanLibDirForGCCTriple(const llvm::Triple &TargetArch, + const llvm::opt::ArgList &Args, + const std::string &LibDir, +@@ -154,6 +159,11 @@ public: + const std::string &LibDir, + StringRef CandidateTriple, + bool NeedsBiarchSuffix = false); ++ ++ bool ScanGentooGccConfig(const llvm::Triple &TargetTriple, ++ const llvm::opt::ArgList &Args, ++ StringRef CandidateTriple, ++ bool NeedsBiarchSuffix = false); + }; + + protected: +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/config-x86_64-pc-linux-gnu b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/config-x86_64-pc-linux-gnu +new file mode 100644 +index 0000000000..5ef56a33a6 +--- /dev/null ++++ b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/config-x86_64-pc-linux-gnu +@@ -0,0 +1 @@ ++CURRENT=x86_64-pc-linux-gnu-4.9.3 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/x86_64-pc-linux-gnu-4.9.3 b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/x86_64-pc-linux-gnu-4.9.3 +new file mode 100644 +index 0000000000..9ff406284f +--- /dev/null ++++ b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/env.d/gcc/x86_64-pc-linux-gnu-4.9.3 +@@ -0,0 +1,10 @@ ++PATH="/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.3" ++ROOTPATH="/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.3" ++GCC_PATH="/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.3" ++LDPATH="/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3:/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/32" ++MANPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.3/man" ++INFOPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.3/info" ++STDCXX_INCDIR="g++-v4" ++CTARGET="x86_64-pc-linux-gnu" ++GCC_SPECS="" ++MULTIOSDIRS="../lib64:../lib32" +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/gentoo-release b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/gentoo-release +new file mode 100644 +index 0000000000..5f0944f7d9 +--- /dev/null ++++ b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/etc/gentoo-release +@@ -0,0 +1 @@ ++Gentoo Base System release 2.3 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/include/.keep b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/include/.keep +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/32/crtbegin.o b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/32/crtbegin.o +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/crtbegin.o b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/crtbegin.o +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/.keep b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/.keep +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/x32/crtbegin.o b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/x32/crtbegin.o +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/32/crtbegin.o b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/32/crtbegin.o +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/crtbegin.o b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/crtbegin.o +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/g++-v5.4.0/.keep b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/g++-v5.4.0/.keep +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/x32/crtbegin.o b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/x32/crtbegin.o +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/x86_64-pc-linux-gnu/lib/.keep b/tools/clang/test/Driver/Inputs/gentoo_linux_gcc_multi_version_tree/usr/x86_64-pc-linux-gnu/lib/.keep +new file mode 100644 +index 0000000000..e69de29bb2 +diff --git a/tools/clang/test/Driver/linux-header-search.cpp b/tools/clang/test/Driver/linux-header-search.cpp +index 5f6ac504a0..274895fb4f 100644 +--- a/tools/clang/test/Driver/linux-header-search.cpp ++++ b/tools/clang/test/Driver/linux-header-search.cpp +@@ -301,6 +301,48 @@ + // CHECK-GENTOO-4-9-3: "-internal-externc-isystem" "[[SYSROOT]]/include" + // CHECK-GENTOO-4-9-3: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" + // ++// Test support for Gentoo's gcc-config -- clang should prefer the older ++// (4.9.3) version over the newer (5.4.0) due to preference specified ++// in /etc/env.d/gcc/x86_64-pc-linux-gnu. ++// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ ++// RUN: -target x86_64-unknown-linux-gnu -stdlib=libstdc++ \ ++// RUN: --sysroot=%S/Inputs/gentoo_linux_gcc_multi_version_tree \ ++// RUN: --gcc-toolchain="" \ ++// RUN: | FileCheck --check-prefix=CHECK-GENTOO-4-9-3 %s ++// ++// Test that gcc-config support does not break multilib. ++// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ ++// RUN: -target x86_64-unknown-linux-gnux32 -stdlib=libstdc++ \ ++// RUN: --sysroot=%S/Inputs/gentoo_linux_gcc_multi_version_tree \ ++// RUN: --gcc-toolchain="" \ ++// RUN: | FileCheck --check-prefix=CHECK-GENTOO-4-9-3-X32 %s ++// CHECK-GENTOO-4-9-3-X32: "{{.*}}clang{{.*}}" "-cc1" ++// CHECK-GENTOO-4-9-3-X32: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" ++// CHECK-GENTOO-4-9-3-X32: "-isysroot" "[[SYSROOT:[^"]+]]" ++// CHECK-GENTOO-4-9-3-X32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3" ++// CHECK-GENTOO-4-9-3-X32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/x86_64-pc-linux-gnu/x32" ++// CHECK-GENTOO-4-9-3-X32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/backward" ++// CHECK-GENTOO-4-9-3-X32: "-internal-isystem" "[[SYSROOT]]/usr/local/include" ++// CHECK-GENTOO-4-9-3-X32: "-internal-isystem" "[[RESOURCE_DIR]]{{/|\\\\}}include" ++// CHECK-GENTOO-4-9-3-X32: "-internal-externc-isystem" "[[SYSROOT]]/include" ++// CHECK-GENTOO-4-9-3-X32: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" ++// ++// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ ++// RUN: -target i386-unknown-linux-gnu -stdlib=libstdc++ \ ++// RUN: --sysroot=%S/Inputs/gentoo_linux_gcc_multi_version_tree \ ++// RUN: --gcc-toolchain="" \ ++// RUN: | FileCheck --check-prefix=CHECK-GENTOO-4-9-3-32 %s ++// CHECK-GENTOO-4-9-3-32: "{{.*}}clang{{.*}}" "-cc1" ++// CHECK-GENTOO-4-9-3-32: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" ++// CHECK-GENTOO-4-9-3-32: "-isysroot" "[[SYSROOT:[^"]+]]" ++// CHECK-GENTOO-4-9-3-32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3" ++// CHECK-GENTOO-4-9-3-32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/x86_64-pc-linux-gnu/32" ++// CHECK-GENTOO-4-9-3-32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4.9.3/backward" ++// CHECK-GENTOO-4-9-3-32: "-internal-isystem" "[[SYSROOT]]/usr/local/include" ++// CHECK-GENTOO-4-9-3-32: "-internal-isystem" "[[RESOURCE_DIR]]{{/|\\\\}}include" ++// CHECK-GENTOO-4-9-3-32: "-internal-externc-isystem" "[[SYSROOT]]/include" ++// CHECK-GENTOO-4-9-3-32: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" ++// + // Check header search on Debian 6 / MIPS64 + // RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ + // RUN: -target mips64-unknown-linux-gnuabi64 -stdlib=libstdc++ \ +diff --git a/tools/clang/test/Driver/linux-ld.c b/tools/clang/test/Driver/linux-ld.c +index f9f4b482c9..ee995ac2d6 100644 +--- a/tools/clang/test/Driver/linux-ld.c ++++ b/tools/clang/test/Driver/linux-ld.c +@@ -1650,3 +1650,56 @@ + // CHECK-MUSL-ARMEBHF: "-dynamic-linker" "/lib/ld-musl-armebhf.so.1" + // CHECK-MUSL-AARCH64: "-dynamic-linker" "/lib/ld-musl-aarch64.so.1" + // CHECK-MUSL-AARCH64_BE: "-dynamic-linker" "/lib/ld-musl-aarch64_be.so.1" ++ ++// Check whether multilib gcc install works fine on Gentoo with gcc-config ++// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ ++// RUN: --target=x86_64-unknown-linux-gnu -rtlib=platform \ ++// RUN: --sysroot=%S/Inputs/gentoo_linux_gcc_multi_version_tree \ ++// RUN: --gcc-toolchain="" \ ++// RUN: | FileCheck --check-prefix=CHECK-LD-GENTOO %s ++// CHECK-LD-GENTOO-NOT: warning: ++// CHECK-LD-GENTOO: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" ++// CHECK-LD-GENTOO: "--eh-frame-hdr" ++// CHECK-LD-GENTOO: "-m" "elf_x86_64" ++// CHECK-LD-GENTOO: "-dynamic-linker" ++// CHECK-LD-GENTOO: "{{.*}}/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3{{/|\\\\}}crtbegin.o" ++// CHECK-LD-GENTOO: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3" ++// CHECK-LD-GENTOO: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/lib" ++// CHECK-LD-GENTOO: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../.." ++// CHECK-LD-GENTOO: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" ++// CHECK-LD-GENTOO: "-lc" ++// CHECK-LD-GENTOO: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" ++// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ ++// RUN: --target=i686-unknown-linux-gnu -rtlib=platform \ ++// RUN: --sysroot=%S/Inputs/gentoo_linux_gcc_multi_version_tree \ ++// RUN: --gcc-toolchain="" \ ++// RUN: | FileCheck --check-prefix=CHECK-LD-GENTOO-32 %s ++// CHECK-LD-GENTOO-32-NOT: warning: ++// CHECK-LD-GENTOO-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" ++// CHECK-LD-GENTOO-32: "--eh-frame-hdr" ++// CHECK-LD-GENTOO-32: "-m" "elf_i386" ++// CHECK-LD-GENTOO-32: "-dynamic-linker" ++// CHECK-LD-GENTOO-32: "{{.*}}/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/32{{/|\\\\}}crtbegin.o" ++// CHECK-LD-GENTOO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/32" ++// CHECK-LD-GENTOO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/lib" ++// CHECK-LD-GENTOO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../.." ++// CHECK-LD-GENTOO-32: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" ++// CHECK-LD-GENTOO-32: "-lc" ++// CHECK-LD-GENTOO-32: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" ++// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ ++// RUN: --target=x86_64-unknown-linux-gnux32 -rtlib=platform \ ++// RUN: --sysroot=%S/Inputs/gentoo_linux_gcc_multi_version_tree \ ++// RUN: --gcc-toolchain="" \ ++// RUN: | FileCheck --check-prefix=CHECK-LD-GENTOO-X32 %s ++// CHECK-LD-GENTOO-X32-NOT: warning: ++// CHECK-LD-GENTOO-X32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" ++// CHECK-LD-GENTOO-X32: "--eh-frame-hdr" ++// CHECK-LD-GENTOO-X32: "-m" "elf32_x86_64" ++// CHECK-LD-GENTOO-X32: "-dynamic-linker" ++// CHECK-LD-GENTOO-X32: "{{.*}}/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/x32{{/|\\\\}}crtbegin.o" ++// CHECK-LD-GENTOO-X32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/x32" ++// CHECK-LD-GENTOO-X32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/lib" ++// CHECK-LD-GENTOO-X32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../.." ++// CHECK-LD-GENTOO-X32: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" ++// CHECK-LD-GENTOO-X32: "-lc" ++// CHECK-LD-GENTOO-X32: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" +-- +2.11.0 + |