1 /* 2 * Copyright 2003 PathScale, Inc. 3 * 4 * Licensed under the GPL 5 */ 6 7 #ifndef __SYSDEP_X86_64_PTRACE_USER_H__ 8 #define __SYSDEP_X86_64_PTRACE_USER_H__ 9 10 #define __FRAME_OFFSETS 11 #include <sys/ptrace.h> 12 #include <linux/ptrace.h> 13 #include <asm/ptrace.h> 14 #undef __FRAME_OFFSETS 15 #include "user_constants.h" 16 17 #define PT_INDEX(off) ((off) / sizeof(unsigned long)) 18 19 #define PT_SYSCALL_NR(regs) ((regs)[PT_INDEX(ORIG_RAX)]) 20 #define PT_SYSCALL_NR_OFFSET (ORIG_RAX) 21 22 #define PT_SYSCALL_ARG1(regs) (((unsigned long *) (regs))[PT_INDEX(RDI)]) 23 #define PT_SYSCALL_ARG1_OFFSET (RDI) 24 25 #define PT_SYSCALL_ARG2(regs) (((unsigned long *) (regs))[PT_INDEX(RSI)]) 26 #define PT_SYSCALL_ARG2_OFFSET (RSI) 27 28 #define PT_SYSCALL_ARG3(regs) (((unsigned long *) (regs))[PT_INDEX(RDX)]) 29 #define PT_SYSCALL_ARG3_OFFSET (RDX) 30 31 #define PT_SYSCALL_ARG4(regs) (((unsigned long *) (regs))[PT_INDEX(RCX)]) 32 #define PT_SYSCALL_ARG4_OFFSET (RCX) 33 34 #define PT_SYSCALL_ARG5(regs) (((unsigned long *) (regs))[PT_INDEX(R8)]) 35 #define PT_SYSCALL_ARG5_OFFSET (R8) 36 37 #define PT_SYSCALL_ARG6(regs) (((unsigned long *) (regs))[PT_INDEX(R9)]) 38 #define PT_SYSCALL_ARG6_OFFSET (R9) 39 40 #define PT_SYSCALL_RET_OFFSET (RAX) 41 42 #define PT_IP_OFFSET (RIP) 43 #define PT_IP(regs) ((regs)[PT_INDEX(RIP)]) 44 45 #define PT_SP_OFFSET (RSP) 46 #define PT_SP(regs) ((regs)[PT_INDEX(RSP)]) 47 48 #define PT_ORIG_RAX_OFFSET (ORIG_RAX) 49 #define PT_ORIG_RAX(regs) ((regs)[PT_INDEX(ORIG_RAX)]) 50 51 /* 52 * x86_64 FC3 doesn't define this in /usr/include/linux/ptrace.h even though 53 * it's defined in the kernel's include/linux/ptrace.h. Additionally, use the 54 * 2.4 name and value for 2.4 host compatibility. 55 */ 56 #ifndef PTRACE_OLDSETOPTIONS 57 #define PTRACE_OLDSETOPTIONS 21 58 #endif 59 60 /* 61 * These are before the system call, so the system call number is RAX 62 * rather than ORIG_RAX, and arg4 is R10 rather than RCX 63 */ 64 #define REGS_SYSCALL_NR PT_INDEX(RAX) 65 #define REGS_SYSCALL_ARG1 PT_INDEX(RDI) 66 #define REGS_SYSCALL_ARG2 PT_INDEX(RSI) 67 #define REGS_SYSCALL_ARG3 PT_INDEX(RDX) 68 #define REGS_SYSCALL_ARG4 PT_INDEX(R10) 69 #define REGS_SYSCALL_ARG5 PT_INDEX(R8) 70 #define REGS_SYSCALL_ARG6 PT_INDEX(R9) 71 72 #define REGS_IP_INDEX PT_INDEX(RIP) 73 #define REGS_SP_INDEX PT_INDEX(RSP) 74 75 #define FP_SIZE (HOST_FP_SIZE) 76 77 #endif 78