2005-05-05 16:15:23 -07:00
# include <stdio.h>
# include <stddef.h>
# include <signal.h>
# define __FRAME_OFFSETS
# include <asm/ptrace.h>
2005-05-20 13:59:07 -07:00
# include <asm/types.h>
/* For some reason, x86_64 defines u64 and u32 only in <pci/types.h>, which I
* refuse to include here , even though they ' re used throughout the headers .
* These are used in asm / user . h , and that include can ' t be avoided because of
* the sizeof ( struct user_regs_struct ) below .
*/
typedef __u64 u64 ;
typedef __u32 u32 ;
2005-05-05 16:15:23 -07:00
# include <asm/user.h>
# define DEFINE(sym, val) \
asm volatile ( " \n -> " # sym " %0 " # val : : " i " ( val ) )
2005-09-28 22:27:23 +01:00
# define DEFINE_LONGS(sym, val) \
asm volatile ( " \n -> " # sym " %0 " # val : : " i " ( val / sizeof ( unsigned long ) ) )
2005-05-05 16:15:23 -07:00
# define OFFSET(sym, str, mem) \
DEFINE ( sym , offsetof ( struct str , mem ) ) ;
void foo ( void )
{
2005-09-28 22:27:23 +01:00
OFFSET ( HOST_SC_RBX , sigcontext , rbx ) ;
OFFSET ( HOST_SC_RCX , sigcontext , rcx ) ;
OFFSET ( HOST_SC_RDX , sigcontext , rdx ) ;
OFFSET ( HOST_SC_RSI , sigcontext , rsi ) ;
OFFSET ( HOST_SC_RDI , sigcontext , rdi ) ;
OFFSET ( HOST_SC_RBP , sigcontext , rbp ) ;
OFFSET ( HOST_SC_RAX , sigcontext , rax ) ;
OFFSET ( HOST_SC_R8 , sigcontext , r8 ) ;
OFFSET ( HOST_SC_R9 , sigcontext , r9 ) ;
OFFSET ( HOST_SC_R10 , sigcontext , r10 ) ;
OFFSET ( HOST_SC_R11 , sigcontext , r11 ) ;
OFFSET ( HOST_SC_R12 , sigcontext , r12 ) ;
OFFSET ( HOST_SC_R13 , sigcontext , r13 ) ;
OFFSET ( HOST_SC_R14 , sigcontext , r14 ) ;
OFFSET ( HOST_SC_R15 , sigcontext , r15 ) ;
OFFSET ( HOST_SC_IP , sigcontext , rip ) ;
OFFSET ( HOST_SC_SP , sigcontext , rsp ) ;
OFFSET ( HOST_SC_CR2 , sigcontext , cr2 ) ;
OFFSET ( HOST_SC_ERR , sigcontext , err ) ;
OFFSET ( HOST_SC_TRAPNO , sigcontext , trapno ) ;
OFFSET ( HOST_SC_CS , sigcontext , cs ) ;
OFFSET ( HOST_SC_FS , sigcontext , fs ) ;
OFFSET ( HOST_SC_GS , sigcontext , gs ) ;
OFFSET ( HOST_SC_EFLAGS , sigcontext , eflags ) ;
OFFSET ( HOST_SC_SIGMASK , sigcontext , oldmask ) ;
2005-05-05 16:15:23 -07:00
#if 0
2005-09-28 22:27:23 +01:00
OFFSET ( HOST_SC_ORIG_RAX , sigcontext , orig_rax ) ;
OFFSET ( HOST_SC_DS , sigcontext , ds ) ;
OFFSET ( HOST_SC_ES , sigcontext , es ) ;
OFFSET ( HOST_SC_SS , sigcontext , ss ) ;
2005-05-05 16:15:23 -07:00
# endif
2005-09-28 22:27:23 +01:00
DEFINE_LONGS ( HOST_FRAME_SIZE , FRAME_SIZE ) ;
2006-02-07 12:58:43 -08:00
DEFINE ( HOST_FP_SIZE , sizeof ( struct _fpstate ) / sizeof ( unsigned long ) ) ;
2005-09-28 22:27:23 +01:00
DEFINE ( HOST_XFP_SIZE , 0 ) ;
DEFINE_LONGS ( HOST_RBX , RBX ) ;
DEFINE_LONGS ( HOST_RCX , RCX ) ;
DEFINE_LONGS ( HOST_RDI , RDI ) ;
DEFINE_LONGS ( HOST_RSI , RSI ) ;
DEFINE_LONGS ( HOST_RDX , RDX ) ;
DEFINE_LONGS ( HOST_RBP , RBP ) ;
DEFINE_LONGS ( HOST_RAX , RAX ) ;
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 ) ;
DEFINE_LONGS ( HOST_ORIG_RAX , ORIG_RAX ) ;
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 ) ;
DEFINE ( UM_FRAME_SIZE , sizeof ( struct user_regs_struct ) ) ;
2005-05-05 16:15:23 -07:00
}