[lld] [LLD] [MinGW] Fall back to using default target if no -m flag given. (PR #134700)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 7 11:13:04 PDT 2025
https://github.com/jeremyd2019 updated https://github.com/llvm/llvm-project/pull/134700
>From 2fe7deb52353a3d08a3bfeee9e16d22325ebffe7 Mon Sep 17 00:00:00 2001
From: Jeremy Drake <github at jdrake.com>
Date: Mon, 7 Apr 2025 11:07:04 -0700
Subject: [PATCH] [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
---
lld/MinGW/Driver.cpp | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp
index a77d86b443a6c..222ee3a93ef48 100644
--- a/lld/MinGW/Driver.cpp
+++ b/lld/MinGW/Driver.cpp
@@ -171,6 +171,14 @@ searchLibrary(StringRef name, ArrayRef<StringRef> searchPaths, bool bStatic) {
return "";
}
+static bool isI386Target(const opt::InputArgList &args,
+ const Triple &defaultTarget) {
+ auto *a = args.getLastArg(OPT_m);
+ if (a)
+ return StringRef(a->getValue()) == "i386pe";
+ return defaultTarget.getArch() == Triple::x86;
+}
+
namespace lld {
namespace coff {
bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
@@ -216,6 +224,8 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
return false;
}
+ Triple defaultTarget(Triple::normalize(sys::getDefaultTargetTriple()));
+
std::vector<std::string> linkArgs;
auto add = [&](const Twine &s) { linkArgs.push_back(s.str()); };
@@ -224,7 +234,7 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
if (auto *a = args.getLastArg(OPT_entry)) {
StringRef s = a->getValue();
- if (args.getLastArgValue(OPT_m) == "i386pe" && s.starts_with("_"))
+ if (isI386Target(args, defaultTarget) && s.starts_with("_"))
add("-entry:" + s.substr(1));
else if (!s.empty())
add("-entry:" + s);
@@ -521,7 +531,7 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
for (auto *a : args.filtered(OPT_Xlink))
add(a->getValue());
- if (args.getLastArgValue(OPT_m) == "i386pe")
+ if (isI386Target(args, defaultTarget))
add("-alternatename:__image_base__=___ImageBase");
else
add("-alternatename:__image_base__=__ImageBase");
More information about the llvm-commits
mailing list