1*f2fab612SNam Cao/* SPDX-License-Identifier: GPL-2.0+ */ 2*f2fab612SNam Cao 3*f2fab612SNam Cao#include <linux/linkage.h> 4*f2fab612SNam Cao#include <asm/asm.h> 5*f2fab612SNam Cao#include "test-kprobes.h" 6*f2fab612SNam Cao 7*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_add) 8*f2fab612SNam Cao li a1, KPROBE_TEST_MAGIC_UPPER 9*f2fab612SNam Cao li a2, KPROBE_TEST_MAGIC_LOWER 10*f2fab612SNam Caotest_kprobes_add_addr1: 11*f2fab612SNam Cao add a1, a1, a2 12*f2fab612SNam Caotest_kprobes_add_addr2: 13*f2fab612SNam Cao add a0, a1, x0 14*f2fab612SNam Cao ret 15*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_add) 16*f2fab612SNam Cao 17*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_jal) 18*f2fab612SNam Cao li a0, 0 19*f2fab612SNam Cao mv a1, ra 20*f2fab612SNam Cao .option push 21*f2fab612SNam Cao .option norvc 22*f2fab612SNam Caotest_kprobes_jal_addr1: 23*f2fab612SNam Cao jal x0, 2f 24*f2fab612SNam Cao ret 25*f2fab612SNam Cao .option pop 26*f2fab612SNam Cao1: li a0, KPROBE_TEST_MAGIC_UPPER 27*f2fab612SNam Cao ret 28*f2fab612SNam Cao .option push 29*f2fab612SNam Cao .option norvc 30*f2fab612SNam Caotest_kprobes_jal_addr2: 31*f2fab612SNam Cao2: jal 1b 32*f2fab612SNam Cao .option pop 33*f2fab612SNam Cao li a2, KPROBE_TEST_MAGIC_LOWER 34*f2fab612SNam Cao add a0, a0, a2 35*f2fab612SNam Cao jr a1 36*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_jal) 37*f2fab612SNam Cao 38*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_jalr) 39*f2fab612SNam Cao la a0, 1f 40*f2fab612SNam Cao mv a1, ra 41*f2fab612SNam Cao .option push 42*f2fab612SNam Cao .option norvc 43*f2fab612SNam Caotest_kprobes_jalr_addr: 44*f2fab612SNam Cao jalr a0 45*f2fab612SNam Cao .option pop 46*f2fab612SNam Cao li t0, KPROBE_TEST_MAGIC_UPPER 47*f2fab612SNam Cao add a0, a0, t0 48*f2fab612SNam Cao jr a1 49*f2fab612SNam Cao1: li a0, KPROBE_TEST_MAGIC_LOWER 50*f2fab612SNam Cao ret 51*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_jalr) 52*f2fab612SNam Cao 53*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_auipc) 54*f2fab612SNam Caotest_kprobes_auipc_addr: 55*f2fab612SNam Cao auipc a0, KPROBE_TEST_MAGIC_LOWER 56*f2fab612SNam Cao la a1, test_kprobes_auipc_addr 57*f2fab612SNam Cao sub a0, a0, a1 58*f2fab612SNam Cao srli a0, a0, 12 59*f2fab612SNam Cao li a1, KPROBE_TEST_MAGIC_UPPER 60*f2fab612SNam Cao add a0, a0, a1 61*f2fab612SNam Cao ret 62*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_auipc) 63*f2fab612SNam Cao 64*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_branch) 65*f2fab612SNam Cao .option push 66*f2fab612SNam Cao .option norvc 67*f2fab612SNam Cao li a0, 0 68*f2fab612SNam Cao li a1, 1 69*f2fab612SNam Cao li a2, 2 70*f2fab612SNam Caotest_kprobes_branch_addr1: 71*f2fab612SNam Cao beqz a0, 1f 72*f2fab612SNam Cao ret 73*f2fab612SNam Cao1: 74*f2fab612SNam Caotest_kprobes_branch_addr2: 75*f2fab612SNam Cao beqz a1, 3f 76*f2fab612SNam Caotest_kprobes_branch_addr3: 77*f2fab612SNam Cao bnez a0, 3f 78*f2fab612SNam Caotest_kprobes_branch_addr4: 79*f2fab612SNam Cao bnez a2, 1f 80*f2fab612SNam Cao ret 81*f2fab612SNam Cao1: 82*f2fab612SNam Caotest_kprobes_branch_addr5: 83*f2fab612SNam Cao bge a1, a2, 3f 84*f2fab612SNam Caotest_kprobes_branch_addr6: 85*f2fab612SNam Cao bge a2, a1, 2f 86*f2fab612SNam Cao ret 87*f2fab612SNam Cao1: 88*f2fab612SNam Cao li t0, KPROBE_TEST_MAGIC_UPPER 89*f2fab612SNam Cao add a0, a0, t0 90*f2fab612SNam Cao ret 91*f2fab612SNam Cao2: 92*f2fab612SNam Caotest_kprobes_branch_addr7: 93*f2fab612SNam Cao blt a2, a1, 3f 94*f2fab612SNam Cao li a0, KPROBE_TEST_MAGIC_LOWER 95*f2fab612SNam Caotest_kprobes_branch_addr8: 96*f2fab612SNam Cao blt a1, a2, 1b 97*f2fab612SNam Cao3: 98*f2fab612SNam Cao li a0, 0 99*f2fab612SNam Cao ret 100*f2fab612SNam Cao .option pop 101*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_branch) 102*f2fab612SNam Cao 103*f2fab612SNam Cao#ifdef CONFIG_RISCV_ISA_C 104*f2fab612SNam Cao 105*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_c_j) 106*f2fab612SNam Cao li a0, 0 107*f2fab612SNam Caotest_kprobes_branch_c_j_addr1: 108*f2fab612SNam Cao c.j 2f 109*f2fab612SNam Cao1: 110*f2fab612SNam Cao li a1, KPROBE_TEST_MAGIC_UPPER 111*f2fab612SNam Cao add a0, a0, a1 112*f2fab612SNam Cao ret 113*f2fab612SNam Cao2: li a0, KPROBE_TEST_MAGIC_LOWER 114*f2fab612SNam Caotest_kprobes_branch_c_j_addr2: 115*f2fab612SNam Cao c.j 1b 116*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_c_j) 117*f2fab612SNam Cao 118*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_c_jr) 119*f2fab612SNam Cao la a0, 2f 120*f2fab612SNam Caotest_kprobes_c_jr_addr1: 121*f2fab612SNam Cao c.jr a0 122*f2fab612SNam Cao ret 123*f2fab612SNam Cao1: li a1, KPROBE_TEST_MAGIC_LOWER 124*f2fab612SNam Cao add a0, a0, a1 125*f2fab612SNam Cao ret 126*f2fab612SNam Cao2: 127*f2fab612SNam Cao li a0, KPROBE_TEST_MAGIC_UPPER 128*f2fab612SNam Cao la a1, 1b 129*f2fab612SNam Caotest_kprobes_c_jr_addr2: 130*f2fab612SNam Cao c.jr a1 131*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_c_jr) 132*f2fab612SNam Cao 133*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_c_jalr) 134*f2fab612SNam Cao mv a1, ra 135*f2fab612SNam Cao la a0, 1f 136*f2fab612SNam Caotest_kprobes_c_jalr_addr: 137*f2fab612SNam Cao c.jalr a0 138*f2fab612SNam Cao li a2, KPROBE_TEST_MAGIC_UPPER 139*f2fab612SNam Cao add a0, a0, a2 140*f2fab612SNam Cao jr a1 141*f2fab612SNam Cao1: li a0, KPROBE_TEST_MAGIC_LOWER 142*f2fab612SNam Cao ret 143*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_c_jalr) 144*f2fab612SNam Cao 145*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_c_beqz) 146*f2fab612SNam Cao li a0, 0 147*f2fab612SNam Cao li a1, 1 148*f2fab612SNam Caotest_kprobes_c_beqz_addr1: 149*f2fab612SNam Cao c.beqz a0, 2f 150*f2fab612SNam Cao ret 151*f2fab612SNam Cao1: li a1, KPROBE_TEST_MAGIC_UPPER 152*f2fab612SNam Cao add a0, a0, a1 153*f2fab612SNam Cao ret 154*f2fab612SNam Caotest_kprobes_c_beqz_addr2: 155*f2fab612SNam Cao2: c.beqz a1, 3f 156*f2fab612SNam Cao li a0, KPROBE_TEST_MAGIC_LOWER 157*f2fab612SNam Cao mv a1, x0 158*f2fab612SNam Caotest_kprobes_c_beqz_addr3: 159*f2fab612SNam Cao c.beqz a1, 1b 160*f2fab612SNam Cao3: li a0, 0 161*f2fab612SNam Cao ret 162*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_c_beqz) 163*f2fab612SNam Cao 164*f2fab612SNam CaoSYM_FUNC_START(test_kprobes_c_bnez) 165*f2fab612SNam Cao li a0, 0 166*f2fab612SNam Cao li a1, 1 167*f2fab612SNam Caotest_kprobes_c_bnez_addr1: 168*f2fab612SNam Cao c.bnez a1, 2f 169*f2fab612SNam Cao ret 170*f2fab612SNam Cao1: li a1, KPROBE_TEST_MAGIC_UPPER 171*f2fab612SNam Cao add a0, a0, a1 172*f2fab612SNam Cao ret 173*f2fab612SNam Caotest_kprobes_c_bnez_addr2: 174*f2fab612SNam Cao2: c.bnez a0, 3f 175*f2fab612SNam Cao li a0, KPROBE_TEST_MAGIC_LOWER 176*f2fab612SNam Caotest_kprobes_c_bnez_addr3: 177*f2fab612SNam Cao c.bnez a0, 1b 178*f2fab612SNam Cao3: li a0, 0 179*f2fab612SNam Cao ret 180*f2fab612SNam CaoSYM_FUNC_END(test_kprobes_c_bnez) 181*f2fab612SNam Cao 182*f2fab612SNam Cao#endif /* CONFIG_RISCV_ISA_C */ 183*f2fab612SNam Cao 184*f2fab612SNam CaoSYM_DATA_START(test_kprobes_addresses) 185*f2fab612SNam Cao RISCV_PTR test_kprobes_add_addr1 186*f2fab612SNam Cao RISCV_PTR test_kprobes_add_addr2 187*f2fab612SNam Cao RISCV_PTR test_kprobes_jal_addr1 188*f2fab612SNam Cao RISCV_PTR test_kprobes_jal_addr2 189*f2fab612SNam Cao RISCV_PTR test_kprobes_jalr_addr 190*f2fab612SNam Cao RISCV_PTR test_kprobes_auipc_addr 191*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr1 192*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr2 193*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr3 194*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr4 195*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr5 196*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr6 197*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr7 198*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_addr8 199*f2fab612SNam Cao#ifdef CONFIG_RISCV_ISA_C 200*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_c_j_addr1 201*f2fab612SNam Cao RISCV_PTR test_kprobes_branch_c_j_addr2 202*f2fab612SNam Cao RISCV_PTR test_kprobes_c_jr_addr1 203*f2fab612SNam Cao RISCV_PTR test_kprobes_c_jr_addr2 204*f2fab612SNam Cao RISCV_PTR test_kprobes_c_jalr_addr 205*f2fab612SNam Cao RISCV_PTR test_kprobes_c_beqz_addr1 206*f2fab612SNam Cao RISCV_PTR test_kprobes_c_beqz_addr2 207*f2fab612SNam Cao RISCV_PTR test_kprobes_c_beqz_addr3 208*f2fab612SNam Cao RISCV_PTR test_kprobes_c_bnez_addr1 209*f2fab612SNam Cao RISCV_PTR test_kprobes_c_bnez_addr2 210*f2fab612SNam Cao RISCV_PTR test_kprobes_c_bnez_addr3 211*f2fab612SNam Cao#endif /* CONFIG_RISCV_ISA_C */ 212*f2fab612SNam Cao RISCV_PTR 0 213*f2fab612SNam CaoSYM_DATA_END(test_kprobes_addresses) 214*f2fab612SNam Cao 215*f2fab612SNam CaoSYM_DATA_START(test_kprobes_functions) 216*f2fab612SNam Cao RISCV_PTR test_kprobes_add 217*f2fab612SNam Cao RISCV_PTR test_kprobes_jal 218*f2fab612SNam Cao RISCV_PTR test_kprobes_jalr 219*f2fab612SNam Cao RISCV_PTR test_kprobes_auipc 220*f2fab612SNam Cao RISCV_PTR test_kprobes_branch 221*f2fab612SNam Cao#ifdef CONFIG_RISCV_ISA_C 222*f2fab612SNam Cao RISCV_PTR test_kprobes_c_j 223*f2fab612SNam Cao RISCV_PTR test_kprobes_c_jr 224*f2fab612SNam Cao RISCV_PTR test_kprobes_c_jalr 225*f2fab612SNam Cao RISCV_PTR test_kprobes_c_beqz 226*f2fab612SNam Cao RISCV_PTR test_kprobes_c_bnez 227*f2fab612SNam Cao#endif /* CONFIG_RISCV_ISA_C */ 228*f2fab612SNam Cao RISCV_PTR 0 229*f2fab612SNam CaoSYM_DATA_END(test_kprobes_functions) 230