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