Index: include/llvm/Object/COFFImportFile.h =================================================================== --- include/llvm/Object/COFFImportFile.h +++ include/llvm/Object/COFFImportFile.h @@ -80,6 +80,7 @@ bool Data = false; bool Private = false; bool Constant = false; + bool KeepDecoration = false; bool isWeak() { return ExtName.size() && ExtName != Name; Index: lib/Object/COFFImportFile.cpp =================================================================== --- lib/Object/COFFImportFile.cpp +++ lib/Object/COFFImportFile.cpp @@ -590,6 +590,8 @@ StringRef SymbolName = E.SymbolName.empty() ? E.Name : E.SymbolName; ImportNameType NameType = getNameType(SymbolName, E.Name, Machine); + if (E.KeepDecoration) + NameType = IMPORT_NAME; Expected Name = E.ExtName.empty() ? SymbolName : replace(SymbolName, E.Name, E.ExtName); Index: lib/Object/COFFModuleDefinition.cpp =================================================================== --- lib/Object/COFFModuleDefinition.cpp +++ lib/Object/COFFModuleDefinition.cpp @@ -243,6 +243,8 @@ if (Machine == IMAGE_FILE_MACHINE_I386) { if (!isDecorated(E.Name, MingwDef)) E.Name = (std::string("_").append(E.Name)); + else if (!MingwDef) + E.KeepDecoration = true; if (!E.ExtName.empty() && !isDecorated(E.ExtName, MingwDef)) E.ExtName = (std::string("_").append(E.ExtName)); }