diff options
author | Martin Storsjö <martin@martin.st> | 2020-10-06 13:54:49 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2020-10-15 18:34:02 +0300 |
commit | a012c704b5e5b60f9d2a7304d27cbc84a3619571 (patch) | |
tree | 4a2055ee8a0e288bad683fdfd896fa10f85b2b59 /lld/MinGW | |
parent | 9803cf57d6fe5c7189255ad74b289c2a0d4a8a6a (diff) | |
download | llvm-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.cpp | 2 | ||||
-rw-r--r-- | lld/MinGW/Options.td | 2 |
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<["-"], "###">, |