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