regs.c revision 366c2f46d844f040458df9b7e35fc3b8527ed2d3
1#include "config.h"
2
3#include <sys/types.h>
4#include <sys/ptrace.h>
5#include <asm/ptrace.h>
6
7#include "proc.h"
8#include "common.h"
9
10#if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR))
11# define PTRACE_PEEKUSER PTRACE_PEEKUSR
12#endif
13
14#if (!defined(PTRACE_POKEUSER) && defined(PTRACE_POKEUSR))
15# define PTRACE_POKEUSER PTRACE_POKEUSR
16#endif
17
18void *
19get_instruction_pointer(Process *proc) {
20	return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4 * PT_PC, 0);
21}
22
23void
24set_instruction_pointer(Process *proc, void *addr) {
25	ptrace(PTRACE_POKEUSER, proc->pid, 4 * PT_PC, addr);
26}
27
28void *
29get_stack_pointer(Process *proc) {
30	return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4 * PT_USP, 0);
31}
32
33void *
34get_return_addr(Process *proc, void *stack_pointer) {
35	return (void *)ptrace(PTRACE_PEEKTEXT, proc->pid, stack_pointer, 0);
36}
37
38void
39set_return_addr(Process *proc, void *addr) {
40	ptrace(PTRACE_POKETEXT, proc->pid, proc->stack_pointer, addr);
41}
42