llvm/llvm/test/tools/llvm-dlltool/arm64ec.test

Test creating ARM64EC importlib.

RUN: split-file %s %t.dir && cd %t.dir

RUN: llvm-dlltool -m arm64ec -d test.def -l test.lib
RUN: llvm-nm --print-armap test.lib | FileCheck --check-prefix=ARMAP %s

ARMAP:      Archive map
ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll
ARMAP-EMPTY:
ARMAP-NEXT: Archive EC map
ARMAP-NEXT: #func in test.dll
ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
ARMAP-NEXT: __imp_aux_func in test.dll
ARMAP-NEXT: __imp_func in test.dll
ARMAP-NEXT: func in test.dll
ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll

RUN: llvm-dlltool -m arm64ec -d test.def -N test2.def -l test2.lib
RUN: llvm-nm --print-armap test2.lib | FileCheck --check-prefix=ARMAP2 %s

ARMAP2:      Archive map
ARMAP2-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
ARMAP2-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
ARMAP2-NEXT: __imp_otherfunc in test.dll
ARMAP2-NEXT: otherfunc in test.dll
ARMAP2-NEXT: test_NULL_THUNK_DATA in test.dll
ARMAP2-EMPTY:
ARMAP2-NEXT: Archive EC map
ARMAP2-NEXT: #func in test.dll
ARMAP2-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
ARMAP2-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
ARMAP2-NEXT: __imp_aux_func in test.dll
ARMAP2-NEXT: __imp_func in test.dll
ARMAP2-NEXT: func in test.dll
ARMAP2-NEXT: test_NULL_THUNK_DATA in test.dll

RUN: llvm-dlltool -m arm64ec -d test.def --input-native-def test2.def -l test3.lib
RUN: llvm-nm --print-armap test3.lib | FileCheck --check-prefix=ARMAP2 %s

RUN: not llvm-dlltool -m arm64 -d test.def -N test2.def -l test4.lib 2>&1 | FileCheck --check-prefix=ERR %s
ERR: native .def file is supported only on arm64ec target

RUN: llvm-dlltool -m arm64ec -d test3.def -l test3.lib
RUN: llvm-readobj test3.lib | FileCheck --check-prefix=ALIAS %s

ALIAS:      File: test.dll
ALIAS-NEXT: Format: COFF-import-file-ARM64EC
ALIAS-NEXT: Type: code
ALIAS-NEXT: Name type: export as
ALIAS-NEXT: Export name: efunc
ALIAS-NEXT: Symbol: __imp_func
ALIAS-NEXT: Symbol: func
ALIAS-NEXT: Symbol: __imp_aux_func
ALIAS-NEXT: Symbol: #func
ALIAS-EMPTY:
ALIAS-NEXT: File: test.dll
ALIAS-NEXT: Format: COFF-import-file-ARM64EC
ALIAS-NEXT: Type: code
ALIAS-NEXT: Name type: export as
ALIAS-NEXT: Export name: efunc
ALIAS-NEXT: Symbol: __imp_efunc
ALIAS-NEXT: Symbol: efunc
ALIAS-NEXT: Symbol: __imp_aux_efunc
ALIAS-NEXT: Symbol: #efunc

#--- test.def
LIBRARY test.dll
EXPORTS
    func

#--- test2.def
LIBRARY test.dll
EXPORTS
    otherfunc

#--- test3.def
LIBRARY test.dll
EXPORTS
    func == efunc
    efunc