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.1 (Berkeley) 6/6/85";
   9: #endif not lint
  10: /*
  11:  * These routines are used to access the debuggee process from
  12:  * outside the "process" module.
  13:  *
  14:  * They invoke "pio" which eventually leads to a call to "ptrace".
  15:  * The system generates an I/O error when a ptrace fails, we catch
  16:  * that here and assume its due to a misguided address.
  17:  */
  18: 
  19: #include "defs.h"
  20: #include <errno.h>
  21: #include "process.h"
  22: #include "process.rep"
  23: 
  24: #	if (isvaxpx)
  25: #		include "pxinfo.h"
  26: #	endif
  27: 
  28: typedef int INTFUNC();
  29: 
  30: extern INTFUNC *onsyserr();
  31: 
  32: LOCAL badaddr;
  33: LOCAL rwerr();
  34: 
  35: /*
  36:  * Read from the process' instruction area.  For px, this is actually
  37:  * the data area.
  38:  */
  39: 
  40: iread(buff, addr, nbytes)
  41: char *buff;
  42: ADDRESS addr;
  43: int nbytes;
  44: {
  45:     INTFUNC *f;
  46: 
  47:     f = onsyserr(EIO, &rwerr);
  48: #	if (isvaxpx)
  49:         badaddr = addr + ENDOFF;
  50:         pio(process, PREAD, DATASEG, buff, addr + ENDOFF, nbytes);
  51: #	else
  52:         badaddr = addr;
  53:         pio(process, PREAD, TEXTSEG, buff, addr, nbytes);
  54: #	endif
  55:     onsyserr(EIO, f);
  56: }
  57: 
  58: /*
  59:  * Write to the process' instruction area, usually in order to set
  60:  * or unset a breakpoint.
  61:  */
  62: 
  63: iwrite(buff, addr, nbytes)
  64: char *buff;
  65: ADDRESS addr;
  66: int nbytes;
  67: {
  68:     INTFUNC *f;
  69: 
  70:     f = onsyserr(EIO, &rwerr);
  71: #	if (isvaxpx)
  72:         badaddr = addr + ENDOFF;
  73:         pio(process, PWRITE, DATASEG, buff, addr + ENDOFF, nbytes);
  74: #	else
  75:         badaddr = addr;
  76:         pio(process, PWRITE, TEXTSEG, buff, addr, nbytes);
  77: #	endif
  78:     onsyserr(EIO, f);
  79: }
  80: 
  81: /*
  82:  * Read for the process' data area.
  83:  */
  84: 
  85: dread(buff, addr, nbytes)
  86: char *buff;
  87: ADDRESS addr;
  88: int nbytes;
  89: {
  90:     INTFUNC *f;
  91: 
  92:     f = onsyserr(EIO, &rwerr);
  93:     badaddr = addr;
  94:     pio(process, PREAD, DATASEG, buff, addr, nbytes);
  95:     onsyserr(EIO, f);
  96: }
  97: 
  98: /*
  99:  * Write to the process' data area.
 100:  */
 101: 
 102: dwrite(buff, addr, nbytes)
 103: char *buff;
 104: ADDRESS addr;
 105: int nbytes;
 106: {
 107:     INTFUNC *f;
 108: 
 109:     f = onsyserr(EIO, &rwerr);
 110:     badaddr = addr;
 111:     pio(process, PWRITE, DATASEG, buff, addr, nbytes);
 112:     onsyserr(EIO, f);
 113: }
 114: 
 115: /*
 116:  * Error handler.
 117:  */
 118: 
 119: LOCAL rwerr()
 120: {
 121:     error("bad read/write process address 0x%x", badaddr);
 122: }

Defined functions

dread defined in line 85; used 9 times
dwrite defined in line 102; never used
iread defined in line 40; used 1 times
iwrite defined in line 63; never used
rwerr defined in line 119; used 5 times

Defined variables

sccsid defined in line 8; never used
Last modified: 1985-06-06
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1036
Valid CSS Valid XHTML 1.0 Strict