| /** |
| * 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 |