Research V7 development
[unix-history] / usr / src / cmd / adb / setup.c
CommitLineData
d94e2462
M
1#
2/*
3 *
4 * UNIX debugger
5 *
6 */
7
8#include "defs.h"
9
10
11MSG BADNAM;
12MSG BADMAG;
13
14MAP txtmap;
15MAP datmap;
16SYMSLAVE *symvec;
17INT wtflag;
18INT fcor;
19INT fsym;
20L_INT maxfile;
21L_INT maxstor;
22L_INT txtsiz;
23L_INT datsiz;
24L_INT datbas;
25L_INT stksiz;
26STRING errflg;
27INT magic;
28L_INT symbas;
29L_INT symnum;
30L_INT entrypt;
31
32INT argcount;
33INT signo;
34POS corhdr[512];
35POS *endhdr &corhdr[512];
36
37STRING symfil "a.out";
38STRING corfil "core";
39
40#define TXTHDRSIZ (sizeof(txthdr))
41
42setsym()
43{
44 INT relflg;
45 INT symval, symflg;
46 SYMSLAVE *symptr;
47 SYMPTR symp;
48 TXTHDR txthdr;
49
50 fsym=getfile(symfil,1);
51 txtmap.ufd=fsym;
52 IF read(fsym, txthdr, TXTHDRSIZ)==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 txtmap.b1=0;
61 txtmap.e1=(magic==0407?symbas:txtsiz);
62 txtmap.f1 = TXTHDRSIZ;
63 txtmap.b2=datbas=(magic==0410?round(txtsiz,TXTRNDSIZ):0);
64 txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
65 txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
66 entrypt=txthdr[5];
67 relflg=txthdr[7];
68 IF relflg!=1 THEN symbas =<< 1; FI
69 symbas += TXTHDRSIZ;
70
71 /* set up symvec */
72 symvec=sbrk(shorten((1+symnum))*sizeof (SYMSLAVE));
73 IF (symptr=symvec)==-1
74 THEN printf("%s\n",BADNAM);
75 symptr=symvec=sbrk(sizeof (SYMSLAVE));
76 ELSE symset();
77 WHILE (symp=symget()) ANDF errflg==0
78 DO symval=symp->symv; symflg=symp->symf;
79 symptr->valslave=symval;
80 symptr->typslave=SYMTYPE(symflg);
81 symptr++;
82 OD
83 FI
84 symptr->typslave=ESYM;
85 FI
86 FI
87 IF magic==0 THEN txtmap.e1=maxfile; FI
88}
89
90setcor()
91{
92 fcor=getfile(corfil,2);
93 datmap.ufd=fcor;
94 IF read(fcor, corhdr, ctob(USIZE))==ctob(USIZE)
95 THEN txtsiz = corhdr->u_tsize << 6;
96 datsiz = corhdr->u_dsize << 6;
97 stksiz = corhdr->u_ssize << 6;
98 datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
99 datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
100 datmap.f1 = ctob(USIZE);
101 datmap.b2 = maxstor-stksiz;
102 datmap.e2 = maxstor;
103 datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
104 IF magic ANDF magic!=corhdr[0].u_exdata.ux_mag
105 THEN printf("%s\n",BADMAG);
106 FI
107 ELSE datmap.e1 = maxfile;
108 FI
109}
110
111create(f)
112STRING f;
113{ int fd;
114 IF (fd=creat(f,0644))>=0
115 THEN close(fd); return(open(f,wtflag));
116 ELSE return(-1);
117 FI
118}
119
120getfile(filnam,cnt)
121STRING filnam;
122{
123 REG INT fsym;
124
125 IF !eqstr("-",filnam)
126 THEN fsym=open(filnam,wtflag);
127 IF fsym<0 ANDF argcount>cnt
128 THEN IF wtflag
129 THEN fsym=create(filnam);
130 FI
131 IF fsym<0
132 THEN printf("cannot open `%s'\n", filnam);
133 FI
134 FI
135 ELSE fsym = -1;
136 FI
137 return(fsym);
138}