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