xref: /linux/arch/loongarch/include/asm/uprobes.h (revision c586c97dd84a4d1c8df38171dc715f6241c7e6a3)
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 
7 typedef 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	__emit_break(BRK_UPROBE_BP)
13 #define UPROBE_SWBP_INSN_SIZE	LOONGARCH_INSN_SIZE
14 
15 #define UPROBE_XOLBP_INSN	__emit_break(BRK_UPROBE_XOLBP)
16 
17 struct arch_uprobe {
18 	u32	insn[2];
19 	u32	ixol[2];
20 	bool	simulate;
21 };
22 
23 struct arch_uprobe_task {
24 	unsigned long saved_trap_nr;
25 };
26 
27 #ifdef CONFIG_UPROBES
28 bool uprobe_breakpoint_handler(struct pt_regs *regs);
29 bool uprobe_singlestep_handler(struct pt_regs *regs);
30 #else /* !CONFIG_UPROBES */
uprobe_breakpoint_handler(struct pt_regs * regs)31 static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) { return false; }
uprobe_singlestep_handler(struct pt_regs * regs)32 static inline bool uprobe_singlestep_handler(struct pt_regs *regs) { return false; }
33 #endif /* CONFIG_UPROBES */
34 
35 #endif /* __ASM_LOONGARCH_UPROBES_H */
36