Path: blob/master/arch/um/os-Linux/sys-x86_64/registers.c
17646 views
/*1* Copyright (C) 2006 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)2* Licensed under the GPL3*/45#include <errno.h>6#include <sys/ptrace.h>7#define __FRAME_OFFSETS8#include <asm/ptrace.h>9#include "kern_constants.h"10#include "longjmp.h"11#include "user.h"1213int save_fp_registers(int pid, unsigned long *fp_regs)14{15if (ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0)16return -errno;17return 0;18}1920int restore_fp_registers(int pid, unsigned long *fp_regs)21{22if (ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0)23return -errno;24return 0;25}2627unsigned long get_thread_reg(int reg, jmp_buf *buf)28{29switch (reg) {30case RIP:31return buf[0]->__rip;32case RSP:33return buf[0]->__rsp;34case RBP:35return buf[0]->__rbp;36default:37printk(UM_KERN_ERR "get_thread_regs - unknown register %d\n",38reg);39return 0;40}41}4243int get_fp_registers(int pid, unsigned long *regs)44{45return save_fp_registers(pid, regs);46}4748int put_fp_registers(int pid, unsigned long *regs)49{50return restore_fp_registers(pid, regs);51}525354