Skip to content

Commit 946baa3

Browse files
committed
[Clang][MIPS] Create correct linker arguments for Windows toolchains
1 parent 0575815 commit 946baa3

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ createTargetCodeGenInfo(CodeGenModule &CGM) {
119119
case llvm::Triple::mipsel:
120120
if (Triple.getOS() == llvm::Triple::NaCl)
121121
return createPNaClTargetCodeGenInfo(CGM);
122+
else if (Triple.getOS() == llvm::Triple::Win32)
123+
return createWindowsMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
122124
return createMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
123125

124126
case llvm::Triple::mips64:

clang/lib/CodeGen/TargetInfo.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,9 @@ createM68kTargetCodeGenInfo(CodeGenModule &CGM);
522522
std::unique_ptr<TargetCodeGenInfo>
523523
createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
524524

525+
std::unique_ptr<TargetCodeGenInfo>
526+
createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
527+
525528
std::unique_ptr<TargetCodeGenInfo>
526529
createMSP430TargetCodeGenInfo(CodeGenModule &CGM);
527530

clang/lib/CodeGen/Targets/Mips.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,23 @@ class MIPSTargetCodeGenInfo : public TargetCodeGenInfo {
105105
return SizeOfUnwindException;
106106
}
107107
};
108+
109+
class WindowsMIPSTargetCodeGenInfo : public MIPSTargetCodeGenInfo {
110+
public:
111+
WindowsMIPSTargetCodeGenInfo(CodeGenTypes &CGT, bool IsO32)
112+
: MIPSTargetCodeGenInfo(CGT, IsO32) {}
113+
114+
void getDependentLibraryOption(llvm::StringRef Lib,
115+
llvm::SmallString<24> &Opt) const override {
116+
Opt = "/DEFAULTLIB:";
117+
Opt += qualifyWindowsLibrary(Lib);
118+
}
119+
120+
void getDetectMismatchOption(llvm::StringRef Name, llvm::StringRef Value,
121+
llvm::SmallString<32> &Opt) const override {
122+
Opt = "/FAILIFMISMATCH:\"" + Name.str() + "=" + Value.str() + "\"";
123+
}
124+
};
108125
}
109126

110127
void MipsABIInfo::CoerceToIntArgs(
@@ -436,3 +453,8 @@ std::unique_ptr<TargetCodeGenInfo>
436453
CodeGen::createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
437454
return std::make_unique<MIPSTargetCodeGenInfo>(CGM.getTypes(), IsOS32);
438455
}
456+
457+
std::unique_ptr<TargetCodeGenInfo>
458+
CodeGen::createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
459+
return std::make_unique<WindowsMIPSTargetCodeGenInfo>(CGM.getTypes(), IsOS32);
460+
}

clang/test/CodeGen/pragma-comment.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// RUN: %clang_cc1 %s -triple x86_64-scei-ps4 -fms-extensions -emit-llvm -o - | FileCheck -check-prefix ELF %s --implicit-check-not llvm.linker.options
77
// RUN: %clang_cc1 %s -triple x86_64-sie-ps5 -fms-extensions -emit-llvm -o - | FileCheck -check-prefix ELF %s --implicit-check-not llvm.linker.options
88
// RUN: %clang_cc1 %s -triple aarch64-windows-msvc -fms-extensions -emit-llvm -o - | FileCheck %s
9+
// RUN: %clang_cc1 %s -triple mipsel-windows-msvc -fms-extensions -emit-llvm -o - | FileCheck %s
910

1011
#pragma comment(lib, "msvcrt.lib")
1112
#pragma comment(lib, "kernel32")

0 commit comments

Comments
 (0)