blob: 183862be7be0df4c3d68f99f083361467e4638dd [file] [log] [blame]
Juan Cespedesd44c6b81998-09-25 14:48:42 +02001#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
Juan Cespedes5c3fe062004-06-14 18:08:37 +02009#include "ltrace.c"
10
Juan Cespedesd44c6b81998-09-25 14:48:42 +020011#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
Juan Cespedes8cc1b9d2002-03-01 19:54:23 +010019void *
Juan Cespedes5c3fe062004-06-14 18:08:37 +020020get_instruction_pointer(struct process * proc) {
21 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4*PT_PC, 0);
Juan Cespedesd44c6b81998-09-25 14:48:42 +020022}
23
Juan Cespedes8f8282f2002-03-03 18:58:40 +010024void
Juan Cespedes5c3fe062004-06-14 18:08:37 +020025set_instruction_pointer(struct process * proc, long addr) {
26 ptrace(PTRACE_POKEUSER, proc->pid, 4*PT_PC, addr);
Juan Cespedes8f8282f2002-03-03 18:58:40 +010027}
28
Juan Cespedes8cc1b9d2002-03-01 19:54:23 +010029void *
Juan Cespedes5c3fe062004-06-14 18:08:37 +020030get_stack_pointer(struct process * proc) {
31 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4*PT_USP, 0);
Juan Cespedesd44c6b81998-09-25 14:48:42 +020032}
33
Juan Cespedes8cc1b9d2002-03-01 19:54:23 +010034void *
Juan Cespedes5c3fe062004-06-14 18:08:37 +020035get_return_addr(struct process * proc, void * stack_pointer) {
36 return (void *)ptrace(PTRACE_PEEKTEXT, proc->pid, stack_pointer, 0);
Juan Cespedesd44c6b81998-09-25 14:48:42 +020037}