|
|
1.1 root 1: /*
2: * A debugger.
3: * Header file.
4: */
5: #include <sys/types.h>
6: #include "mtrace.h"
7:
8: #if NOUT
9: typedef long tvaddr;
10: #else
11: typedef vaddr_t tvaddr;
12: #endif
13:
14: /*
15: * Adjustable constants.
16: */
17: #ifndef INPBASE
18: #define INPBASE 16
19: #endif
20:
21: #define NBPT 16 /* Number of breakpoints */
22: #define CCSSIZE 8 /* C compiler symbol size */
23: #define ARGSIZE 20 /* Max number of args for `:e' */
24: #define VALSIZE 10 /* Number of expressions allowed */
25: #define DISSIZE 64 /* Terminal display size */
26: #define FORSIZE 64 /* Size of format for segments */
27: #define COMSIZE 128 /* Size of command sequence */
28: #define MISSIZE 256 /* Size of miscellaneous buffer */
29:
30: /*
31: * Modes for single step.
32: */
33: #define SNULL 0 /* Do nothing */
34: #define SSTEP 1 /* Single step */
35: #define SCONT 2 /* Continuous step */
36: #define SCSET 3 /* Continuous step setup */
37: #define SWAIT 4 /* Wait for function return */
38:
39: /*
40: * Breakpoint flags.
41: */
42: #define BBPT 1 /* Breakpoint set */
43: #define BRET 2 /* Breakpoint return set */
44: #define BSIN 4 /* Breakpoint single continue set */
45:
46: /*
47: * Breakpoint table.
48: */
49: typedef struct {
50: int b_flag; /* Flag word */
51: vaddr_t b_badd; /* Breakpoint address */
52: vaddr_t b_rfpt; /* Return frame pointer */
53: vaddr_t b_sfpt; /* Single continue frame pointer */
54: char *b_bcom; /* Breakpoint command */
55: char *b_rcom; /* Return command */
56: BIN b_bins; /* Instruction we replaced */
57: } BPT;
58:
59: /*
60: * Segment definitions.
61: */
62: #define NSEGM 3 /* Number of segments */
63: #define DSPACE segmapl[0] /* Data space */
64: #define ISPACE segmapl[1] /* Instruction space */
65: #define USPACE segmapl[2] /* User area */
66:
67: /*
68: * Segmentation map table structure.
69: */
70: typedef struct map {
71: struct map *m_next; /* Pointer to next */
72: fsize_t m_base; /* Segmenation base */
73: fsize_t m_bend; /* End of base */
74: fsize_t m_offt; /* Offset */
75: int (*m_getf)(); /* Read function */
76: int (*m_putf)(); /* Write function */
77: int m_segi; /* Index for segment */
78: } MAP;
79:
80: /*
81: * Extension of symbols.
82: */
83: #define L_REG 11 /* Register symbol type */
84:
85: /*
86: * Symbol in memory.
87: */
88: typedef struct sym {
89: unsigned char s_hash; /* Hash value */
90: unsigned char s_type; /* Type */
91: tvaddr s_sval; /* Value of symbol */
92: } SYM;
93:
94: /*
95: * Flags in value.
96: */
97: #define VNULL 1 /* Value is null */
98: #define VLVAL 2 /* Value is a left value */
99:
100: /*
101: * Value descriptor.
102: */
103: typedef struct val {
104: unsigned char v_flag; /* Flag word */
105: unsigned char v_segn; /* Segment number */
106: long v_nval; /* Value */
107: } VAL;
108:
109: /*
110: * Types of input.
111: */
112: #define IFILE 1 /* File I/O */
113: #define ICORE 2 /* Core I/O */
114:
115: /*
116: * Next input stack.
117: */
118: typedef union inp {
119: struct {
120: struct inp *i_next; /* Pointer to next */
121: int i_type; /* Type of input */
122: FILE *i_filp; /* File pointer */
123: } inp1;
124: struct {
125: struct inp *i_next; /* Pointer to next */
126: int i_type; /* Type of input */
127: char *i_strp; /* String pointer */
128: } inp2;
129: } INP;
130:
131: /*
132: * To find a structure offset.
133: */
134: #define offset(s, m) ((int) &(((struct s *) 0)->m))
135:
136: /*
137: * Functions defined by the machine dependent routines.
138: */
139: vaddr_t getpc(), getfp(), getsp();
140:
141: /*
142: * Function for the C compiler.
143: */
144: int armsint(); /* trace1.c */
145: MAP *setsmap(); /* trace1.c */
146: MAP *clrsmap(); /* trace1.c */
147: FILE *openfil(); /* trace1.c */
148: int getp(); /* trace2.c */
149: int putp(); /* trace2.c */
150: char *conescs(); /* trace3.c */
151: char *conform(); /* trace3.c */
152: char *getform(); /* trace3.c */
153: char *ctime(); /* trace3.c */
154: char *gettime(); /* trace3.c */
155: char *coninst(); /* trace3.c */
156: char *savecom(); /* trace4.c */
157: long lvalue(); /* trace5.c */
158: long rvalue(); /* trace5.c */
159: int getb(); /* trace6.c */
160: int putb(); /* trace6.c */
161: int getf(); /* trace6.c */
162: int putf(); /* trace6.c */
163: MAP *mapaddr(); /* trace6.c */
164: char *conaddr(); /* trace6.c */
165: char *nalloc(); /* trace6.c */
166: char *concons(); /* trace6.c */
167: #if FORZ8001
168: extern long size();
169: extern long addr();
170: extern char *conaddnum(); /* z8001b.c */
171: #else
172: #define size( A) (A)
173: #define addr( A) (A)
174: #define conaddnum( A, B) concons( A, B)
175: #endif
176:
177: #define putx putchar
178: #define nfree free
179:
180: /*
181: * Variables defined by machine dependent routine.
182: */
183: extern char *signame[]; /* Names of signals */
184:
185: /*
186: * Global variables.
187: */
188: extern BIN bin; /* Breakpoint instruction */
189: extern BPT bpt[NBPT]; /* Breakpoint table */
190: extern FILE *cfp; /* Core file pointer */
191: extern FILE *lfp; /* l.out file pointer */
192: extern FILE *sfp; /* Symbol table file pointer */
193: extern INP *inpp; /* Input pointer */
194: extern MAP *endpure; /* End of pure area */
195: extern MAP *segmapl[NSEGM]; /* Segment descriptors */
196: extern SYM *ssymp; /* Pointer to core symbol table */
197: extern char *errrstr; /* Last error */
198: extern char *lfn; /* l.out file name */
199: extern char *segname[NSEGM]; /* Names of segments */
200: extern char *sinp; /* Command for single step */
201: extern char *trapstr; /* Fault type */
202: extern char miscbuf[MISSIZE]; /* Miscellaneous buffer */
203: extern char segform[NSEGM][FORSIZE];/* Formats for segments */
204: extern int bitflag; /* Single step next instruction */
205: extern int cantype; /* Canonization type */
206: extern int cseg; /* Current segment */
207: extern int excflag; /* Program is in execution */
208: extern int intflag; /* Interrupt count */
209: extern int lastc; /* Character for ungetn */
210: extern int modsize; /* Size of last display mode */
211: extern int objflag; /* Program can run */
212: extern int pid; /* Current process id */
213: extern int regflag; /* Registers exist */
214: extern int rflag; /* Read only flag */
215: extern int sflag; /* Don't read symbol table */
216: extern int hflag; /* debugging coherent */
217: extern int sincmod; /* Last mode ran (if single) */
218: extern int sindecr; /* Single step count */
219: extern int sinmode; /* Single step mode */
220: extern long add; /* Address used by getb */
221: extern long dot; /* Current address */
222: extern long lad; /* Last address of dot */
223: extern fsize_t sbase; /* Base of symbols */
224: extern fsize_t snsym; /* Number of symbols */
225: extern int dbase; /* input/reference addr base */
226: extern int fflag; /* map as file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.