aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/ObjectFile.cpp
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2023-06-23 09:24:18 -0700
committerFangrui Song <i@maskray.me>2023-06-23 09:24:18 -0700
commitf9fd0062b60ee53055a7a6f97e4256bfe2c153ed (patch)
tree710d5f23bfefb0db6fa102c5daa493751f90c657 /llvm/lib/Object/ObjectFile.cpp
parentb0f6fd24dc12cf860e6b01f417badb115c7535ce (diff)
downloadllvm-f9fd0062b60ee53055a7a6f97e4256bfe2c153ed.zip
llvm-f9fd0062b60ee53055a7a6f97e4256bfe2c153ed.tar.gz
llvm-f9fd0062b60ee53055a7a6f97e4256bfe2c153ed.tar.bz2
[XRay][AArch64] Suppport __xray_customevent/__xray_typedevent
`__xray_customevent` and `__xray_typedevent` are built-in functions in Clang. With -fxray-instrument, they are lowered to intrinsics llvm.xray.customevent and llvm.xray.typedevent, respectively. These intrinsics are then lowered to TargetOpcode::{PATCHABLE_EVENT_CALL,PATCHABLE_TYPED_EVENT_CALL}. The target is responsible for generating a code sequence that calls either `__xray_CustomEvent` (with 2 arguments) or `__xray_TypedEvent` (with 3 arguments). Before patching, the code sequence is prefixed by a branch instruction that skips the rest of the code sequence. After patching (compiler-rt/lib/xray/xray_AArch64.cpp), the branch instruction becomes a NOP and the function call will take effects. This patch implements the lowering process for {PATCHABLE_EVENT_CALL,PATCHABLE_TYPED_EVENT_CALL} and implements the runtime. ``` // Lowering of PATCHABLE_EVENT_CALL .Lxray_sled_N: b #24 stp x0, x1, [sp, #-16]! x0 = reg of op0 x1 = reg of op1 bl __xray_CustomEvent ldrp x0, x1, [sp], #16 ``` As a result, two updated tests in compiler-rt/test/xray/TestCases/Posix/ now pass on AArch64. Reviewed By: peter.smith Differential Revision: https://reviews.llvm.org/D153320
Diffstat (limited to 'llvm/lib/Object/ObjectFile.cpp')
0 files changed, 0 insertions, 0 deletions