1
2 #ifndef _ASM_UPROBES_H
3 #define _ASM_UPROBES_H
4
5
6
7
8
9
10
11
12
13
14 typedef u32 uprobe_opcode_t;
15
16 #define MAX_UINSN_BYTES 4
17 #define UPROBE_XOL_SLOT_BYTES (MAX_UINSN_BYTES * 2)
18
19 #define UPROBE_SWBP_INSN_SIZE 4
20 #define UPROBE_SWBP_INSN 0x91d02073
21 #define UPROBE_STP_INSN 0x91d02074
22
23 #define ANNUL_BIT (1 << 29)
24
25 struct arch_uprobe {
26 union {
27 u8 insn[MAX_UINSN_BYTES];
28 u32 ixol;
29 };
30 };
31
32 struct arch_uprobe_task {
33 u64 saved_tpc;
34 u64 saved_tnpc;
35 };
36
37 struct task_struct;
38 struct notifier_block;
39
40 extern int arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long addr);
41 extern int arch_uprobe_pre_xol(struct arch_uprobe *aup, struct pt_regs *regs);
42 extern int arch_uprobe_post_xol(struct arch_uprobe *aup, struct pt_regs *regs);
43 extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk);
44 extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
45 extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
46
47 #endif