mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-14 17:06:38 +00:00
[LLD] [MinGW] Fall back to using default target if no -m flag given. (#134700)
On Cygwin at least, GCC is not passing 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
This commit is contained in:
parent
db22909089
commit
e4a79b7122
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user