[LLD] [COFF] Implement a GNU/ELF like -wrap option
authorMartin Storsjö <martin@martin.st>
Tue, 6 Oct 2020 10:54:49 +0000 (13:54 +0300)
committerMartin Storsjö <martin@martin.st>
Thu, 15 Oct 2020 15:34:02 +0000 (18:34 +0300)
commita012c704b5e5b60f9d2a7304d27cbc84a3619571
tree4a2055ee8a0e288bad683fdfd896fa10f85b2b59
parent9803cf57d6fe5c7189255ad74b289c2a0d4a8a6a
[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
18 files changed:
lld/COFF/Driver.cpp
lld/COFF/InputFiles.h
lld/COFF/LTO.cpp
lld/COFF/MinGW.cpp
lld/COFF/MinGW.h
lld/COFF/Options.td
lld/COFF/SymbolTable.cpp
lld/COFF/Symbols.h
lld/MinGW/Driver.cpp
lld/MinGW/Options.td
lld/test/COFF/wrap-i386.s [new file with mode: 0644]
lld/test/COFF/wrap-import.ll [new file with mode: 0644]
lld/test/COFF/wrap-lto-1.ll [new file with mode: 0644]
lld/test/COFF/wrap-lto-2.ll [new file with mode: 0644]
lld/test/COFF/wrap-real-missing.s [new file with mode: 0644]
lld/test/COFF/wrap-with-archive.s [new file with mode: 0644]
lld/test/COFF/wrap.s [new file with mode: 0644]
lld/test/MinGW/driver.test