1 /* 2 * Copyright (C) 2004 PathScale, Inc 3 * Licensed under the GPL 4 */ 5 6 #include <errno.h> 7 #include <string.h> 8 #include <sys/ptrace.h> 9 #include "user.h" 10 #include "sysdep/ptrace.h" 11 12 /* This is set once at boot time and not changed thereafter */ 13 14 static unsigned long exec_regs[MAX_REG_NR]; 15 16 void init_thread_registers(union uml_pt_regs *to) 17 { 18 memcpy(to->skas.regs, exec_regs, sizeof(to->skas.regs)); 19 } 20 21 void save_registers(int pid, union uml_pt_regs *regs) 22 { 23 int err; 24 25 err = ptrace(PTRACE_GETREGS, pid, 0, regs->skas.regs); 26 if(err < 0) 27 panic("save_registers - saving registers failed, errno = %d\n", 28 errno); 29 } 30 31 void restore_registers(int pid, union uml_pt_regs *regs) 32 { 33 int err; 34 35 err = ptrace(PTRACE_SETREGS, pid, 0, regs->skas.regs); 36 if(err < 0) 37 panic("restore_registers - saving registers failed, " 38 "errno = %d\n", errno); 39 } 40 41 void init_registers(int pid) 42 { 43 int err; 44 45 err = ptrace(PTRACE_GETREGS, pid, 0, exec_regs); 46 if(err) 47 panic("check_ptrace : PTRACE_GETREGS failed, errno = %d", 48 errno); 49 } 50 51 void get_safe_registers(unsigned long *regs) 52 { 53 memcpy(regs, exec_regs, sizeof(exec_regs)); 54 } 55