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