]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/um/os-Linux/sys-x86_64/registers.c
um: merge hard_handler() instances, switch to use of SA_SIGINFO
[mv-sheeva.git] / arch / um / os-Linux / sys-x86_64 / registers.c
1 /*
2  * Copyright (C) 2006 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3  * Licensed under the GPL
4  */
5
6 #include <errno.h>
7 #include <sys/ptrace.h>
8 #define __FRAME_OFFSETS
9 #include <asm/ptrace.h>
10 #include "longjmp.h"
11
12 int save_fp_registers(int pid, unsigned long *fp_regs)
13 {
14         if (ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0)
15                 return -errno;
16         return 0;
17 }
18
19 int restore_fp_registers(int pid, unsigned long *fp_regs)
20 {
21         if (ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0)
22                 return -errno;
23         return 0;
24 }
25
26 unsigned long get_thread_reg(int reg, jmp_buf *buf)
27 {
28         switch (reg) {
29         case RIP:
30                 return buf[0]->__rip;
31         case RSP:
32                 return buf[0]->__rsp;
33         case RBP:
34                 return buf[0]->__rbp;
35         default:
36                 printk(UM_KERN_ERR "get_thread_regs - unknown register %d\n",
37                        reg);
38                 return 0;
39         }
40 }
41
42 int get_fp_registers(int pid, unsigned long *regs)
43 {
44         return save_fp_registers(pid, regs);
45 }
46
47 int put_fp_registers(int pid, unsigned long *regs)
48 {
49         return restore_fp_registers(pid, regs);
50 }