118334Speter/* Declarations and definitions of codes relating to the DWARF symbolic 218334Speter debugging information format. 318334Speter 418334Speter Written by Ron Guilmette (rfg@netcom.com) 518334Speter 6169689SkanCopyright (C) 1992, 2004 Free Software Foundation, Inc. 718334Speter 890075SobrienThis file is part of GCC. 918334Speter 1090075SobrienGCC is free software; you can redistribute it and/or modify it under 1190075Sobrienthe terms of the GNU General Public License as published by the Free 1290075SobrienSoftware Foundation; either version 2, or (at your option) any later 1390075Sobrienversion. 1418334Speter 1590075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1690075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1790075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1890075Sobrienfor more details. 1918334Speter 2018334SpeterYou should have received a copy of the GNU General Public License 2190075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 22169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 23169689Skan02110-1301, USA. */ 2418334Speter 2518334Speter/* This file is derived from the DWARF specification (a public document) 2618334Speter Revision 1.0.1 (April 8, 1992) developed by the UNIX International 2718334Speter Programming Languages Special Interest Group (UI/PLSIG) and distributed 2818334Speter by UNIX International. Copies of this specification are available from 2918334Speter UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. 3018334Speter*/ 3118334Speter 3218334Speter/* Tag names and codes. */ 3318334Speter 3418334Speterenum dwarf_tag { 3518334Speter TAG_padding = 0x0000, 3618334Speter TAG_array_type = 0x0001, 3718334Speter TAG_class_type = 0x0002, 3818334Speter TAG_entry_point = 0x0003, 3918334Speter TAG_enumeration_type = 0x0004, 4018334Speter TAG_formal_parameter = 0x0005, 4118334Speter TAG_global_subroutine = 0x0006, 4218334Speter TAG_global_variable = 0x0007, 4318334Speter /* 0x0008 -- reserved */ 4418334Speter /* 0x0009 -- reserved */ 4518334Speter TAG_label = 0x000a, 4618334Speter TAG_lexical_block = 0x000b, 4718334Speter TAG_local_variable = 0x000c, 4818334Speter TAG_member = 0x000d, 4918334Speter /* 0x000e -- reserved */ 5018334Speter TAG_pointer_type = 0x000f, 5118334Speter TAG_reference_type = 0x0010, 5218334Speter TAG_compile_unit = 0x0011, 5318334Speter TAG_string_type = 0x0012, 5418334Speter TAG_structure_type = 0x0013, 5518334Speter TAG_subroutine = 0x0014, 5618334Speter TAG_subroutine_type = 0x0015, 5718334Speter TAG_typedef = 0x0016, 5818334Speter TAG_union_type = 0x0017, 5918334Speter TAG_unspecified_parameters = 0x0018, 6018334Speter TAG_variant = 0x0019, 6118334Speter TAG_common_block = 0x001a, 6218334Speter TAG_common_inclusion = 0x001b, 6318334Speter TAG_inheritance = 0x001c, 6418334Speter TAG_inlined_subroutine = 0x001d, 6518334Speter TAG_module = 0x001e, 6618334Speter TAG_ptr_to_member_type = 0x001f, 6718334Speter TAG_set_type = 0x0020, 6818334Speter TAG_subrange_type = 0x0021, 6918334Speter TAG_with_stmt = 0x0022, 7018334Speter 7118334Speter /* GNU extensions */ 7218334Speter 7318334Speter TAG_format_label = 0x8000, /* for FORTRAN 77 and Fortran 90 */ 7418334Speter TAG_namelist = 0x8001, /* For Fortran 90 */ 7518334Speter TAG_function_template = 0x8002, /* for C++ */ 7618334Speter TAG_class_template = 0x8003 /* for C++ */ 7718334Speter}; 7818334Speter 7918334Speter#define TAG_lo_user 0x8000 /* implementation-defined range start */ 8018334Speter#define TAG_hi_user 0xffff /* implementation-defined range end */ 8118334Speter#define TAG_source_file TAG_compile_unit /* for backward compatibility */ 8218334Speter 8318334Speter/* Form names and codes. */ 8418334Speter 8518334Speterenum dwarf_form { 8618334Speter FORM_ADDR = 0x1, 8718334Speter FORM_REF = 0x2, 8818334Speter FORM_BLOCK2 = 0x3, 8918334Speter FORM_BLOCK4 = 0x4, 9018334Speter FORM_DATA2 = 0x5, 9118334Speter FORM_DATA4 = 0x6, 9218334Speter FORM_DATA8 = 0x7, 9318334Speter FORM_STRING = 0x8 9418334Speter}; 9518334Speter 9618334Speter/* Attribute names and codes. */ 9718334Speter 9818334Speterenum dwarf_attribute { 9918334Speter AT_sibling = (0x0010|FORM_REF), 10018334Speter AT_location = (0x0020|FORM_BLOCK2), 10118334Speter AT_name = (0x0030|FORM_STRING), 10218334Speter AT_fund_type = (0x0050|FORM_DATA2), 10318334Speter AT_mod_fund_type = (0x0060|FORM_BLOCK2), 10418334Speter AT_user_def_type = (0x0070|FORM_REF), 10518334Speter AT_mod_u_d_type = (0x0080|FORM_BLOCK2), 10618334Speter AT_ordering = (0x0090|FORM_DATA2), 10718334Speter AT_subscr_data = (0x00a0|FORM_BLOCK2), 10818334Speter AT_byte_size = (0x00b0|FORM_DATA4), 10918334Speter AT_bit_offset = (0x00c0|FORM_DATA2), 11018334Speter AT_bit_size = (0x00d0|FORM_DATA4), 11118334Speter /* (0x00e0|FORM_xxxx) -- reserved */ 11218334Speter AT_element_list = (0x00f0|FORM_BLOCK4), 11318334Speter AT_stmt_list = (0x0100|FORM_DATA4), 11418334Speter AT_low_pc = (0x0110|FORM_ADDR), 11518334Speter AT_high_pc = (0x0120|FORM_ADDR), 11618334Speter AT_language = (0x0130|FORM_DATA4), 11718334Speter AT_member = (0x0140|FORM_REF), 11818334Speter AT_discr = (0x0150|FORM_REF), 11918334Speter AT_discr_value = (0x0160|FORM_BLOCK2), 12018334Speter /* (0x0170|FORM_xxxx) -- reserved */ 12118334Speter /* (0x0180|FORM_xxxx) -- reserved */ 12218334Speter AT_string_length = (0x0190|FORM_BLOCK2), 12318334Speter AT_common_reference = (0x01a0|FORM_REF), 12418334Speter AT_comp_dir = (0x01b0|FORM_STRING), 12518334Speter AT_const_value_string = (0x01c0|FORM_STRING), 12618334Speter AT_const_value_data2 = (0x01c0|FORM_DATA2), 12718334Speter AT_const_value_data4 = (0x01c0|FORM_DATA4), 12818334Speter AT_const_value_data8 = (0x01c0|FORM_DATA8), 12918334Speter AT_const_value_block2 = (0x01c0|FORM_BLOCK2), 13018334Speter AT_const_value_block4 = (0x01c0|FORM_BLOCK4), 13118334Speter AT_containing_type = (0x01d0|FORM_REF), 13218334Speter AT_default_value_addr = (0x01e0|FORM_ADDR), 13318334Speter AT_default_value_data2 = (0x01e0|FORM_DATA2), 13418334Speter AT_default_value_data4 = (0x01e0|FORM_DATA4), 13518334Speter AT_default_value_data8 = (0x01e0|FORM_DATA8), 13618334Speter AT_default_value_string = (0x01e0|FORM_STRING), 13718334Speter AT_friends = (0x01f0|FORM_BLOCK2), 13818334Speter AT_inline = (0x0200|FORM_STRING), 13918334Speter AT_is_optional = (0x0210|FORM_STRING), 14018334Speter AT_lower_bound_ref = (0x0220|FORM_REF), 14118334Speter AT_lower_bound_data2 = (0x0220|FORM_DATA2), 14218334Speter AT_lower_bound_data4 = (0x0220|FORM_DATA4), 14318334Speter AT_lower_bound_data8 = (0x0220|FORM_DATA8), 14418334Speter AT_private = (0x0240|FORM_STRING), 14518334Speter AT_producer = (0x0250|FORM_STRING), 14618334Speter AT_program = (0x0230|FORM_STRING), 14718334Speter AT_protected = (0x0260|FORM_STRING), 14818334Speter AT_prototyped = (0x0270|FORM_STRING), 14918334Speter AT_public = (0x0280|FORM_STRING), 15018334Speter AT_pure_virtual = (0x0290|FORM_STRING), 15118334Speter AT_return_addr = (0x02a0|FORM_BLOCK2), 15218334Speter AT_abstract_origin = (0x02b0|FORM_REF), 15318334Speter AT_start_scope = (0x02c0|FORM_DATA4), 15418334Speter AT_stride_size = (0x02e0|FORM_DATA4), 15518334Speter AT_upper_bound_ref = (0x02f0|FORM_REF), 15618334Speter AT_upper_bound_data2 = (0x02f0|FORM_DATA2), 15718334Speter AT_upper_bound_data4 = (0x02f0|FORM_DATA4), 15818334Speter AT_upper_bound_data8 = (0x02f0|FORM_DATA8), 15918334Speter AT_virtual = (0x0300|FORM_STRING), 16018334Speter 16118334Speter /* GNU extensions. */ 16218334Speter 16318334Speter AT_sf_names = (0x8000|FORM_DATA4), 16418334Speter AT_src_info = (0x8010|FORM_DATA4), 16518334Speter AT_mac_info = (0x8020|FORM_DATA4), 16618334Speter AT_src_coords = (0x8030|FORM_DATA4), 16718334Speter AT_body_begin = (0x8040|FORM_ADDR), 16818334Speter AT_body_end = (0x8050|FORM_ADDR) 16918334Speter}; 17018334Speter 17118334Speter#define AT_lo_user 0x2000 /* implementation-defined range start */ 17218334Speter#define AT_hi_user 0x3ff0 /* implementation-defined range end */ 17318334Speter 17418334Speter/* Location atom names and codes. */ 17518334Speter 17618334Speterenum dwarf_location_atom { 17718334Speter OP_REG = 0x01, 17818334Speter OP_BASEREG = 0x02, 17918334Speter OP_ADDR = 0x03, 18018334Speter OP_CONST = 0x04, 18118334Speter OP_DEREF2 = 0x05, 18218334Speter OP_DEREF4 = 0x06, 18350397Sobrien OP_ADD = 0x07, 18450397Sobrien 18550397Sobrien /* GNU extensions. */ 18650397Sobrien 18750397Sobrien OP_MULT = 0x80 18818334Speter}; 18918334Speter 19018334Speter#define OP_LO_USER 0x80 /* implementation-defined range start */ 19118334Speter#define OP_HI_USER 0xff /* implementation-defined range end */ 19218334Speter 19318334Speter/* Fundamental type names and codes. */ 19418334Speter 19518334Speterenum dwarf_fundamental_type { 19618334Speter FT_char = 0x0001, 19718334Speter FT_signed_char = 0x0002, 19818334Speter FT_unsigned_char = 0x0003, 19918334Speter FT_short = 0x0004, 20018334Speter FT_signed_short = 0x0005, 20118334Speter FT_unsigned_short = 0x0006, 20218334Speter FT_integer = 0x0007, 20318334Speter FT_signed_integer = 0x0008, 20418334Speter FT_unsigned_integer = 0x0009, 20518334Speter FT_long = 0x000a, 20618334Speter FT_signed_long = 0x000b, 20718334Speter FT_unsigned_long = 0x000c, 20818334Speter FT_pointer = 0x000d, /* an alias for (void *) */ 20918334Speter FT_float = 0x000e, 21018334Speter FT_dbl_prec_float = 0x000f, 21118334Speter FT_ext_prec_float = 0x0010, /* breaks "classic" svr4 SDB */ 21218334Speter FT_complex = 0x0011, /* breaks "classic" svr4 SDB */ 21318334Speter FT_dbl_prec_complex = 0x0012, /* breaks "classic" svr4 SDB */ 21418334Speter /* 0x0013 -- reserved */ 21518334Speter FT_void = 0x0014, 21618334Speter FT_boolean = 0x0015, /* breaks "classic" svr4 SDB */ 21718334Speter FT_ext_prec_complex = 0x0016, /* breaks "classic" svr4 SDB */ 21818334Speter FT_label = 0x0017, 21918334Speter 22018334Speter /* GNU extensions 22118334Speter The low order byte must indicate the size (in bytes) for the type. 222169689Skan All of these types will probably break "classic" svr4 SDB. */ 22318334Speter 22418334Speter FT_long_long = 0x8008, 22518334Speter FT_signed_long_long = 0x8108, 22618334Speter FT_unsigned_long_long = 0x8208, 22718334Speter 22818334Speter FT_int8 = 0x9001, 22918334Speter FT_signed_int8 = 0x9101, 23018334Speter FT_unsigned_int8 = 0x9201, 23118334Speter FT_int16 = 0x9302, 23218334Speter FT_signed_int16 = 0x9402, 23318334Speter FT_unsigned_int16 = 0x9502, 23418334Speter FT_int32 = 0x9604, 23518334Speter FT_signed_int32 = 0x9704, 23618334Speter FT_unsigned_int32 = 0x9804, 23718334Speter FT_int64 = 0x9908, 23818334Speter FT_signed_int64 = 0x9a08, 23918334Speter FT_unsigned_int64 = 0x9b08, 24090075Sobrien FT_int128 = 0x9c10, 24190075Sobrien FT_signed_int128 = 0x9d10, 24290075Sobrien FT_unsigned_int128 = 0x9e10, 24318334Speter 24418334Speter FT_real32 = 0xa004, 24518334Speter FT_real64 = 0xa108, 24618334Speter FT_real96 = 0xa20c, 24718334Speter FT_real128 = 0xa310 24818334Speter}; 24918334Speter 25018334Speter#define FT_lo_user 0x8000 /* implementation-defined range start */ 25118334Speter#define FT_hi_user 0xffff /* implementation defined range end */ 25218334Speter 25318334Speter/* Type modifier names and codes. */ 25418334Speter 25518334Speterenum dwarf_type_modifier { 25618334Speter MOD_pointer_to = 0x01, 25718334Speter MOD_reference_to = 0x02, 25818334Speter MOD_const = 0x03, 25918334Speter MOD_volatile = 0x04 26018334Speter}; 26118334Speter 26218334Speter#define MOD_lo_user 0x80 /* implementation-defined range start */ 26318334Speter#define MOD_hi_user 0xff /* implementation-defined range end */ 26418334Speter 26518334Speter/* Array ordering names and codes. */ 26618334Speter 26718334Speterenum dwarf_array_dim_ordering { 26818334Speter ORD_row_major = 0, 26918334Speter ORD_col_major = 1 27018334Speter}; 27118334Speter 27218334Speter/* Array subscript format names and codes. */ 27318334Speter 27418334Speterenum dwarf_subscr_data_formats { 27518334Speter FMT_FT_C_C = 0x0, 27618334Speter FMT_FT_C_X = 0x1, 27718334Speter FMT_FT_X_C = 0x2, 27818334Speter FMT_FT_X_X = 0x3, 27918334Speter FMT_UT_C_C = 0x4, 28018334Speter FMT_UT_C_X = 0x5, 28118334Speter FMT_UT_X_C = 0x6, 28218334Speter FMT_UT_X_X = 0x7, 28318334Speter FMT_ET = 0x8 28418334Speter}; 28518334Speter 28618334Speter/* Derived from above for ease of use. */ 28718334Speter 28890075Sobrien#define FMT_CODE(_FUNDAMENTAL_TYPE_P, _LB_CONST_P, _UB_CONST_P) \ 28918334Speter (((_FUNDAMENTAL_TYPE_P) ? 0 : 4) \ 29090075Sobrien | ((_LB_CONST_P) ? 0 : 2) \ 29190075Sobrien | ((_UB_CONST_P) ? 0 : 1)) 29218334Speter 29318334Speter/* Source language names and codes. */ 29418334Speter 29518334Speterenum dwarf_source_language { 29618334Speter LANG_C89 = 0x00000001, 29718334Speter LANG_C = 0x00000002, 29818334Speter LANG_ADA83 = 0x00000003, 29918334Speter LANG_C_PLUS_PLUS = 0x00000004, 30018334Speter LANG_COBOL74 = 0x00000005, 30118334Speter LANG_COBOL85 = 0x00000006, 30218334Speter LANG_FORTRAN77 = 0x00000007, 30318334Speter LANG_FORTRAN90 = 0x00000008, 30418334Speter LANG_PASCAL83 = 0x00000009, 30590075Sobrien LANG_MODULA2 = 0x0000000a, 30690075Sobrien LANG_JAVA = 0x0000000b 30718334Speter}; 30818334Speter 30918334Speter#define LANG_lo_user 0x00008000 /* implementation-defined range start */ 31018334Speter#define LANG_hi_user 0x0000ffff /* implementation-defined range end */ 31118334Speter 31218334Speter/* Names and codes for GNU "macinfo" extension. */ 31318334Speter 31418334Speterenum dwarf_macinfo_record_type { 31518334Speter MACINFO_start = 's', 31618334Speter MACINFO_resume = 'r', 31718334Speter MACINFO_define = 'd', 31818334Speter MACINFO_undef = 'u' 31918334Speter}; 320