Commit | Line | Data |
---|---|---|
686d8c63 TG |
1 | #ifndef _ASM_X86_PTRACE_ABI_H |
2 | #define _ASM_X86_PTRACE_ABI_H | |
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 | ||
27efeb67 | 83 | #ifndef __ASSEMBLY__ |
87e8407f MM |
84 | |
85 | #include <asm/types.h> | |
86 | ||
a95d67f8 MM |
87 | /* configuration/status structure used in PTRACE_BTS_CONFIG and |
88 | PTRACE_BTS_STATUS commands. | |
89 | */ | |
90 | struct ptrace_bts_config { | |
91 | /* requested or actual size of BTS buffer in bytes */ | |
53c58588 | 92 | __u32 size; |
a95d67f8 | 93 | /* bitmask of below flags */ |
53c58588 | 94 | __u32 flags; |
c6334593 | 95 | /* buffer overflow signal */ |
53c58588 | 96 | __u32 signal; |
87e8407f | 97 | /* actual size of bts_struct in bytes */ |
53c58588 | 98 | __u32 bts_size; |
a95d67f8 | 99 | }; |
27efeb67 | 100 | #endif |
a95d67f8 MM |
101 | |
102 | #define PTRACE_BTS_O_TRACE 0x1 /* branch trace */ | |
103 | #define PTRACE_BTS_O_SCHED 0x2 /* scheduling events w/ jiffies */ | |
c6334593 | 104 | #define PTRACE_BTS_O_SIGNAL 0x4 /* send SIG<signal> on buffer overflow |
a95d67f8 MM |
105 | instead of wrapping around */ |
106 | #define PTRACE_BTS_O_CUT_SIZE 0x8 /* cut requested size to max available | |
107 | instead of failing */ | |
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. | |
a95d67f8 | 113 | A new buffer is allocated, iff the size changes. |
cba4b65d | 114 | Returns the number of bytes read. |
a95d67f8 MM |
115 | */ |
116 | #define PTRACE_BTS_STATUS 41 | |
cba4b65d MM |
117 | /* Return the current configuration in a struct ptrace_bts_config |
118 | pointed to by ADDR; DATA gives the size of that buffer. | |
119 | Returns the number of bytes written. | |
a95d67f8 MM |
120 | */ |
121 | #define PTRACE_BTS_SIZE 42 | |
122 | /* Return the number of available BTS records. | |
123 | DATA and ADDR are ignored. | |
124 | */ | |
125 | #define PTRACE_BTS_GET 43 | |
126 | /* Get a single BTS record. | |
127 | DATA defines the index into the BTS array, where 0 is the newest | |
128 | entry, and higher indices refer to older entries. | |
129 | ADDR is pointing to struct bts_struct (see asm/ds.h). | |
130 | */ | |
131 | #define PTRACE_BTS_CLEAR 44 | |
132 | /* Clear the BTS buffer. | |
133 | DATA and ADDR are ignored. | |
134 | */ | |
135 | #define PTRACE_BTS_DRAIN 45 | |
136 | /* Read all available BTS records and clear the buffer. | |
cba4b65d MM |
137 | ADDR points to an array of struct bts_struct. |
138 | DATA gives the size of that buffer. | |
a95d67f8 MM |
139 | BTS records are read from oldest to newest. |
140 | Returns number of BTS records drained. | |
141 | */ | |
eee3af4a | 142 | |
96a388de | 143 | #endif |