0001
0002
0003 #include <linux/kernel.h>
0004 #include <linux/kprobes.h>
0005 #include <linux/module.h>
0006 #include <linux/kallsyms.h>
0007 #include <asm/sections.h>
0008
0009 #include "decode-insn.h"
0010 #include "simulate-insn.h"
0011
0012
0013
0014
0015
0016 enum probe_insn __kprobes
0017 csky_probe_decode_insn(probe_opcode_t *addr, struct arch_probe_insn *api)
0018 {
0019 probe_opcode_t insn = le32_to_cpu(*addr);
0020
0021 CSKY_INSN_SET_SIMULATE(br16, insn);
0022 CSKY_INSN_SET_SIMULATE(bt16, insn);
0023 CSKY_INSN_SET_SIMULATE(bf16, insn);
0024 CSKY_INSN_SET_SIMULATE(jmp16, insn);
0025 CSKY_INSN_SET_SIMULATE(jsr16, insn);
0026 CSKY_INSN_SET_SIMULATE(lrw16, insn);
0027 CSKY_INSN_SET_SIMULATE(pop16, insn);
0028
0029 CSKY_INSN_SET_SIMULATE(br32, insn);
0030 CSKY_INSN_SET_SIMULATE(bt32, insn);
0031 CSKY_INSN_SET_SIMULATE(bf32, insn);
0032 CSKY_INSN_SET_SIMULATE(jmp32, insn);
0033 CSKY_INSN_SET_SIMULATE(jsr32, insn);
0034 CSKY_INSN_SET_SIMULATE(lrw32, insn);
0035 CSKY_INSN_SET_SIMULATE(pop32, insn);
0036
0037 CSKY_INSN_SET_SIMULATE(bez32, insn);
0038 CSKY_INSN_SET_SIMULATE(bnez32, insn);
0039 CSKY_INSN_SET_SIMULATE(bnezad32, insn);
0040 CSKY_INSN_SET_SIMULATE(bhsz32, insn);
0041 CSKY_INSN_SET_SIMULATE(bhz32, insn);
0042 CSKY_INSN_SET_SIMULATE(blsz32, insn);
0043 CSKY_INSN_SET_SIMULATE(blz32, insn);
0044 CSKY_INSN_SET_SIMULATE(bsr32, insn);
0045 CSKY_INSN_SET_SIMULATE(jmpi32, insn);
0046 CSKY_INSN_SET_SIMULATE(jsri32, insn);
0047
0048 return INSN_GOOD;
0049 }