#include <stdio.h>
#include <stddef.h>
#include <signal.h>
#include <sys/poll.h>
#include <sys/mman.h>
#include <asm/ptrace.h>
#include <asm/user.h>

#define DEFINE(sym, val) \
	asm volatile("\n->" #sym " %0 " #val : : "i" (val))

#define DEFINE_LONGS(sym, val) \
	asm volatile("\n->" #sym " %0 " #val : : "i" (val/sizeof(unsigned long)))

#define OFFSET(sym, str, mem) \
	DEFINE(sym, offsetof(struct str, mem));

void foo(void)
{
	OFFSET(HOST_SC_IP, sigcontext, eip);
	OFFSET(HOST_SC_SP, sigcontext, esp);
	OFFSET(HOST_SC_FS, sigcontext, fs);
	OFFSET(HOST_SC_GS, sigcontext, gs);
	OFFSET(HOST_SC_DS, sigcontext, ds);
	OFFSET(HOST_SC_ES, sigcontext, es);
	OFFSET(HOST_SC_SS, sigcontext, ss);
	OFFSET(HOST_SC_CS, sigcontext, cs);
	OFFSET(HOST_SC_EFLAGS, sigcontext, eflags);
	OFFSET(HOST_SC_EAX, sigcontext, eax);
	OFFSET(HOST_SC_EBX, sigcontext, ebx);
	OFFSET(HOST_SC_ECX, sigcontext, ecx);
	OFFSET(HOST_SC_EDX, sigcontext, edx);
	OFFSET(HOST_SC_EDI, sigcontext, edi);
	OFFSET(HOST_SC_ESI, sigcontext, esi);
	OFFSET(HOST_SC_EBP, sigcontext, ebp);
	OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);
	OFFSET(HOST_SC_ERR, sigcontext, err);
	OFFSET(HOST_SC_CR2, sigcontext, cr2);
	OFFSET(HOST_SC_FPSTATE, sigcontext, fpstate);
	OFFSET(HOST_SC_SIGMASK, sigcontext, oldmask);
	OFFSET(HOST_SC_FP_CW, _fpstate, cw);
	OFFSET(HOST_SC_FP_SW, _fpstate, sw);
	OFFSET(HOST_SC_FP_TAG, _fpstate, tag);
	OFFSET(HOST_SC_FP_IPOFF, _fpstate, ipoff);
	OFFSET(HOST_SC_FP_CSSEL, _fpstate, cssel);
	OFFSET(HOST_SC_FP_DATAOFF, _fpstate, dataoff);
	OFFSET(HOST_SC_FP_DATASEL, _fpstate, datasel);
	OFFSET(HOST_SC_FP_ST, _fpstate, _st);
	OFFSET(HOST_SC_FXSR_ENV, _fpstate, _fxsr_env);

	DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_i387_struct));
	DEFINE_LONGS(HOST_XFP_SIZE, sizeof(struct user_fxsr_struct));

	DEFINE(HOST_IP, EIP);
	DEFINE(HOST_SP, UESP);
	DEFINE(HOST_EFLAGS, EFL);
	DEFINE(HOST_EAX, EAX);
	DEFINE(HOST_EBX, EBX);
	DEFINE(HOST_ECX, ECX);
	DEFINE(HOST_EDX, EDX);
	DEFINE(HOST_ESI, ESI);
	DEFINE(HOST_EDI, EDI);
	DEFINE(HOST_EBP, EBP);
	DEFINE(HOST_CS, CS);
	DEFINE(HOST_SS, SS);
	DEFINE(HOST_DS, DS);
	DEFINE(HOST_FS, FS);
	DEFINE(HOST_ES, ES);
	DEFINE(HOST_GS, GS);
	DEFINE(UM_FRAME_SIZE, sizeof(struct user_regs_struct));

	/* XXX Duplicated between i386 and x86_64 */
	DEFINE(UM_POLLIN, POLLIN);
	DEFINE(UM_POLLPRI, POLLPRI);
	DEFINE(UM_POLLOUT, POLLOUT);

	DEFINE(UM_PROT_READ, PROT_READ);
	DEFINE(UM_PROT_WRITE, PROT_WRITE);
	DEFINE(UM_PROT_EXEC, PROT_EXEC);
}
