Path: blob/master/arch/um/sys-x86_64/user-offsets.c
10818 views
#include <stdio.h>1#include <stddef.h>2#include <signal.h>3#include <sys/poll.h>4#include <sys/mman.h>5#include <sys/user.h>6#define __FRAME_OFFSETS7#include <asm/ptrace.h>8#include <asm/types.h>910#define DEFINE(sym, val) \11asm volatile("\n->" #sym " %0 " #val : : "i" (val))1213#define DEFINE_LONGS(sym, val) \14asm volatile("\n->" #sym " %0 " #val : : "i" (val/sizeof(unsigned long)))1516#define OFFSET(sym, str, mem) \17DEFINE(sym, offsetof(struct str, mem));1819void foo(void)20{21OFFSET(HOST_SC_CR2, sigcontext, cr2);22OFFSET(HOST_SC_ERR, sigcontext, err);23OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);2425DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));26DEFINE_LONGS(HOST_RBX, RBX);27DEFINE_LONGS(HOST_RCX, RCX);28DEFINE_LONGS(HOST_RDI, RDI);29DEFINE_LONGS(HOST_RSI, RSI);30DEFINE_LONGS(HOST_RDX, RDX);31DEFINE_LONGS(HOST_RBP, RBP);32DEFINE_LONGS(HOST_RAX, RAX);33DEFINE_LONGS(HOST_R8, R8);34DEFINE_LONGS(HOST_R9, R9);35DEFINE_LONGS(HOST_R10, R10);36DEFINE_LONGS(HOST_R11, R11);37DEFINE_LONGS(HOST_R12, R12);38DEFINE_LONGS(HOST_R13, R13);39DEFINE_LONGS(HOST_R14, R14);40DEFINE_LONGS(HOST_R15, R15);41DEFINE_LONGS(HOST_ORIG_RAX, ORIG_RAX);42DEFINE_LONGS(HOST_CS, CS);43DEFINE_LONGS(HOST_SS, SS);44DEFINE_LONGS(HOST_EFLAGS, EFLAGS);45#if 046DEFINE_LONGS(HOST_FS, FS);47DEFINE_LONGS(HOST_GS, GS);48DEFINE_LONGS(HOST_DS, DS);49DEFINE_LONGS(HOST_ES, ES);50#endif5152DEFINE_LONGS(HOST_IP, RIP);53DEFINE_LONGS(HOST_SP, RSP);54DEFINE(UM_FRAME_SIZE, sizeof(struct user_regs_struct));5556/* XXX Duplicated between i386 and x86_64 */57DEFINE(UM_POLLIN, POLLIN);58DEFINE(UM_POLLPRI, POLLPRI);59DEFINE(UM_POLLOUT, POLLOUT);6061DEFINE(UM_PROT_READ, PROT_READ);62DEFINE(UM_PROT_WRITE, PROT_WRITE);63DEFINE(UM_PROT_EXEC, PROT_EXEC);64}656667