Commit | Line | Data |
---|---|---|
1965aae3 PA |
1 | #ifndef _ASM_X86_PTRACE_ABI_H |
2 | #define _ASM_X86_PTRACE_ABI_H | |
686d8c63 TG |
3 | |
4 | #ifdef __i386__ | |
5 | ||
6 | #define EBX 0 | |
7 | #define ECX 1 | |
8 | #define EDX 2 | |
9 | #define ESI 3 | |
10 | #define EDI 4 | |
11 | #define EBP 5 | |
12 | #define EAX 6 | |
13 | #define DS 7 | |
14 | #define ES 8 | |
15 | #define FS 9 | |
16 | #define GS 10 | |
17 | #define ORIG_EAX 11 | |
18 | #define EIP 12 | |
19 | #define CS 13 | |
20 | #define EFL 14 | |
21 | #define UESP 15 | |
22 | #define SS 16 | |
23 | #define FRAME_SIZE 17 | |
24 | ||
25 | #else /* __i386__ */ | |
26 | ||
27 | #if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) | |
28 | #define R15 0 | |
29 | #define R14 8 | |
30 | #define R13 16 | |
31 | #define R12 24 | |
32 | #define RBP 32 | |
33 | #define RBX 40 | |
34 | /* arguments: interrupts/non tracing syscalls only save upto here*/ | |
35 | #define R11 48 | |
36 | #define R10 56 | |
37 | #define R9 64 | |
38 | #define R8 72 | |
39 | #define RAX 80 | |
40 | #define RCX 88 | |
41 | #define RDX 96 | |
42 | #define RSI 104 | |
43 | #define RDI 112 | |
44 | #define ORIG_RAX 120 /* = ERROR */ | |
45 | /* end of arguments */ | |
46 | /* cpu exception frame or undefined in case of fast syscall. */ | |
47 | #define RIP 128 | |
48 | #define CS 136 | |
49 | #define EFLAGS 144 | |
50 | #define RSP 152 | |
51 | #define SS 160 | |
52 | #define ARGOFFSET R11 | |
53 | #endif /* __ASSEMBLY__ */ | |
54 | ||
55 | /* top of stack page */ | |
56 | #define FRAME_SIZE 168 | |
57 | ||
58 | #endif /* !__i386__ */ | |
59 | ||
60 | /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ | |
61 | #define PTRACE_GETREGS 12 | |
62 | #define PTRACE_SETREGS 13 | |
63 | #define PTRACE_GETFPREGS 14 | |
64 | #define PTRACE_SETFPREGS 15 | |
65 | #define PTRACE_GETFPXREGS 18 | |
66 | #define PTRACE_SETFPXREGS 19 | |
67 | ||
68 | #define PTRACE_OLDSETOPTIONS 21 | |
69 | ||
70 | /* only useful for access 32bit programs / kernels */ | |
71 | #define PTRACE_GET_THREAD_AREA 25 | |
72 | #define PTRACE_SET_THREAD_AREA 26 | |
73 | ||
74 | #ifdef __x86_64__ | |
75 | # define PTRACE_ARCH_PRCTL 30 | |
686d8c63 TG |
76 | #endif |
77 | ||
d4d67150 RM |
78 | #define PTRACE_SYSEMU 31 |
79 | #define PTRACE_SYSEMU_SINGLESTEP 32 | |
80 | ||
0fa376e0 RM |
81 | #define PTRACE_SINGLEBLOCK 33 /* resume execution until next branch */ |
82 | ||
93fa7636 | 83 | #ifdef CONFIG_X86_PTRACE_BTS |
87e8407f | 84 | |
93fa7636 | 85 | #ifndef __ASSEMBLY__ |
87e8407f MM |
86 | #include <asm/types.h> |
87 | ||
a95d67f8 MM |
88 | /* configuration/status structure used in PTRACE_BTS_CONFIG and |
89 | PTRACE_BTS_STATUS commands. | |
90 | */ | |
91 | struct ptrace_bts_config { | |
92 | /* requested or actual size of BTS buffer in bytes */ | |
53c58588 | 93 | __u32 size; |
a95d67f8 | 94 | /* bitmask of below flags */ |
53c58588 | 95 | __u32 flags; |
c6334593 | 96 | /* buffer overflow signal */ |
53c58588 | 97 | __u32 signal; |
87e8407f | 98 | /* actual size of bts_struct in bytes */ |
53c58588 | 99 | __u32 bts_size; |
a95d67f8 | 100 | }; |
93fa7636 | 101 | #endif /* __ASSEMBLY__ */ |
a95d67f8 MM |
102 | |
103 | #define PTRACE_BTS_O_TRACE 0x1 /* branch trace */ | |
104 | #define PTRACE_BTS_O_SCHED 0x2 /* scheduling events w/ jiffies */ | |
c6334593 | 105 | #define PTRACE_BTS_O_SIGNAL 0x4 /* send SIG<signal> on buffer overflow |
a95d67f8 | 106 | instead of wrapping around */ |
93fa7636 | 107 | #define PTRACE_BTS_O_ALLOC 0x8 /* (re)allocate buffer */ |
a95d67f8 MM |
108 | |
109 | #define PTRACE_BTS_CONFIG 40 | |
110 | /* Configure branch trace recording. | |
cba4b65d MM |
111 | ADDR points to a struct ptrace_bts_config. |
112 | DATA gives the size of that buffer. | |
93fa7636 MM |
113 | A new buffer is allocated, if requested in the flags. |
114 | An overflow signal may only be requested for new buffers. | |
cba4b65d | 115 | Returns the number of bytes read. |
a95d67f8 MM |
116 | */ |
117 | #define PTRACE_BTS_STATUS 41 | |
cba4b65d MM |
118 | /* Return the current configuration in a struct ptrace_bts_config |
119 | pointed to by ADDR; DATA gives the size of that buffer. | |
120 | Returns the number of bytes written. | |
a95d67f8 MM |
121 | */ |
122 | #define PTRACE_BTS_SIZE 42 | |
93fa7636 | 123 | /* Return the number of available BTS records for draining. |
a95d67f8 MM |
124 | DATA and ADDR are ignored. |
125 | */ | |
126 | #define PTRACE_BTS_GET 43 | |
127 | /* Get a single BTS record. | |
128 | DATA defines the index into the BTS array, where 0 is the newest | |
129 | entry, and higher indices refer to older entries. | |
130 | ADDR is pointing to struct bts_struct (see asm/ds.h). | |
131 | */ | |
132 | #define PTRACE_BTS_CLEAR 44 | |
133 | /* Clear the BTS buffer. | |
134 | DATA and ADDR are ignored. | |
135 | */ | |
136 | #define PTRACE_BTS_DRAIN 45 | |
137 | /* Read all available BTS records and clear the buffer. | |
cba4b65d MM |
138 | ADDR points to an array of struct bts_struct. |
139 | DATA gives the size of that buffer. | |
a95d67f8 MM |
140 | BTS records are read from oldest to newest. |
141 | Returns number of BTS records drained. | |
142 | */ | |
93fa7636 | 143 | #endif /* CONFIG_X86_PTRACE_BTS */ |
eee3af4a | 144 | |
1965aae3 | 145 | #endif /* _ASM_X86_PTRACE_ABI_H */ |