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