Subversion Repositories Kolibri OS

Rev

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

  1. /* Declarations and definitions of codes relating to the DWARF symbolic
  2.    debugging information format.
  3.  
  4.    Written by Ron Guilmette (rfg@netcom.com)
  5.  
  6.    Copyright (C) 1992-2015 Free Software Foundation, Inc.
  7.  
  8.    This file is part of both GCC and the BFD library.
  9.  
  10.    This program is free software; you can redistribute it and/or modify
  11.    it under the terms of the GNU General Public License as published by
  12.    the Free Software Foundation; either version 3 of the License, or
  13.    (at your option) any later version.
  14.  
  15.    This program is distributed in the hope that it will be useful,
  16.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.    GNU General Public License for more details.
  19.  
  20.    You should have received a copy of the GNU General Public License
  21.    along with GCC; see the file COPYING3.  If not, write to the Free
  22.    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
  23.    02110-1301, USA.  */
  24.  
  25. /* This file is derived from the DWARF specification (a public document)
  26.    Revision 1.0.1 (April 8, 1992) developed by the UNIX International
  27.    Programming Languages Special Interest Group (UI/PLSIG) and distributed
  28.    by UNIX International.  Copies of this specification are available from
  29.    UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.  */
  30.  
  31. #ifndef _ELF_DWARF_H
  32. #define _ELF_DWARF_H
  33.  
  34. /* Tag names and codes.  */
  35.  
  36. enum dwarf_tag {
  37.     TAG_padding                 = 0x0000,
  38.     TAG_array_type              = 0x0001,
  39.     TAG_class_type              = 0x0002,
  40.     TAG_entry_point             = 0x0003,
  41.     TAG_enumeration_type        = 0x0004,
  42.     TAG_formal_parameter        = 0x0005,
  43.     TAG_global_subroutine       = 0x0006,
  44.     TAG_global_variable         = 0x0007,
  45.                                 /* 0x0008 -- reserved */
  46.                                 /* 0x0009 -- reserved */
  47.     TAG_label                   = 0x000a,
  48.     TAG_lexical_block           = 0x000b,
  49.     TAG_local_variable          = 0x000c,
  50.     TAG_member                  = 0x000d,
  51.                                 /* 0x000e -- reserved */
  52.     TAG_pointer_type            = 0x000f,
  53.     TAG_reference_type          = 0x0010,
  54.     TAG_compile_unit            = 0x0011,
  55.     TAG_string_type             = 0x0012,
  56.     TAG_structure_type          = 0x0013,
  57.     TAG_subroutine              = 0x0014,
  58.     TAG_subroutine_type         = 0x0015,
  59.     TAG_typedef                 = 0x0016,
  60.     TAG_union_type              = 0x0017,
  61.     TAG_unspecified_parameters  = 0x0018,
  62.     TAG_variant                 = 0x0019,
  63.     TAG_common_block            = 0x001a,
  64.     TAG_common_inclusion        = 0x001b,
  65.     TAG_inheritance             = 0x001c,
  66.     TAG_inlined_subroutine      = 0x001d,
  67.     TAG_module                  = 0x001e,
  68.     TAG_ptr_to_member_type      = 0x001f,
  69.     TAG_set_type                = 0x0020,
  70.     TAG_subrange_type           = 0x0021,
  71.     TAG_with_stmt               = 0x0022,
  72.  
  73.     /* GNU extensions */
  74.  
  75.     TAG_format_label            = 0x8000,  /* for FORTRAN 77 and Fortran 90 */
  76.     TAG_namelist                = 0x8001,  /* For Fortran 90 */
  77.     TAG_function_template       = 0x8002,  /* for C++ */
  78.     TAG_class_template          = 0x8003   /* for C++ */
  79. };
  80.  
  81. #define TAG_lo_user     0x8000  /* implementation-defined range start */
  82. #define TAG_hi_user     0xffff  /* implementation-defined range end */
  83. #define TAG_source_file TAG_compile_unit  /* for backward compatibility */
  84.  
  85. /* Form names and codes.  */
  86.  
  87. enum dwarf_form {
  88.     FORM_ADDR   = 0x1,
  89.     FORM_REF    = 0x2,
  90.     FORM_BLOCK2 = 0x3,
  91.     FORM_BLOCK4 = 0x4,
  92.     FORM_DATA2  = 0x5,
  93.     FORM_DATA4  = 0x6,
  94.     FORM_DATA8  = 0x7,
  95.     FORM_STRING = 0x8
  96. };
  97.  
  98. /* Attribute names and codes.  */
  99.  
  100. enum dwarf_attribute {
  101.     AT_sibling                  = (0x0010|FORM_REF),
  102.     AT_location                 = (0x0020|FORM_BLOCK2),
  103.     AT_name                     = (0x0030|FORM_STRING),
  104.     AT_fund_type                = (0x0050|FORM_DATA2),
  105.     AT_mod_fund_type            = (0x0060|FORM_BLOCK2),
  106.     AT_user_def_type            = (0x0070|FORM_REF),
  107.     AT_mod_u_d_type             = (0x0080|FORM_BLOCK2),
  108.     AT_ordering                 = (0x0090|FORM_DATA2),
  109.     AT_subscr_data              = (0x00a0|FORM_BLOCK2),
  110.     AT_byte_size                = (0x00b0|FORM_DATA4),
  111.     AT_bit_offset               = (0x00c0|FORM_DATA2),
  112.     AT_bit_size                 = (0x00d0|FORM_DATA4),
  113.                                 /* (0x00e0|FORM_xxxx) -- reserved */
  114.     AT_element_list             = (0x00f0|FORM_BLOCK4),
  115.     AT_stmt_list                = (0x0100|FORM_DATA4),
  116.     AT_low_pc                   = (0x0110|FORM_ADDR),
  117.     AT_high_pc                  = (0x0120|FORM_ADDR),
  118.     AT_language                 = (0x0130|FORM_DATA4),
  119.     AT_member                   = (0x0140|FORM_REF),
  120.     AT_discr                    = (0x0150|FORM_REF),
  121.     AT_discr_value              = (0x0160|FORM_BLOCK2),
  122.                                 /* (0x0170|FORM_xxxx) -- reserved */
  123.                                 /* (0x0180|FORM_xxxx) -- reserved */
  124.     AT_string_length            = (0x0190|FORM_BLOCK2),
  125.     AT_common_reference         = (0x01a0|FORM_REF),
  126.     AT_comp_dir                 = (0x01b0|FORM_STRING),
  127.         AT_const_value_string   = (0x01c0|FORM_STRING),
  128.         AT_const_value_data2    = (0x01c0|FORM_DATA2),
  129.         AT_const_value_data4    = (0x01c0|FORM_DATA4),
  130.         AT_const_value_data8    = (0x01c0|FORM_DATA8),
  131.         AT_const_value_block2   = (0x01c0|FORM_BLOCK2),
  132.         AT_const_value_block4   = (0x01c0|FORM_BLOCK4),
  133.     AT_containing_type          = (0x01d0|FORM_REF),
  134.         AT_default_value_addr   = (0x01e0|FORM_ADDR),
  135.         AT_default_value_data2  = (0x01e0|FORM_DATA2),
  136.         AT_default_value_data4  = (0x01e0|FORM_DATA4),
  137.         AT_default_value_data8  = (0x01e0|FORM_DATA8),
  138.         AT_default_value_string = (0x01e0|FORM_STRING),
  139.     AT_friends                  = (0x01f0|FORM_BLOCK2),
  140.     AT_inline                   = (0x0200|FORM_STRING),
  141.     AT_is_optional              = (0x0210|FORM_STRING),
  142.         AT_lower_bound_ref      = (0x0220|FORM_REF),
  143.         AT_lower_bound_data2    = (0x0220|FORM_DATA2),
  144.         AT_lower_bound_data4    = (0x0220|FORM_DATA4),
  145.         AT_lower_bound_data8    = (0x0220|FORM_DATA8),
  146.     AT_private                  = (0x0240|FORM_STRING),
  147.     AT_producer                 = (0x0250|FORM_STRING),
  148.     AT_program                  = (0x0230|FORM_STRING),
  149.     AT_protected                = (0x0260|FORM_STRING),
  150.     AT_prototyped               = (0x0270|FORM_STRING),
  151.     AT_public                   = (0x0280|FORM_STRING),
  152.     AT_pure_virtual             = (0x0290|FORM_STRING),
  153.     AT_return_addr              = (0x02a0|FORM_BLOCK2),
  154.     AT_abstract_origin          = (0x02b0|FORM_REF),
  155.     AT_start_scope              = (0x02c0|FORM_DATA4),
  156.     AT_stride_size              = (0x02e0|FORM_DATA4),
  157.         AT_upper_bound_ref      = (0x02f0|FORM_REF),
  158.         AT_upper_bound_data2    = (0x02f0|FORM_DATA2),
  159.         AT_upper_bound_data4    = (0x02f0|FORM_DATA4),
  160.         AT_upper_bound_data8    = (0x02f0|FORM_DATA8),
  161.     AT_virtual                  = (0x0300|FORM_STRING),
  162.  
  163.     /* GNU extensions.  */
  164.  
  165.     AT_sf_names                 = (0x8000|FORM_DATA4),
  166.     AT_src_info                 = (0x8010|FORM_DATA4),
  167.     AT_mac_info                 = (0x8020|FORM_DATA4),
  168.     AT_src_coords               = (0x8030|FORM_DATA4),
  169.     AT_body_begin               = (0x8040|FORM_ADDR),
  170.     AT_body_end                 = (0x8050|FORM_ADDR)
  171. };
  172.  
  173. #define AT_lo_user      0x2000  /* implementation-defined range start */
  174. #define AT_hi_user      0x3ff0  /* implementation-defined range end */
  175.  
  176. /* Location atom names and codes.  */
  177.  
  178. enum dwarf_location_atom {
  179.     OP_REG      = 0x01,
  180.     OP_BASEREG  = 0x02,
  181.     OP_ADDR     = 0x03,
  182.     OP_CONST    = 0x04,
  183.     OP_DEREF2   = 0x05,
  184.     OP_DEREF4   = 0x06,
  185.     OP_ADD      = 0x07,
  186.  
  187.     /* GNU extensions.  */
  188.  
  189.     OP_MULT     = 0x80
  190. };
  191.  
  192. #define OP_LO_USER      0x80  /* implementation-defined range start */
  193. #define OP_HI_USER      0xff  /* implementation-defined range end */
  194.  
  195. /* Fundamental type names and codes.  */
  196.  
  197. enum dwarf_fundamental_type {
  198.     FT_char             = 0x0001,
  199.     FT_signed_char      = 0x0002,
  200.     FT_unsigned_char    = 0x0003,
  201.     FT_short            = 0x0004,
  202.     FT_signed_short     = 0x0005,
  203.     FT_unsigned_short   = 0x0006,
  204.     FT_integer          = 0x0007,
  205.     FT_signed_integer   = 0x0008,
  206.     FT_unsigned_integer = 0x0009,
  207.     FT_long             = 0x000a,
  208.     FT_signed_long      = 0x000b,
  209.     FT_unsigned_long    = 0x000c,
  210.     FT_pointer          = 0x000d,  /* an alias for (void *) */
  211.     FT_float            = 0x000e,
  212.     FT_dbl_prec_float   = 0x000f,
  213.     FT_ext_prec_float   = 0x0010,  /* breaks "classic" svr4 SDB */
  214.     FT_complex          = 0x0011,  /* breaks "classic" svr4 SDB */
  215.     FT_dbl_prec_complex = 0x0012,  /* breaks "classic" svr4 SDB */
  216.                         /* 0x0013 -- reserved */
  217.     FT_void             = 0x0014,
  218.     FT_boolean          = 0x0015,  /* breaks "classic" svr4 SDB */
  219.     FT_ext_prec_complex = 0x0016,  /* breaks "classic" svr4 SDB */
  220.     FT_label            = 0x0017,
  221.  
  222.     /* GNU extensions
  223.        The low order byte must indicate the size (in bytes) for the type.
  224.        All of these types will probably break "classic" svr4 SDB.  */
  225.  
  226.     FT_long_long        = 0x8008,
  227.     FT_signed_long_long = 0x8108,
  228.     FT_unsigned_long_long = 0x8208,
  229.  
  230.     FT_int8             = 0x9001,
  231.     FT_signed_int8      = 0x9101,
  232.     FT_unsigned_int8    = 0x9201,
  233.     FT_int16            = 0x9302,
  234.     FT_signed_int16     = 0x9402,
  235.     FT_unsigned_int16   = 0x9502,
  236.     FT_int32            = 0x9604,
  237.     FT_signed_int32     = 0x9704,
  238.     FT_unsigned_int32   = 0x9804,
  239.     FT_int64            = 0x9908,
  240.     FT_signed_int64     = 0x9a08,
  241.     FT_unsigned_int64   = 0x9b08,
  242.     FT_int128           = 0x9c10,
  243.     FT_signed_int128    = 0x9d10,
  244.     FT_unsigned_int128  = 0x9e10,
  245.  
  246.     FT_real32           = 0xa004,
  247.     FT_real64           = 0xa108,
  248.     FT_real96           = 0xa20c,
  249.     FT_real128          = 0xa310
  250. };
  251.  
  252. #define FT_lo_user      0x8000  /* implementation-defined range start */
  253. #define FT_hi_user      0xffff  /* implementation defined range end */
  254.  
  255. /* Type modifier names and codes.  */
  256.  
  257. enum dwarf_type_modifier {
  258.     MOD_pointer_to      = 0x01,
  259.     MOD_reference_to    = 0x02,
  260.     MOD_const           = 0x03,
  261.     MOD_volatile        = 0x04
  262. };
  263.  
  264. #define MOD_lo_user     0x80  /* implementation-defined range start */
  265. #define MOD_hi_user     0xff  /* implementation-defined range end */
  266.  
  267. /* Array ordering names and codes.  */
  268.  
  269. enum dwarf_array_dim_ordering {
  270.     ORD_row_major       = 0,
  271.     ORD_col_major       = 1
  272. };
  273.  
  274. /* Array subscript format names and codes.  */
  275.  
  276. enum dwarf_subscr_data_formats {
  277.     FMT_FT_C_C  = 0x0,
  278.     FMT_FT_C_X  = 0x1,
  279.     FMT_FT_X_C  = 0x2,
  280.     FMT_FT_X_X  = 0x3,
  281.     FMT_UT_C_C  = 0x4,
  282.     FMT_UT_C_X  = 0x5,
  283.     FMT_UT_X_C  = 0x6,
  284.     FMT_UT_X_X  = 0x7,
  285.     FMT_ET      = 0x8
  286. };
  287.  
  288. /* Derived from above for ease of use.  */
  289.  
  290. #define FMT_CODE(_FUNDAMENTAL_TYPE_P, _LB_CONST_P, _UB_CONST_P) \
  291.  (((_FUNDAMENTAL_TYPE_P) ? 0 : 4)       \
  292.   | ((_LB_CONST_P) ? 0 : 2)             \
  293.   | ((_UB_CONST_P) ? 0 : 1))
  294.  
  295. /* Source language names and codes.  */
  296.  
  297. enum dwarf_source_language {
  298.     LANG_C89            = 0x00000001,
  299.     LANG_C              = 0x00000002,
  300.     LANG_ADA83          = 0x00000003,
  301.     LANG_C_PLUS_PLUS    = 0x00000004,
  302.     LANG_COBOL74        = 0x00000005,
  303.     LANG_COBOL85        = 0x00000006,
  304.     LANG_FORTRAN77      = 0x00000007,
  305.     LANG_FORTRAN90      = 0x00000008,
  306.     LANG_PASCAL83       = 0x00000009,
  307.     LANG_MODULA2        = 0x0000000a,
  308.     LANG_JAVA           = 0x0000000b
  309. };
  310.  
  311. #define LANG_lo_user    0x00008000  /* implementation-defined range start */
  312. #define LANG_hi_user    0x0000ffff  /* implementation-defined range end */
  313.  
  314. /* Names and codes for GNU "macinfo" extension.  */
  315.  
  316. enum dwarf_macinfo_record_type {
  317.     MACINFO_start       = 's',
  318.     MACINFO_resume      = 'r',
  319.     MACINFO_define      = 'd',
  320.     MACINFO_undef       = 'u'
  321. };
  322.  
  323. #endif /* _ELF_DWARF_H */
  324.