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