diff --git a/llvm/lib/Object/COFFImportFile.cpp b/llvm/lib/Object/COFFImportFile.cpp index 8224a1492502f..477c5bf98249f 100644 --- a/llvm/lib/Object/COFFImportFile.cpp +++ b/llvm/lib/Object/COFFImportFile.cpp @@ -690,12 +690,12 @@ Error writeImportLibrary(StringRef ImportName, StringRef Path, if (ImportType == IMPORT_CODE && isArm64EC(M)) { if (std::optional MangledName = getArm64ECMangledFunctionName(Name)) { - if (ExportName.empty()) { + if (!E.Noname && ExportName.empty()) { NameType = IMPORT_NAME_EXPORTAS; ExportName.swap(Name); } Name = std::move(*MangledName); - } else if (ExportName.empty()) { + } else if (!E.Noname && ExportName.empty()) { NameType = IMPORT_NAME_EXPORTAS; ExportName = std::move(*getArm64ECDemangledFunctionName(Name)); } diff --git a/llvm/test/tools/llvm-lib/arm64ec-implib.test b/llvm/test/tools/llvm-lib/arm64ec-implib.test index 9ce53fe0fea07..e9987d0ca2e64 100644 --- a/llvm/test/tools/llvm-lib/arm64ec-implib.test +++ b/llvm/test/tools/llvm-lib/arm64ec-implib.test @@ -14,6 +14,8 @@ ARMAP-NEXT: Archive EC map ARMAP-NEXT: #expname in test.dll ARMAP-NEXT: #funcexp in test.dll ARMAP-NEXT: #mangledfunc in test.dll +ARMAP-NEXT: #manglednonamefunc in test.dll +ARMAP-NEXT: #nonamefunc in test.dll ARMAP-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test.dll ARMAP-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll @@ -23,13 +25,19 @@ ARMAP-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test.dll ARMAP-NEXT: __imp_aux_expname in test.dll ARMAP-NEXT: __imp_aux_funcexp in test.dll ARMAP-NEXT: __imp_aux_mangledfunc in test.dll +ARMAP-NEXT: __imp_aux_manglednonamefunc in test.dll +ARMAP-NEXT: __imp_aux_nonamefunc in test.dll ARMAP-NEXT: __imp_dataexp in test.dll ARMAP-NEXT: __imp_expname in test.dll ARMAP-NEXT: __imp_funcexp in test.dll ARMAP-NEXT: __imp_mangledfunc in test.dll +ARMAP-NEXT: __imp_manglednonamefunc in test.dll +ARMAP-NEXT: __imp_nonamefunc in test.dll ARMAP-NEXT: expname in test.dll ARMAP-NEXT: funcexp in test.dll ARMAP-NEXT: mangledfunc in test.dll +ARMAP-NEXT: manglednonamefunc in test.dll +ARMAP-NEXT: nonamefunc in test.dll ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll RUN: llvm-readobj test.lib | FileCheck -check-prefix=READOBJ %s @@ -95,6 +103,25 @@ READOBJ-NEXT: Type: data READOBJ-NEXT: Name type: name READOBJ-NEXT: Export name: dataexp READOBJ-NEXT: Symbol: __imp_dataexp +READOBJ-EMPTY: +READOBJ-NEXT: File: test.dll +READOBJ-NEXT: Format: COFF-import-file-ARM64EC +READOBJ-NEXT: Type: code +READOBJ-NEXT: Name type: ordinal +READOBJ-NEXT: Symbol: __imp_nonamefunc +READOBJ-NEXT: Symbol: nonamefunc +READOBJ-NEXT: Symbol: __imp_aux_nonamefunc +READOBJ-NEXT: Symbol: #nonamefunc +READOBJ-EMPTY: +READOBJ-NEXT: File: test.dll +READOBJ-NEXT: Format: COFF-import-file-ARM64EC +READOBJ-NEXT: Type: code +READOBJ-NEXT: Name type: ordinal +READOBJ-NEXT: Symbol: __imp_manglednonamefunc +READOBJ-NEXT: Symbol: manglednonamefunc +READOBJ-NEXT: Symbol: __imp_aux_manglednonamefunc +READOBJ-NEXT: Symbol: #manglednonamefunc + Using -machine:arm64x gives the same output. RUN: llvm-lib -machine:arm64x -def:test.def -out:testx.lib @@ -112,22 +139,28 @@ RUN: llvm-nm --print-armap testx.lib | FileCheck -check-prefix=ARMAPX %s ARMAPX: Archive map ARMAPX-NEXT: #mangledfunc in test.dll +ARMAPX-NEXT: #manglednonamefunc in test.dll ARMAPX-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll ARMAPX-NEXT: __IMPORT_DESCRIPTOR_test in test.dll ARMAPX-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll ARMAPX-NEXT: __imp_#mangledfunc in test.dll +ARMAPX-NEXT: __imp_#manglednonamefunc in test.dll ARMAPX-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll ARMAPX-NEXT: __imp_dataexp in test.dll ARMAPX-NEXT: __imp_expname in test.dll ARMAPX-NEXT: __imp_funcexp in test.dll +ARMAPX-NEXT: __imp_nonamefunc in test.dll ARMAPX-NEXT: expname in test.dll ARMAPX-NEXT: funcexp in test.dll +ARMAPX-NEXT: nonamefunc in test.dll ARMAPX-NEXT: test_NULL_THUNK_DATA in test.dll ARMAPX-EMPTY: ARMAPX-NEXT: Archive EC map ARMAPX-NEXT: #expname in test.dll ARMAPX-NEXT: #funcexp in test.dll ARMAPX-NEXT: #mangledfunc in test.dll +ARMAPX-NEXT: #manglednonamefunc in test.dll +ARMAPX-NEXT: #nonamefunc in test.dll ARMAPX-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test.dll ARMAPX-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll ARMAPX-NEXT: __IMPORT_DESCRIPTOR_test in test.dll @@ -137,13 +170,19 @@ ARMAPX-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test.dll ARMAPX-NEXT: __imp_aux_expname in test.dll ARMAPX-NEXT: __imp_aux_funcexp in test.dll ARMAPX-NEXT: __imp_aux_mangledfunc in test.dll +ARMAPX-NEXT: __imp_aux_manglednonamefunc in test.dll +ARMAPX-NEXT: __imp_aux_nonamefunc in test.dll ARMAPX-NEXT: __imp_dataexp in test.dll ARMAPX-NEXT: __imp_expname in test.dll ARMAPX-NEXT: __imp_funcexp in test.dll ARMAPX-NEXT: __imp_mangledfunc in test.dll +ARMAPX-NEXT: __imp_manglednonamefunc in test.dll +ARMAPX-NEXT: __imp_nonamefunc in test.dll ARMAPX-NEXT: expname in test.dll ARMAPX-NEXT: funcexp in test.dll ARMAPX-NEXT: mangledfunc in test.dll +ARMAPX-NEXT: manglednonamefunc in test.dll +ARMAPX-NEXT: nonamefunc in test.dll ARMAPX-NEXT: test_NULL_THUNK_DATA in test.dll RUN: llvm-readobj testx.lib | FileCheck -check-prefix=READOBJX %s @@ -211,6 +250,24 @@ READOBJX-NEXT: Export name: dataexp READOBJX-NEXT: Symbol: __imp_dataexp READOBJX-EMPTY: READOBJX-NEXT: File: test.dll +READOBJX-NEXT: Format: COFF-import-file-ARM64EC +READOBJX-NEXT: Type: code +READOBJX-NEXT: Name type: ordinal +READOBJX-NEXT: Symbol: __imp_nonamefunc +READOBJX-NEXT: Symbol: nonamefunc +READOBJX-NEXT: Symbol: __imp_aux_nonamefunc +READOBJX-NEXT: Symbol: #nonamefunc +READOBJX-EMPTY: +READOBJX-NEXT: File: test.dll +READOBJX-NEXT: Format: COFF-import-file-ARM64EC +READOBJX-NEXT: Type: code +READOBJX-NEXT: Name type: ordinal +READOBJX-NEXT: Symbol: __imp_manglednonamefunc +READOBJX-NEXT: Symbol: manglednonamefunc +READOBJX-NEXT: Symbol: __imp_aux_manglednonamefunc +READOBJX-NEXT: Symbol: #manglednonamefunc +READOBJX-EMPTY: +READOBJX-NEXT: File: test.dll READOBJX-NEXT: Format: COFF-import-file-ARM64 READOBJX-NEXT: Type: code READOBJX-NEXT: Name type: name @@ -248,6 +305,20 @@ READOBJX-NEXT: Type: data READOBJX-NEXT: Name type: name READOBJX-NEXT: Export name: dataexp READOBJX-NEXT: Symbol: __imp_dataexp +READOBJX-EMPTY: +READOBJX-NEXT: File: test.dll +READOBJX-NEXT: Format: COFF-import-file-ARM64 +READOBJX-NEXT: Type: code +READOBJX-NEXT: Name type: ordinal +READOBJX-NEXT: Symbol: __imp_nonamefunc +READOBJX-NEXT: Symbol: nonamefunc +READOBJX-EMPTY: +READOBJX-NEXT: File: test.dll +READOBJX-NEXT: Format: COFF-import-file-ARM64 +READOBJX-NEXT: Type: code +READOBJX-NEXT: Name type: ordinal +READOBJX-NEXT: Symbol: __imp_#manglednonamefunc +READOBJX-NEXT: Symbol: #manglednonamefunc RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test2.def -out:test2.lib @@ -266,6 +337,8 @@ ARMAPX2-NEXT: Archive EC map ARMAPX2-NEXT: #expname in test2.dll ARMAPX2-NEXT: #funcexp in test2.dll ARMAPX2-NEXT: #mangledfunc in test2.dll +ARMAPX2-NEXT: #manglednonamefunc in test2.dll +ARMAPX2-NEXT: #nonamefunc in test2.dll ARMAPX2-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test2.dll ARMAPX2-NEXT: ?test_cpp_func@@YAHPEAX@Z in test2.dll ARMAPX2-NEXT: __IMPORT_DESCRIPTOR_test2 in test2.dll @@ -275,13 +348,19 @@ ARMAPX2-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test2.dll ARMAPX2-NEXT: __imp_aux_expname in test2.dll ARMAPX2-NEXT: __imp_aux_funcexp in test2.dll ARMAPX2-NEXT: __imp_aux_mangledfunc in test2.dll +ARMAPX2-NEXT: __imp_aux_manglednonamefunc in test2.dll +ARMAPX2-NEXT: __imp_aux_nonamefunc in test2.dll ARMAPX2-NEXT: __imp_dataexp in test2.dll ARMAPX2-NEXT: __imp_expname in test2.dll ARMAPX2-NEXT: __imp_funcexp in test2.dll ARMAPX2-NEXT: __imp_mangledfunc in test2.dll +ARMAPX2-NEXT: __imp_manglednonamefunc in test2.dll +ARMAPX2-NEXT: __imp_nonamefunc in test2.dll ARMAPX2-NEXT: expname in test2.dll ARMAPX2-NEXT: funcexp in test2.dll ARMAPX2-NEXT: mangledfunc in test2.dll +ARMAPX2-NEXT: manglednonamefunc in test2.dll +ARMAPX2-NEXT: nonamefunc in test2.dll ARMAPX2-NEXT: test2_NULL_THUNK_DATA in test2.dll ARMAPX2: test2.dll: @@ -312,6 +391,18 @@ ARMAPX2-NEXT: test2.dll: ARMAPX2-NEXT: 00000000 D __imp_dataexp ARMAPX2-EMPTY: ARMAPX2-NEXT: test2.dll: +ARMAPX2-NEXT: 00000000 T #nonamefunc +ARMAPX2-NEXT: 00000000 T __imp_aux_nonamefunc +ARMAPX2-NEXT: 00000000 T __imp_nonamefunc +ARMAPX2-NEXT: 00000000 T nonamefunc +ARMAPX2-EMPTY: +ARMAPX2-NEXT: test2.dll: +ARMAPX2-NEXT: 00000000 T #manglednonamefunc +ARMAPX2-NEXT: 00000000 T __imp_aux_manglednonamefunc +ARMAPX2-NEXT: 00000000 T __imp_manglednonamefunc +ARMAPX2-NEXT: 00000000 T manglednonamefunc +ARMAPX2-EMPTY: +ARMAPX2-NEXT: test2.dll: ARMAPX2-NEXT: 00000000 T __imp_otherfunc ARMAPX2-NEXT: 00000000 T otherfunc @@ -406,6 +497,8 @@ EXPORTS ?test_cpp_func@@YAHPEAX@Z expname=impname dataexp DATA + nonamefunc @1 NONAME + #manglednonamefunc @2 NONAME #--- test2.def LIBRARY test2.dll