30 lines
		
	
	
	
		
			642 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
	
		
			642 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <errno.h>
							 | 
						||
| 
								 | 
							
								#include <asm/ptrace.h>
							 | 
						||
| 
								 | 
							
								#include "sysdep/ptrace.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int ptrace_getregs(long pid, unsigned long *regs_out)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int i;
							 | 
						||
| 
								 | 
							
								    for (i=0; i < sizeof(struct sys_pt_regs)/sizeof(PPC_REG); ++i) {
							 | 
						||
| 
								 | 
							
									errno = 0;
							 | 
						||
| 
								 | 
							
									regs_out->regs[i] = ptrace(PTRACE_PEEKUSR, pid, i*4, 0);
							 | 
						||
| 
								 | 
							
									if (errno) {
							 | 
						||
| 
								 | 
							
									    return -errno;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int ptrace_setregs(long pid, unsigned long *regs_in)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int i;
							 | 
						||
| 
								 | 
							
								    for (i=0; i < sizeof(struct sys_pt_regs)/sizeof(PPC_REG); ++i) {
							 | 
						||
| 
								 | 
							
									if (i != 34 /* FIXME: PT_ORIG_R3 */ && i <= PT_MQ) {
							 | 
						||
| 
								 | 
							
									    if (ptrace(PTRACE_POKEUSR, pid, i*4, regs_in->regs[i]) < 0) {
							 | 
						||
| 
								 | 
							
										return -errno;
							 | 
						||
| 
								 | 
							
									    }
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return 0;
							 | 
						||
| 
								 | 
							
								}
							 |