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