1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #ifndef __ASM_LOONGARCH_KPROBES_H
3 #define __ASM_LOONGARCH_KPROBES_H
5 #include <asm-generic/kprobes.h>
10 #include <asm/cacheflush.h>
12 #define __ARCH_WANT_KPROBES_INSN_SLOT
13 #define MAX_INSN_SIZE 2
15 #define flush_insn_slot(p) \
18 flush_icache_range((unsigned long)p->addr, \
19 (unsigned long)p->addr + \
20 (MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \
23 #define kretprobe_blacklist_size 0
25 typedef u32 kprobe_opcode_t
;
27 /* Architecture specific copy of original instruction */
28 struct arch_specific_insn
{
29 /* copy of the original instruction */
30 kprobe_opcode_t
*insn
;
31 /* restore address after simulation */
32 unsigned long restore
;
40 /* per-cpu kprobe control block */
41 struct kprobe_ctlblk
{
42 unsigned int kprobe_status
;
43 unsigned long saved_status
;
44 struct prev_kprobe prev_kprobe
;
47 void arch_remove_kprobe(struct kprobe
*p
);
48 bool kprobe_fault_handler(struct pt_regs
*regs
, int trapnr
);
49 bool kprobe_breakpoint_handler(struct pt_regs
*regs
);
50 bool kprobe_singlestep_handler(struct pt_regs
*regs
);
52 #else /* !CONFIG_KPROBES */
54 static inline bool kprobe_breakpoint_handler(struct pt_regs
*regs
) { return false; }
55 static inline bool kprobe_singlestep_handler(struct pt_regs
*regs
) { return false; }
57 #endif /* CONFIG_KPROBES */
58 #endif /* __ASM_LOONGARCH_KPROBES_H */