]>
Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
5134d8fe | 2 | * Copyright (C) 2006 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) |
1da177e4 LT |
3 | * Licensed under the GPL |
4 | */ | |
5 | ||
6 | #include <errno.h> | |
d1254b12 | 7 | #include <sys/ptrace.h> |
42daba31 JD |
8 | #define __FRAME_OFFSETS |
9 | #include <asm/ptrace.h> | |
5134d8fe | 10 | #include "kern_constants.h" |
13c06be3 | 11 | #include "longjmp.h" |
1da177e4 LT |
12 | #include "user.h" |
13 | ||
d1254b12 JD |
14 | int save_fp_registers(int pid, unsigned long *fp_regs) |
15 | { | |
5134d8fe | 16 | if (ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0) |
d1254b12 JD |
17 | return -errno; |
18 | return 0; | |
19 | } | |
20 | ||
21 | int restore_fp_registers(int pid, unsigned long *fp_regs) | |
22 | { | |
5134d8fe | 23 | if (ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0) |
d1254b12 JD |
24 | return -errno; |
25 | return 0; | |
26 | } | |
27 | ||
75e29b18 | 28 | unsigned long get_thread_reg(int reg, jmp_buf *buf) |
fad1c45c | 29 | { |
5134d8fe JD |
30 | switch (reg) { |
31 | case RIP: | |
32 | return buf[0]->__rip; | |
33 | case RSP: | |
34 | return buf[0]->__rsp; | |
35 | case RBP: | |
36 | return buf[0]->__rbp; | |
75e29b18 | 37 | default: |
5134d8fe JD |
38 | printk(UM_KERN_ERR "get_thread_regs - unknown register %d\n", |
39 | reg); | |
75e29b18 JD |
40 | return 0; |
41 | } | |
fad1c45c | 42 | } |
2f56debd JD |
43 | |
44 | int get_fp_registers(int pid, unsigned long *regs) | |
45 | { | |
46 | return save_fp_registers(pid, regs); | |
47 | } | |
48 | ||
49 | int put_fp_registers(int pid, unsigned long *regs) | |
50 | { | |
51 | return restore_fp_registers(pid, regs); | |
52 | } |