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