/* SPDX-License-Identifier: GPL-2.0-only */ #ifndef __ASM_LOONGARCH_UPROBES_H #define __ASM_LOONGARCH_UPROBES_H #include <asm/inst.h> typedef u32 uprobe_opcode_t; #define MAX_UINSN_BYTES 8 #define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES #define UPROBE_SWBP_INSN larch_insn_gen_break(BRK_UPROBE_BP) #define UPROBE_SWBP_INSN_SIZE LOONGARCH_INSN_SIZE #define UPROBE_XOLBP_INSN larch_insn_gen_break(BRK_UPROBE_XOLBP) struct arch_uprobe { unsigned long resume_era; u32 insn[2]; u32 ixol[2]; bool simulate; }; struct arch_uprobe_task { unsigned long saved_trap_nr; }; #ifdef CONFIG_UPROBES bool uprobe_breakpoint_handler(struct pt_regs *regs); bool uprobe_singlestep_handler(struct pt_regs *regs); #else /* !CONFIG_UPROBES */ static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) { return false; } static inline bool uprobe_singlestep_handler(struct pt_regs *regs) { return false; } #endif /* CONFIG_UPROBES */ #endif /* __ASM_LOONGARCH_UPROBES_H */