1 static char sccsid[] = "@(#)setup.c 4.3 08/17/82";
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
readl(f,p,n)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
setsym()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 0407:
66 txtmap.b1=0;
67 txtmap.e1=0;
68 txtmap.b2=datbas=0;
69 txtmap.e2=symbas;
70 break;
71
72 case 0413:
73 txtmap.f1=txtmap.f2=(CLSIZE*NBPG);
74 case 0410:
75 txtmap.b1=0;
76 txtmap.e1=txtsiz;
77 txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ);
78 txtmap.e2=datbas+datsiz;
79 txtmap.f2+=txtmap.e1;
80 }
81 entrypt=txthdr[5];
82 symbas += txthdr[6]+txthdr[7];
83 symbas += magic==0412||magic==0413 ? (CLSIZE*NBPG) : TXTHDRSIZ;
84 ststart = symbas;
85 #ifdef FLEXNAMES
86 gstart = ststart+txthdr[4];
87 #endif
88 /* set up symvec */
89 FI
90 FI
91 IF magic==0 THEN txtmap.e1=maxfile; FI
92 #endif
93 }
94
setcor()95 setcor()
96 {
97 fcor=getfile(corfil,2);
98 datmap.ufd=fcor;
99 IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES)
100 #ifndef STD
101 ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x70000000L
102 #else
103 ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L
104 #endif
105 ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L
106 THEN
107 signo = u.u_arg[0]&017;
108 txtsiz = ctob(u.u_tsize);
109 datsiz = ctob(u.u_dsize);
110 stksiz = ctob(u.u_ssize);
111 datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
112 if (magic == 0413)
113 datmap.b1 = datbas = txtsiz;
114 datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
115 #ifdef STD
116 datmap.f1 = ctob(USIZE);
117 #else
118 datmap.f1 = ctob(UPAGES);
119 #endif
120 datmap.b2 = maxstor-stksiz;
121 datmap.e2 = maxstor;
122 #ifdef STD
123 datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
124 #else
125 datmap.f2 = ctob(UPAGES)+((magic==0410 || magic == 0413)
126 ? datsiz : datmap.e1);
127 #endif
128 signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*sizeof(int));
129 IF magic ANDF magic!=u.u_exdata.ux_mag
130 THEN printf("%s\n",BADMAG);
131 FI
132 ELSE datmap.e1 = maxfile;
133 FI
134 }
135
create(f)136 create(f)
137 STRING f;
138 { int fd;
139 IF (fd=creat(f,0644))>=0
140 THEN close(fd); return(open(f,wtflag));
141 ELSE return(-1);
142 FI
143 }
144
getfile(filnam,cnt)145 getfile(filnam,cnt)
146 STRING filnam;
147 {
148 REG INT fsym;
149
150 IF !eqstr("-",filnam)
151 THEN fsym=open(filnam,wtflag);
152 IF fsym<0 ANDF argcount>cnt
153 THEN IF wtflag
154 THEN fsym=create(filnam);
155 FI
156 IF fsym<0
157 THEN printf("cannot open `%s'\n", filnam);
158 FI
159 FI
160 ELSE fsym = -1;
161 FI
162 return(fsym);
163 }
164