|
|
1.1 ! root 1: # ! 2: /* ! 3: * ! 4: * UNIX debugger ! 5: * ! 6: */ ! 7: ! 8: #include "defs.h" ! 9: SCCSID(@(#)setup.c 2.5); ! 10: ! 11: ! 12: MSG BADNAM; ! 13: MSG BADMAG; ! 14: ! 15: MAP txtmap; ! 16: MAP datmap; ! 17: SYMSLAVE *symvec; ! 18: INT wtflag; ! 19: INT fcor; ! 20: INT fsym; ! 21: L_INT maxfile; ! 22: L_INT maxstor; ! 23: L_INT txtsiz; ! 24: L_INT datsiz; ! 25: L_INT datbas; ! 26: L_INT stksiz; ! 27: STRING errflg; ! 28: INT magic; ! 29: L_INT symbas; ! 30: L_INT symnum; ! 31: L_INT entrypt; ! 32: ! 33: INT argcount; ! 34: INT signo; ! 35: struct user u; ! 36: ! 37: STRING symfil = "a.out"; ! 38: STRING corfil = "core"; ! 39: ! 40: #define TXTHDRSIZ (sizeof(txthdr)) ! 41: ! 42: #ifndef EDDT ! 43: readl(f,p,n) int f,n; long * p;{ ! 44: #ifndef vax ! 45: int t=0; ! 46: do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n); ! 47: return(t); ! 48: #else ! 49: return(read(f,p,n*sizeof(long))); ! 50: #endif ! 51: } ! 52: #endif ! 53: ! 54: setsym() ! 55: { ! 56: #ifndef EDDT ! 57: INT relflg; ! 58: INT symval, symflg; ! 59: SYMSLAVE *symptr; ! 60: SYMPTR symp; ! 61: TXTHDR txthdr; ! 62: ! 63: fsym=getfile(symfil,1); ! 64: txtmap.ufd=fsym; ! 65: IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ ! 66: THEN magic=txthdr[0]; ! 67: IF magic!=0410 ANDF magic!=0407 ANDF magic!=0412 ANDF magic!=0413 ! 68: THEN magic=0; ! 69: ELSE ! 70: symnum=txthdr[4]/SYMTABSIZ; ! 71: txtsiz=txthdr[1]; ! 72: datsiz=txthdr[2]; ! 73: symbas=txtsiz+datsiz; ! 74: txtmap.f1=txtmap.f2=TXTHDRSIZ; ! 75: switch (magic) { ! 76: ! 77: case 0412: ! 78: txtmap.f1=txtmap.f2=(CLSIZE*NBPG); ! 79: case 0407: ! 80: txtmap.b1=0; ! 81: txtmap.e1=symbas; ! 82: txtmap.b2=datbas=0; ! 83: txtmap.e2=symbas; ! 84: break; ! 85: ! 86: case 0413: ! 87: txtmap.f1=txtmap.f2=(CLSIZE*NBPG); ! 88: case 0410: ! 89: txtmap.b1=0; ! 90: txtmap.e1=txtsiz; ! 91: txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ); ! 92: txtmap.e2=datbas+datsiz; ! 93: txtmap.f2+=txtmap.e1; ! 94: } ! 95: entrypt=txthdr[5]; ! 96: symbas += txthdr[6]+txthdr[7]; ! 97: symbas += magic==0412||magic==0413 ? (CLSIZE*NBPG) : TXTHDRSIZ; ! 98: ! 99: /* set up symvec */ ! 100: symvec=sbrk(shorten((1+symnum))*sizeof (SYMSLAVE)); ! 101: IF (symptr=symvec)==-1 ! 102: THEN printf("%s\n",BADNAM); ! 103: symptr=symvec=sbrk(sizeof (SYMSLAVE)); ! 104: ELSE symset(); ! 105: WHILE (symp=symget()) ANDF errflg==0 ! 106: DO symflg=symp->symf; ! 107: symptr->valslave=symp->symv; ! 108: symptr->typslave=SYMTYPE(symflg); ! 109: #define STABTYPES 0340 /* from <a.out.h> */ ! 110: IF (symflg & STABTYPES) != 0 ! 111: THEN ! 112: symptr->typslave = XSYM; ! 113: FI ! 114: symptr++; ! 115: OD ! 116: FI ! 117: symptr->typslave=ESYM; ! 118: FI ! 119: FI ! 120: IF magic==0 THEN txtmap.e1=maxfile; FI ! 121: #endif ! 122: } ! 123: ! 124: setcor() ! 125: { ! 126: #ifndef EDDT ! 127: fcor=getfile(corfil,2); ! 128: datmap.ufd=fcor; ! 129: IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES) ! 130: ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L ! 131: ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L ! 132: THEN signo = u.u_arg[0]&017; ! 133: txtsiz = ctob(u.u_tsize); ! 134: datsiz = ctob(u.u_dsize); ! 135: stksiz = ctob(u.u_ssize); ! 136: datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0); ! 137: if (magic==0413) ! 138: datmap.b1 = datbas = txtsiz; ! 139: datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz; ! 140: datmap.f1 = ctob(UPAGES); ! 141: datmap.b2 = maxstor-stksiz; ! 142: datmap.e2 = maxstor; ! 143: datmap.f2 = ctob(UPAGES)+((magic==0410 || magic == 0413) ! 144: ? datsiz : datmap.e1); ! 145: signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*sizeof(int)); ! 146: IF magic ANDF magic!=u.u_exdata.ux_mag ! 147: THEN printf("%s , object = %o, core = %o\n" ! 148: ,BADMAG ! 149: ,magic ! 150: ,u.u_exdata.ux_mag); ! 151: FI ! 152: ELSE datmap.e1 = maxfile; ! 153: FI ! 154: #endif ! 155: } ! 156: ! 157: #ifndef EDDT ! 158: create(f) ! 159: STRING f; ! 160: { int fd; ! 161: IF (fd=creat(f,0644))>=0 ! 162: THEN close(fd); return(open(f,wtflag)); ! 163: ELSE return(-1); ! 164: FI ! 165: } ! 166: ! 167: getfile(filnam,cnt) ! 168: STRING filnam; ! 169: { ! 170: REG INT fsym; ! 171: ! 172: IF !eqstr("-",filnam) ! 173: THEN fsym=open(filnam,wtflag); ! 174: IF fsym<0 ANDF argcount>cnt ! 175: THEN IF wtflag ! 176: THEN fsym=create(filnam); ! 177: FI ! 178: IF fsym<0 ! 179: THEN printf("cannot open `%s'\n", filnam); ! 180: FI ! 181: FI ! 182: ELSE fsym = -1; ! 183: FI ! 184: return(fsym); ! 185: } ! 186: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.