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 } 53