Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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 1992, 1993, 1995, 1999, 2005, 2010 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.