Subversion Repositories Kolibri OS

Rev

Rev 5191 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5191 serge 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
 
6324 serge 6
   Copyright (C) 1992-2015 Free Software Foundation, Inc.
5191 serge 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
 
36
enum 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
 
87
enum 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
 
100
enum 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
 
178
enum 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
 
197
enum 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
 
257
enum 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
 
269
enum dwarf_array_dim_ordering {
270
    ORD_row_major	= 0,
271
    ORD_col_major	= 1
272
};
273
 
274
/* Array subscript format names and codes.  */
275
 
276
enum 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
 
297
enum 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
 
316
enum 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 */