source: trunk/libs/newlib/src/include/elf/dwarf.h @ 522

Last change on this file since 522 was 444, checked in by satin@…, 7 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

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