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