1 static char sccsid[] = "@(#)setup.c 4.1 10/09/80"; 2 # 3 /* 4 * 5 * UNIX debugger 6 * 7 */ 8 9 #include "head.h" 10 11 MSG BADMAG; 12 13 INT wtflag; 14 INT fcor; 15 INT fsym; 16 L_INT maxfile; 17 L_INT maxstor; 18 L_INT txtsiz; 19 L_INT datsiz; 20 L_INT datbas; 21 L_INT stksiz; 22 STRING errflg; 23 INT magic; 24 L_INT symbas; 25 L_INT symnum; 26 L_INT entrypt; 27 28 INT argcount; 29 INT signo; 30 struct user u; 31 32 #define TXTHDRSIZ (sizeof(txthdr)) 33 34 #ifndef EDDT 35 readl(f,p,n) int f,n; long * p;{ 36 #ifndef vax 37 int t=0; 38 do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n); 39 return(t); 40 #else 41 return(read(f,p,n*sizeof(long))); 42 #endif 43 } 44 #endif 45 46 setsym() 47 { 48 #ifndef EDDT 49 TXTHDR txthdr; 50 51 fsym=getfile(symfil,1); 52 txtmap.ufd=fsym; 53 IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ 54 THEN magic=txthdr[0]; 55 IF magic!=0410 ANDF magic!=0407 ANDF magic!=0412 ANDF magic!=0413 56 THEN magic=0; 57 ELSE 58 symnum=txthdr[4]/SYMTABSIZ; 59 txtsiz=txthdr[1]; 60 datsiz=txthdr[2]; 61 symbas=txtsiz+datsiz; 62 txtmap.f1=txtmap.f2=TXTHDRSIZ; 63 switch (magic) { 64 65 case 0412: 66 txtmap.f1=txtmap.f2=(CLSIZE*NBPG); 67 case 0407: 68 txtmap.b1=0; 69 txtmap.e1=symbas; 70 txtmap.b2=datbas=0; 71 txtmap.e2=symbas; 72 break; 73 74 case 0413: 75 txtmap.f1=txtmap.f2=(CLSIZE*NBPG); 76 case 0410: 77 txtmap.b1=0; 78 txtmap.e1=txtsiz; 79 txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ); 80 txtmap.e2=datbas+datsiz; 81 txtmap.f2+=txtmap.e1; 82 } 83 entrypt=txthdr[5]; 84 symbas += txthdr[6]+txthdr[7]; 85 symbas += magic==0412||magic==0413 ? (CLSIZE*NBPG) : TXTHDRSIZ; 86 ststart = symbas; 87 #ifdef FLEXNAMES 88 gstart = ststart+txthdr[4]; 89 #endif 90 /* set up symvec */ 91 FI 92 FI 93 IF magic==0 THEN txtmap.e1=maxfile; FI 94 #endif 95 } 96 97 setcor() 98 { 99 fcor=getfile(corfil,2); 100 datmap.ufd=fcor; 101 IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES) 102 #ifndef STD 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 } 137 138 create(f) 139 STRING f; 140 { int fd; 141 IF (fd=creat(f,0644))>=0 142 THEN close(fd); return(open(f,wtflag)); 143 ELSE return(-1); 144 FI 145 } 146 147 getfile(filnam,cnt) 148 STRING filnam; 149 { 150 REG INT fsym; 151 152 IF !eqstr("-",filnam) 153 THEN fsym=open(filnam,wtflag); 154 IF fsym<0 ANDF argcount>cnt 155 THEN IF wtflag 156 THEN fsym=create(filnam); 157 FI 158 IF fsym<0 159 THEN printf("cannot open `%s'\n", filnam); 160 FI 161 FI 162 ELSE fsym = -1; 163 FI 164 return(fsym); 165 } 166