1Test creating ARM64EC importlib. 2 3RUN: split-file %s %t.dir && cd %t.dir 4RUN: llvm-lib -machine:arm64ec -def:test.def -out:test.lib 5 6RUN: llvm-nm --print-armap test.lib | FileCheck -check-prefix=ARMAP %s 7 8ARMAP: Archive map 9ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll 10ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll 11ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll 12ARMAP-EMPTY: 13ARMAP-NEXT: Archive EC map 14ARMAP-NEXT: #expname in test.dll 15ARMAP-NEXT: #funcexp in test.dll 16ARMAP-NEXT: #mangledfunc in test.dll 17ARMAP-NEXT: #manglednonamefunc in test.dll 18ARMAP-NEXT: #nonamefunc in test.dll 19ARMAP-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test.dll 20ARMAP-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll 21ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll 22ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll 23ARMAP-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll 24ARMAP-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test.dll 25ARMAP-NEXT: __imp_aux_expname in test.dll 26ARMAP-NEXT: __imp_aux_funcexp in test.dll 27ARMAP-NEXT: __imp_aux_mangledfunc in test.dll 28ARMAP-NEXT: __imp_aux_manglednonamefunc in test.dll 29ARMAP-NEXT: __imp_aux_nonamefunc in test.dll 30ARMAP-NEXT: __imp_dataexp in test.dll 31ARMAP-NEXT: __imp_expname in test.dll 32ARMAP-NEXT: __imp_funcexp in test.dll 33ARMAP-NEXT: __imp_mangledfunc in test.dll 34ARMAP-NEXT: __imp_manglednonamefunc in test.dll 35ARMAP-NEXT: __imp_nonamefunc in test.dll 36ARMAP-NEXT: expname in test.dll 37ARMAP-NEXT: funcexp in test.dll 38ARMAP-NEXT: mangledfunc in test.dll 39ARMAP-NEXT: manglednonamefunc in test.dll 40ARMAP-NEXT: nonamefunc in test.dll 41ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll 42 43RUN: llvm-readobj test.lib | FileCheck -check-prefix=READOBJ %s 44 45READOBJ: File: test{{.*}}.lib(test.dll) 46READOBJ-NEXT: Format: COFF-ARM64{{$}} 47READOBJ-NEXT: Arch: aarch64 48READOBJ-NEXT: AddressSize: 64bit 49READOBJ-EMPTY: 50READOBJ-NEXT: File: test{{.*}}.lib(test.dll) 51READOBJ-NEXT: Format: COFF-ARM64{{$}} 52READOBJ-NEXT: Arch: aarch64 53READOBJ-NEXT: AddressSize: 64bit 54READOBJ-EMPTY: 55READOBJ-NEXT: File: test{{.*}}.lib(test.dll) 56READOBJ-NEXT: Format: COFF-ARM64{{$}} 57READOBJ-NEXT: Arch: aarch64 58READOBJ-NEXT: AddressSize: 64bit 59READOBJ-EMPTY: 60READOBJ-NEXT: File: test.dll 61READOBJ-NEXT: Format: COFF-import-file-ARM64EC 62READOBJ-NEXT: Type: code 63READOBJ-NEXT: Name type: export as 64READOBJ-NEXT: Export name: funcexp 65READOBJ-NEXT: Symbol: __imp_funcexp 66READOBJ-NEXT: Symbol: funcexp 67READOBJ-NEXT: Symbol: __imp_aux_funcexp 68READOBJ-NEXT: Symbol: #funcexp 69READOBJ-EMPTY: 70READOBJ-NEXT: File: test.dll 71READOBJ-NEXT: Format: COFF-import-file-ARM64EC 72READOBJ-NEXT: Type: code 73READOBJ-NEXT: Name type: export as 74READOBJ-NEXT: Export name: mangledfunc 75READOBJ-NEXT: Symbol: __imp_mangledfunc 76READOBJ-NEXT: Symbol: mangledfunc 77READOBJ-NEXT: Symbol: __imp_aux_mangledfunc 78READOBJ-NEXT: Symbol: #mangledfunc 79READOBJ-EMPTY: 80READOBJ-NEXT: File: test.dll 81READOBJ-NEXT: Format: COFF-import-file-ARM64EC 82READOBJ-NEXT: Type: code 83READOBJ-NEXT: Name type: export as 84READOBJ-NEXT: Export name: ?test_cpp_func@@YAHPEAX@Z 85READOBJ-NEXT: Symbol: __imp_?test_cpp_func@@YAHPEAX@Z 86READOBJ-NEXT: Symbol: ?test_cpp_func@@YAHPEAX@Z 87READOBJ-NEXT: Symbol: __imp_aux_?test_cpp_func@@YAHPEAX@Z 88READOBJ-NEXT: Symbol: ?test_cpp_func@@$$hYAHPEAX@Z 89READOBJ-EMPTY: 90READOBJ-NEXT: File: test.dll 91READOBJ-NEXT: Format: COFF-import-file-ARM64EC 92READOBJ-NEXT: Type: code 93READOBJ-NEXT: Name type: export as 94READOBJ-NEXT: Export name: expname 95READOBJ-NEXT: Symbol: __imp_expname 96READOBJ-NEXT: Symbol: expname 97READOBJ-NEXT: Symbol: __imp_aux_expname 98READOBJ-NEXT: Symbol: #expname 99READOBJ-EMPTY: 100READOBJ-NEXT: File: test.dll 101READOBJ-NEXT: Format: COFF-import-file-ARM64EC 102READOBJ-NEXT: Type: data 103READOBJ-NEXT: Name type: name 104READOBJ-NEXT: Export name: dataexp 105READOBJ-NEXT: Symbol: __imp_dataexp 106READOBJ-EMPTY: 107READOBJ-NEXT: File: test.dll 108READOBJ-NEXT: Format: COFF-import-file-ARM64EC 109READOBJ-NEXT: Type: code 110READOBJ-NEXT: Name type: ordinal 111READOBJ-NEXT: Symbol: __imp_nonamefunc 112READOBJ-NEXT: Symbol: nonamefunc 113READOBJ-NEXT: Symbol: __imp_aux_nonamefunc 114READOBJ-NEXT: Symbol: #nonamefunc 115READOBJ-EMPTY: 116READOBJ-NEXT: File: test.dll 117READOBJ-NEXT: Format: COFF-import-file-ARM64EC 118READOBJ-NEXT: Type: code 119READOBJ-NEXT: Name type: ordinal 120READOBJ-NEXT: Symbol: __imp_manglednonamefunc 121READOBJ-NEXT: Symbol: manglednonamefunc 122READOBJ-NEXT: Symbol: __imp_aux_manglednonamefunc 123READOBJ-NEXT: Symbol: #manglednonamefunc 124 125 126Using -machine:arm64x gives the same output. 127RUN: llvm-lib -machine:arm64x -def:test.def -out:testx.lib 128RUN: llvm-nm --print-armap testx.lib | FileCheck -check-prefix=ARMAP %s 129RUN: llvm-readobj testx.lib | FileCheck -check-prefix=READOBJ %s 130 131Creating a new lib containing the existing lib: 132RUN: llvm-lib -machine:arm64ec test.lib -out:test2.lib 133RUN: llvm-nm --print-armap test2.lib | FileCheck -check-prefix=ARMAP %s 134 135 136RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test.def -out:testx.lib 137 138RUN: llvm-nm --print-armap testx.lib | FileCheck -check-prefix=ARMAPX %s 139 140ARMAPX: Archive map 141ARMAPX-NEXT: #mangledfunc in test.dll 142ARMAPX-NEXT: #manglednonamefunc in test.dll 143ARMAPX-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll 144ARMAPX-NEXT: __IMPORT_DESCRIPTOR_test in test.dll 145ARMAPX-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll 146ARMAPX-NEXT: __imp_#mangledfunc in test.dll 147ARMAPX-NEXT: __imp_#manglednonamefunc in test.dll 148ARMAPX-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll 149ARMAPX-NEXT: __imp_dataexp in test.dll 150ARMAPX-NEXT: __imp_expname in test.dll 151ARMAPX-NEXT: __imp_funcexp in test.dll 152ARMAPX-NEXT: __imp_nonamefunc in test.dll 153ARMAPX-NEXT: expname in test.dll 154ARMAPX-NEXT: funcexp in test.dll 155ARMAPX-NEXT: nonamefunc in test.dll 156ARMAPX-NEXT: test_NULL_THUNK_DATA in test.dll 157ARMAPX-EMPTY: 158ARMAPX-NEXT: Archive EC map 159ARMAPX-NEXT: #expname in test.dll 160ARMAPX-NEXT: #funcexp in test.dll 161ARMAPX-NEXT: #mangledfunc in test.dll 162ARMAPX-NEXT: #manglednonamefunc in test.dll 163ARMAPX-NEXT: #nonamefunc in test.dll 164ARMAPX-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test.dll 165ARMAPX-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll 166ARMAPX-NEXT: __IMPORT_DESCRIPTOR_test in test.dll 167ARMAPX-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll 168ARMAPX-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll 169ARMAPX-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test.dll 170ARMAPX-NEXT: __imp_aux_expname in test.dll 171ARMAPX-NEXT: __imp_aux_funcexp in test.dll 172ARMAPX-NEXT: __imp_aux_mangledfunc in test.dll 173ARMAPX-NEXT: __imp_aux_manglednonamefunc in test.dll 174ARMAPX-NEXT: __imp_aux_nonamefunc in test.dll 175ARMAPX-NEXT: __imp_dataexp in test.dll 176ARMAPX-NEXT: __imp_expname in test.dll 177ARMAPX-NEXT: __imp_funcexp in test.dll 178ARMAPX-NEXT: __imp_mangledfunc in test.dll 179ARMAPX-NEXT: __imp_manglednonamefunc in test.dll 180ARMAPX-NEXT: __imp_nonamefunc in test.dll 181ARMAPX-NEXT: expname in test.dll 182ARMAPX-NEXT: funcexp in test.dll 183ARMAPX-NEXT: mangledfunc in test.dll 184ARMAPX-NEXT: manglednonamefunc in test.dll 185ARMAPX-NEXT: nonamefunc in test.dll 186ARMAPX-NEXT: test_NULL_THUNK_DATA in test.dll 187 188RUN: llvm-readobj testx.lib | FileCheck -check-prefix=READOBJX %s 189 190READOBJX: File: testx.lib(test.dll) 191READOBJX-NEXT: Format: COFF-ARM64 192READOBJX-NEXT: Arch: aarch64 193READOBJX-NEXT: AddressSize: 64bit 194READOBJX-EMPTY: 195READOBJX-NEXT: File: testx.lib(test.dll) 196READOBJX-NEXT: Format: COFF-ARM64 197READOBJX-NEXT: Arch: aarch64 198READOBJX-NEXT: AddressSize: 64bit 199READOBJX-EMPTY: 200READOBJX-NEXT: File: testx.lib(test.dll) 201READOBJX-NEXT: Format: COFF-ARM64 202READOBJX-NEXT: Arch: aarch64 203READOBJX-NEXT: AddressSize: 64bit 204READOBJX-EMPTY: 205READOBJX-NEXT: File: test.dll 206READOBJX-NEXT: Format: COFF-import-file-ARM64EC 207READOBJX-NEXT: Type: code 208READOBJX-NEXT: Name type: export as 209READOBJX-NEXT: Export name: funcexp 210READOBJX-NEXT: Symbol: __imp_funcexp 211READOBJX-NEXT: Symbol: funcexp 212READOBJX-NEXT: Symbol: __imp_aux_funcexp 213READOBJX-NEXT: Symbol: #funcexp 214READOBJX-EMPTY: 215READOBJX-NEXT: File: test.dll 216READOBJX-NEXT: Format: COFF-import-file-ARM64EC 217READOBJX-NEXT: Type: code 218READOBJX-NEXT: Name type: export as 219READOBJX-NEXT: Export name: mangledfunc 220READOBJX-NEXT: Symbol: __imp_mangledfunc 221READOBJX-NEXT: Symbol: mangledfunc 222READOBJX-NEXT: Symbol: __imp_aux_mangledfunc 223READOBJX-NEXT: Symbol: #mangledfunc 224READOBJX-EMPTY: 225READOBJX-NEXT: File: test.dll 226READOBJX-NEXT: Format: COFF-import-file-ARM64EC 227READOBJX-NEXT: Type: code 228READOBJX-NEXT: Name type: export as 229READOBJX-NEXT: Export name: ?test_cpp_func@@YAHPEAX@Z 230READOBJX-NEXT: Symbol: __imp_?test_cpp_func@@YAHPEAX@Z 231READOBJX-NEXT: Symbol: ?test_cpp_func@@YAHPEAX@Z 232READOBJX-NEXT: Symbol: __imp_aux_?test_cpp_func@@YAHPEAX@Z 233READOBJX-NEXT: Symbol: ?test_cpp_func@@$$hYAHPEAX@Z 234READOBJX-EMPTY: 235READOBJX-NEXT: File: test.dll 236READOBJX-NEXT: Format: COFF-import-file-ARM64EC 237READOBJX-NEXT: Type: code 238READOBJX-NEXT: Name type: export as 239READOBJX-NEXT: Export name: expname 240READOBJX-NEXT: Symbol: __imp_expname 241READOBJX-NEXT: Symbol: expname 242READOBJX-NEXT: Symbol: __imp_aux_expname 243READOBJX-NEXT: Symbol: #expname 244READOBJX-EMPTY: 245READOBJX-NEXT: File: test.dll 246READOBJX-NEXT: Format: COFF-import-file-ARM64EC 247READOBJX-NEXT: Type: data 248READOBJX-NEXT: Name type: name 249READOBJX-NEXT: Export name: dataexp 250READOBJX-NEXT: Symbol: __imp_dataexp 251READOBJX-EMPTY: 252READOBJX-NEXT: File: test.dll 253READOBJX-NEXT: Format: COFF-import-file-ARM64EC 254READOBJX-NEXT: Type: code 255READOBJX-NEXT: Name type: ordinal 256READOBJX-NEXT: Symbol: __imp_nonamefunc 257READOBJX-NEXT: Symbol: nonamefunc 258READOBJX-NEXT: Symbol: __imp_aux_nonamefunc 259READOBJX-NEXT: Symbol: #nonamefunc 260READOBJX-EMPTY: 261READOBJX-NEXT: File: test.dll 262READOBJX-NEXT: Format: COFF-import-file-ARM64EC 263READOBJX-NEXT: Type: code 264READOBJX-NEXT: Name type: ordinal 265READOBJX-NEXT: Symbol: __imp_manglednonamefunc 266READOBJX-NEXT: Symbol: manglednonamefunc 267READOBJX-NEXT: Symbol: __imp_aux_manglednonamefunc 268READOBJX-NEXT: Symbol: #manglednonamefunc 269READOBJX-EMPTY: 270READOBJX-NEXT: File: test.dll 271READOBJX-NEXT: Format: COFF-import-file-ARM64 272READOBJX-NEXT: Type: code 273READOBJX-NEXT: Name type: name 274READOBJX-NEXT: Export name: funcexp 275READOBJX-NEXT: Symbol: __imp_funcexp 276READOBJX-NEXT: Symbol: funcexp 277READOBJX-EMPTY: 278READOBJX-NEXT: File: test.dll 279READOBJX-NEXT: Format: COFF-import-file-ARM64 280READOBJX-NEXT: Type: code 281READOBJX-NEXT: Name type: name 282READOBJX-NEXT: Export name: #mangledfunc 283READOBJX-NEXT: Symbol: __imp_#mangledfunc 284READOBJX-NEXT: Symbol: #mangledfunc 285READOBJX-EMPTY: 286READOBJX-NEXT: File: test.dll 287READOBJX-NEXT: Format: COFF-import-file-ARM64 288READOBJX-NEXT: Type: code 289READOBJX-NEXT: Name type: name 290READOBJX-NEXT: Export name: ?test_cpp_func@@YAHPEAX@Z 291READOBJX-NEXT: Symbol: __imp_?test_cpp_func@@YAHPEAX@Z 292READOBJX-NEXT: Symbol: ?test_cpp_func@@YAHPEAX@Z 293READOBJX-EMPTY: 294READOBJX-NEXT: File: test.dll 295READOBJX-NEXT: Format: COFF-import-file-ARM64 296READOBJX-NEXT: Type: code 297READOBJX-NEXT: Name type: name 298READOBJX-NEXT: Export name: expname 299READOBJX-NEXT: Symbol: __imp_expname 300READOBJX-NEXT: Symbol: expname 301READOBJX-EMPTY: 302READOBJX-NEXT: File: test.dll 303READOBJX-NEXT: Format: COFF-import-file-ARM64 304READOBJX-NEXT: Type: data 305READOBJX-NEXT: Name type: name 306READOBJX-NEXT: Export name: dataexp 307READOBJX-NEXT: Symbol: __imp_dataexp 308READOBJX-EMPTY: 309READOBJX-NEXT: File: test.dll 310READOBJX-NEXT: Format: COFF-import-file-ARM64 311READOBJX-NEXT: Type: code 312READOBJX-NEXT: Name type: ordinal 313READOBJX-NEXT: Symbol: __imp_nonamefunc 314READOBJX-NEXT: Symbol: nonamefunc 315READOBJX-EMPTY: 316READOBJX-NEXT: File: test.dll 317READOBJX-NEXT: Format: COFF-import-file-ARM64 318READOBJX-NEXT: Type: code 319READOBJX-NEXT: Name type: ordinal 320READOBJX-NEXT: Symbol: __imp_#manglednonamefunc 321READOBJX-NEXT: Symbol: #manglednonamefunc 322 323 324RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test2.def -out:test2.lib 325RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test2.def -out:test2x.lib 326RUN: llvm-nm --print-armap test2.lib | FileCheck -check-prefix=ARMAPX2 %s 327RUN: llvm-nm --print-armap test2x.lib | FileCheck -check-prefix=ARMAPX2 %s 328 329ARMAPX2: Archive map 330ARMAPX2-NEXT: __IMPORT_DESCRIPTOR_test2 in test2.dll 331ARMAPX2-NEXT: __NULL_IMPORT_DESCRIPTOR in test2.dll 332ARMAPX2-NEXT: __imp_otherfunc in test2.dll 333ARMAPX2-NEXT: otherfunc in test2.dll 334ARMAPX2-NEXT: test2_NULL_THUNK_DATA in test2.dll 335ARMAPX2-EMPTY: 336ARMAPX2-NEXT: Archive EC map 337ARMAPX2-NEXT: #expname in test2.dll 338ARMAPX2-NEXT: #funcexp in test2.dll 339ARMAPX2-NEXT: #mangledfunc in test2.dll 340ARMAPX2-NEXT: #manglednonamefunc in test2.dll 341ARMAPX2-NEXT: #nonamefunc in test2.dll 342ARMAPX2-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test2.dll 343ARMAPX2-NEXT: ?test_cpp_func@@YAHPEAX@Z in test2.dll 344ARMAPX2-NEXT: __IMPORT_DESCRIPTOR_test2 in test2.dll 345ARMAPX2-NEXT: __NULL_IMPORT_DESCRIPTOR in test2.dll 346ARMAPX2-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test2.dll 347ARMAPX2-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test2.dll 348ARMAPX2-NEXT: __imp_aux_expname in test2.dll 349ARMAPX2-NEXT: __imp_aux_funcexp in test2.dll 350ARMAPX2-NEXT: __imp_aux_mangledfunc in test2.dll 351ARMAPX2-NEXT: __imp_aux_manglednonamefunc in test2.dll 352ARMAPX2-NEXT: __imp_aux_nonamefunc in test2.dll 353ARMAPX2-NEXT: __imp_dataexp in test2.dll 354ARMAPX2-NEXT: __imp_expname in test2.dll 355ARMAPX2-NEXT: __imp_funcexp in test2.dll 356ARMAPX2-NEXT: __imp_mangledfunc in test2.dll 357ARMAPX2-NEXT: __imp_manglednonamefunc in test2.dll 358ARMAPX2-NEXT: __imp_nonamefunc in test2.dll 359ARMAPX2-NEXT: expname in test2.dll 360ARMAPX2-NEXT: funcexp in test2.dll 361ARMAPX2-NEXT: mangledfunc in test2.dll 362ARMAPX2-NEXT: manglednonamefunc in test2.dll 363ARMAPX2-NEXT: nonamefunc in test2.dll 364ARMAPX2-NEXT: test2_NULL_THUNK_DATA in test2.dll 365 366ARMAPX2: test2.dll: 367ARMAPX2: 00000000 T #funcexp 368ARMAPX2-NEXT: 00000000 T __imp_aux_funcexp 369ARMAPX2-NEXT: 00000000 T __imp_funcexp 370ARMAPX2-NEXT: 00000000 T funcexp 371ARMAPX2-EMPTY: 372ARMAPX2-NEXT: test2.dll: 373ARMAPX2-NEXT: 00000000 T #mangledfunc 374ARMAPX2-NEXT: 00000000 T __imp_aux_mangledfunc 375ARMAPX2-NEXT: 00000000 T __imp_mangledfunc 376ARMAPX2-NEXT: 00000000 T mangledfunc 377ARMAPX2-EMPTY: 378ARMAPX2-NEXT: test2.dll: 379ARMAPX2-NEXT: 00000000 T ?test_cpp_func@@$$hYAHPEAX@Z 380ARMAPX2-NEXT: 00000000 T ?test_cpp_func@@YAHPEAX@Z 381ARMAPX2-NEXT: 00000000 T __imp_?test_cpp_func@@YAHPEAX@Z 382ARMAPX2-NEXT: 00000000 T __imp_aux_?test_cpp_func@@YAHPEAX@Z 383ARMAPX2-EMPTY: 384ARMAPX2-NEXT: test2.dll: 385ARMAPX2-NEXT: 00000000 T #expname 386ARMAPX2-NEXT: 00000000 T __imp_aux_expname 387ARMAPX2-NEXT: 00000000 T __imp_expname 388ARMAPX2-NEXT: 00000000 T expname 389ARMAPX2-EMPTY: 390ARMAPX2-NEXT: test2.dll: 391ARMAPX2-NEXT: 00000000 D __imp_dataexp 392ARMAPX2-EMPTY: 393ARMAPX2-NEXT: test2.dll: 394ARMAPX2-NEXT: 00000000 T #nonamefunc 395ARMAPX2-NEXT: 00000000 T __imp_aux_nonamefunc 396ARMAPX2-NEXT: 00000000 T __imp_nonamefunc 397ARMAPX2-NEXT: 00000000 T nonamefunc 398ARMAPX2-EMPTY: 399ARMAPX2-NEXT: test2.dll: 400ARMAPX2-NEXT: 00000000 T #manglednonamefunc 401ARMAPX2-NEXT: 00000000 T __imp_aux_manglednonamefunc 402ARMAPX2-NEXT: 00000000 T __imp_manglednonamefunc 403ARMAPX2-NEXT: 00000000 T manglednonamefunc 404ARMAPX2-EMPTY: 405ARMAPX2-NEXT: test2.dll: 406ARMAPX2-NEXT: 00000000 T __imp_otherfunc 407ARMAPX2-NEXT: 00000000 T otherfunc 408 409 410RUN: llvm-lib -machine:arm64ec -def:exportas.def -out:exportas.lib 411RUN: llvm-nm --print-armap exportas.lib | FileCheck -check-prefix=EXPAS-ARMAP %s 412RUN: llvm-readobj exportas.lib | FileCheck -check-prefix=EXPAS-READOBJ %s 413 414EXPAS-ARMAP: Archive EC map 415EXPAS-ARMAP-NEXT: #func1 in test.dll 416EXPAS-ARMAP-NEXT: #func2 in test.dll 417EXPAS-ARMAP-NEXT: #func3 in test.dll 418EXPAS-ARMAP-NEXT: #func4 in test.dll 419EXPAS-ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll 420EXPAS-ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll 421EXPAS-ARMAP-NEXT: __imp_aux_func1 in test.dll 422EXPAS-ARMAP-NEXT: __imp_aux_func2 in test.dll 423EXPAS-ARMAP-NEXT: __imp_aux_func3 in test.dll 424EXPAS-ARMAP-NEXT: __imp_aux_func4 in test.dll 425EXPAS-ARMAP-NEXT: __imp_data1 in test.dll 426EXPAS-ARMAP-NEXT: __imp_data2 in test.dll 427EXPAS-ARMAP-NEXT: __imp_func1 in test.dll 428EXPAS-ARMAP-NEXT: __imp_func2 in test.dll 429EXPAS-ARMAP-NEXT: __imp_func3 in test.dll 430EXPAS-ARMAP-NEXT: __imp_func4 in test.dll 431EXPAS-ARMAP-NEXT: func1 in test.dll 432EXPAS-ARMAP-NEXT: func2 in test.dll 433EXPAS-ARMAP-NEXT: func3 in test.dll 434EXPAS-ARMAP-NEXT: func4 in test.dll 435EXPAS-ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll 436 437EXPAS-READOBJ: File: test.dll 438EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC 439EXPAS-READOBJ-NEXT: Type: code 440EXPAS-READOBJ-NEXT: Name type: export as 441EXPAS-READOBJ-NEXT: Export name: func1 442EXPAS-READOBJ-NEXT: Symbol: __imp_func1 443EXPAS-READOBJ-NEXT: Symbol: func1 444EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func1 445EXPAS-READOBJ-NEXT: Symbol: #func1 446EXPAS-READOBJ-EMPTY: 447EXPAS-READOBJ-NEXT: File: test.dll 448EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC 449EXPAS-READOBJ-NEXT: Type: code 450EXPAS-READOBJ-NEXT: Name type: export as 451EXPAS-READOBJ-NEXT: Export name: func2 452EXPAS-READOBJ-NEXT: Symbol: __imp_func2 453EXPAS-READOBJ-NEXT: Symbol: func2 454EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func2 455EXPAS-READOBJ-NEXT: Symbol: #func2 456EXPAS-READOBJ-EMPTY: 457EXPAS-READOBJ-NEXT: File: test.dll 458EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC 459EXPAS-READOBJ-NEXT: Type: code 460EXPAS-READOBJ-NEXT: Name type: export as 461EXPAS-READOBJ-NEXT: Export name: #func3 462EXPAS-READOBJ-NEXT: Symbol: __imp_func3 463EXPAS-READOBJ-NEXT: Symbol: func3 464EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func3 465EXPAS-READOBJ-NEXT: Symbol: #func3 466EXPAS-READOBJ-EMPTY: 467EXPAS-READOBJ-NEXT: File: test.dll 468EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC 469EXPAS-READOBJ-NEXT: Type: code 470EXPAS-READOBJ-NEXT: Name type: export as 471EXPAS-READOBJ-NEXT: Export name: #func4 472EXPAS-READOBJ-NEXT: Symbol: __imp_func4 473EXPAS-READOBJ-NEXT: Symbol: func4 474EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func4 475EXPAS-READOBJ-NEXT: Symbol: #func4 476EXPAS-READOBJ-EMPTY: 477EXPAS-READOBJ-NEXT: File: test.dll 478EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC 479EXPAS-READOBJ-NEXT: Type: data 480EXPAS-READOBJ-NEXT: Name type: export as 481EXPAS-READOBJ-NEXT: Export name: #data1 482EXPAS-READOBJ-NEXT: Symbol: __imp_data1 483EXPAS-READOBJ-EMPTY: 484EXPAS-READOBJ-NEXT: File: test.dll 485EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC 486EXPAS-READOBJ-NEXT: Type: data 487EXPAS-READOBJ-NEXT: Name type: export as 488EXPAS-READOBJ-NEXT: Export name: data2 489EXPAS-READOBJ-NEXT: Symbol: __imp_data2 490 491 492#--- test.def 493LIBRARY test.dll 494EXPORTS 495 funcexp 496 #mangledfunc 497 ?test_cpp_func@@YAHPEAX@Z 498 expname=impname 499 dataexp DATA 500 nonamefunc @1 NONAME 501 #manglednonamefunc @2 NONAME 502 503#--- test2.def 504LIBRARY test2.dll 505EXPORTS 506 otherfunc 507 508#--- exportas.def 509LIBRARY test.dll 510EXPORTS 511 #func1 EXPORTAS func1 512 func2 EXPORTAS func2 513 func3 EXPORTAS #func3 514 #func4 EXPORTAS #func4 515 data1 DATA EXPORTAS #data1 516 #data2 DATA EXPORTAS data2 517