Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _I386_PTRACE_H |
2 | #define _I386_PTRACE_H | |
3 | ||
4 | #define EBX 0 | |
5 | #define ECX 1 | |
6 | #define EDX 2 | |
7 | #define ESI 3 | |
8 | #define EDI 4 | |
9 | #define EBP 5 | |
10 | #define EAX 6 | |
11 | #define DS 7 | |
12 | #define ES 8 | |
13 | #define FS 9 | |
14 | #define GS 10 | |
15 | #define ORIG_EAX 11 | |
16 | #define EIP 12 | |
17 | #define CS 13 | |
18 | #define EFL 14 | |
19 | #define UESP 15 | |
20 | #define SS 16 | |
21 | #define FRAME_SIZE 17 | |
22 | ||
23 | /* this struct defines the way the registers are stored on the | |
24 | stack during a system call. */ | |
25 | ||
26 | struct pt_regs { | |
27 | long ebx; | |
28 | long ecx; | |
29 | long edx; | |
30 | long esi; | |
31 | long edi; | |
32 | long ebp; | |
33 | long eax; | |
34 | int xds; | |
35 | int xes; | |
36 | long orig_eax; | |
37 | long eip; | |
38 | int xcs; | |
39 | long eflags; | |
40 | long esp; | |
41 | int xss; | |
42 | }; | |
43 | ||
44 | /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ | |
45 | #define PTRACE_GETREGS 12 | |
46 | #define PTRACE_SETREGS 13 | |
47 | #define PTRACE_GETFPREGS 14 | |
48 | #define PTRACE_SETFPREGS 15 | |
49 | #define PTRACE_GETFPXREGS 18 | |
50 | #define PTRACE_SETFPXREGS 19 | |
51 | ||
52 | #define PTRACE_OLDSETOPTIONS 21 | |
53 | ||
54 | #define PTRACE_GET_THREAD_AREA 25 | |
55 | #define PTRACE_SET_THREAD_AREA 26 | |
56 | ||
57 | #ifdef __KERNEL__ | |
388b0925 AM |
58 | |
59 | #include <asm/vm86.h> | |
60 | ||
1da177e4 LT |
61 | struct task_struct; |
62 | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code); | |
ae6578fe | 63 | |
0998e422 ZA |
64 | /* |
65 | * user_mode_vm(regs) determines whether a register set came from user mode. | |
66 | * This is true if V8086 mode was enabled OR if the register set was from | |
67 | * protected mode with RPL-3 CS value. This tricky test checks that with | |
68 | * one comparison. Many places in the kernel can bypass this full check | |
69 | * if they have already ruled out V8086 mode, so user_mode(regs) can be used. | |
70 | */ | |
ae6578fe CE |
71 | static inline int user_mode(struct pt_regs *regs) |
72 | { | |
73 | return (regs->xcs & 3) != 0; | |
74 | } | |
75 | static inline int user_mode_vm(struct pt_regs *regs) | |
76 | { | |
77 | return ((regs->xcs & 3) | (regs->eflags & VM_MASK)) != 0; | |
78 | } | |
1da177e4 LT |
79 | #define instruction_pointer(regs) ((regs)->eip) |
80 | #if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER) | |
81 | extern unsigned long profile_pc(struct pt_regs *regs); | |
82 | #else | |
83 | #define profile_pc(regs) instruction_pointer(regs) | |
84 | #endif | |
ae6578fe | 85 | #endif /* __KERNEL__ */ |
1da177e4 LT |
86 | |
87 | #endif |