|
|
1.1 root 1: static char sccsid[] = "@(#)setup.c 4.1 10/9/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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.