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 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 17 struct arch_uprobe { 18 unsigned long resume_era; 19 u32 insn[2]; 20 u32 ixol[2]; 21 bool simulate; 22 }; 23 24 struct arch_uprobe_task { 25 unsigned long saved_trap_nr; 26 }; 27 28 #ifdef CONFIG_UPROBES 29 bool uprobe_breakpoint_handler(struct pt_regs *regs); 30 bool uprobe_singlestep_handler(struct pt_regs *regs); 31 #else /* !CONFIG_UPROBES */ 32 static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) { return false; } 33 static inline bool uprobe_singlestep_handler(struct pt_regs *regs) { return false; } 34 #endif /* CONFIG_UPROBES */ 35 36 #endif /* __ASM_LOONGARCH_UPROBES_H */ 37