1/* SPDX-License-Identifier: GPL-2.0-only */
2
3#ifndef _ASM_RISCV_UPROBES_H
4#define _ASM_RISCV_UPROBES_H
5
6#include <asm/probes.h>
7#include <asm/patch.h>
8#include <asm/bug.h>
9
10#define MAX_UINSN_BYTES		8
11
12#ifdef CONFIG_RISCV_ISA_C
13#define UPROBE_SWBP_INSN	__BUG_INSN_16
14#define UPROBE_SWBP_INSN_SIZE	2
15#else
16#define UPROBE_SWBP_INSN	__BUG_INSN_32
17#define UPROBE_SWBP_INSN_SIZE	4
18#endif
19#define UPROBE_XOL_SLOT_BYTES	MAX_UINSN_BYTES
20
21typedef u32 uprobe_opcode_t;
22
23struct arch_uprobe_task {
24	unsigned long   saved_cause;
25};
26
27struct arch_uprobe {
28	union {
29		u8 insn[MAX_UINSN_BYTES];
30		u8 ixol[MAX_UINSN_BYTES];
31	};
32	struct arch_probe_insn api;
33	unsigned long insn_size;
34	bool simulate;
35};
36
37#ifdef CONFIG_UPROBES
38bool uprobe_breakpoint_handler(struct pt_regs *regs);
39bool uprobe_single_step_handler(struct pt_regs *regs);
40#else
41static inline bool uprobe_breakpoint_handler(struct pt_regs *regs)
42{
43	return false;
44}
45
46static inline bool uprobe_single_step_handler(struct pt_regs *regs)
47{
48	return false;
49}
50#endif /* CONFIG_UPROBES */
51#endif /* _ASM_RISCV_UPROBES_H */
52