Skip to content

Commit 4b0c68a

Browse files
committed
[LLD] [MinGW] Fall back to using default target if no -m flag given.
On Cygwin at least, GCC is not pasing any -m flag to the linker, so fall back to the default target triple to determine if we need to apply i386-specific behaviors. Fixes #134558
1 parent 4607d39 commit 4b0c68a

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

lld/MinGW/Driver.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,15 @@ searchLibrary(StringRef name, ArrayRef<StringRef> searchPaths, bool bStatic) {
171171
return "";
172172
}
173173

174+
static bool
175+
isI386Target(const opt::InputArgList &args, const Triple &defaultTarget)
176+
{
177+
auto *a = args.getLastArg(OPT_m);
178+
if (a)
179+
return StringRef(a->getValue()) == "i386pe";
180+
return defaultTarget.getArch() == Triple::x86;
181+
}
182+
174183
namespace lld {
175184
namespace coff {
176185
bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
@@ -216,6 +225,8 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
216225
return false;
217226
}
218227

228+
Triple defaultTarget(Triple::normalize(sys::getDefaultTargetTriple()));
229+
219230
std::vector<std::string> linkArgs;
220231
auto add = [&](const Twine &s) { linkArgs.push_back(s.str()); };
221232

@@ -224,7 +235,7 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
224235

225236
if (auto *a = args.getLastArg(OPT_entry)) {
226237
StringRef s = a->getValue();
227-
if (args.getLastArgValue(OPT_m) == "i386pe" && s.starts_with("_"))
238+
if (isI386Target(args, defaultTarget) && s.starts_with("_"))
228239
add("-entry:" + s.substr(1));
229240
else if (!s.empty())
230241
add("-entry:" + s);
@@ -521,7 +532,7 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
521532
for (auto *a : args.filtered(OPT_Xlink))
522533
add(a->getValue());
523534

524-
if (args.getLastArgValue(OPT_m) == "i386pe")
535+
if (isI386Target(args, defaultTarget))
525536
add("-alternatename:__image_base__=___ImageBase");
526537
else
527538
add("-alternatename:__image_base__=__ImageBase");

0 commit comments

Comments
 (0)