Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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 __emit_break(BRK_UPROBE_BP)
13#define UPROBE_SWBP_INSN_SIZE LOONGARCH_INSN_SIZE
14
15#define UPROBE_XOLBP_INSN __emit_break(BRK_UPROBE_XOLBP)
16
17struct arch_uprobe {
18 u32 insn[2];
19 u32 ixol[2];
20 bool simulate;
21};
22
23struct arch_uprobe_task {
24 unsigned long saved_trap_nr;
25};
26
27#ifdef CONFIG_UPROBES
28bool uprobe_breakpoint_handler(struct pt_regs *regs);
29bool uprobe_singlestep_handler(struct pt_regs *regs);
30#else /* !CONFIG_UPROBES */
31static inline bool uprobe_breakpoint_handler(struct pt_regs *regs) { return false; }
32static inline bool uprobe_singlestep_handler(struct pt_regs *regs) { return false; }
33#endif /* CONFIG_UPROBES */
34
35#endif /* __ASM_LOONGARCH_UPROBES_H */