1: #include "defs.h"
2: #include <sys/file.h>
3:
4: MAP txtmap;
5: MAP datmap;
6: int wtflag;
7: int kernel;
8: int fcor;
9: int fsym;
10: long maxfile;
11: long maxstor;
12: long txtsiz;
13: long datsiz;
14: long bss;
15: long datbas;
16: long stksiz;
17: char *errflg;
18: int magic;
19: long entrypt;
20: long var[];
21: int argcount;
22: int signo;
23: u_int corhdr[ctob(USIZE)/sizeof(u_int)];
24: u_int *uar0 = UAR0;
25: char *symfil = "a.out";
26: char *corfil = "core";
27: struct ovlhdr ovlseg;
28: long ovlsiz;
29: long ovloff[NOVL+1];
30: char startov;
31: int overlay;
32: off_t symoff, stroff;
33:
34: setsym()
35: {
36: struct xexec hdr;
37: int ovly;
38:
39: bzero(&txtmap, sizeof (txtmap));
40: fsym=getfile(symfil,1);
41: txtmap.ufd=fsym;
42:
43: if (read(fsym, &hdr, sizeof (hdr)) >= (int)sizeof (hdr.e))
44: {
45: magic= hdr.e.a_magic;
46: txtsiz = hdr.e.a_text;
47: datsiz = hdr.e.a_data;
48: bss = hdr.e.a_bss;
49: entrypt = hdr.e.a_entry;
50:
51: txtmap.f1 = N_TXTOFF(hdr.e);
52: symoff = N_SYMOFF(hdr);
53: stroff = N_STROFF(hdr);
54:
55: switch (magic)
56: {
57: case 0407:
58: txtmap.e1 = txtmap.e2 = txtsiz+datsiz;
59: txtmap.f2 = txtmap.f1;
60: break;
61: case 0410:
62: txtmap.e1 = txtsiz;
63: txtmap.b2 = round(txtsiz, TXTRNDSIZ);
64: txtmap.e2 = txtmap.b2+datsiz;
65: txtmap.f2 = txtsiz + txtmap.f1;
66: break;
67: case 0405:
68: case 0411:
69: txtmap.e1 = txtsiz;
70: txtmap.e2 = datsiz;
71: txtmap.f2 = txtsiz + txtmap.f1;
72: break;
73: case 0430:
74: case 0431:
75: ovlseg = hdr.o;
76: txtmap.e1 = txtsiz;
77: txtmap.bo = round(txtsiz, TXTRNDSIZ);
78: FOR ovly = 0; ovly < NOVL; ovly++
79: DO ovloff[ovly] = ovlsiz + txtsiz
80: + txtmap.f1;
81: ovlsiz += ovlseg.ov_siz[ovly];
82: OD
83: IF magic == 0430
84: THEN txtmap.b2 =
85: round(txtmap.bo+(long)ovlseg.max_ovl, TXTRNDSIZ);
86: FI
87: txtmap.f2 = txtmap.f1 + txtsiz+ovlsiz;
88: txtmap.e2 = txtmap.b2 + datsiz;
89: overlay = 1;
90: break;
91: default:
92: magic = 0;
93: txtsiz = 0;
94: datsiz = 0;
95: bss = 0;
96: entrypt = 0;
97: }
98: datbas = txtmap.b2;
99: symINI(&hdr);
100: }
101: IF magic==0 THEN txtmap.e1=maxfile; FI
102: }
103:
104: setcor()
105: {
106: fcor=getfile(corfil,2);
107: datmap.ufd=fcor;
108: IF read(fcor, corhdr, sizeof corhdr)==sizeof corhdr
109: THEN IF !kernel
110: THEN txtsiz = ((U*)corhdr)->u_tsize << 6;
111: datsiz = ((U*)corhdr)->u_dsize << 6;
112: stksiz = ((U*)corhdr)->u_ssize << 6;
113: datmap.f1 = ctob(USIZE);
114: datmap.b2 = maxstor-stksiz;
115: datmap.e2 = maxstor;
116: ELSE datsiz = round(datsiz+bss,64L);
117: stksiz = (long) ctob(USIZE);
118: datmap.f1 = 0;
119: datmap.b2 = 0140000L;
120: datmap.e2 = 0140000L + ctob(USIZE);
121: FI
122: switch (magic)
123: {
124: case 0407:
125: datmap.b1 = 0;
126: datmap.e1 = txtsiz+datsiz;
127: IF kernel
128: THEN datmap.f2 = (long)corhdr[KA6] *
129: 0100L;
130: ELSE datmap.f2 = ctob(USIZE)+txtsiz+datsiz;
131: FI
132: break;
133:
134: case 0410:
135: datmap.b1 = round(txtsiz, TXTRNDSIZ);
136: datmap.e1 = datmap.b1+datsiz;
137: datmap.f2 = datsiz+ctob(USIZE);
138: break;
139:
140: case 0405:
141: case 0411:
142: case 0431:
143: datmap.b1 = 0;
144: datmap.e1 = datsiz;
145: IF kernel
146: THEN datmap.f2 = (long)corhdr[KA6] *
147: 0100L;
148: ELSE datmap.f2 = datsiz+ctob(USIZE);
149: FI
150: break;
151:
152: case 0430:
153: datmap.b1 = round(round(txtsiz,
154: TXTRNDSIZ)+ovlseg.max_ovl,
155: TXTRNDSIZ);
156: datmap.e1 = datmap.b1+datsiz;
157: IF kernel
158: THEN datmap.b1 = 0;
159: datmap.f2 = (long)corhdr[KA6] *
160: 0100L;
161: ELSE datmap.f2 = datsiz+ctob(USIZE);
162: FI
163: break;
164:
165: default:
166: magic = 0;
167: datmap.b1 = 0;
168: datmap.e1 = maxfile;
169: datmap.f1 = 0;
170: datmap.b2 = 0;
171: datmap.e2 = 0;
172: datmap.f2 = 0;
173: }
174: datbas = datmap.b1;
175: if (!kernel && magic) {
176: /*
177: * Note that we can no longer compare the magic
178: * number of the core against that of the object
179: * since the user structure no longer contains
180: * the exec header ...
181: */
182: register u_int *ar0;
183: ar0 = (u_int *)(((U *)corhdr)->u_ar0);
184: if (ar0 > (u_int *)0140000
185: && ar0 < (u_int *)(0140000 + ctob(USIZE))
186: && !((unsigned)ar0&01))
187: uar0 = (u_int *)&corhdr[ar0-(u_int *)0140000];
188: if (overlay) {
189: startov = ((U *)corhdr)->u_ovdata.uo_curov;
190: var[VARC] = (long)startov;
191: setovmap(startov);
192: }
193: /* else dig out __ovno if overlaid? */
194: }
195: ELSE datmap.e1 = maxfile;
196: FI
197: }
198:
199: getfile(filnam,cnt)
200: char *filnam;
201: int cnt;
202: {
203: register int f;
204:
205: IF strcmp("-",filnam)
206: THEN f = open(filnam,wtflag);
207: IF f < 0 ANDF argcount>cnt
208: THEN IF wtflag
209: THEN f = open(filnam, O_CREAT|O_TRUNC|wtflag,644);
210: FI
211: IF f < 0
212: THEN printf("cannot open `%s'\n", filnam);
213: FI
214: FI
215: ELSE f = -1;
216: FI
217: return(f);
218: }
Defined functions
Defined variables
bss
defined in line
14; used 3 times
corhdr
defined in line
23; used 12 times
datmap
defined in line
5; used 33 times
datsiz
defined in line
13; used 17 times
- in line 47,
58,
64,
70,
88,
94,
111-116(3),
126-130(2),
136-137(2),
144-148(2),
156-161(2)
fcor
defined in line
8; used 3 times
fsym
defined in line
9; used 3 times
kernel
defined in line
7; used 5 times
magic
defined in line
18; used 8 times
signo
defined in line
22;
never used
txtmap
defined in line
4; used 29 times
txtsiz
defined in line
12; used 17 times
uar0
defined in line
24; used 1 times
var
defined in line
20; used 1 times
wtflag
defined in line
6; used 3 times