1: #
   2: /*
   3:  *
   4:  *	UNIX debugger
   5:  *
   6:  */
   7: 
   8: #include "defs.h"
   9: 
  10: 
  11: MSG     BADNAM;
  12: MSG     BADMAG;
  13: 
  14: MAP     txtmap;
  15: MAP     datmap;
  16: SYMSLAVE    *symvec;
  17: INT     wtflag;
  18: INT     fcor;
  19: INT     fsym;
  20: L_INT       maxfile;
  21: L_INT       maxstor;
  22: L_INT       txtsiz;
  23: L_INT       datsiz;
  24: L_INT       datbas;
  25: L_INT       stksiz;
  26: STRING      errflg;
  27: INT     magic;
  28: L_INT       symbas;
  29: L_INT       symnum;
  30: L_INT       entrypt;
  31: 
  32: INT     argcount;
  33: INT     signo;
  34: POS     corhdr[512];
  35: POS     *endhdr &corhdr[512];
  36: 
  37: STRING      symfil  "a.out";
  38: STRING      corfil  "core";
  39: 
  40: #define TXTHDRSIZ   (sizeof(txthdr))
  41: 
  42: setsym()
  43: {
  44:     INT     relflg;
  45:     INT     symval, symflg;
  46:     SYMSLAVE    *symptr;
  47:     SYMPTR      symp;
  48:     TXTHDR      txthdr;
  49: 
  50:     fsym=getfile(symfil,1);
  51:     txtmap.ufd=fsym;
  52:     IF read(fsym, txthdr, TXTHDRSIZ)==TXTHDRSIZ
  53:     THEN    magic=txthdr[0];
  54:         IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405
  55:         THEN    magic=0;
  56:         ELSE    symnum=txthdr[4]/SYMTABSIZ;
  57:             txtsiz=txthdr[1];
  58:             datsiz=txthdr[2];
  59:             symbas=txtsiz+datsiz;
  60:             txtmap.b1=0;
  61:             txtmap.e1=(magic==0407?symbas:txtsiz);
  62:             txtmap.f1 = TXTHDRSIZ;
  63:             txtmap.b2=datbas=(magic==0410?round(txtsiz,TXTRNDSIZ):0);
  64:             txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
  65:             txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
  66:             entrypt=txthdr[5];
  67:             relflg=txthdr[7];
  68:             IF relflg!=1 THEN symbas =<< 1; FI
  69:             symbas += TXTHDRSIZ;
  70: 
  71:             /* set up symvec */
  72:             symvec=sbrk(shorten((1+symnum))*sizeof (SYMSLAVE));
  73:             IF (symptr=symvec)==-1
  74:             THEN    printf("%s\n",BADNAM);
  75:                 symptr=symvec=sbrk(sizeof (SYMSLAVE));
  76:             ELSE    symset();
  77:                 WHILE (symp=symget()) ANDF errflg==0
  78:                 DO  symval=symp->symv; symflg=symp->symf;
  79:                     symptr->valslave=symval;
  80:                     symptr->typslave=SYMTYPE(symflg);
  81:                     symptr++;
  82:                 OD
  83:             FI
  84:             symptr->typslave=ESYM;
  85:         FI
  86:     FI
  87:     IF magic==0 THEN txtmap.e1=maxfile; FI
  88: }
  89: 
  90: setcor()
  91: {
  92:     fcor=getfile(corfil,2);
  93:     datmap.ufd=fcor;
  94:     IF read(fcor, corhdr, ctob(USIZE))==ctob(USIZE)
  95:     THEN    txtsiz = corhdr->u_tsize << 6;
  96:         datsiz = corhdr->u_dsize << 6;
  97:         stksiz = corhdr->u_ssize << 6;
  98:         datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
  99:         datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
 100:         datmap.f1 = ctob(USIZE);
 101:         datmap.b2 = maxstor-stksiz;
 102:         datmap.e2 = maxstor;
 103:         datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
 104:         IF magic ANDF magic!=corhdr[0].u_exdata.ux_mag
 105:         THEN    printf("%s\n",BADMAG);
 106:         FI
 107:     ELSE    datmap.e1 = maxfile;
 108:     FI
 109: }
 110: 
 111: create(f)
 112: STRING  f;
 113: {   int fd;
 114:     IF (fd=creat(f,0644))>=0
 115:     THEN close(fd); return(open(f,wtflag));
 116:     ELSE return(-1);
 117:     FI
 118: }
 119: 
 120: getfile(filnam,cnt)
 121: STRING  filnam;
 122: {
 123:     REG INT     fsym;
 124: 
 125:     IF !eqstr("-",filnam)
 126:     THEN    fsym=open(filnam,wtflag);
 127:         IF fsym<0 ANDF argcount>cnt
 128:         THEN    IF wtflag
 129:             THEN    fsym=create(filnam);
 130:             FI
 131:             IF fsym<0
 132:             THEN printf("cannot open `%s'\n", filnam);
 133:             FI
 134:         FI
 135:     ELSE    fsym = -1;
 136:     FI
 137:     return(fsym);
 138: }

Defined functions

create defined in line 111; used 1 times
getfile defined in line 120; used 2 times
setcor defined in line 90; used 2 times
setsym defined in line 42; used 1 times

Defined macros

TXTHDRSIZ defined in line 40; used 5 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 607
Valid CSS Valid XHTML 1.0 Strict