simulate-insn.h 1.8 KB

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