1 #ifndef _X86_64_PTRACE_H 2 #define _X86_64_PTRACE_H 3 4 #if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) 5 #define R15 0 6 #define R14 8 7 #define R13 16 8 #define R12 24 9 #define RBP 32 10 #define RBX 40 11 /* arguments: interrupts/non tracing syscalls only save upto here*/ 12 #define R11 48 13 #define R10 56 14 #define R9 64 15 #define R8 72 16 #define RAX 80 17 #define RCX 88 18 #define RDX 96 19 #define RSI 104 20 #define RDI 112 21 #define ORIG_RAX 120 /* = ERROR */ 22 /* end of arguments */ 23 /* cpu exception frame or undefined in case of fast syscall. */ 24 #define RIP 128 25 #define CS 136 26 #define EFLAGS 144 27 #define RSP 152 28 #define SS 160 29 #define ARGOFFSET R11 30 #endif /* __ASSEMBLY__ */ 31 32 /* top of stack page */ 33 #define FRAME_SIZE 168 34 35 #define PTRACE_SETOPTIONS 21 36 37 /* options set using PTRACE_SETOPTIONS */ 38 #define PTRACE_O_TRACESYSGOOD 0x00000001 39 40 #ifndef __ASSEMBLY__ 41 42 struct pt_regs { 43 unsigned long r15; 44 unsigned long r14; 45 unsigned long r13; 46 unsigned long r12; 47 unsigned long rbp; 48 unsigned long rbx; 49 /* arguments: non interrupts/non tracing syscalls only save upto here*/ 50 unsigned long r11; 51 unsigned long r10; 52 unsigned long r9; 53 unsigned long r8; 54 unsigned long rax; 55 unsigned long rcx; 56 unsigned long rdx; 57 unsigned long rsi; 58 unsigned long rdi; 59 unsigned long orig_rax; 60 /* end of arguments */ 61 /* cpu exception frame or undefined */ 62 unsigned long rip; 63 unsigned long cs; 64 unsigned long eflags; 65 unsigned long rsp; 66 unsigned long ss; 67 /* top of stack page */ 68 }; 69 70 #endif 71 72 /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ 73 #define PTRACE_GETREGS 12 74 #define PTRACE_SETREGS 13 75 #define PTRACE_GETFPREGS 14 76 #define PTRACE_SETFPREGS 15 77 #define PTRACE_GETFPXREGS 18 78 #define PTRACE_SETFPXREGS 19 79 80 #if defined(__KERNEL__) && !defined(__ASSEMBLY__) 81 #define user_mode(regs) (!!((regs)->cs & 3)) 82 #define instruction_pointer(regs) ((regs)->rip) 83 extern void show_regs(struct pt_regs *); 84 85 enum { 86 EF_CF = 0x00000001, 87 EF_PF = 0x00000004, 88 EF_AF = 0x00000010, 89 EF_ZF = 0x00000040, 90 EF_SF = 0x00000080, 91 EF_TF = 0x00000100, 92 EF_IE = 0x00000200, 93 EF_DF = 0x00000400, 94 EF_OF = 0x00000800, 95 EF_IOPL = 0x00003000, 96 EF_IOPL_RING0 = 0x00000000, 97 EF_IOPL_RING1 = 0x00001000, 98 EF_IOPL_RING2 = 0x00002000, 99 EF_NT = 0x00004000, /* nested task */ 100 EF_RF = 0x00010000, /* resume */ 101 EF_VM = 0x00020000, /* virtual mode */ 102 EF_AC = 0x00040000, /* alignment */ 103 EF_VIF = 0x00080000, /* virtual interrupt */ 104 EF_VIP = 0x00100000, /* virtual interrupt pending */ 105 EF_ID = 0x00200000, /* id */ 106 }; 107 108 #endif 109 110 #endif 111