dwarf2.h revision 104834
118334Speter/* Declarations and definitions of codes relating to the DWARF2 symbolic
2169689Skan   debugging information format.
3132718Skan   Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002
418334Speter   Free Software Foundation, Inc.
518334Speter
6132718Skan   Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
718334Speter   Office (AJPO), Florida State Unviversity and Silicon Graphics Inc.
8132718Skan   provided support for this effort -- June 21, 1995.
918334Speter
1018334Speter   Derived from the DWARF 1 implementation written by Ron Guilmette
1118334Speter   (rfg@netcom.com), November 1990.
1218334Speter
13132718SkanThis file is part of GCC.
1418334Speter
1518334SpeterGCC is free software; you can redistribute it and/or modify it under
1618334Speterthe terms of the GNU General Public License as published by the Free
1718334SpeterSoftware Foundation; either version 2, or (at your option) any later
1818334Speterversion.
19132718Skan
20169689SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY
21169689SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or
2218334SpeterFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2318334Speterfor more details.
2418334Speter
2518334SpeterYou should have received a copy of the GNU General Public License
2618334Speteralong with GCC; see the file COPYING.  If not, write to the Free
2718334SpeterSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA
2818334Speter02111-1307, USA.  */
2918334Speter
3050397Sobrien/* This file is derived from the DWARF specification (a public document)
31132718Skan   Revision 2.0.0 (July 27, 1993) developed by the UNIX International
32132718Skan   Programming Languages Special Interest Group (UI/PLSIG) and distributed
3318334Speter   by UNIX International.  Copies of this specification are available from
3418334Speter   UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
3518334Speter
3618334Speter   This file also now contains definitions from the DWARF 3 specification.  */
3750397Sobrien
3890075Sobrien/* This file is shared between GCC and GDB, and should not contain
39169689Skan   prototypes.  */
4018334Speter
41132718Skan#ifndef _ELF_DWARF2_H
42132718Skan#define _ELF_DWARF2_H
43169689Skan
44132718Skan/* Structure found in the .debug_line section.  */
45169689Skantypedef struct
4618334Speter{
47117395Skan  unsigned char li_length          [4];
4818334Speter  unsigned char li_version         [2];
4918334Speter  unsigned char li_prologue_length [4];
50117395Skan  unsigned char li_min_insn_length [1];
5150397Sobrien  unsigned char li_default_is_stmt [1];
5290075Sobrien  unsigned char li_line_base       [1];
53169689Skan  unsigned char li_line_range      [1];
5418334Speter  unsigned char li_opcode_base     [1];
5550397Sobrien}
5650397SobrienDWARF2_External_LineInfo;
5718334Speter
58132718Skantypedef struct
5918334Speter{
6050397Sobrien  unsigned long  li_length;
6150397Sobrien  unsigned short li_version;
6250397Sobrien  unsigned int   li_prologue_length;
6350397Sobrien  unsigned char  li_min_insn_length;
6450397Sobrien  unsigned char  li_default_is_stmt;
6550397Sobrien  int            li_line_base;
6650397Sobrien  unsigned char  li_line_range;
6750397Sobrien  unsigned char  li_opcode_base;
6850397Sobrien}
6950397SobrienDWARF2_Internal_LineInfo;
7050397Sobrien
71169689Skan/* Structure found in .debug_pubnames section.  */
72169689Skantypedef struct
73169689Skan{
74169689Skan  unsigned char pn_length  [4];
7550397Sobrien  unsigned char pn_version [2];
7650397Sobrien  unsigned char pn_offset  [4];
7750397Sobrien  unsigned char pn_size    [4];
7850397Sobrien}
7950397SobrienDWARF2_External_PubNames;
8050397Sobrien
8150397Sobrientypedef struct
8250397Sobrien{
8350397Sobrien  unsigned long  pn_length;
8450397Sobrien  unsigned short pn_version;
8550397Sobrien  unsigned long  pn_offset;
8650397Sobrien  unsigned long  pn_size;
87169689Skan}
8818334SpeterDWARF2_Internal_PubNames;
8918334Speter
90132718Skan/* Strcuture found in .debug_info section.  */
91132718Skantypedef struct
9218334Speter{
9318334Speter  unsigned char  cu_length        [4];
9450397Sobrien  unsigned char  cu_version       [2];
9518334Speter  unsigned char  cu_abbrev_offset [4];
9618334Speter  unsigned char  cu_pointer_size  [1];
9750397Sobrien}
9850397SobrienDWARF2_External_CompUnit;
9950397Sobrien
10018334Spetertypedef struct
10150397Sobrien{
10250397Sobrien  unsigned long  cu_length;
10350397Sobrien  unsigned short cu_version;
10450397Sobrien  unsigned long  cu_abbrev_offset;
105169689Skan  unsigned char  cu_pointer_size;
10618334Speter}
10718334SpeterDWARF2_Internal_CompUnit;
10818334Speter
10918334Spetertypedef struct
11018334Speter{
11118334Speter  unsigned char  ar_length       [4];
112169689Skan  unsigned char  ar_version      [2];
11318334Speter  unsigned char  ar_info_offset  [4];
11418334Speter  unsigned char  ar_pointer_size [1];
11518334Speter  unsigned char  ar_segment_size [1];
11618334Speter}
11790075SobrienDWARF2_External_ARange;
118169689Skan
11918334Spetertypedef struct
120169689Skan{
121132718Skan  unsigned long  ar_length;
12218334Speter  unsigned short ar_version;
123132718Skan  unsigned long  ar_info_offset;
12452284Sobrien  unsigned char  ar_pointer_size;
12518334Speter  unsigned char  ar_segment_size;
12618334Speter}
127169689SkanDWARF2_Internal_ARange;
12818334Speter
12990075Sobrien
13090075Sobrien/* Tag names and codes.  */
13118334Speterenum dwarf_tag
13218334Speter  {
13318334Speter    DW_TAG_padding = 0x00,
134169689Skan    DW_TAG_array_type = 0x01,
135117395Skan    DW_TAG_class_type = 0x02,
136117395Skan    DW_TAG_entry_point = 0x03,
13718334Speter    DW_TAG_enumeration_type = 0x04,
138169689Skan    DW_TAG_formal_parameter = 0x05,
13918334Speter    DW_TAG_imported_declaration = 0x08,
14018334Speter    DW_TAG_label = 0x0a,
14118334Speter    DW_TAG_lexical_block = 0x0b,
142132718Skan    DW_TAG_member = 0x0d,
14318334Speter    DW_TAG_pointer_type = 0x0f,
14418334Speter    DW_TAG_reference_type = 0x10,
14518334Speter    DW_TAG_compile_unit = 0x11,
14618334Speter    DW_TAG_string_type = 0x12,
14718334Speter    DW_TAG_structure_type = 0x13,
14818334Speter    DW_TAG_subroutine_type = 0x15,
14918334Speter    DW_TAG_typedef = 0x16,
150169689Skan    DW_TAG_union_type = 0x17,
15118334Speter    DW_TAG_unspecified_parameters = 0x18,
15218334Speter    DW_TAG_variant = 0x19,
15318334Speter    DW_TAG_common_block = 0x1a,
154169689Skan    DW_TAG_common_inclusion = 0x1b,
15518334Speter    DW_TAG_inheritance = 0x1c,
15618334Speter    DW_TAG_inlined_subroutine = 0x1d,
157169689Skan    DW_TAG_module = 0x1e,
15818334Speter    DW_TAG_ptr_to_member_type = 0x1f,
15918334Speter    DW_TAG_set_type = 0x20,
16018334Speter    DW_TAG_subrange_type = 0x21,
16118334Speter    DW_TAG_with_stmt = 0x22,
162169689Skan    DW_TAG_access_declaration = 0x23,
163169689Skan    DW_TAG_base_type = 0x24,
164169689Skan    DW_TAG_catch_block = 0x25,
165169689Skan    DW_TAG_const_type = 0x26,
16690075Sobrien    DW_TAG_constant = 0x27,
167169689Skan    DW_TAG_enumerator = 0x28,
168169689Skan    DW_TAG_file_type = 0x29,
16918334Speter    DW_TAG_friend = 0x2a,
170169689Skan    DW_TAG_namelist = 0x2b,
171169689Skan    DW_TAG_namelist_item = 0x2c,
17218334Speter    DW_TAG_packed_type = 0x2d,
17318334Speter    DW_TAG_subprogram = 0x2e,
17418334Speter    DW_TAG_template_type_param = 0x2f,
17550397Sobrien    DW_TAG_template_value_param = 0x30,
17618334Speter    DW_TAG_thrown_type = 0x31,
17718334Speter    DW_TAG_try_block = 0x32,
17818334Speter    DW_TAG_variant_part = 0x33,
17918334Speter    DW_TAG_variable = 0x34,
180117395Skan    DW_TAG_volatile_type = 0x35,
18150397Sobrien    /* DWARF 3.  */
18218334Speter    DW_TAG_dwarf_procedure = 0x36,
183117395Skan    DW_TAG_restrict_type = 0x37,
18450397Sobrien    DW_TAG_interface_type = 0x38,
18518334Speter    DW_TAG_namespace = 0x39,
186117395Skan    DW_TAG_imported_module = 0x3a,
18718334Speter    DW_TAG_unspecified_type = 0x3b,
188169689Skan    DW_TAG_partial_unit = 0x3c,
189169689Skan    DW_TAG_imported_unit = 0x3d,
190169689Skan    /* SGI/MIPS Extensions.  */
191169689Skan    DW_TAG_MIPS_loop = 0x4081,
19218334Speter    /* GNU extensions.  */
193169689Skan    DW_TAG_format_label = 0x4101,	/* For FORTRAN 77 and Fortran 90.  */
194169689Skan    DW_TAG_function_template = 0x4102,	/* For C++.  */
19518334Speter    DW_TAG_class_template = 0x4103,	/* For C++.  */
19618334Speter    DW_TAG_GNU_BINCL = 0x4104,
197169689Skan    DW_TAG_GNU_EINCL = 0x4105
19818334Speter  };
19918334Speter
20018334Speter#define DW_TAG_lo_user	0x4080
20118334Speter#define DW_TAG_hi_user	0xffff
20218334Speter
20318334Speter/* Flag that tells whether entry has a child or not.  */
20418334Speter#define DW_children_no   0
205169689Skan#define	DW_children_yes  1
20618334Speter
20718334Speter/* Form names and codes.  */
208169689Skanenum dwarf_form
209132718Skan  {
21018334Speter    DW_FORM_addr = 0x01,
211169689Skan    DW_FORM_block2 = 0x03,
21218334Speter    DW_FORM_block4 = 0x04,
21318334Speter    DW_FORM_data2 = 0x05,
21418334Speter    DW_FORM_data4 = 0x06,
215169689Skan    DW_FORM_data8 = 0x07,
21618334Speter    DW_FORM_string = 0x08,
21718334Speter    DW_FORM_block = 0x09,
218169689Skan    DW_FORM_block1 = 0x0a,
219169689Skan    DW_FORM_data1 = 0x0b,
22018334Speter    DW_FORM_flag = 0x0c,
22118334Speter    DW_FORM_sdata = 0x0d,
22218334Speter    DW_FORM_strp = 0x0e,
22318334Speter    DW_FORM_udata = 0x0f,
22418334Speter    DW_FORM_ref_addr = 0x10,
225132718Skan    DW_FORM_ref1 = 0x11,
22618334Speter    DW_FORM_ref2 = 0x12,
22718334Speter    DW_FORM_ref4 = 0x13,
22850397Sobrien    DW_FORM_ref8 = 0x14,
229169689Skan    DW_FORM_ref_udata = 0x15,
23018334Speter    DW_FORM_indirect = 0x16
231132718Skan  };
23218334Speter
23318334Speter/* Attribute names and codes.  */
234169689Skan
235169689Skanenum dwarf_attribute
23618334Speter  {
237169689Skan    DW_AT_sibling = 0x01,
23818334Speter    DW_AT_location = 0x02,
23918334Speter    DW_AT_name = 0x03,
24018334Speter    DW_AT_ordering = 0x09,
24118334Speter    DW_AT_subscr_data = 0x0a,
242169689Skan    DW_AT_byte_size = 0x0b,
24350397Sobrien    DW_AT_bit_offset = 0x0c,
244169689Skan    DW_AT_bit_size = 0x0d,
24550397Sobrien    DW_AT_element_list = 0x0f,
246169689Skan    DW_AT_stmt_list = 0x10,
247169689Skan    DW_AT_low_pc = 0x11,
248169689Skan    DW_AT_high_pc = 0x12,
249169689Skan    DW_AT_language = 0x13,
250169689Skan    DW_AT_member = 0x14,
251169689Skan    DW_AT_discr = 0x15,
252169689Skan    DW_AT_discr_value = 0x16,
253169689Skan    DW_AT_visibility = 0x17,
254169689Skan    DW_AT_import = 0x18,
255169689Skan    DW_AT_string_length = 0x19,
25618334Speter    DW_AT_common_reference = 0x1a,
25718334Speter    DW_AT_comp_dir = 0x1b,
25818334Speter    DW_AT_const_value = 0x1c,
25918334Speter    DW_AT_containing_type = 0x1d,
260169689Skan    DW_AT_default_value = 0x1e,
261169689Skan    DW_AT_inline = 0x20,
262169689Skan    DW_AT_is_optional = 0x21,
26318334Speter    DW_AT_lower_bound = 0x22,
26418334Speter    DW_AT_producer = 0x25,
26518334Speter    DW_AT_prototyped = 0x27,
26618334Speter    DW_AT_return_addr = 0x2a,
26718334Speter    DW_AT_start_scope = 0x2c,
26818334Speter    DW_AT_stride_size = 0x2e,
269117395Skan    DW_AT_upper_bound = 0x2f,
270169689Skan    DW_AT_abstract_origin = 0x31,
271169689Skan    DW_AT_accessibility = 0x32,
272169689Skan    DW_AT_address_class = 0x33,
273169689Skan    DW_AT_artificial = 0x34,
274169689Skan    DW_AT_base_types = 0x35,
275169689Skan    DW_AT_calling_convention = 0x36,
276169689Skan    DW_AT_count = 0x37,
277169689Skan    DW_AT_data_member_location = 0x38,
278169689Skan    DW_AT_decl_column = 0x39,
279169689Skan    DW_AT_decl_file = 0x3a,
280169689Skan    DW_AT_decl_line = 0x3b,
281169689Skan    DW_AT_declaration = 0x3c,
282169689Skan    DW_AT_discr_list = 0x3d,
283169689Skan    DW_AT_encoding = 0x3e,
284169689Skan    DW_AT_external = 0x3f,
285169689Skan    DW_AT_frame_base = 0x40,
286169689Skan    DW_AT_friend = 0x41,
287169689Skan    DW_AT_identifier_case = 0x42,
288169689Skan    DW_AT_macro_info = 0x43,
289169689Skan    DW_AT_namelist_items = 0x44,
290169689Skan    DW_AT_priority = 0x45,
291169689Skan    DW_AT_segment = 0x46,
292169689Skan    DW_AT_specification = 0x47,
293169689Skan    DW_AT_static_link = 0x48,
294169689Skan    DW_AT_type = 0x49,
295169689Skan    DW_AT_use_location = 0x4a,
296169689Skan    DW_AT_variable_parameter = 0x4b,
297169689Skan    DW_AT_virtuality = 0x4c,
298169689Skan    DW_AT_vtable_elem_location = 0x4d,
299169689Skan    /* DWARF 3 values.  */
300169689Skan    DW_AT_allocated     = 0x4e,
301169689Skan    DW_AT_associated    = 0x4f,
302169689Skan    DW_AT_data_location = 0x50,
303169689Skan    DW_AT_stride        = 0x51,
304169689Skan    DW_AT_entry_pc      = 0x52,
305169689Skan    DW_AT_use_UTF8      = 0x53,
306169689Skan    DW_AT_extension     = 0x54,
307169689Skan    DW_AT_ranges        = 0x55,
308169689Skan    DW_AT_trampoline    = 0x56,
309169689Skan    DW_AT_call_column   = 0x57,
310169689Skan    DW_AT_call_file     = 0x58,
311169689Skan    DW_AT_call_line     = 0x59,
312169689Skan    /* SGI/MIPS Extensions.  */
313169689Skan    DW_AT_MIPS_fde = 0x2001,
314169689Skan    DW_AT_MIPS_loop_begin = 0x2002,
315169689Skan    DW_AT_MIPS_tail_loop_begin = 0x2003,
316169689Skan    DW_AT_MIPS_epilog_begin = 0x2004,
317169689Skan    DW_AT_MIPS_loop_unroll_factor = 0x2005,
318169689Skan    DW_AT_MIPS_software_pipeline_depth = 0x2006,
319169689Skan    DW_AT_MIPS_linkage_name = 0x2007,
320169689Skan    DW_AT_MIPS_stride = 0x2008,
321169689Skan    DW_AT_MIPS_abstract_name = 0x2009,
322169689Skan    DW_AT_MIPS_clone_origin = 0x200a,
323169689Skan    DW_AT_MIPS_has_inlines = 0x200b,
324169689Skan    /* GNU extensions.  */
325169689Skan    DW_AT_sf_names   = 0x2101,
326169689Skan    DW_AT_src_info   = 0x2102,
327169689Skan    DW_AT_mac_info   = 0x2103,
328169689Skan    DW_AT_src_coords = 0x2104,
329169689Skan    DW_AT_body_begin = 0x2105,
330169689Skan    DW_AT_body_end   = 0x2106,
331169689Skan    DW_AT_GNU_vector = 0x2107,
332169689Skan    /* VMS Extensions.  */
333169689Skan    DW_AT_VMS_rtnbeg_pd_address = 0x2201
334169689Skan  };
335169689Skan
336169689Skan#define DW_AT_lo_user	0x2000	/* Implementation-defined range start.  */
337169689Skan#define DW_AT_hi_user	0x3ff0	/* Implementation-defined range end.  */
338169689Skan
339169689Skan/* Location atom names and codes.  */
340169689Skanenum dwarf_location_atom
341169689Skan  {
342169689Skan    DW_OP_addr = 0x03,
343169689Skan    DW_OP_deref = 0x06,
344169689Skan    DW_OP_const1u = 0x08,
345169689Skan    DW_OP_const1s = 0x09,
346169689Skan    DW_OP_const2u = 0x0a,
347169689Skan    DW_OP_const2s = 0x0b,
348169689Skan    DW_OP_const4u = 0x0c,
349169689Skan    DW_OP_const4s = 0x0d,
350169689Skan    DW_OP_const8u = 0x0e,
351169689Skan    DW_OP_const8s = 0x0f,
352169689Skan    DW_OP_constu = 0x10,
353169689Skan    DW_OP_consts = 0x11,
354169689Skan    DW_OP_dup = 0x12,
355169689Skan    DW_OP_drop = 0x13,
356169689Skan    DW_OP_over = 0x14,
357169689Skan    DW_OP_pick = 0x15,
358169689Skan    DW_OP_swap = 0x16,
359117395Skan    DW_OP_rot = 0x17,
360    DW_OP_xderef = 0x18,
361    DW_OP_abs = 0x19,
362    DW_OP_and = 0x1a,
363    DW_OP_div = 0x1b,
364    DW_OP_minus = 0x1c,
365    DW_OP_mod = 0x1d,
366    DW_OP_mul = 0x1e,
367    DW_OP_neg = 0x1f,
368    DW_OP_not = 0x20,
369    DW_OP_or = 0x21,
370    DW_OP_plus = 0x22,
371    DW_OP_plus_uconst = 0x23,
372    DW_OP_shl = 0x24,
373    DW_OP_shr = 0x25,
374    DW_OP_shra = 0x26,
375    DW_OP_xor = 0x27,
376    DW_OP_bra = 0x28,
377    DW_OP_eq = 0x29,
378    DW_OP_ge = 0x2a,
379    DW_OP_gt = 0x2b,
380    DW_OP_le = 0x2c,
381    DW_OP_lt = 0x2d,
382    DW_OP_ne = 0x2e,
383    DW_OP_skip = 0x2f,
384    DW_OP_lit0 = 0x30,
385    DW_OP_lit1 = 0x31,
386    DW_OP_lit2 = 0x32,
387    DW_OP_lit3 = 0x33,
388    DW_OP_lit4 = 0x34,
389    DW_OP_lit5 = 0x35,
390    DW_OP_lit6 = 0x36,
391    DW_OP_lit7 = 0x37,
392    DW_OP_lit8 = 0x38,
393    DW_OP_lit9 = 0x39,
394    DW_OP_lit10 = 0x3a,
395    DW_OP_lit11 = 0x3b,
396    DW_OP_lit12 = 0x3c,
397    DW_OP_lit13 = 0x3d,
398    DW_OP_lit14 = 0x3e,
399    DW_OP_lit15 = 0x3f,
400    DW_OP_lit16 = 0x40,
401    DW_OP_lit17 = 0x41,
402    DW_OP_lit18 = 0x42,
403    DW_OP_lit19 = 0x43,
404    DW_OP_lit20 = 0x44,
405    DW_OP_lit21 = 0x45,
406    DW_OP_lit22 = 0x46,
407    DW_OP_lit23 = 0x47,
408    DW_OP_lit24 = 0x48,
409    DW_OP_lit25 = 0x49,
410    DW_OP_lit26 = 0x4a,
411    DW_OP_lit27 = 0x4b,
412    DW_OP_lit28 = 0x4c,
413    DW_OP_lit29 = 0x4d,
414    DW_OP_lit30 = 0x4e,
415    DW_OP_lit31 = 0x4f,
416    DW_OP_reg0 = 0x50,
417    DW_OP_reg1 = 0x51,
418    DW_OP_reg2 = 0x52,
419    DW_OP_reg3 = 0x53,
420    DW_OP_reg4 = 0x54,
421    DW_OP_reg5 = 0x55,
422    DW_OP_reg6 = 0x56,
423    DW_OP_reg7 = 0x57,
424    DW_OP_reg8 = 0x58,
425    DW_OP_reg9 = 0x59,
426    DW_OP_reg10 = 0x5a,
427    DW_OP_reg11 = 0x5b,
428    DW_OP_reg12 = 0x5c,
429    DW_OP_reg13 = 0x5d,
430    DW_OP_reg14 = 0x5e,
431    DW_OP_reg15 = 0x5f,
432    DW_OP_reg16 = 0x60,
433    DW_OP_reg17 = 0x61,
434    DW_OP_reg18 = 0x62,
435    DW_OP_reg19 = 0x63,
436    DW_OP_reg20 = 0x64,
437    DW_OP_reg21 = 0x65,
438    DW_OP_reg22 = 0x66,
439    DW_OP_reg23 = 0x67,
440    DW_OP_reg24 = 0x68,
441    DW_OP_reg25 = 0x69,
442    DW_OP_reg26 = 0x6a,
443    DW_OP_reg27 = 0x6b,
444    DW_OP_reg28 = 0x6c,
445    DW_OP_reg29 = 0x6d,
446    DW_OP_reg30 = 0x6e,
447    DW_OP_reg31 = 0x6f,
448    DW_OP_breg0 = 0x70,
449    DW_OP_breg1 = 0x71,
450    DW_OP_breg2 = 0x72,
451    DW_OP_breg3 = 0x73,
452    DW_OP_breg4 = 0x74,
453    DW_OP_breg5 = 0x75,
454    DW_OP_breg6 = 0x76,
455    DW_OP_breg7 = 0x77,
456    DW_OP_breg8 = 0x78,
457    DW_OP_breg9 = 0x79,
458    DW_OP_breg10 = 0x7a,
459    DW_OP_breg11 = 0x7b,
460    DW_OP_breg12 = 0x7c,
461    DW_OP_breg13 = 0x7d,
462    DW_OP_breg14 = 0x7e,
463    DW_OP_breg15 = 0x7f,
464    DW_OP_breg16 = 0x80,
465    DW_OP_breg17 = 0x81,
466    DW_OP_breg18 = 0x82,
467    DW_OP_breg19 = 0x83,
468    DW_OP_breg20 = 0x84,
469    DW_OP_breg21 = 0x85,
470    DW_OP_breg22 = 0x86,
471    DW_OP_breg23 = 0x87,
472    DW_OP_breg24 = 0x88,
473    DW_OP_breg25 = 0x89,
474    DW_OP_breg26 = 0x8a,
475    DW_OP_breg27 = 0x8b,
476    DW_OP_breg28 = 0x8c,
477    DW_OP_breg29 = 0x8d,
478    DW_OP_breg30 = 0x8e,
479    DW_OP_breg31 = 0x8f,
480    DW_OP_regx = 0x90,
481    DW_OP_fbreg = 0x91,
482    DW_OP_bregx = 0x92,
483    DW_OP_piece = 0x93,
484    DW_OP_deref_size = 0x94,
485    DW_OP_xderef_size = 0x95,
486    DW_OP_nop = 0x96,
487    /* DWARF 3 extensions.  */
488    DW_OP_push_object_address = 0x97,
489    DW_OP_call2 = 0x98,
490    DW_OP_call4 = 0x99,
491    DW_OP_calli = 0x9a
492  };
493
494#define DW_OP_lo_user	0x80	/* Implementation-defined range start.  */
495#define DW_OP_hi_user	0xff	/* Implementation-defined range end.  */
496
497/* Type encodings.  */
498enum dwarf_type
499  {
500    DW_ATE_void = 0x0,
501    DW_ATE_address = 0x1,
502    DW_ATE_boolean = 0x2,
503    DW_ATE_complex_float = 0x3,
504    DW_ATE_float = 0x4,
505    DW_ATE_signed = 0x5,
506    DW_ATE_signed_char = 0x6,
507    DW_ATE_unsigned = 0x7,
508    DW_ATE_unsigned_char = 0x8,
509    /* DWARF 3.  */
510    DW_ATE_imaginary_float = 0x9
511  };
512
513#define	DW_ATE_lo_user 0x80
514#define	DW_ATE_hi_user 0xff
515
516/* Array ordering names and codes.  */
517enum dwarf_array_dim_ordering
518  {
519    DW_ORD_row_major = 0,
520    DW_ORD_col_major = 1
521  };
522
523/* Access attribute.  */
524enum dwarf_access_attribute
525  {
526    DW_ACCESS_public = 1,
527    DW_ACCESS_protected = 2,
528    DW_ACCESS_private = 3
529  };
530
531/* Visibility.  */
532enum dwarf_visibility_attribute
533  {
534    DW_VIS_local = 1,
535    DW_VIS_exported = 2,
536    DW_VIS_qualified = 3
537  };
538
539/* Virtuality.  */
540enum dwarf_virtuality_attribute
541  {
542    DW_VIRTUALITY_none = 0,
543    DW_VIRTUALITY_virtual = 1,
544    DW_VIRTUALITY_pure_virtual = 2
545  };
546
547/* Case sensitivity.  */
548enum dwarf_id_case
549  {
550    DW_ID_case_sensitive = 0,
551    DW_ID_up_case = 1,
552    DW_ID_down_case = 2,
553    DW_ID_case_insensitive = 3
554  };
555
556/* Calling convention.  */
557enum dwarf_calling_convention
558  {
559    DW_CC_normal = 0x1,
560    DW_CC_program = 0x2,
561    DW_CC_nocall = 0x3
562  };
563
564#define DW_CC_lo_user 0x40
565#define DW_CC_hi_user 0xff
566
567/* Inline attribute.  */
568enum dwarf_inline_attribute
569  {
570    DW_INL_not_inlined = 0,
571    DW_INL_inlined = 1,
572    DW_INL_declared_not_inlined = 2,
573    DW_INL_declared_inlined = 3
574  };
575
576/* Discriminant lists.  */
577enum dwarf_discrim_list
578  {
579    DW_DSC_label = 0,
580    DW_DSC_range = 1
581  };
582
583/* Line number opcodes.  */
584enum dwarf_line_number_ops
585  {
586    DW_LNS_extended_op = 0,
587    DW_LNS_copy = 1,
588    DW_LNS_advance_pc = 2,
589    DW_LNS_advance_line = 3,
590    DW_LNS_set_file = 4,
591    DW_LNS_set_column = 5,
592    DW_LNS_negate_stmt = 6,
593    DW_LNS_set_basic_block = 7,
594    DW_LNS_const_add_pc = 8,
595    DW_LNS_fixed_advance_pc = 9,
596    /* DWARF 3.  */
597    DW_LNS_set_prologue_end = 10,
598    DW_LNS_set_epilogue_begin = 11,
599    DW_LNS_set_isa = 12
600  };
601
602/* Line number extended opcodes.  */
603enum dwarf_line_number_x_ops
604  {
605    DW_LNE_end_sequence = 1,
606    DW_LNE_set_address = 2,
607    DW_LNE_define_file = 3
608  };
609
610/* Call frame information.  */
611enum dwarf_call_frame_info
612  {
613    DW_CFA_advance_loc = 0x40,
614    DW_CFA_offset = 0x80,
615    DW_CFA_restore = 0xc0,
616    DW_CFA_nop = 0x00,
617    DW_CFA_set_loc = 0x01,
618    DW_CFA_advance_loc1 = 0x02,
619    DW_CFA_advance_loc2 = 0x03,
620    DW_CFA_advance_loc4 = 0x04,
621    DW_CFA_offset_extended = 0x05,
622    DW_CFA_restore_extended = 0x06,
623    DW_CFA_undefined = 0x07,
624    DW_CFA_same_value = 0x08,
625    DW_CFA_register = 0x09,
626    DW_CFA_remember_state = 0x0a,
627    DW_CFA_restore_state = 0x0b,
628    DW_CFA_def_cfa = 0x0c,
629    DW_CFA_def_cfa_register = 0x0d,
630    DW_CFA_def_cfa_offset = 0x0e,
631
632    /* DWARF 3.  */
633    DW_CFA_def_cfa_expression = 0x0f,
634    DW_CFA_expression = 0x10,
635    DW_CFA_offset_extended_sf = 0x11,
636    DW_CFA_def_cfa_sf = 0x12,
637    DW_CFA_def_cfa_offset_sf = 0x13,
638
639    /* SGI/MIPS specific.  */
640    DW_CFA_MIPS_advance_loc8 = 0x1d,
641
642    /* GNU extensions.  */
643    DW_CFA_GNU_window_save = 0x2d,
644    DW_CFA_GNU_args_size = 0x2e,
645    DW_CFA_GNU_negative_offset_extended = 0x2f
646  };
647
648#define DW_CIE_ID	  0xffffffff
649#define DW_CIE_VERSION	  1
650
651#define DW_CFA_extended   0
652#define DW_CFA_lo_user    0x1c
653#define DW_CFA_hi_user    0x3f
654
655#define DW_CHILDREN_no		     0x00
656#define DW_CHILDREN_yes		     0x01
657
658#define DW_ADDR_none		0
659
660/* Source language names and codes.  */
661enum dwarf_source_language
662  {
663    DW_LANG_C89 = 0x0001,
664    DW_LANG_C = 0x0002,
665    DW_LANG_Ada83 = 0x0003,
666    DW_LANG_C_plus_plus = 0x0004,
667    DW_LANG_Cobol74 = 0x0005,
668    DW_LANG_Cobol85 = 0x0006,
669    DW_LANG_Fortran77 = 0x0007,
670    DW_LANG_Fortran90 = 0x0008,
671    DW_LANG_Pascal83 = 0x0009,
672    DW_LANG_Modula2 = 0x000a,
673    DW_LANG_Java = 0x000b,
674    /* DWARF 3.  */
675    DW_LANG_C99 = 0x000c,
676    DW_LANG_Ada95 = 0x000d,
677    DW_LANG_Fortran95 = 0x000e,
678    /* MIPS.  */
679    DW_LANG_Mips_Assembler = 0x8001
680  };
681
682
683#define DW_LANG_lo_user 0x8000	/* Implementation-defined range start.  */
684#define DW_LANG_hi_user 0xffff	/* Implementation-defined range start.  */
685
686/* Names and codes for macro information.  */
687enum dwarf_macinfo_record_type
688  {
689    DW_MACINFO_define = 1,
690    DW_MACINFO_undef = 2,
691    DW_MACINFO_start_file = 3,
692    DW_MACINFO_end_file = 4,
693    DW_MACINFO_vendor_ext = 255
694  };
695
696/* @@@ For use with GNU frame unwind information.  */
697
698#define DW_EH_PE_absptr		0x00
699#define DW_EH_PE_omit		0xff
700
701#define DW_EH_PE_uleb128	0x01
702#define DW_EH_PE_udata2		0x02
703#define DW_EH_PE_udata4		0x03
704#define DW_EH_PE_udata8		0x04
705#define DW_EH_PE_sleb128	0x09
706#define DW_EH_PE_sdata2		0x0A
707#define DW_EH_PE_sdata4		0x0B
708#define DW_EH_PE_sdata8		0x0C
709#define DW_EH_PE_signed		0x08
710
711#define DW_EH_PE_pcrel		0x10
712#define DW_EH_PE_textrel	0x20
713#define DW_EH_PE_datarel	0x30
714#define DW_EH_PE_funcrel	0x40
715#define DW_EH_PE_aligned	0x50
716
717#define DW_EH_PE_indirect	0x80
718
719#endif /* _ELF_DWARF2_H */
720