14 Commits

Author SHA1 Message Date
Martin Storsjo
ad7a1f939c [COFF] Improve correctness of def parsing for GNU features
The operator == used for exporting a function with a different
name in the DLL compared to the name in the import library
(which is useful for adding linker level aliases for function
in the import library) is a feature distinct and different from
the operator = used for exporting a function with a different
name (both in import library and DLL) than in the implementation
producing the DLL.

When creating an import library using dlltool, from a def file that
contains forwards (Func = OtherDll.Func), this shouldn't affect the
produced import library, which should still behave just as if it
was a normal exported function.

This clears a lot of confusion and subtle misunderstandings, and
avoids a parameter that was used to avoid creating weak aliases
when invoked from lld. (This parameter was added previously due to
the existing conflation of the two features.)

Differential Revision: https://reviews.llvm.org/D46245

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331859 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-09 09:21:53 +00:00
Rui Ueyama
6305c5b42c [COFF] Ignore semicolons in module definition identifiers
Patch by David Major.

The NSS project's .def files make heavy use of semicolons in a
frightening attempt at portability:
https://hg.mozilla.org/projects/nss/raw-file/tip/lib/ckfw/capi/nsscapi.def

lld-link was treating the semicolon as part of the export name,
resulting in unresolved symbols. This patch includes ';' in the list of
characters to split on.

Differential Revision: https://reviews.llvm.org/D39968

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319933 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-06 19:18:24 +00:00
Martin Storsjo
a6175a4b97 [COFF] Support ordinals in def files with space between @ and the number
Both GNU ld and MS link.exe support declaring ordinals this way.

A test will be added in lld.

Differential Revision: https://reviews.llvm.org/D39327

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316690 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-26 20:11:32 +00:00
Martin Storsjo
e893335ed8 [COFF] Improve the check for functions that should get an extra underscore
This fixes exporting functions starting with an underscore, and
fully decorated fastcall/vectorcall functions.

Tests will be added in the lld repo.

Differential Revision: https://reviews.llvm.org/D39168

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316316 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-23 09:08:13 +00:00
Martin Storsjo
4c13451fc9 [llvm-dlltool] Fix creating stdcall/fastcall import libraries for i386
Hook up the -k option (that in the original GNU dlltool removes the
@n suffix from the symbol that the final executable ends up linked to).

In llvm-dlltool, make sure that functions end up with the undecorate
name type if this option is set and they are decorated. In mingw, when
creating import libraries from def files instead of creating an import
library as a side effect of linking a DLL, the symbol names in the def
contain the stdcall/fastcall decoration (but no leading underscore).

By setting the undecorate name type, a linker linking to the import
library will omit the decoration from the DLL import entry.

With this in place, mingw-w64 for i386 built with llvm-dlltool/clang
produces import libraries that actually work.

Differential Revision: https://reviews.llvm.org/D36548

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310990 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-16 05:18:36 +00:00
Saleem Abdulrasool
abab2b9ec9 Object: preserve more information about DEF file
Preserve the actual library name as provided by the user.  This is
required to properly replicate link's behaviour about the module import
name handling.  This requires an associated change to lld for updating
the tests for the proper behaviour for the import library module name
handling in various cases.

Associated tests will be part of the lld change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308406 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-19 02:01:22 +00:00
Saleem Abdulrasool
a41a4c6dda Object: handle extensions properly in def files
When given an extension as part of the `library` directive in a def
file, the extension is preserved/honoured by link/lib.  Behave similarly
when parsing the def file.  This requires checking if a native extension
is provided as a keyword parameter.  If no extension is present, append
a standard `.dll` or `.exe` extension.

This is best tested via lld, and I will add tests there as a follow up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308383 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 22:11:00 +00:00
Martell Malone
d888646bf4 llvm: add llvm-dlltool support to the archiver
A PE COFF spec compliant import library generator.
Intended to be used with mingw-w64.

Supports:
PE COFF spec (section 8, Import Library Format)
PE COFF spec (Aux Format 3: Weak Externals)

Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D29892

This reapplies rL308329, which was reverted in rL308374

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308379 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 21:26:38 +00:00
Rui Ueyama
441b4ee1b0 Revert r308329: llvm: add llvm-dlltool support to the archiver
This reverts commit r308329 because it broke buildbots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308374 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 21:07:13 +00:00
Martell Malone
5d7d0e869f llvm: add llvm-dlltool support to the archiver
A PE COFF spec compliant import library generator.
Intended to be used with mingw-w64.

Supports:
PE COFF spec (section 8, Import Library Format)
PE COFF spec (Aux Format 3: Weak Externals)

Reviewed By: ruiu

Differential Revision: https://reviews.llvm.org/D29892

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308329 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 17:39:11 +00:00
Reid Kleckner
8147ef1372 Re-land "COFF: migrate def parser from LLD to LLVM"
This reverts commit r304561 and re-lands r303490 & co.

The fix was to use "SymbolName" when translating LLD's internal export
list to lib/Object's short export struct. The SymbolName reflects the
actual symbol name, which may include fastcall and stdcall mangling bits
not included in the /EXPORT or .def file EXPORTS name:

@@ -434,8 +434,7 @@ std::vector<COFFShortExport> createCOFFShortExportFromConfig() {
   std::vector<COFFShortExport> Exports;
   for (Export &E1 : Config->Exports) {
     COFFShortExport E2;
-    E2.Name = E1.Name;
+    // Use SymbolName, which will have any stdcall or fastcall qualifiers.
+    E2.Name = E1.SymbolName;
     E2.ExtName = E1.ExtName;
     E2.Ordinal = E1.Ordinal;
     E2.Noname = E1.Noname;

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304573 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-02 17:53:06 +00:00
Reid Kleckner
afe7c5a7a6 Revert "COFF: migrate def parser from LLD to LLVM"
This reverts commits r303490, r303491, r303493, and r303494.

This caused http://crbug.com/728726. Essentially, exporting stdcall
functions doesn't appear to work after this change. Reduced test case
soon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304561 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-02 16:26:24 +00:00
Martell Malone
445f6b560d COFF: Fix another StringRef return error
This should appease the lld build bot regression
Following up on rL303493

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303494 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-20 21:54:15 +00:00
Martell Malone
ec718cbf10 COFF: migrate def parser from LLD to LLVM [1/2]
This is split up into two commits.
The will create the DEF parser in LLVM.
Check the following commit to see the removal from LLD

Reviewers: ruiu

Differential Revision: https://reviews.llvm.org/D32689

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303490 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-20 19:56:29 +00:00