Back to index

cell-binutils  2.17cvs20070401
dwarf2.h
Go to the documentation of this file.
00001 /* Declarations and definitions of codes relating to the DWARF2 and
00002    DWARF3 symbolic debugging information formats.
00003    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
00004    2003, 2004, 2005, 2006 Free Software Foundation, Inc.
00005 
00006    Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
00007    Office (AJPO), Florida State University and Silicon Graphics Inc.
00008    provided support for this effort -- June 21, 1995.
00009 
00010    Derived from the DWARF 1 implementation written by Ron Guilmette
00011    (rfg@netcom.com), November 1990.
00012 
00013    This file is part of GCC.
00014 
00015    GCC is free software; you can redistribute it and/or modify it under
00016    the terms of the GNU General Public License as published by the Free
00017    Software Foundation; either version 2, or (at your option) any later
00018    version.
00019 
00020    GCC is distributed in the hope that it will be useful, but WITHOUT
00021    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
00022    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
00023    License for more details.
00024 
00025    You should have received a copy of the GNU General Public License
00026    along with GCC; see the file COPYING.  If not, write to the Free
00027    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
00028    02110-1301, USA.  */
00029 
00030 /* This file is derived from the DWARF specification (a public document)
00031    Revision 2.0.0 (July 27, 1993) developed by the UNIX International
00032    Programming Languages Special Interest Group (UI/PLSIG) and distributed
00033    by UNIX International.  Copies of this specification are available from
00034    UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
00035 
00036    This file also now contains definitions from the DWARF 3 specification.  */
00037 
00038 /* This file is shared between GCC and GDB, and should not contain
00039    prototypes.  */
00040 
00041 #ifndef _ELF_DWARF2_H
00042 #define _ELF_DWARF2_H
00043 
00044 /* Structure found in the .debug_line section.  */
00045 typedef struct
00046 {
00047   unsigned char li_length          [4];
00048   unsigned char li_version         [2];
00049   unsigned char li_prologue_length [4];
00050   unsigned char li_min_insn_length [1];
00051   unsigned char li_default_is_stmt [1];
00052   unsigned char li_line_base       [1];
00053   unsigned char li_line_range      [1];
00054   unsigned char li_opcode_base     [1];
00055 }
00056 DWARF2_External_LineInfo;
00057 
00058 typedef struct
00059 {
00060   unsigned long  li_length;
00061   unsigned short li_version;
00062   unsigned int   li_prologue_length;
00063   unsigned char  li_min_insn_length;
00064   unsigned char  li_default_is_stmt;
00065   int            li_line_base;
00066   unsigned char  li_line_range;
00067   unsigned char  li_opcode_base;
00068 }
00069 DWARF2_Internal_LineInfo;
00070 
00071 /* Structure found in .debug_pubnames section.  */
00072 typedef struct
00073 {
00074   unsigned char pn_length  [4];
00075   unsigned char pn_version [2];
00076   unsigned char pn_offset  [4];
00077   unsigned char pn_size    [4];
00078 }
00079 DWARF2_External_PubNames;
00080 
00081 typedef struct
00082 {
00083   unsigned long  pn_length;
00084   unsigned short pn_version;
00085   unsigned long  pn_offset;
00086   unsigned long  pn_size;
00087 }
00088 DWARF2_Internal_PubNames;
00089 
00090 /* Structure found in .debug_info section.  */
00091 typedef struct
00092 {
00093   unsigned char  cu_length        [4];
00094   unsigned char  cu_version       [2];
00095   unsigned char  cu_abbrev_offset [4];
00096   unsigned char  cu_pointer_size  [1];
00097 }
00098 DWARF2_External_CompUnit;
00099 
00100 typedef struct
00101 {
00102   unsigned long  cu_length;
00103   unsigned short cu_version;
00104   unsigned long  cu_abbrev_offset;
00105   unsigned char  cu_pointer_size;
00106 }
00107 DWARF2_Internal_CompUnit;
00108 
00109 typedef struct
00110 {
00111   unsigned char  ar_length       [4];
00112   unsigned char  ar_version      [2];
00113   unsigned char  ar_info_offset  [4];
00114   unsigned char  ar_pointer_size [1];
00115   unsigned char  ar_segment_size [1];
00116 }
00117 DWARF2_External_ARange;
00118 
00119 typedef struct
00120 {
00121   unsigned long  ar_length;
00122   unsigned short ar_version;
00123   unsigned long  ar_info_offset;
00124   unsigned char  ar_pointer_size;
00125   unsigned char  ar_segment_size;
00126 }
00127 DWARF2_Internal_ARange;
00128 
00129 
00130 /* Tag names and codes.  */
00131 enum dwarf_tag
00132   {
00133     DW_TAG_padding = 0x00,
00134     DW_TAG_array_type = 0x01,
00135     DW_TAG_class_type = 0x02,
00136     DW_TAG_entry_point = 0x03,
00137     DW_TAG_enumeration_type = 0x04,
00138     DW_TAG_formal_parameter = 0x05,
00139     DW_TAG_imported_declaration = 0x08,
00140     DW_TAG_label = 0x0a,
00141     DW_TAG_lexical_block = 0x0b,
00142     DW_TAG_member = 0x0d,
00143     DW_TAG_pointer_type = 0x0f,
00144     DW_TAG_reference_type = 0x10,
00145     DW_TAG_compile_unit = 0x11,
00146     DW_TAG_string_type = 0x12,
00147     DW_TAG_structure_type = 0x13,
00148     DW_TAG_subroutine_type = 0x15,
00149     DW_TAG_typedef = 0x16,
00150     DW_TAG_union_type = 0x17,
00151     DW_TAG_unspecified_parameters = 0x18,
00152     DW_TAG_variant = 0x19,
00153     DW_TAG_common_block = 0x1a,
00154     DW_TAG_common_inclusion = 0x1b,
00155     DW_TAG_inheritance = 0x1c,
00156     DW_TAG_inlined_subroutine = 0x1d,
00157     DW_TAG_module = 0x1e,
00158     DW_TAG_ptr_to_member_type = 0x1f,
00159     DW_TAG_set_type = 0x20,
00160     DW_TAG_subrange_type = 0x21,
00161     DW_TAG_with_stmt = 0x22,
00162     DW_TAG_access_declaration = 0x23,
00163     DW_TAG_base_type = 0x24,
00164     DW_TAG_catch_block = 0x25,
00165     DW_TAG_const_type = 0x26,
00166     DW_TAG_constant = 0x27,
00167     DW_TAG_enumerator = 0x28,
00168     DW_TAG_file_type = 0x29,
00169     DW_TAG_friend = 0x2a,
00170     DW_TAG_namelist = 0x2b,
00171     DW_TAG_namelist_item = 0x2c,
00172     DW_TAG_packed_type = 0x2d,
00173     DW_TAG_subprogram = 0x2e,
00174     DW_TAG_template_type_param = 0x2f,
00175     DW_TAG_template_value_param = 0x30,
00176     DW_TAG_thrown_type = 0x31,
00177     DW_TAG_try_block = 0x32,
00178     DW_TAG_variant_part = 0x33,
00179     DW_TAG_variable = 0x34,
00180     DW_TAG_volatile_type = 0x35,
00181     /* DWARF 3.  */
00182     DW_TAG_dwarf_procedure = 0x36,
00183     DW_TAG_restrict_type = 0x37,
00184     DW_TAG_interface_type = 0x38,
00185     DW_TAG_namespace = 0x39,
00186     DW_TAG_imported_module = 0x3a,
00187     DW_TAG_unspecified_type = 0x3b,
00188     DW_TAG_partial_unit = 0x3c,
00189     DW_TAG_imported_unit = 0x3d,
00190     DW_TAG_condition = 0x3f,
00191     DW_TAG_shared_type = 0x40,
00192     /* SGI/MIPS Extensions.  */
00193     DW_TAG_MIPS_loop = 0x4081,
00194     /* HP extensions.  See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz .  */
00195     DW_TAG_HP_array_descriptor = 0x4090,
00196     /* GNU extensions.  */
00197     DW_TAG_format_label = 0x4101,  /* For FORTRAN 77 and Fortran 90.  */
00198     DW_TAG_function_template = 0x4102,    /* For C++.  */
00199     DW_TAG_class_template = 0x4103,       /* For C++.  */
00200     DW_TAG_GNU_BINCL = 0x4104,
00201     DW_TAG_GNU_EINCL = 0x4105,
00202     /* Extensions for UPC.  See: http://upc.gwu.edu/~upc.  */
00203     DW_TAG_upc_shared_type = 0x8765,
00204     DW_TAG_upc_strict_type = 0x8766,
00205     DW_TAG_upc_relaxed_type = 0x8767,
00206     /* PGI (STMicroelectronics) extensions.  No documentation available.  */
00207     DW_TAG_PGI_kanji_type      = 0xA000,
00208     DW_TAG_PGI_interface_block = 0xA020
00209   };
00210 
00211 #define DW_TAG_lo_user      0x4080
00212 #define DW_TAG_hi_user      0xffff
00213 
00214 /* Flag that tells whether entry has a child or not.  */
00215 #define DW_children_no   0
00216 #define       DW_children_yes  1
00217 
00218 /* Form names and codes.  */
00219 enum dwarf_form
00220   {
00221     DW_FORM_addr = 0x01,
00222     DW_FORM_block2 = 0x03,
00223     DW_FORM_block4 = 0x04,
00224     DW_FORM_data2 = 0x05,
00225     DW_FORM_data4 = 0x06,
00226     DW_FORM_data8 = 0x07,
00227     DW_FORM_string = 0x08,
00228     DW_FORM_block = 0x09,
00229     DW_FORM_block1 = 0x0a,
00230     DW_FORM_data1 = 0x0b,
00231     DW_FORM_flag = 0x0c,
00232     DW_FORM_sdata = 0x0d,
00233     DW_FORM_strp = 0x0e,
00234     DW_FORM_udata = 0x0f,
00235     DW_FORM_ref_addr = 0x10,
00236     DW_FORM_ref1 = 0x11,
00237     DW_FORM_ref2 = 0x12,
00238     DW_FORM_ref4 = 0x13,
00239     DW_FORM_ref8 = 0x14,
00240     DW_FORM_ref_udata = 0x15,
00241     DW_FORM_indirect = 0x16
00242   };
00243 
00244 /* Attribute names and codes.  */
00245 enum dwarf_attribute
00246   {
00247     DW_AT_sibling = 0x01,
00248     DW_AT_location = 0x02,
00249     DW_AT_name = 0x03,
00250     DW_AT_ordering = 0x09,
00251     DW_AT_subscr_data = 0x0a,
00252     DW_AT_byte_size = 0x0b,
00253     DW_AT_bit_offset = 0x0c,
00254     DW_AT_bit_size = 0x0d,
00255     DW_AT_element_list = 0x0f,
00256     DW_AT_stmt_list = 0x10,
00257     DW_AT_low_pc = 0x11,
00258     DW_AT_high_pc = 0x12,
00259     DW_AT_language = 0x13,
00260     DW_AT_member = 0x14,
00261     DW_AT_discr = 0x15,
00262     DW_AT_discr_value = 0x16,
00263     DW_AT_visibility = 0x17,
00264     DW_AT_import = 0x18,
00265     DW_AT_string_length = 0x19,
00266     DW_AT_common_reference = 0x1a,
00267     DW_AT_comp_dir = 0x1b,
00268     DW_AT_const_value = 0x1c,
00269     DW_AT_containing_type = 0x1d,
00270     DW_AT_default_value = 0x1e,
00271     DW_AT_inline = 0x20,
00272     DW_AT_is_optional = 0x21,
00273     DW_AT_lower_bound = 0x22,
00274     DW_AT_producer = 0x25,
00275     DW_AT_prototyped = 0x27,
00276     DW_AT_return_addr = 0x2a,
00277     DW_AT_start_scope = 0x2c,
00278     DW_AT_stride_size = 0x2e,
00279     DW_AT_upper_bound = 0x2f,
00280     DW_AT_abstract_origin = 0x31,
00281     DW_AT_accessibility = 0x32,
00282     DW_AT_address_class = 0x33,
00283     DW_AT_artificial = 0x34,
00284     DW_AT_base_types = 0x35,
00285     DW_AT_calling_convention = 0x36,
00286     DW_AT_count = 0x37,
00287     DW_AT_data_member_location = 0x38,
00288     DW_AT_decl_column = 0x39,
00289     DW_AT_decl_file = 0x3a,
00290     DW_AT_decl_line = 0x3b,
00291     DW_AT_declaration = 0x3c,
00292     DW_AT_discr_list = 0x3d,
00293     DW_AT_encoding = 0x3e,
00294     DW_AT_external = 0x3f,
00295     DW_AT_frame_base = 0x40,
00296     DW_AT_friend = 0x41,
00297     DW_AT_identifier_case = 0x42,
00298     DW_AT_macro_info = 0x43,
00299     DW_AT_namelist_items = 0x44,
00300     DW_AT_priority = 0x45,
00301     DW_AT_segment = 0x46,
00302     DW_AT_specification = 0x47,
00303     DW_AT_static_link = 0x48,
00304     DW_AT_type = 0x49,
00305     DW_AT_use_location = 0x4a,
00306     DW_AT_variable_parameter = 0x4b,
00307     DW_AT_virtuality = 0x4c,
00308     DW_AT_vtable_elem_location = 0x4d,
00309     /* DWARF 3 values.  */
00310     DW_AT_allocated     = 0x4e,
00311     DW_AT_associated    = 0x4f,
00312     DW_AT_data_location = 0x50,
00313     DW_AT_stride        = 0x51,
00314     DW_AT_entry_pc      = 0x52,
00315     DW_AT_use_UTF8      = 0x53,
00316     DW_AT_extension     = 0x54,
00317     DW_AT_ranges        = 0x55,
00318     DW_AT_trampoline    = 0x56,
00319     DW_AT_call_column   = 0x57,
00320     DW_AT_call_file     = 0x58,
00321     DW_AT_call_line     = 0x59,
00322     DW_AT_description   = 0x5a,
00323     DW_AT_binary_scale  = 0x5b,
00324     DW_AT_decimal_scale = 0x5c,
00325     DW_AT_small         = 0x5d,
00326     DW_AT_decimal_sign  = 0x5e,
00327     DW_AT_digit_count   = 0x5f,
00328     DW_AT_picture_string = 0x60,
00329     DW_AT_mutable       = 0x61,
00330     DW_AT_threads_scaled = 0x62,
00331     DW_AT_explicit      = 0x63,
00332     DW_AT_object_pointer = 0x64,
00333     DW_AT_endianity     = 0x65,
00334     DW_AT_elemental     = 0x66,
00335     DW_AT_pure          = 0x67,
00336     DW_AT_recursive     = 0x68,
00337     /* SGI/MIPS extensions.  */
00338     DW_AT_MIPS_fde = 0x2001,
00339     DW_AT_MIPS_loop_begin = 0x2002,
00340     DW_AT_MIPS_tail_loop_begin = 0x2003,
00341     DW_AT_MIPS_epilog_begin = 0x2004,
00342     DW_AT_MIPS_loop_unroll_factor = 0x2005,
00343     DW_AT_MIPS_software_pipeline_depth = 0x2006,
00344     DW_AT_MIPS_linkage_name = 0x2007,
00345     DW_AT_MIPS_stride = 0x2008,
00346     DW_AT_MIPS_abstract_name = 0x2009,
00347     DW_AT_MIPS_clone_origin = 0x200a,
00348     DW_AT_MIPS_has_inlines = 0x200b,
00349     /* HP extensions.  */
00350     DW_AT_HP_block_index         = 0x2000,
00351     DW_AT_HP_unmodifiable        = 0x2001, /* Same as DW_AT_MIPS_fde.  */
00352     DW_AT_HP_actuals_stmt_list   = 0x2010,
00353     DW_AT_HP_proc_per_section    = 0x2011,
00354     DW_AT_HP_raw_data_ptr        = 0x2012,
00355     DW_AT_HP_pass_by_reference   = 0x2013,
00356     DW_AT_HP_opt_level           = 0x2014,
00357     DW_AT_HP_prof_version_id     = 0x2015,
00358     DW_AT_HP_opt_flags           = 0x2016,
00359     DW_AT_HP_cold_region_low_pc  = 0x2017,
00360     DW_AT_HP_cold_region_high_pc = 0x2018,
00361     DW_AT_HP_all_variables_modifiable = 0x2019,
00362     DW_AT_HP_linkage_name        = 0x201a,
00363     DW_AT_HP_prof_flags          = 0x201b,  /* In comp unit of procs_info for -g.  */
00364     /* GNU extensions.  */
00365     DW_AT_sf_names   = 0x2101,
00366     DW_AT_src_info   = 0x2102,
00367     DW_AT_mac_info   = 0x2103,
00368     DW_AT_src_coords = 0x2104,
00369     DW_AT_body_begin = 0x2105,
00370     DW_AT_body_end   = 0x2106,
00371     DW_AT_GNU_vector = 0x2107,
00372     /* VMS extensions.  */
00373     DW_AT_VMS_rtnbeg_pd_address = 0x2201,
00374     /* UPC extension.  */
00375     DW_AT_upc_threads_scaled = 0x3210,
00376     /* PGI (STMicroelectronics) extensions.  */
00377     DW_AT_PGI_lbase    = 0x3a00,
00378     DW_AT_PGI_soffset  = 0x3a01,
00379     DW_AT_PGI_lstride  = 0x3a02
00380   };
00381 
00382 #define DW_AT_lo_user       0x2000 /* Implementation-defined range start.  */
00383 #define DW_AT_hi_user       0x3ff0 /* Implementation-defined range end.  */
00384 
00385 /* Location atom names and codes.  */
00386 enum dwarf_location_atom
00387   {
00388     DW_OP_addr = 0x03,
00389     DW_OP_deref = 0x06,
00390     DW_OP_const1u = 0x08,
00391     DW_OP_const1s = 0x09,
00392     DW_OP_const2u = 0x0a,
00393     DW_OP_const2s = 0x0b,
00394     DW_OP_const4u = 0x0c,
00395     DW_OP_const4s = 0x0d,
00396     DW_OP_const8u = 0x0e,
00397     DW_OP_const8s = 0x0f,
00398     DW_OP_constu = 0x10,
00399     DW_OP_consts = 0x11,
00400     DW_OP_dup = 0x12,
00401     DW_OP_drop = 0x13,
00402     DW_OP_over = 0x14,
00403     DW_OP_pick = 0x15,
00404     DW_OP_swap = 0x16,
00405     DW_OP_rot = 0x17,
00406     DW_OP_xderef = 0x18,
00407     DW_OP_abs = 0x19,
00408     DW_OP_and = 0x1a,
00409     DW_OP_div = 0x1b,
00410     DW_OP_minus = 0x1c,
00411     DW_OP_mod = 0x1d,
00412     DW_OP_mul = 0x1e,
00413     DW_OP_neg = 0x1f,
00414     DW_OP_not = 0x20,
00415     DW_OP_or = 0x21,
00416     DW_OP_plus = 0x22,
00417     DW_OP_plus_uconst = 0x23,
00418     DW_OP_shl = 0x24,
00419     DW_OP_shr = 0x25,
00420     DW_OP_shra = 0x26,
00421     DW_OP_xor = 0x27,
00422     DW_OP_bra = 0x28,
00423     DW_OP_eq = 0x29,
00424     DW_OP_ge = 0x2a,
00425     DW_OP_gt = 0x2b,
00426     DW_OP_le = 0x2c,
00427     DW_OP_lt = 0x2d,
00428     DW_OP_ne = 0x2e,
00429     DW_OP_skip = 0x2f,
00430     DW_OP_lit0 = 0x30,
00431     DW_OP_lit1 = 0x31,
00432     DW_OP_lit2 = 0x32,
00433     DW_OP_lit3 = 0x33,
00434     DW_OP_lit4 = 0x34,
00435     DW_OP_lit5 = 0x35,
00436     DW_OP_lit6 = 0x36,
00437     DW_OP_lit7 = 0x37,
00438     DW_OP_lit8 = 0x38,
00439     DW_OP_lit9 = 0x39,
00440     DW_OP_lit10 = 0x3a,
00441     DW_OP_lit11 = 0x3b,
00442     DW_OP_lit12 = 0x3c,
00443     DW_OP_lit13 = 0x3d,
00444     DW_OP_lit14 = 0x3e,
00445     DW_OP_lit15 = 0x3f,
00446     DW_OP_lit16 = 0x40,
00447     DW_OP_lit17 = 0x41,
00448     DW_OP_lit18 = 0x42,
00449     DW_OP_lit19 = 0x43,
00450     DW_OP_lit20 = 0x44,
00451     DW_OP_lit21 = 0x45,
00452     DW_OP_lit22 = 0x46,
00453     DW_OP_lit23 = 0x47,
00454     DW_OP_lit24 = 0x48,
00455     DW_OP_lit25 = 0x49,
00456     DW_OP_lit26 = 0x4a,
00457     DW_OP_lit27 = 0x4b,
00458     DW_OP_lit28 = 0x4c,
00459     DW_OP_lit29 = 0x4d,
00460     DW_OP_lit30 = 0x4e,
00461     DW_OP_lit31 = 0x4f,
00462     DW_OP_reg0 = 0x50,
00463     DW_OP_reg1 = 0x51,
00464     DW_OP_reg2 = 0x52,
00465     DW_OP_reg3 = 0x53,
00466     DW_OP_reg4 = 0x54,
00467     DW_OP_reg5 = 0x55,
00468     DW_OP_reg6 = 0x56,
00469     DW_OP_reg7 = 0x57,
00470     DW_OP_reg8 = 0x58,
00471     DW_OP_reg9 = 0x59,
00472     DW_OP_reg10 = 0x5a,
00473     DW_OP_reg11 = 0x5b,
00474     DW_OP_reg12 = 0x5c,
00475     DW_OP_reg13 = 0x5d,
00476     DW_OP_reg14 = 0x5e,
00477     DW_OP_reg15 = 0x5f,
00478     DW_OP_reg16 = 0x60,
00479     DW_OP_reg17 = 0x61,
00480     DW_OP_reg18 = 0x62,
00481     DW_OP_reg19 = 0x63,
00482     DW_OP_reg20 = 0x64,
00483     DW_OP_reg21 = 0x65,
00484     DW_OP_reg22 = 0x66,
00485     DW_OP_reg23 = 0x67,
00486     DW_OP_reg24 = 0x68,
00487     DW_OP_reg25 = 0x69,
00488     DW_OP_reg26 = 0x6a,
00489     DW_OP_reg27 = 0x6b,
00490     DW_OP_reg28 = 0x6c,
00491     DW_OP_reg29 = 0x6d,
00492     DW_OP_reg30 = 0x6e,
00493     DW_OP_reg31 = 0x6f,
00494     DW_OP_breg0 = 0x70,
00495     DW_OP_breg1 = 0x71,
00496     DW_OP_breg2 = 0x72,
00497     DW_OP_breg3 = 0x73,
00498     DW_OP_breg4 = 0x74,
00499     DW_OP_breg5 = 0x75,
00500     DW_OP_breg6 = 0x76,
00501     DW_OP_breg7 = 0x77,
00502     DW_OP_breg8 = 0x78,
00503     DW_OP_breg9 = 0x79,
00504     DW_OP_breg10 = 0x7a,
00505     DW_OP_breg11 = 0x7b,
00506     DW_OP_breg12 = 0x7c,
00507     DW_OP_breg13 = 0x7d,
00508     DW_OP_breg14 = 0x7e,
00509     DW_OP_breg15 = 0x7f,
00510     DW_OP_breg16 = 0x80,
00511     DW_OP_breg17 = 0x81,
00512     DW_OP_breg18 = 0x82,
00513     DW_OP_breg19 = 0x83,
00514     DW_OP_breg20 = 0x84,
00515     DW_OP_breg21 = 0x85,
00516     DW_OP_breg22 = 0x86,
00517     DW_OP_breg23 = 0x87,
00518     DW_OP_breg24 = 0x88,
00519     DW_OP_breg25 = 0x89,
00520     DW_OP_breg26 = 0x8a,
00521     DW_OP_breg27 = 0x8b,
00522     DW_OP_breg28 = 0x8c,
00523     DW_OP_breg29 = 0x8d,
00524     DW_OP_breg30 = 0x8e,
00525     DW_OP_breg31 = 0x8f,
00526     DW_OP_regx = 0x90,
00527     DW_OP_fbreg = 0x91,
00528     DW_OP_bregx = 0x92,
00529     DW_OP_piece = 0x93,
00530     DW_OP_deref_size = 0x94,
00531     DW_OP_xderef_size = 0x95,
00532     DW_OP_nop = 0x96,
00533     /* DWARF 3 extensions.  */
00534     DW_OP_push_object_address = 0x97,
00535     DW_OP_call2 = 0x98,
00536     DW_OP_call4 = 0x99,
00537     DW_OP_call_ref = 0x9a,
00538     DW_OP_form_tls_address = 0x9b,
00539     DW_OP_call_frame_cfa = 0x9c,
00540     DW_OP_bit_piece = 0x9d,
00541     /* GNU extensions.  */
00542     DW_OP_GNU_push_tls_address = 0xe0,
00543     /* HP extensions.  */
00544     DW_OP_HP_unknown     = 0xe0, /* Ouch, the same as GNU_push_tls_address.  */
00545     DW_OP_HP_is_value    = 0xe1,
00546     DW_OP_HP_fltconst4   = 0xe2,
00547     DW_OP_HP_fltconst8   = 0xe3,
00548     DW_OP_HP_mod_range   = 0xe4,
00549     DW_OP_HP_unmod_range = 0xe5,
00550     DW_OP_HP_tls         = 0xe6
00551   };
00552 
00553 #define DW_OP_lo_user       0xe0   /* Implementation-defined range start.  */
00554 #define DW_OP_hi_user       0xff   /* Implementation-defined range end.  */
00555 
00556 /* Type encodings.  */
00557 enum dwarf_type
00558   {
00559     DW_ATE_void = 0x0,
00560     DW_ATE_address = 0x1,
00561     DW_ATE_boolean = 0x2,
00562     DW_ATE_complex_float = 0x3,
00563     DW_ATE_float = 0x4,
00564     DW_ATE_signed = 0x5,
00565     DW_ATE_signed_char = 0x6,
00566     DW_ATE_unsigned = 0x7,
00567     DW_ATE_unsigned_char = 0x8,
00568     /* DWARF 3.  */
00569     DW_ATE_imaginary_float = 0x9,
00570     DW_ATE_packed_decimal = 0xa,
00571     DW_ATE_numeric_string = 0xb,
00572     DW_ATE_edited = 0xc,
00573     DW_ATE_signed_fixed = 0xd,
00574     DW_ATE_unsigned_fixed = 0xe,
00575     DW_ATE_decimal_float = 0xf,
00576     /* HP extensions.  */
00577     DW_ATE_HP_float80            = 0x80, /* Floating-point (80 bit).  */
00578     DW_ATE_HP_complex_float80    = 0x81, /* Complex floating-point (80 bit).  */
00579     DW_ATE_HP_float128           = 0x82, /* Floating-point (128 bit).  */
00580     DW_ATE_HP_complex_float128   = 0x83, /* Complex floating-point (128 bit).  */
00581     DW_ATE_HP_floathpintel       = 0x84, /* Floating-point (82 bit IA64).  */
00582     DW_ATE_HP_imaginary_float80  = 0x85,
00583     DW_ATE_HP_imaginary_float128 = 0x86
00584   };
00585 
00586 #define       DW_ATE_lo_user 0x80
00587 #define       DW_ATE_hi_user 0xff
00588 
00589 /* Decimal sign encodings.  */
00590 enum dwarf_decimal_sign_encoding
00591   {
00592     /* DWARF 3.  */
00593     DW_DS_unsigned = 0x01,
00594     DW_DS_leading_overpunch = 0x02,
00595     DW_DS_trailing_overpunch = 0x03,
00596     DW_DS_leading_separate = 0x04,
00597     DW_DS_trailing_separate = 0x05
00598   };
00599 
00600 /* Endianity encodings.  */
00601 enum dwarf_endianity_encoding
00602   {
00603     /* DWARF 3.  */
00604     DW_END_default = 0x00,
00605     DW_END_big = 0x01,
00606     DW_END_little = 0x02
00607   };
00608 
00609 #define DW_END_lo_user 0x40
00610 #define DW_END_hi_user 0xff
00611 
00612 /* Array ordering names and codes.  */
00613 enum dwarf_array_dim_ordering
00614   {
00615     DW_ORD_row_major = 0,
00616     DW_ORD_col_major = 1
00617   };
00618 
00619 /* Access attribute.  */
00620 enum dwarf_access_attribute
00621   {
00622     DW_ACCESS_public = 1,
00623     DW_ACCESS_protected = 2,
00624     DW_ACCESS_private = 3
00625   };
00626 
00627 /* Visibility.  */
00628 enum dwarf_visibility_attribute
00629   {
00630     DW_VIS_local = 1,
00631     DW_VIS_exported = 2,
00632     DW_VIS_qualified = 3
00633   };
00634 
00635 /* Virtuality.  */
00636 enum dwarf_virtuality_attribute
00637   {
00638     DW_VIRTUALITY_none = 0,
00639     DW_VIRTUALITY_virtual = 1,
00640     DW_VIRTUALITY_pure_virtual = 2
00641   };
00642 
00643 /* Case sensitivity.  */
00644 enum dwarf_id_case
00645   {
00646     DW_ID_case_sensitive = 0,
00647     DW_ID_up_case = 1,
00648     DW_ID_down_case = 2,
00649     DW_ID_case_insensitive = 3
00650   };
00651 
00652 /* Calling convention.  */
00653 enum dwarf_calling_convention
00654   {
00655     DW_CC_normal = 0x1,
00656     DW_CC_program = 0x2,
00657     DW_CC_nocall = 0x3,
00658     DW_CC_GNU_renesas_sh = 0x40
00659   };
00660 
00661 #define DW_CC_lo_user 0x40
00662 #define DW_CC_hi_user 0xff
00663 
00664 /* Inline attribute.  */
00665 enum dwarf_inline_attribute
00666   {
00667     DW_INL_not_inlined = 0,
00668     DW_INL_inlined = 1,
00669     DW_INL_declared_not_inlined = 2,
00670     DW_INL_declared_inlined = 3
00671   };
00672 
00673 /* Discriminant lists.  */
00674 enum dwarf_discrim_list
00675   {
00676     DW_DSC_label = 0,
00677     DW_DSC_range = 1
00678   };
00679 
00680 /* Line number opcodes.  */
00681 enum dwarf_line_number_ops
00682   {
00683     DW_LNS_extended_op = 0,
00684     DW_LNS_copy = 1,
00685     DW_LNS_advance_pc = 2,
00686     DW_LNS_advance_line = 3,
00687     DW_LNS_set_file = 4,
00688     DW_LNS_set_column = 5,
00689     DW_LNS_negate_stmt = 6,
00690     DW_LNS_set_basic_block = 7,
00691     DW_LNS_const_add_pc = 8,
00692     DW_LNS_fixed_advance_pc = 9,
00693     /* DWARF 3.  */
00694     DW_LNS_set_prologue_end = 10,
00695     DW_LNS_set_epilogue_begin = 11,
00696     DW_LNS_set_isa = 12
00697   };
00698 
00699 /* Line number extended opcodes.  */
00700 enum dwarf_line_number_x_ops
00701   {
00702     DW_LNE_end_sequence = 1,
00703     DW_LNE_set_address = 2,
00704     DW_LNE_define_file = 3,
00705     /* HP extensions.  */
00706     DW_LNE_HP_negate_is_UV_update      = 0x11,
00707     DW_LNE_HP_push_context             = 0x12,
00708     DW_LNE_HP_pop_context              = 0x13,
00709     DW_LNE_HP_set_file_line_column     = 0x14,
00710     DW_LNE_HP_set_routine_name         = 0x15,
00711     DW_LNE_HP_set_sequence             = 0x16,
00712     DW_LNE_HP_negate_post_semantics    = 0x17,
00713     DW_LNE_HP_negate_function_exit     = 0x18,
00714     DW_LNE_HP_negate_front_end_logical = 0x19,
00715     DW_LNE_HP_define_proc              = 0x20
00716   };
00717 
00718 #define DW_LNE_lo_user 0x80
00719 #define DW_LNE_hi_user 0xff
00720 
00721 /* Call frame information.  */
00722 enum dwarf_call_frame_info
00723   {
00724     DW_CFA_advance_loc = 0x40,
00725     DW_CFA_offset = 0x80,
00726     DW_CFA_restore = 0xc0,
00727     DW_CFA_nop = 0x00,
00728     DW_CFA_set_loc = 0x01,
00729     DW_CFA_advance_loc1 = 0x02,
00730     DW_CFA_advance_loc2 = 0x03,
00731     DW_CFA_advance_loc4 = 0x04,
00732     DW_CFA_offset_extended = 0x05,
00733     DW_CFA_restore_extended = 0x06,
00734     DW_CFA_undefined = 0x07,
00735     DW_CFA_same_value = 0x08,
00736     DW_CFA_register = 0x09,
00737     DW_CFA_remember_state = 0x0a,
00738     DW_CFA_restore_state = 0x0b,
00739     DW_CFA_def_cfa = 0x0c,
00740     DW_CFA_def_cfa_register = 0x0d,
00741     DW_CFA_def_cfa_offset = 0x0e,
00742     /* DWARF 3.  */
00743     DW_CFA_def_cfa_expression = 0x0f,
00744     DW_CFA_expression = 0x10,
00745     DW_CFA_offset_extended_sf = 0x11,
00746     DW_CFA_def_cfa_sf = 0x12,
00747     DW_CFA_def_cfa_offset_sf = 0x13,
00748     DW_CFA_val_offset = 0x14,
00749     DW_CFA_val_offset_sf = 0x15,
00750     DW_CFA_val_expression = 0x16,
00751     /* SGI/MIPS specific.  */
00752     DW_CFA_MIPS_advance_loc8 = 0x1d,
00753     /* GNU extensions.  */
00754     DW_CFA_GNU_window_save = 0x2d,
00755     DW_CFA_GNU_args_size = 0x2e,
00756     DW_CFA_GNU_negative_offset_extended = 0x2f
00757   };
00758 
00759 #define DW_CIE_ID      0xffffffff
00760 #define DW_CIE_VERSION        1
00761 
00762 #define DW_CFA_extended   0
00763 #define DW_CFA_lo_user    0x1c
00764 #define DW_CFA_hi_user    0x3f
00765 
00766 #define DW_CHILDREN_no                  0x00
00767 #define DW_CHILDREN_yes                 0x01
00768 
00769 #define DW_ADDR_none        0
00770 
00771 /* Source language names and codes.  */
00772 enum dwarf_source_language
00773   {
00774     DW_LANG_C89 = 0x0001,
00775     DW_LANG_C = 0x0002,
00776     DW_LANG_Ada83 = 0x0003,
00777     DW_LANG_C_plus_plus = 0x0004,
00778     DW_LANG_Cobol74 = 0x0005,
00779     DW_LANG_Cobol85 = 0x0006,
00780     DW_LANG_Fortran77 = 0x0007,
00781     DW_LANG_Fortran90 = 0x0008,
00782     DW_LANG_Pascal83 = 0x0009,
00783     DW_LANG_Modula2 = 0x000a,
00784     /* DWARF 3.  */
00785     DW_LANG_Java = 0x000b,
00786     DW_LANG_C99 = 0x000c,
00787     DW_LANG_Ada95 = 0x000d,
00788     DW_LANG_Fortran95 = 0x000e,
00789     DW_LANG_PLI = 0x000f,
00790     DW_LANG_ObjC = 0x0010,
00791     DW_LANG_ObjC_plus_plus = 0x0011,
00792     DW_LANG_UPC = 0x0012,
00793     DW_LANG_D = 0x0013,
00794     /* MIPS.  */
00795     DW_LANG_Mips_Assembler = 0x8001,
00796     /* UPC.  */
00797     DW_LANG_Upc = 0x8765
00798   };
00799 
00800 #define DW_LANG_lo_user 0x8000     /* Implementation-defined range start.  */
00801 #define DW_LANG_hi_user 0xffff     /* Implementation-defined range start.  */
00802 
00803 /* Names and codes for macro information.  */
00804 enum dwarf_macinfo_record_type
00805   {
00806     DW_MACINFO_define = 1,
00807     DW_MACINFO_undef = 2,
00808     DW_MACINFO_start_file = 3,
00809     DW_MACINFO_end_file = 4,
00810     DW_MACINFO_vendor_ext = 255
00811   };
00812 
00813 /* @@@ For use with GNU frame unwind information.  */
00814 
00815 #define DW_EH_PE_absptr            0x00
00816 #define DW_EH_PE_omit              0xff
00817 
00818 #define DW_EH_PE_uleb128    0x01
00819 #define DW_EH_PE_udata2            0x02
00820 #define DW_EH_PE_udata4            0x03
00821 #define DW_EH_PE_udata8            0x04
00822 #define DW_EH_PE_sleb128    0x09
00823 #define DW_EH_PE_sdata2            0x0A
00824 #define DW_EH_PE_sdata4            0x0B
00825 #define DW_EH_PE_sdata8            0x0C
00826 #define DW_EH_PE_signed            0x08
00827 
00828 #define DW_EH_PE_pcrel             0x10
00829 #define DW_EH_PE_textrel    0x20
00830 #define DW_EH_PE_datarel    0x30
00831 #define DW_EH_PE_funcrel    0x40
00832 #define DW_EH_PE_aligned    0x50
00833 
00834 #define DW_EH_PE_indirect   0x80
00835 
00836 #endif /* _ELF_DWARF2_H */