OSDN Git Service

Add - before rms to be more portable.
[pf3gnuchains/gcc-fork.git] / gcc / dwarf.h
1 /* Declarations and definitions of codes relating to the DWARF symbolic
2    debugging information format.
3
4    Written by Ron Guilmette (rfg@netcom.com)
5
6 Copyright (C) 1992 Free Software Foundation, Inc.
7
8 This file is part of GNU CC.
9
10 GNU CC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
13 any later version.
14
15 GNU CC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GNU CC; see the file COPYING.  If not, write to
22 the Free Software Foundation, 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA.  */
24
25 /* This file is derived from the DWARF specification (a public document)
26    Revision 1.0.1 (April 8, 1992) developed by the UNIX International
27    Programming Languages Special Interest Group (UI/PLSIG) and distributed
28    by UNIX International.  Copies of this specification are available from
29    UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
30 */
31
32 /* Tag names and codes.  */
33
34 enum dwarf_tag {
35     TAG_padding                 = 0x0000,
36     TAG_array_type              = 0x0001,
37     TAG_class_type              = 0x0002,
38     TAG_entry_point             = 0x0003,
39     TAG_enumeration_type        = 0x0004,
40     TAG_formal_parameter        = 0x0005,
41     TAG_global_subroutine       = 0x0006,
42     TAG_global_variable         = 0x0007,
43                                 /* 0x0008 -- reserved */
44                                 /* 0x0009 -- reserved */
45     TAG_label                   = 0x000a,
46     TAG_lexical_block           = 0x000b,
47     TAG_local_variable          = 0x000c,
48     TAG_member                  = 0x000d,
49                                 /* 0x000e -- reserved */
50     TAG_pointer_type            = 0x000f,
51     TAG_reference_type          = 0x0010,
52     TAG_compile_unit            = 0x0011,
53     TAG_string_type             = 0x0012,
54     TAG_structure_type          = 0x0013,
55     TAG_subroutine              = 0x0014,
56     TAG_subroutine_type         = 0x0015,
57     TAG_typedef                 = 0x0016,
58     TAG_union_type              = 0x0017,
59     TAG_unspecified_parameters  = 0x0018,
60     TAG_variant                 = 0x0019,
61     TAG_common_block            = 0x001a,
62     TAG_common_inclusion        = 0x001b,
63     TAG_inheritance             = 0x001c,
64     TAG_inlined_subroutine      = 0x001d,
65     TAG_module                  = 0x001e,
66     TAG_ptr_to_member_type      = 0x001f,
67     TAG_set_type                = 0x0020,
68     TAG_subrange_type           = 0x0021,
69     TAG_with_stmt               = 0x0022,
70
71     /* GNU extensions */
72
73     TAG_format_label            = 0x8000,  /* for FORTRAN 77 and Fortran 90 */
74     TAG_namelist                = 0x8001,  /* For Fortran 90 */
75     TAG_function_template       = 0x8002,  /* for C++ */
76     TAG_class_template          = 0x8003   /* for C++ */
77 };
78
79 #define TAG_lo_user     0x8000  /* implementation-defined range start */
80 #define TAG_hi_user     0xffff  /* implementation-defined range end */
81 #define TAG_source_file TAG_compile_unit  /* for backward compatibility */
82
83 /* Form names and codes.  */
84
85 enum dwarf_form {
86     FORM_ADDR   = 0x1,
87     FORM_REF    = 0x2,
88     FORM_BLOCK2 = 0x3,
89     FORM_BLOCK4 = 0x4,
90     FORM_DATA2  = 0x5,
91     FORM_DATA4  = 0x6,
92     FORM_DATA8  = 0x7,
93     FORM_STRING = 0x8
94 };
95
96 /* Attribute names and codes.  */
97
98 enum dwarf_attribute {
99     AT_sibling                  = (0x0010|FORM_REF),
100     AT_location                 = (0x0020|FORM_BLOCK2),
101     AT_name                     = (0x0030|FORM_STRING),
102     AT_fund_type                = (0x0050|FORM_DATA2),
103     AT_mod_fund_type            = (0x0060|FORM_BLOCK2),
104     AT_user_def_type            = (0x0070|FORM_REF),
105     AT_mod_u_d_type             = (0x0080|FORM_BLOCK2),
106     AT_ordering                 = (0x0090|FORM_DATA2),
107     AT_subscr_data              = (0x00a0|FORM_BLOCK2),
108     AT_byte_size                = (0x00b0|FORM_DATA4),
109     AT_bit_offset               = (0x00c0|FORM_DATA2),
110     AT_bit_size                 = (0x00d0|FORM_DATA4),
111                                 /* (0x00e0|FORM_xxxx) -- reserved */
112     AT_element_list             = (0x00f0|FORM_BLOCK4),
113     AT_stmt_list                = (0x0100|FORM_DATA4),
114     AT_low_pc                   = (0x0110|FORM_ADDR),
115     AT_high_pc                  = (0x0120|FORM_ADDR),
116     AT_language                 = (0x0130|FORM_DATA4),
117     AT_member                   = (0x0140|FORM_REF),
118     AT_discr                    = (0x0150|FORM_REF),
119     AT_discr_value              = (0x0160|FORM_BLOCK2),
120                                 /* (0x0170|FORM_xxxx) -- reserved */
121                                 /* (0x0180|FORM_xxxx) -- reserved */
122     AT_string_length            = (0x0190|FORM_BLOCK2),
123     AT_common_reference         = (0x01a0|FORM_REF),
124     AT_comp_dir                 = (0x01b0|FORM_STRING),
125         AT_const_value_string   = (0x01c0|FORM_STRING),
126         AT_const_value_data2    = (0x01c0|FORM_DATA2),
127         AT_const_value_data4    = (0x01c0|FORM_DATA4),
128         AT_const_value_data8    = (0x01c0|FORM_DATA8),
129         AT_const_value_block2   = (0x01c0|FORM_BLOCK2),
130         AT_const_value_block4   = (0x01c0|FORM_BLOCK4),
131     AT_containing_type          = (0x01d0|FORM_REF),
132         AT_default_value_addr   = (0x01e0|FORM_ADDR),
133         AT_default_value_data2  = (0x01e0|FORM_DATA2),
134         AT_default_value_data4  = (0x01e0|FORM_DATA4),
135         AT_default_value_data8  = (0x01e0|FORM_DATA8),
136         AT_default_value_string = (0x01e0|FORM_STRING),
137     AT_friends                  = (0x01f0|FORM_BLOCK2),
138     AT_inline                   = (0x0200|FORM_STRING),
139     AT_is_optional              = (0x0210|FORM_STRING),
140         AT_lower_bound_ref      = (0x0220|FORM_REF),
141         AT_lower_bound_data2    = (0x0220|FORM_DATA2),
142         AT_lower_bound_data4    = (0x0220|FORM_DATA4),
143         AT_lower_bound_data8    = (0x0220|FORM_DATA8),
144     AT_private                  = (0x0240|FORM_STRING),
145     AT_producer                 = (0x0250|FORM_STRING),
146     AT_program                  = (0x0230|FORM_STRING),
147     AT_protected                = (0x0260|FORM_STRING),
148     AT_prototyped               = (0x0270|FORM_STRING),
149     AT_public                   = (0x0280|FORM_STRING),
150     AT_pure_virtual             = (0x0290|FORM_STRING),
151     AT_return_addr              = (0x02a0|FORM_BLOCK2),
152     AT_abstract_origin          = (0x02b0|FORM_REF),
153     AT_start_scope              = (0x02c0|FORM_DATA4),
154     AT_stride_size              = (0x02e0|FORM_DATA4),
155         AT_upper_bound_ref      = (0x02f0|FORM_REF),
156         AT_upper_bound_data2    = (0x02f0|FORM_DATA2),
157         AT_upper_bound_data4    = (0x02f0|FORM_DATA4),
158         AT_upper_bound_data8    = (0x02f0|FORM_DATA8),
159     AT_virtual                  = (0x0300|FORM_STRING),
160
161     /* GNU extensions.  */
162
163     AT_sf_names                 = (0x8000|FORM_DATA4),
164     AT_src_info                 = (0x8010|FORM_DATA4),
165     AT_mac_info                 = (0x8020|FORM_DATA4),
166     AT_src_coords               = (0x8030|FORM_DATA4),
167     AT_body_begin               = (0x8040|FORM_ADDR),
168     AT_body_end                 = (0x8050|FORM_ADDR)
169 };
170
171 #define AT_lo_user      0x2000  /* implementation-defined range start */
172 #define AT_hi_user      0x3ff0  /* implementation-defined range end */
173
174 /* Location atom names and codes.  */
175
176 enum dwarf_location_atom {
177     OP_REG      = 0x01,
178     OP_BASEREG  = 0x02,
179     OP_ADDR     = 0x03,
180     OP_CONST    = 0x04,
181     OP_DEREF2   = 0x05,
182     OP_DEREF4   = 0x06,
183     OP_ADD      = 0x07,
184
185     /* GNU extensions.  */
186
187     OP_MULT     = 0x80
188 };
189
190 #define OP_LO_USER      0x80  /* implementation-defined range start */
191 #define OP_HI_USER      0xff  /* implementation-defined range end */
192
193 /* Fundamental type names and codes.  */
194
195 enum dwarf_fundamental_type {
196     FT_char             = 0x0001,
197     FT_signed_char      = 0x0002,
198     FT_unsigned_char    = 0x0003,
199     FT_short            = 0x0004,
200     FT_signed_short     = 0x0005,
201     FT_unsigned_short   = 0x0006,
202     FT_integer          = 0x0007,
203     FT_signed_integer   = 0x0008,
204     FT_unsigned_integer = 0x0009,
205     FT_long             = 0x000a,
206     FT_signed_long      = 0x000b,
207     FT_unsigned_long    = 0x000c,
208     FT_pointer          = 0x000d,  /* an alias for (void *) */
209     FT_float            = 0x000e,
210     FT_dbl_prec_float   = 0x000f,
211     FT_ext_prec_float   = 0x0010,  /* breaks "classic" svr4 SDB */
212     FT_complex          = 0x0011,  /* breaks "classic" svr4 SDB */
213     FT_dbl_prec_complex = 0x0012,  /* breaks "classic" svr4 SDB */
214                         /* 0x0013 -- reserved */
215     FT_void             = 0x0014,
216     FT_boolean          = 0x0015,  /* breaks "classic" svr4 SDB */
217     FT_ext_prec_complex = 0x0016,  /* breaks "classic" svr4 SDB */
218     FT_label            = 0x0017,
219   
220     /* GNU extensions
221        The low order byte must indicate the size (in bytes) for the type.
222        All of these types will probably break "classic" svr4 SDB */
223
224     FT_long_long        = 0x8008,
225     FT_signed_long_long = 0x8108,
226     FT_unsigned_long_long = 0x8208,
227
228     FT_int8             = 0x9001,
229     FT_signed_int8      = 0x9101,
230     FT_unsigned_int8    = 0x9201,
231     FT_int16            = 0x9302,
232     FT_signed_int16     = 0x9402,
233     FT_unsigned_int16   = 0x9502,
234     FT_int32            = 0x9604,
235     FT_signed_int32     = 0x9704,
236     FT_unsigned_int32   = 0x9804,
237     FT_int64            = 0x9908,
238     FT_signed_int64     = 0x9a08,
239     FT_unsigned_int64   = 0x9b08,
240     FT_int128           = 0x9c10,
241     FT_signed_int128    = 0x9d10,
242     FT_unsigned_int128  = 0x9e10,
243
244     FT_real32           = 0xa004,
245     FT_real64           = 0xa108,
246     FT_real96           = 0xa20c,
247     FT_real128          = 0xa310
248 };
249
250 #define FT_lo_user      0x8000  /* implementation-defined range start */
251 #define FT_hi_user      0xffff  /* implementation defined range end */
252
253 /* Type modifier names and codes.  */
254
255 enum dwarf_type_modifier {
256     MOD_pointer_to      = 0x01,
257     MOD_reference_to    = 0x02,
258     MOD_const           = 0x03,
259     MOD_volatile        = 0x04
260 };
261
262 #define MOD_lo_user     0x80  /* implementation-defined range start */
263 #define MOD_hi_user     0xff  /* implementation-defined range end */
264
265 /* Array ordering names and codes.  */
266
267 enum dwarf_array_dim_ordering {
268     ORD_row_major       = 0,
269     ORD_col_major       = 1
270 };
271
272 /* Array subscript format names and codes.  */
273
274 enum dwarf_subscr_data_formats {
275     FMT_FT_C_C  = 0x0,
276     FMT_FT_C_X  = 0x1,
277     FMT_FT_X_C  = 0x2,
278     FMT_FT_X_X  = 0x3,
279     FMT_UT_C_C  = 0x4,
280     FMT_UT_C_X  = 0x5,
281     FMT_UT_X_C  = 0x6,
282     FMT_UT_X_X  = 0x7,
283     FMT_ET      = 0x8
284 };
285
286 /* Derived from above for ease of use.  */
287
288 #define FMT_CODE(_FUNDAMENTAL_TYPE_P, _LB_CONST_P, _UB_CONST_P) \
289  (((_FUNDAMENTAL_TYPE_P) ? 0 : 4)       \
290   | ((_LB_CONST_P) ? 0 : 2)             \
291   | ((_UB_CONST_P) ? 0 : 1))
292
293 /* Source language names and codes.  */
294
295 enum dwarf_source_language {
296     LANG_C89            = 0x00000001,
297     LANG_C              = 0x00000002,
298     LANG_ADA83          = 0x00000003,
299     LANG_C_PLUS_PLUS    = 0x00000004,
300     LANG_COBOL74        = 0x00000005,
301     LANG_COBOL85        = 0x00000006,
302     LANG_FORTRAN77      = 0x00000007,
303     LANG_FORTRAN90      = 0x00000008,
304     LANG_PASCAL83       = 0x00000009,
305     LANG_MODULA2        = 0x0000000a,
306     LANG_JAVA           = 0x0000000b
307 };
308
309 #define LANG_lo_user    0x00008000  /* implementation-defined range start */
310 #define LANG_hi_user    0x0000ffff  /* implementation-defined range end */
311
312 /* Names and codes for GNU "macinfo" extension.  */
313
314 enum dwarf_macinfo_record_type {
315     MACINFO_start       = 's',
316     MACINFO_resume      = 'r',
317     MACINFO_define      = 'd',
318     MACINFO_undef       = 'u'
319 };