gcc/include/dwarf2.def

808 lines
27 KiB
Modula-2
Raw Normal View History

/* -*- c -*-
Declarations and definitions of codes relating to the DWARF2 and
DWARF3 symbolic debugging information formats.
Copyright (C) 1992-2019 Free Software Foundation, Inc.
Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
Office (AJPO), Florida State University and Silicon Graphics Inc.
provided support for this effort -- June 21, 1995.
Derived from the DWARF 1 implementation written by Ron Guilmette
(rfg@netcom.com), November 1990.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* This file is derived from the DWARF specification (a public document)
Revision 2.0.0 (July 27, 1993) developed by the UNIX International
Programming Languages Special Interest Group (UI/PLSIG) and distributed
by UNIX International. Copies of this specification are available from
UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
This file also now contains definitions from the DWARF 3 specification
published Dec 20, 2005, available from: http://dwarf.freestandards.org.
This file also now contains definitions from the DWARF 4
specification, available from: http://dwarfstd.org/ */
/* This file declares various DWARF-related constants using a set of
macros which can be redefined by the including file.
The macros are in sections. Each section corresponds to a single
set of DWARF constants and has a corresponding key. The key is
used in all the macro names.
The sections are TAG (for DW_TAG_ constants), FORM (DW_FORM_), AT
(DW_AT_), OP (DW_OP_), ATE (DW_ATE_), and CFA (DW_CFA_).
Using TAG as an example, the following macros may be used for each
key:
DW_FIRST_TAG(name, value) - Introduce the first DW_TAG constant.
DW_TAG(name, value) - Define a subsequent constant.
DW_TAG_DUP(name, value) - Define a subsequent constant whose value
is a duplicate of some other constant. Not all keys use the _DUP
macro form. If more than one name shares a value, then the base
(DW_TAG) form will be the preferred name and DW_TAG_DUP will hold
any alternate names.
DW_END_TAG - Invoked at the end of the DW_TAG constants. */
DW_FIRST_TAG (DW_TAG_padding, 0x00)
DW_TAG (DW_TAG_array_type, 0x01)
DW_TAG (DW_TAG_class_type, 0x02)
DW_TAG (DW_TAG_entry_point, 0x03)
DW_TAG (DW_TAG_enumeration_type, 0x04)
DW_TAG (DW_TAG_formal_parameter, 0x05)
DW_TAG (DW_TAG_imported_declaration, 0x08)
DW_TAG (DW_TAG_label, 0x0a)
DW_TAG (DW_TAG_lexical_block, 0x0b)
DW_TAG (DW_TAG_member, 0x0d)
DW_TAG (DW_TAG_pointer_type, 0x0f)
DW_TAG (DW_TAG_reference_type, 0x10)
DW_TAG (DW_TAG_compile_unit, 0x11)
DW_TAG (DW_TAG_string_type, 0x12)
DW_TAG (DW_TAG_structure_type, 0x13)
DW_TAG (DW_TAG_subroutine_type, 0x15)
DW_TAG (DW_TAG_typedef, 0x16)
DW_TAG (DW_TAG_union_type, 0x17)
DW_TAG (DW_TAG_unspecified_parameters, 0x18)
DW_TAG (DW_TAG_variant, 0x19)
DW_TAG (DW_TAG_common_block, 0x1a)
DW_TAG (DW_TAG_common_inclusion, 0x1b)
DW_TAG (DW_TAG_inheritance, 0x1c)
DW_TAG (DW_TAG_inlined_subroutine, 0x1d)
DW_TAG (DW_TAG_module, 0x1e)
DW_TAG (DW_TAG_ptr_to_member_type, 0x1f)
DW_TAG (DW_TAG_set_type, 0x20)
DW_TAG (DW_TAG_subrange_type, 0x21)
DW_TAG (DW_TAG_with_stmt, 0x22)
DW_TAG (DW_TAG_access_declaration, 0x23)
DW_TAG (DW_TAG_base_type, 0x24)
DW_TAG (DW_TAG_catch_block, 0x25)
DW_TAG (DW_TAG_const_type, 0x26)
DW_TAG (DW_TAG_constant, 0x27)
DW_TAG (DW_TAG_enumerator, 0x28)
DW_TAG (DW_TAG_file_type, 0x29)
DW_TAG (DW_TAG_friend, 0x2a)
DW_TAG (DW_TAG_namelist, 0x2b)
DW_TAG (DW_TAG_namelist_item, 0x2c)
DW_TAG (DW_TAG_packed_type, 0x2d)
DW_TAG (DW_TAG_subprogram, 0x2e)
DW_TAG (DW_TAG_template_type_param, 0x2f)
DW_TAG (DW_TAG_template_value_param, 0x30)
DW_TAG (DW_TAG_thrown_type, 0x31)
DW_TAG (DW_TAG_try_block, 0x32)
DW_TAG (DW_TAG_variant_part, 0x33)
DW_TAG (DW_TAG_variable, 0x34)
DW_TAG (DW_TAG_volatile_type, 0x35)
/* DWARF 3. */
DW_TAG (DW_TAG_dwarf_procedure, 0x36)
DW_TAG (DW_TAG_restrict_type, 0x37)
DW_TAG (DW_TAG_interface_type, 0x38)
DW_TAG (DW_TAG_namespace, 0x39)
DW_TAG (DW_TAG_imported_module, 0x3a)
DW_TAG (DW_TAG_unspecified_type, 0x3b)
DW_TAG (DW_TAG_partial_unit, 0x3c)
DW_TAG (DW_TAG_imported_unit, 0x3d)
DW_TAG (DW_TAG_condition, 0x3f)
DW_TAG (DW_TAG_shared_type, 0x40)
/* DWARF 4. */
DW_TAG (DW_TAG_type_unit, 0x41)
DW_TAG (DW_TAG_rvalue_reference_type, 0x42)
DW_TAG (DW_TAG_template_alias, 0x43)
/* DWARF 5. */
DW_TAG (DW_TAG_coarray_type, 0x44)
DW_TAG (DW_TAG_generic_subrange, 0x45)
DW_TAG (DW_TAG_dynamic_type, 0x46)
DW_TAG (DW_TAG_atomic_type, 0x47)
DW_TAG (DW_TAG_call_site, 0x48)
DW_TAG (DW_TAG_call_site_parameter, 0x49)
DW_TAG (DW_TAG_skeleton_unit, 0x4a)
DW_TAG (DW_TAG_immutable_type, 0x4b)
DW_TAG_DUP (DW_TAG_lo_user, 0x4080)
DW_TAG_DUP (DW_TAG_hi_user, 0xffff)
/* SGI/MIPS Extensions. */
DW_TAG (DW_TAG_MIPS_loop, 0x4081)
/* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */
DW_TAG (DW_TAG_HP_array_descriptor, 0x4090)
DW_TAG (DW_TAG_HP_Bliss_field, 0x4091)
DW_TAG (DW_TAG_HP_Bliss_field_set, 0x4092)
/* GNU extensions. */
DW_TAG (DW_TAG_format_label, 0x4101) /* For FORTRAN 77 and Fortran 90. */
DW_TAG (DW_TAG_function_template, 0x4102) /* For C++. */
DW_TAG (DW_TAG_class_template, 0x4103) /* For C++. */
DW_TAG (DW_TAG_GNU_BINCL, 0x4104)
DW_TAG (DW_TAG_GNU_EINCL, 0x4105)
/* Template template parameter.
See http://gcc.gnu.org/wiki/TemplateParmsDwarf . */
DW_TAG (DW_TAG_GNU_template_template_param, 0x4106)
/* Template parameter pack extension, specified at
http://wiki.dwarfstd.org/index.php?title=C%2B%2B0x:_Variadic_templates
The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
are properly part of DWARF 5. */
DW_TAG (DW_TAG_GNU_template_parameter_pack, 0x4107)
DW_TAG (DW_TAG_GNU_formal_parameter_pack, 0x4108)
/* The GNU call site extension, specified at
http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .
The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
are properly part of DWARF 5. */
DW_TAG (DW_TAG_GNU_call_site, 0x4109)
DW_TAG (DW_TAG_GNU_call_site_parameter, 0x410a)
/* Extensions for UPC. See: http://dwarfstd.org/doc/DWARF4.pdf. */
DW_TAG (DW_TAG_upc_shared_type, 0x8765)
DW_TAG (DW_TAG_upc_strict_type, 0x8766)
DW_TAG (DW_TAG_upc_relaxed_type, 0x8767)
/* PGI (STMicroelectronics) extensions. No documentation available. */
DW_TAG (DW_TAG_PGI_kanji_type, 0xA000)
DW_TAG (DW_TAG_PGI_interface_block, 0xA020)
DW_END_TAG
DW_FIRST_FORM (DW_FORM_addr, 0x01)
DW_FORM (DW_FORM_block2, 0x03)
DW_FORM (DW_FORM_block4, 0x04)
DW_FORM (DW_FORM_data2, 0x05)
DW_FORM (DW_FORM_data4, 0x06)
DW_FORM (DW_FORM_data8, 0x07)
DW_FORM (DW_FORM_string, 0x08)
DW_FORM (DW_FORM_block, 0x09)
DW_FORM (DW_FORM_block1, 0x0a)
DW_FORM (DW_FORM_data1, 0x0b)
DW_FORM (DW_FORM_flag, 0x0c)
DW_FORM (DW_FORM_sdata, 0x0d)
DW_FORM (DW_FORM_strp, 0x0e)
DW_FORM (DW_FORM_udata, 0x0f)
DW_FORM (DW_FORM_ref_addr, 0x10)
DW_FORM (DW_FORM_ref1, 0x11)
DW_FORM (DW_FORM_ref2, 0x12)
DW_FORM (DW_FORM_ref4, 0x13)
DW_FORM (DW_FORM_ref8, 0x14)
DW_FORM (DW_FORM_ref_udata, 0x15)
DW_FORM (DW_FORM_indirect, 0x16)
/* DWARF 4. */
DW_FORM (DW_FORM_sec_offset, 0x17)
DW_FORM (DW_FORM_exprloc, 0x18)
DW_FORM (DW_FORM_flag_present, 0x19)
DW_FORM (DW_FORM_ref_sig8, 0x20)
/* DWARF 5. */
DW_FORM (DW_FORM_strx, 0x1a)
DW_FORM (DW_FORM_addrx, 0x1b)
DW_FORM (DW_FORM_ref_sup4, 0x1c)
DW_FORM (DW_FORM_strp_sup, 0x1d)
DW_FORM (DW_FORM_data16, 0x1e)
DW_FORM (DW_FORM_line_strp, 0x1f)
DW_FORM (DW_FORM_implicit_const, 0x21)
DW_FORM (DW_FORM_loclistx, 0x22)
DW_FORM (DW_FORM_rnglistx, 0x23)
DW_FORM (DW_FORM_ref_sup8, 0x24)
DW_FORM (DW_FORM_strx1, 0x25)
DW_FORM (DW_FORM_strx2, 0x26)
DW_FORM (DW_FORM_strx3, 0x27)
DW_FORM (DW_FORM_strx4, 0x28)
DW_FORM (DW_FORM_addrx1, 0x29)
DW_FORM (DW_FORM_addrx2, 0x2a)
DW_FORM (DW_FORM_addrx3, 0x2b)
DW_FORM (DW_FORM_addrx4, 0x2c)
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
DW_FORM (DW_FORM_GNU_addr_index, 0x1f01)
DW_FORM (DW_FORM_GNU_str_index, 0x1f02)
/* Extensions for DWZ multifile.
See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */
DW_FORM (DW_FORM_GNU_ref_alt, 0x1f20)
DW_FORM (DW_FORM_GNU_strp_alt, 0x1f21)
DW_END_FORM
DW_FIRST_AT (DW_AT_sibling, 0x01)
DW_AT (DW_AT_location, 0x02)
DW_AT (DW_AT_name, 0x03)
DW_AT (DW_AT_ordering, 0x09)
DW_AT (DW_AT_subscr_data, 0x0a)
DW_AT (DW_AT_byte_size, 0x0b)
DW_AT (DW_AT_bit_offset, 0x0c)
DW_AT (DW_AT_bit_size, 0x0d)
DW_AT (DW_AT_element_list, 0x0f)
DW_AT (DW_AT_stmt_list, 0x10)
DW_AT (DW_AT_low_pc, 0x11)
DW_AT (DW_AT_high_pc, 0x12)
DW_AT (DW_AT_language, 0x13)
DW_AT (DW_AT_member, 0x14)
DW_AT (DW_AT_discr, 0x15)
DW_AT (DW_AT_discr_value, 0x16)
DW_AT (DW_AT_visibility, 0x17)
DW_AT (DW_AT_import, 0x18)
DW_AT (DW_AT_string_length, 0x19)
DW_AT (DW_AT_common_reference, 0x1a)
DW_AT (DW_AT_comp_dir, 0x1b)
DW_AT (DW_AT_const_value, 0x1c)
DW_AT (DW_AT_containing_type, 0x1d)
DW_AT (DW_AT_default_value, 0x1e)
DW_AT (DW_AT_inline, 0x20)
DW_AT (DW_AT_is_optional, 0x21)
DW_AT (DW_AT_lower_bound, 0x22)
DW_AT (DW_AT_producer, 0x25)
DW_AT (DW_AT_prototyped, 0x27)
DW_AT (DW_AT_return_addr, 0x2a)
DW_AT (DW_AT_start_scope, 0x2c)
DW_AT (DW_AT_bit_stride, 0x2e)
DW_AT (DW_AT_upper_bound, 0x2f)
DW_AT (DW_AT_abstract_origin, 0x31)
DW_AT (DW_AT_accessibility, 0x32)
DW_AT (DW_AT_address_class, 0x33)
DW_AT (DW_AT_artificial, 0x34)
DW_AT (DW_AT_base_types, 0x35)
DW_AT (DW_AT_calling_convention, 0x36)
DW_AT (DW_AT_count, 0x37)
DW_AT (DW_AT_data_member_location, 0x38)
DW_AT (DW_AT_decl_column, 0x39)
DW_AT (DW_AT_decl_file, 0x3a)
DW_AT (DW_AT_decl_line, 0x3b)
DW_AT (DW_AT_declaration, 0x3c)
DW_AT (DW_AT_discr_list, 0x3d)
DW_AT (DW_AT_encoding, 0x3e)
DW_AT (DW_AT_external, 0x3f)
DW_AT (DW_AT_frame_base, 0x40)
DW_AT (DW_AT_friend, 0x41)
DW_AT (DW_AT_identifier_case, 0x42)
DW_AT (DW_AT_macro_info, 0x43)
DW_AT (DW_AT_namelist_items, 0x44)
DW_AT (DW_AT_priority, 0x45)
DW_AT (DW_AT_segment, 0x46)
DW_AT (DW_AT_specification, 0x47)
DW_AT (DW_AT_static_link, 0x48)
DW_AT (DW_AT_type, 0x49)
DW_AT (DW_AT_use_location, 0x4a)
DW_AT (DW_AT_variable_parameter, 0x4b)
DW_AT (DW_AT_virtuality, 0x4c)
DW_AT (DW_AT_vtable_elem_location, 0x4d)
/* DWARF 3 values. */
DW_AT (DW_AT_allocated, 0x4e)
DW_AT (DW_AT_associated, 0x4f)
DW_AT (DW_AT_data_location, 0x50)
DW_AT (DW_AT_byte_stride, 0x51)
DW_AT (DW_AT_entry_pc, 0x52)
DW_AT (DW_AT_use_UTF8, 0x53)
DW_AT (DW_AT_extension, 0x54)
DW_AT (DW_AT_ranges, 0x55)
DW_AT (DW_AT_trampoline, 0x56)
DW_AT (DW_AT_call_column, 0x57)
DW_AT (DW_AT_call_file, 0x58)
DW_AT (DW_AT_call_line, 0x59)
DW_AT (DW_AT_description, 0x5a)
DW_AT (DW_AT_binary_scale, 0x5b)
DW_AT (DW_AT_decimal_scale, 0x5c)
DW_AT (DW_AT_small, 0x5d)
DW_AT (DW_AT_decimal_sign, 0x5e)
DW_AT (DW_AT_digit_count, 0x5f)
DW_AT (DW_AT_picture_string, 0x60)
DW_AT (DW_AT_mutable, 0x61)
DW_AT (DW_AT_threads_scaled, 0x62)
DW_AT (DW_AT_explicit, 0x63)
DW_AT (DW_AT_object_pointer, 0x64)
DW_AT (DW_AT_endianity, 0x65)
DW_AT (DW_AT_elemental, 0x66)
DW_AT (DW_AT_pure, 0x67)
DW_AT (DW_AT_recursive, 0x68)
/* DWARF 4. */
DW_AT (DW_AT_signature, 0x69)
DW_AT (DW_AT_main_subprogram, 0x6a)
DW_AT (DW_AT_data_bit_offset, 0x6b)
DW_AT (DW_AT_const_expr, 0x6c)
DW_AT (DW_AT_enum_class, 0x6d)
DW_AT (DW_AT_linkage_name, 0x6e)
/* DWARF 5. */
DW_AT (DW_AT_string_length_bit_size, 0x6f)
DW_AT (DW_AT_string_length_byte_size, 0x70)
DW_AT (DW_AT_rank, 0x71)
DW_AT (DW_AT_str_offsets_base, 0x72)
DW_AT (DW_AT_addr_base, 0x73)
DW_AT (DW_AT_rnglists_base, 0x74)
DW_AT (DW_AT_dwo_name, 0x76)
DW_AT (DW_AT_reference, 0x77)
DW_AT (DW_AT_rvalue_reference, 0x78)
DW_AT (DW_AT_macros, 0x79)
DW_AT (DW_AT_call_all_calls, 0x7a)
DW_AT (DW_AT_call_all_source_calls, 0x7b)
DW_AT (DW_AT_call_all_tail_calls, 0x7c)
DW_AT (DW_AT_call_return_pc, 0x7d)
DW_AT (DW_AT_call_value, 0x7e)
DW_AT (DW_AT_call_origin, 0x7f)
DW_AT (DW_AT_call_parameter, 0x80)
DW_AT (DW_AT_call_pc, 0x81)
DW_AT (DW_AT_call_tail_call, 0x82)
DW_AT (DW_AT_call_target, 0x83)
DW_AT (DW_AT_call_target_clobbered, 0x84)
DW_AT (DW_AT_call_data_location, 0x85)
DW_AT (DW_AT_call_data_value, 0x86)
DW_AT (DW_AT_noreturn, 0x87)
DW_AT (DW_AT_alignment, 0x88)
DW_AT (DW_AT_export_symbols, 0x89)
[PR63240] generate debug info for defaulted member functions This implements <http://dwarfstd.org/ShowIssue.php?issue=141215.3>, a proposal already accepted for inclusion in DWARF-5, but using DW_AT_GNU_defaulted instead of DW_AT_defaulted as the attribute name, because the attribute id for DW_AT_defaulted is not yet publicly available. for include/ChangeLog PR debug/63240 * dwarf2.def (DW_AT_deleted, DW_AT_defaulted): New. * dwarf2.h (enu dwarf_defaulted_attribute): New. for gcc/ChangeLog PR debug/63240 * langhooks-def.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Const_tree-ify. (LANG_HOOKS_FUNCTION_DECL_DELETED_P): Likewise. (LANG_HOOKS_FUNCTION_DECL_DEFAULTED): Set default. (LANG_HOOKS_DECLS): Add it. * langhooks.h (struct lang_hooks_for_decls): Add function_decl_defaulted. Const_tree-ify function_decl_explicit_p and function_decl_deleted_p. * dwarf2out.c (gen_subprogram_die): Add DW_AT_defaulted attribute. Add DW_AT_deleted instead of DW_AT_GNU_deleted, also at strict DWARF v5. for gcc/cp/ChangeLog PR debug/63240 * cp-objcp-common.c (cp_function_decl_defaulted): New. (cp_function_decl_explicit_p): Const_tree-ify. (cp_function_decl_deleted_p): Likewise. * cp-objcp-common.h (cp_function_decl_defaulted): Declare. (cp_function_decl_explicit_p): Const_tree-ify. (cp_function_decl_deleted_p): Likewise. (LANG_HOOKS_FUNCTION_DECL_DEFAULTED): Redefine. for gcc/testsuite/ChangeLog PR debug/63240 * g++.dg/debug/dwarf2/defaulted-member-function-1.C: New. * g++.dg/debug/dwarf2/defaulted-member-function-2.C: New. * g++.dg/debug/dwarf2/defaulted-member-function-3.C: New. * g++.dg/debug/dwarf2/deleted-member-function.C: Expect DW_AT_deleted. From-SVN: r239403
2016-08-12 09:11:50 +02:00
DW_AT (DW_AT_deleted, 0x8a)
DW_AT (DW_AT_defaulted, 0x8b)
DW_AT (DW_AT_loclists_base, 0x8c)
DW_AT_DUP (DW_AT_lo_user, 0x2000) /* Implementation-defined range start. */
DW_AT_DUP (DW_AT_hi_user, 0x3fff) /* Implementation-defined range end. */
/* SGI/MIPS extensions. */
DW_AT (DW_AT_MIPS_fde, 0x2001)
DW_AT (DW_AT_MIPS_loop_begin, 0x2002)
DW_AT (DW_AT_MIPS_tail_loop_begin, 0x2003)
DW_AT (DW_AT_MIPS_epilog_begin, 0x2004)
DW_AT (DW_AT_MIPS_loop_unroll_factor, 0x2005)
DW_AT (DW_AT_MIPS_software_pipeline_depth, 0x2006)
DW_AT (DW_AT_MIPS_linkage_name, 0x2007)
DW_AT (DW_AT_MIPS_stride, 0x2008)
DW_AT (DW_AT_MIPS_abstract_name, 0x2009)
DW_AT (DW_AT_MIPS_clone_origin, 0x200a)
DW_AT (DW_AT_MIPS_has_inlines, 0x200b)
/* HP extensions. */
DW_AT (DW_AT_HP_block_index, 0x2000)
DW_AT_DUP (DW_AT_HP_unmodifiable, 0x2001) /* Same as DW_AT_MIPS_fde. */
DW_AT_DUP (DW_AT_HP_prologue, 0x2005) /* Same as DW_AT_MIPS_loop_unroll. */
DW_AT_DUP (DW_AT_HP_epilogue, 0x2008) /* Same as DW_AT_MIPS_stride. */
DW_AT (DW_AT_HP_actuals_stmt_list, 0x2010)
DW_AT (DW_AT_HP_proc_per_section, 0x2011)
DW_AT (DW_AT_HP_raw_data_ptr, 0x2012)
DW_AT (DW_AT_HP_pass_by_reference, 0x2013)
DW_AT (DW_AT_HP_opt_level, 0x2014)
DW_AT (DW_AT_HP_prof_version_id, 0x2015)
DW_AT (DW_AT_HP_opt_flags, 0x2016)
DW_AT (DW_AT_HP_cold_region_low_pc, 0x2017)
DW_AT (DW_AT_HP_cold_region_high_pc, 0x2018)
DW_AT (DW_AT_HP_all_variables_modifiable, 0x2019)
DW_AT (DW_AT_HP_linkage_name, 0x201a)
DW_AT (DW_AT_HP_prof_flags, 0x201b) /* In comp unit of procs_info for -g. */
DW_AT (DW_AT_HP_unit_name, 0x201f)
DW_AT (DW_AT_HP_unit_size, 0x2020)
DW_AT (DW_AT_HP_widened_byte_size, 0x2021)
DW_AT (DW_AT_HP_definition_points, 0x2022)
DW_AT (DW_AT_HP_default_location, 0x2023)
DW_AT (DW_AT_HP_is_result_param, 0x2029)
/* GNU extensions. */
DW_AT (DW_AT_sf_names, 0x2101)
DW_AT (DW_AT_src_info, 0x2102)
DW_AT (DW_AT_mac_info, 0x2103)
DW_AT (DW_AT_src_coords, 0x2104)
DW_AT (DW_AT_body_begin, 0x2105)
DW_AT (DW_AT_body_end, 0x2106)
DW_AT (DW_AT_GNU_vector, 0x2107)
/* Thread-safety annotations.
See http://gcc.gnu.org/wiki/ThreadSafetyAnnotation . */
DW_AT (DW_AT_GNU_guarded_by, 0x2108)
DW_AT (DW_AT_GNU_pt_guarded_by, 0x2109)
DW_AT (DW_AT_GNU_guarded, 0x210a)
DW_AT (DW_AT_GNU_pt_guarded, 0x210b)
DW_AT (DW_AT_GNU_locks_excluded, 0x210c)
DW_AT (DW_AT_GNU_exclusive_locks_required, 0x210d)
DW_AT (DW_AT_GNU_shared_locks_required, 0x210e)
/* One-definition rule violation detection.
See http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo . */
DW_AT (DW_AT_GNU_odr_signature, 0x210f)
/* Template template argument name.
See http://gcc.gnu.org/wiki/TemplateParmsDwarf . */
DW_AT (DW_AT_GNU_template_name, 0x2110)
/* The GNU call site extension.
See http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open . */
DW_AT (DW_AT_GNU_call_site_value, 0x2111)
DW_AT (DW_AT_GNU_call_site_data_value, 0x2112)
DW_AT (DW_AT_GNU_call_site_target, 0x2113)
DW_AT (DW_AT_GNU_call_site_target_clobbered, 0x2114)
DW_AT (DW_AT_GNU_tail_call, 0x2115)
DW_AT (DW_AT_GNU_all_tail_call_sites, 0x2116)
DW_AT (DW_AT_GNU_all_call_sites, 0x2117)
DW_AT (DW_AT_GNU_all_source_call_sites, 0x2118)
/* Section offset into .debug_macro section. */
DW_AT (DW_AT_GNU_macros, 0x2119)
/* Attribute for C++ deleted special member functions (= delete;). */
DW_AT (DW_AT_GNU_deleted, 0x211a)
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
DW_AT (DW_AT_GNU_dwo_name, 0x2130)
DW_AT (DW_AT_GNU_dwo_id, 0x2131)
DW_AT (DW_AT_GNU_ranges_base, 0x2132)
DW_AT (DW_AT_GNU_addr_base, 0x2133)
DW_AT (DW_AT_GNU_pubnames, 0x2134)
DW_AT (DW_AT_GNU_pubtypes, 0x2135)
/* Attribute for discriminator.
See http://gcc.gnu.org/wiki/Discriminator */
DW_AT (DW_AT_GNU_discriminator, 0x2136)
[LVU] Introduce location views This patch introduces an option to enable the generation of location views along with location lists. The exact format depends on the DWARF version: it can be a separate attribute (DW_AT_GNU_locviews) or (DW_LLE_view_pair) entries in DWARF5+ loclists. Line number tables are also affected. If the assembler is found, at compiler build time, to support .loc views, we use them and assembler-computed view labels, otherwise we output compiler-generated line number programs with conservatively-computed view labels. In either case, we output view information next to line number changes when verbose assembly output is requested. This patch requires an LVU patch that modifies the exported API of final_scan_insn. It also expects the entire SFN patchset to be installed first, although SFN is not a requirement for LVU. for include/ChangeLog * dwarf2.def (DW_AT_GNU_locviews): New. * dwarf2.h (enum dwarf_location_list_entry_type): Add DW_LLE_GNU_view_pair. (DW_LLE_view_pair): Define. for gcc/ChangeLog * common.opt (gvariable-location-views): New. (gvariable-location-views=incompat5): New. * config.in: Rebuilt. * configure: Rebuilt. * configure.ac: Test assembler for view support. * dwarf2asm.c (dw2_asm_output_symname_uleb128): New. * dwarf2asm.h (dw2_asm_output_symname_uleb128): Declare. * dwarf2out.c (var_loc_view): New typedef. (struct dw_loc_list_struct): Add vl_symbol, vbegin, vend. (dwarf2out_locviews_in_attribute): New. (dwarf2out_locviews_in_loclist): New. (dw_val_equal_p): Compare val_view_list of dw_val_class_view_lists. (enum dw_line_info_opcode): Add LI_adv_address. (struct dw_line_info_table): Add view. (RESET_NEXT_VIEW, RESETTING_VIEW_P): New macros. (DWARF2_ASM_VIEW_DEBUG_INFO): Define default. (zero_view_p): New variable. (ZERO_VIEW_P): New macro. (output_asm_line_debug_info): New. (struct var_loc_node): Add view. (add_AT_view_list, AT_loc_list): New. (add_var_loc_to_decl): Add view param. Test it against last. (new_loc_list): Add view params. Record them. (AT_loc_list_ptr): Handle loc and view lists. (view_list_to_loc_list_val_node): New. (print_dw_val): Handle dw_val_class_view_list. (size_of_die): Likewise. (value_format): Likewise. (loc_list_has_views): New. (gen_llsym): Set vl_symbol too. (maybe_gen_llsym, skip_loc_list_entry): New. (dwarf2out_maybe_output_loclist_view_pair): New. (output_loc_list): Output view list or entries too. (output_view_list_offset): New. (output_die): Handle dw_val_class_view_list. (output_dwarf_version): New. (output_compilation_unit_header): Use it. (output_skeleton_debug_sections): Likewise. (output_rnglists, output_line_info): Likewise. (output_pubnames, output_aranges): Update version comments. (output_one_line_info_table): Output view numbers in asm comments. (dw_loc_list): Determine current endview, pass it to new_loc_list. Call maybe_gen_llsym. (loc_list_from_tree_1): Adjust. (add_AT_location_description): Create view list attribute if needed, check it's absent otherwise. (convert_cfa_to_fb_loc_list): Adjust. (maybe_emit_file): Call output_asm_line_debug_info for test. (dwarf2out_var_location): Reset views as needed. Precompute add_var_loc_to_decl args. Call get_attr_min_length only if we have the attribute. Set view. (new_line_info_table): Reset next view. (set_cur_line_info_table): Call output_asm_line_debug_info for test. (dwarf2out_source_line): Likewise. Output view resets and labels to the assembler, or select appropriate line info opcodes. (prune_unused_types_walk_attribs): Handle dw_val_class_view_list. (optimize_string_length): Catch it. Adjust. (resolve_addr): Copy vl_symbol along with ll_symbol. Handle dw_val_class_view_list, and remove it if no longer needed. (hash_loc_list): Hash view numbers. (loc_list_hasher::equal): Compare them. (optimize_location_lists): Check whether a view list symbol is needed, and whether the locview attribute is present, and whether they match. Remove the locview attribute if no longer needed. (index_location_lists): Call skip_loc_list_entry for test. (dwarf2out_finish): Call output_asm_line_debug_info for test. Use output_dwarf_version. * dwarf2out.h (enum dw_val_class): Add dw_val_class_view_list. (struct dw_val_node): Add val_view_list. * final.c (SEEN_NEXT_VIEW): New. (set_next_view_needed): New. (clear_next_view_needed): New. (maybe_output_next_view): New. (final_start_function): Rename to... (final_start_function_1): ... this. Take pointer to FIRST, add SEEN parameter. Emit param bindings in the initial view. (final_start_function): Reintroduce SEEN-less interface. (final): Rename to... (final_1): ... this. Take SEEN parameter. Output final pending next view at the end. (final): Reintroduce seen-less interface. (final_scan_insn): Output pending next view before switching sections or ending a block. Mark the next view as needed when outputting variable locations. Notify debug backend of section changes, and of location view changes. (rest_of_handle_final): Adjust. * toplev.c (process_options): Autodetect value for debug variable location views option. Warn on incompat5 without -gdwarf-5. * doc/invoke.texi (gvariable-location-views): New. (gvariable-location-views=incompat5): New. (gno-variable-location-views): New. From-SVN: r257510
2018-02-09 03:21:57 +01:00
DW_AT (DW_AT_GNU_locviews, 0x2137)
[IEPM] Introduce inline entry point markers Output DW_AT_entry_pc based on markers. Introduce DW_AT_GNU_entry_view as a DWARF extension. If views are enabled are we're not in strict compliance mode, output DW_AT_GNU_entry_view if it might be nonzero. This patch depends on SFN and LVU patchsets, and on the IEPM patch that introduces the inline_entry debug hook. for include/ChangeLog * dwarf2.def (DW_AT_GNU_entry_view): New. for gcc/ChangeLog * cfgexpand.c (expand_gimple_basic_block): Handle inline entry markers. * dwarf2out.c (dwarf2_debug_hooks): Enable inline_entry hook. (BLOCK_INLINE_ENTRY_LABEL): New. (dwarf2out_var_location): Disregard inline entry markers. (inline_entry_data): New struct. (inline_entry_data_hasher): New hashtable type. (inline_entry_data_hasher::hash): New. (inline_entry_data_hasher::equal): New. (inline_entry_data_table): New variable. (add_high_low_attributes): Add DW_AT_entry_pc and DW_AT_GNU_entry_view attributes if a pending entry is found in inline_entry_data_table. Add old entry_pc attribute only if debug nonbinding markers are disabled. (gen_inlined_subroutine_die): Set BLOCK_DIE if nonbinding markers are enabled. (block_within_block_p, dwarf2out_inline_entry): New. (dwarf2out_finish): Check that no entries remained in inline_entry_data_table. * final.c (reemit_insn_block_notes): Handle inline entry notes. (final_scan_insn, notice_source_line): Likewise. (rest_of_clean_state): Skip inline entry markers. * gimple-pretty-print.c (dump_gimple_debug): Handle inline entry markers. * gimple.c (gimple_build_debug_inline_entry): New. * gimple.h (enum gimple_debug_subcode): Add GIMPLE_DEBUG_INLINE_ENTRY. (gimple_build_debug_inline_entry): Declare. (gimple_debug_inline_entry_p): New. (gimple_debug_nonbind_marker_p): Adjust. * insn-notes.def (INLINE_ENTRY): New. * print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle inline entry marker notes. (print_insn): Likewise. * rtl.h (NOTE_MARKER_P): Add INLINE_ENTRY support. (INSN_DEBUG_MARKER_KIND): Likewise. (GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT): New. * tree-inline.c (expand_call_inline): Build and insert debug_inline_entry stmt. * tree-ssa-live.c (remove_unused_scope_block_p): Preserve inline entry blocks early, if nonbind markers are enabled. (dump_scope_block): Dump fragment info. * var-tracking.c (reemit_marker_as_note): Handle inline entry note. * doc/gimple.texi (gimple_debug_inline_entry_p): New. (gimple_build_debug_inline_entry): New. * doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): Enable/disable inline entry points too. * doc/rtl.texi (NOTE_INSN_INLINE_ENTRY): New. (DEBUG_INSN): Describe inline entry markers. From-SVN: r257511
2018-02-09 03:22:11 +01:00
DW_AT (DW_AT_GNU_entry_view, 0x2138)
/* VMS extensions. */
DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201)
/* GNAT extensions. */
/* GNAT descriptive type.
See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type . */
DW_AT (DW_AT_use_GNAT_descriptive_type, 0x2301)
DW_AT (DW_AT_GNAT_descriptive_type, 0x2302)
/* Rational constant extension.
See https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator . */
DW_TAG (DW_AT_GNU_numerator, 0x2303)
DW_TAG (DW_AT_GNU_denominator, 0x2304)
/* Biased integer extension.
See https://gcc.gnu.org/wiki/DW_AT_GNU_bias . */
DW_TAG (DW_AT_GNU_bias, 0x2305)
/* UPC extension. */
DW_AT (DW_AT_upc_threads_scaled, 0x3210)
/* PGI (STMicroelectronics) extensions. */
DW_AT (DW_AT_PGI_lbase, 0x3a00)
DW_AT (DW_AT_PGI_soffset, 0x3a01)
DW_AT (DW_AT_PGI_lstride, 0x3a02)
/* Apple extensions. */
DW_AT (DW_AT_APPLE_optimized, 0x3fe1)
DW_AT (DW_AT_APPLE_flags, 0x3fe2)
DW_AT (DW_AT_APPLE_isa, 0x3fe3)
DW_AT (DW_AT_APPLE_block, 0x3fe4)
DW_AT (DW_AT_APPLE_major_runtime_vers, 0x3fe5)
DW_AT (DW_AT_APPLE_runtime_class, 0x3fe6)
DW_AT (DW_AT_APPLE_omit_frame_ptr, 0x3fe7)
DW_AT (DW_AT_APPLE_property_name, 0x3fe8)
DW_AT (DW_AT_APPLE_property_getter, 0x3fe9)
DW_AT (DW_AT_APPLE_property_setter, 0x3fea)
DW_AT (DW_AT_APPLE_property_attribute, 0x3feb)
DW_AT (DW_AT_APPLE_objc_complete_type, 0x3fec)
DW_AT (DW_AT_APPLE_property, 0x3fed)
DW_END_AT
DW_FIRST_OP (DW_OP_addr, 0x03)
DW_OP (DW_OP_deref, 0x06)
DW_OP (DW_OP_const1u, 0x08)
DW_OP (DW_OP_const1s, 0x09)
DW_OP (DW_OP_const2u, 0x0a)
DW_OP (DW_OP_const2s, 0x0b)
DW_OP (DW_OP_const4u, 0x0c)
DW_OP (DW_OP_const4s, 0x0d)
DW_OP (DW_OP_const8u, 0x0e)
DW_OP (DW_OP_const8s, 0x0f)
DW_OP (DW_OP_constu, 0x10)
DW_OP (DW_OP_consts, 0x11)
DW_OP (DW_OP_dup, 0x12)
DW_OP (DW_OP_drop, 0x13)
DW_OP (DW_OP_over, 0x14)
DW_OP (DW_OP_pick, 0x15)
DW_OP (DW_OP_swap, 0x16)
DW_OP (DW_OP_rot, 0x17)
DW_OP (DW_OP_xderef, 0x18)
DW_OP (DW_OP_abs, 0x19)
DW_OP (DW_OP_and, 0x1a)
DW_OP (DW_OP_div, 0x1b)
DW_OP (DW_OP_minus, 0x1c)
DW_OP (DW_OP_mod, 0x1d)
DW_OP (DW_OP_mul, 0x1e)
DW_OP (DW_OP_neg, 0x1f)
DW_OP (DW_OP_not, 0x20)
DW_OP (DW_OP_or, 0x21)
DW_OP (DW_OP_plus, 0x22)
DW_OP (DW_OP_plus_uconst, 0x23)
DW_OP (DW_OP_shl, 0x24)
DW_OP (DW_OP_shr, 0x25)
DW_OP (DW_OP_shra, 0x26)
DW_OP (DW_OP_xor, 0x27)
DW_OP (DW_OP_bra, 0x28)
DW_OP (DW_OP_eq, 0x29)
DW_OP (DW_OP_ge, 0x2a)
DW_OP (DW_OP_gt, 0x2b)
DW_OP (DW_OP_le, 0x2c)
DW_OP (DW_OP_lt, 0x2d)
DW_OP (DW_OP_ne, 0x2e)
DW_OP (DW_OP_skip, 0x2f)
DW_OP (DW_OP_lit0, 0x30)
DW_OP (DW_OP_lit1, 0x31)
DW_OP (DW_OP_lit2, 0x32)
DW_OP (DW_OP_lit3, 0x33)
DW_OP (DW_OP_lit4, 0x34)
DW_OP (DW_OP_lit5, 0x35)
DW_OP (DW_OP_lit6, 0x36)
DW_OP (DW_OP_lit7, 0x37)
DW_OP (DW_OP_lit8, 0x38)
DW_OP (DW_OP_lit9, 0x39)
DW_OP (DW_OP_lit10, 0x3a)
DW_OP (DW_OP_lit11, 0x3b)
DW_OP (DW_OP_lit12, 0x3c)
DW_OP (DW_OP_lit13, 0x3d)
DW_OP (DW_OP_lit14, 0x3e)
DW_OP (DW_OP_lit15, 0x3f)
DW_OP (DW_OP_lit16, 0x40)
DW_OP (DW_OP_lit17, 0x41)
DW_OP (DW_OP_lit18, 0x42)
DW_OP (DW_OP_lit19, 0x43)
DW_OP (DW_OP_lit20, 0x44)
DW_OP (DW_OP_lit21, 0x45)
DW_OP (DW_OP_lit22, 0x46)
DW_OP (DW_OP_lit23, 0x47)
DW_OP (DW_OP_lit24, 0x48)
DW_OP (DW_OP_lit25, 0x49)
DW_OP (DW_OP_lit26, 0x4a)
DW_OP (DW_OP_lit27, 0x4b)
DW_OP (DW_OP_lit28, 0x4c)
DW_OP (DW_OP_lit29, 0x4d)
DW_OP (DW_OP_lit30, 0x4e)
DW_OP (DW_OP_lit31, 0x4f)
DW_OP (DW_OP_reg0, 0x50)
DW_OP (DW_OP_reg1, 0x51)
DW_OP (DW_OP_reg2, 0x52)
DW_OP (DW_OP_reg3, 0x53)
DW_OP (DW_OP_reg4, 0x54)
DW_OP (DW_OP_reg5, 0x55)
DW_OP (DW_OP_reg6, 0x56)
DW_OP (DW_OP_reg7, 0x57)
DW_OP (DW_OP_reg8, 0x58)
DW_OP (DW_OP_reg9, 0x59)
DW_OP (DW_OP_reg10, 0x5a)
DW_OP (DW_OP_reg11, 0x5b)
DW_OP (DW_OP_reg12, 0x5c)
DW_OP (DW_OP_reg13, 0x5d)
DW_OP (DW_OP_reg14, 0x5e)
DW_OP (DW_OP_reg15, 0x5f)
DW_OP (DW_OP_reg16, 0x60)
DW_OP (DW_OP_reg17, 0x61)
DW_OP (DW_OP_reg18, 0x62)
DW_OP (DW_OP_reg19, 0x63)
DW_OP (DW_OP_reg20, 0x64)
DW_OP (DW_OP_reg21, 0x65)
DW_OP (DW_OP_reg22, 0x66)
DW_OP (DW_OP_reg23, 0x67)
DW_OP (DW_OP_reg24, 0x68)
DW_OP (DW_OP_reg25, 0x69)
DW_OP (DW_OP_reg26, 0x6a)
DW_OP (DW_OP_reg27, 0x6b)
DW_OP (DW_OP_reg28, 0x6c)
DW_OP (DW_OP_reg29, 0x6d)
DW_OP (DW_OP_reg30, 0x6e)
DW_OP (DW_OP_reg31, 0x6f)
DW_OP (DW_OP_breg0, 0x70)
DW_OP (DW_OP_breg1, 0x71)
DW_OP (DW_OP_breg2, 0x72)
DW_OP (DW_OP_breg3, 0x73)
DW_OP (DW_OP_breg4, 0x74)
DW_OP (DW_OP_breg5, 0x75)
DW_OP (DW_OP_breg6, 0x76)
DW_OP (DW_OP_breg7, 0x77)
DW_OP (DW_OP_breg8, 0x78)
DW_OP (DW_OP_breg9, 0x79)
DW_OP (DW_OP_breg10, 0x7a)
DW_OP (DW_OP_breg11, 0x7b)
DW_OP (DW_OP_breg12, 0x7c)
DW_OP (DW_OP_breg13, 0x7d)
DW_OP (DW_OP_breg14, 0x7e)
DW_OP (DW_OP_breg15, 0x7f)
DW_OP (DW_OP_breg16, 0x80)
DW_OP (DW_OP_breg17, 0x81)
DW_OP (DW_OP_breg18, 0x82)
DW_OP (DW_OP_breg19, 0x83)
DW_OP (DW_OP_breg20, 0x84)
DW_OP (DW_OP_breg21, 0x85)
DW_OP (DW_OP_breg22, 0x86)
DW_OP (DW_OP_breg23, 0x87)
DW_OP (DW_OP_breg24, 0x88)
DW_OP (DW_OP_breg25, 0x89)
DW_OP (DW_OP_breg26, 0x8a)
DW_OP (DW_OP_breg27, 0x8b)
DW_OP (DW_OP_breg28, 0x8c)
DW_OP (DW_OP_breg29, 0x8d)
DW_OP (DW_OP_breg30, 0x8e)
DW_OP (DW_OP_breg31, 0x8f)
DW_OP (DW_OP_regx, 0x90)
DW_OP (DW_OP_fbreg, 0x91)
DW_OP (DW_OP_bregx, 0x92)
DW_OP (DW_OP_piece, 0x93)
DW_OP (DW_OP_deref_size, 0x94)
DW_OP (DW_OP_xderef_size, 0x95)
DW_OP (DW_OP_nop, 0x96)
/* DWARF 3 extensions. */
DW_OP (DW_OP_push_object_address, 0x97)
DW_OP (DW_OP_call2, 0x98)
DW_OP (DW_OP_call4, 0x99)
DW_OP (DW_OP_call_ref, 0x9a)
DW_OP (DW_OP_form_tls_address, 0x9b)
DW_OP (DW_OP_call_frame_cfa, 0x9c)
DW_OP (DW_OP_bit_piece, 0x9d)
/* DWARF 4 extensions. */
DW_OP (DW_OP_implicit_value, 0x9e)
DW_OP (DW_OP_stack_value, 0x9f)
/* DWARF 5 extensions. */
DW_OP (DW_OP_implicit_pointer, 0xa0)
DW_OP (DW_OP_addrx, 0xa1)
DW_OP (DW_OP_constx, 0xa2)
DW_OP (DW_OP_entry_value, 0xa3)
DW_OP (DW_OP_const_type, 0xa4)
DW_OP (DW_OP_regval_type, 0xa5)
DW_OP (DW_OP_deref_type, 0xa6)
DW_OP (DW_OP_xderef_type, 0xa7)
DW_OP (DW_OP_convert, 0xa8)
DW_OP (DW_OP_reinterpret, 0xa9)
DW_OP_DUP (DW_OP_lo_user, 0xe0) /* Implementation-defined range start. */
DW_OP_DUP (DW_OP_hi_user, 0xff) /* Implementation-defined range end. */
/* GNU extensions. */
DW_OP (DW_OP_GNU_push_tls_address, 0xe0)
/* The following is for marking variables that are uninitialized. */
DW_OP (DW_OP_GNU_uninit, 0xf0)
DW_OP (DW_OP_GNU_encoded_addr, 0xf1)
/* The GNU implicit pointer extension.
See http://www.dwarfstd.org/ShowIssue.php?issue=100831.1&type=open . */
DW_OP (DW_OP_GNU_implicit_pointer, 0xf2)
/* The GNU entry value extension.
See http://www.dwarfstd.org/ShowIssue.php?issue=100909.1&type=open . */
DW_OP (DW_OP_GNU_entry_value, 0xf3)
/* The GNU typed stack extension.
See http://www.dwarfstd.org/doc/040408.1.html . */
DW_OP (DW_OP_GNU_const_type, 0xf4)
DW_OP (DW_OP_GNU_regval_type, 0xf5)
DW_OP (DW_OP_GNU_deref_type, 0xf6)
DW_OP (DW_OP_GNU_convert, 0xf7)
DW_OP (DW_OP_GNU_reinterpret, 0xf9)
/* The GNU parameter ref extension. */
DW_OP (DW_OP_GNU_parameter_ref, 0xfa)
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
DW_OP (DW_OP_GNU_addr_index, 0xfb)
DW_OP (DW_OP_GNU_const_index, 0xfc)
re PR debug/77589 (fortran: Missing DW_AT_byte_stride for an array record field selection) PR debug/77589 include/ * dwarf2.def (DW_OP_GNU_variable_value): New opcode. gcc/ * dwarf2out.c (struct dw_loc_list_struct): Add noted_variable_value bitfield. (size_of_loc_descr): Handle DW_OP_GNU_variable_value. (output_loc_operands): Handle DW_OP_call_ref and DW_OP_GNU_variable_value. (struct variable_value_struct): New type. (struct variable_value_hasher): Likewise. (variable_value_hash): New variable. (string_types): Remove. (copy_loc_descr): New function. (add_loc_descr_to_each): Clarify comment. Use copy_loc_descr. (prepend_loc_descr_to_each): New function. (add_loc_list): Fix comment typo. Use prepend_loc_descr_to_each instead of add_loc_descr_to_each if the first argument is single location list and the second has multiple. (resolve_args_picking_1): Handle DW_OP_GNU_variable_value. (loc_list_from_tree_1): For early_dwarf, emit DW_OP_GNU_variable_value when looking for variable value which doesn't have other location info. (loc_list_from_tree): Formatting fix. (gen_array_type_die): Simplify DW_AT_string_length handling. (adjust_string_types): Remove. (gen_subprogram_die): Don't call adjust_string_types nor test/set string_types. Call resolve_variable_values. (prune_unused_types_walk_loc_descr): Handle DW_OP_GNU_variable_value. (resolve_addr_in_expr): Likewise. Add A argument. (copy_deref_exprloc): Remove deref argument. Adjust for the original expression being DW_OP_GNU_variable_value with optionally DW_OP_stack_value after it instead of DW_OP_call4 with DW_OP_deref optionally after it. (optimize_string_length): Rework for DW_OP_GNU_variable_value. (resolve_addr): Adjust optimize_string_length and resolve_addr_in_expr callers. Set remove_AT_byte_size if removing DW_AT_string_length. (variable_value_hasher::hash, variable_value_hasher::equal): New methods. (resolve_variable_value_in_expr, resolve_variable_value, resolve_variable_values, note_variable_value_in_expr, note_variable_value): New functions. (dwarf2out_early_finish): Call note_variable_value on all toplevel DIEs. From-SVN: r245733
2017-02-25 09:18:24 +01:00
/* The GNU variable value extension.
See http://dwarfstd.org/ShowIssue.php?issue=161109.2 . */
DW_OP (DW_OP_GNU_variable_value, 0xfd)
/* HP extensions. */
DW_OP_DUP (DW_OP_HP_unknown, 0xe0) /* Ouch, the same as GNU_push_tls_address. */
DW_OP (DW_OP_HP_is_value, 0xe1)
DW_OP (DW_OP_HP_fltconst4, 0xe2)
DW_OP (DW_OP_HP_fltconst8, 0xe3)
DW_OP (DW_OP_HP_mod_range, 0xe4)
DW_OP (DW_OP_HP_unmod_range, 0xe5)
DW_OP (DW_OP_HP_tls, 0xe6)
/* PGI (STMicroelectronics) extensions. */
DW_OP (DW_OP_PGI_omp_thread_num, 0xf8)
/* AARCH64 extensions.
DW_OP_AARCH64_operation takes one mandatory unsigned LEB128 operand.
Bits[6:0] of this operand is the action code, all others bits are initialized
to 0 except explicitly documented for one action. Please refer AArch64 DWARF
ABI documentation for details. */
DW_OP (DW_OP_AARCH64_operation, 0xea)
DW_END_OP
DW_FIRST_ATE (DW_ATE_void, 0x0)
DW_ATE (DW_ATE_address, 0x1)
DW_ATE (DW_ATE_boolean, 0x2)
DW_ATE (DW_ATE_complex_float, 0x3)
DW_ATE (DW_ATE_float, 0x4)
DW_ATE (DW_ATE_signed, 0x5)
DW_ATE (DW_ATE_signed_char, 0x6)
DW_ATE (DW_ATE_unsigned, 0x7)
DW_ATE (DW_ATE_unsigned_char, 0x8)
/* DWARF 3. */
DW_ATE (DW_ATE_imaginary_float, 0x9)
DW_ATE (DW_ATE_packed_decimal, 0xa)
DW_ATE (DW_ATE_numeric_string, 0xb)
DW_ATE (DW_ATE_edited, 0xc)
DW_ATE (DW_ATE_signed_fixed, 0xd)
DW_ATE (DW_ATE_unsigned_fixed, 0xe)
DW_ATE (DW_ATE_decimal_float, 0xf)
/* DWARF 4. */
DW_ATE (DW_ATE_UTF, 0x10)
/* DWARF 5. */
DW_ATE (DW_ATE_UCS, 0x11)
DW_ATE (DW_ATE_ASCII, 0x12)
DW_ATE_DUP (DW_ATE_lo_user, 0x80)
DW_ATE_DUP (DW_ATE_hi_user, 0xff)
/* HP extensions. */
DW_ATE (DW_ATE_HP_float80, 0x80) /* Floating-point (80 bit). */
DW_ATE (DW_ATE_HP_complex_float80, 0x81) /* Complex floating-point (80 bit). */
DW_ATE (DW_ATE_HP_float128, 0x82) /* Floating-point (128 bit). */
DW_ATE (DW_ATE_HP_complex_float128, 0x83) /* Complex fp (128 bit). */
DW_ATE (DW_ATE_HP_floathpintel, 0x84) /* Floating-point (82 bit IA64). */
DW_ATE (DW_ATE_HP_imaginary_float80, 0x85)
DW_ATE (DW_ATE_HP_imaginary_float128, 0x86)
DW_ATE (DW_ATE_HP_VAX_float, 0x88) /* F or G floating. */
DW_ATE (DW_ATE_HP_VAX_float_d, 0x89) /* D floating. */
DW_ATE (DW_ATE_HP_packed_decimal, 0x8a) /* Cobol. */
DW_ATE (DW_ATE_HP_zoned_decimal, 0x8b) /* Cobol. */
DW_ATE (DW_ATE_HP_edited, 0x8c) /* Cobol. */
DW_ATE (DW_ATE_HP_signed_fixed, 0x8d) /* Cobol. */
DW_ATE (DW_ATE_HP_unsigned_fixed, 0x8e) /* Cobol. */
DW_ATE (DW_ATE_HP_VAX_complex_float, 0x8f) /* F or G floating complex. */
DW_ATE (DW_ATE_HP_VAX_complex_float_d, 0x90) /* D floating complex. */
DW_END_ATE
DW_FIRST_CFA (DW_CFA_advance_loc, 0x40)
DW_CFA (DW_CFA_offset, 0x80)
DW_CFA (DW_CFA_restore, 0xc0)
DW_CFA (DW_CFA_nop, 0x00)
DW_CFA (DW_CFA_set_loc, 0x01)
DW_CFA (DW_CFA_advance_loc1, 0x02)
DW_CFA (DW_CFA_advance_loc2, 0x03)
DW_CFA (DW_CFA_advance_loc4, 0x04)
DW_CFA (DW_CFA_offset_extended, 0x05)
DW_CFA (DW_CFA_restore_extended, 0x06)
DW_CFA (DW_CFA_undefined, 0x07)
DW_CFA (DW_CFA_same_value, 0x08)
DW_CFA (DW_CFA_register, 0x09)
DW_CFA (DW_CFA_remember_state, 0x0a)
DW_CFA (DW_CFA_restore_state, 0x0b)
DW_CFA (DW_CFA_def_cfa, 0x0c)
DW_CFA (DW_CFA_def_cfa_register, 0x0d)
DW_CFA (DW_CFA_def_cfa_offset, 0x0e)
/* DWARF 3. */
DW_CFA (DW_CFA_def_cfa_expression, 0x0f)
DW_CFA (DW_CFA_expression, 0x10)
DW_CFA (DW_CFA_offset_extended_sf, 0x11)
DW_CFA (DW_CFA_def_cfa_sf, 0x12)
DW_CFA (DW_CFA_def_cfa_offset_sf, 0x13)
DW_CFA (DW_CFA_val_offset, 0x14)
DW_CFA (DW_CFA_val_offset_sf, 0x15)
DW_CFA (DW_CFA_val_expression, 0x16)
DW_CFA (DW_CFA_lo_user, 0x1c)
DW_CFA (DW_CFA_hi_user, 0x3f)
/* SGI/MIPS specific. */
DW_CFA (DW_CFA_MIPS_advance_loc8, 0x1d)
/* GNU extensions.
NOTE: DW_CFA_GNU_window_save is multiplexed on Sparc and AArch64. */
DW_CFA (DW_CFA_GNU_window_save, 0x2d)
DW_CFA_DUP (DW_CFA_AARCH64_negate_ra_state, 0x2d)
DW_CFA (DW_CFA_GNU_args_size, 0x2e)
DW_CFA (DW_CFA_GNU_negative_offset_extended, 0x2f)
DW_END_CFA
/* Index attributes in the Abbreviations Table. */
DW_FIRST_IDX (DW_IDX_compile_unit, 1)
DW_IDX (DW_IDX_type_unit, 2)
DW_IDX (DW_IDX_die_offset, 3)
DW_IDX (DW_IDX_parent, 4)
DW_IDX (DW_IDX_type_hash, 5)
DW_IDX_DUP (DW_IDX_lo_user, 0x2000)
DW_IDX (DW_IDX_hi_user, 0x3fff)
DW_IDX (DW_IDX_GNU_internal, 0x2000)
DW_IDX (DW_IDX_GNU_external, 0x2001)
DW_END_IDX