Commit | Line | Data |
---|---|---|
99803149 TL |
1 | # |
2 | /* %Z%%M% %R%.%L% %D% %T% */ | |
3 | #define readonly | |
4 | #define NINST 300 | |
5 | #define NSYM 3000 | |
6 | #define NHASH (NSYM+1) | |
7 | #define NLOC 4 /* number of location ctrs */ | |
8 | #define NCPS 8 | |
9 | ||
10 | /* | |
11 | * Symbol types | |
12 | */ | |
13 | #define XUNDEF 0x0 | |
14 | #define XABS 0x2 | |
15 | #define XTEXT 0x4 | |
16 | #define XDATA 0x6 | |
17 | #define XBSS 0x8 | |
18 | #define XDATAO 0xA | |
19 | #define XBSSO 0xC | |
20 | #define XTEXTO 0xE | |
21 | #define XABSO 0x10 | |
22 | #define XUNDEFO 0x12 | |
23 | ||
24 | #define XTXRN 0xA | |
25 | #define XXTRN 0x1 | |
26 | #define XTYPE 0x1E | |
27 | ||
28 | #define XFORW 0x20 /* Was forward-referenced when undefined */ | |
29 | ||
30 | #define ERR (-1) | |
31 | #define NBPW 32 | |
32 | ||
33 | #define AMASK 017 | |
34 | ||
35 | /* | |
36 | * Actual argument syntax types | |
37 | */ | |
38 | #define AREG 1 /* %r */ | |
39 | #define ABASE 2 /* (%r) */ | |
40 | #define ADECR 3 /* -(%r) */ | |
41 | #define AINCR 4 /* (%r)+ */ | |
42 | #define ADISP 5 /* expr(%r) */ | |
43 | #define AEXP 6 /* expr */ | |
44 | #define AIMM 7 /* $ expr */ | |
45 | #define ASTAR 8 /* * */ | |
46 | #define AINDX 16 /* [%r] */ | |
47 | ||
48 | /* | |
49 | * Argument access types | |
50 | */ | |
51 | #define ACCA (8<<3) /* address only */ | |
52 | #define ACCR (1<<3) /* read */ | |
53 | #define ACCW (2<<3) /* write */ | |
54 | #define ACCM (3<<3) /* modify */ | |
55 | #define ACCB (4<<3) /* branch displacement */ | |
56 | #define ACCI (5<<3) /* XFC code */ | |
57 | ||
58 | /* | |
59 | * Argument data types | |
60 | */ | |
61 | #define TYPB 0 /* byte */ | |
62 | #define TYPW 1 /* word */ | |
63 | #define TYPL 2 /* long */ | |
64 | #define TYPQ 3 /* quad */ | |
65 | #define TYPF 4 /* floating */ | |
66 | #define TYPD 5 /* double floating */ | |
67 | ||
68 | #define TYPMASK 7 | |
69 | ||
70 | /* reference types for loader */ | |
71 | #define PCREL 1 | |
72 | #define LEN1 2 | |
73 | #define LEN2 4 | |
74 | #define LEN4 6 | |
75 | #define LEN8 8 | |
76 | ||
77 | #define TMPC 7 | |
78 | #define HW 01 | |
79 | #define FW 03 | |
80 | #define DW 07 | |
81 | ||
82 | #define PAGRND 0x1FFL | |
83 | ||
84 | #define round(x,y) (((x)+(y)) & ~(y)) | |
85 | ||
86 | #define STABTYPS 0340 | |
87 | ||
88 | struct symtab { | |
89 | char name[NCPS]; | |
90 | char type; | |
91 | char tag; | |
92 | short index; | |
93 | long value; | |
94 | char ptype; | |
95 | char other; | |
96 | short desc; | |
97 | }; | |
98 | ||
99 | struct instab { | |
100 | char name[NCPS]; | |
101 | char opcode; /* must have same offset as symtab.type */ | |
102 | char tag; /* yacc-coded nargs (INST0, ...) or token # (IALIGN, ...) */ | |
103 | char nargs; | |
104 | char argtyp[6]; | |
105 | }; | |
106 | ||
107 | struct arg { | |
108 | char atype; | |
109 | char areg1; | |
110 | char areg2; | |
111 | struct exp *xp; | |
112 | }; | |
113 | ||
114 | struct exp { | |
115 | char xtype; | |
116 | char xloc; | |
117 | long xvalue; | |
118 | long yvalue; /* 2nd half of double floating */ | |
119 | struct symtab *xname; | |
120 | }; | |
121 | ||
122 | struct hdr { | |
123 | long magic; | |
124 | long tsize; | |
125 | long dsize; | |
126 | long bsize; | |
127 | long ssize; | |
128 | long entry; | |
129 | long trsize; | |
130 | long drsize; | |
131 | }; | |
132 | ||
133 | struct symtab *symtab; | |
134 | struct symtab *hshtab[NHASH]; | |
135 | struct arg arglist[6]; | |
136 | struct exp explist[20]; | |
137 | extern int lineno; | |
138 | extern int hshused; | |
139 | extern int usrname; | |
140 | extern int lclname; | |
141 | extern struct symtab *nextsym; | |
142 | extern struct exp usedot[NLOC+NLOC]; | |
143 | extern FILE *usefile[NLOC+NLOC]; | |
144 | extern FILE *rusefile[NLOC+NLOC]; | |
145 | extern char *tmpn2; | |
146 | extern char *tmpn3; | |
147 | extern struct exp *dotp; | |
148 | extern int loctr; | |
149 | extern long tsize; | |
150 | extern long dsize; | |
151 | extern long datbase; | |
152 | extern int bitoff; | |
153 | extern long bitfield; | |
154 | extern char yytext[NCPS+2]; | |
155 | extern FILE *txtfil; | |
156 | extern FILE *tmpfil; | |
157 | extern FILE *relfil; | |
158 | extern int passno; | |
159 | extern int argcnt; | |
160 | extern int anyerrs; | |
161 | extern int *brptr; | |
162 | struct instab *itab[NINST]; | |
163 | struct instab instab[]; | |
164 | int curlen; | |
165 | int gindex; | |
166 | int orgwarn; | |
167 | struct symtab **lookup(); | |
168 | struct exp *combine(); |