regs.c revision 3219f320604810532a4938dda8f9dfadb0e840f3
1/*
2** S/390 version
3** Copyright (C) 2001 IBM Poughkeepsie, IBM Corporation
4*/
5
6#if HAVE_CONFIG_H
7#include "config.h"
8#endif
9
10#include <sys/types.h>
11#include <sys/ptrace.h>
12#include <asm/ptrace.h>
13
14#include "ltrace.h"
15
16#if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR))
17# define PTRACE_PEEKUSER PTRACE_PEEKUSR
18#endif
19
20#if (!defined(PTRACE_POKEUSER) && defined(PTRACE_POKEUSR))
21# define PTRACE_POKEUSER PTRACE_POKEUSR
22#endif
23
24void *get_instruction_pointer(struct process *proc)
25{
26	return (void *)(ptrace(PTRACE_PEEKUSER, proc->pid, PT_PSWADDR, 0) &
27			0x7fffffff);
28}
29
30void set_instruction_pointer(struct process *proc, void *addr)
31{
32	ptrace(PTRACE_POKEUSER, proc->pid, PT_PSWADDR, addr);
33}
34
35void *get_stack_pointer(struct process *proc)
36{
37	return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, PT_GPR15, 0);
38}
39
40void *get_return_addr(struct process *proc, void *stack_pointer)
41{
42	return (void *)(ptrace(PTRACE_PEEKUSER, proc->pid, PT_GPR14, 0) &
43			0x7fffffff);
44}
45