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