================
@@ -0,0 +1,96 @@
+//===-- xray_trampoline_riscv_common.s --------------------------*- ASM 
-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// This implements the trampolines code shared between riscv32 and riscv64.
+//
+//===----------------------------------------------------------------------===//
+
+#include "../builtins/assembly.h"
+
+       .text
+       .p2align 2
+       .global ASM_SYMBOL(__xray_FunctionEntry)
+       ASM_TYPE_FUNCTION(__xray_FunctionEntry)
+ASM_SYMBOL(__xray_FunctionEntry):
+       CFI_STARTPROC
+        SAVE_ARG_REGISTERS
+
+       // Load the handler function pointer into a2
+       la      a2, ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
+        LOAD_XLEN   a2, 0(a2)
+
+       // Handler address will be null if it is not set
+       beq     a2, x0, 1f
+
+       // If we reach here, we are tracing an event
+       // a0 already contains function id
+       // a1 = 0 means we are tracing an entry event
+       mv      a1, x0
+       jalr    a2
+
+1:
+        RESTORE_ARG_REGISTERS
+       jr      ra
+       ASM_SIZE(__xray_FunctionEntry)
+       CFI_ENDPROC
+
+       .text
+       .p2align 2
+       .global ASM_SYMBOL(__xray_FunctionExit)
+       ASM_TYPE_FUNCTION(__xray_FunctionExit)
+ASM_SYMBOL(__xray_FunctionExit):
+       CFI_STARTPROC
+       SAVE_RET_REGISTERS
+
+       // Load the handler function pointer into a2
+       la      a2, ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
+        LOAD_XLEN   a2, 0(a2)
+
+       // Handler address will be null if it is not set
+       beq     a2, x0, 1f
+
+       // If we reach here, we are tracing an event
+       // a0 already contains function id
+       // a1 = 1 means we are tracing an exit event
+       addi    a1, x0, 1
+       jalr    a2
+
+1:
+       RESTORE_RET_REGISTERS
+        jr     ra
+       ASM_SIZE(__xray_FunctionExit)
+       CFI_ENDPROC
+
+       .text
+       .p2align 2
+       .global ASM_SYMBOL(__xray_FunctionTailExit)
+       ASM_TYPE_FUNCTION(__xray_FunctionTailExit)
+ASM_SYMBOL(__xray_FunctionTailExit):
+       CFI_STARTPROC
+        SAVE_ARG_REGISTERS
+
+       // Load the handler function pointer into a2
+       la      a2, ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
+        LOAD_XLEN   a2, 0(a2)
+
+       // Handler address will be null if it is not set
+       beq     a2, x0, 1f
+
+       // If we reach here, we are tracing an event
+       // a0 already contains function id
+       // a1 = 2 means we are tracing a tail exit event
+       addi    a1, x0, 2
----------------
topperc wrote:

Use `li`?

https://github.com/llvm/llvm-project/pull/117368
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to