1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)rdwr.c 5.3 (Berkeley) 04/07/87"; 9 #endif not lint 10 11 /* 12 * This routine is used to access the debuggee process from 13 * outside the "process" module. 14 * 15 * They invoke "pio" which eventually leads to a call to "ptrace". 16 * The system generates an I/O error when a ptrace fails, we catch 17 * that here and assume its due to a misguided address. 18 */ 19 20 #include "defs.h" 21 #include <errno.h> 22 #include "process.h" 23 #include "process.rep" 24 25 # include "pxinfo.h" 26 27 typedef int INTFUNC(); 28 29 extern INTFUNC *onsyserr(); 30 31 LOCAL badaddr; 32 LOCAL PIO_OP rwflg; 33 LOCAL rwerr(); 34 35 /* 36 * Read/Write to the process' data area. 37 */ 38 39 drdwr(rw, buff, addr, nbytes) 40 PIO_OP rw; 41 char *buff; 42 ADDRESS addr; 43 int nbytes; 44 { 45 INTFUNC *f; 46 47 f = onsyserr(EIO, rwerr); 48 badaddr = addr; 49 rwflg = rw; 50 pio(process, rw, DATASEG, buff, addr, nbytes); 51 onsyserr(EIO, f); 52 } 53 54 /* 55 * Error handler. 56 */ 57 58 LOCAL rwerr() 59 { 60 error("bad %s process address 0x%x", 61 rwflg == PREAD ? "read" : "write", badaddr); 62 } 63