@@ -22,6 +22,47 @@ void my_direct_func2(unsigned long ip)
2222extern void my_tramp1 (void * );
2323extern void my_tramp2 (void * );
2424
25+ #ifdef CONFIG_RISCV
26+ #include <asm/asm.h>
27+
28+ asm (
29+ " .pushsection .text, \"ax\", @progbits\n"
30+ " .type my_tramp1, @function\n"
31+ " .globl my_tramp1\n"
32+ " my_tramp1:\n"
33+ " addi sp,sp,-3*" SZREG "\n"
34+ " " REG_S " a0,0*" SZREG "(sp)\n"
35+ " " REG_S " t0,1*" SZREG "(sp)\n"
36+ " " REG_S " ra,2*" SZREG "(sp)\n"
37+ " mv a0,t0\n"
38+ " call my_direct_func1\n"
39+ " " REG_L " a0,0*" SZREG "(sp)\n"
40+ " " REG_L " t0,1*" SZREG "(sp)\n"
41+ " " REG_L " ra,2*" SZREG "(sp)\n"
42+ " addi sp,sp,3*" SZREG "\n"
43+ " jr t0\n"
44+ " .size my_tramp1, .-my_tramp1\n"
45+
46+ " .type my_tramp2, @function\n"
47+ " .globl my_tramp2\n"
48+ " my_tramp2:\n"
49+ " addi sp,sp,-3*" SZREG "\n"
50+ " " REG_S " a0,0*" SZREG "(sp)\n"
51+ " " REG_S " t0,1*" SZREG "(sp)\n"
52+ " " REG_S " ra,2*" SZREG "(sp)\n"
53+ " mv a0,t0\n"
54+ " call my_direct_func2\n"
55+ " " REG_L " a0,0*" SZREG "(sp)\n"
56+ " " REG_L " t0,1*" SZREG "(sp)\n"
57+ " " REG_L " ra,2*" SZREG "(sp)\n"
58+ " addi sp,sp,3*" SZREG "\n"
59+ " jr t0\n"
60+ " .size my_tramp2, .-my_tramp2\n"
61+ " .popsection\n"
62+ );
63+
64+ #endif /* CONFIG_RISCV */
65+
2566#ifdef CONFIG_X86_64
2667
2768#include <asm/ibt.h>
0 commit comments