1#ifndef _I386_PTRACE_H
2#define _I386_PTRACE_H
3
4#include <asm/types.h>
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/* this struct defines the way the registers are stored on the
26   stack during a system call. */
27
28struct pt_regs {
29	long ebx;
30	long ecx;
31	long edx;
32	long esi;
33	long edi;
34	long ebp;
35	long eax;
36	int  xds;
37	int  xes;
38	int  xfs;
39	int  xgs;
40	long orig_eax;
41	long eip;
42	int  xcs;
43	long eflags;
44	long esp;
45	int  xss;
46}  __attribute__ ((packed));
47
48struct irq_regs {
49	/* Pushed by irq_common_entry */
50	long ebx;
51	long ecx;
52	long edx;
53	long esi;
54	long edi;
55	long ebp;
56	long esp;
57	long eax;
58	long xds;
59	long xes;
60	long xfs;
61	long xgs;
62	long xss;
63	/* Pushed by vector handler (irq_<num>) */
64	long irq_id;
65	/* Pushed by cpu in response to interrupt */
66	union {
67		struct {
68			long eip;
69			long xcs;
70			long eflags;
71		} ctx1;
72		struct {
73			long err;
74			long eip;
75			long xcs;
76			long eflags;
77		} ctx2;
78	} context;
79}  __attribute__ ((packed));
80
81/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
82#define PTRACE_GETREGS            12
83#define PTRACE_SETREGS            13
84#define PTRACE_GETFPREGS          14
85#define PTRACE_SETFPREGS          15
86#define PTRACE_GETFPXREGS         18
87#define PTRACE_SETFPXREGS         19
88
89#define PTRACE_SETOPTIONS         21
90
91/* options set using PTRACE_SETOPTIONS */
92#define PTRACE_O_TRACESYSGOOD     0x00000001
93
94#ifdef __KERNEL__
95#define user_mode(regs) ((VM_MASK & (regs)->eflags) || (3 & (regs)->xcs))
96#define instruction_pointer(regs) ((regs)->eip)
97extern void show_regs(struct pt_regs *);
98#endif
99
100#endif
101