···000000000000000000000000000000001#ifdef __KERNEL__2-# ifdef CONFIG_X86_323-# include "ptrace_32.h"4-# else5-# include "ptrace_64.h"6-# endif7-#else8-# ifdef __i386__9-# include "ptrace_32.h"10-# else11-# include "ptrace_64.h"12-# endif000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013#endif
···1+#ifndef _ASM_X86_PTRACE_H2+#define _ASM_X86_PTRACE_H3+4+#include <linux/compiler.h> /* For __user */5+#include <asm/ptrace-abi.h>6+7+#ifndef __ASSEMBLY__8+9+#ifdef __i386__10+/* this struct defines the way the registers are stored on the11+ stack during a system call. */12+13+struct pt_regs {14+ long ebx;15+ long ecx;16+ long edx;17+ long esi;18+ long edi;19+ long ebp;20+ long eax;21+ int xds;22+ int xes;23+ int xfs;24+ /* int xgs; */25+ long orig_eax;26+ long eip;27+ int xcs;28+ long eflags;29+ long esp;30+ int xss;31+};32+33#ifdef __KERNEL__34+35+#include <asm/vm86.h>36+#include <asm/segment.h>37+38+struct task_struct;39+extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code);40+41+/*42+ * user_mode_vm(regs) determines whether a register set came from user mode.43+ * This is true if V8086 mode was enabled OR if the register set was from44+ * protected mode with RPL-3 CS value. This tricky test checks that with45+ * one comparison. Many places in the kernel can bypass this full check46+ * if they have already ruled out V8086 mode, so user_mode(regs) can be used.47+ */48+static inline int user_mode(struct pt_regs *regs)49+{50+ return (regs->xcs & SEGMENT_RPL_MASK) == USER_RPL;51+}52+static inline int user_mode_vm(struct pt_regs *regs)53+{54+ return ((regs->xcs & SEGMENT_RPL_MASK) | (regs->eflags & VM_MASK)) >= USER_RPL;55+}56+static inline int v8086_mode(struct pt_regs *regs)57+{58+ return (regs->eflags & VM_MASK);59+}60+61+#define instruction_pointer(regs) ((regs)->eip)62+#define frame_pointer(regs) ((regs)->ebp)63+#define stack_pointer(regs) ((regs)->esp)64+#define regs_return_value(regs) ((regs)->eax)65+66+extern unsigned long profile_pc(struct pt_regs *regs);67+#endif /* __KERNEL__ */68+69+#else /* __i386__ */70+71+struct pt_regs {72+ unsigned long r15;73+ unsigned long r14;74+ unsigned long r13;75+ unsigned long r12;76+ unsigned long rbp;77+ unsigned long rbx;78+/* arguments: non interrupts/non tracing syscalls only save upto here*/79+ unsigned long r11;80+ unsigned long r10;81+ unsigned long r9;82+ unsigned long r8;83+ unsigned long rax;84+ unsigned long rcx;85+ unsigned long rdx;86+ unsigned long rsi;87+ unsigned long rdi;88+ unsigned long orig_rax;89+/* end of arguments */90+/* cpu exception frame or undefined */91+ unsigned long rip;92+ unsigned long cs;93+ unsigned long eflags;94+ unsigned long rsp;95+ unsigned long ss;96+/* top of stack page */97+};98+99+#ifdef __KERNEL__100+101+#define user_mode(regs) (!!((regs)->cs & 3))102+#define user_mode_vm(regs) user_mode(regs)103+#define instruction_pointer(regs) ((regs)->rip)104+#define frame_pointer(regs) ((regs)->rbp)105+#define stack_pointer(regs) ((regs)->rsp)106+#define regs_return_value(regs) ((regs)->rax)107+108+extern unsigned long profile_pc(struct pt_regs *regs);109+void signal_fault(struct pt_regs *regs, void __user *frame, char *where);110+111+struct task_struct;112+113+extern unsigned long114+convert_rip_to_linear(struct task_struct *child, struct pt_regs *regs);115+116+enum {117+ EF_CF = 0x00000001,118+ EF_PF = 0x00000004,119+ EF_AF = 0x00000010,120+ EF_ZF = 0x00000040,121+ EF_SF = 0x00000080,122+ EF_TF = 0x00000100,123+ EF_IE = 0x00000200,124+ EF_DF = 0x00000400,125+ EF_OF = 0x00000800,126+ EF_IOPL = 0x00003000,127+ EF_IOPL_RING0 = 0x00000000,128+ EF_IOPL_RING1 = 0x00001000,129+ EF_IOPL_RING2 = 0x00002000,130+ EF_NT = 0x00004000, /* nested task */131+ EF_RF = 0x00010000, /* resume */132+ EF_VM = 0x00020000, /* virtual mode */133+ EF_AC = 0x00040000, /* alignment */134+ EF_VIF = 0x00080000, /* virtual interrupt */135+ EF_VIP = 0x00100000, /* virtual interrupt pending */136+ EF_ID = 0x00200000, /* id */137+};138+#endif /* __KERNEL__ */139+#endif /* !__i386__ */140+#endif /* !__ASSEMBLY__ */141+142#endif
-65
include/asm-x86/ptrace_32.h
···1-#ifndef _I386_PTRACE_H2-#define _I386_PTRACE_H3-4-#include <asm/ptrace-abi.h>5-6-/* this struct defines the way the registers are stored on the 7- stack during a system call. */8-9-struct 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- int xfs;20- /* int xgs; */21- long orig_eax;22- long eip;23- int xcs;24- long eflags;25- long esp;26- int xss;27-};28-29-#ifdef __KERNEL__30-31-#include <asm/vm86.h>32-#include <asm/segment.h>33-34-struct task_struct;35-extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code);36-37-/*38- * user_mode_vm(regs) determines whether a register set came from user mode.39- * This is true if V8086 mode was enabled OR if the register set was from40- * protected mode with RPL-3 CS value. This tricky test checks that with41- * one comparison. Many places in the kernel can bypass this full check42- * if they have already ruled out V8086 mode, so user_mode(regs) can be used.43- */44-static inline int user_mode(struct pt_regs *regs)45-{46- return (regs->xcs & SEGMENT_RPL_MASK) == USER_RPL;47-}48-static inline int user_mode_vm(struct pt_regs *regs)49-{50- return ((regs->xcs & SEGMENT_RPL_MASK) | (regs->eflags & VM_MASK)) >= USER_RPL;51-}52-static inline int v8086_mode(struct pt_regs *regs)53-{54- return (regs->eflags & VM_MASK);55-}56-57-#define instruction_pointer(regs) ((regs)->eip)58-#define frame_pointer(regs) ((regs)->ebp)59-#define stack_pointer(regs) ((regs)->esp)60-#define regs_return_value(regs) ((regs)->eax)61-62-extern unsigned long profile_pc(struct pt_regs *regs);63-#endif /* __KERNEL__ */64-65-#endif