simulate-insn.h (1801B)
1/* SPDX-License-Identifier: GPL-2.0+ */ 2 3#ifndef __CSKY_KERNEL_PROBES_SIMULATE_INSN_H 4#define __CSKY_KERNEL_PROBES_SIMULATE_INSN_H 5 6#define __CSKY_INSN_FUNCS(name, mask, val) \ 7static __always_inline bool csky_insn_is_##name(probe_opcode_t code) \ 8{ \ 9 BUILD_BUG_ON(~(mask) & (val)); \ 10 return (code & (mask)) == (val); \ 11} \ 12void simulate_##name(u32 opcode, long addr, struct pt_regs *regs); 13 14#define CSKY_INSN_SET_SIMULATE(name, code) \ 15 do { \ 16 if (csky_insn_is_##name(code)) { \ 17 api->handler = simulate_##name; \ 18 return INSN_GOOD_NO_SLOT; \ 19 } \ 20 } while (0) 21 22__CSKY_INSN_FUNCS(br16, 0xfc00, 0x0400) 23__CSKY_INSN_FUNCS(bt16, 0xfc00, 0x0800) 24__CSKY_INSN_FUNCS(bf16, 0xfc00, 0x0c00) 25__CSKY_INSN_FUNCS(jmp16, 0xffc3, 0x7800) 26__CSKY_INSN_FUNCS(jsr16, 0xffc3, 0x7801) 27__CSKY_INSN_FUNCS(lrw16, 0xfc00, 0x1000) 28__CSKY_INSN_FUNCS(pop16, 0xffe0, 0x1480) 29 30__CSKY_INSN_FUNCS(br32, 0x0000ffff, 0x0000e800) 31__CSKY_INSN_FUNCS(bt32, 0x0000ffff, 0x0000e860) 32__CSKY_INSN_FUNCS(bf32, 0x0000ffff, 0x0000e840) 33__CSKY_INSN_FUNCS(jmp32, 0xffffffe0, 0x0000e8c0) 34__CSKY_INSN_FUNCS(jsr32, 0xffffffe0, 0x0000e8e0) 35__CSKY_INSN_FUNCS(lrw32, 0x0000ffe0, 0x0000ea80) 36__CSKY_INSN_FUNCS(pop32, 0xfe00ffff, 0x0000ebc0) 37 38__CSKY_INSN_FUNCS(bez32, 0x0000ffe0, 0x0000e900) 39__CSKY_INSN_FUNCS(bnez32, 0x0000ffe0, 0x0000e920) 40__CSKY_INSN_FUNCS(bnezad32, 0x0000ffe0, 0x0000e820) 41__CSKY_INSN_FUNCS(bhsz32, 0x0000ffe0, 0x0000e9a0) 42__CSKY_INSN_FUNCS(bhz32, 0x0000ffe0, 0x0000e940) 43__CSKY_INSN_FUNCS(blsz32, 0x0000ffe0, 0x0000e960) 44__CSKY_INSN_FUNCS(blz32, 0x0000ffe0, 0x0000e980) 45__CSKY_INSN_FUNCS(bsr32, 0x0000fc00, 0x0000e000) 46__CSKY_INSN_FUNCS(jmpi32, 0x0000ffff, 0x0000eac0) 47__CSKY_INSN_FUNCS(jsri32, 0x0000ffff, 0x0000eae0) 48 49#endif /* __CSKY_KERNEL_PROBES_SIMULATE_INSN_H */