@@ -3,12 +3,14 @@ RUN: split-file %s %t.dir && cd %t.dir
33
44RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-dllmain.s -o arm64ec-dllmain.obj
55RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-dllmain.s -o arm64-dllmain.obj
6+ RUN: llvm-mc -filetype=obj -triple=x86_64-windows amd64-dllmain.s -o amd64-dllmain.obj
67RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func.s -o arm64ec-func.obj
78RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-func.s -o arm64-func.obj
89RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64-drectve.s -o arm64ec-drectve.obj
910RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-drectve.s -o arm64-drectve.obj
1011RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
1112RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
13+ RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-min.s -o loadconfig-min.obj
1214
1315RUN: lld-link -machine:arm64x -dll -out:out.dll arm64ec-dllmain.obj arm64-dllmain.obj \
1416RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj
@@ -34,10 +36,12 @@ DISASM-NEXT: 180003009: e9 f2 ef ff ff jmp 0x180002000 <.text+
3436DISASM-NEXT: 18000300e: cc int3
3537DISASM-NEXT: 18000300f: cc int3
3638
37- RUN: llvm-readobj --headers out.dll | FileCheck --check-prefix=READOBJ %s
39+ RUN: llvm-readobj --headers --coff-load-config out.dll | FileCheck --check-prefix=READOBJ %s
3840READOBJ: AddressOfEntryPoint: 0x1000
41+ READOBJ: AlternateEntryPoint: 0x2000
3942READOBJ: HybridObject {
4043READOBJ: AddressOfEntryPoint: 0x3000
44+ READOBJ: AlternateEntryPoint: 0x1000
4145READOBJ: }
4246
4347RUN: lld-link -machine:arm64x -dll -out:out2.dll arm64ec-func.obj arm64-func.obj \
@@ -55,6 +59,20 @@ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj -entry:func
5559RUN: llvm-objdump -d out4.dll | FileCheck --check-prefix=DISASM %s
5660RUN: llvm-readobj --headers --coff-load-config out4.dll | FileCheck --check-prefix=READOBJ %s
5761
62+ RUN: lld-link -machine:arm64x -dll -out:out-x86.dll amd64-dllmain.obj arm64-dllmain.obj \
63+ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj
64+ RUN: llvm-readobj --headers --coff-load-config out-x86.dll | FileCheck --check-prefix=READOBJ-X86 %s
65+ READOBJ-X86: AddressOfEntryPoint: 0x1000
66+ READOBJ-X86: AlternateEntryPoint: 0x2000
67+ READOBJ-X86: HybridObject {
68+ READOBJ-X86: AddressOfEntryPoint: 0x2000
69+ READOBJ-X86: AlternateEntryPoint: 0x1000
70+ READOBJ-X86: }
71+
72+ RUN: lld-link -machine:arm64x -dll -out:out-warn.dll arm64ec-dllmain.obj arm64-dllmain.obj \
73+ RUN: loadconfig-arm64.obj loadconfig-min.obj 2>&1 | FileCheck --check-prefix=WARN %s
74+ WARN: lld-link: warning: '__chpe_metadata' is missing for ARM64X target
75+
5876#--- arm64-dllmain.s
5977 .section .text,"xr",discard,_DllMainCRTStartup
6078 .globl _DllMainCRTStartup
@@ -87,6 +105,56 @@ func:
87105 mov w0, #2
88106 ret
89107
108+ #--- amd64-dllmain.s
109+ .section .text,"xr",discard,_DllMainCRTStartup
110+ .globl _DllMainCRTStartup
111+ .p2align 2
112+ _DllMainCRTStartup:
113+ movl $3, %eax
114+ retq
115+
90116#--- arm64-drectve.s
91117.section .drectve
92118 .ascii "-entry:func"
119+
120+ #--- loadconfig-min.s
121+ .section .rdata,"dr"
122+ .globl _load_config_used
123+ .p2align 3, 0
124+ _load_config_used:
125+ .word 0x140
126+ .fill 0xc4,1,0
127+ .xword chpe_metadata
128+ .fill 0x70,1,0
129+
130+ .p2align 3, 0
131+ chpe_metadata:
132+ .word 2
133+ .rva __hybrid_code_map
134+ .word __hybrid_code_map_count
135+ .rva __x64_code_ranges_to_entry_points
136+ .rva __arm64x_redirection_metadata
137+ .word 0 // __os_arm64x_dispatch_call_no_redirect
138+ .word 0 // __os_arm64x_dispatch_ret
139+ .word 0 // __os_arm64x_check_call
140+ .word 0 // __os_arm64x_check_icall
141+ .word 0 // __os_arm64x_check_icall_cfg
142+ .rva __arm64x_native_entrypoint
143+ .rva __hybrid_auxiliary_iat
144+ .word __x64_code_ranges_to_entry_points_count
145+ .word __arm64x_redirection_metadata_count
146+ .word 0 // __os_arm64x_get_x64_information
147+ .word 0 // __os_arm64x_set_x64_information
148+ .rva __arm64x_extra_rfe_table
149+ .word __arm64x_extra_rfe_table_size
150+ .word 0 // __os_arm64x_dispatch_fptr
151+ .rva __hybrid_auxiliary_iat_copy
152+ .rva __hybrid_auxiliary_delayload_iat
153+ .rva __hybrid_auxiliary_delayload_iat_copy
154+ .word __hybrid_image_info_bitfield
155+ .word 0 // __os_arm64x_helper3
156+ .word 0 // __os_arm64x_helper4
157+ .word 0 // __os_arm64x_helper5
158+ .word 0 // __os_arm64x_helper6
159+ .word 0 // __os_arm64x_helper7
160+ .word 0 // __os_arm64x_helper8
0 commit comments