232 lines · plain
1// REQUIRES: aarch642// RUN: split-file %s %t.dir && cd %t.dir3 4// RUN: llvm-mc -filetype=obj -triple=aarch64-windows test.s -o test.obj5// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows chpe.s -o chpe.obj6// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig.s -o loadconfig.obj7// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-ec.s -o loadconfig-ec.obj8// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig-short.s -o loadconfig-short.obj9// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-short.s -o loadconfig-short-arm64ec.obj10// RUN: llvm-lib -machine:arm64x -out:loadconfig.lib loadconfig.obj loadconfig-ec.obj11 12// RUN: lld-link -machine:arm64x -out:out-warn.dll -dll -noentry test.obj \13// RUN: 2>&1 | FileCheck --check-prefixes=WARN-LOADCFG,WARN-EC-LOADCFG %s14// WARN-LOADCFG: lld-link: warning: native version of '_load_config_used' is missing for ARM64X target15// WARN-EC-LOADCFG: lld-link: warning: EC version of '_load_config_used' is missing16 17// RUN: lld-link -machine:arm64x -out:out-nonative.dll -dll -noentry loadconfig-ec.obj chpe.obj \18// RUN: 2>&1 | FileCheck --check-prefixes=WARN-LOADCFG --implicit-check-not EC %s19 20// RUN: lld-link -machine:arm64ec -out:out-ec.dll -dll -noentry chpe.obj \21// RUN: 2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s22 23// RUN: lld-link -machine:arm64x -out:out.dll -dll -noentry loadconfig.obj test.obj \24// RUN: 2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s25 26// RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=DYNRELOCS %s27// DYNRELOCS: DynamicValueRelocTableOffset: 0xC28// DYNRELOCS-NEXT: DynamicValueRelocTableSection: 429// DYNRELOCS: DynamicRelocations [30// DYNRELOCS-NEXT: Version: 0x131// DYNRELOCS-NEXT: Arm64X [32// DYNRELOCS-NEXT: Entry [33// DYNRELOCS-NEXT: RVA: 0x7C34// DYNRELOCS-NEXT: Type: VALUE35// DYNRELOCS-NEXT: Size: 0x236// DYNRELOCS-NEXT: Value: 0x866437// DYNRELOCS-NEXT: ]38// DYNRELOCS-NEXT: Entry [39// DYNRELOCS-NEXT: RVA: 0x15040// DYNRELOCS-NEXT: Type: VALUE41// DYNRELOCS-NEXT: Size: 0x442// DYNRELOCS-NEXT: Value: 0x043// DYNRELOCS-NEXT: ]44// DYNRELOCS-NEXT: Entry [45// DYNRELOCS-NEXT: RVA: 0x15446// DYNRELOCS-NEXT: Type: VALUE47// DYNRELOCS-NEXT: Size: 0x448// DYNRELOCS-NEXT: Value: 0x049// DYNRELOCS-NEXT: ]50// DYNRELOCS-NEXT: ]51// DYNRELOCS-NEXT: ]52 53// RUN: llvm-readobj --headers out.dll | FileCheck --check-prefix=HEADERS %s54// HEADERS: BaseRelocationTableRVA: 0x400055// HEADERS-NEXT: BaseRelocationTableSize: 0xC56// HEADERS: LoadConfigTableRVA: 0x100057// HEADERS-NEXT: LoadConfigTableSize: 0x14058// HEADERS: Name: .reloc (2E 72 65 6C 6F 63 00 00)59// HEADERS-NEXT: VirtualSize: 0x3860 61// RUN: lld-link -machine:arm64x -out:out-short.dll -dll -noentry loadconfig-short.obj 2>&1 | FileCheck --check-prefix=WARN-RELOC-SIZE %s62// RUN: lld-link -machine:arm64x -out:out-short.dll -dll -noentry loadconfig-short-arm64ec.obj 2>&1 | FileCheck --check-prefix=WARN-RELOC-SIZE %s63// WARN-RELOC-SIZE: lld-link: warning: '_load_config_used' structure too small to include dynamic relocations64 65// Check that the CHPE metadata pointer is correctly copied from the EC load config to the native load config.66 67// RUN: lld-link -machine:arm64x -out:out-hyb.dll -dll -noentry loadconfig.obj loadconfig-ec.obj chpe.obj test.obj68 69// RUN: llvm-readobj --coff-load-config out-hyb.dll | FileCheck --check-prefix=LOADCFG %s70// LOADCFG: Format: COFF-ARM64X71// LOADCFG-NEXT: Arch: aarch6472// LOADCFG-NEXT: AddressSize: 64bit73// LOADCFG-NEXT: LoadConfig [74// LOADCFG-NEXT: Size: 0x14075// LOADCFG: CHPEMetadata [76// LOADCFG-NEXT: Version: 0x277// LOADCFG: RedirectionMetadata: 1228878// LOADCFG: AlternateEntryPoint: 0x079// LOADCFG-NEXT: AuxiliaryIAT: 0x080// LOADCFG-NEXT: GetX64InformationFunctionPointer: 0x081// LOADCFG-NEXT: SetX64InformationFunctionPointer: 0x082// LOADCFG-NEXT: ExtraRFETable: 0x083// LOADCFG-NEXT: ExtraRFETableSize: 0x084// LOADCFG-NEXT: __os_arm64x_dispatch_fptr: 0x085// LOADCFG-NEXT: AuxiliaryIATCopy: 0x086// LOADCFG-NEXT: AuxiliaryDelayloadIAT: 0x087// LOADCFG-NEXT: AuxiliaryDelayloadIATCopy: 0x088// LOADCFG-NEXT: HybridImageInfoBitfield: 0x089// LOADCFG: ]90// LOADCFG-NEXT: DynamicRelocations [91// LOADCFG-NEXT: Version: 0x192// LOADCFG-NEXT: Arm64X [93// LOADCFG-NEXT: Entry [94// LOADCFG-NEXT: RVA: 0x7C95// LOADCFG-NEXT: Type: VALUE96// LOADCFG-NEXT: Size: 0x297// LOADCFG-NEXT: Value: 0x866498// LOADCFG-NEXT: ]99// LOADCFG-NEXT: Entry [100// LOADCFG-NEXT: RVA: 0x150101// LOADCFG-NEXT: Type: VALUE102// LOADCFG-NEXT: Size: 0x4103// LOADCFG-NEXT: Value: 0x1140104// LOADCFG-NEXT: ]105// LOADCFG-NEXT: Entry [106// LOADCFG-NEXT: RVA: 0x154107// LOADCFG-NEXT: Type: VALUE108// LOADCFG-NEXT: Size: 0x4109// LOADCFG-NEXT: Value: 0x140110// LOADCFG-NEXT: ]111// LOADCFG-NEXT: ]112// LOADCFG-NEXT: ]113// LOADCFG-NEXT: HybridObject {114// LOADCFG-NEXT: Format: COFF-ARM64EC115// LOADCFG-NEXT: Arch: aarch64116// LOADCFG-NEXT: AddressSize: 64bit117// LOADCFG-NEXT: LoadConfig [118// LOADCFG-NEXT: Size: 0x140119// LOADCFG: CHPEMetadata [120// LOADCFG-NEXT: Version: 0x2121// LOADCFG: ]122// LOADCFG-NEXT: DynamicRelocations [123// LOADCFG-NEXT: Version: 0x1124// LOADCFG-NEXT: Arm64X [125// LOADCFG-NEXT: Entry [126// LOADCFG-NEXT: RVA: 0x7C127// LOADCFG-NEXT: Type: VALUE128// LOADCFG-NEXT: Size: 0x2129// LOADCFG-NEXT: Value: 0x8664130// LOADCFG-NEXT: ]131// LOADCFG-NEXT: Entry [132// LOADCFG-NEXT: RVA: 0x150133// LOADCFG-NEXT: Type: VALUE134// LOADCFG-NEXT: Size: 0x4135// LOADCFG-NEXT: Value: 0x1140136// LOADCFG-NEXT: ]137// LOADCFG-NEXT: Entry [138// LOADCFG-NEXT: RVA: 0x154139// LOADCFG-NEXT: Type: VALUE140// LOADCFG-NEXT: Size: 0x4141// LOADCFG-NEXT: Value: 0x140142// LOADCFG-NEXT: ]143// LOADCFG-NEXT: ]144// LOADCFG-NEXT: ]145// LOADCFG-NEXT: }146 147// RUN: llvm-readobj --coff-basereloc out-hyb.dll | FileCheck --check-prefix=BASERELOC %s148// BASERELOC: BaseReloc [149// BASERELOC-NEXT: Entry {150// BASERELOC-NEXT: Type: DIR64151// BASERELOC-NEXT: Address: 0x10C8152// BASERELOC-NEXT: }153// BASERELOC-NEXT: Entry {154// BASERELOC-NEXT: Type: DIR64155// BASERELOC-NEXT: Address: 0x1208156// BASERELOC-NEXT: }157// BASERELOC-NEXT: Entry {158// BASERELOC-NEXT: Type: DIR64159// BASERELOC-NEXT: Address: 0x2074160// BASERELOC-NEXT: }161 162// RUN: lld-link -machine:arm64x -out:out-hyb-lib.dll -dll -noentry loadconfig.lib chpe.obj test.obj163// RUN: llvm-readobj --coff-load-config out-hyb-lib.dll | FileCheck --check-prefix=LOADCFG %s164// RUN: llvm-readobj --coff-basereloc out-hyb-lib.dll | FileCheck --check-prefix=BASERELOC %s165 166#--- test.s167 .data168sym:169 // Emit a basereloc to make the loadconfig test more meaningful.170 .xword sym171 172#--- loadconfig.s173 .section .rdata,"dr"174 .globl _load_config_used175 .p2align 3, 0176_load_config_used:177 .word 0x140178 .fill 0x13c,1,0179 180#--- loadconfig-ec.s181 .section .rdata,"dr"182 .globl _load_config_used183 .p2align 3, 0184_load_config_used:185 .word 0x140186 .fill 0xc4,1,0187 .xword __chpe_metadata188 .fill 0x70,1,0189 190#--- loadconfig-short.s191 .section .rdata,"dr"192 .globl _load_config_used193 .p2align 3, 0194_load_config_used:195 .word 0xe4196 .fill 0xe0,1,0197 198#--- chpe.s199 .data200 .globl __chpe_metadata201 .p2align 3, 0202__chpe_metadata:203 .word 2204 .rva __hybrid_code_map205 .word __hybrid_code_map_count206 .rva __x64_code_ranges_to_entry_points207 .rva __arm64x_redirection_metadata208 .word 0 // __os_arm64x_dispatch_call_no_redirect209 .word 0 // __os_arm64x_dispatch_ret210 .word 0 // __os_arm64x_check_call211 .word 0 // __os_arm64x_check_icall212 .word 0 // __os_arm64x_check_icall_cfg213 .rva __arm64x_native_entrypoint214 .rva __hybrid_auxiliary_iat215 .word __x64_code_ranges_to_entry_points_count216 .word __arm64x_redirection_metadata_count217 .word 0 // __os_arm64x_get_x64_information218 .word 0 // __os_arm64x_set_x64_information219 .rva __arm64x_extra_rfe_table220 .word __arm64x_extra_rfe_table_size221 .word 0 // __os_arm64x_dispatch_fptr222 .rva __hybrid_auxiliary_iat_copy223 .rva __hybrid_auxiliary_delayload_iat224 .rva __hybrid_auxiliary_delayload_iat_copy225 .word __hybrid_image_info_bitfield226 .word 0 // __os_arm64x_helper3227 .word 0 // __os_arm64x_helper4228 .word 0 // __os_arm64x_helper5229 .word 0 // __os_arm64x_helper6230 .word 0 // __os_arm64x_helper7231 .word 0 // __os_arm64x_helper8232