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