0001
0002 #ifndef __SYSDEP_X86_PTRACE_H
0003 #define __SYSDEP_X86_PTRACE_H
0004
0005 #include <generated/user_constants.h>
0006 #include <sysdep/faultinfo.h>
0007
0008 #define MAX_REG_OFFSET (UM_FRAME_SIZE)
0009 #define MAX_REG_NR ((MAX_REG_OFFSET) / sizeof(unsigned long))
0010
0011 #define REGS_IP(r) ((r)[HOST_IP])
0012 #define REGS_SP(r) ((r)[HOST_SP])
0013 #define REGS_EFLAGS(r) ((r)[HOST_EFLAGS])
0014 #define REGS_AX(r) ((r)[HOST_AX])
0015 #define REGS_BX(r) ((r)[HOST_BX])
0016 #define REGS_CX(r) ((r)[HOST_CX])
0017 #define REGS_DX(r) ((r)[HOST_DX])
0018 #define REGS_SI(r) ((r)[HOST_SI])
0019 #define REGS_DI(r) ((r)[HOST_DI])
0020 #define REGS_BP(r) ((r)[HOST_BP])
0021 #define REGS_CS(r) ((r)[HOST_CS])
0022 #define REGS_SS(r) ((r)[HOST_SS])
0023 #define REGS_DS(r) ((r)[HOST_DS])
0024 #define REGS_ES(r) ((r)[HOST_ES])
0025
0026 #define UPT_IP(r) REGS_IP((r)->gp)
0027 #define UPT_SP(r) REGS_SP((r)->gp)
0028 #define UPT_EFLAGS(r) REGS_EFLAGS((r)->gp)
0029 #define UPT_AX(r) REGS_AX((r)->gp)
0030 #define UPT_BX(r) REGS_BX((r)->gp)
0031 #define UPT_CX(r) REGS_CX((r)->gp)
0032 #define UPT_DX(r) REGS_DX((r)->gp)
0033 #define UPT_SI(r) REGS_SI((r)->gp)
0034 #define UPT_DI(r) REGS_DI((r)->gp)
0035 #define UPT_BP(r) REGS_BP((r)->gp)
0036 #define UPT_CS(r) REGS_CS((r)->gp)
0037 #define UPT_SS(r) REGS_SS((r)->gp)
0038 #define UPT_DS(r) REGS_DS((r)->gp)
0039 #define UPT_ES(r) REGS_ES((r)->gp)
0040
0041 #ifdef __i386__
0042 #include "ptrace_32.h"
0043 #else
0044 #include "ptrace_64.h"
0045 #endif
0046
0047 struct syscall_args {
0048 unsigned long args[6];
0049 };
0050
0051 #define SYSCALL_ARGS(r) ((struct syscall_args) \
0052 { .args = { UPT_SYSCALL_ARG1(r), \
0053 UPT_SYSCALL_ARG2(r), \
0054 UPT_SYSCALL_ARG3(r), \
0055 UPT_SYSCALL_ARG4(r), \
0056 UPT_SYSCALL_ARG5(r), \
0057 UPT_SYSCALL_ARG6(r) } } )
0058
0059 struct uml_pt_regs {
0060 unsigned long gp[MAX_REG_NR];
0061 unsigned long fp[MAX_FP_NR];
0062 struct faultinfo faultinfo;
0063 long syscall;
0064 int is_user;
0065 };
0066
0067 #define EMPTY_UML_PT_REGS { }
0068
0069 #define UPT_SYSCALL_NR(r) ((r)->syscall)
0070 #define UPT_FAULTINFO(r) (&(r)->faultinfo)
0071 #define UPT_IS_USER(r) ((r)->is_user)
0072
0073 extern int user_context(unsigned long sp);
0074
0075 #endif