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)31static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) { return false; } uprobe_singlestep_handler(struct pt_regs * regs)32static inline bool uprobe_singlestep_handler(struct pt_regs *regs) { return false; } 33 #endif /* CONFIG_UPROBES */ 34 35 #endif /* __ASM_LOONGARCH_UPROBES_H */ 36