1: #
2: /*
3: *
4: * UNIX debugger
5: *
6: */
7:
8: #include "defs.h"
9:
10:
11: MSG BADFIL;
12:
13: SYMTAB symbol;
14: BOOL localok;
15: INT lastframe;
16: SYMSLAVE *symvec;
17: POS maxoff;
18: L_INT maxstor;
19:
20: /* symbol management */
21: L_INT symbas;
22: L_INT symcnt;
23: L_INT symnum;
24: L_INT localval;
25: char symrqd -1;
26: SYMTAB symbuf[SYMSIZ];
27: SYMPTR symnxt;
28: SYMPTR symend;
29:
30:
31: INT fsym;
32: STRING errflg;
33: POS findsym();
34:
35:
36: /* symbol table and file handling service routines */
37:
38: longseek(f, a)
39: L_INT a;
40: {
41: return(lseek(f,a,0) != -1);
42: }
43:
44: valpr(v,idsp)
45: {
46: POS d;
47: d = findsym(v,idsp);
48: IF d < maxoff
49: THEN printf("%.8s", symbol.symc);
50: IF d
51: THEN printf(OFFMODE, d);
52: FI
53: FI
54: }
55:
56: localsym(cframe)
57: L_INT cframe;
58: {
59: INT symflg;
60: WHILE nextsym() ANDF localok
61: ANDF symbol.symc[0]!='~'
62: ANDF (symflg=symbol.symf)!=037
63: DO IF symflg>=2 ANDF symflg<=4
64: THEN localval=symbol.symv;
65: return(TRUE);
66: ELIF symflg==1
67: THEN localval=leng(shorten(cframe)+symbol.symv);
68: return(TRUE);
69: ELIF symflg==20 ANDF lastframe
70: THEN localval=leng(lastframe+2*symbol.symv-10);
71: return(TRUE);
72: FI
73: OD
74: return(FALSE);
75: }
76: psymoff(v,type,s)
77: L_INT v; int type; char *s;
78: {
79: POS w;
80: w = findsym(shorten(v),type);
81: IF w >= maxoff
82: THEN printf(LPRMODE,v);
83: ELSE printf("%.8s", symbol.symc);
84: IF w THEN printf(OFFMODE,w); FI
85: FI
86: printf(s);
87: }
88:
89: POS findsym(svalue,type)
90: POS svalue;
91: INT type;
92: {
93: L_INT diff, value, symval, offset;
94: INT symtyp;
95: REG SYMSLAVE *symptr;
96: SYMSLAVE *symsav;
97: value=svalue; diff = 0377777L; symsav=0;
98: IF type!=NSYM ANDF (symptr=symvec)
99: THEN WHILE diff ANDF (symtyp=symptr->typslave)!=ESYM
100: DO IF symtyp==type
101: THEN symval=leng(symptr->valslave);
102: IF value-symval<diff
103: ANDF value>=symval
104: THEN diff = value-symval;
105: symsav=symptr;
106: FI
107: FI
108: symptr++;
109: OD
110: IF symsav
111: THEN offset=leng(symsav-symvec);
112: symcnt=symnum-offset;
113: longseek(fsym, symbas+offset*SYMTABSIZ);
114: read(fsym,&symbol,SYMTABSIZ);
115: FI
116: FI
117: return(shorten(diff));
118: }
119:
120: nextsym()
121: {
122: IF (--symcnt)<0
123: THEN return(FALSE);
124: ELSE return(longseek(fsym, symbas+(symnum-symcnt)*SYMTABSIZ)!=0 ANDF
125: read(fsym,&symbol,SYMTABSIZ)==SYMTABSIZ);
126: FI
127: }
128:
129:
130:
131: /* sequential search through file */
132: symset()
133: {
134: symcnt = symnum;
135: symnxt = symbuf;
136: IF symrqd
137: THEN longseek(fsym, symbas);
138: symread(); symrqd=FALSE;
139: ELSE longseek(fsym, symbas+sizeof symbuf);
140: FI
141: }
142:
143: SYMPTR symget()
144: {
145: REG INT rc;
146: IF symnxt >= symend
147: THEN rc=symread(); symrqd=TRUE;
148: ELSE rc=TRUE;
149: FI
150: IF --symcnt>0 ANDF rc==0 THEN errflg=BADFIL; FI
151: return( (symcnt>=0 && rc) ? symnxt++ : 0);
152: }
153:
154: symread()
155: {
156: INT symlen;
157:
158: IF (symlen=read(fsym,symbuf,sizeof symbuf))>=SYMTABSIZ
159: THEN symnxt = symbuf;
160: symend = &symbuf[symlen/SYMTABSIZ];
161: return(TRUE);
162: ELSE return(FALSE);
163: FI
164: }
Defined functions
valpr
defined in line
44; used 2 times
Defined variables