aboutsummaryrefslogtreecommitdiff
path: root/include/dwarf.h
blob: fb40c4524272a4aa18ddd11230237eb0dc1dce0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
/* Dwarf definitions.

   This file is derived from the DWARF specification, Draft #5 by the UNIX
   International Programming Languages Special Interest Group dated 10/21/91.

   (Extracted from GCC 2.0, snapshot 312 and placed in Cygnus include
    tree on 11/16/91 by Fred Fish, as part of gdb SVR4 DWARF support.)
*/

/* Tag names and codes: Figure 9.  */

#define TAG_padding			0x0000
#define TAG_array_type			0x0001
#define TAG_class_type			0x0002
#define TAG_entry_point			0x0003
#define TAG_enumeration_type		0x0004
#define TAG_formal_parameter		0x0005
#define TAG_global_subroutine		0x0006
#define TAG_global_variable		0x0007
#define TAG_imported_declaration	0x0008

#define TAG_label			0x000a
#define TAG_lexical_block		0x000b
#define TAG_local_variable		0x000c
#define TAG_member			0x000d

#define TAG_pointer_type		0x000f
#define TAG_reference_type		0x0010
#define TAG_compile_unit		0x0011
#define TAG_source_file			0x0011
#define TAG_string_type			0x0012
#define TAG_structure_type		0x0013
#define TAG_subroutine			0x0014
#define TAG_subroutine_type		0x0015
#define TAG_typedef			0x0016
#define TAG_union_type			0x0017
#define TAG_unspecified_parameters	0x0018
#define TAG_variant			0x0019
#define TAG_common_block		0x001a
#define TAG_common_inclusion		0x001b
#define TAG_format			0x001c
#define TAG_inheritance			0x001d
#define TAG_inlined_subroutine		0x001e
#define TAG_module			0x001f
#define TAG_ptr_to_member_type		0x0020
#define TAG_set_type			0x0021
#define TAG_subrange_type		0x0022
#define TAG_with_stmt			0x0023

#define TAG_lo_user			0x8000
#define TAG_hi_user			0xffff

/* Form names and codes: Figure 10.  */

#define FORM_ADDR	0x1
#define FORM_REF	0x2
#define FORM_BLOCK2	0x3
#define FORM_BLOCK4	0x4
#define FORM_DATA2	0x5
#define FORM_DATA4	0x6
#define FORM_DATA8	0x7
#define FORM_STRING	0x8

/* Attribute names and codes: Figure 11.  */

#define AT_sibling		/* reference */	(0x0010|FORM_REF)
#define AT_location		/* block2 */	(0x0020|FORM_BLOCK2)
#define AT_name			/* string */	(0x0030|FORM_STRING)
#define AT_fund_type		/* halfword */	(0x0050|FORM_DATA2)
#define AT_mod_fund_type	/* block2 */	(0x0060|FORM_BLOCK2)
#define AT_user_def_type	/* reference */	(0x0070|FORM_REF)
#define AT_mod_u_d_type		/* block2 */	(0x0080|FORM_BLOCK2)
#define AT_ordering		/* halfword */	(0x0090|FORM_DATA2)
#define AT_subscr_data		/* block2 */	(0x00a0|FORM_BLOCK2)
#define AT_byte_size		/* word */	(0x00b0|FORM_DATA4)
#define AT_bit_offset		/* halfword */	(0x00c0|FORM_DATA2)
#define AT_bit_size		/* word */	(0x00d0|FORM_DATA4)

#define AT_element_list		/* block4 */	(0x00f0|FORM_BLOCK4)
#define AT_stmt_list		/* word */	(0x0100|FORM_DATA4)
#define AT_low_pc		/* address */	(0x0110|FORM_ADDR)
#define AT_high_pc		/* address */	(0x0120|FORM_ADDR)
#define AT_language		/* word */	(0x0130|FORM_DATA4)
#define AT_member		/* reference */	(0x0140|FORM_REF)
#define AT_discr		/* reference */	(0x0150|FORM_REF)
#define AT_discr_value		/* block2 */	(0x0160|FORM_BLOCK2)
#define AT_visibility		/* halfword */	(0x0170|FORM_DATA2)
#define AT_import		/* reference */	(0x0180|FORM_REF)
#define AT_string_length	/* block2 */	(0x0190|FORM_BLOCK2)
#define AT_common_reference	/* reference */	(0x01a0|FORM_REF)
#define AT_comp_dir		/* string */	(0x01b0|FORM_STRING)

#define AT_const_value_string	/* string */	(0x01c0|FORM_STRING)
#define AT_const_value_data2	/* halfword */	(0x01c0|FORM_DATA2)
#define AT_const_value_data4	/* word */	(0x01c0|FORM_DATA4)
#define AT_const_value_data8	/* doubleword */(0x01c0|FORM_DATA8)
#define AT_const_value_block2	/* block2 */	(0x01c0|FORM_BLOCK2)
#define AT_const_value_block4	/* block4 */	(0x01c0|FORM_BLOCK4)

#define AT_containing_type	/* reference */	(0x01d0|FORM_REF)

#define AT_default_value_addr	/* address */	(0x01e0|FORM_ADDR)
#define AT_default_value_data2	/* halfword */	(0x01e0|FORM_DATA2)
#define AT_default_value_data4	/* word */	(0x01e0|FORM_DATA4)
#define AT_default_value_data8	/* doubleword */(0x01e0|FORM_DATA8)
#define AT_default_value_string	/* string */	(0x01e0|FORM_STRING)

#define AT_friends		/* block2 */	(0x01f0|FORM_BLOCK2)
#define AT_inline		/* string */	(0x0200|FORM_STRING)
#define AT_is_optional		/* string */	(0x0210|FORM_STRING)

#define AT_lower_bound_ref	/* reference */	(0x0220|FORM_REF)
#define AT_lower_bound_data2	/* halfword */	(0x0220|FORM_DATA2)
#define AT_lower_bound_data4	/* word */	(0x0220|FORM_DATA4)
#define AT_lower_bound_data8	/* doubleword */(0x0220|FORM_DATA8)

#define AT_main_program		/* string */	(0x0230|FORM_STRING)
#define AT_private		/* string */	(0x0240|FORM_STRING)
#define AT_producer		/* string */	(0x0250|FORM_STRING)
#define AT_protected		/* string */	(0x0260|FORM_STRING)
#define AT_prototyped		/* string */	(0x0270|FORM_STRING)
#define AT_public		/* string */	(0x0280|FORM_STRING)
#define AT_pure_virtual		/* string */	(0x0290|FORM_STRING)
#define AT_return_addr_loc	/* block2 */	(0x02a0|FORM_BLOCK2)
#define AT_specification	/* reference */	(0x02b0|FORM_REF)
#define AT_start_scope		/* word */	(0x02c0|FORM_DATA4)
#define AT_static_link_loc	/* block2 */	(0x02d0|FORM_BLOCK2)
#define AT_stride_size		/* word */	(0x02e0|FORM_DATA4)

#define AT_upper_bound_ref	/* reference */	(0x02f0|FORM_REF)
#define AT_upper_bound_data2	/* halfword */	(0x02f0|FORM_DATA2)
#define AT_upper_bound_data4	/* word */	(0x02f0|FORM_DATA4)
#define AT_upper_bound_data8	/* doubleword */(0x02f0|FORM_DATA8)

#define AT_virtual		/* string */	(0x0300|FORM_STRING)
#define AT_frame_base		/* block2 */	(0x0310|FORM_BLOCK2)

/* GNU attribute extensions.  */

#define AT_sf_names		/* word */	(0x8000|FORM_DATA4)
#define AT_src_info		/* word */	(0x8010|FORM_DATA4)
#define AT_mac_info		/* word */	(0x8020|FORM_DATA4)

#define AT_lo_user		/* - */		0x8000
#define AT_hi_user		/* - */		0xffff

/* Location atom names and codes: Figure 13.  */

#define OP_REG		0x01
#define OP_BASEREG	0x02
#define OP_ADDR		0x03
#define OP_CONST	0x04
#define OP_DEREF2	0x05
#define OP_DEREF4	0x06
#define OP_ADD		0x07
   
#define OP_LO_USER	0x80
#define OP_HI_USER	0xff

/* Fundamental type names and codes: figure 14.  */

#define FT_char			0x0001
#define FT_signed_char		0x0002
#define FT_unsigned_char	0x0003
#define FT_short		0x0004
#define FT_signed_short		0x0005
#define FT_unsigned_short	0x0006
#define FT_integer		0x0007
#define FT_signed_integer	0x0008
#define FT_unsigned_integer	0x0009
#define FT_long			0x000a
#define FT_signed_long		0x000b
#define FT_unsigned_long	0x000c
#define FT_pointer		0x000d
#define FT_float		0x000e
#define FT_dbl_prec_float	0x000f
#define FT_ext_prec_float	0x0010	/* not accepted by "classic" svr4 SDB */
#define FT_complex		0x0011	/* not accepted by "classic" svr4 SDB */
#define FT_dbl_prec_complex	0x0012	/* not accepted by "classic" svr4 SDB */

#define FT_void			0x0014
#define FT_boolean		0x0015	/* not accepted by "classic" svr4 SDB */
#define FT_ext_prec_complex	0x0016	/* not accepted by "classic" svr4 SDB */
  
/* GNU-specific fundamental type codes - not accepted by "classic" svr4 SDB */

#define FT_long_long		0x8000
#define FT_signed_long_long	0x8001
#define FT_unsigned_long_long	0x8002
  
#define FT_lo_user		0x8000
#define FT_hi_user		0xffff

/* Type modifier names and codes: Figure 15.  */

#define MOD_pointer_to		0x01
#define MOD_reference_to	0x02
#define MOD_const		0x03
#define MOD_volatile		0x04
     
#define MOD_lo_user		0x80
#define MOD_hi_user		0xff
     
/* Visibility names and codes: Figure 16.  */
     
#define VIS_local		0x00
#define VIS_exported		0x01
     
#define VIS_lo_user		0x80
#define VIS_hi_user		0xff

/* Array ordering names and codes: Figure 18.  */

#define ORD_row_major	0
#define ORD_col_major	1

/* Array subscript format names and codes: Figure 19.  */

#define FMT_FT_C_C	0x0
#define FMT_FT_C_X	0x1
#define FMT_FT_X_C	0x2
#define FMT_FT_X_X	0x3
#define FMT_UT_C_C	0x4
#define FMT_UT_C_X	0x5
#define FMT_UT_X_C	0x6
#define FMT_UT_X_X	0x7
#define FMT_ET		0x8

/* Derived from above for ease of use.  */

#define FMT_CODE(_FUNDAMENTAL_TYPE_P, _UB_CONST_P, _LB_CONST_P) \
 (((_FUNDAMENTAL_TYPE_P) ? 0 : 4)	\
  | ((_UB_CONST_P) ? 0 : 2)		\
  | ((_LB_CONST_P) ? 0 : 1))

/* Source language names and codes: Figure 17.  */

#define LANG_C89		0x0001
#define LANG_C			0x0002
#define LANG_ADA83		0x0003
#define LANG_C_PLUS_PLUS	0x0004
#define LANG_COBOL74		0x0005
#define LANG_COBOL85		0x0006
#define LANG_FORTRAN77		0x0007
#define LANG_FORTRAN90		0x0008
#define LANG_PASCAL83		0x0009
#define LANG_MODULA2		0x000a

#define LANG_LO_USER		0x8000
#define LANG_HI_USER		0xffff

/* Names and codes for GNU "macinfo" extension.  */

#define MACINFO_start		's'
#define MACINFO_resume		'r'
#define MACINFO_define		'd'
#define MACINFO_undef		'u'