161 lines · plain
1REQUIRES: aarch64, x862RUN: split-file %s %t.dir && cd %t.dir3 4RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-dllmain.s -o arm64ec-dllmain.obj5RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-dllmain.s -o arm64-dllmain.obj6RUN: llvm-mc -filetype=obj -triple=x86_64-windows amd64-dllmain.s -o amd64-dllmain.obj7RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func.s -o arm64ec-func.obj8RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-func.s -o arm64-func.obj9RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64-drectve.s -o arm64ec-drectve.obj10RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-drectve.s -o arm64-drectve.obj11RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj12RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj13RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-min.s -o loadconfig-min.obj14 15RUN: lld-link -machine:arm64x -dll -out:out.dll arm64ec-dllmain.obj arm64-dllmain.obj \16RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj17 18RUN: llvm-objdump -d out.dll | FileCheck --check-prefix=DISASM %s19DISASM: Disassembly of section .text:20DISASM-EMPTY:21DISASM-NEXT: 0000000180001000 <.text>:22DISASM-NEXT: 180001000: 52800020 mov w0, #0x1 // =123DISASM-NEXT: 180001004: d65f03c0 ret24DISASM-NEXT: ...25DISASM-NEXT: 180002000: 52800040 mov w0, #0x2 // =226DISASM-NEXT: 180002004: d65f03c0 ret27DISASM-EMPTY:28DISASM-NEXT: Disassembly of section .hexpthk:29DISASM-EMPTY:30DISASM-NEXT: 0000000180003000 <.hexpthk>:31DISASM-NEXT: 180003000: 48 8b c4 movq %rsp, %rax32DISASM-NEXT: 180003003: 48 89 58 20 movq %rbx, 0x20(%rax)33DISASM-NEXT: 180003007: 55 pushq %rbp34DISASM-NEXT: 180003008: 5d popq %rbp35DISASM-NEXT: 180003009: e9 f2 ef ff ff jmp 0x180002000 <.text+0x1000>36DISASM-NEXT: 18000300e: cc int337DISASM-NEXT: 18000300f: cc int338 39RUN: llvm-readobj --headers --coff-load-config out.dll | FileCheck --check-prefix=READOBJ %s40READOBJ: AddressOfEntryPoint: 0x100041READOBJ: AlternateEntryPoint: 0x200042READOBJ: HybridObject {43READOBJ: AddressOfEntryPoint: 0x300044READOBJ: AlternateEntryPoint: 0x100045READOBJ: }46 47RUN: lld-link -machine:arm64x -dll -out:out2.dll arm64ec-func.obj arm64-func.obj \48RUN: arm64ec-drectve.obj loadconfig-arm64.obj loadconfig-arm64ec.obj49RUN: llvm-objdump -d out2.dll | FileCheck --check-prefix=DISASM %s50RUN: llvm-readobj --headers --coff-load-config out2.dll | FileCheck --check-prefix=READOBJ %s51 52RUN: lld-link -machine:arm64x -dll -out:out3.dll arm64ec-func.obj arm64-func.obj \53RUN: arm64-drectve.obj loadconfig-arm64.obj loadconfig-arm64ec.obj54RUN: llvm-objdump -d out3.dll | FileCheck --check-prefix=DISASM %s55RUN: llvm-readobj --headers --coff-load-config out3.dll | FileCheck --check-prefix=READOBJ %s56 57RUN: lld-link -machine:arm64x -dll -out:out4.dll arm64ec-func.obj arm64-func.obj \58RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj -entry:func59RUN: llvm-objdump -d out4.dll | FileCheck --check-prefix=DISASM %s60RUN: llvm-readobj --headers --coff-load-config out4.dll | FileCheck --check-prefix=READOBJ %s61 62RUN: lld-link -machine:arm64x -dll -out:out-x86.dll amd64-dllmain.obj arm64-dllmain.obj \63RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj64RUN: llvm-readobj --headers --coff-load-config out-x86.dll | FileCheck --check-prefix=READOBJ-X86 %s65READOBJ-X86: AddressOfEntryPoint: 0x100066READOBJ-X86: AlternateEntryPoint: 0x200067READOBJ-X86: HybridObject {68READOBJ-X86: AddressOfEntryPoint: 0x200069READOBJ-X86: AlternateEntryPoint: 0x100070READOBJ-X86: }71 72RUN: lld-link -machine:arm64x -dll -out:out-warn.dll arm64ec-dllmain.obj arm64-dllmain.obj \73RUN: loadconfig-arm64.obj loadconfig-min.obj 2>&1 | FileCheck --check-prefix=WARN %s74WARN: lld-link: warning: '__chpe_metadata' is missing for ARM64X target75 76#--- arm64-dllmain.s77 .section .text,"xr",discard,_DllMainCRTStartup78 .globl _DllMainCRTStartup79 .p2align 280_DllMainCRTStartup:81 mov w0, #182 ret83 84#--- arm64ec-dllmain.s85 .section .text,"xr",discard,_DllMainCRTStartup86 .globl _DllMainCRTStartup87 .p2align 288_DllMainCRTStartup:89 mov w0, #290 ret91 92#--- arm64-func.s93 .section .text,"xr",discard,func94 .globl func95 .p2align 296func:97 mov w0, #198 ret99 100#--- arm64ec-func.s101 .section .text,"xr",discard,func102 .globl func103 .p2align 2104func:105 mov w0, #2106 ret107 108#--- amd64-dllmain.s109 .section .text,"xr",discard,_DllMainCRTStartup110 .globl _DllMainCRTStartup111 .p2align 2112_DllMainCRTStartup:113 movl $3, %eax114 retq115 116#--- arm64-drectve.s117.section .drectve118 .ascii "-entry:func"119 120#--- loadconfig-min.s121 .section .rdata,"dr"122 .globl _load_config_used123 .p2align 3, 0124_load_config_used:125 .word 0x140126 .fill 0xc4,1,0127 .xword chpe_metadata128 .fill 0x70,1,0129 130 .p2align 3, 0131chpe_metadata:132 .word 2133 .rva __hybrid_code_map134 .word __hybrid_code_map_count135 .rva __x64_code_ranges_to_entry_points136 .rva __arm64x_redirection_metadata137 .word 0 // __os_arm64x_dispatch_call_no_redirect138 .word 0 // __os_arm64x_dispatch_ret139 .word 0 // __os_arm64x_check_call140 .word 0 // __os_arm64x_check_icall141 .word 0 // __os_arm64x_check_icall_cfg142 .rva __arm64x_native_entrypoint143 .rva __hybrid_auxiliary_iat144 .word __x64_code_ranges_to_entry_points_count145 .word __arm64x_redirection_metadata_count146 .word 0 // __os_arm64x_get_x64_information147 .word 0 // __os_arm64x_set_x64_information148 .rva __arm64x_extra_rfe_table149 .word __arm64x_extra_rfe_table_size150 .word 0 // __os_arm64x_dispatch_fptr151 .rva __hybrid_auxiliary_iat_copy152 .rva __hybrid_auxiliary_delayload_iat153 .rva __hybrid_auxiliary_delayload_iat_copy154 .word __hybrid_image_info_bitfield155 .word 0 // __os_arm64x_helper3156 .word 0 // __os_arm64x_helper4157 .word 0 // __os_arm64x_helper5158 .word 0 // __os_arm64x_helper6159 .word 0 // __os_arm64x_helper7160 .word 0 // __os_arm64x_helper8161