source: trunk/third/gcc/dwarf.h @ 11288

Revision 11288, 9.9 KB checked in by ghudson, 26 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r11287, which included commits to RCS files with non-trunk default branches.
Line 
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
6Copyright (C) 1992 Free Software Foundation, Inc.
7
8This file is part of GNU CC.
9
10GNU CC is free software; you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation; either version 2, or (at your option)
13any later version.
14
15GNU CC is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with GNU CC; see the file COPYING.  If not, write to
22the Free Software Foundation, 59 Temple Place - Suite 330,
23Boston, 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
34enum 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
85enum 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
98enum 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
176enum 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
195enum 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
241    FT_real32           = 0xa004,
242    FT_real64           = 0xa108,
243    FT_real96           = 0xa20c,
244    FT_real128          = 0xa310
245};
246
247#define FT_lo_user      0x8000  /* implementation-defined range start */
248#define FT_hi_user      0xffff  /* implementation defined range end */
249
250/* Type modifier names and codes.  */
251
252enum dwarf_type_modifier {
253    MOD_pointer_to      = 0x01,
254    MOD_reference_to    = 0x02,
255    MOD_const           = 0x03,
256    MOD_volatile        = 0x04
257};
258
259#define MOD_lo_user     0x80  /* implementation-defined range start */
260#define MOD_hi_user     0xff  /* implementation-defined range end */
261
262/* Array ordering names and codes.  */
263
264enum dwarf_array_dim_ordering {
265    ORD_row_major       = 0,
266    ORD_col_major       = 1
267};
268
269/* Array subscript format names and codes.  */
270
271enum dwarf_subscr_data_formats {
272    FMT_FT_C_C  = 0x0,
273    FMT_FT_C_X  = 0x1,
274    FMT_FT_X_C  = 0x2,
275    FMT_FT_X_X  = 0x3,
276    FMT_UT_C_C  = 0x4,
277    FMT_UT_C_X  = 0x5,
278    FMT_UT_X_C  = 0x6,
279    FMT_UT_X_X  = 0x7,
280    FMT_ET      = 0x8
281};
282
283/* Derived from above for ease of use.  */
284
285#define FMT_CODE(_FUNDAMENTAL_TYPE_P, _UB_CONST_P, _LB_CONST_P) \
286 (((_FUNDAMENTAL_TYPE_P) ? 0 : 4)       \
287  | ((_UB_CONST_P) ? 0 : 2)             \
288  | ((_LB_CONST_P) ? 0 : 1))
289
290/* Source language names and codes.  */
291
292enum dwarf_source_language {
293    LANG_C89            = 0x00000001,
294    LANG_C              = 0x00000002,
295    LANG_ADA83          = 0x00000003,
296    LANG_C_PLUS_PLUS    = 0x00000004,
297    LANG_COBOL74        = 0x00000005,
298    LANG_COBOL85        = 0x00000006,
299    LANG_FORTRAN77      = 0x00000007,
300    LANG_FORTRAN90      = 0x00000008,
301    LANG_PASCAL83       = 0x00000009,
302    LANG_MODULA2        = 0x0000000a
303};
304
305#define LANG_lo_user    0x00008000  /* implementation-defined range start */
306#define LANG_hi_user    0x0000ffff  /* implementation-defined range end */
307
308/* Names and codes for GNU "macinfo" extension.  */
309
310enum dwarf_macinfo_record_type {
311    MACINFO_start       = 's',
312    MACINFO_resume      = 'r',
313    MACINFO_define      = 'd',
314    MACINFO_undef       = 'u'
315};
Note: See TracBrowser for help on using the repository browser.