diff options
| author | Martin Storsjo <martin@martin.st> | 2018-05-09 09:22:03 +0000 |
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2018-05-09 09:22:03 +0000 |
| commit | 97379ff6b21f8ddda479c964e59369d459658b54 (patch) | |
| tree | 041dae1c627ea90e537a9fbd7effec1517ac13d4 | |
| parent | 284ab80f8d055bb350246c6e28d9a5579d784144 (diff) | |
| download | bcm5719-llvm-97379ff6b21f8ddda479c964e59369d459658b54.tar.gz bcm5719-llvm-97379ff6b21f8ddda479c964e59369d459658b54.zip | |
[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
llvm-svn: 331860
| -rw-r--r-- | lld/COFF/Driver.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 0f9ba79b8dd..c4636c2e262 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -559,7 +559,7 @@ static void createImportLibrary(bool AsLib) { if (!Config->Incremental) { HandleError(writeImportLibrary(LibName, Path, Exports, Config->Machine, - false, Config->MinGW)); + Config->MinGW)); return; } @@ -569,7 +569,7 @@ static void createImportLibrary(bool AsLib) { Path, /*FileSize*/ -1, /*RequiresNullTerminator*/ false); if (!OldBuf) { HandleError(writeImportLibrary(LibName, Path, Exports, Config->Machine, - false, Config->MinGW)); + Config->MinGW)); return; } @@ -580,7 +580,7 @@ static void createImportLibrary(bool AsLib) { EC.message()); if (Error E = writeImportLibrary(LibName, TmpName, Exports, Config->Machine, - false, Config->MinGW)) { + Config->MinGW)) { HandleError(std::move(E)); return; } @@ -626,8 +626,7 @@ static void parseModuleDefs(StringRef Path) { for (COFFShortExport E1 : M.Exports) { Export E2; E2.Name = Saver.save(E1.Name); - if (E1.isWeak()) - E2.ExtName = Saver.save(E1.ExtName); + E2.ExtName = Saver.save(E1.ExtName); E2.Ordinal = E1.Ordinal; E2.Noname = E1.Noname; E2.Data = E1.Data; |

