Skip to content

Commit 7aa4dc9

Browse files
committed
Merging r357506:
------------------------------------------------------------------------ r357506 | atanasyan | 2019-04-02 11:03:31 -0700 (Tue, 02 Apr 2019) | 7 lines [driver][mips] Check both `gnuabi64` and `gnu` suffixes in `getMultiarchTriple` In case of N64 ABI toolchain paths migth have `mips-linux-gnuabi64` or `mips-linux-gnu` directory regardless of selected environment. Check both variants while detecting a multiarch triple. Fix for the bug https://bugs.llvm.org/show_bug.cgi?id=41204 ------------------------------------------------------------------------ llvm-svn: 358947
1 parent 1ff9bed commit 7aa4dc9

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

clang/lib/Driver/ToolChains/Linux.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ static std::string getMultiarchTriple(const Driver &D,
4545
TargetTriple.getEnvironment();
4646
bool IsAndroid = TargetTriple.isAndroid();
4747
bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6;
48+
bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32;
4849

4950
// For most architectures, just use whatever we have rather than trying to be
5051
// clever.
@@ -103,33 +104,37 @@ static std::string getMultiarchTriple(const Driver &D,
103104
return "aarch64_be-linux-gnu";
104105
break;
105106
case llvm::Triple::mips: {
106-
std::string Arch = IsMipsR6 ? "mipsisa32r6" : "mips";
107-
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-gnu"))
108-
return Arch + "-linux-gnu";
107+
std::string MT = IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu";
108+
if (D.getVFS().exists(SysRoot + "/lib/" + MT))
109+
return MT;
109110
break;
110111
}
111112
case llvm::Triple::mipsel: {
112113
if (IsAndroid)
113114
return "mipsel-linux-android";
114-
std::string Arch = IsMipsR6 ? "mipsisa32r6el" : "mipsel";
115-
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-gnu"))
116-
return Arch + "-linux-gnu";
115+
std::string MT = IsMipsR6 ? "mipsisa32r6el-linux-gnu" : "mipsel-linux-gnu";
116+
if (D.getVFS().exists(SysRoot + "/lib/" + MT))
117+
return MT;
117118
break;
118119
}
119120
case llvm::Triple::mips64: {
120-
std::string Arch = IsMipsR6 ? "mipsisa64r6" : "mips64";
121-
std::string ABI = llvm::Triple::getEnvironmentTypeName(TargetEnvironment);
122-
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-" + ABI))
123-
return Arch + "-linux-" + ABI;
121+
std::string MT = std::string(IsMipsR6 ? "mipsisa64r6" : "mips64") +
122+
"-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64");
123+
if (D.getVFS().exists(SysRoot + "/lib/" + MT))
124+
return MT;
125+
if (D.getVFS().exists(SysRoot + "/lib/mips64-linux-gnu"))
126+
return "mips64-linux-gnu";
124127
break;
125128
}
126129
case llvm::Triple::mips64el: {
127130
if (IsAndroid)
128131
return "mips64el-linux-android";
129-
std::string Arch = IsMipsR6 ? "mipsisa64r6el" : "mips64el";
130-
std::string ABI = llvm::Triple::getEnvironmentTypeName(TargetEnvironment);
131-
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-" + ABI))
132-
return Arch + "-linux-" + ABI;
132+
std::string MT = std::string(IsMipsR6 ? "mipsisa64r6el" : "mips64el") +
133+
"-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64");
134+
if (D.getVFS().exists(SysRoot + "/lib/" + MT))
135+
return MT;
136+
if (D.getVFS().exists(SysRoot + "/lib/mips64el-linux-gnu"))
137+
return "mips64el-linux-gnu";
133138
break;
134139
}
135140
case llvm::Triple::ppc:

clang/test/Driver/linux-ld.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,6 +1632,11 @@
16321632
// CHECK-DEBIAN-ML-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib"
16331633
//
16341634
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
1635+
// RUN: --target=mips64-unknown-linux-gnu \
1636+
// RUN: --gcc-toolchain="" \
1637+
// RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \
1638+
// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-ML-MIPS64-GNUABI %s
1639+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
16351640
// RUN: --target=mips64-linux-gnuabi64 -mabi=n64 \
16361641
// RUN: --gcc-toolchain="" \
16371642
// RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \
@@ -1652,6 +1657,11 @@
16521657
// CHECK-DEBIAN-ML-MIPS64-GNUABI: "{{.*}}/usr/lib/gcc/mips64-linux-gnuabi64/4.9/../../../mips64-linux-gnuabi64{{/|\\\\}}crtn.o"
16531658
//
16541659
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
1660+
// RUN: --target=mips64el-unknown-linux-gnu \
1661+
// RUN: --gcc-toolchain="" \
1662+
// RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \
1663+
// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-ML-MIPS64EL-GNUABI %s
1664+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
16551665
// RUN: --target=mips64el-linux-gnuabi64 -mabi=n64 \
16561666
// RUN: --gcc-toolchain="" \
16571667
// RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \

0 commit comments

Comments
 (0)