[PATCH] D104532: [LLD] [COFF] Fix up missing stdcall decorations in MinGW mode

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 18 06:08:16 PDT 2021


mstorsjo created this revision.
mstorsjo added a reviewer: rnk.
Herald added a subscriber: dang.
mstorsjo requested review of this revision.
Herald added a project: LLVM.

If linking directly against a DLL without an import library, the
DLL export symbols might not contain stdcall decorations.

If we have an undefined symbol with decoration, and we happen to have
a matching undecorated symbol (which either is lazy and can be loaded,
or already defined), then alias it against that instead.

This matches what's done in reverse, when we have a def file
declaring to export a symbol without decoration, but we only have
a defined decorated symbol. In that case we do a fuzzy match
(SymbolTable::findMangle). This case is more straightforward; if we
have a decorated undefined symbol, just strip the decoration and look
for the corresponding undecorated symbol name.

Add warnings and options for either silencing the warning or disabling
the whole feature, corresponding to how ld.bfd does it.

(This feature works for any symbol decoration mismatch, not only when
linking against a DLL directly; ld.bfd also tolerates it anywhere,
and also fixes up mismatches in the other direction, like
SymbolTable::findMangle, for any symbol, not only exports. But in
practice, at least for lld, it would primarily end up used for linking
against DLLs.)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D104532

Files:
  lld/COFF/Config.h
  lld/COFF/Driver.cpp
  lld/COFF/InputFiles.cpp
  lld/COFF/Options.td
  lld/COFF/SymbolTable.cpp
  lld/COFF/SymbolTable.h
  lld/MinGW/Driver.cpp
  lld/MinGW/Options.td
  lld/test/COFF/link-dll-stdcall.s
  lld/test/MinGW/driver.test

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104532.352991.patch
Type: text/x-patch
Size: 12431 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210618/b1f1e5c2/attachment.bin>


More information about the llvm-commits mailing list