Annotation of 42BSD/ucb/pascal/pdx/process/rdwr.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.