From 74a6cc7ff5df17a843a2dde0bdb479d94fc9f384 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Fri, 23 Aug 2019 11:18:11 +0000 Subject: [PATCH] [llvm-dlltool] Make sure to strip decorations from ExtName for renamed exports ExtName should not be decorated, just like Name. This avoids double decoration on symbols in import libraries that use = for renaming functions. (Weak aliases, which use ==, worked fine with respect to decoration.) Differential Revision: https://reviews.llvm.org/D66617 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369747 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp | 1 + test/tools/llvm-dlltool/coff-decorated.def | 3 +++ 2 files changed, 4 insertions(+) diff --git a/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp b/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp index 603ba826e5e..3b8b25d7eca 100644 --- a/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp +++ b/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp @@ -171,6 +171,7 @@ int llvm::dlltoolDriverMain(llvm::ArrayRef ArgsArr) { // By making sure E.SymbolName != E.Name for decorated symbols, // writeImportLibrary writes these symbols with the type // IMPORT_NAME_UNDECORATE. + E.ExtName = E.ExtName.substr(0, E.ExtName.find('@', 1)); } } diff --git a/test/tools/llvm-dlltool/coff-decorated.def b/test/tools/llvm-dlltool/coff-decorated.def index 3885abca836..e1ca3cbe2d0 100644 --- a/test/tools/llvm-dlltool/coff-decorated.def +++ b/test/tools/llvm-dlltool/coff-decorated.def @@ -9,6 +9,7 @@ StdcallFunction@4 @FastcallFunction@4 StdcallAlias@4==StdcallFunction@4 ??_7exception@@6B@ +StdcallExportName@4=StdcallInternalFunction@4 ; CHECK: Name type: noprefix ; CHECK: Symbol: __imp__CdeclFunction @@ -24,3 +25,5 @@ StdcallAlias@4==StdcallFunction@4 ; CHECK: Symbol: ??_7exception@@6B@ ; CHECK-NM: W _StdcallAlias@4 ; CHECK-NM: U _StdcallFunction@4 +; CHECK: Symbol: __imp__StdcallExportName@4{{$}} +; CHECK: Symbol: _StdcallExportName@4{{$}} -- 2.50.1