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