Thomas Gleixner | 1a59d1b8 | 2019-05-27 08:55:05 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 2 | #ifndef _ASM_UPROBES_H |
3 | #define _ASM_UPROBES_H | ||||
4 | /* | ||||
Ingo Molnar | 7b2d81d | 2012-02-17 09:27:41 +0100 | [diff] [blame] | 5 | * User-space Probes (UProbes) for x86 |
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 6 | * |
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 7 | * Copyright (C) IBM Corporation, 2008-2011 |
8 | * Authors: | ||||
9 | * Srikar Dronamraju | ||||
10 | * Jim Keniston | ||||
11 | */ | ||||
12 | |||||
Srikar Dronamraju | 0326f5a | 2012-03-13 23:30:11 +0530 | [diff] [blame] | 13 | #include <linux/notifier.h> |
14 | |||||
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 15 | typedef u8 uprobe_opcode_t; |
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 16 | |
Ingo Molnar | 7b2d81d | 2012-02-17 09:27:41 +0100 | [diff] [blame] | 17 | #define MAX_UINSN_BYTES 16 |
Srikar Dronamraju | 900771a | 2012-03-12 14:55:14 +0530 | [diff] [blame] | 18 | #define UPROBE_XOL_SLOT_BYTES 128 /* to keep it cache aligned */ |
Ingo Molnar | 7b2d81d | 2012-02-17 09:27:41 +0100 | [diff] [blame] | 19 | |
Srikar Dronamraju | 5cb4ac3 | 2012-03-12 14:55:45 +0530 | [diff] [blame] | 20 | #define UPROBE_SWBP_INSN 0xcc |
21 | #define UPROBE_SWBP_INSN_SIZE 1 | ||||
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 22 | |
Oleg Nesterov | 8ad8e9d | 2014-03-31 21:01:31 +0200 | [diff] [blame] | 23 | struct uprobe_xol_ops; |
24 | |||||
Srikar Dronamraju | 3ff54ef | 2012-02-22 14:46:02 +0530 | [diff] [blame] | 25 | struct arch_uprobe { |
Oleg Nesterov | 8a8de66 | 2013-11-04 20:27:13 +0100 | [diff] [blame] | 26 | union { |
27 | u8 insn[MAX_UINSN_BYTES]; | ||||
28 | u8 ixol[MAX_UINSN_BYTES]; | ||||
29 | }; | ||||
Oleg Nesterov | 8ad8e9d | 2014-03-31 21:01:31 +0200 | [diff] [blame] | 30 | |
Oleg Nesterov | 8ad8e9d | 2014-03-31 21:01:31 +0200 | [diff] [blame] | 31 | const struct uprobe_xol_ops *ops; |
32 | |||||
Oleg Nesterov | 7ba6db2 | 2014-04-05 20:05:02 +0200 | [diff] [blame] | 33 | union { |
Oleg Nesterov | 7ba6db2 | 2014-04-05 20:05:02 +0200 | [diff] [blame] | 34 | struct { |
35 | s32 offs; | ||||
36 | u8 ilen; | ||||
Oleg Nesterov | 8e89c0b | 2014-04-06 18:11:02 +0200 | [diff] [blame] | 37 | u8 opc1; |
Oleg Nesterov | 97aa5cd | 2014-04-22 16:20:55 +0200 | [diff] [blame] | 38 | } branch; |
39 | struct { | ||||
Oleg Nesterov | 78d9af4 | 2014-04-24 18:52:37 +0200 | [diff] [blame] | 40 | u8 fixups; |
Oleg Nesterov | 1dc76e6 | 2014-04-25 18:06:19 +0200 | [diff] [blame] | 41 | u8 ilen; |
Oleg Nesterov | 5cdb76d | 2014-06-01 21:13:46 +0200 | [diff] [blame] | 42 | } defparam; |
Yonghong Song | e7ed9d9 | 2017-11-30 16:12:02 -0800 | [diff] [blame] | 43 | struct { |
44 | u8 reg_offset; /* to the start of pt_regs */ | ||||
45 | u8 ilen; | ||||
46 | } push; | ||||
Oleg Nesterov | 7ba6db2 | 2014-04-05 20:05:02 +0200 | [diff] [blame] | 47 | }; |
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 48 | }; |
49 | |||||
Srikar Dronamraju | 0326f5a | 2012-03-13 23:30:11 +0530 | [diff] [blame] | 50 | struct arch_uprobe_task { |
Srikar Dronamraju | 0326f5a | 2012-03-13 23:30:11 +0530 | [diff] [blame] | 51 | #ifdef CONFIG_X86_64 |
52 | unsigned long saved_scratch_register; | ||||
53 | #endif | ||||
Oleg Nesterov | baedbf0 | 2012-09-03 17:02:16 +0200 | [diff] [blame] | 54 | unsigned int saved_trap_nr; |
Oleg Nesterov | 3a4664a | 2012-09-03 16:05:10 +0200 | [diff] [blame] | 55 | unsigned int saved_tf; |
Srikar Dronamraju | 0326f5a | 2012-03-13 23:30:11 +0530 | [diff] [blame] | 56 | }; |
57 | |||||
Srikar Dronamraju | 2b14449 | 2012-02-09 14:56:42 +0530 | [diff] [blame] | 58 | #endif /* _ASM_UPROBES_H */ |