| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #ifndef _ASM_RISCV_UPROBES_H |
| #define _ASM_RISCV_UPROBES_H |
| |
| #include <asm/probes.h> |
| #include <asm/patch.h> |
| #include <asm/bug.h> |
| |
| #define MAX_UINSN_BYTES 8 |
| |
| #ifdef CONFIG_RISCV_ISA_C |
| #define UPROBE_SWBP_INSN __BUG_INSN_16 |
| #define UPROBE_SWBP_INSN_SIZE 2 |
| #else |
| #define UPROBE_SWBP_INSN __BUG_INSN_32 |
| #define UPROBE_SWBP_INSN_SIZE 4 |
| #endif |
| #define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES |
| |
| typedef u32 uprobe_opcode_t; |
| |
| struct arch_uprobe_task { |
| unsigned long saved_cause; |
| }; |
| |
| struct arch_uprobe { |
| union { |
| u8 insn[MAX_UINSN_BYTES]; |
| u8 ixol[MAX_UINSN_BYTES]; |
| }; |
| struct arch_probe_insn api; |
| unsigned long insn_size; |
| bool simulate; |
| }; |
| |
| #ifdef CONFIG_UPROBES |
| bool uprobe_breakpoint_handler(struct pt_regs *regs); |
| bool uprobe_single_step_handler(struct pt_regs *regs); |
| #else |
| static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) |
| { |
| return false; |
| } |
| |
| static inline bool uprobe_single_step_handler(struct pt_regs *regs) |
| { |
| return false; |
| } |
| #endif /* CONFIG_UPROBES */ |
| #endif /* _ASM_RISCV_UPROBES_H */ |