regs.c revision f04d032e298c410e45553223a979c1f26f280259
1#include "config.h" 2 3#include <sys/types.h> 4#include <sys/ptrace.h> 5#include <asm/ptrace.h> 6#include <errno.h> 7#include <error.h> 8 9#include "proc.h" 10#include "common.h" 11 12#if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR)) 13# define PTRACE_PEEKUSER PTRACE_PEEKUSR 14#endif 15 16#if (!defined(PTRACE_POKEUSER) && defined(PTRACE_POKEUSR)) 17# define PTRACE_POKEUSER PTRACE_POKEUSR 18#endif 19 20void * 21get_instruction_pointer(Process *proc) { 22 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, sizeof(long)*PT_NIP, 0); 23} 24 25void 26set_instruction_pointer(Process *proc, void *addr) 27{ 28 if (ptrace(PTRACE_POKEUSER, proc->pid, sizeof(long)*PT_NIP, addr) != 0) 29 error(0, errno, "set_instruction_pointer"); 30} 31 32void * 33get_stack_pointer(Process *proc) { 34 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, sizeof(long)*PT_R1, 0); 35} 36 37void * 38get_return_addr(Process *proc, void *stack_pointer) { 39 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, sizeof(long)*PT_LNK, 0); 40} 41 42void 43set_return_addr(Process *proc, void *addr) { 44 ptrace(PTRACE_POKEUSER, proc->pid, sizeof(long)*PT_LNK, addr); 45} 46 47/* Grab the value of CTR registers. */ 48void * 49get_count_register (Process *proc) { 50 return (void *) ptrace (PTRACE_PEEKUSER, proc->pid, 51 sizeof (long) * PT_CTR, 0); 52} 53