[Driver] Support -muclibc / -mglibc command line options for a couple

of MIPS toolchains.

The uCLibc implemented for multiple architectures. A couple of MIPS toolchains
contains both uCLibc and glibc implementation so these options allow to select
used C library.

Initially -muclibc / -mglibc (as well as -mbionic) have been implemented in gcc
for various architectures so they are not MIPS specific.

llvm-svn: 215552
This commit is contained in:
Simon Atanasyan 2014-08-13 14:34:14 +00:00
parent dd13b30c29
commit d95c67d425
98 changed files with 370 additions and 4 deletions

View File

@ -80,6 +80,7 @@ def m_hexagon_Features_Group : OptionGroup<"<m hexagon features group>">, Group
def m_arm_Features_Group : OptionGroup<"<m arm features group>">, Group<m_Group>; def m_arm_Features_Group : OptionGroup<"<m arm features group>">, Group<m_Group>;
def m_aarch64_Features_Group : OptionGroup<"<m aarch64 features group>">, Group<m_Group>; def m_aarch64_Features_Group : OptionGroup<"<m aarch64 features group>">, Group<m_Group>;
def m_ppc_Features_Group : OptionGroup<"<m ppc features group>">, Group<m_Group>; def m_ppc_Features_Group : OptionGroup<"<m ppc features group>">, Group<m_Group>;
def m_libc_Group : OptionGroup<"<m libc group>">, Group<m_Group>;
def u_Group : OptionGroup<"<u group>">; def u_Group : OptionGroup<"<u group>">;
def pedantic_Group : OptionGroup<"<pedantic group>">, def pedantic_Group : OptionGroup<"<pedantic group>">,
@ -1304,6 +1305,8 @@ def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_Group>,
def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_Group>, def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_Group>,
HelpText<"Disable odd single-precision floating point registers">, HelpText<"Disable odd single-precision floating point registers">,
Flags<[HelpHidden]>; Flags<[HelpHidden]>;
def mglibc : Flag<["-"], "mglibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
def muclibc : Flag<["-"], "muclibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
def module_file_info : Flag<["-"], "module-file-info">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>; def module_file_info : Flag<["-"], "module-file-info">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>;
def mthumb : Flag<["-"], "mthumb">, Group<m_Group>; def mthumb : Flag<["-"], "mthumb">, Group<m_Group>;
def mtune_EQ : Joined<["-"], "mtune=">, Group<m_Group>; def mtune_EQ : Joined<["-"], "mtune=">, Group<m_Group>;

View File

@ -1696,6 +1696,9 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
auto Mips16 = makeMultilib("/mips16") auto Mips16 = makeMultilib("/mips16")
.flag("+mips16"); .flag("+mips16");
auto UCLibc = makeMultilib("/uclibc")
.flag("+muclibc");
auto MAbi64 = makeMultilib("/64") auto MAbi64 = makeMultilib("/64")
.flag("+mabi=n64").flag("-mabi=n32").flag("-m32"); .flag("+mabi=n64").flag("-mabi=n32").flag("-m32");
@ -1714,6 +1717,7 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
FSFMipsMultilibs = MultilibSet() FSFMipsMultilibs = MultilibSet()
.Either(MArchMips32, MArchMicroMips, .Either(MArchMips32, MArchMicroMips,
MArchMips64r2, MArchMips64, MArchDefault) MArchMips64r2, MArchMips64, MArchDefault)
.Maybe(UCLibc)
.Maybe(Mips16) .Maybe(Mips16)
.FilterOut("/mips64/mips16") .FilterOut("/mips64/mips16")
.FilterOut("/mips64r2/mips16") .FilterOut("/mips64r2/mips16")
@ -1732,7 +1736,11 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
StringRef InstallDir, StringRef TripleStr, const Multilib &M) { StringRef InstallDir, StringRef TripleStr, const Multilib &M) {
std::vector<std::string> Dirs; std::vector<std::string> Dirs;
Dirs.push_back((InstallDir + "/include").str()); Dirs.push_back((InstallDir + "/include").str());
Dirs.push_back((InstallDir + "/../../../../sysroot/usr/include").str()); std::string SysRootInc = InstallDir.str() + "/../../../../sysroot";
if (StringRef(M.includeSuffix()).startswith("/uclibc"))
Dirs.push_back(SysRootInc + "/uclibc/usr/include");
else
Dirs.push_back(SysRootInc + "/usr/include");
return Dirs; return Dirs;
}); });
} }
@ -1749,6 +1757,9 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
auto MArchDefault = makeMultilib("") auto MArchDefault = makeMultilib("")
.flag("-mips16").flag("-mmicromips"); .flag("-mips16").flag("-mmicromips");
auto UCLibc = makeMultilib("/uclibc")
.flag("+muclibc");
auto SoftFloat = makeMultilib("/soft-float") auto SoftFloat = makeMultilib("/soft-float")
.flag("+msoft-float"); .flag("+msoft-float");
@ -1772,6 +1783,7 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
CSMipsMultilibs = MultilibSet() CSMipsMultilibs = MultilibSet()
.Either(MArchMips16, MArchMicroMips, MArchDefault) .Either(MArchMips16, MArchMicroMips, MArchDefault)
.Maybe(UCLibc)
.Either(SoftFloat, Nan2008, DefaultFloat) .Either(SoftFloat, Nan2008, DefaultFloat)
.FilterOut("/micromips/nan2008") .FilterOut("/micromips/nan2008")
.FilterOut("/mips16/nan2008") .FilterOut("/mips16/nan2008")
@ -1784,8 +1796,12 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
StringRef InstallDir, StringRef TripleStr, const Multilib &M) { StringRef InstallDir, StringRef TripleStr, const Multilib &M) {
std::vector<std::string> Dirs; std::vector<std::string> Dirs;
Dirs.push_back((InstallDir + "/include").str()); Dirs.push_back((InstallDir + "/include").str());
Dirs.push_back((InstallDir + "/../../../../" + TripleStr + std::string SysRootInc =
"/libc/usr/include").str()); InstallDir.str() + "/../../../../" + TripleStr.str();
if (StringRef(M.includeSuffix()).startswith("/uclibc"))
Dirs.push_back(SysRootInc + "/libc/uclibc/usr/include");
else
Dirs.push_back(SysRootInc + "/libc/usr/include");
return Dirs; return Dirs;
}); });
} }
@ -1855,6 +1871,7 @@ static bool findMIPSMultilibs(const llvm::Triple &TargetTriple, StringRef Path,
addMultilibFlag(CPUName == "mips64r2" || CPUName == "octeon", addMultilibFlag(CPUName == "mips64r2" || CPUName == "octeon",
"march=mips64r2", Flags); "march=mips64r2", Flags);
addMultilibFlag(isMicroMips(Args), "mmicromips", Flags); addMultilibFlag(isMicroMips(Args), "mmicromips", Flags);
addMultilibFlag(tools::mips::isUCLibc(Args), "muclibc", Flags);
addMultilibFlag(tools::mips::isNaN2008(Args, TargetTriple), "mnan=2008", addMultilibFlag(tools::mips::isNaN2008(Args, TargetTriple), "mnan=2008",
Flags); Flags);
addMultilibFlag(ABIName == "n32", "mabi=n32", Flags); addMultilibFlag(ABIName == "n32", "mabi=n32", Flags);

View File

@ -5377,6 +5377,11 @@ bool mips::hasMipsAbiArg(const ArgList &Args, const char *Value) {
return A && (A->getValue() == StringRef(Value)); return A && (A->getValue() == StringRef(Value));
} }
bool mips::isUCLibc(const ArgList &Args) {
Arg *A = Args.getLastArg(options::OPT_m_libc_Group);
return A && A->getOption().matches(options::OPT_muclibc);
}
bool mips::isNaN2008(const ArgList &Args, const llvm::Triple &Triple) { bool mips::isNaN2008(const ArgList &Args, const llvm::Triple &Triple) {
if (Arg *NaNArg = Args.getLastArg(options::OPT_mnan_EQ)) if (Arg *NaNArg = Args.getLastArg(options::OPT_mnan_EQ))
return llvm::StringSwitch<bool>(NaNArg->getValue()) return llvm::StringSwitch<bool>(NaNArg->getValue())
@ -7302,7 +7307,11 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
.Case("n32", "/lib32") .Case("n32", "/lib32")
.Case("n64", "/lib64") .Case("n64", "/lib64")
.Default("/lib"); .Default("/lib");
StringRef LibName = IsNaN2008 ? "ld-linux-mipsn8.so.1" : "ld.so.1"; StringRef LibName;
if (mips::isUCLibc(Args))
LibName = IsNaN2008 ? "ld-uClibc-mipsn8.so.0" : "ld-uClibc.so.0";
else
LibName = IsNaN2008 ? "ld-linux-mipsn8.so.1" : "ld.so.1";
return (LibDir + "/" + LibName).str(); return (LibDir + "/" + LibName).str();
} else if (ToolChain.getArch() == llvm::Triple::ppc) } else if (ToolChain.getArch() == llvm::Triple::ppc)

View File

@ -223,6 +223,7 @@ namespace mips {
const llvm::Triple &Triple, StringRef &CPUName, const llvm::Triple &Triple, StringRef &CPUName,
StringRef &ABIName); StringRef &ABIName);
bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value); bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value);
bool isUCLibc(const llvm::opt::ArgList &Args);
bool isNaN2008(const llvm::opt::ArgList &Args, const llvm::Triple &Triple); bool isNaN2008(const llvm::opt::ArgList &Args, const llvm::Triple &Triple);
bool isFPXXDefault(const llvm::Triple &Triple, StringRef CPUName, bool isFPXXDefault(const llvm::Triple &Triple, StringRef CPUName,
StringRef ABIName); StringRef ABIName);

View File

@ -28,6 +28,35 @@
// CHECK-BE-HF-32: "[[TC]]{{/|\\\\}}crtend.o" // CHECK-BE-HF-32: "[[TC]]{{/|\\\\}}crtend.o"
// CHECK-BE-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-BE-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Big-endian, hard float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_cs_tree \
// RUN: | FileCheck --check-prefix=CHECK-BE-UC-HF-32 %s
// CHECK-BE-UC-HF-32: "-internal-isystem"
// CHECK-BE-UC-HF-32: "[[TC:[^"]+/lib/gcc/mips-linux-gnu/4.6.3]]/../../../../mips-linux-gnu/include/c++/4.6.3"
// CHECK-BE-UC-HF-32: "-internal-isystem"
// CHECK-BE-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/uclibc"
// CHECK-BE-UC-HF-32: "-internal-isystem"
// CHECK-BE-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/backward"
// CHECK-BE-UC-HF-32: "-internal-externc-isystem"
// CHECK-BE-UC-HF-32: "[[TC]]/include"
// CHECK-BE-UC-HF-32: "-internal-externc-isystem"
// CHECK-BE-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/include"
// CHECK-BE-UC-HF-32: "{{.*}}ld{{(.exe)?}}"
// CHECK-BE-UC-HF-32: "--sysroot=[[TC]]/../../../../mips-linux-gnu/libc/uclibc"
// CHECK-BE-UC-HF-32: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-BE-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-BE-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-BE-UC-HF-32: "[[TC]]/uclibc{{/|\\\\}}crtbegin.o"
// CHECK-BE-UC-HF-32: "-L[[TC]]/uclibc"
// CHECK-BE-UC-HF-32: "-L[[TC]]/../../../../mips-linux-gnu/lib/../lib/uclibc"
// CHECK-BE-UC-HF-32-NOT: "-L[[TC]]"
// CHECK-BE-UC-HF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/lib/../lib"
// CHECK-BE-UC-HF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/lib/../lib"
// CHECK-BE-UC-HF-32: "[[TC]]/uclibc{{/|\\\\}}crtend.o"
// CHECK-BE-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Big-endian, hard float, mips16 // = Big-endian, hard float, mips16
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips16 \ // RUN: --target=mips-linux-gnu -mips16 \
@ -115,6 +144,35 @@
// CHECK-BE-HF-NAN: "[[TC]]/nan2008{{/|\\\\}}crtend.o" // CHECK-BE-HF-NAN: "[[TC]]/nan2008{{/|\\\\}}crtend.o"
// CHECK-BE-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-BE-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Big-endian, hard float, uclibc, nan2008
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -muclibc -mnan=2008 \
// RUN: --gcc-toolchain=%S/Inputs/mips_cs_tree \
// RUN: | FileCheck --check-prefix=CHECK-BE-UC-HF-NAN %s
// CHECK-BE-UC-HF-NAN: "-internal-isystem"
// CHECK-BE-UC-HF-NAN: "[[TC:[^"]+/lib/gcc/mips-linux-gnu/4.6.3]]/../../../../mips-linux-gnu/include/c++/4.6.3"
// CHECK-BE-UC-HF-NAN: "-internal-isystem"
// CHECK-BE-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/uclibc/nan2008"
// CHECK-BE-UC-HF-NAN: "-internal-isystem"
// CHECK-BE-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/backward"
// CHECK-BE-UC-HF-NAN: "-internal-externc-isystem"
// CHECK-BE-UC-HF-NAN: "[[TC]]/include"
// CHECK-BE-UC-HF-NAN: "-internal-externc-isystem"
// CHECK-BE-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/include"
// CHECK-BE-UC-HF-NAN: "{{.*}}ld{{(.exe)?}}"
// CHECK-BE-UC-HF-NAN: "--sysroot=[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008"
// CHECK-BE-UC-HF-NAN: "-dynamic-linker" "/lib/ld-uClibc-mipsn8.so.0"
// CHECK-BE-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-BE-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-BE-UC-HF-NAN: "[[TC]]/uclibc/nan2008{{/|\\\\}}crtbegin.o"
// CHECK-BE-UC-HF-NAN: "-L[[TC]]/uclibc/nan2008"
// CHECK-BE-UC-HF-NAN: "-L[[TC]]/../../../../mips-linux-gnu/lib/../lib/uclibc/nan2008"
// CHECK-BE-UC-HF-NAN-NOT: "-L[[TC]]"
// CHECK-BE-UC-HF-NAN: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/lib/../lib"
// CHECK-BE-UC-HF-NAN: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/usr/lib/../lib"
// CHECK-BE-UC-HF-NAN: "[[TC]]/uclibc/nan2008{{/|\\\\}}crtend.o"
// CHECK-BE-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Big-endian, soft float // = Big-endian, soft float
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -msoft-float \ // RUN: --target=mips-linux-gnu -msoft-float \
@ -144,6 +202,35 @@
// CHECK-BE-SF-32: "[[TC]]/soft-float{{/|\\\\}}crtend.o" // CHECK-BE-SF-32: "[[TC]]/soft-float{{/|\\\\}}crtend.o"
// CHECK-BE-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/soft-float/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-BE-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/soft-float/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Big-endian, soft float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -muclibc -msoft-float \
// RUN: --gcc-toolchain=%S/Inputs/mips_cs_tree \
// RUN: | FileCheck --check-prefix=CHECK-BE-UC-SF-32 %s
// CHECK-BE-UC-SF-32: "-internal-isystem"
// CHECK-BE-UC-SF-32: "[[TC:[^"]+/lib/gcc/mips-linux-gnu/4.6.3]]/../../../../mips-linux-gnu/include/c++/4.6.3"
// CHECK-BE-UC-SF-32: "-internal-isystem"
// CHECK-BE-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/uclibc/soft-float"
// CHECK-BE-UC-SF-32: "-internal-isystem"
// CHECK-BE-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/backward"
// CHECK-BE-UC-SF-32: "-internal-externc-isystem"
// CHECK-BE-UC-SF-32: "[[TC]]/include"
// CHECK-BE-UC-SF-32: "-internal-externc-isystem"
// CHECK-BE-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/include"
// CHECK-BE-UC-SF-32: "{{.*}}ld{{(.exe)?}}"
// CHECK-BE-UC-SF-32: "--sysroot=[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float"
// CHECK-BE-UC-SF-32: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-BE-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-BE-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-BE-UC-SF-32: "[[TC]]/uclibc/soft-float{{/|\\\\}}crtbegin.o"
// CHECK-BE-UC-SF-32: "-L[[TC]]/uclibc/soft-float"
// CHECK-BE-UC-SF-32: "-L[[TC]]/../../../../mips-linux-gnu/lib/../lib/uclibc/soft-float"
// CHECK-BE-UC-SF-32-NOT: "-L[[TC]]"
// CHECK-BE-UC-SF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/lib/../lib"
// CHECK-BE-UC-SF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/usr/lib/../lib"
// CHECK-BE-UC-SF-32: "[[TC]]/uclibc/soft-float{{/|\\\\}}crtend.o"
// CHECK-BE-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Big-endian, soft float, mips16 // = Big-endian, soft float, mips16
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -msoft-float -mips16 \ // RUN: --target=mips-linux-gnu -msoft-float -mips16 \
@ -289,6 +376,35 @@
// CHECK-EL-HF-32: "[[TC]]/el{{/|\\\\}}crtend.o" // CHECK-EL-HF-32: "[[TC]]/el{{/|\\\\}}crtend.o"
// CHECK-EL-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/el/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-EL-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/el/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Little-endian, hard float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mhard-float -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_cs_tree \
// RUN: | FileCheck --check-prefix=CHECK-EL-UC-HF-32 %s
// CHECK-EL-UC-HF-32: "-internal-isystem"
// CHECK-EL-UC-HF-32: "[[TC:[^"]+/lib/gcc/mips-linux-gnu/4.6.3]]/../../../../mips-linux-gnu/include/c++/4.6.3"
// CHECK-EL-UC-HF-32: "-internal-isystem"
// CHECK-EL-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/uclibc/el"
// CHECK-EL-UC-HF-32: "-internal-isystem"
// CHECK-EL-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/backward"
// CHECK-EL-UC-HF-32: "-internal-externc-isystem"
// CHECK-EL-UC-HF-32: "[[TC]]/include"
// CHECK-EL-UC-HF-32: "-internal-externc-isystem"
// CHECK-EL-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/include"
// CHECK-EL-UC-HF-32: "{{.*}}ld{{(.exe)?}}"
// CHECK-EL-UC-HF-32: "--sysroot=[[TC]]/../../../../mips-linux-gnu/libc/uclibc/el"
// CHECK-EL-UC-HF-32: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-EL-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/el/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-EL-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/el/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-EL-UC-HF-32: "[[TC]]/uclibc/el{{/|\\\\}}crtbegin.o"
// CHECK-EL-UC-HF-32: "-L[[TC]]/uclibc/el"
// CHECK-EL-UC-HF-32: "-L[[TC]]/../../../../mips-linux-gnu/lib/../lib/uclibc/el"
// CHECK-EL-UC-HF-32-NOT: "-L[[TC]]"
// CHECK-EL-UC-HF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/el/lib/../lib"
// CHECK-EL-UC-HF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/el/usr/lib/../lib"
// CHECK-EL-UC-HF-32: "[[TC]]/uclibc/el{{/|\\\\}}crtend.o"
// CHECK-EL-UC-HF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/el/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Little-endian, hard float, mips16 // = Little-endian, hard float, mips16
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips16 \ // RUN: --target=mipsel-linux-gnu -mips16 \
@ -376,6 +492,35 @@
// CHECK-EL-HF-NAN: "[[TC]]/nan2008/el{{/|\\\\}}crtend.o" // CHECK-EL-HF-NAN: "[[TC]]/nan2008/el{{/|\\\\}}crtend.o"
// CHECK-EL-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/nan2008/el/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-EL-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/nan2008/el/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Little-endian, hard float, uclibc, nan2008
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -muclibc -mnan=2008 \
// RUN: --gcc-toolchain=%S/Inputs/mips_cs_tree \
// RUN: | FileCheck --check-prefix=CHECK-EL-UC-HF-NAN %s
// CHECK-EL-UC-HF-NAN: "-internal-isystem"
// CHECK-EL-UC-HF-NAN: "[[TC:[^"]+/lib/gcc/mips-linux-gnu/4.6.3]]/../../../../mips-linux-gnu/include/c++/4.6.3"
// CHECK-EL-UC-HF-NAN: "-internal-isystem"
// CHECK-EL-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/uclibc/nan2008/el"
// CHECK-EL-UC-HF-NAN: "-internal-isystem"
// CHECK-EL-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/backward"
// CHECK-EL-UC-HF-NAN: "-internal-externc-isystem"
// CHECK-EL-UC-HF-NAN: "[[TC]]/include"
// CHECK-EL-UC-HF-NAN: "-internal-externc-isystem"
// CHECK-EL-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/include"
// CHECK-EL-UC-HF-NAN: "{{.*}}ld{{(.exe)?}}"
// CHECK-EL-UC-HF-NAN: "--sysroot=[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/el"
// CHECK-EL-UC-HF-NAN: "-dynamic-linker" "/lib/ld-uClibc-mipsn8.so.0"
// CHECK-EL-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/el/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-EL-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/el/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-EL-UC-HF-NAN: "[[TC]]/uclibc/nan2008/el{{/|\\\\}}crtbegin.o"
// CHECK-EL-UC-HF-NAN: "-L[[TC]]/uclibc/nan2008/el"
// CHECK-EL-UC-HF-NAN: "-L[[TC]]/../../../../mips-linux-gnu/lib/../lib/uclibc/nan2008/el"
// CHECK-EL-UC-HF-NAN-NOT: "-L[[TC]]"
// CHECK-EL-UC-HF-NAN: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/el/lib/../lib"
// CHECK-EL-UC-HF-NAN: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/el/usr/lib/../lib"
// CHECK-EL-UC-HF-NAN: "[[TC]]/uclibc/nan2008/el{{/|\\\\}}crtend.o"
// CHECK-EL-UC-HF-NAN: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/nan2008/el/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Little-endian, soft float // = Little-endian, soft float
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mfloat-abi=soft \ // RUN: --target=mipsel-linux-gnu -mfloat-abi=soft \
@ -405,6 +550,35 @@
// CHECK-EL-SF-32: "[[TC]]/soft-float/el{{/|\\\\}}crtend.o" // CHECK-EL-SF-32: "[[TC]]/soft-float/el{{/|\\\\}}crtend.o"
// CHECK-EL-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/soft-float/el/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-EL-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/soft-float/el/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Little-endian, soft float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mfloat-abi=soft -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_cs_tree \
// RUN: | FileCheck --check-prefix=CHECK-EL-UC-SF-32 %s
// CHECK-EL-UC-SF-32: "-internal-isystem"
// CHECK-EL-UC-SF-32: "[[TC:[^"]+/lib/gcc/mips-linux-gnu/4.6.3]]/../../../../mips-linux-gnu/include/c++/4.6.3"
// CHECK-EL-UC-SF-32: "-internal-isystem"
// CHECK-EL-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/uclibc/soft-float/el"
// CHECK-EL-UC-SF-32: "-internal-isystem"
// CHECK-EL-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/include/c++/4.6.3/backward"
// CHECK-EL-UC-SF-32: "-internal-externc-isystem"
// CHECK-EL-UC-SF-32: "[[TC]]/include"
// CHECK-EL-UC-SF-32: "-internal-externc-isystem"
// CHECK-EL-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/usr/include"
// CHECK-EL-UC-SF-32: "{{.*}}ld{{(.exe)?}}"
// CHECK-EL-UC-SF-32: "--sysroot=[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/el"
// CHECK-EL-UC-SF-32: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-EL-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/el/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-EL-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/el/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-EL-UC-SF-32: "[[TC]]/uclibc/soft-float/el{{/|\\\\}}crtbegin.o"
// CHECK-EL-UC-SF-32: "-L[[TC]]/uclibc/soft-float/el"
// CHECK-EL-UC-SF-32: "-L[[TC]]/../../../../mips-linux-gnu/lib/../lib/uclibc/soft-float/el"
// CHECK-EL-UC-SF-32-NOT: "-L[[TC]]"
// CHECK-EL-UC-SF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/el/lib/../lib"
// CHECK-EL-UC-SF-32: "-L[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/el/usr/lib/../lib"
// CHECK-EL-UC-SF-32: "[[TC]]/uclibc/soft-float/el{{/|\\\\}}crtend.o"
// CHECK-EL-UC-SF-32: "[[TC]]/../../../../mips-linux-gnu/libc/uclibc/soft-float/el/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Little-endian, soft float, mips16 // = Little-endian, soft float, mips16
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips16 -msoft-float \ // RUN: --target=mipsel-linux-gnu -mips16 -msoft-float \

View File

@ -297,6 +297,33 @@
// CHECK-BE-HF-32R2: "[[TC]]{{/|\\\\}}crtend.o" // CHECK-BE-HF-32R2: "[[TC]]{{/|\\\\}}crtend.o"
// CHECK-BE-HF-32R2: "[[TC]]/../../../../sysroot/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-BE-HF-32R2: "[[TC]]/../../../../sysroot/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Big-endian, mips32r2, hard float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips32r2 -mhard-float -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_fsf_tree \
// RUN: | FileCheck --check-prefix=CHECK-BE-UC-HF-32R2 %s
// CHECK-BE-UC-HF-32R2: "-internal-isystem"
// CHECK-BE-UC-HF-32R2: "[[TC:[^"]+/lib/gcc/mips-mti-linux-gnu/4.9.0]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0"
// CHECK-BE-UC-HF-32R2: "-internal-isystem"
// CHECK-BE-UC-HF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/uclibc"
// CHECK-BE-UC-HF-32R2: "-internal-isystem"
// CHECK-BE-UC-HF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/backward"
// CHECK-BE-UC-HF-32R2: "-internal-externc-isystem"
// CHECK-BE-UC-HF-32R2: "[[TC]]/include"
// CHECK-BE-UC-HF-32R2: "-internal-externc-isystem"
// CHECK-BE-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/include"
// CHECK-BE-UC-HF-32R2: "{{.*}}ld{{(.exe)?}}"
// CHECK-BE-UC-HF-32R2: "--sysroot=[[TC]]/../../../../sysroot/uclibc"
// CHECK-BE-UC-HF-32R2: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-BE-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-BE-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-BE-UC-HF-32R2: "[[TC]]/uclibc{{/|\\\\}}crtbegin.o"
// CHECK-BE-UC-HF-32R2: "-L[[TC]]/uclibc"
// CHECK-BE-UC-HF-32R2: "-L[[TC]]/../../../../mips-mti-linux-gnu/lib/../lib/uclibc"
// CHECK-BE-UC-HF-32R2: "-L[[TC]]/../../../../sysroot/uclibc/usr/lib/../lib"
// CHECK-BE-UC-HF-32R2: "[[TC]]/uclibc{{/|\\\\}}crtend.o"
// CHECK-BE-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Big-endian, mips32r2, fp64, hard float // = Big-endian, mips32r2, fp64, hard float
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips32r2 -mfp64 -mhard-float \ // RUN: --target=mips-linux-gnu -mips32r2 -mfp64 -mhard-float \
@ -351,6 +378,33 @@
// CHECK-BE-SF-32R2: "[[TC]]/sof{{/|\\\\}}crtend.o" // CHECK-BE-SF-32R2: "[[TC]]/sof{{/|\\\\}}crtend.o"
// CHECK-BE-SF-32R2: "[[TC]]/../../../../sysroot/sof/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-BE-SF-32R2: "[[TC]]/../../../../sysroot/sof/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Big-endian, mips32r2, soft float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips32r2 -msoft-float -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_fsf_tree \
// RUN: | FileCheck --check-prefix=CHECK-BE-UC-SF-32R2 %s
// CHECK-BE-UC-SF-32R2: "-internal-isystem"
// CHECK-BE-UC-SF-32R2: "[[TC:[^"]+/lib/gcc/mips-mti-linux-gnu/4.9.0]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0"
// CHECK-BE-UC-SF-32R2: "-internal-isystem"
// CHECK-BE-UC-SF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/uclibc/sof"
// CHECK-BE-UC-SF-32R2: "-internal-isystem"
// CHECK-BE-UC-SF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/backward"
// CHECK-BE-UC-SF-32R2: "-internal-externc-isystem"
// CHECK-BE-UC-SF-32R2: "[[TC]]/include"
// CHECK-BE-UC-SF-32R2: "-internal-externc-isystem"
// CHECK-BE-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/include"
// CHECK-BE-UC-SF-32R2: "{{.*}}ld{{(.exe)?}}"
// CHECK-BE-UC-SF-32R2: "--sysroot=[[TC]]/../../../../sysroot/uclibc/sof"
// CHECK-BE-UC-SF-32R2: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-BE-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/sof/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-BE-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/sof/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-BE-UC-SF-32R2: "[[TC]]/uclibc/sof{{/|\\\\}}crtbegin.o"
// CHECK-BE-UC-SF-32R2: "-L[[TC]]/uclibc/sof"
// CHECK-BE-UC-SF-32R2: "-L[[TC]]/../../../../mips-mti-linux-gnu/lib/../lib/uclibc/sof"
// CHECK-BE-UC-SF-32R2: "-L[[TC]]/../../../../sysroot/uclibc/sof/usr/lib/../lib"
// CHECK-BE-UC-SF-32R2: "[[TC]]/uclibc/sof{{/|\\\\}}crtend.o"
// CHECK-BE-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/sof/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Big-endian, mips32r2 / mips16, hard float // = Big-endian, mips32r2 / mips16, hard float
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips32r2 -mips16 -mhard-float \ // RUN: --target=mips-linux-gnu -mips32r2 -mips16 -mhard-float \
@ -513,6 +567,33 @@
// CHECK-BE-NAN-32R2: "[[TC]]/nan2008{{/|\\\\}}crtend.o" // CHECK-BE-NAN-32R2: "[[TC]]/nan2008{{/|\\\\}}crtend.o"
// CHECK-BE-NAN-32R2: "[[TC]]/../../../../sysroot/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-BE-NAN-32R2: "[[TC]]/../../../../sysroot/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Big-endian, mips32r2, nan2008, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips32r2 -mnan=2008 -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_fsf_tree \
// RUN: | FileCheck --check-prefix=CHECK-BE-UC-NAN-32R2 %s
// CHECK-BE-UC-NAN-32R2: "-internal-isystem"
// CHECK-BE-UC-NAN-32R2: "[[TC:[^"]+/lib/gcc/mips-mti-linux-gnu/4.9.0]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0"
// CHECK-BE-UC-NAN-32R2: "-internal-isystem"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/uclibc/nan2008"
// CHECK-BE-UC-NAN-32R2: "-internal-isystem"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/backward"
// CHECK-BE-UC-NAN-32R2: "-internal-externc-isystem"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/include"
// CHECK-BE-UC-NAN-32R2: "-internal-externc-isystem"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/include"
// CHECK-BE-UC-NAN-32R2: "{{.*}}ld{{(.exe)?}}"
// CHECK-BE-UC-NAN-32R2: "--sysroot=[[TC]]/../../../../sysroot/uclibc/nan2008"
// CHECK-BE-UC-NAN-32R2: "-dynamic-linker" "/lib/ld-uClibc-mipsn8.so.0"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/nan2008/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/nan2008/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/uclibc/nan2008{{/|\\\\}}crtbegin.o"
// CHECK-BE-UC-NAN-32R2: "-L[[TC]]/uclibc/nan2008"
// CHECK-BE-UC-NAN-32R2: "-L[[TC]]/../../../../mips-mti-linux-gnu/lib/../lib/uclibc/nan2008"
// CHECK-BE-UC-NAN-32R2: "-L[[TC]]/../../../../sysroot/uclibc/nan2008/usr/lib/../lib"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/uclibc/nan2008{{/|\\\\}}crtend.o"
// CHECK-BE-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Big-endian, mips32r2, fp64, nan2008 // = Big-endian, mips32r2, fp64, nan2008
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mips-linux-gnu -mips32r2 -mfp64 -mnan=2008 \ // RUN: --target=mips-linux-gnu -mips32r2 -mfp64 -mnan=2008 \
@ -1566,6 +1647,33 @@
// CHECK-EL-HF-32R2: "[[TC]]/el{{/|\\\\}}crtend.o" // CHECK-EL-HF-32R2: "[[TC]]/el{{/|\\\\}}crtend.o"
// CHECK-EL-HF-32R2: "[[TC]]/../../../../sysroot/el/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-EL-HF-32R2: "[[TC]]/../../../../sysroot/el/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Little-endian, mips32r2, hard float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips32r2 -mhard-float -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_fsf_tree \
// RUN: | FileCheck --check-prefix=CHECK-EL-UC-HF-32R2 %s
// CHECK-EL-UC-HF-32R2: "-internal-isystem"
// CHECK-EL-UC-HF-32R2: "[[TC:[^"]+/lib/gcc/mips-mti-linux-gnu/4.9.0]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0"
// CHECK-EL-UC-HF-32R2: "-internal-isystem"
// CHECK-EL-UC-HF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/uclibc/el"
// CHECK-EL-UC-HF-32R2: "-internal-isystem"
// CHECK-EL-UC-HF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/backward"
// CHECK-EL-UC-HF-32R2: "-internal-externc-isystem"
// CHECK-EL-UC-HF-32R2: "[[TC]]/include"
// CHECK-EL-UC-HF-32R2: "-internal-externc-isystem"
// CHECK-EL-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/include"
// CHECK-EL-UC-HF-32R2: "{{.*}}ld{{(.exe)?}}"
// CHECK-EL-UC-HF-32R2: "--sysroot=[[TC]]/../../../../sysroot/uclibc/el"
// CHECK-EL-UC-HF-32R2: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-EL-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/el/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-EL-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/el/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-EL-UC-HF-32R2: "[[TC]]/uclibc/el{{/|\\\\}}crtbegin.o"
// CHECK-EL-UC-HF-32R2: "-L[[TC]]/uclibc/el"
// CHECK-EL-UC-HF-32R2: "-L[[TC]]/../../../../mips-mti-linux-gnu/lib/../lib/uclibc/el"
// CHECK-EL-UC-HF-32R2: "-L[[TC]]/../../../../sysroot/uclibc/el/usr/lib/../lib"
// CHECK-EL-UC-HF-32R2: "[[TC]]/uclibc/el{{/|\\\\}}crtend.o"
// CHECK-EL-UC-HF-32R2: "[[TC]]/../../../../sysroot/uclibc/el/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Little-endian, mips32r2, fp64, hard float // = Little-endian, mips32r2, fp64, hard float
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips32r2 -mfp64 -mhard-float \ // RUN: --target=mipsel-linux-gnu -mips32r2 -mfp64 -mhard-float \
@ -1620,6 +1728,33 @@
// CHECK-EL-SF-32R2: "[[TC]]/el/sof{{/|\\\\}}crtend.o" // CHECK-EL-SF-32R2: "[[TC]]/el/sof{{/|\\\\}}crtend.o"
// CHECK-EL-SF-32R2: "[[TC]]/../../../../sysroot/el/sof/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-EL-SF-32R2: "[[TC]]/../../../../sysroot/el/sof/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Little-endian, mips32r2, soft float, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips32r2 -msoft-float -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_fsf_tree \
// RUN: | FileCheck --check-prefix=CHECK-EL-UC-SF-32R2 %s
// CHECK-EL-UC-SF-32R2: "-internal-isystem"
// CHECK-EL-UC-SF-32R2: "[[TC:[^"]+/lib/gcc/mips-mti-linux-gnu/4.9.0]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0"
// CHECK-EL-UC-SF-32R2: "-internal-isystem"
// CHECK-EL-UC-SF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/uclibc/el/sof"
// CHECK-EL-UC-SF-32R2: "-internal-isystem"
// CHECK-EL-UC-SF-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/backward"
// CHECK-EL-UC-SF-32R2: "-internal-externc-isystem"
// CHECK-EL-UC-SF-32R2: "[[TC]]/include"
// CHECK-EL-UC-SF-32R2: "-internal-externc-isystem"
// CHECK-EL-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/include"
// CHECK-EL-UC-SF-32R2: "{{.*}}ld{{(.exe)?}}"
// CHECK-EL-UC-SF-32R2: "--sysroot=[[TC]]/../../../../sysroot/uclibc/el/sof"
// CHECK-EL-UC-SF-32R2: "-dynamic-linker" "/lib/ld-uClibc.so.0"
// CHECK-EL-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/el/sof/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-EL-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/el/sof/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-EL-UC-SF-32R2: "[[TC]]/uclibc/el/sof{{/|\\\\}}crtbegin.o"
// CHECK-EL-UC-SF-32R2: "-L[[TC]]/uclibc/el/sof"
// CHECK-EL-UC-SF-32R2: "-L[[TC]]/../../../../mips-mti-linux-gnu/lib/../lib/uclibc/el/sof"
// CHECK-EL-UC-SF-32R2: "-L[[TC]]/../../../../sysroot/uclibc/el/sof/usr/lib/../lib"
// CHECK-EL-UC-SF-32R2: "[[TC]]/uclibc/el/sof{{/|\\\\}}crtend.o"
// CHECK-EL-UC-SF-32R2: "[[TC]]/../../../../sysroot/uclibc/el/sof/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Little-endian, mips32r2 / mips16, hard float // = Little-endian, mips32r2 / mips16, hard float
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips32r2 -mips16 -mhard-float \ // RUN: --target=mipsel-linux-gnu -mips32r2 -mips16 -mhard-float \
@ -1782,6 +1917,33 @@
// CHECK-EL-NAN-32R2: "[[TC]]/el/nan2008{{/|\\\\}}crtend.o" // CHECK-EL-NAN-32R2: "[[TC]]/el/nan2008{{/|\\\\}}crtend.o"
// CHECK-EL-NAN-32R2: "[[TC]]/../../../../sysroot/el/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o" // CHECK-EL-NAN-32R2: "[[TC]]/../../../../sysroot/el/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o"
// //
// = Little-endian, mips32r2, nan2008, uclibc
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips32r2 -mnan=2008 -muclibc \
// RUN: --gcc-toolchain=%S/Inputs/mips_fsf_tree \
// RUN: | FileCheck --check-prefix=CHECK-EL-UC-NAN-32R2 %s
// CHECK-EL-UC-NAN-32R2: "-internal-isystem"
// CHECK-EL-UC-NAN-32R2: "[[TC:[^"]+/lib/gcc/mips-mti-linux-gnu/4.9.0]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0"
// CHECK-EL-UC-NAN-32R2: "-internal-isystem"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/uclibc/el/nan2008"
// CHECK-EL-UC-NAN-32R2: "-internal-isystem"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/../../../../mips-mti-linux-gnu/include/c++/4.9.0/backward"
// CHECK-EL-UC-NAN-32R2: "-internal-externc-isystem"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/include"
// CHECK-EL-UC-NAN-32R2: "-internal-externc-isystem"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/usr/include"
// CHECK-EL-UC-NAN-32R2: "{{.*}}ld{{(.exe)?}}"
// CHECK-EL-UC-NAN-32R2: "--sysroot=[[TC]]/../../../../sysroot/uclibc/el/nan2008"
// CHECK-EL-UC-NAN-32R2: "-dynamic-linker" "/lib/ld-uClibc-mipsn8.so.0"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/el/nan2008/usr/lib/../lib{{/|\\\\}}crt1.o"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/el/nan2008/usr/lib/../lib{{/|\\\\}}crti.o"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/uclibc/el/nan2008{{/|\\\\}}crtbegin.o"
// CHECK-EL-UC-NAN-32R2: "-L[[TC]]/uclibc/el/nan2008"
// CHECK-EL-UC-NAN-32R2: "-L[[TC]]/../../../../mips-mti-linux-gnu/lib/../lib/uclibc/el/nan2008"
// CHECK-EL-UC-NAN-32R2: "-L[[TC]]/../../../../sysroot/uclibc/el/nan2008/usr/lib/../lib"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/uclibc/el/nan2008{{/|\\\\}}crtend.o"
// CHECK-EL-UC-NAN-32R2: "[[TC]]/../../../../sysroot/uclibc/el/nan2008/usr/lib/../lib{{/|\\\\}}crtn.o"
//
// = Little-endian, mips32r2, fp64, nan2008 // = Little-endian, mips32r2, fp64, nan2008
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: --target=mipsel-linux-gnu -mips32r2 -mfp64 -mnan=2008 \ // RUN: --target=mipsel-linux-gnu -mips32r2 -mfp64 -mnan=2008 \