1/* SPDX-License-Identifier: GPL-2.0-only */
2#ifndef __ASM_LOONGARCH_UPROBES_H
3#define __ASM_LOONGARCH_UPROBES_H
4
5#include <asm/inst.h>
6
7typedef u32 uprobe_opcode_t;
8
9#define MAX_UINSN_BYTES		8
10#define UPROBE_XOL_SLOT_BYTES	MAX_UINSN_BYTES
11
12#define UPROBE_SWBP_INSN	larch_insn_gen_break(BRK_UPROBE_BP)
13#define UPROBE_SWBP_INSN_SIZE	LOONGARCH_INSN_SIZE
14
15#define UPROBE_XOLBP_INSN	larch_insn_gen_break(BRK_UPROBE_XOLBP)
16
17struct arch_uprobe {
18	unsigned long	resume_era;
19	u32	insn[2];
20	u32	ixol[2];
21	bool	simulate;
22};
23
24struct arch_uprobe_task {
25	unsigned long saved_trap_nr;
26};
27
28#ifdef CONFIG_UPROBES
29bool uprobe_breakpoint_handler(struct pt_regs *regs);
30bool uprobe_singlestep_handler(struct pt_regs *regs);
31#else /* !CONFIG_UPROBES */
32static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) { return false; }
33static inline bool uprobe_singlestep_handler(struct pt_regs *regs) { return false; }
34#endif /* CONFIG_UPROBES */
35
36#endif /* __ASM_LOONGARCH_UPROBES_H */
37