File tree 2 files changed +21
-1
lines changed
lib/ToolDrivers/llvm-dlltool
2 files changed +21
-1
lines changed Original file line number Diff line number Diff line change @@ -148,6 +148,18 @@ int llvm::dlltoolDriverMain(llvm::ArrayRef<const char *> ArgsArr) {
148
148
149
149
std::string Path = Args.getLastArgValue (OPT_l);
150
150
151
+ // If ExtName is set (if the "ExtName = Name" syntax was used), overwrite
152
+ // Name with ExtName and clear ExtName. When only creating an import
153
+ // library and not linking, the internal name is irrelevant. This avoids
154
+ // cases where writeImportLibrary tries to transplant decoration from
155
+ // symbol decoration onto ExtName.
156
+ for (COFFShortExport& E : Def->Exports ) {
157
+ if (!E.ExtName .empty ()) {
158
+ E.Name = E.ExtName ;
159
+ E.ExtName .clear ();
160
+ }
161
+ }
162
+
151
163
if (Machine == IMAGE_FILE_MACHINE_I386 && Args.getLastArg (OPT_k)) {
152
164
for (COFFShortExport& E : Def->Exports ) {
153
165
if (!E.AliasTarget .empty () || (!E.Name .empty () && E.Name [0 ] == ' ?' ))
@@ -162,7 +174,6 @@ int llvm::dlltoolDriverMain(llvm::ArrayRef<const char *> ArgsArr) {
162
174
// By making sure E.SymbolName != E.Name for decorated symbols,
163
175
// writeImportLibrary writes these symbols with the type
164
176
// IMPORT_NAME_UNDECORATE.
165
- E.ExtName = E.ExtName .substr (0 , E.ExtName .find (' @' , 1 ));
166
177
}
167
178
}
168
179
Original file line number Diff line number Diff line change @@ -10,6 +10,8 @@ StdcallFunction@4
10
10
StdcallAlias@4==StdcallFunction@4
11
11
??_7exception@@6B@
12
12
StdcallExportName@4=StdcallInternalFunction@4
13
+ OtherStdcallExportName@4=CdeclInternalFunction
14
+ CdeclExportName=StdcallInternalFunction@4
13
15
14
16
; CHECK: Name type: noprefix
15
17
; CHECK: Symbol: __imp__CdeclFunction
@@ -25,5 +27,12 @@ StdcallExportName@4=StdcallInternalFunction@4
25
27
; CHECK: Symbol: ??_7exception@@6B@
26
28
; CHECK-NM: W _StdcallAlias@4
27
29
; CHECK-NM: U _StdcallFunction@4
30
+ ; CHECK: Name type: undecorate
28
31
; CHECK: Symbol: __imp__StdcallExportName@4{{$}}
29
32
; CHECK: Symbol: _StdcallExportName@4{{$}}
33
+ ; CHECK: Name type: undecorate
34
+ ; CHECK: Symbol: __imp__OtherStdcallExportName@4{{$}}
35
+ ; CHECK: Symbol: _OtherStdcallExportName@4{{$}}
36
+ ; CHECK: Name type: noprefix
37
+ ; CHECK: Symbol: __imp__CdeclExportName
38
+ ; CHECK: Symbol: _CdeclExportName
You can’t perform that action at this time.
0 commit comments