Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* Declarations and definitions of codes relating to the DWARF2 and
  2.    DWARF3 symbolic debugging information formats.
  3.    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
  4.    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
  5.    Free Software Foundation, Inc.
  6.  
  7.    Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
  8.    Office (AJPO), Florida State University and Silicon Graphics Inc.
  9.    provided support for this effort -- June 21, 1995.
  10.  
  11.    Derived from the DWARF 1 implementation written by Ron Guilmette
  12.    (rfg@netcom.com), November 1990.
  13.  
  14.    This file is part of GCC.
  15.  
  16.    GCC is free software; you can redistribute it and/or modify it under
  17.    the terms of the GNU General Public License as published by the Free
  18.    Software Foundation; either version 3, or (at your option) any later
  19.    version.
  20.  
  21.    GCC is distributed in the hope that it will be useful, but WITHOUT
  22.    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  23.    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
  24.    License for more details.
  25.  
  26.    Under Section 7 of GPL version 3, you are granted additional
  27.    permissions described in the GCC Runtime Library Exception, version
  28.    3.1, as published by the Free Software Foundation.
  29.  
  30.    You should have received a copy of the GNU General Public License and
  31.    a copy of the GCC Runtime Library Exception along with this program;
  32.    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  33.    <http://www.gnu.org/licenses/>.  */
  34.  
  35. /* This file is derived from the DWARF specification (a public document)
  36.    Revision 2.0.0 (July 27, 1993) developed by the UNIX International
  37.    Programming Languages Special Interest Group (UI/PLSIG) and distributed
  38.    by UNIX International.  Copies of this specification are available from
  39.    UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
  40.  
  41.    This file also now contains definitions from the DWARF 3 specification
  42.    published Dec 20, 2005, available from: http://dwarf.freestandards.org.  */
  43.  
  44. /* This file is shared between GCC and GDB, and should not contain
  45.    prototypes.  */
  46.  
  47. #ifndef _ELF_DWARF2_H
  48. #define _ELF_DWARF2_H
  49.  
  50. /* Structure found in the .debug_line section.  */
  51. typedef struct
  52. {
  53.   unsigned char li_length          [4];
  54.   unsigned char li_version         [2];
  55.   unsigned char li_prologue_length [4];
  56.   unsigned char li_min_insn_length [1];
  57.   unsigned char li_default_is_stmt [1];
  58.   unsigned char li_line_base       [1];
  59.   unsigned char li_line_range      [1];
  60.   unsigned char li_opcode_base     [1];
  61. }
  62. DWARF2_External_LineInfo;
  63.  
  64. typedef struct
  65. {
  66.   unsigned long  li_length;
  67.   unsigned short li_version;
  68.   unsigned int   li_prologue_length;
  69.   unsigned char  li_min_insn_length;
  70.   unsigned char  li_max_ops_per_insn;
  71.   unsigned char  li_default_is_stmt;
  72.   int            li_line_base;
  73.   unsigned char  li_line_range;
  74.   unsigned char  li_opcode_base;
  75. }
  76. DWARF2_Internal_LineInfo;
  77.  
  78. /* Structure found in .debug_pubnames section.  */
  79. typedef struct
  80. {
  81.   unsigned char pn_length  [4];
  82.   unsigned char pn_version [2];
  83.   unsigned char pn_offset  [4];
  84.   unsigned char pn_size    [4];
  85. }
  86. DWARF2_External_PubNames;
  87.  
  88. typedef struct
  89. {
  90.   unsigned long  pn_length;
  91.   unsigned short pn_version;
  92.   unsigned long  pn_offset;
  93.   unsigned long  pn_size;
  94. }
  95. DWARF2_Internal_PubNames;
  96.  
  97. /* Structure found in .debug_info section.  */
  98. typedef struct
  99. {
  100.   unsigned char  cu_length        [4];
  101.   unsigned char  cu_version       [2];
  102.   unsigned char  cu_abbrev_offset [4];
  103.   unsigned char  cu_pointer_size  [1];
  104. }
  105. DWARF2_External_CompUnit;
  106.  
  107. typedef struct
  108. {
  109.   unsigned long  cu_length;
  110.   unsigned short cu_version;
  111.   unsigned long  cu_abbrev_offset;
  112.   unsigned char  cu_pointer_size;
  113. }
  114. DWARF2_Internal_CompUnit;
  115.  
  116. typedef struct
  117. {
  118.   unsigned char  ar_length       [4];
  119.   unsigned char  ar_version      [2];
  120.   unsigned char  ar_info_offset  [4];
  121.   unsigned char  ar_pointer_size [1];
  122.   unsigned char  ar_segment_size [1];
  123. }
  124. DWARF2_External_ARange;
  125.  
  126. typedef struct
  127. {
  128.   unsigned long  ar_length;
  129.   unsigned short ar_version;
  130.   unsigned long  ar_info_offset;
  131.   unsigned char  ar_pointer_size;
  132.   unsigned char  ar_segment_size;
  133. }
  134. DWARF2_Internal_ARange;
  135.  
  136.  
  137. /* Tag names and codes.  */
  138. enum dwarf_tag
  139.   {
  140.     DW_TAG_padding = 0x00,
  141.     DW_TAG_array_type = 0x01,
  142.     DW_TAG_class_type = 0x02,
  143.     DW_TAG_entry_point = 0x03,
  144.     DW_TAG_enumeration_type = 0x04,
  145.     DW_TAG_formal_parameter = 0x05,
  146.     DW_TAG_imported_declaration = 0x08,
  147.     DW_TAG_label = 0x0a,
  148.     DW_TAG_lexical_block = 0x0b,
  149.     DW_TAG_member = 0x0d,
  150.     DW_TAG_pointer_type = 0x0f,
  151.     DW_TAG_reference_type = 0x10,
  152.     DW_TAG_compile_unit = 0x11,
  153.     DW_TAG_string_type = 0x12,
  154.     DW_TAG_structure_type = 0x13,
  155.     DW_TAG_subroutine_type = 0x15,
  156.     DW_TAG_typedef = 0x16,
  157.     DW_TAG_union_type = 0x17,
  158.     DW_TAG_unspecified_parameters = 0x18,
  159.     DW_TAG_variant = 0x19,
  160.     DW_TAG_common_block = 0x1a,
  161.     DW_TAG_common_inclusion = 0x1b,
  162.     DW_TAG_inheritance = 0x1c,
  163.     DW_TAG_inlined_subroutine = 0x1d,
  164.     DW_TAG_module = 0x1e,
  165.     DW_TAG_ptr_to_member_type = 0x1f,
  166.     DW_TAG_set_type = 0x20,
  167.     DW_TAG_subrange_type = 0x21,
  168.     DW_TAG_with_stmt = 0x22,
  169.     DW_TAG_access_declaration = 0x23,
  170.     DW_TAG_base_type = 0x24,
  171.     DW_TAG_catch_block = 0x25,
  172.     DW_TAG_const_type = 0x26,
  173.     DW_TAG_constant = 0x27,
  174.     DW_TAG_enumerator = 0x28,
  175.     DW_TAG_file_type = 0x29,
  176.     DW_TAG_friend = 0x2a,
  177.     DW_TAG_namelist = 0x2b,
  178.     DW_TAG_namelist_item = 0x2c,
  179.     DW_TAG_packed_type = 0x2d,
  180.     DW_TAG_subprogram = 0x2e,
  181.     DW_TAG_template_type_param = 0x2f,
  182.     DW_TAG_template_value_param = 0x30,
  183.     DW_TAG_thrown_type = 0x31,
  184.     DW_TAG_try_block = 0x32,
  185.     DW_TAG_variant_part = 0x33,
  186.     DW_TAG_variable = 0x34,
  187.     DW_TAG_volatile_type = 0x35,
  188.     /* DWARF 3.  */
  189.     DW_TAG_dwarf_procedure = 0x36,
  190.     DW_TAG_restrict_type = 0x37,
  191.     DW_TAG_interface_type = 0x38,
  192.     DW_TAG_namespace = 0x39,
  193.     DW_TAG_imported_module = 0x3a,
  194.     DW_TAG_unspecified_type = 0x3b,
  195.     DW_TAG_partial_unit = 0x3c,
  196.     DW_TAG_imported_unit = 0x3d,
  197.     DW_TAG_condition = 0x3f,
  198.     DW_TAG_shared_type = 0x40,
  199.     /* DWARF 4.  */
  200.     DW_TAG_type_unit = 0x41,
  201.     DW_TAG_rvalue_reference_type = 0x42,
  202.     DW_TAG_template_alias = 0x43,
  203.  
  204.     DW_TAG_lo_user = 0x4080,
  205.     DW_TAG_hi_user = 0xffff,
  206.  
  207.     /* SGI/MIPS Extensions.  */
  208.     DW_TAG_MIPS_loop = 0x4081,
  209.     /* HP extensions.  See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz .  */
  210.     DW_TAG_HP_array_descriptor = 0x4090,
  211.     /* GNU extensions.  */
  212.     DW_TAG_format_label = 0x4101,       /* For FORTRAN 77 and Fortran 90.  */
  213.     DW_TAG_function_template = 0x4102/* For C++.  */
  214.     DW_TAG_class_template = 0x4103,     /* For C++.  */
  215.     DW_TAG_GNU_BINCL = 0x4104,
  216.     DW_TAG_GNU_EINCL = 0x4105,
  217.     /* Template template parameter.
  218.        See http://gcc.gnu.org/wiki/TemplateParmsDwarf .  */
  219.     DW_TAG_GNU_template_template_param = 0x4106,
  220.  
  221.     /* Template parameter pack extension, specified at
  222.        http://wiki.dwarfstd.org/index.php?title=C%2B%2B0x:_Variadic_templates
  223.        The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
  224.        are properly part of DWARF 5.  */
  225.     DW_TAG_GNU_template_parameter_pack = 0x4107,
  226.     DW_TAG_GNU_formal_parameter_pack = 0x4108,
  227.     /* Extensions for UPC.  See: http://upc.gwu.edu/~upc.  */
  228.     DW_TAG_upc_shared_type = 0x8765,
  229.     DW_TAG_upc_strict_type = 0x8766,
  230.     DW_TAG_upc_relaxed_type = 0x8767,
  231.     /* PGI (STMicroelectronics) extensions.  No documentation available.  */
  232.     DW_TAG_PGI_kanji_type      = 0xA000,
  233.     DW_TAG_PGI_interface_block = 0xA020
  234.   };
  235.  
  236. /* Flag that tells whether entry has a child or not.  */
  237. #define DW_children_no   0
  238. #define DW_children_yes  1
  239.  
  240. /* Form names and codes.  */
  241. enum dwarf_form
  242.   {
  243.     DW_FORM_addr = 0x01,
  244.     DW_FORM_block2 = 0x03,
  245.     DW_FORM_block4 = 0x04,
  246.     DW_FORM_data2 = 0x05,
  247.     DW_FORM_data4 = 0x06,
  248.     DW_FORM_data8 = 0x07,
  249.     DW_FORM_string = 0x08,
  250.     DW_FORM_block = 0x09,
  251.     DW_FORM_block1 = 0x0a,
  252.     DW_FORM_data1 = 0x0b,
  253.     DW_FORM_flag = 0x0c,
  254.     DW_FORM_sdata = 0x0d,
  255.     DW_FORM_strp = 0x0e,
  256.     DW_FORM_udata = 0x0f,
  257.     DW_FORM_ref_addr = 0x10,
  258.     DW_FORM_ref1 = 0x11,
  259.     DW_FORM_ref2 = 0x12,
  260.     DW_FORM_ref4 = 0x13,
  261.     DW_FORM_ref8 = 0x14,
  262.     DW_FORM_ref_udata = 0x15,
  263.     DW_FORM_indirect = 0x16,
  264.     /* DWARF 4.  */
  265.     DW_FORM_sec_offset = 0x17,
  266.     DW_FORM_exprloc = 0x18,
  267.     DW_FORM_flag_present = 0x19,
  268.     DW_FORM_ref_sig8 = 0x20
  269. #define DW_FORM_sig8  DW_FORM_ref_sig8  /* Note: The use of DW_FORM_sig8 is deprecated.  */
  270.   };
  271.  
  272. /* Attribute names and codes.  */
  273. enum dwarf_attribute
  274.   {
  275.     DW_AT_sibling = 0x01,
  276.     DW_AT_location = 0x02,
  277.     DW_AT_name = 0x03,
  278.     DW_AT_ordering = 0x09,
  279.     DW_AT_subscr_data = 0x0a,
  280.     DW_AT_byte_size = 0x0b,
  281.     DW_AT_bit_offset = 0x0c,
  282.     DW_AT_bit_size = 0x0d,
  283.     DW_AT_element_list = 0x0f,
  284.     DW_AT_stmt_list = 0x10,
  285.     DW_AT_low_pc = 0x11,
  286.     DW_AT_high_pc = 0x12,
  287.     DW_AT_language = 0x13,
  288.     DW_AT_member = 0x14,
  289.     DW_AT_discr = 0x15,
  290.     DW_AT_discr_value = 0x16,
  291.     DW_AT_visibility = 0x17,
  292.     DW_AT_import = 0x18,
  293.     DW_AT_string_length = 0x19,
  294.     DW_AT_common_reference = 0x1a,
  295.     DW_AT_comp_dir = 0x1b,
  296.     DW_AT_const_value = 0x1c,
  297.     DW_AT_containing_type = 0x1d,
  298.     DW_AT_default_value = 0x1e,
  299.     DW_AT_inline = 0x20,
  300.     DW_AT_is_optional = 0x21,
  301.     DW_AT_lower_bound = 0x22,
  302.     DW_AT_producer = 0x25,
  303.     DW_AT_prototyped = 0x27,
  304.     DW_AT_return_addr = 0x2a,
  305.     DW_AT_start_scope = 0x2c,
  306.     DW_AT_bit_stride = 0x2e,
  307. #define DW_AT_stride_size   DW_AT_bit_stride  /* Note: The use of DW_AT_stride_size is deprecated.  */
  308.     DW_AT_upper_bound = 0x2f,
  309.     DW_AT_abstract_origin = 0x31,
  310.     DW_AT_accessibility = 0x32,
  311.     DW_AT_address_class = 0x33,
  312.     DW_AT_artificial = 0x34,
  313.     DW_AT_base_types = 0x35,
  314.     DW_AT_calling_convention = 0x36,
  315.     DW_AT_count = 0x37,
  316.     DW_AT_data_member_location = 0x38,
  317.     DW_AT_decl_column = 0x39,
  318.     DW_AT_decl_file = 0x3a,
  319.     DW_AT_decl_line = 0x3b,
  320.     DW_AT_declaration = 0x3c,
  321.     DW_AT_discr_list = 0x3d,
  322.     DW_AT_encoding = 0x3e,
  323.     DW_AT_external = 0x3f,
  324.     DW_AT_frame_base = 0x40,
  325.     DW_AT_friend = 0x41,
  326.     DW_AT_identifier_case = 0x42,
  327.     DW_AT_macro_info = 0x43,
  328.     DW_AT_namelist_items = 0x44,
  329.     DW_AT_priority = 0x45,
  330.     DW_AT_segment = 0x46,
  331.     DW_AT_specification = 0x47,
  332.     DW_AT_static_link = 0x48,
  333.     DW_AT_type = 0x49,
  334.     DW_AT_use_location = 0x4a,
  335.     DW_AT_variable_parameter = 0x4b,
  336.     DW_AT_virtuality = 0x4c,
  337.     DW_AT_vtable_elem_location = 0x4d,
  338.     /* DWARF 3 values.  */
  339.     DW_AT_allocated     = 0x4e,
  340.     DW_AT_associated    = 0x4f,
  341.     DW_AT_data_location = 0x50,
  342.     DW_AT_byte_stride   = 0x51,
  343. #define DW_AT_stride   DW_AT_byte_stride  /* Note: The use of DW_AT_stride is deprecated.  */
  344.     DW_AT_entry_pc      = 0x52,
  345.     DW_AT_use_UTF8      = 0x53,
  346.     DW_AT_extension     = 0x54,
  347.     DW_AT_ranges        = 0x55,
  348.     DW_AT_trampoline    = 0x56,
  349.     DW_AT_call_column   = 0x57,
  350.     DW_AT_call_file     = 0x58,
  351.     DW_AT_call_line     = 0x59,
  352.     DW_AT_description   = 0x5a,
  353.     DW_AT_binary_scale  = 0x5b,
  354.     DW_AT_decimal_scale = 0x5c,
  355.     DW_AT_small         = 0x5d,
  356.     DW_AT_decimal_sign  = 0x5e,
  357.     DW_AT_digit_count   = 0x5f,
  358.     DW_AT_picture_string = 0x60,
  359.     DW_AT_mutable       = 0x61,
  360.     DW_AT_threads_scaled = 0x62,
  361.     DW_AT_explicit      = 0x63,
  362.     DW_AT_object_pointer = 0x64,
  363.     DW_AT_endianity     = 0x65,
  364.     DW_AT_elemental     = 0x66,
  365.     DW_AT_pure          = 0x67,
  366.     DW_AT_recursive     = 0x68,
  367.     /* DWARF 4.  */
  368.     DW_AT_signature       = 0x69,
  369.     DW_AT_main_subprogram = 0x6a,
  370.     DW_AT_data_bit_offset = 0x6b,
  371.     DW_AT_const_expr      = 0x6c,
  372.     DW_AT_enum_class      = 0x6d,
  373.     DW_AT_linkage_name    = 0x6e,
  374.  
  375.     DW_AT_lo_user = 0x2000,     /* Implementation-defined range start.  */
  376.     DW_AT_hi_user = 0x3ff0,     /* Implementation-defined range end.  */
  377.  
  378.     /* SGI/MIPS extensions.  */
  379.     DW_AT_MIPS_fde = 0x2001,
  380.     DW_AT_MIPS_loop_begin = 0x2002,
  381.     DW_AT_MIPS_tail_loop_begin = 0x2003,
  382.     DW_AT_MIPS_epilog_begin = 0x2004,
  383.     DW_AT_MIPS_loop_unroll_factor = 0x2005,
  384.     DW_AT_MIPS_software_pipeline_depth = 0x2006,
  385.     DW_AT_MIPS_linkage_name = 0x2007,
  386.     DW_AT_MIPS_stride = 0x2008,
  387.     DW_AT_MIPS_abstract_name = 0x2009,
  388.     DW_AT_MIPS_clone_origin = 0x200a,
  389.     DW_AT_MIPS_has_inlines = 0x200b,
  390.     /* HP extensions.  */
  391.     DW_AT_HP_block_index         = 0x2000,
  392.     DW_AT_HP_unmodifiable        = 0x2001, /* Same as DW_AT_MIPS_fde.  */
  393.     DW_AT_HP_actuals_stmt_list   = 0x2010,
  394.     DW_AT_HP_proc_per_section    = 0x2011,
  395.     DW_AT_HP_raw_data_ptr        = 0x2012,
  396.     DW_AT_HP_pass_by_reference   = 0x2013,
  397.     DW_AT_HP_opt_level           = 0x2014,
  398.     DW_AT_HP_prof_version_id     = 0x2015,
  399.     DW_AT_HP_opt_flags           = 0x2016,
  400.     DW_AT_HP_cold_region_low_pc  = 0x2017,
  401.     DW_AT_HP_cold_region_high_pc = 0x2018,
  402.     DW_AT_HP_all_variables_modifiable = 0x2019,
  403.     DW_AT_HP_linkage_name        = 0x201a,
  404.     DW_AT_HP_prof_flags          = 0x201b,  /* In comp unit of procs_info for -g.  */
  405.     /* GNU extensions.  */
  406.     DW_AT_sf_names   = 0x2101,
  407.     DW_AT_src_info   = 0x2102,
  408.     DW_AT_mac_info   = 0x2103,
  409.     DW_AT_src_coords = 0x2104,
  410.     DW_AT_body_begin = 0x2105,
  411.     DW_AT_body_end   = 0x2106,
  412.     DW_AT_GNU_vector = 0x2107,
  413.     /* Thread-safety annotations.
  414.        See http://gcc.gnu.org/wiki/ThreadSafetyAnnotation .  */
  415.     DW_AT_GNU_guarded_by    = 0x2108,
  416.     DW_AT_GNU_pt_guarded_by = 0x2109,
  417.     DW_AT_GNU_guarded       = 0x210a,
  418.     DW_AT_GNU_pt_guarded    = 0x210b,
  419.     DW_AT_GNU_locks_excluded = 0x210c,
  420.     DW_AT_GNU_exclusive_locks_required = 0x210d,
  421.     DW_AT_GNU_shared_locks_required = 0x210e,
  422.     /* One-definition rule violation detection.
  423.        See http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo .  */
  424.     DW_AT_GNU_odr_signature = 0x210f,
  425.     /* Template template argument name.
  426.        See http://gcc.gnu.org/wiki/TemplateParmsDwarf .  */
  427.     DW_AT_GNU_template_name = 0x2110,
  428.     /* VMS extensions.  */
  429.     DW_AT_VMS_rtnbeg_pd_address = 0x2201,
  430.     /* GNAT extensions.  */
  431.     /* GNAT descriptive type.
  432.        See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type .  */
  433.     DW_AT_use_GNAT_descriptive_type = 0x2301,
  434.     DW_AT_GNAT_descriptive_type = 0x2302,
  435.     /* UPC extension.  */
  436.     DW_AT_upc_threads_scaled = 0x3210,
  437.     /* PGI (STMicroelectronics) extensions.  */
  438.     DW_AT_PGI_lbase    = 0x3a00,
  439.     DW_AT_PGI_soffset  = 0x3a01,
  440.     DW_AT_PGI_lstride  = 0x3a02
  441.   };
  442.  
  443. /* Location atom names and codes.  */
  444. enum dwarf_location_atom
  445.   {
  446.     DW_OP_addr = 0x03,
  447.     DW_OP_deref = 0x06,
  448.     DW_OP_const1u = 0x08,
  449.     DW_OP_const1s = 0x09,
  450.     DW_OP_const2u = 0x0a,
  451.     DW_OP_const2s = 0x0b,
  452.     DW_OP_const4u = 0x0c,
  453.     DW_OP_const4s = 0x0d,
  454.     DW_OP_const8u = 0x0e,
  455.     DW_OP_const8s = 0x0f,
  456.     DW_OP_constu = 0x10,
  457.     DW_OP_consts = 0x11,
  458.     DW_OP_dup = 0x12,
  459.     DW_OP_drop = 0x13,
  460.     DW_OP_over = 0x14,
  461.     DW_OP_pick = 0x15,
  462.     DW_OP_swap = 0x16,
  463.     DW_OP_rot = 0x17,
  464.     DW_OP_xderef = 0x18,
  465.     DW_OP_abs = 0x19,
  466.     DW_OP_and = 0x1a,
  467.     DW_OP_div = 0x1b,
  468.     DW_OP_minus = 0x1c,
  469.     DW_OP_mod = 0x1d,
  470.     DW_OP_mul = 0x1e,
  471.     DW_OP_neg = 0x1f,
  472.     DW_OP_not = 0x20,
  473.     DW_OP_or = 0x21,
  474.     DW_OP_plus = 0x22,
  475.     DW_OP_plus_uconst = 0x23,
  476.     DW_OP_shl = 0x24,
  477.     DW_OP_shr = 0x25,
  478.     DW_OP_shra = 0x26,
  479.     DW_OP_xor = 0x27,
  480.     DW_OP_bra = 0x28,
  481.     DW_OP_eq = 0x29,
  482.     DW_OP_ge = 0x2a,
  483.     DW_OP_gt = 0x2b,
  484.     DW_OP_le = 0x2c,
  485.     DW_OP_lt = 0x2d,
  486.     DW_OP_ne = 0x2e,
  487.     DW_OP_skip = 0x2f,
  488.     DW_OP_lit0 = 0x30,
  489.     DW_OP_lit1 = 0x31,
  490.     DW_OP_lit2 = 0x32,
  491.     DW_OP_lit3 = 0x33,
  492.     DW_OP_lit4 = 0x34,
  493.     DW_OP_lit5 = 0x35,
  494.     DW_OP_lit6 = 0x36,
  495.     DW_OP_lit7 = 0x37,
  496.     DW_OP_lit8 = 0x38,
  497.     DW_OP_lit9 = 0x39,
  498.     DW_OP_lit10 = 0x3a,
  499.     DW_OP_lit11 = 0x3b,
  500.     DW_OP_lit12 = 0x3c,
  501.     DW_OP_lit13 = 0x3d,
  502.     DW_OP_lit14 = 0x3e,
  503.     DW_OP_lit15 = 0x3f,
  504.     DW_OP_lit16 = 0x40,
  505.     DW_OP_lit17 = 0x41,
  506.     DW_OP_lit18 = 0x42,
  507.     DW_OP_lit19 = 0x43,
  508.     DW_OP_lit20 = 0x44,
  509.     DW_OP_lit21 = 0x45,
  510.     DW_OP_lit22 = 0x46,
  511.     DW_OP_lit23 = 0x47,
  512.     DW_OP_lit24 = 0x48,
  513.     DW_OP_lit25 = 0x49,
  514.     DW_OP_lit26 = 0x4a,
  515.     DW_OP_lit27 = 0x4b,
  516.     DW_OP_lit28 = 0x4c,
  517.     DW_OP_lit29 = 0x4d,
  518.     DW_OP_lit30 = 0x4e,
  519.     DW_OP_lit31 = 0x4f,
  520.     DW_OP_reg0 = 0x50,
  521.     DW_OP_reg1 = 0x51,
  522.     DW_OP_reg2 = 0x52,
  523.     DW_OP_reg3 = 0x53,
  524.     DW_OP_reg4 = 0x54,
  525.     DW_OP_reg5 = 0x55,
  526.     DW_OP_reg6 = 0x56,
  527.     DW_OP_reg7 = 0x57,
  528.     DW_OP_reg8 = 0x58,
  529.     DW_OP_reg9 = 0x59,
  530.     DW_OP_reg10 = 0x5a,
  531.     DW_OP_reg11 = 0x5b,
  532.     DW_OP_reg12 = 0x5c,
  533.     DW_OP_reg13 = 0x5d,
  534.     DW_OP_reg14 = 0x5e,
  535.     DW_OP_reg15 = 0x5f,
  536.     DW_OP_reg16 = 0x60,
  537.     DW_OP_reg17 = 0x61,
  538.     DW_OP_reg18 = 0x62,
  539.     DW_OP_reg19 = 0x63,
  540.     DW_OP_reg20 = 0x64,
  541.     DW_OP_reg21 = 0x65,
  542.     DW_OP_reg22 = 0x66,
  543.     DW_OP_reg23 = 0x67,
  544.     DW_OP_reg24 = 0x68,
  545.     DW_OP_reg25 = 0x69,
  546.     DW_OP_reg26 = 0x6a,
  547.     DW_OP_reg27 = 0x6b,
  548.     DW_OP_reg28 = 0x6c,
  549.     DW_OP_reg29 = 0x6d,
  550.     DW_OP_reg30 = 0x6e,
  551.     DW_OP_reg31 = 0x6f,
  552.     DW_OP_breg0 = 0x70,
  553.     DW_OP_breg1 = 0x71,
  554.     DW_OP_breg2 = 0x72,
  555.     DW_OP_breg3 = 0x73,
  556.     DW_OP_breg4 = 0x74,
  557.     DW_OP_breg5 = 0x75,
  558.     DW_OP_breg6 = 0x76,
  559.     DW_OP_breg7 = 0x77,
  560.     DW_OP_breg8 = 0x78,
  561.     DW_OP_breg9 = 0x79,
  562.     DW_OP_breg10 = 0x7a,
  563.     DW_OP_breg11 = 0x7b,
  564.     DW_OP_breg12 = 0x7c,
  565.     DW_OP_breg13 = 0x7d,
  566.     DW_OP_breg14 = 0x7e,
  567.     DW_OP_breg15 = 0x7f,
  568.     DW_OP_breg16 = 0x80,
  569.     DW_OP_breg17 = 0x81,
  570.     DW_OP_breg18 = 0x82,
  571.     DW_OP_breg19 = 0x83,
  572.     DW_OP_breg20 = 0x84,
  573.     DW_OP_breg21 = 0x85,
  574.     DW_OP_breg22 = 0x86,
  575.     DW_OP_breg23 = 0x87,
  576.     DW_OP_breg24 = 0x88,
  577.     DW_OP_breg25 = 0x89,
  578.     DW_OP_breg26 = 0x8a,
  579.     DW_OP_breg27 = 0x8b,
  580.     DW_OP_breg28 = 0x8c,
  581.     DW_OP_breg29 = 0x8d,
  582.     DW_OP_breg30 = 0x8e,
  583.     DW_OP_breg31 = 0x8f,
  584.     DW_OP_regx = 0x90,
  585.     DW_OP_fbreg = 0x91,
  586.     DW_OP_bregx = 0x92,
  587.     DW_OP_piece = 0x93,
  588.     DW_OP_deref_size = 0x94,
  589.     DW_OP_xderef_size = 0x95,
  590.     DW_OP_nop = 0x96,
  591.     /* DWARF 3 extensions.  */
  592.     DW_OP_push_object_address = 0x97,
  593.     DW_OP_call2 = 0x98,
  594.     DW_OP_call4 = 0x99,
  595.     DW_OP_call_ref = 0x9a,
  596.     DW_OP_form_tls_address = 0x9b,
  597.     DW_OP_call_frame_cfa = 0x9c,
  598.     DW_OP_bit_piece = 0x9d,
  599.  
  600.     /* DWARF 4 extensions.  */
  601.     DW_OP_implicit_value = 0x9e,
  602.     DW_OP_stack_value = 0x9f,
  603.  
  604.     DW_OP_lo_user = 0xe0,       /* Implementation-defined range start.  */
  605.     DW_OP_hi_user = 0xff,       /* Implementation-defined range end.  */
  606.  
  607.     /* GNU extensions.  */
  608.     DW_OP_GNU_push_tls_address = 0xe0,
  609.     /* The following is for marking variables that are uninitialized.  */
  610.     DW_OP_GNU_uninit     = 0xf0,
  611.     DW_OP_GNU_encoded_addr = 0xf1,
  612.     /* HP extensions.  */
  613.     DW_OP_HP_unknown     = 0xe0, /* Ouch, the same as GNU_push_tls_address.  */
  614.     DW_OP_HP_is_value    = 0xe1,
  615.     DW_OP_HP_fltconst4   = 0xe2,
  616.     DW_OP_HP_fltconst8   = 0xe3,
  617.     DW_OP_HP_mod_range   = 0xe4,
  618.     DW_OP_HP_unmod_range = 0xe5,
  619.     DW_OP_HP_tls         = 0xe6,
  620.     /* PGI (STMicroelectronics) extensions.  */
  621.     DW_OP_PGI_omp_thread_num = 0xf8
  622.   };
  623.  
  624. /* Type encodings.  */
  625. enum dwarf_type
  626.   {
  627.     DW_ATE_void = 0x0,
  628.     DW_ATE_address = 0x1,
  629.     DW_ATE_boolean = 0x2,
  630.     DW_ATE_complex_float = 0x3,
  631.     DW_ATE_float = 0x4,
  632.     DW_ATE_signed = 0x5,
  633.     DW_ATE_signed_char = 0x6,
  634.     DW_ATE_unsigned = 0x7,
  635.     DW_ATE_unsigned_char = 0x8,
  636.     /* DWARF 3.  */
  637.     DW_ATE_imaginary_float = 0x9,
  638.     DW_ATE_packed_decimal = 0xa,
  639.     DW_ATE_numeric_string = 0xb,
  640.     DW_ATE_edited = 0xc,
  641.     DW_ATE_signed_fixed = 0xd,
  642.     DW_ATE_unsigned_fixed = 0xe,
  643.     DW_ATE_decimal_float = 0xf,
  644.  
  645.     DW_ATE_lo_user = 0x80,
  646.     DW_ATE_hi_user = 0xff,
  647.  
  648.     /* HP extensions.  */
  649.     DW_ATE_HP_float80            = 0x80, /* Floating-point (80 bit).  */
  650.     DW_ATE_HP_complex_float80    = 0x81, /* Complex floating-point (80 bit).  */
  651.     DW_ATE_HP_float128           = 0x82, /* Floating-point (128 bit).  */
  652.     DW_ATE_HP_complex_float128   = 0x83, /* Complex floating-point (128 bit).  */
  653.     DW_ATE_HP_floathpintel       = 0x84, /* Floating-point (82 bit IA64).  */
  654.     DW_ATE_HP_imaginary_float80  = 0x85,
  655.     DW_ATE_HP_imaginary_float128 = 0x86
  656.   };
  657.  
  658. /* Decimal sign encodings.  */
  659. enum dwarf_decimal_sign_encoding
  660.   {
  661.     /* DWARF 3.  */
  662.     DW_DS_unsigned = 0x01,
  663.     DW_DS_leading_overpunch = 0x02,
  664.     DW_DS_trailing_overpunch = 0x03,
  665.     DW_DS_leading_separate = 0x04,
  666.     DW_DS_trailing_separate = 0x05
  667.   };
  668.  
  669. /* Endianity encodings.  */
  670. enum dwarf_endianity_encoding
  671.   {
  672.     /* DWARF 3.  */
  673.     DW_END_default = 0x00,
  674.     DW_END_big = 0x01,
  675.     DW_END_little = 0x02,
  676.  
  677.     DW_END_lo_user = 0x40,
  678.     DW_END_hi_user = 0xff
  679.   };
  680.  
  681. /* Array ordering names and codes.  */
  682. enum dwarf_array_dim_ordering
  683.   {
  684.     DW_ORD_row_major = 0,
  685.     DW_ORD_col_major = 1
  686.   };
  687.  
  688. /* Access attribute.  */
  689. enum dwarf_access_attribute
  690.   {
  691.     DW_ACCESS_public = 1,
  692.     DW_ACCESS_protected = 2,
  693.     DW_ACCESS_private = 3
  694.   };
  695.  
  696. /* Visibility.  */
  697. enum dwarf_visibility_attribute
  698.   {
  699.     DW_VIS_local = 1,
  700.     DW_VIS_exported = 2,
  701.     DW_VIS_qualified = 3
  702.   };
  703.  
  704. /* Virtuality.  */
  705. enum dwarf_virtuality_attribute
  706.   {
  707.     DW_VIRTUALITY_none = 0,
  708.     DW_VIRTUALITY_virtual = 1,
  709.     DW_VIRTUALITY_pure_virtual = 2
  710.   };
  711.  
  712. /* Case sensitivity.  */
  713. enum dwarf_id_case
  714.   {
  715.     DW_ID_case_sensitive = 0,
  716.     DW_ID_up_case = 1,
  717.     DW_ID_down_case = 2,
  718.     DW_ID_case_insensitive = 3
  719.   };
  720.  
  721. /* Calling convention.  */
  722. enum dwarf_calling_convention
  723.   {
  724.     DW_CC_normal = 0x1,
  725.     DW_CC_program = 0x2,
  726.     DW_CC_nocall = 0x3,
  727.  
  728.     DW_CC_lo_user = 0x40,
  729.     DW_CC_hi_user = 0xff,
  730.  
  731.     DW_CC_GNU_renesas_sh = 0x40,
  732.     DW_CC_GNU_borland_fastcall_i386 = 0x41
  733.   };
  734.  
  735. /* Inline attribute.  */
  736. enum dwarf_inline_attribute
  737.   {
  738.     DW_INL_not_inlined = 0,
  739.     DW_INL_inlined = 1,
  740.     DW_INL_declared_not_inlined = 2,
  741.     DW_INL_declared_inlined = 3
  742.   };
  743.  
  744. /* Discriminant lists.  */
  745. enum dwarf_discrim_list
  746.   {
  747.     DW_DSC_label = 0,
  748.     DW_DSC_range = 1
  749.   };
  750.  
  751. /* Line number opcodes.  */
  752. enum dwarf_line_number_ops
  753.   {
  754.     DW_LNS_extended_op = 0,
  755.     DW_LNS_copy = 1,
  756.     DW_LNS_advance_pc = 2,
  757.     DW_LNS_advance_line = 3,
  758.     DW_LNS_set_file = 4,
  759.     DW_LNS_set_column = 5,
  760.     DW_LNS_negate_stmt = 6,
  761.     DW_LNS_set_basic_block = 7,
  762.     DW_LNS_const_add_pc = 8,
  763.     DW_LNS_fixed_advance_pc = 9,
  764.     /* DWARF 3.  */
  765.     DW_LNS_set_prologue_end = 10,
  766.     DW_LNS_set_epilogue_begin = 11,
  767.     DW_LNS_set_isa = 12
  768.   };
  769.  
  770. /* Line number extended opcodes.  */
  771. enum dwarf_line_number_x_ops
  772.   {
  773.     DW_LNE_end_sequence = 1,
  774.     DW_LNE_set_address = 2,
  775.     DW_LNE_define_file = 3,
  776.     DW_LNE_set_discriminator = 4,
  777.     /* HP extensions.  */
  778.     DW_LNE_HP_negate_is_UV_update      = 0x11,
  779.     DW_LNE_HP_push_context             = 0x12,
  780.     DW_LNE_HP_pop_context              = 0x13,
  781.     DW_LNE_HP_set_file_line_column     = 0x14,
  782.     DW_LNE_HP_set_routine_name         = 0x15,
  783.     DW_LNE_HP_set_sequence             = 0x16,
  784.     DW_LNE_HP_negate_post_semantics    = 0x17,
  785.     DW_LNE_HP_negate_function_exit     = 0x18,
  786.     DW_LNE_HP_negate_front_end_logical = 0x19,
  787.     DW_LNE_HP_define_proc              = 0x20,
  788.  
  789.     DW_LNE_lo_user = 0x80,
  790.     DW_LNE_hi_user = 0xff
  791.   };
  792.  
  793. /* Call frame information.  */
  794. enum dwarf_call_frame_info
  795.   {
  796.     DW_CFA_advance_loc = 0x40,
  797.     DW_CFA_offset = 0x80,
  798.     DW_CFA_restore = 0xc0,
  799.     DW_CFA_nop = 0x00,
  800.     DW_CFA_set_loc = 0x01,
  801.     DW_CFA_advance_loc1 = 0x02,
  802.     DW_CFA_advance_loc2 = 0x03,
  803.     DW_CFA_advance_loc4 = 0x04,
  804.     DW_CFA_offset_extended = 0x05,
  805.     DW_CFA_restore_extended = 0x06,
  806.     DW_CFA_undefined = 0x07,
  807.     DW_CFA_same_value = 0x08,
  808.     DW_CFA_register = 0x09,
  809.     DW_CFA_remember_state = 0x0a,
  810.     DW_CFA_restore_state = 0x0b,
  811.     DW_CFA_def_cfa = 0x0c,
  812.     DW_CFA_def_cfa_register = 0x0d,
  813.     DW_CFA_def_cfa_offset = 0x0e,
  814.     /* DWARF 3.  */
  815.     DW_CFA_def_cfa_expression = 0x0f,
  816.     DW_CFA_expression = 0x10,
  817.     DW_CFA_offset_extended_sf = 0x11,
  818.     DW_CFA_def_cfa_sf = 0x12,
  819.     DW_CFA_def_cfa_offset_sf = 0x13,
  820.     DW_CFA_val_offset = 0x14,
  821.     DW_CFA_val_offset_sf = 0x15,
  822.     DW_CFA_val_expression = 0x16,
  823.  
  824.     DW_CFA_lo_user = 0x1c,
  825.     DW_CFA_hi_user = 0x3f,
  826.  
  827.     /* SGI/MIPS specific.  */
  828.     DW_CFA_MIPS_advance_loc8 = 0x1d,
  829.     /* GNU extensions.  */
  830.     DW_CFA_GNU_window_save = 0x2d,
  831.     DW_CFA_GNU_args_size = 0x2e,
  832.     DW_CFA_GNU_negative_offset_extended = 0x2f
  833.   };
  834.  
  835. #define DW_CIE_ID         0xffffffff
  836. #define DW64_CIE_ID       0xffffffffffffffffULL
  837. #define DW_CIE_VERSION    1
  838.  
  839. #define DW_CFA_extended   0
  840.  
  841. #define DW_CHILDREN_no               0x00
  842. #define DW_CHILDREN_yes              0x01
  843.  
  844. #define DW_ADDR_none            0
  845.  
  846. /* Source language names and codes.  */
  847. enum dwarf_source_language
  848.   {
  849.     DW_LANG_C89 = 0x0001,
  850.     DW_LANG_C = 0x0002,
  851.     DW_LANG_Ada83 = 0x0003,
  852.     DW_LANG_C_plus_plus = 0x0004,
  853.     DW_LANG_Cobol74 = 0x0005,
  854.     DW_LANG_Cobol85 = 0x0006,
  855.     DW_LANG_Fortran77 = 0x0007,
  856.     DW_LANG_Fortran90 = 0x0008,
  857.     DW_LANG_Pascal83 = 0x0009,
  858.     DW_LANG_Modula2 = 0x000a,
  859.     /* DWARF 3.  */
  860.     DW_LANG_Java = 0x000b,
  861.     DW_LANG_C99 = 0x000c,
  862.     DW_LANG_Ada95 = 0x000d,
  863.     DW_LANG_Fortran95 = 0x000e,
  864.     DW_LANG_PLI = 0x000f,
  865.     DW_LANG_ObjC = 0x0010,
  866.     DW_LANG_ObjC_plus_plus = 0x0011,
  867.     DW_LANG_UPC = 0x0012,
  868.     DW_LANG_D = 0x0013,
  869.     /* DWARF 4.  */
  870.     DW_LANG_Python = 0x0014,
  871.  
  872.     DW_LANG_lo_user = 0x8000,   /* Implementation-defined range start.  */
  873.     DW_LANG_hi_user = 0xffff,   /* Implementation-defined range start.  */
  874.  
  875.     /* MIPS.  */
  876.     DW_LANG_Mips_Assembler = 0x8001,
  877.     /* UPC.  */
  878.     DW_LANG_Upc = 0x8765
  879.   };
  880.  
  881. /* Names and codes for macro information.  */
  882. enum dwarf_macinfo_record_type
  883.   {
  884.     DW_MACINFO_define = 1,
  885.     DW_MACINFO_undef = 2,
  886.     DW_MACINFO_start_file = 3,
  887.     DW_MACINFO_end_file = 4,
  888.     DW_MACINFO_vendor_ext = 255
  889.   };
  890. /* @@@ For use with GNU frame unwind information.  */
  891.  
  892. #define DW_EH_PE_absptr         0x00
  893. #define DW_EH_PE_omit           0xff
  894.  
  895. #define DW_EH_PE_uleb128        0x01
  896. #define DW_EH_PE_udata2         0x02
  897. #define DW_EH_PE_udata4         0x03
  898. #define DW_EH_PE_udata8         0x04
  899. #define DW_EH_PE_sleb128        0x09
  900. #define DW_EH_PE_sdata2         0x0A
  901. #define DW_EH_PE_sdata4         0x0B
  902. #define DW_EH_PE_sdata8         0x0C
  903. #define DW_EH_PE_signed         0x08
  904.  
  905. #define DW_EH_PE_pcrel          0x10
  906. #define DW_EH_PE_textrel        0x20
  907. #define DW_EH_PE_datarel        0x30
  908. #define DW_EH_PE_funcrel        0x40
  909. #define DW_EH_PE_aligned        0x50
  910.  
  911. #define DW_EH_PE_indirect       0x80
  912.  
  913. #endif /* _ELF_DWARF2_H */
  914.