1: static  char sccsid[] = "@(#)access.c 4.2 8/17/82";
   2: #
   3: /*
   4:  *
   5:  *	UNIX debugger
   6:  *
   7:  */
   8: 
   9: #include "head.h"
  10: struct user u;
  11: 
  12: 
  13: MSG     BADDAT;
  14: MSG     BADTXT;
  15: MAP     txtmap;
  16: MAP     datmap;
  17: STRING      errflg;
  18: int     errno;
  19: 
  20: INT     pid;
  21: 
  22: 
  23: 
  24: 
  25: /* file handling and access routines */
  26: 
  27: int dmask[5] = {0, 0xff, 0xffff, 0xffffff, 0xffffffff};
  28: 
  29: /* get data at loc using descriptor format d */
  30: long
  31: getval(loc, d, space)
  32: ADDR loc;
  33: char d; {
  34:     register int val;
  35: 
  36:     val = get(loc, space);
  37:     val &= dmask[dtol(d)];
  38:     return(val);
  39: }
  40: 
  41: /* put value at loc using descriptor format d */
  42: putval(loc, d, value)
  43: ADDR loc; char d; long value; {
  44:     register long val;
  45: 
  46:     val = get(loc, DSP);
  47:     val = (val & !dmask[dtol(d)]) | (value & dmask[dtol(d)]);
  48:     put(loc, DSP, val);
  49: }
  50: 
  51: /* put value in named register using descriptor format d */
  52: putreg(reg, d, value)
  53: ADDR reg; char d; long value; {
  54:     register long val;
  55: 
  56:     val = *(ADDR *)(((ADDR)&u)+R0+WORDSIZE*reg);
  57:     val = (val & !dmask[dtol(d)]) | (value & dmask[dtol(d)]);
  58:     *(ADDR *)(((ADDR)&u)+R0+WORDSIZE*reg) = val;
  59: }
  60: 
  61: put(adr,space,value)
  62: L_INT   adr;
  63: {
  64:     access(WT,adr,space,value);
  65: }
  66: 
  67: POS get(adr, space)
  68: L_INT       adr;
  69: {
  70:     return(access(RD,adr,space,0));
  71: }
  72: 
  73: 
  74: access(mode,adr,space,value)
  75: L_INT   adr;
  76: {
  77:     INT pmode,rd,file;
  78:     ADDR    w;
  79:     if (debug)
  80:         printf("access(mode=%d,adr=%d,space=%d,value=%d) with pid %d\n",
  81:             mode, adr, space, value, pid);
  82:     rd = mode==RD;
  83: 
  84:     IF space == NSP THEN return(0); FI
  85: 
  86:     IF pid      /* tracing on? */
  87:     THEN
  88: #ifndef vax
  89:         IF adr&01 ANDF !rd THEN error(ODDADR); FI
  90: #endif
  91:          pmode = (space&DSP?(rd?RDUSER:WDUSER):(rd?RIUSER:WIUSER));
  92:          w = ptrace(pmode, pid, adr, value);
  93:          if (debug)
  94:         printf("ptrace(%d,%d,%d,%d) = %d with error=%d\n",
  95:             pmode, pid, adr, value, w, errno);
  96: #ifndef vax
  97:          IF adr&01
  98:          THEN w1 = ptrace(pmode, pid, shorten(adr+1), value);
  99:           w = (w>>8)&LOBYTE | (w1<<8);
 100:          FI
 101: #endif
 102:          IF errno
 103:          THEN errflg = (space&DSP ? BADDAT : BADTXT);
 104:          FI
 105:          return(w);
 106:     FI
 107:     w = 0;
 108:     IF !chkmap(&adr,space)
 109:     THEN return(0);
 110:     FI
 111:     file=(space&DSP?datmap.ufd:txtmap.ufd);
 112:     if (longseek(file,adr)==0 ||
 113:        (rd ? read(file,&w,sizeof(w)) : write(file,&value,sizeof(w))) < 1)
 114:         errflg=(space&DSP?BADDAT:BADTXT);
 115:     return(w);
 116: 
 117: }
 118: 
 119: chkmap(adr,space)
 120:     REG L_INT   *adr;
 121:     REG INT     space;
 122: {
 123:     REG MAPPTR amap;
 124:     amap=((space&DSP?&datmap:&txtmap));
 125:     IF space&STAR ORF !within(*adr,amap->b1,amap->e1)
 126:     THEN if (within(*adr,amap->b2,amap->e2))
 127:         *adr += (amap->f2)-(amap->b2);
 128:          else {
 129:         errflg=(space&DSP?BADDAT:BADTXT); return(0);
 130:          }
 131:     ELSE *adr += (amap->f1)-(amap->b1);
 132:     FI
 133:     return(1);
 134: }
 135: 
 136: within(adr,lbd,ubd)
 137: POS adr, lbd, ubd;
 138: {
 139:     return(adr>=lbd && adr<ubd);
 140: }
 141: 
 142: /* ------------ */
 143: POS chkget(n, space)
 144: L_INT       n;
 145: {
 146: #ifndef vax
 147:     REG INT     w;
 148: #else
 149:     REG L_INT   w;
 150: #endif
 151: 
 152:     w = get(n, space);
 153:     chkerr();
 154:     return(w);
 155: }
 156: 
 157: POS bchkget(n, space)
 158: L_INT   n;
 159: {
 160:     return(chkget(n, space) & LOBYTE);
 161: }

Defined functions

access defined in line 74; used 2 times
bchkget defined in line 157; used 1 times
chkget defined in line 143; used 4 times
chkmap defined in line 119; used 1 times
get defined in line 67; used 22 times
getval defined in line 30; used 10 times
put defined in line 61; used 3 times
putreg defined in line 52; used 1 times
putval defined in line 42; used 3 times
within defined in line 136; used 2 times

Defined variables

dmask defined in line 27; used 5 times
errno defined in line 18; used 2 times
sccsid defined in line 1; never used
u defined in line 10; used 2 times
Last modified: 1982-10-04
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1164
Valid CSS Valid XHTML 1.0 Strict