2008-10-23 09:26:29 +04:00
# ifndef _ASM_X86_PTRACE_ABI_H
# define _ASM_X86_PTRACE_ABI_H
2007-10-17 20:04:40 +04:00
# ifdef __i386__
# define EBX 0
# define ECX 1
# define EDX 2
# define ESI 3
# define EDI 4
# define EBP 5
# define EAX 6
# define DS 7
# define ES 8
# define FS 9
# define GS 10
# define ORIG_EAX 11
# define EIP 12
# define CS 13
# define EFL 14
# define UESP 15
# define SS 16
# define FRAME_SIZE 17
# else /* __i386__ */
# if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS)
# define R15 0
# define R14 8
# define R13 16
# define R12 24
# define RBP 32
# define RBX 40
/* arguments: interrupts/non tracing syscalls only save upto here*/
# define R11 48
# define R10 56
# define R9 64
# define R8 72
# define RAX 80
# define RCX 88
# define RDX 96
# define RSI 104
# define RDI 112
# define ORIG_RAX 120 /* = ERROR */
/* end of arguments */
/* cpu exception frame or undefined in case of fast syscall. */
# define RIP 128
# define CS 136
# define EFLAGS 144
# define RSP 152
# define SS 160
# define ARGOFFSET R11
# endif /* __ASSEMBLY__ */
/* top of stack page */
# define FRAME_SIZE 168
# endif /* !__i386__ */
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
# define PTRACE_GETREGS 12
# define PTRACE_SETREGS 13
# define PTRACE_GETFPREGS 14
# define PTRACE_SETFPREGS 15
# define PTRACE_GETFPXREGS 18
# define PTRACE_SETFPXREGS 19
# define PTRACE_OLDSETOPTIONS 21
/* only useful for access 32bit programs / kernels */
# define PTRACE_GET_THREAD_AREA 25
# define PTRACE_SET_THREAD_AREA 26
# ifdef __x86_64__
# define PTRACE_ARCH_PRCTL 30
# endif
2008-07-09 13:38:07 +04:00
# define PTRACE_SYSEMU 31
# define PTRACE_SYSEMU_SINGLESTEP 32
2008-01-30 15:30:55 +03:00
# define PTRACE_SINGLEBLOCK 33 /* resume execution until next branch */
2008-04-08 13:01:58 +04:00
# ifndef __ASSEMBLY__
2009-01-30 20:22:16 +03:00
# include <linux/types.h>
2008-01-30 15:32:54 +03:00
2008-01-30 15:31:20 +03:00
/* configuration/status structure used in PTRACE_BTS_CONFIG and
PTRACE_BTS_STATUS commands .
*/
struct ptrace_bts_config {
/* requested or actual size of BTS buffer in bytes */
2008-02-21 19:45:38 +03:00
__u32 size ;
2008-01-30 15:31:20 +03:00
/* bitmask of below flags */
2008-02-21 19:45:38 +03:00
__u32 flags ;
2008-01-30 15:32:04 +03:00
/* buffer overflow signal */
2008-02-21 19:45:38 +03:00
__u32 signal ;
2008-01-30 15:32:54 +03:00
/* actual size of bts_struct in bytes */
2008-02-21 19:45:38 +03:00
__u32 bts_size ;
2008-01-30 15:31:20 +03:00
} ;
2008-04-08 13:01:58 +04:00
# endif /* __ASSEMBLY__ */
2008-01-30 15:31:20 +03:00
# define PTRACE_BTS_O_TRACE 0x1 /* branch trace */
# define PTRACE_BTS_O_SCHED 0x2 /* scheduling events w/ jiffies */
2008-01-30 15:32:04 +03:00
# define PTRACE_BTS_O_SIGNAL 0x4 / * send SIG<signal> on buffer overflow
2008-01-30 15:31:20 +03:00
instead of wrapping around */
2008-04-08 13:01:58 +04:00
# define PTRACE_BTS_O_ALLOC 0x8 /* (re)allocate buffer */
2008-01-30 15:31:20 +03:00
# define PTRACE_BTS_CONFIG 40
/* Configure branch trace recording.
2008-01-30 15:32:03 +03:00
ADDR points to a struct ptrace_bts_config .
DATA gives the size of that buffer .
2008-04-08 13:01:58 +04:00
A new buffer is allocated , if requested in the flags .
An overflow signal may only be requested for new buffers .
2008-01-30 15:32:03 +03:00
Returns the number of bytes read .
2008-01-30 15:31:20 +03:00
*/
# define PTRACE_BTS_STATUS 41
2008-01-30 15:32:03 +03:00
/* Return the current configuration in a struct ptrace_bts_config
pointed to by ADDR ; DATA gives the size of that buffer .
Returns the number of bytes written .
2008-01-30 15:31:20 +03:00
*/
# define PTRACE_BTS_SIZE 42
2008-04-08 13:01:58 +04:00
/* Return the number of available BTS records for draining.
2008-01-30 15:31:20 +03:00
DATA and ADDR are ignored .
*/
# define PTRACE_BTS_GET 43
/* Get a single BTS record.
DATA defines the index into the BTS array , where 0 is the newest
entry , and higher indices refer to older entries .
ADDR is pointing to struct bts_struct ( see asm / ds . h ) .
*/
# define PTRACE_BTS_CLEAR 44
/* Clear the BTS buffer.
DATA and ADDR are ignored .
*/
# define PTRACE_BTS_DRAIN 45
/* Read all available BTS records and clear the buffer.
2008-01-30 15:32:03 +03:00
ADDR points to an array of struct bts_struct .
DATA gives the size of that buffer .
2008-01-30 15:31:20 +03:00
BTS records are read from oldest to newest .
Returns number of BTS records drained .
*/
2008-01-30 15:31:09 +03:00
2008-10-23 09:26:29 +04:00
# endif /* _ASM_X86_PTRACE_ABI_H */