Files
TheRock/compiler/amd-llvm/compiler-rt/lib/xray/xray_trampoline_AArch64.S
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

174 lines
4.9 KiB
ArmAsm

#include "../builtins/assembly.h"
#include "../sanitizer_common/sanitizer_asm.h"
.macro SAVE_REGISTERS
stp x1, x2, [sp, #-16]!
stp x3, x4, [sp, #-16]!
stp x5, x6, [sp, #-16]!
stp x7, x30, [sp, #-16]!
stp q0, q1, [sp, #-32]!
stp q2, q3, [sp, #-32]!
stp q4, q5, [sp, #-32]!
stp q6, q7, [sp, #-32]!
// x8 is the indirect result register and needs to be preserved for the body of the function to use.
stp x8, x0, [sp, #-16]!
.endm
.macro RESTORE_REGISTERS
ldp x8, x0, [sp], #16
ldp q6, q7, [sp], #32
ldp q4, q5, [sp], #32
ldp q2, q3, [sp], #32
ldp q0, q1, [sp], #32
ldp x7, x30, [sp], #16
ldp x5, x6, [sp], #16
ldp x3, x4, [sp], #16
ldp x1, x2, [sp], #16
.endm
.macro LOAD_HANDLER_ADDR reg handler
#if !defined(XRAY_PIC)
adrp \reg, ASM_SYMBOL(\handler)
ldr \reg, [\reg, :lo12:ASM_SYMBOL(\handler)]
#else
adrp \reg, :got:ASM_SYMBOL(\handler)
ldr \reg, [\reg, :got_lo12:ASM_SYMBOL(\handler)]
ldr \reg, [\reg]
#endif
.endm
TEXT_SECTION
.p2align 2
.global ASM_SYMBOL(__xray_FunctionEntry)
ASM_HIDDEN(__xray_FunctionEntry)
ASM_TYPE_FUNCTION(__xray_FunctionEntry)
ASM_SYMBOL(__xray_FunctionEntry):
/* Move the return address beyond the end of sled data. The 12 bytes of
data are inserted in the code of the runtime patch, between the call
instruction and the instruction returned into. The data contains 32
bits of instrumented function ID and 64 bits of the address of
the current trampoline. */
add x30, x30, #12
// Push the registers which may be modified by the handler function.
SAVE_REGISTERS
// Load the handler function pointer.
LOAD_HANDLER_ADDR x2, _ZN6__xray19XRayPatchedFunctionE
cbz x2, 1f
// Set w0 to the function ID (w17). Set x1 to XRayEntryType::ENTRY = 0.
mov w0, w17
mov x1, #0
// Call the handler with 2 parameters.
blr x2
1:
RESTORE_REGISTERS
ret
ASM_SIZE(__xray_FunctionEntry)
.p2align 2
.global ASM_SYMBOL(__xray_FunctionExit)
ASM_HIDDEN(__xray_FunctionExit)
ASM_TYPE_FUNCTION(__xray_FunctionExit)
ASM_SYMBOL(__xray_FunctionExit):
/* Move the return address beyond the end of sled data. The 12 bytes of
data are inserted in the code of the runtime patch, between the call
instruction and the instruction returned into. The data contains 32
bits of instrumented function ID and 64 bits of the address of
the current trampoline. */
add x30, x30, #12
SAVE_REGISTERS
// Load the handler function pointer into x2.
LOAD_HANDLER_ADDR x2, _ZN6__xray19XRayPatchedFunctionE
cbz x2, 1f
// Set w0 to the function ID (w17). Set x1 to XRayEntryType::EXIT = 1.
mov w0, w17
mov x1, #1
// Call the handler with 2 parameters.
blr x2
1:
RESTORE_REGISTERS
ret
ASM_SIZE(__xray_FunctionExit)
.p2align 2
.global ASM_SYMBOL(__xray_FunctionTailExit)
ASM_HIDDEN(__xray_FunctionTailExit)
ASM_TYPE_FUNCTION(__xray_FunctionTailExit)
ASM_SYMBOL(__xray_FunctionTailExit):
/* Move the return address beyond the end of sled data. The 12 bytes of
data are inserted in the code of the runtime patch, between the call
instruction and the instruction returned into. The data contains 32
bits of instrumented function ID and 64 bits of the address of
the current trampoline. */
add x30, x30, #12
// Save the registers which may be modified by the handler function.
SAVE_REGISTERS
// Load the handler function pointer into x2.
LOAD_HANDLER_ADDR x2, _ZN6__xray19XRayPatchedFunctionE
cbz x2, 1f
// Set w0 to the function ID (w17). Set x1 to XRayEntryType::TAIL = 2.
mov w0, w17
mov x1, #2
// Call the handler with 2 parameters.
blr x2
1:
RESTORE_REGISTERS
ret
ASM_SIZE(__xray_FunctionTailExit)
.p2align 2
.global ASM_SYMBOL(__xray_ArgLoggerEntry)
ASM_HIDDEN(__xray_ArgLoggerEntry)
ASM_TYPE_FUNCTION(__xray_ArgLoggerEntry)
ASM_SYMBOL(__xray_ArgLoggerEntry):
add x30, x30, #12
// Push the registers which may be modified by the handler function.
SAVE_REGISTERS
LOAD_HANDLER_ADDR x8, _ZN6__xray13XRayArgLoggerE
cbnz x8, 2f
// Load the handler function pointer.
LOAD_HANDLER_ADDR x8, _ZN6__xray19XRayPatchedFunctionE
cbz x8, 1f
2:
mov x2, x0
mov x1, #3 // XRayEntryType::LOG_ARGS_ENTRY
mov w0, w17
blr x8
1:
RESTORE_REGISTERS
ret
ASM_SIZE(__xray_ArgLoggerEntry)
// __xray_*Event have default visibility so that they can be referenced by user
// DSOs that do not link against the runtime.
.global ASM_SYMBOL(__xray_CustomEvent)
ASM_TYPE_FUNCTION(__xray_CustomEvent)
ASM_SYMBOL(__xray_CustomEvent):
SAVE_REGISTERS
LOAD_HANDLER_ADDR x8, _ZN6__xray22XRayPatchedCustomEventE
cbz x8, 1f
blr x8
1:
RESTORE_REGISTERS
ret
ASM_SIZE(__xray_CustomEvent)
.global ASM_SYMBOL(__xray_TypedEvent)
ASM_TYPE_FUNCTION(__xray_TypedEvent)
ASM_SYMBOL(__xray_TypedEvent):
SAVE_REGISTERS
LOAD_HANDLER_ADDR x8, _ZN6__xray21XRayPatchedTypedEventE
cbz x8, 1f
blr x8
1:
RESTORE_REGISTERS
ret
ASM_SIZE(__xray_TypedEvent)
NO_EXEC_STACK_DIRECTIVE