summaryrefslogtreecommitdiff
path: root/lld/MinGW
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2020-10-06 13:54:49 +0300
committerMartin Storsjö <martin@martin.st>2020-10-15 18:34:02 +0300
commita012c704b5e5b60f9d2a7304d27cbc84a3619571 (patch)
tree4a2055ee8a0e288bad683fdfd896fa10f85b2b59 /lld/MinGW
parent9803cf57d6fe5c7189255ad74b289c2a0d4a8a6a (diff)
downloadllvm-a012c704b5e5b60f9d2a7304d27cbc84a3619571.tar.gz
[LLD] [COFF] Implement a GNU/ELF like -wrap option
Add a simple forwarding option in the MinGW frontend, and implement the private -wrap option in the COFF linker. The feature in lld-link isn't gated by the -lldmingw option, but the option is left as a private, undocumented option primarily used by the MinGW driver. The implementation is significantly based on the support for --wrap in the ELF linker, but many small nuance details are different between the ELF and COFF linkers, ending up with more than a few implementation differences. This fixes https://bugs.llvm.org/show_bug.cgi?id=47384. Differential Revision: https://reviews.llvm.org/D89004
Diffstat (limited to 'lld/MinGW')
-rw-r--r--lld/MinGW/Driver.cpp2
-rw-r--r--lld/MinGW/Options.td2
2 files changed, 4 insertions, 0 deletions
diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp
index 0a138d8a2303..fae5cb77ec5d 100644
--- a/lld/MinGW/Driver.cpp
+++ b/lld/MinGW/Driver.cpp
@@ -377,6 +377,8 @@ bool mingw::link(ArrayRef<const char *> argsArr, bool canExitEarly,
add("-includeoptional:" + StringRef(a->getValue()));
for (auto *a : args.filtered(OPT_delayload))
add("-delayload:" + StringRef(a->getValue()));
+ for (auto *a : args.filtered(OPT_wrap))
+ add("-wrap:" + StringRef(a->getValue()));
std::vector<StringRef> searchPaths;
for (auto *a : args.filtered(OPT_L)) {
diff --git a/lld/MinGW/Options.td b/lld/MinGW/Options.td
index 0604b458193c..7bc5936d58d6 100644
--- a/lld/MinGW/Options.td
+++ b/lld/MinGW/Options.td
@@ -91,6 +91,8 @@ defm whole_archive: B<"whole-archive",
def v: Flag<["-"], "v">, HelpText<"Display the version number">;
def verbose: F<"verbose">, HelpText<"Verbose mode">;
def version: F<"version">, HelpText<"Display the version number and exit">;
+defm wrap: Eq<"wrap", "Use wrapper functions for symbol">,
+ MetaVarName<"<symbol>">;
// LLD specific options
def _HASH_HASH_HASH : Flag<["-"], "###">,