mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:26:48 +00:00
232 lines
8.8 KiB
ArmAsm
232 lines
8.8 KiB
ArmAsm
// REQUIRES: aarch64
|
|
// RUN: split-file %s %t.dir && cd %t.dir
|
|
|
|
// RUN: llvm-mc -filetype=obj -triple=aarch64-windows test.s -o test.obj
|
|
// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows chpe.s -o chpe.obj
|
|
// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig.s -o loadconfig.obj
|
|
// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-ec.s -o loadconfig-ec.obj
|
|
// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig-short.s -o loadconfig-short.obj
|
|
// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-short.s -o loadconfig-short-arm64ec.obj
|
|
// RUN: llvm-lib -machine:arm64x -out:loadconfig.lib loadconfig.obj loadconfig-ec.obj
|
|
|
|
// RUN: lld-link -machine:arm64x -out:out-warn.dll -dll -noentry test.obj \
|
|
// RUN: 2>&1 | FileCheck --check-prefixes=WARN-LOADCFG,WARN-EC-LOADCFG %s
|
|
// WARN-LOADCFG: lld-link: warning: native version of '_load_config_used' is missing for ARM64X target
|
|
// WARN-EC-LOADCFG: lld-link: warning: EC version of '_load_config_used' is missing
|
|
|
|
// RUN: lld-link -machine:arm64x -out:out-nonative.dll -dll -noentry loadconfig-ec.obj chpe.obj \
|
|
// RUN: 2>&1 | FileCheck --check-prefixes=WARN-LOADCFG --implicit-check-not EC %s
|
|
|
|
// RUN: lld-link -machine:arm64ec -out:out-ec.dll -dll -noentry chpe.obj \
|
|
// RUN: 2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s
|
|
|
|
// RUN: lld-link -machine:arm64x -out:out.dll -dll -noentry loadconfig.obj test.obj \
|
|
// RUN: 2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s
|
|
|
|
// RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=DYNRELOCS %s
|
|
// DYNRELOCS: DynamicValueRelocTableOffset: 0xC
|
|
// DYNRELOCS-NEXT: DynamicValueRelocTableSection: 4
|
|
// DYNRELOCS: DynamicRelocations [
|
|
// DYNRELOCS-NEXT: Version: 0x1
|
|
// DYNRELOCS-NEXT: Arm64X [
|
|
// DYNRELOCS-NEXT: Entry [
|
|
// DYNRELOCS-NEXT: RVA: 0x7C
|
|
// DYNRELOCS-NEXT: Type: VALUE
|
|
// DYNRELOCS-NEXT: Size: 0x2
|
|
// DYNRELOCS-NEXT: Value: 0x8664
|
|
// DYNRELOCS-NEXT: ]
|
|
// DYNRELOCS-NEXT: Entry [
|
|
// DYNRELOCS-NEXT: RVA: 0x150
|
|
// DYNRELOCS-NEXT: Type: VALUE
|
|
// DYNRELOCS-NEXT: Size: 0x4
|
|
// DYNRELOCS-NEXT: Value: 0x0
|
|
// DYNRELOCS-NEXT: ]
|
|
// DYNRELOCS-NEXT: Entry [
|
|
// DYNRELOCS-NEXT: RVA: 0x154
|
|
// DYNRELOCS-NEXT: Type: VALUE
|
|
// DYNRELOCS-NEXT: Size: 0x4
|
|
// DYNRELOCS-NEXT: Value: 0x0
|
|
// DYNRELOCS-NEXT: ]
|
|
// DYNRELOCS-NEXT: ]
|
|
// DYNRELOCS-NEXT: ]
|
|
|
|
// RUN: llvm-readobj --headers out.dll | FileCheck --check-prefix=HEADERS %s
|
|
// HEADERS: BaseRelocationTableRVA: 0x4000
|
|
// HEADERS-NEXT: BaseRelocationTableSize: 0xC
|
|
// HEADERS: LoadConfigTableRVA: 0x1000
|
|
// HEADERS-NEXT: LoadConfigTableSize: 0x140
|
|
// HEADERS: Name: .reloc (2E 72 65 6C 6F 63 00 00)
|
|
// HEADERS-NEXT: VirtualSize: 0x38
|
|
|
|
// RUN: lld-link -machine:arm64x -out:out-short.dll -dll -noentry loadconfig-short.obj 2>&1 | FileCheck --check-prefix=WARN-RELOC-SIZE %s
|
|
// RUN: lld-link -machine:arm64x -out:out-short.dll -dll -noentry loadconfig-short-arm64ec.obj 2>&1 | FileCheck --check-prefix=WARN-RELOC-SIZE %s
|
|
// WARN-RELOC-SIZE: lld-link: warning: '_load_config_used' structure too small to include dynamic relocations
|
|
|
|
// Check that the CHPE metadata pointer is correctly copied from the EC load config to the native load config.
|
|
|
|
// RUN: lld-link -machine:arm64x -out:out-hyb.dll -dll -noentry loadconfig.obj loadconfig-ec.obj chpe.obj test.obj
|
|
|
|
// RUN: llvm-readobj --coff-load-config out-hyb.dll | FileCheck --check-prefix=LOADCFG %s
|
|
// LOADCFG: Format: COFF-ARM64X
|
|
// LOADCFG-NEXT: Arch: aarch64
|
|
// LOADCFG-NEXT: AddressSize: 64bit
|
|
// LOADCFG-NEXT: LoadConfig [
|
|
// LOADCFG-NEXT: Size: 0x140
|
|
// LOADCFG: CHPEMetadata [
|
|
// LOADCFG-NEXT: Version: 0x2
|
|
// LOADCFG: RedirectionMetadata: 12288
|
|
// LOADCFG: AlternateEntryPoint: 0x0
|
|
// LOADCFG-NEXT: AuxiliaryIAT: 0x0
|
|
// LOADCFG-NEXT: GetX64InformationFunctionPointer: 0x0
|
|
// LOADCFG-NEXT: SetX64InformationFunctionPointer: 0x0
|
|
// LOADCFG-NEXT: ExtraRFETable: 0x0
|
|
// LOADCFG-NEXT: ExtraRFETableSize: 0x0
|
|
// LOADCFG-NEXT: __os_arm64x_dispatch_fptr: 0x0
|
|
// LOADCFG-NEXT: AuxiliaryIATCopy: 0x0
|
|
// LOADCFG-NEXT: AuxiliaryDelayloadIAT: 0x0
|
|
// LOADCFG-NEXT: AuxiliaryDelayloadIATCopy: 0x0
|
|
// LOADCFG-NEXT: HybridImageInfoBitfield: 0x0
|
|
// LOADCFG: ]
|
|
// LOADCFG-NEXT: DynamicRelocations [
|
|
// LOADCFG-NEXT: Version: 0x1
|
|
// LOADCFG-NEXT: Arm64X [
|
|
// LOADCFG-NEXT: Entry [
|
|
// LOADCFG-NEXT: RVA: 0x7C
|
|
// LOADCFG-NEXT: Type: VALUE
|
|
// LOADCFG-NEXT: Size: 0x2
|
|
// LOADCFG-NEXT: Value: 0x8664
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: Entry [
|
|
// LOADCFG-NEXT: RVA: 0x150
|
|
// LOADCFG-NEXT: Type: VALUE
|
|
// LOADCFG-NEXT: Size: 0x4
|
|
// LOADCFG-NEXT: Value: 0x1140
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: Entry [
|
|
// LOADCFG-NEXT: RVA: 0x154
|
|
// LOADCFG-NEXT: Type: VALUE
|
|
// LOADCFG-NEXT: Size: 0x4
|
|
// LOADCFG-NEXT: Value: 0x140
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: HybridObject {
|
|
// LOADCFG-NEXT: Format: COFF-ARM64EC
|
|
// LOADCFG-NEXT: Arch: aarch64
|
|
// LOADCFG-NEXT: AddressSize: 64bit
|
|
// LOADCFG-NEXT: LoadConfig [
|
|
// LOADCFG-NEXT: Size: 0x140
|
|
// LOADCFG: CHPEMetadata [
|
|
// LOADCFG-NEXT: Version: 0x2
|
|
// LOADCFG: ]
|
|
// LOADCFG-NEXT: DynamicRelocations [
|
|
// LOADCFG-NEXT: Version: 0x1
|
|
// LOADCFG-NEXT: Arm64X [
|
|
// LOADCFG-NEXT: Entry [
|
|
// LOADCFG-NEXT: RVA: 0x7C
|
|
// LOADCFG-NEXT: Type: VALUE
|
|
// LOADCFG-NEXT: Size: 0x2
|
|
// LOADCFG-NEXT: Value: 0x8664
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: Entry [
|
|
// LOADCFG-NEXT: RVA: 0x150
|
|
// LOADCFG-NEXT: Type: VALUE
|
|
// LOADCFG-NEXT: Size: 0x4
|
|
// LOADCFG-NEXT: Value: 0x1140
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: Entry [
|
|
// LOADCFG-NEXT: RVA: 0x154
|
|
// LOADCFG-NEXT: Type: VALUE
|
|
// LOADCFG-NEXT: Size: 0x4
|
|
// LOADCFG-NEXT: Value: 0x140
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: ]
|
|
// LOADCFG-NEXT: }
|
|
|
|
// RUN: llvm-readobj --coff-basereloc out-hyb.dll | FileCheck --check-prefix=BASERELOC %s
|
|
// BASERELOC: BaseReloc [
|
|
// BASERELOC-NEXT: Entry {
|
|
// BASERELOC-NEXT: Type: DIR64
|
|
// BASERELOC-NEXT: Address: 0x10C8
|
|
// BASERELOC-NEXT: }
|
|
// BASERELOC-NEXT: Entry {
|
|
// BASERELOC-NEXT: Type: DIR64
|
|
// BASERELOC-NEXT: Address: 0x1208
|
|
// BASERELOC-NEXT: }
|
|
// BASERELOC-NEXT: Entry {
|
|
// BASERELOC-NEXT: Type: DIR64
|
|
// BASERELOC-NEXT: Address: 0x2074
|
|
// BASERELOC-NEXT: }
|
|
|
|
// RUN: lld-link -machine:arm64x -out:out-hyb-lib.dll -dll -noentry loadconfig.lib chpe.obj test.obj
|
|
// RUN: llvm-readobj --coff-load-config out-hyb-lib.dll | FileCheck --check-prefix=LOADCFG %s
|
|
// RUN: llvm-readobj --coff-basereloc out-hyb-lib.dll | FileCheck --check-prefix=BASERELOC %s
|
|
|
|
#--- test.s
|
|
.data
|
|
sym:
|
|
// Emit a basereloc to make the loadconfig test more meaningful.
|
|
.xword sym
|
|
|
|
#--- loadconfig.s
|
|
.section .rdata,"dr"
|
|
.globl _load_config_used
|
|
.p2align 3, 0
|
|
_load_config_used:
|
|
.word 0x140
|
|
.fill 0x13c,1,0
|
|
|
|
#--- loadconfig-ec.s
|
|
.section .rdata,"dr"
|
|
.globl _load_config_used
|
|
.p2align 3, 0
|
|
_load_config_used:
|
|
.word 0x140
|
|
.fill 0xc4,1,0
|
|
.xword __chpe_metadata
|
|
.fill 0x70,1,0
|
|
|
|
#--- loadconfig-short.s
|
|
.section .rdata,"dr"
|
|
.globl _load_config_used
|
|
.p2align 3, 0
|
|
_load_config_used:
|
|
.word 0xe4
|
|
.fill 0xe0,1,0
|
|
|
|
#--- chpe.s
|
|
.data
|
|
.globl __chpe_metadata
|
|
.p2align 3, 0
|
|
__chpe_metadata:
|
|
.word 2
|
|
.rva __hybrid_code_map
|
|
.word __hybrid_code_map_count
|
|
.rva __x64_code_ranges_to_entry_points
|
|
.rva __arm64x_redirection_metadata
|
|
.word 0 // __os_arm64x_dispatch_call_no_redirect
|
|
.word 0 // __os_arm64x_dispatch_ret
|
|
.word 0 // __os_arm64x_check_call
|
|
.word 0 // __os_arm64x_check_icall
|
|
.word 0 // __os_arm64x_check_icall_cfg
|
|
.rva __arm64x_native_entrypoint
|
|
.rva __hybrid_auxiliary_iat
|
|
.word __x64_code_ranges_to_entry_points_count
|
|
.word __arm64x_redirection_metadata_count
|
|
.word 0 // __os_arm64x_get_x64_information
|
|
.word 0 // __os_arm64x_set_x64_information
|
|
.rva __arm64x_extra_rfe_table
|
|
.word __arm64x_extra_rfe_table_size
|
|
.word 0 // __os_arm64x_dispatch_fptr
|
|
.rva __hybrid_auxiliary_iat_copy
|
|
.rva __hybrid_auxiliary_delayload_iat
|
|
.rva __hybrid_auxiliary_delayload_iat_copy
|
|
.word __hybrid_image_info_bitfield
|
|
.word 0 // __os_arm64x_helper3
|
|
.word 0 // __os_arm64x_helper4
|
|
.word 0 // __os_arm64x_helper5
|
|
.word 0 // __os_arm64x_helper6
|
|
.word 0 // __os_arm64x_helper7
|
|
.word 0 // __os_arm64x_helper8
|