uml: use ptrace directly in libc code
[pandora-kernel.git] / arch / um / os-Linux / registers.c
1 /*
2  * Copyright (C) 2004 PathScale, Inc
3  * Copyright (C) 2004 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
4  * Licensed under the GPL
5  */
6
7 #include <errno.h>
8 #include <string.h>
9 #include <sys/ptrace.h>
10 #include "sysdep/ptrace.h"
11 #include "user.h"
12
13 void save_registers(int pid, struct uml_pt_regs *regs)
14 {
15         int err;
16
17         err = ptrace(PTRACE_GETREGS, pid, 0, regs->gp);
18         if (err < 0)
19                 panic("save_registers - saving registers failed, errno = %d\n",
20                       errno);
21 }
22
23 void restore_registers(int pid, struct uml_pt_regs *regs)
24 {
25         int err;
26
27         err = ptrace(PTRACE_SETREGS, pid, 0, regs->gp);
28         if (err < 0)
29                 panic("restore_registers - saving registers failed, "
30                       "errno = %d\n", errno);
31 }
32
33 /* This is set once at boot time and not changed thereafter */
34
35 static unsigned long exec_regs[MAX_REG_NR];
36
37 void init_registers(int pid)
38 {
39         int err;
40
41         err = ptrace(PTRACE_GETREGS, pid, 0, exec_regs);
42         if (err)
43                 panic("check_ptrace : PTRACE_GETREGS failed, errno = %d",
44                       errno);
45
46         arch_init_registers(pid);
47 }
48
49 void get_safe_registers(unsigned long *regs)
50 {
51         memcpy(regs, exec_regs, sizeof(exec_regs));
52 }