BSD 3 development
[unix-history] / usr / src / cmd / sdb / setup.c.orig
CommitLineData
8ac44b2f
HK
1#
2/*
3 *
4 * UNIX debugger
5 *
6 */
7
8#include "head.h"
9
10MSG BADMAG;
11
12INT wtflag;
13INT fcor;
14INT fsym;
15L_INT maxfile;
16L_INT maxstor;
17L_INT txtsiz;
18L_INT datsiz;
19L_INT datbas;
20L_INT stksiz;
21STRING errflg;
22INT magic;
23L_INT symbas;
24L_INT symnum;
25L_INT entrypt;
26
27INT argcount;
28INT signo;
29struct user u;
30
31STRING symfil = "a.out";
32STRING corfil = "core";
33
34#define TXTHDRSIZ (sizeof(txthdr))
35
36readl(f,p,n) int f,n; long * p;{
37#ifndef vax
38 int t=0;
39 do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n);
40 return(t);
41#else
42 return(read(f,p,n*sizeof(long)));
43#endif
44}
45
46setsym()
47{
48 TXTHDR txthdr;
49
50 fsym=getfile(symfil,1);
51 txtmap.ufd=fsym;
52 IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ
53 THEN magic=txthdr[0];
54 IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405
55 THEN magic=0;
56 ELSE symnum=txthdr[4]/SYMTABSIZ;
57 txtsiz=txthdr[1];
58 datsiz=txthdr[2];
59 symbas=txtsiz+datsiz;
60#ifndef VAX135
61 txtmap.b1=0;
62 txtmap.e1=(magic==0407?symbas:txtsiz);
63 txtmap.f1 = TXTHDRSIZ;
64 txtmap.b2=datbas=(magic==0410?round(txtsiz,TXTRNDSIZ):0);
65#else
66 txtmap.b1=(magic==0411? 0x200:0);
67 txtmap.e1=(magic==0407? symbas:
68 magic==0411? txtsiz+TXTHDRSIZ:
69 txtsiz);
70 txtmap.f1=(magic==0411? 0x200:TXTHDRSIZ);
71 txtmap.b2=datbas=(magic==0410? round(txtsiz,TXTRNDSIZ):
72 magic==0411? txtmap.e1:
73 0);
74#endif
75 txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
76#ifndef VAX135
77 txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
78#else
79 txtmap.f2=(magic==0407? TXTHDRSIZ:
80 magic==0411? txtmap.e1:
81 TXTHDRSIZ+txtmap.e1);
82#endif
83
84 entrypt=txthdr[5];
85 symbas += txthdr[6]+txthdr[7];
86 symbas += TXTHDRSIZ;
87 ststart = symbas;
88
89 /* set up symvec */
90 FI
91 FI
92 IF magic==0 THEN txtmap.e1=maxfile; FI
93}
94
95setcor()
96{
97 fcor=getfile(corfil,2);
98 datmap.ufd=fcor;
99 IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES)
100#ifdef VAX135
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#ifndef VAX135
112 datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
113#else
114 datmap.b1=datbas=
115 ((magic==0410 || magic==0411)? round(txtsiz,TXTRNDSIZ):0);
116#endif
117 datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
118#ifdef STD
119 datmap.f1 = ctob(USIZE);
120#else
121 datmap.f1 = ctob(UPAGES);
122#endif
123 datmap.b2 = maxstor-stksiz;
124 datmap.e2 = maxstor;
125#ifdef STD
126 datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
127#else
128#ifndef VAX135
129 datmap.f2 = ctob(UPAGES)+(magic==0410?datsiz:datmap.e1);
130#else
131 datmap.f2 = ctob(UPAGES)+
132 ((magic==0410 || magic==0411)?datsiz:datmap.e1);
133#endif
134#endif
135 signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*4);
136 IF magic ANDF magic!=u.u_exdata.ux_mag
137 THEN printf("%s\n",BADMAG);
138 FI
139 ELSE datmap.e1 = maxfile;
140 FI
141}
142
143create(f)
144STRING f;
145{ int fd;
146 IF (fd=creat(f,0644))>=0
147 THEN close(fd); return(open(f,wtflag));
148 ELSE return(-1);
149 FI
150}
151
152getfile(filnam,cnt)
153STRING filnam;
154{
155 REG INT fsym;
156
157 IF !eqstr("-",filnam)
158 THEN fsym=open(filnam,wtflag);
159 IF fsym<0 ANDF argcount>cnt
160 THEN IF wtflag
161 THEN fsym=create(filnam);
162 FI
163 IF fsym<0
164 THEN printf("cannot open `%s'\n", filnam);
165 FI
166 FI
167 ELSE fsym = -1;
168 FI
169 return(fsym);
170}