blob: 1910880fcd40d95aa67a4f3d242845acd90b59a9 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _I386_PTRACE_H
2#define _I386_PTRACE_H
3
Jeff Dike70e0eb82006-09-25 23:33:09 -07004#include <asm/ptrace-abi.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07005
6/* this struct defines the way the registers are stored on the
7 stack during a system call. */
8
9struct pt_regs {
10 long ebx;
11 long ecx;
12 long edx;
13 long esi;
14 long edi;
15 long ebp;
16 long eax;
17 int xds;
18 int xes;
19 long orig_eax;
20 long eip;
21 int xcs;
22 long eflags;
23 long esp;
24 int xss;
25};
26
Linus Torvalds1da177e2005-04-16 15:20:36 -070027#ifdef __KERNEL__
Andrew Morton388b0922005-07-27 11:43:25 -070028
29#include <asm/vm86.h>
30
Linus Torvalds1da177e2005-04-16 15:20:36 -070031struct task_struct;
32extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code);
Chuck Ebbertae6578f2005-07-26 21:57:24 -040033
Zachary Amsden0998e422005-09-03 15:56:43 -070034/*
35 * user_mode_vm(regs) determines whether a register set came from user mode.
36 * This is true if V8086 mode was enabled OR if the register set was from
37 * protected mode with RPL-3 CS value. This tricky test checks that with
38 * one comparison. Many places in the kernel can bypass this full check
39 * if they have already ruled out V8086 mode, so user_mode(regs) can be used.
40 */
Chuck Ebbertae6578f2005-07-26 21:57:24 -040041static inline int user_mode(struct pt_regs *regs)
42{
43 return (regs->xcs & 3) != 0;
44}
45static inline int user_mode_vm(struct pt_regs *regs)
46{
47 return ((regs->xcs & 3) | (regs->eflags & VM_MASK)) != 0;
48}
Linus Torvalds1da177e2005-04-16 15:20:36 -070049#define instruction_pointer(regs) ((regs)->eip)
50#if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER)
51extern unsigned long profile_pc(struct pt_regs *regs);
52#else
53#define profile_pc(regs) instruction_pointer(regs)
54#endif
Chuck Ebbertae6578f2005-07-26 21:57:24 -040055#endif /* __KERNEL__ */
Linus Torvalds1da177e2005-04-16 15:20:36 -070056
57#endif