Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 
0003 #ifndef __CSKY_KERNEL_PROBES_SIMULATE_INSN_H
0004 #define __CSKY_KERNEL_PROBES_SIMULATE_INSN_H
0005 
0006 #define __CSKY_INSN_FUNCS(name, mask, val)              \
0007 static __always_inline bool csky_insn_is_##name(probe_opcode_t code)    \
0008 {                                   \
0009     BUILD_BUG_ON(~(mask) & (val));                  \
0010     return (code & (mask)) == (val);                \
0011 }                                   \
0012 void simulate_##name(u32 opcode, long addr, struct pt_regs *regs);
0013 
0014 #define CSKY_INSN_SET_SIMULATE(name, code)              \
0015     do {                                \
0016         if (csky_insn_is_##name(code)) {            \
0017             api->handler = simulate_##name;         \
0018             return INSN_GOOD_NO_SLOT;           \
0019         }                           \
0020     } while (0)
0021 
0022 __CSKY_INSN_FUNCS(br16,     0xfc00, 0x0400)
0023 __CSKY_INSN_FUNCS(bt16,     0xfc00, 0x0800)
0024 __CSKY_INSN_FUNCS(bf16,     0xfc00, 0x0c00)
0025 __CSKY_INSN_FUNCS(jmp16,    0xffc3, 0x7800)
0026 __CSKY_INSN_FUNCS(jsr16,    0xffc3, 0x7801)
0027 __CSKY_INSN_FUNCS(lrw16,    0xfc00, 0x1000)
0028 __CSKY_INSN_FUNCS(pop16,    0xffe0, 0x1480)
0029 
0030 __CSKY_INSN_FUNCS(br32,     0x0000ffff, 0x0000e800)
0031 __CSKY_INSN_FUNCS(bt32,     0x0000ffff, 0x0000e860)
0032 __CSKY_INSN_FUNCS(bf32,     0x0000ffff, 0x0000e840)
0033 __CSKY_INSN_FUNCS(jmp32,    0xffffffe0, 0x0000e8c0)
0034 __CSKY_INSN_FUNCS(jsr32,    0xffffffe0, 0x0000e8e0)
0035 __CSKY_INSN_FUNCS(lrw32,    0x0000ffe0, 0x0000ea80)
0036 __CSKY_INSN_FUNCS(pop32,    0xfe00ffff, 0x0000ebc0)
0037 
0038 __CSKY_INSN_FUNCS(bez32,    0x0000ffe0, 0x0000e900)
0039 __CSKY_INSN_FUNCS(bnez32,   0x0000ffe0, 0x0000e920)
0040 __CSKY_INSN_FUNCS(bnezad32, 0x0000ffe0, 0x0000e820)
0041 __CSKY_INSN_FUNCS(bhsz32,   0x0000ffe0, 0x0000e9a0)
0042 __CSKY_INSN_FUNCS(bhz32,    0x0000ffe0, 0x0000e940)
0043 __CSKY_INSN_FUNCS(blsz32,   0x0000ffe0, 0x0000e960)
0044 __CSKY_INSN_FUNCS(blz32,    0x0000ffe0, 0x0000e980)
0045 __CSKY_INSN_FUNCS(bsr32,    0x0000fc00, 0x0000e000)
0046 __CSKY_INSN_FUNCS(jmpi32,   0x0000ffff, 0x0000eac0)
0047 __CSKY_INSN_FUNCS(jsri32,   0x0000ffff, 0x0000eae0)
0048 
0049 #endif /* __CSKY_KERNEL_PROBES_SIMULATE_INSN_H */