blob: 20d9622315f83894d66a79c9930f6764f27481aa [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#define EXPORT_SYM(x) .globl x; x:
/*
* These symbols are updated at runtime by the dynamic linker to point to emulator
* helper routines.
*/
.section .00cfg, "dr"
.balign 16
EXPORT_SYM(__os_arm64x_dispatch_call_no_redirect)
.quad 0
EXPORT_SYM(__os_arm64x_dispatch_ret)
.quad 0
EXPORT_SYM(__os_arm64x_check_icall)
EXPORT_SYM(__os_arm64x_dispatch_icall)
.quad 0
EXPORT_SYM(__os_arm64x_check_call)
EXPORT_SYM(__os_arm64x_dispatch_call)
.quad 0
EXPORT_SYM(__os_arm64x_check_icall_cfg)
EXPORT_SYM(__os_arm64x_check_dispatch_cfg)
.quad 0
EXPORT_SYM(__os_arm64x_rdtsc)
EXPORT_SYM(__os_arm64x_get_x64_information)
.quad 0
EXPORT_SYM(__os_arm64x_set_x64_information)
EXPORT_SYM(__os_arm64x_cpuidex)
.quad 0
EXPORT_SYM(__os_arm64x_x64_jump)
EXPORT_SYM(__os_arm64x_dispatch_fptr)
.quad 0
EXPORT_SYM(__os_arm64x_helper3)
.quad 0
EXPORT_SYM(__os_arm64x_helper4)
.quad 0
EXPORT_SYM(__os_arm64x_helper5)
.quad 0
EXPORT_SYM(__os_arm64x_helper6)
.quad 0
EXPORT_SYM(__os_arm64x_helper7)
.quad 0
EXPORT_SYM(__os_arm64x_helper8)
.quad 0
/*
* This structure is read at runtime by the dynamic linker on ARM64EC to configure
* metadata necessary for EC code to interface with x86_64 code.
*/
.section .rdata,"dr"
.balign 16
EXPORT_SYM(__chpe_metadata)
.long 1 /* Version */
.rva __hybrid_code_map /* CodeMap */
.long __hybrid_code_map_count /* CodeMapCount */
.rva __x64_code_ranges_to_entry_points /* CodeRangesToEntryPoints */
.rva __arm64x_redirection_metadata /* RedirectionMetadata */
.rva __os_arm64x_dispatch_call_no_redirect /* __os_arm64x_dispatch_call_no_redirect */
.rva __os_arm64x_dispatch_ret /* __os_arm64x_dispatch_ret */
.rva __os_arm64x_check_call /* __os_arm64x_dispatch_call */
.rva __os_arm64x_check_icall /* __os_arm64x_dispatch_icall */
.rva __os_arm64x_check_icall_cfg /* __os_arm64x_dispatch_icall_cfg */
.rva __arm64x_native_entrypoint /* AlternateEntryPoint */
.rva __hybrid_auxiliary_iat /* AuxiliaryIAT */
.long __x64_code_ranges_to_entry_points_count /* CodeRangesToEntryPointsCount */
.long __arm64x_redirection_metadata_count /* RedirectionMetadataCount */
.rva __os_arm64x_get_x64_information /* GetX64InformationFunctionPointer */
.rva __os_arm64x_set_x64_information /* SetX64InformationFunctionPointer */
.rva __arm64x_extra_rfe_table /* ExtraRFETable */
.long __arm64x_extra_rfe_table_size /* ExtraRFETableSize */
.rva __os_arm64x_x64_jump /* __os_arm64x_dispatch_fptr */
.rva __hybrid_auxiliary_iat_copy /* AuxiliaryIATCopy */
.rva __hybrid_auxiliary_delayload_iat
.rva __hybrid_auxiliary_delayload_iat_copy
.long __hybrid_image_info_bitfield
.rva __os_arm64x_helper3
.rva __os_arm64x_helper4
.rva __os_arm64x_helper5
.rva __os_arm64x_helper6
.rva __os_arm64x_helper7
.rva __os_arm64x_helper8
/*
* Calls to this are synthesized by the linker when calling into import libraries,
* this is referred to as an 'Adjustor Thunk' in ARM64EC documentation.
*/
.text
.balign 16
EXPORT_SYM(__icall_helper_arm64ec)
.seh_proc "__icall_helper_arm64ec"
stp fp, lr, [sp, #-16]!
.seh_save_fplr_x 16
mov fp, sp
.seh_set_fp
.seh_endprologue
adrp x16, __os_arm64x_check_icall
ldr x16, [x16, #:lo12:__os_arm64x_check_icall]
blr x16
.seh_startepilogue
ldp fp, lr, [sp], #16
.seh_save_fplr_x 16
.seh_endepilogue
br x11
.seh_endproc