summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2018-05-09 09:22:03 +0000
committerMartin Storsjo <martin@martin.st>2018-05-09 09:22:03 +0000
commit97379ff6b21f8ddda479c964e59369d459658b54 (patch)
tree041dae1c627ea90e537a9fbd7effec1517ac13d4
parent284ab80f8d055bb350246c6e28d9a5579d784144 (diff)
downloadbcm5719-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.cpp9
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;
OpenPOWER on IntegriCloud