Skip to content

Commit fda9245

Browse files
committed
[Clang][MIPS] Create correct linker arguments for Windows toolchains
1 parent e6157bb commit fda9245

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ createTargetCodeGenInfo(CodeGenModule &CGM) {
122122
case llvm::Triple::mipsel:
123123
if (Triple.getOS() == llvm::Triple::NaCl)
124124
return createPNaClTargetCodeGenInfo(CGM);
125+
else if (Triple.getOS() == llvm::Triple::Win32)
126+
return createWindowsMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
125127
return createMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
126128

127129
case llvm::Triple::mips64:

clang/lib/CodeGen/TargetInfo.h

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

505+
std::unique_ptr<TargetCodeGenInfo>
506+
createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
507+
505508
std::unique_ptr<TargetCodeGenInfo>
506509
createMSP430TargetCodeGenInfo(CodeGenModule &CGM);
507510

clang/lib/CodeGen/Targets/Mips.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,24 @@ 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,
121+
llvm::StringRef Value,
122+
llvm::SmallString<32> &Opt) const override {
123+
Opt = "/FAILIFMISMATCH:\"" + Name.str() + "=" + Value.str() + "\"";
124+
}
125+
};
108126
}
109127

110128
void MipsABIInfo::CoerceToIntArgs(
@@ -436,3 +454,8 @@ std::unique_ptr<TargetCodeGenInfo>
436454
CodeGen::createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
437455
return std::make_unique<MIPSTargetCodeGenInfo>(CGM.getTypes(), IsOS32);
438456
}
457+
458+
std::unique_ptr<TargetCodeGenInfo>
459+
CodeGen::createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
460+
return std::make_unique<WindowsMIPSTargetCodeGenInfo>(CGM.getTypes(), IsOS32);
461+
}

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)