1 /* MIPS `ECOFF' symbol table external format.
2 Copyright 1992, 1993 Free Software Foundation.
3 Contributed by Cygnus Support. Written by John Gilmore.
5 This file is part of GDB.
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.
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.
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. */
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. */
27 /* File header as a set of bytes */
30 unsigned char h_magic
[2];
31 unsigned char h_vstamp
[2];
32 unsigned char h_ilineMax
[4];
33 unsigned char h_cbLine
[4];
34 unsigned char h_cbLineOffset
[4];
35 unsigned char h_idnMax
[4];
36 unsigned char h_cbDnOffset
[4];
37 unsigned char h_ipdMax
[4];
38 unsigned char h_cbPdOffset
[4];
39 unsigned char h_isymMax
[4];
40 unsigned char h_cbSymOffset
[4];
41 unsigned char h_ioptMax
[4];
42 unsigned char h_cbOptOffset
[4];
43 unsigned char h_iauxMax
[4];
44 unsigned char h_cbAuxOffset
[4];
45 unsigned char h_issMax
[4];
46 unsigned char h_cbSsOffset
[4];
47 unsigned char h_issExtMax
[4];
48 unsigned char h_cbSsExtOffset
[4];
49 unsigned char h_ifdMax
[4];
50 unsigned char h_cbFdOffset
[4];
51 unsigned char h_crfd
[4];
52 unsigned char h_cbRfdOffset
[4];
53 unsigned char h_iextMax
[4];
54 unsigned char h_cbExtOffset
[4];
57 /* File descriptor external record */
60 unsigned char f_adr
[4];
61 unsigned char f_rss
[4];
62 unsigned char f_issBase
[4];
63 unsigned char f_cbSs
[4];
64 unsigned char f_isymBase
[4];
65 unsigned char f_csym
[4];
66 unsigned char f_ilineBase
[4];
67 unsigned char f_cline
[4];
68 unsigned char f_ioptBase
[4];
69 unsigned char f_copt
[4];
70 unsigned char f_ipdFirst
[2];
71 unsigned char f_cpd
[2];
72 unsigned char f_iauxBase
[4];
73 unsigned char f_caux
[4];
74 unsigned char f_rfdBase
[4];
75 unsigned char f_crfd
[4];
76 unsigned char f_bits1
[1];
77 unsigned char f_bits2
[3];
78 unsigned char f_cbLineOffset
[4];
79 unsigned char f_cbLine
[4];
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
87 #define FDR_BITS1_FMERGE_BIG 0x04
88 #define FDR_BITS1_FMERGE_LITTLE 0x20
90 #define FDR_BITS1_FREADIN_BIG 0x02
91 #define FDR_BITS1_FREADIN_LITTLE 0x40
93 #define FDR_BITS1_FBIGENDIAN_BIG 0x01
94 #define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
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
101 /* We ignore the `reserved' field in bits2. */
104 /* Procedure descriptor external record */
107 unsigned char p_adr
[4];
108 unsigned char p_isym
[4];
109 unsigned char p_iline
[4];
110 unsigned char p_regmask
[4];
111 unsigned char p_regoffset
[4];
112 unsigned char p_iopt
[4];
113 unsigned char p_fregmask
[4];
114 unsigned char p_fregoffset
[4];
115 unsigned char p_frameoffset
[4];
116 unsigned char p_framereg
[2];
117 unsigned char p_pcreg
[2];
118 unsigned char p_lnLow
[4];
119 unsigned char p_lnHigh
[4];
120 unsigned char p_cbLineOffset
[4];
126 unsigned char l_line
[4];
129 /* Symbol external record */
132 unsigned char s_iss
[4];
133 unsigned char s_value
[4];
134 unsigned char s_bits1
[1];
135 unsigned char s_bits2
[1];
136 unsigned char s_bits3
[1];
137 unsigned char s_bits4
[1];
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
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
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
155 #define SYM_BITS2_RESERVED_BIG 0x10
156 #define SYM_BITS2_RESERVED_LITTLE 0x08
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
163 #define SYM_BITS3_INDEX_SH_LEFT_BIG 8
164 #define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
166 #define SYM_BITS4_INDEX_SH_LEFT_BIG 0
167 #define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
169 /* External symbol external record */
172 unsigned char es_bits1
[1];
173 unsigned char es_bits2
[1];
174 unsigned char es_ifd
[2];
175 struct sym_ext es_asym
;
178 #define EXT_BITS1_JMPTBL_BIG 0x80
179 #define EXT_BITS1_JMPTBL_LITTLE 0x01
181 #define EXT_BITS1_COBOL_MAIN_BIG 0x40
182 #define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
184 #define EXT_BITS1_WEAKEXT_BIG 0x20
185 #define EXT_BITS1_WEAKEXT_LITTLE 0x04
187 /* Type information external record */
190 unsigned char t_bits1
[1];
191 unsigned char t_tq45
[1];
192 unsigned char t_tq01
[1];
193 unsigned char t_tq23
[1];
196 #define TIR_BITS1_FBITFIELD_BIG 0x80
197 #define TIR_BITS1_FBITFIELD_LITTLE 0x01
199 #define TIR_BITS1_CONTINUED_BIG 0x40
200 #define TIR_BITS1_CONTINUED_LITTLE 0x02
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
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
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
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
235 /* Relative symbol external record */
238 unsigned char r_bits
[4];
241 #define RNDX_BITS0_RFD_SH_LEFT_BIG 4
242 #define RNDX_BITS1_RFD_BIG 0xF0
243 #define RNDX_BITS1_RFD_SH_BIG 4
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
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
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
260 /* Dense numbers external record */
263 unsigned char d_rfd
[4];
264 unsigned char d_index
[4];
267 /* Auxliliary symbol information external record */
271 struct rndx_ext a_rndx
;
272 unsigned char a_dnLow
[4];
273 unsigned char a_dnHigh
[4];
274 unsigned char a_isym
[4];
275 unsigned char a_iss
[4];
276 unsigned char a_width
[4];
277 unsigned char a_count
[4];
280 /* FIXME! These are copied from ../bfd/libbfd.h */
281 extern bfd_vma _do_getb32
PARAMS ((unsigned char *addr
));
282 extern bfd_vma _do_getl32
PARAMS ((unsigned char *addr
));
283 extern void _do_putb32
PARAMS ((bfd_vma data
, unsigned char *addr
));
284 extern void _do_putl32
PARAMS ((bfd_vma data
, unsigned char *addr
));
286 #define AUX_GET_ANY(bigend, ax, field) \
287 ((bigend) ? _do_getb32 ((ax)->field) : _do_getl32 ((ax)->field))
289 #define AUX_GET_DNLOW(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnLow)
290 #define AUX_GET_DNHIGH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnHigh)
291 #define AUX_GET_ISYM(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_isym)
292 #define AUX_GET_ISS(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_iss)
293 #define AUX_GET_WIDTH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_width)
294 #define AUX_GET_COUNT(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_count)
296 #define AUX_PUT_ANY(bigend, val, ax, field) \
298 ? (_do_putb32 ((val), (ax)->field), 0) \
299 : (_do_putl32 ((val), (ax)->field), 0))
301 #define AUX_PUT_DNLOW(bigend, val, ax) \
302 AUX_PUT_ANY ((bigend), (val), (ax), a_dnLow)
303 #define AUX_PUT_DNHIGH(bigend, val, ax) \
304 AUX_PUT_ANY ((bigend), (val), (ax), a_dnHigh)
305 #define AUX_PUT_ISYM(bigend, val, ax) \
306 AUX_PUT_ANY ((bigend), (val), (ax), a_isym)
307 #define AUX_PUT_ISS(bigend, val, ax) \
308 AUX_PUT_ANY ((bigend), (val), (ax), a_iss)
309 #define AUX_PUT_WIDTH(bigend, val, ax) \
310 AUX_PUT_ANY ((bigend), (val), (ax), a_width)
311 #define AUX_PUT_COUNT(bigend, val, ax) \
312 AUX_PUT_ANY ((bigend), (val), (ax), a_count)
314 /* Relative file descriptor */
317 unsigned char rfd
[4];
320 /* Optimizer symbol external record */
323 unsigned char o_bits1
[1];
324 unsigned char o_bits2
[1];
325 unsigned char o_bits3
[1];
326 unsigned char o_bits4
[1];
327 struct rndx_ext o_rndx
;
328 unsigned char o_offset
[4];
331 #define OPT_BITS2_VALUE_SH_LEFT_BIG 16
332 #define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
334 #define OPT_BITS3_VALUE_SH_LEFT_BIG 8
335 #define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
337 #define OPT_BITS4_VALUE_SH_LEFT_BIG 0
338 #define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16
340 /* Prototypes for the swapping functions. These require that sym.h be
341 included before this file. */
342 extern void ecoff_swap_hdr_in
PARAMS ((bfd
*, struct hdr_ext
*, HDRR
*));
343 extern void ecoff_swap_hdr_out
PARAMS ((bfd
*, HDRR
*, struct hdr_ext
*));
344 extern void ecoff_swap_fdr_in
PARAMS ((bfd
*, struct fdr_ext
*, FDR
*));
345 extern void ecoff_swap_fdr_out
PARAMS ((bfd
*, FDR
*, struct fdr_ext
*));
346 extern void ecoff_swap_pdr_in
PARAMS ((bfd
*, struct pdr_ext
*, PDR
*));
347 extern void ecoff_swap_pdr_out
PARAMS ((bfd
*, PDR
*, struct pdr_ext
*));
348 extern void ecoff_swap_sym_in
PARAMS ((bfd
*, struct sym_ext
*, SYMR
*));
349 extern void ecoff_swap_sym_out
PARAMS ((bfd
*, SYMR
*, struct sym_ext
*));
350 extern void ecoff_swap_ext_in
PARAMS ((bfd
*, struct ext_ext
*, EXTR
*));
351 extern void ecoff_swap_ext_out
PARAMS ((bfd
*, EXTR
*, struct ext_ext
*));
352 extern void ecoff_swap_dnr_in
PARAMS ((bfd
*, struct dnr_ext
*, DNR
*));
353 extern void ecoff_swap_dnr_out
PARAMS ((bfd
*, DNR
*, struct dnr_ext
*));
354 extern void ecoff_swap_tir_in
PARAMS ((int bigend
, struct tir_ext
*, TIR
*));
355 extern void ecoff_swap_tir_out
PARAMS ((int bigend
, TIR
*, struct tir_ext
*));
356 extern void ecoff_swap_rndx_in
PARAMS ((int bigend
, struct rndx_ext
*,
358 extern void ecoff_swap_rndx_out
PARAMS ((int bigend
, RNDXR
*,
360 extern void ecoff_swap_rfd_in
PARAMS ((bfd
*, struct rfd_ext
*, RFDT
*));
361 extern void ecoff_swap_rfd_out
PARAMS ((bfd
*, RFDT
*, struct rfd_ext
*));
362 extern void ecoff_swap_opt_in
PARAMS ((bfd
*, struct opt_ext
*, OPTR
*));
363 extern void ecoff_swap_opt_out
PARAMS ((bfd
*, OPTR
*, struct opt_ext
*));
This page took 0.03639 seconds and 4 git commands to generate.