1: #
2: /*
3: *
4: * UNIX debugger
5: *
6: */
7:
8: #include "defs.h"
9:
10:
11: MSG BADNAM;
12: MSG BADMAG;
13:
14: MAP txtmap;
15: MAP datmap;
16: SYMSLAVE *symvec;
17: INT wtflag;
18: INT fcor;
19: INT fsym;
20: L_INT maxfile;
21: L_INT maxstor;
22: L_INT txtsiz;
23: L_INT datsiz;
24: L_INT datbas;
25: L_INT stksiz;
26: STRING errflg;
27: INT magic;
28: L_INT symbas;
29: L_INT symnum;
30: L_INT entrypt;
31:
32: INT argcount;
33: INT signo;
34: POS corhdr[512];
35: POS *endhdr &corhdr[512];
36:
37: STRING symfil "a.out";
38: STRING corfil "core";
39:
40: #define TXTHDRSIZ (sizeof(txthdr))
41:
42: setsym()
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:
90: setcor()
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:
111: create(f)
112: STRING 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:
120: getfile(filnam,cnt)
121: STRING 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: }
Defined functions
Defined macros