2005-05-05 16:15:23 -07:00
# include <stdio.h>
# include <stddef.h>
# include <signal.h>
2006-03-27 01:14:30 -08:00
# include <sys/poll.h>
2007-05-06 14:51:48 -07:00
# include <sys/mman.h>
2007-10-16 01:27:14 -07:00
# include <sys/user.h>
2005-05-05 16:15:23 -07:00
# define __FRAME_OFFSETS
# include <asm/ptrace.h>
2005-05-20 13:59:07 -07:00
# include <asm/types.h>
2005-05-05 16:15:23 -07:00
# define DEFINE(sym, val) \
2011-08-18 20:03:19 +01:00
asm volatile ( " \n -> " # sym " %0 " # val : : " i " ( val ) )
2005-05-05 16:15:23 -07:00
2005-09-28 22:27:23 +01:00
# define DEFINE_LONGS(sym, val) \
2011-08-18 20:03:19 +01:00
asm volatile ( " \n -> " # sym " %0 " # val : : " i " ( val / sizeof ( unsigned long ) ) )
2005-09-28 22:27:23 +01:00
2005-05-05 16:15:23 -07:00
void foo ( void )
{
2011-08-18 20:03:19 +01:00
# ifdef __i386__
DEFINE_LONGS ( HOST_FP_SIZE , sizeof ( struct user_fpregs_struct ) ) ;
DEFINE_LONGS ( HOST_FPX_SIZE , sizeof ( struct user_fpxregs_struct ) ) ;
DEFINE ( HOST_IP , EIP ) ;
DEFINE ( HOST_SP , UESP ) ;
DEFINE ( HOST_EFLAGS , EFL ) ;
2011-08-18 20:10:09 +01:00
DEFINE ( HOST_AX , EAX ) ;
DEFINE ( HOST_BX , EBX ) ;
DEFINE ( HOST_CX , ECX ) ;
DEFINE ( HOST_DX , EDX ) ;
DEFINE ( HOST_SI , ESI ) ;
DEFINE ( HOST_DI , EDI ) ;
DEFINE ( HOST_BP , EBP ) ;
2011-08-18 20:03:19 +01:00
DEFINE ( HOST_CS , CS ) ;
DEFINE ( HOST_SS , SS ) ;
DEFINE ( HOST_DS , DS ) ;
DEFINE ( HOST_FS , FS ) ;
DEFINE ( HOST_ES , ES ) ;
DEFINE ( HOST_GS , GS ) ;
2011-08-18 20:12:19 +01:00
DEFINE ( HOST_ORIG_AX , ORIG_EAX ) ;
2011-08-18 20:03:19 +01:00
# else
2006-02-07 12:58:43 -08:00
DEFINE ( HOST_FP_SIZE , sizeof ( struct _fpstate ) / sizeof ( unsigned long ) ) ;
2011-08-18 20:10:09 +01:00
DEFINE_LONGS ( HOST_BX , RBX ) ;
DEFINE_LONGS ( HOST_CX , RCX ) ;
DEFINE_LONGS ( HOST_DI , RDI ) ;
DEFINE_LONGS ( HOST_SI , RSI ) ;
DEFINE_LONGS ( HOST_DX , RDX ) ;
DEFINE_LONGS ( HOST_BP , RBP ) ;
DEFINE_LONGS ( HOST_AX , RAX ) ;
2005-09-28 22:27:23 +01:00
DEFINE_LONGS ( HOST_R8 , R8 ) ;
DEFINE_LONGS ( HOST_R9 , R9 ) ;
DEFINE_LONGS ( HOST_R10 , R10 ) ;
DEFINE_LONGS ( HOST_R11 , R11 ) ;
DEFINE_LONGS ( HOST_R12 , R12 ) ;
DEFINE_LONGS ( HOST_R13 , R13 ) ;
DEFINE_LONGS ( HOST_R14 , R14 ) ;
DEFINE_LONGS ( HOST_R15 , R15 ) ;
2011-08-18 20:12:19 +01:00
DEFINE_LONGS ( HOST_ORIG_AX , ORIG_RAX ) ;
2005-09-28 22:27:23 +01:00
DEFINE_LONGS ( HOST_CS , CS ) ;
DEFINE_LONGS ( HOST_SS , SS ) ;
DEFINE_LONGS ( HOST_EFLAGS , EFLAGS ) ;
2005-05-05 16:15:23 -07:00
#if 0
2005-09-28 22:27:23 +01:00
DEFINE_LONGS ( HOST_FS , FS ) ;
DEFINE_LONGS ( HOST_GS , GS ) ;
DEFINE_LONGS ( HOST_DS , DS ) ;
DEFINE_LONGS ( HOST_ES , ES ) ;
2005-05-05 16:15:23 -07:00
# endif
2005-09-28 22:27:23 +01:00
DEFINE_LONGS ( HOST_IP , RIP ) ;
DEFINE_LONGS ( HOST_SP , RSP ) ;
2011-08-18 20:03:19 +01:00
# endif
2006-03-27 01:14:30 -08:00
2011-08-18 20:03:19 +01:00
DEFINE ( UM_FRAME_SIZE , sizeof ( struct user_regs_struct ) ) ;
2006-03-27 01:14:30 -08:00
DEFINE ( UM_POLLIN , POLLIN ) ;
DEFINE ( UM_POLLPRI , POLLPRI ) ;
DEFINE ( UM_POLLOUT , POLLOUT ) ;
2007-05-06 14:51:48 -07:00
DEFINE ( UM_PROT_READ , PROT_READ ) ;
DEFINE ( UM_PROT_WRITE , PROT_WRITE ) ;
DEFINE ( UM_PROT_EXEC , PROT_EXEC ) ;
2005-05-05 16:15:23 -07:00
}