Pick up SGI defines for langCplusplus, langCplusplusV2, stStruct, stUnion,
[deliverable/binutils-gdb.git] / include / coff / ecoff-ext.h
1 /* MIPS `ECOFF' symbol table external format.
2 Copyright 1992 Free Software Foundation.
3 Contributed by Cygnus Support. Written by John Gilmore.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21 /* ECOFF uses COFF-like section structures, but its own symbol format.
22 This file defines the symbol format in fields whose size and alignment
23 will not vary on different host systems. The bfd module coff-msym.c
24 converts between external and internal forms of this information,
25 deals with byte order issues, etc. */
26
27 /* File header as a set of bytes */
28
29 struct hdr_ext {
30 char h_magic[2];
31 char h_vstamp[2];
32 char h_ilineMax[4];
33 char h_cbLine[4];
34 char h_cbLineOffset[4];
35 char h_idnMax[4];
36 char h_cbDnOffset[4];
37 char h_ipdMax[4];
38 char h_cbPdOffset[4];
39 char h_isymMax[4];
40 char h_cbSymOffset[4];
41 char h_ioptMax[4];
42 char h_cbOptOffset[4];
43 char h_iauxMax[4];
44 char h_cbAuxOffset[4];
45 char h_issMax[4];
46 char h_cbSsOffset[4];
47 char h_issExtMax[4];
48 char h_cbSsExtOffset[4];
49 char h_ifdMax[4];
50 char h_cbFdOffset[4];
51 char h_crfd[4];
52 char h_cbRfdOffset[4];
53 char h_iextMax[4];
54 char h_cbExtOffset[4];
55 };
56
57 /* File descriptor external record */
58
59 struct fdr_ext {
60 char f_adr[4];
61 char f_rss[4];
62 char f_issBase[4];
63 char f_cbSs[4];
64 char f_isymBase[4];
65 char f_csym[4];
66 char f_ilineBase[4];
67 char f_cline[4];
68 char f_ioptBase[4];
69 char f_copt[4];
70 char f_ipdFirst[2];
71 char f_cpd[2];
72 char f_iauxBase[4];
73 char f_caux[4];
74 char f_rfdBase[4];
75 char f_crfd[4];
76 char f_bits1[1];
77 char f_bits2[3];
78 char f_cbLineOffset[4];
79 char f_cbLine[4];
80 };
81
82 #define FDR_BITS1_LANG_BIG 0xF8
83 #define FDR_BITS1_LANG_SH_BIG 3
84 #define FDR_BITS1_LANG_LITTLE 0x1F
85 #define FDR_BITS1_LANG_SH_LITTLE 0
86
87 #define FDR_BITS1_FMERGE_BIG 0x04
88 #define FDR_BITS1_FMERGE_LITTLE 0x20
89
90 #define FDR_BITS1_FREADIN_BIG 0x02
91 #define FDR_BITS1_FREADIN_LITTLE 0x40
92
93 #define FDR_BITS1_FBIGENDIAN_BIG 0x01
94 #define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
95
96 #define FDR_BITS2_GLEVEL_BIG 0xC0
97 #define FDR_BITS2_GLEVEL_SH_BIG 6
98 #define FDR_BITS2_GLEVEL_LITTLE 0x03
99 #define FDR_BITS2_GLEVEL_SH_LITTLE 0
100
101 /* We ignore the `reserved' field in bits2. */
102
103
104 /* Procedure descriptor external record */
105
106 struct pdr_ext {
107 char p_adr[4];
108 char p_isym[4];
109 char p_iline[4];
110 char p_regmask[4];
111 char p_regoffset[4];
112 char p_iopt[4];
113 char p_fregmask[4];
114 char p_fregoffset[4];
115 char p_frameoffset[4];
116 char p_framereg[2];
117 char p_pcreg[2];
118 char p_lnLow[4];
119 char p_lnHigh[4];
120 char p_cbLineOffset[4];
121 };
122
123 /* Line numbers */
124
125 struct line_ext {
126 char l_line[4];
127 };
128
129 /* Symbol external record */
130
131 struct sym_ext {
132 char s_iss[4];
133 char s_value[4];
134 char s_bits1[1];
135 char s_bits2[1];
136 char s_bits3[1];
137 char s_bits4[1];
138 };
139
140 #define SYM_BITS1_ST_BIG 0xFC
141 #define SYM_BITS1_ST_SH_BIG 2
142 #define SYM_BITS1_ST_LITTLE 0x3F
143 #define SYM_BITS1_ST_SH_LITTLE 0
144
145 #define SYM_BITS1_SC_BIG 0x03
146 #define SYM_BITS1_SC_SH_LEFT_BIG 3
147 #define SYM_BITS1_SC_LITTLE 0xC0
148 #define SYM_BITS1_SC_SH_LITTLE 6
149
150 #define SYM_BITS2_SC_BIG 0xE0
151 #define SYM_BITS2_SC_SH_BIG 5
152 #define SYM_BITS2_SC_LITTLE 0x07
153 #define SYM_BITS2_SC_SH_LEFT_LITTLE 2
154
155 #define SYM_BITS2_RESERVED_BIG 0x10
156 #define SYM_BITS2_RESERVED_LITTLE 0x08
157
158 #define SYM_BITS2_INDEX_BIG 0x0F
159 #define SYM_BITS2_INDEX_SH_LEFT_BIG 16
160 #define SYM_BITS2_INDEX_LITTLE 0xF0
161 #define SYM_BITS2_INDEX_SH_LITTLE 4
162
163 #define SYM_BITS3_INDEX_SH_LEFT_BIG 8
164 #define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
165
166 #define SYM_BITS4_INDEX_SH_LEFT_BIG 0
167 #define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
168
169 /* External symbol external record */
170
171 struct ext_ext {
172 char es_bits1[1];
173 char es_bits2[1];
174 char es_ifd[2];
175 struct sym_ext es_asym;
176 };
177
178 #define EXT_BITS1_JMPTBL_BIG 0x80
179 #define EXT_BITS1_JMPTBL_LITTLE 0x01
180
181 #define EXT_BITS1_COBOL_MAIN_BIG 0x40
182 #define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
183
184 #define EXT_BITS1_WEAKEXT_BIG 0x20
185 #define EXT_BITS1_WEAKEXT_LITTLE 0x04
186
187 /* Type information external record */
188
189 struct tir_ext {
190 char t_bits1[1];
191 char t_tq45[1];
192 char t_tq01[1];
193 char t_tq23[1];
194 };
195
196 #define TIR_BITS1_FBITFIELD_BIG 0x80
197 #define TIR_BITS1_FBITFIELD_LITTLE 0x01
198
199 #define TIR_BITS1_CONTINUED_BIG 0x40
200 #define TIR_BITS1_CONTINUED_LITTLE 0x02
201
202 #define TIR_BITS1_BT_BIG 0x3F
203 #define TIR_BITS1_BT_SH_BIG 0
204 #define TIR_BITS1_BT_LITTLE 0xFC
205 #define TIR_BITS1_BT_SH_LITTLE 2
206
207 #define TIR_BITS_TQ4_BIG 0xF0
208 #define TIR_BITS_TQ4_SH_BIG 4
209 #define TIR_BITS_TQ5_BIG 0x0F
210 #define TIR_BITS_TQ5_SH_BIG 0
211 #define TIR_BITS_TQ4_LITTLE 0x0F
212 #define TIR_BITS_TQ4_SH_LITTLE 0
213 #define TIR_BITS_TQ5_LITTLE 0xF0
214 #define TIR_BITS_TQ5_SH_LITTLE 4
215
216 #define TIR_BITS_TQ0_BIG 0xF0
217 #define TIR_BITS_TQ0_SH_BIG 4
218 #define TIR_BITS_TQ1_BIG 0x0F
219 #define TIR_BITS_TQ1_SH_BIG 0
220 #define TIR_BITS_TQ0_LITTLE 0x0F
221 #define TIR_BITS_TQ0_SH_LITTLE 0
222 #define TIR_BITS_TQ1_LITTLE 0xF0
223 #define TIR_BITS_TQ1_SH_LITTLE 4
224
225 #define TIR_BITS_TQ2_BIG 0xF0
226 #define TIR_BITS_TQ2_SH_BIG 4
227 #define TIR_BITS_TQ3_BIG 0x0F
228 #define TIR_BITS_TQ3_SH_BIG 0
229 #define TIR_BITS_TQ2_LITTLE 0x0F
230 #define TIR_BITS_TQ2_SH_LITTLE 0
231 #define TIR_BITS_TQ3_LITTLE 0xF0
232 #define TIR_BITS_TQ3_SH_LITTLE 4
233
234
235 /* Relative symbol external record */
236
237 struct rndx_ext {
238 char r_bits[4];
239 };
240
241 #define RNDX_BITS0_RFD_SH_LEFT_BIG 4
242 #define RNDX_BITS1_RFD_BIG 0xF0
243 #define RNDX_BITS1_RFD_SH_BIG 4
244
245 #define RNDX_BITS0_RFD_SH_LEFT_LITTLE 0
246 #define RNDX_BITS1_RFD_LITTLE 0x0F
247 #define RNDX_BITS1_RFD_SH_LEFT_LITTLE 8
248
249 #define RNDX_BITS1_INDEX_BIG 0x0F
250 #define RNDX_BITS1_INDEX_SH_LEFT_BIG 16
251 #define RNDX_BITS2_INDEX_SH_LEFT_BIG 8
252 #define RNDX_BITS3_INDEX_SH_LEFT_BIG 0
253
254 #define RNDX_BITS1_INDEX_LITTLE 0xF0
255 #define RNDX_BITS1_INDEX_SH_LITTLE 4
256 #define RNDX_BITS2_INDEX_SH_LEFT_LITTLE 4
257 #define RNDX_BITS3_INDEX_SH_LEFT_LITTLE 12
258
259
260 /* Dense numbers external record */
261
262 struct dnr_ext {
263 char d_rfd[4];
264 char d_index[4];
265 };
266
267 /* Auxliliary symbol information external record */
268
269 union aux_ext {
270 struct tir_ext a_ti;
271 struct rndx_ext a_rndx;
272 char a_dnLow[4];
273 char a_dnHigh[4];
274 char a_isym[4];
275 char a_iss[4];
276 char a_width[4];
277 char a_count[4];
278 };
279
280 /* FIXME! These are copied from ../bfd/libbfd.h */
281 PROTO (bfd_vma, _do_getb32, (unsigned char *addr));
282 PROTO (bfd_vma, _do_getl32, (unsigned char *addr));
283
284 #define AUX_GET_DNLOW(bigend, ax) (bigend? _do_getb32 ((ax)->a_dnLow): \
285 _do_getl32 ((ax)->a_dnLow))
286 #define AUX_GET_DNHIGH(bigend, ax) (bigend? _do_getb32 ((ax)->a_dnHigh): \
287 _do_getl32 ((ax)->a_dnHigh))
288 #define AUX_GET_ISYM(bigend, ax) (bigend? _do_getb32 ((ax)->a_isym): \
289 _do_getl32 ((ax)->a_isym))
290 #define AUX_GET_ISS(bigend, ax) (bigend? _do_getb32 ((ax)->a_iss): \
291 _do_getl32 ((ax)->a_iss))
292 #define AUX_GET_WIDTH(bigend, ax) (bigend? _do_getb32 ((ax)->a_width): \
293 _do_getl32 ((ax)->a_width))
294 #define AUX_GET_COUNT(bigend, ax) (bigend? _do_getb32 ((ax)->a_count): \
295 _do_getl32 ((ax)->a_count))
296
297 /* Relative file descriptor */
298
299 struct rfd_ext {
300 char rfd[4];
301 };
This page took 0.035231 seconds and 4 git commands to generate.