1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 #ifndef _ASM_UPROBES_H
3 #define _ASM_UPROBES_H
4 /*
5 * User-space Probes (UProbes) for x86
6 *
7 * Copyright (C) IBM Corporation, 2008-2011
8 * Authors:
9 * Srikar Dronamraju
10 * Jim Keniston
11 */
12
13 #include <linux/notifier.h>
14
15 typedef u8 uprobe_opcode_t;
16
17 #define MAX_UINSN_BYTES 16
18 #define UPROBE_XOL_SLOT_BYTES 128 /* to keep it cache aligned */
19
20 #define UPROBE_SWBP_INSN 0xcc
21 #define UPROBE_SWBP_INSN_SIZE 1
22
23 struct uprobe_xol_ops;
24
25 struct arch_uprobe {
26 union {
27 u8 insn[MAX_UINSN_BYTES];
28 u8 ixol[MAX_UINSN_BYTES];
29 };
30
31 const struct uprobe_xol_ops *ops;
32
33 union {
34 struct {
35 s32 offs;
36 u8 ilen;
37 u8 opc1;
38 } branch;
39 struct {
40 u8 fixups;
41 u8 ilen;
42 } defparam;
43 struct {
44 u8 reg_offset; /* to the start of pt_regs */
45 u8 ilen;
46 } push;
47 };
48 };
49
50 struct arch_uprobe_task {
51 #ifdef CONFIG_X86_64
52 unsigned long saved_scratch_register;
53 #endif
54 unsigned int saved_trap_nr;
55 unsigned int saved_tf;
56 };
57
58 #endif /* _ASM_UPROBES_H */