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