.. _zw_vocabulary_dwarf:

Dwarf vocabulary
================

.. include:: zw_vocabulary_dwarf-blurb.txt

.. _zw_vocabulary_dwarf type T_ABBREV:

T_ABBREV
--------



Values of this type represent individual abbreviations found in
abbreviation units::

	$ dwgrep ./tests/a1.out -e 'unit root abbrev'
	[1] offset:0, children:yes, tag:compile_unit
		0 producer (GNU_strp_alt)
		0x3 language (data1)
		0x5 name (GNU_strp_alt)
		0x8 comp_dir (GNU_strp_alt)
		0xb low_pc (addr)
		0xd high_pc (addr)
		0xf stmt_list (data4)


Applicable words
................
:ref:`\!AT_* <zw_vocabulary_dwarf !AT_*>`, :ref:`\!DW_AT_* <zw_vocabulary_dwarf !DW_AT_*>`, :ref:`\!DW_TAG_* <zw_vocabulary_dwarf !DW_TAG_*>`, :ref:`\!TAG_* <zw_vocabulary_dwarf !TAG_*>`, :ref:`\!haschildren <zw_vocabulary_dwarf !haschildren>`, :ref:`\?AT_* <zw_vocabulary_dwarf ?AT_*>`, :ref:`\?DW_AT_* <zw_vocabulary_dwarf ?DW_AT_*>`, :ref:`\?DW_TAG_* <zw_vocabulary_dwarf ?DW_TAG_*>`, :ref:`\?TAG_* <zw_vocabulary_dwarf ?TAG_*>`, :ref:`\?haschildren <zw_vocabulary_dwarf ?haschildren>`, :ref:`\attribute <zw_vocabulary_dwarf attribute>`, :ref:`\code <zw_vocabulary_dwarf code>`, :ref:`\label <zw_vocabulary_dwarf label>`, :ref:`\offset <zw_vocabulary_dwarf offset>`



.. _zw_vocabulary_dwarf type T_ABBREV_ATTR:

T_ABBREV_ATTR
-------------



Values of this type represent attributes attached to abbreviations::

	$ dwgrep ./tests/a1.out -e 'unit root abbrev attribute'
	0 producer (GNU_strp_alt)
	0x3 language (data1)
	0x5 name (GNU_strp_alt)
	0x8 comp_dir (GNU_strp_alt)
	0xb low_pc (addr)
	0xd high_pc (addr)
	0xf stmt_list (data4)


Applicable words
................
:ref:`\!AT_* <zw_vocabulary_dwarf !AT_*>`, :ref:`\!DW_AT_* <zw_vocabulary_dwarf !DW_AT_*>`, :ref:`\!DW_FORM_* <zw_vocabulary_dwarf !DW_FORM_*>`, :ref:`\!FORM_* <zw_vocabulary_dwarf !FORM_*>`, :ref:`\?AT_* <zw_vocabulary_dwarf ?AT_*>`, :ref:`\?DW_AT_* <zw_vocabulary_dwarf ?DW_AT_*>`, :ref:`\?DW_FORM_* <zw_vocabulary_dwarf ?DW_FORM_*>`, :ref:`\?FORM_* <zw_vocabulary_dwarf ?FORM_*>`, :ref:`\form <zw_vocabulary_dwarf form>`, :ref:`\label <zw_vocabulary_dwarf label>`, :ref:`\offset <zw_vocabulary_dwarf offset>`



.. _zw_vocabulary_dwarf type T_ABBREV_UNIT:

T_ABBREV_UNIT
-------------



Values of this type represent abbreviation units found in Dwarf files::

	$ dwgrep tests/dwz-partial2-1 -e 'abbrev'
	abbrev unit 0
	abbrev unit 0


Applicable words
................
:ref:`\entry <zw_vocabulary_dwarf entry>`, :ref:`\offset <zw_vocabulary_dwarf offset>`



.. _zw_vocabulary_dwarf type T_ASET:

T_ASET
------



Values of this type contain sets of addresses.  They are used for
representing address ranges of all sorts.  They behave a bit like
sequences of constants, but calling ``elem`` is not advised unless you
can be sure that the address range is not excessively large::

	$ dwgrep ./tests/bitcount.o -e 'entry @AT_location address'
	[0x10000, 0x10017)
	[0x10017, 0x1001a)
	[0x1001a, 0x10020)
	[0x10000, 0x10007)
	[0x10007, 0x1001e)
	[0x1001e, 0x10020)

Address sets don't have to be continuous.


Applicable words
................
:ref:`\!contains <zw_vocabulary_dwarf !contains>`, :ref:`\!empty <zw_vocabulary_dwarf !empty>`, :ref:`\!overlaps <zw_vocabulary_dwarf !overlaps>`, :ref:`\?contains <zw_vocabulary_dwarf ?contains>`, :ref:`\?empty <zw_vocabulary_dwarf ?empty>`, :ref:`\?overlaps <zw_vocabulary_dwarf ?overlaps>`, :ref:`\add <zw_vocabulary_dwarf add>`, :ref:`\elem <zw_vocabulary_dwarf elem>`, :ref:`\high <zw_vocabulary_dwarf high>`, :ref:`\length <zw_vocabulary_dwarf length>`, :ref:`\low <zw_vocabulary_dwarf low>`, :ref:`\overlap <zw_vocabulary_dwarf overlap>`, :ref:`\range <zw_vocabulary_dwarf range>`, :ref:`\relem <zw_vocabulary_dwarf relem>`, :ref:`\sub <zw_vocabulary_dwarf sub>`



.. _zw_vocabulary_dwarf type T_ATTR:

T_ATTR
------



Values of this type represent attributes attached to DIE's::

	$ dwgrep ./tests/a1.out -e 'unit root attribute'
	producer (GNU_strp_alt)	GNU C 4.6.3 20120306 (Red Hat 4.6.3-2);
	language (data1)	DW_LANG_C89;
	name (GNU_strp_alt)	foo.c;
	comp_dir (GNU_strp_alt)	/home/petr/proj/dwgrep;
	low_pc (addr)	0x4004b2;
	high_pc (addr)	0x4004b8;
	stmt_list (data4)	0;



Applicable words
................
:ref:`\!AT_* <zw_vocabulary_dwarf !AT_*>`, :ref:`\!DW_AT_* <zw_vocabulary_dwarf !DW_AT_*>`, :ref:`\!DW_FORM_* <zw_vocabulary_dwarf !DW_FORM_*>`, :ref:`\!FORM_* <zw_vocabulary_dwarf !FORM_*>`, :ref:`\?AT_* <zw_vocabulary_dwarf ?AT_*>`, :ref:`\?DW_AT_* <zw_vocabulary_dwarf ?DW_AT_*>`, :ref:`\?DW_FORM_* <zw_vocabulary_dwarf ?DW_FORM_*>`, :ref:`\?FORM_* <zw_vocabulary_dwarf ?FORM_*>`, :ref:`\address <zw_vocabulary_dwarf address>`, :ref:`\cooked <zw_vocabulary_dwarf cooked>`, :ref:`\form <zw_vocabulary_dwarf form>`, :ref:`\label <zw_vocabulary_dwarf label>`, :ref:`\raw <zw_vocabulary_dwarf raw>`, :ref:`\unit <zw_vocabulary_dwarf unit>`, :ref:`\value <zw_vocabulary_dwarf value>`



.. _zw_vocabulary_dwarf type T_CU:

T_CU
----



Values of this type represent compile units, partial units and type
units found in Dwarf files::

	$ dwgrep tests/dwz-partial2-1 -e 'unit'
	CU 0x1f
	CU 0x8a
	CU 0xdc


Applicable words
................
:ref:`\abbrev <zw_vocabulary_dwarf abbrev>`, :ref:`\cooked <zw_vocabulary_dwarf cooked>`, :ref:`\entry <zw_vocabulary_dwarf entry>`, :ref:`\offset <zw_vocabulary_dwarf offset>`, :ref:`\raw <zw_vocabulary_dwarf raw>`, :ref:`\root <zw_vocabulary_dwarf root>`, :ref:`\version <zw_vocabulary_dwarf version>`



.. _zw_vocabulary_dwarf type T_DIE:

T_DIE
-----



Values of this type represent debug info entries, or DIE's, found in
CU's::

	$ dwgrep ./tests/a1.out -e 'unit root'
	[b]	compile_unit
		producer (GNU_strp_alt)	GNU C 4.6.3 20120306 (Red Hat 4.6.3-2);
		language (data1)	DW_LANG_C89;
		name (GNU_strp_alt)	foo.c;
		comp_dir (GNU_strp_alt)	/home/petr/proj/dwgrep;
		low_pc (addr)	0x4004b2;
		high_pc (addr)	0x4004b8;
		stmt_list (data4)	0;


Applicable words
................
:ref:`\!AT_* <zw_vocabulary_dwarf !AT_*>`, :ref:`\!DW_AT_* <zw_vocabulary_dwarf !DW_AT_*>`, :ref:`\!DW_TAG_* <zw_vocabulary_dwarf !DW_TAG_*>`, :ref:`\!TAG_* <zw_vocabulary_dwarf !TAG_*>`, :ref:`\!haschildren <zw_vocabulary_dwarf !haschildren>`, :ref:`\!root <zw_vocabulary_dwarf !root>`, :ref:`\?AT_* <zw_vocabulary_dwarf ?AT_*>`, :ref:`\?DW_AT_* <zw_vocabulary_dwarf ?DW_AT_*>`, :ref:`\?DW_TAG_* <zw_vocabulary_dwarf ?DW_TAG_*>`, :ref:`\?TAG_* <zw_vocabulary_dwarf ?TAG_*>`, :ref:`\?haschildren <zw_vocabulary_dwarf ?haschildren>`, :ref:`\?root <zw_vocabulary_dwarf ?root>`, :ref:`\@AT_* <zw_vocabulary_dwarf @AT_*>`, :ref:`\@DW_AT_* <zw_vocabulary_dwarf @DW_AT_*>`, :ref:`\abbrev <zw_vocabulary_dwarf abbrev>`, :ref:`\address <zw_vocabulary_dwarf address>`, :ref:`\attribute <zw_vocabulary_dwarf attribute>`, :ref:`\child <zw_vocabulary_dwarf child>`, :ref:`\cooked <zw_vocabulary_dwarf cooked>`, :ref:`\high <zw_vocabulary_dwarf high>`, :ref:`\label <zw_vocabulary_dwarf label>`, :ref:`\low <zw_vocabulary_dwarf low>`, :ref:`\name <zw_vocabulary_dwarf name>`, :ref:`\offset <zw_vocabulary_dwarf offset>`, :ref:`\parent <zw_vocabulary_dwarf parent>`, :ref:`\raw <zw_vocabulary_dwarf raw>`, :ref:`\root <zw_vocabulary_dwarf root>`, :ref:`\unit <zw_vocabulary_dwarf unit>`



.. _zw_vocabulary_dwarf type T_DWARF:

T_DWARF
-------



Values of this type represent opened Dwarf files::

	$ dwgrep ./tests/a1.out -e ''
	<Dwarf "./tests/a1.out">

	$ dwgrep '"tests/a1.out" dwopen'
	<Dwarf "tests/a1.out">

If a given file contains .gnu_debugaltlink, it is subsumed by the
Dwarf handle as well.

Values of type Dwarf (as well as many other Dwarf-related Zwerg
values) come in two flavors: cooked and raw.  Raw values generally
present the underlying bits faithfully, cooked ones do some amount of
interpretation.  For example, cooked DIE's merge
``DW_TAG_imported_unit`` nodes, and thus a given node may be presented
as having more children than the underlying bits suggest.  The actual
ways in which the interpretation differs between raw and cooked are
described at each word that makes the distinction.

Two words are used for switching Dwarf back and forth: ``raw`` and
``cooked``.


Applicable words
................
:ref:`\abbrev <zw_vocabulary_dwarf abbrev>`, :ref:`\cooked <zw_vocabulary_dwarf cooked>`, :ref:`\entry <zw_vocabulary_dwarf entry>`, :ref:`\name <zw_vocabulary_dwarf name>`, :ref:`\raw <zw_vocabulary_dwarf raw>`, :ref:`\symbol <zw_vocabulary_dwarf symbol>`, :ref:`\unit <zw_vocabulary_dwarf unit>`



.. _zw_vocabulary_dwarf type T_ELFSYM:

T_ELFSYM
--------



Values of this type represent ELF symbol table entries::

	$ dwgrep/dwgrep dwgrep/dwgrep -e symbol
	[...]
	89:	0x0000000060cd90      0 NOTYPE	LOCAL	DEFAULT	__init_array_start
	90:	0x0000000060cdb8      0 OBJECT	LOCAL	DEFAULT	_DYNAMIC
	91:	0x00000000405f20   1001 FUNC	GLOBAL	DEFAULT	_ZN6dumper10dump_charpERSoPKcmNS_6formatE
	92:	0x0000000060d3e0      0 NOTYPE	WEAK	DEFAULT	data_start
	93:	0x0000000060d400    280 OBJECT	GLOBAL	DEFAULT	_ZSt3cin@@GLIBCXX_3.4
	94:	0000000000000000      0 FUNC	GLOBAL	DEFAULT	_ZNSs6appendEPKcm@@GLIBCXX_3.4
	[...]


Applicable words
................
:ref:`\address <zw_vocabulary_dwarf address>`, :ref:`\binding <zw_vocabulary_dwarf binding>`, :ref:`\label <zw_vocabulary_dwarf label>`, :ref:`\name <zw_vocabulary_dwarf name>`, :ref:`\size <zw_vocabulary_dwarf size>`, :ref:`\value <zw_vocabulary_dwarf value>`, :ref:`\visibility <zw_vocabulary_dwarf visibility>`



.. _zw_vocabulary_dwarf type T_LOCLIST_ELEM:

T_LOCLIST_ELEM
--------------



Values of this type represent location expressions.  A location
expression behaves a bit like a sequence with address range attached
to it.  It contains location expression instructions, values of type
``T_LOCLIST_OP``::

	$ dwgrep ./tests/bitcount.o -e 'entry @AT_location'
	0x10000..0x10017:[0:reg5]
	0x10017..0x1001a:[0:breg5<0>, 2:breg1<0>, 4:and, 5:stack_value]
	0x1001a..0x10020:[0:reg5]
	0x10000..0x10007:[0:lit0, 1:stack_value]
	0x10007..0x1001e:[0:reg0]
	0x1001e..0x10020:[0:lit0, 1:stack_value]


Applicable words
................
:ref:`\!DW_OP_* <zw_vocabulary_dwarf !DW_OP_*>`, :ref:`\!OP_* <zw_vocabulary_dwarf !OP_*>`, :ref:`\?DW_OP_* <zw_vocabulary_dwarf ?DW_OP_*>`, :ref:`\?OP_* <zw_vocabulary_dwarf ?OP_*>`, :ref:`\address <zw_vocabulary_dwarf address>`, :ref:`\elem <zw_vocabulary_dwarf elem>`, :ref:`\length <zw_vocabulary_dwarf length>`, :ref:`\relem <zw_vocabulary_dwarf relem>`



.. _zw_vocabulary_dwarf type T_LOCLIST_OP:

T_LOCLIST_OP
------------



Values of this type hold location expression instructions::

	$ dwgrep ./tests/testfile_const_type -e 'entry @AT_location elem'
	0:fbreg<0>
	0:fbreg<0>
	2:GNU_deref_type<8>/<37>
	5:GNU_const_type<[25] base_type>/<[0, 0, 0x80, 0x67, 0x45, 0x23, 0x1, 0]>
	16:div
	17:GNU_convert<44>
	19:stack_value


Applicable words
................
:ref:`\!DW_OP_* <zw_vocabulary_dwarf !DW_OP_*>`, :ref:`\!OP_* <zw_vocabulary_dwarf !OP_*>`, :ref:`\?DW_OP_* <zw_vocabulary_dwarf ?DW_OP_*>`, :ref:`\?OP_* <zw_vocabulary_dwarf ?OP_*>`, :ref:`\label <zw_vocabulary_dwarf label>`, :ref:`\offset <zw_vocabulary_dwarf offset>`, :ref:`\value <zw_vocabulary_dwarf value>`



.. _zw_vocabulary_dwarf !AT_*:
.. _zw_vocabulary_dwarf !DW_AT_*:
.. _zw_vocabulary_dwarf ?AT_*:
.. _zw_vocabulary_dwarf ?DW_AT_*:

!AT_*, !DW_AT_*, ?AT_*, ?DW_AT_*
--------------------------------

This section describes the following words: ``?DW_AT_vtable_elem_location``, ``?DW_AT_visibility``, ``?DW_AT_virtuality``, ``?DW_AT_variable_parameter``, ``?DW_AT_use_location``, ``?DW_AT_use_UTF8``, ``?DW_AT_upper_bound``, ``?DW_AT_type``, ``?DW_AT_trampoline``, ``?DW_AT_threads_scaled``, ``?DW_AT_string_length_byte_size``, ``?DW_AT_string_length_bit_size``, ``?DW_AT_string_length``, ``?DW_AT_str_offsets_base``, ``?DW_AT_stmt_list``, ``?DW_AT_static_link``, ``?DW_AT_start_scope``, ``?DW_AT_src_info``, ``?DW_AT_src_coords``, ``?DW_AT_specification``, ``?DW_AT_small``, ``?DW_AT_signature``, ``?DW_AT_sibling``, ``?DW_AT_sf_names``, ``?DW_AT_segment``, ``?DW_AT_rvalue_reference``, ``?DW_AT_rnglists_base``, ``?DW_AT_return_addr``, ``?DW_AT_reference``, ``?DW_AT_recursive``, ``?DW_AT_rank``, ``?DW_AT_ranges``, ``?DW_AT_pure``, ``?DW_AT_prototyped``, ``?DW_AT_producer``, ``?DW_AT_priority``, ``?DW_AT_picture_string``, ``?DW_AT_ordering``, ``?DW_AT_object_pointer``, ``?DW_AT_noreturn``, ``?DW_AT_namelist_item``, ``?DW_AT_name``, ``?DW_AT_mutable``, ``?DW_AT_main_subprogram``, ``?DW_AT_macros``, ``?DW_AT_macro_info``, ``?DW_AT_mac_info``, ``?DW_AT_lower_bound``, ``?DW_AT_low_pc``, ``?DW_AT_loclists_base``, ``?DW_AT_location``, ``?DW_AT_linkage_name``, ``?DW_AT_language``, ``?DW_AT_is_optional``, ``?DW_AT_inline``, ``?DW_AT_import``, ``?DW_AT_identifier_case``, ``?DW_AT_high_pc``, ``?DW_AT_friend``, ``?DW_AT_frame_base``, ``?DW_AT_external``, ``?DW_AT_extension``, ``?DW_AT_export_symbols``, ``?DW_AT_explicit``, ``?DW_AT_enum_class``, ``?DW_AT_entry_pc``, ``?DW_AT_endianity``, ``?DW_AT_encoding``, ``?DW_AT_elemental``, ``?DW_AT_dwo_name``, ``?DW_AT_discr_value``, ``?DW_AT_discr_list``, ``?DW_AT_discr``, ``?DW_AT_digit_count``, ``?DW_AT_description``, ``?DW_AT_deleted``, ``?DW_AT_defaulted``, ``?DW_AT_default_value``, ``?DW_AT_declaration``, ``?DW_AT_decl_line``, ``?DW_AT_decl_file``, ``?DW_AT_decl_column``, ``?DW_AT_decimal_sign``, ``?DW_AT_decimal_scale``, ``?DW_AT_data_member_location``, ``?DW_AT_data_location``, ``?DW_AT_data_bit_offset``, ``?DW_AT_count``, ``?DW_AT_containing_type``, ``?DW_AT_const_value``, ``?DW_AT_const_expr``, ``?DW_AT_comp_dir``, ``?DW_AT_common_reference``, ``?DW_AT_calling_convention``, ``?DW_AT_call_value``, ``?DW_AT_call_target_clobbered``, ``?DW_AT_call_target``, ``?DW_AT_call_tail_call``, ``?DW_AT_call_return_pc``, ``?DW_AT_call_pc``, ``?DW_AT_call_parameter``, ``?DW_AT_call_origin``, ``?DW_AT_call_line``, ``?DW_AT_call_file``, ``?DW_AT_call_data_value``, ``?DW_AT_call_data_location``, ``?DW_AT_call_column``, ``?DW_AT_call_all_tail_calls``, ``?DW_AT_call_all_source_calls``, ``?DW_AT_call_all_calls``, ``?DW_AT_byte_stride``, ``?DW_AT_byte_size``, ``?DW_AT_body_end``, ``?DW_AT_body_begin``, ``?DW_AT_bit_stride``, ``?DW_AT_bit_size``, ``?DW_AT_bit_offset``, ``?DW_AT_binary_scale``, ``?DW_AT_base_types``, ``?DW_AT_associated``, ``?DW_AT_artificial``, ``?DW_AT_allocated``, ``?DW_AT_alignment``, ``?DW_AT_address_class``, ``?DW_AT_addr_base``, ``?DW_AT_accessibility``, ``?DW_AT_abstract_origin``, ``?DW_AT_MIPS_tail_loop_begin``, ``?DW_AT_MIPS_stride_elem``, ``?DW_AT_MIPS_stride_byte``, ``?DW_AT_MIPS_stride``, ``?DW_AT_MIPS_software_pipeline_depth``, ``?DW_AT_MIPS_ptr_dopetype``, ``?DW_AT_MIPS_loop_unroll_factor``, ``?DW_AT_MIPS_loop_begin``, ``?DW_AT_MIPS_linkage_name``, ``?DW_AT_MIPS_has_inlines``, ``?DW_AT_MIPS_fde``, ``?DW_AT_MIPS_epilog_begin``, ``?DW_AT_MIPS_clone_origin``, ``?DW_AT_MIPS_assumed_size``, ``?DW_AT_MIPS_assumed_shape_dopetype``, ``?DW_AT_MIPS_allocatable_dopetype``, ``?DW_AT_MIPS_abstract_name``, ``?DW_AT_GNU_vector``, ``?DW_AT_GNU_template_name``, ``?DW_AT_GNU_tail_call``, ``?DW_AT_GNU_shared_locks_required``, ``?DW_AT_GNU_ranges_base``, ``?DW_AT_GNU_pubtypes``, ``?DW_AT_GNU_pubnames``, ``?DW_AT_GNU_pt_guarded_by``, ``?DW_AT_GNU_pt_guarded``, ``?DW_AT_GNU_odr_signature``, ``?DW_AT_GNU_numerator``, ``?DW_AT_GNU_macros``, ``?DW_AT_GNU_locviews``, ``?DW_AT_GNU_locks_excluded``, ``?DW_AT_GNU_guarded_by``, ``?DW_AT_GNU_guarded``, ``?DW_AT_GNU_exclusive_locks_required``, ``?DW_AT_GNU_entry_view``, ``?DW_AT_GNU_dwo_name``, ``?DW_AT_GNU_dwo_id``, ``?DW_AT_GNU_denominator``, ``?DW_AT_GNU_deleted``, ``?DW_AT_GNU_call_site_value``, ``?DW_AT_GNU_call_site_target_clobbered``, ``?DW_AT_GNU_call_site_target``, ``?DW_AT_GNU_call_site_data_value``, ``?DW_AT_GNU_bias``, ``?DW_AT_GNU_all_tail_call_sites``, ``?DW_AT_GNU_all_source_call_sites``, ``?DW_AT_GNU_all_call_sites``, ``?DW_AT_GNU_addr_base``, ``?AT_vtable_elem_location``, ``?AT_visibility``, ``?AT_virtuality``, ``?AT_variable_parameter``, ``?AT_use_location``, ``?AT_use_UTF8``, ``?AT_upper_bound``, ``?AT_type``, ``?AT_trampoline``, ``?AT_threads_scaled``, ``?AT_string_length_byte_size``, ``?AT_string_length_bit_size``, ``?AT_string_length``, ``?AT_str_offsets_base``, ``?AT_stmt_list``, ``?AT_static_link``, ``?AT_start_scope``, ``?AT_src_info``, ``?AT_src_coords``, ``?AT_specification``, ``?AT_small``, ``?AT_signature``, ``?AT_sibling``, ``?AT_sf_names``, ``?AT_segment``, ``?AT_rvalue_reference``, ``?AT_rnglists_base``, ``?AT_return_addr``, ``?AT_reference``, ``?AT_recursive``, ``?AT_rank``, ``?AT_ranges``, ``?AT_pure``, ``?AT_prototyped``, ``?AT_producer``, ``?AT_priority``, ``?AT_picture_string``, ``?AT_ordering``, ``?AT_object_pointer``, ``?AT_noreturn``, ``?AT_namelist_item``, ``?AT_name``, ``?AT_mutable``, ``?AT_main_subprogram``, ``?AT_macros``, ``?AT_macro_info``, ``?AT_mac_info``, ``?AT_lower_bound``, ``?AT_low_pc``, ``?AT_loclists_base``, ``?AT_location``, ``?AT_linkage_name``, ``?AT_language``, ``?AT_is_optional``, ``?AT_inline``, ``?AT_import``, ``?AT_identifier_case``, ``?AT_high_pc``, ``?AT_friend``, ``?AT_frame_base``, ``?AT_external``, ``?AT_extension``, ``?AT_export_symbols``, ``?AT_explicit``, ``?AT_enum_class``, ``?AT_entry_pc``, ``?AT_endianity``, ``?AT_encoding``, ``?AT_elemental``, ``?AT_dwo_name``, ``?AT_discr_value``, ``?AT_discr_list``, ``?AT_discr``, ``?AT_digit_count``, ``?AT_description``, ``?AT_deleted``, ``?AT_defaulted``, ``?AT_default_value``, ``?AT_declaration``, ``?AT_decl_line``, ``?AT_decl_file``, ``?AT_decl_column``, ``?AT_decimal_sign``, ``?AT_decimal_scale``, ``?AT_data_member_location``, ``?AT_data_location``, ``?AT_data_bit_offset``, ``?AT_count``, ``?AT_containing_type``, ``?AT_const_value``, ``?AT_const_expr``, ``?AT_comp_dir``, ``?AT_common_reference``, ``?AT_calling_convention``, ``?AT_call_value``, ``?AT_call_target_clobbered``, ``?AT_call_target``, ``?AT_call_tail_call``, ``?AT_call_return_pc``, ``?AT_call_pc``, ``?AT_call_parameter``, ``?AT_call_origin``, ``?AT_call_line``, ``?AT_call_file``, ``?AT_call_data_value``, ``?AT_call_data_location``, ``?AT_call_column``, ``?AT_call_all_tail_calls``, ``?AT_call_all_source_calls``, ``?AT_call_all_calls``, ``?AT_byte_stride``, ``?AT_byte_size``, ``?AT_body_end``, ``?AT_body_begin``, ``?AT_bit_stride``, ``?AT_bit_size``, ``?AT_bit_offset``, ``?AT_binary_scale``, ``?AT_base_types``, ``?AT_associated``, ``?AT_artificial``, ``?AT_allocated``, ``?AT_alignment``, ``?AT_address_class``, ``?AT_addr_base``, ``?AT_accessibility``, ``?AT_abstract_origin``, ``?AT_MIPS_tail_loop_begin``, ``?AT_MIPS_stride_elem``, ``?AT_MIPS_stride_byte``, ``?AT_MIPS_stride``, ``?AT_MIPS_software_pipeline_depth``, ``?AT_MIPS_ptr_dopetype``, ``?AT_MIPS_loop_unroll_factor``, ``?AT_MIPS_loop_begin``, ``?AT_MIPS_linkage_name``, ``?AT_MIPS_has_inlines``, ``?AT_MIPS_fde``, ``?AT_MIPS_epilog_begin``, ``?AT_MIPS_clone_origin``, ``?AT_MIPS_assumed_size``, ``?AT_MIPS_assumed_shape_dopetype``, ``?AT_MIPS_allocatable_dopetype``, ``?AT_MIPS_abstract_name``, ``?AT_GNU_vector``, ``?AT_GNU_template_name``, ``?AT_GNU_tail_call``, ``?AT_GNU_shared_locks_required``, ``?AT_GNU_ranges_base``, ``?AT_GNU_pubtypes``, ``?AT_GNU_pubnames``, ``?AT_GNU_pt_guarded_by``, ``?AT_GNU_pt_guarded``, ``?AT_GNU_odr_signature``, ``?AT_GNU_numerator``, ``?AT_GNU_macros``, ``?AT_GNU_locviews``, ``?AT_GNU_locks_excluded``, ``?AT_GNU_guarded_by``, ``?AT_GNU_guarded``, ``?AT_GNU_exclusive_locks_required``, ``?AT_GNU_entry_view``, ``?AT_GNU_dwo_name``, ``?AT_GNU_dwo_id``, ``?AT_GNU_denominator``, ``?AT_GNU_deleted``, ``?AT_GNU_call_site_value``, ``?AT_GNU_call_site_target_clobbered``, ``?AT_GNU_call_site_target``, ``?AT_GNU_call_site_data_value``, ``?AT_GNU_bias``, ``?AT_GNU_all_tail_call_sites``, ``?AT_GNU_all_source_call_sites``, ``?AT_GNU_all_call_sites``, ``?AT_GNU_addr_base``, ``!DW_AT_vtable_elem_location``, ``!DW_AT_visibility``, ``!DW_AT_virtuality``, ``!DW_AT_variable_parameter``, ``!DW_AT_use_location``, ``!DW_AT_use_UTF8``, ``!DW_AT_upper_bound``, ``!DW_AT_type``, ``!DW_AT_trampoline``, ``!DW_AT_threads_scaled``, ``!DW_AT_string_length_byte_size``, ``!DW_AT_string_length_bit_size``, ``!DW_AT_string_length``, ``!DW_AT_str_offsets_base``, ``!DW_AT_stmt_list``, ``!DW_AT_static_link``, ``!DW_AT_start_scope``, ``!DW_AT_src_info``, ``!DW_AT_src_coords``, ``!DW_AT_specification``, ``!DW_AT_small``, ``!DW_AT_signature``, ``!DW_AT_sibling``, ``!DW_AT_sf_names``, ``!DW_AT_segment``, ``!DW_AT_rvalue_reference``, ``!DW_AT_rnglists_base``, ``!DW_AT_return_addr``, ``!DW_AT_reference``, ``!DW_AT_recursive``, ``!DW_AT_rank``, ``!DW_AT_ranges``, ``!DW_AT_pure``, ``!DW_AT_prototyped``, ``!DW_AT_producer``, ``!DW_AT_priority``, ``!DW_AT_picture_string``, ``!DW_AT_ordering``, ``!DW_AT_object_pointer``, ``!DW_AT_noreturn``, ``!DW_AT_namelist_item``, ``!DW_AT_name``, ``!DW_AT_mutable``, ``!DW_AT_main_subprogram``, ``!DW_AT_macros``, ``!DW_AT_macro_info``, ``!DW_AT_mac_info``, ``!DW_AT_lower_bound``, ``!DW_AT_low_pc``, ``!DW_AT_loclists_base``, ``!DW_AT_location``, ``!DW_AT_linkage_name``, ``!DW_AT_language``, ``!DW_AT_is_optional``, ``!DW_AT_inline``, ``!DW_AT_import``, ``!DW_AT_identifier_case``, ``!DW_AT_high_pc``, ``!DW_AT_friend``, ``!DW_AT_frame_base``, ``!DW_AT_external``, ``!DW_AT_extension``, ``!DW_AT_export_symbols``, ``!DW_AT_explicit``, ``!DW_AT_enum_class``, ``!DW_AT_entry_pc``, ``!DW_AT_endianity``, ``!DW_AT_encoding``, ``!DW_AT_elemental``, ``!DW_AT_dwo_name``, ``!DW_AT_discr_value``, ``!DW_AT_discr_list``, ``!DW_AT_discr``, ``!DW_AT_digit_count``, ``!DW_AT_description``, ``!DW_AT_deleted``, ``!DW_AT_defaulted``, ``!DW_AT_default_value``, ``!DW_AT_declaration``, ``!DW_AT_decl_line``, ``!DW_AT_decl_file``, ``!DW_AT_decl_column``, ``!DW_AT_decimal_sign``, ``!DW_AT_decimal_scale``, ``!DW_AT_data_member_location``, ``!DW_AT_data_location``, ``!DW_AT_data_bit_offset``, ``!DW_AT_count``, ``!DW_AT_containing_type``, ``!DW_AT_const_value``, ``!DW_AT_const_expr``, ``!DW_AT_comp_dir``, ``!DW_AT_common_reference``, ``!DW_AT_calling_convention``, ``!DW_AT_call_value``, ``!DW_AT_call_target_clobbered``, ``!DW_AT_call_target``, ``!DW_AT_call_tail_call``, ``!DW_AT_call_return_pc``, ``!DW_AT_call_pc``, ``!DW_AT_call_parameter``, ``!DW_AT_call_origin``, ``!DW_AT_call_line``, ``!DW_AT_call_file``, ``!DW_AT_call_data_value``, ``!DW_AT_call_data_location``, ``!DW_AT_call_column``, ``!DW_AT_call_all_tail_calls``, ``!DW_AT_call_all_source_calls``, ``!DW_AT_call_all_calls``, ``!DW_AT_byte_stride``, ``!DW_AT_byte_size``, ``!DW_AT_body_end``, ``!DW_AT_body_begin``, ``!DW_AT_bit_stride``, ``!DW_AT_bit_size``, ``!DW_AT_bit_offset``, ``!DW_AT_binary_scale``, ``!DW_AT_base_types``, ``!DW_AT_associated``, ``!DW_AT_artificial``, ``!DW_AT_allocated``, ``!DW_AT_alignment``, ``!DW_AT_address_class``, ``!DW_AT_addr_base``, ``!DW_AT_accessibility``, ``!DW_AT_abstract_origin``, ``!DW_AT_MIPS_tail_loop_begin``, ``!DW_AT_MIPS_stride_elem``, ``!DW_AT_MIPS_stride_byte``, ``!DW_AT_MIPS_stride``, ``!DW_AT_MIPS_software_pipeline_depth``, ``!DW_AT_MIPS_ptr_dopetype``, ``!DW_AT_MIPS_loop_unroll_factor``, ``!DW_AT_MIPS_loop_begin``, ``!DW_AT_MIPS_linkage_name``, ``!DW_AT_MIPS_has_inlines``, ``!DW_AT_MIPS_fde``, ``!DW_AT_MIPS_epilog_begin``, ``!DW_AT_MIPS_clone_origin``, ``!DW_AT_MIPS_assumed_size``, ``!DW_AT_MIPS_assumed_shape_dopetype``, ``!DW_AT_MIPS_allocatable_dopetype``, ``!DW_AT_MIPS_abstract_name``, ``!DW_AT_GNU_vector``, ``!DW_AT_GNU_template_name``, ``!DW_AT_GNU_tail_call``, ``!DW_AT_GNU_shared_locks_required``, ``!DW_AT_GNU_ranges_base``, ``!DW_AT_GNU_pubtypes``, ``!DW_AT_GNU_pubnames``, ``!DW_AT_GNU_pt_guarded_by``, ``!DW_AT_GNU_pt_guarded``, ``!DW_AT_GNU_odr_signature``, ``!DW_AT_GNU_numerator``, ``!DW_AT_GNU_macros``, ``!DW_AT_GNU_locviews``, ``!DW_AT_GNU_locks_excluded``, ``!DW_AT_GNU_guarded_by``, ``!DW_AT_GNU_guarded``, ``!DW_AT_GNU_exclusive_locks_required``, ``!DW_AT_GNU_entry_view``, ``!DW_AT_GNU_dwo_name``, ``!DW_AT_GNU_dwo_id``, ``!DW_AT_GNU_denominator``, ``!DW_AT_GNU_deleted``, ``!DW_AT_GNU_call_site_value``, ``!DW_AT_GNU_call_site_target_clobbered``, ``!DW_AT_GNU_call_site_target``, ``!DW_AT_GNU_call_site_data_value``, ``!DW_AT_GNU_bias``, ``!DW_AT_GNU_all_tail_call_sites``, ``!DW_AT_GNU_all_source_call_sites``, ``!DW_AT_GNU_all_call_sites``, ``!DW_AT_GNU_addr_base``, ``!AT_vtable_elem_location``, ``!AT_visibility``, ``!AT_virtuality``, ``!AT_variable_parameter``, ``!AT_use_location``, ``!AT_use_UTF8``, ``!AT_upper_bound``, ``!AT_type``, ``!AT_trampoline``, ``!AT_threads_scaled``, ``!AT_string_length_byte_size``, ``!AT_string_length_bit_size``, ``!AT_string_length``, ``!AT_str_offsets_base``, ``!AT_stmt_list``, ``!AT_static_link``, ``!AT_start_scope``, ``!AT_src_info``, ``!AT_src_coords``, ``!AT_specification``, ``!AT_small``, ``!AT_signature``, ``!AT_sibling``, ``!AT_sf_names``, ``!AT_segment``, ``!AT_rvalue_reference``, ``!AT_rnglists_base``, ``!AT_return_addr``, ``!AT_reference``, ``!AT_recursive``, ``!AT_rank``, ``!AT_ranges``, ``!AT_pure``, ``!AT_prototyped``, ``!AT_producer``, ``!AT_priority``, ``!AT_picture_string``, ``!AT_ordering``, ``!AT_object_pointer``, ``!AT_noreturn``, ``!AT_namelist_item``, ``!AT_name``, ``!AT_mutable``, ``!AT_main_subprogram``, ``!AT_macros``, ``!AT_macro_info``, ``!AT_mac_info``, ``!AT_lower_bound``, ``!AT_low_pc``, ``!AT_loclists_base``, ``!AT_location``, ``!AT_linkage_name``, ``!AT_language``, ``!AT_is_optional``, ``!AT_inline``, ``!AT_import``, ``!AT_identifier_case``, ``!AT_high_pc``, ``!AT_friend``, ``!AT_frame_base``, ``!AT_external``, ``!AT_extension``, ``!AT_export_symbols``, ``!AT_explicit``, ``!AT_enum_class``, ``!AT_entry_pc``, ``!AT_endianity``, ``!AT_encoding``, ``!AT_elemental``, ``!AT_dwo_name``, ``!AT_discr_value``, ``!AT_discr_list``, ``!AT_discr``, ``!AT_digit_count``, ``!AT_description``, ``!AT_deleted``, ``!AT_defaulted``, ``!AT_default_value``, ``!AT_declaration``, ``!AT_decl_line``, ``!AT_decl_file``, ``!AT_decl_column``, ``!AT_decimal_sign``, ``!AT_decimal_scale``, ``!AT_data_member_location``, ``!AT_data_location``, ``!AT_data_bit_offset``, ``!AT_count``, ``!AT_containing_type``, ``!AT_const_value``, ``!AT_const_expr``, ``!AT_comp_dir``, ``!AT_common_reference``, ``!AT_calling_convention``, ``!AT_call_value``, ``!AT_call_target_clobbered``, ``!AT_call_target``, ``!AT_call_tail_call``, ``!AT_call_return_pc``, ``!AT_call_pc``, ``!AT_call_parameter``, ``!AT_call_origin``, ``!AT_call_line``, ``!AT_call_file``, ``!AT_call_data_value``, ``!AT_call_data_location``, ``!AT_call_column``, ``!AT_call_all_tail_calls``, ``!AT_call_all_source_calls``, ``!AT_call_all_calls``, ``!AT_byte_stride``, ``!AT_byte_size``, ``!AT_body_end``, ``!AT_body_begin``, ``!AT_bit_stride``, ``!AT_bit_size``, ``!AT_bit_offset``, ``!AT_binary_scale``, ``!AT_base_types``, ``!AT_associated``, ``!AT_artificial``, ``!AT_allocated``, ``!AT_alignment``, ``!AT_address_class``, ``!AT_addr_base``, ``!AT_accessibility``, ``!AT_abstract_origin``, ``!AT_MIPS_tail_loop_begin``, ``!AT_MIPS_stride_elem``, ``!AT_MIPS_stride_byte``, ``!AT_MIPS_stride``, ``!AT_MIPS_software_pipeline_depth``, ``!AT_MIPS_ptr_dopetype``, ``!AT_MIPS_loop_unroll_factor``, ``!AT_MIPS_loop_begin``, ``!AT_MIPS_linkage_name``, ``!AT_MIPS_has_inlines``, ``!AT_MIPS_fde``, ``!AT_MIPS_epilog_begin``, ``!AT_MIPS_clone_origin``, ``!AT_MIPS_assumed_size``, ``!AT_MIPS_assumed_shape_dopetype``, ``!AT_MIPS_allocatable_dopetype``, ``!AT_MIPS_abstract_name``, ``!AT_GNU_vector``, ``!AT_GNU_template_name``, ``!AT_GNU_tail_call``, ``!AT_GNU_shared_locks_required``, ``!AT_GNU_ranges_base``, ``!AT_GNU_pubtypes``, ``!AT_GNU_pubnames``, ``!AT_GNU_pt_guarded_by``, ``!AT_GNU_pt_guarded``, ``!AT_GNU_odr_signature``, ``!AT_GNU_numerator``, ``!AT_GNU_macros``, ``!AT_GNU_locviews``, ``!AT_GNU_locks_excluded``, ``!AT_GNU_guarded_by``, ``!AT_GNU_guarded``, ``!AT_GNU_exclusive_locks_required``, ``!AT_GNU_entry_view``, ``!AT_GNU_dwo_name``, ``!AT_GNU_dwo_id``, ``!AT_GNU_denominator``, ``!AT_GNU_deleted``, ``!AT_GNU_call_site_value``, ``!AT_GNU_call_site_target_clobbered``, ``!AT_GNU_call_site_target``, ``!AT_GNU_call_site_data_value``, ``!AT_GNU_bias``, ``!AT_GNU_all_tail_call_sites``, ``!AT_GNU_all_source_call_sites``, ``!AT_GNU_all_call_sites``, ``!AT_GNU_addr_base``.

``T_DIE``
.........

Inspects a DIE on TOS and holds if that DIE has the attribute
indicated by this word.  Note that for cooked DIE's, this word
integrates attributes from abstract origins and specifications,
according to the same rules as ``attribute`` uses.

For example, in the following, a DIE 0x6e reports that it has an
``DW_AT_name`` attribute even if it in fact does not.  This is due to
``DW_AT_specification`` bringing this in::

	$ dwgrep ./tests/nullptr.o -e 'entry (offset == 0x6e) ?AT_name'
	[6e]	subprogram
		specification (ref4)	[3f];
		inline (data1)	DW_INL_declared_inlined;
		object_pointer (ref4)	[7c];
		sibling (ref4)	[8b];

	$ dwgrep ./tests/nullptr.o -e 'entry (offset == 0x3f)'
	[3f]	subprogram
		external (flag_present)	true;
		name (string)	foo;
		decl_file (data1)	tests/nullptr.cc;
		decl_line (data1)	3;
		declaration (flag_present)	true;
		object_pointer (ref4)	[4a];

``T_CONST``
...........

Inspects a constant on TOS and holds if it's the same constant as
indicated by this word::

	$ dwgrep ./tests/nullptr.o -e '
		entry (offset == 0x4a) abbrev attribute label'
	DW_AT_type
	DW_AT_artificial

	$ dwgrep ./tests/nullptr.o -e '
		entry (offset == 0x4a) abbrev attribute label ?AT_type'
	DW_AT_type

``T_ABBREV_ATTR``
.................

Inspects an abbreviation attribute on TOS and holds if its name is the
same as indicated by this word::

	$ dwgrep ./tests/nullptr.o -e 'entry (offset == 0x3f) abbrev attribute ?AT_name'
	0x33 name (string)

``T_ABBREV``
............

Inspects an abbreviation on TOS and holds if that abbreviation has
this attribute.  Note that unlike with DIE's, no integration takes
place with abbreviations::

	$ dwgrep -c ./tests/nullptr.o -e 'entry (offset == 0x6d) abbrev ?AT_name'
	0

``T_ATTR``
..........

Inspects an attribute on TOS and holds if name of that attribute is
the same as indicated by this word::

	$ dwgrep ./tests/nullptr.o -e 'entry (offset == 0x6e) attribute ?AT_name'
	name (string)	foo;



.. _zw_vocabulary_dwarf !DW_FORM_*:
.. _zw_vocabulary_dwarf !FORM_*:
.. _zw_vocabulary_dwarf ?DW_FORM_*:
.. _zw_vocabulary_dwarf ?FORM_*:

!DW_FORM_*, !FORM_*, ?DW_FORM_*, ?FORM_*
----------------------------------------

This section describes the following words: ``?FORM_udata``, ``?FORM_strx4``, ``?FORM_strx3``, ``?FORM_strx2``, ``?FORM_strx1``, ``?FORM_strx``, ``?FORM_strp_sup``, ``?FORM_strp``, ``?FORM_string``, ``?FORM_sec_offset``, ``?FORM_sdata``, ``?FORM_rnglistx``, ``?FORM_ref_udata``, ``?FORM_ref_sup8``, ``?FORM_ref_sup4``, ``?FORM_ref_sig8``, ``?FORM_ref_addr``, ``?FORM_ref8``, ``?FORM_ref4``, ``?FORM_ref2``, ``?FORM_ref1``, ``?FORM_loclistx``, ``?FORM_line_strp``, ``?FORM_indirect``, ``?FORM_implicit_const``, ``?FORM_flag_present``, ``?FORM_flag``, ``?FORM_exprloc``, ``?FORM_data8``, ``?FORM_data4``, ``?FORM_data2``, ``?FORM_data16``, ``?FORM_data1``, ``?FORM_block4``, ``?FORM_block2``, ``?FORM_block1``, ``?FORM_block``, ``?FORM_addrx4``, ``?FORM_addrx3``, ``?FORM_addrx2``, ``?FORM_addrx1``, ``?FORM_addrx``, ``?FORM_addr``, ``?FORM_GNU_strp_alt``, ``?FORM_GNU_str_index``, ``?FORM_GNU_ref_alt``, ``?FORM_GNU_addr_index``, ``?DW_FORM_udata``, ``?DW_FORM_strx4``, ``?DW_FORM_strx3``, ``?DW_FORM_strx2``, ``?DW_FORM_strx1``, ``?DW_FORM_strx``, ``?DW_FORM_strp_sup``, ``?DW_FORM_strp``, ``?DW_FORM_string``, ``?DW_FORM_sec_offset``, ``?DW_FORM_sdata``, ``?DW_FORM_rnglistx``, ``?DW_FORM_ref_udata``, ``?DW_FORM_ref_sup8``, ``?DW_FORM_ref_sup4``, ``?DW_FORM_ref_sig8``, ``?DW_FORM_ref_addr``, ``?DW_FORM_ref8``, ``?DW_FORM_ref4``, ``?DW_FORM_ref2``, ``?DW_FORM_ref1``, ``?DW_FORM_loclistx``, ``?DW_FORM_line_strp``, ``?DW_FORM_indirect``, ``?DW_FORM_implicit_const``, ``?DW_FORM_flag_present``, ``?DW_FORM_flag``, ``?DW_FORM_exprloc``, ``?DW_FORM_data8``, ``?DW_FORM_data4``, ``?DW_FORM_data2``, ``?DW_FORM_data16``, ``?DW_FORM_data1``, ``?DW_FORM_block4``, ``?DW_FORM_block2``, ``?DW_FORM_block1``, ``?DW_FORM_block``, ``?DW_FORM_addrx4``, ``?DW_FORM_addrx3``, ``?DW_FORM_addrx2``, ``?DW_FORM_addrx1``, ``?DW_FORM_addrx``, ``?DW_FORM_addr``, ``?DW_FORM_GNU_strp_alt``, ``?DW_FORM_GNU_str_index``, ``?DW_FORM_GNU_ref_alt``, ``?DW_FORM_GNU_addr_index``, ``!FORM_udata``, ``!FORM_strx4``, ``!FORM_strx3``, ``!FORM_strx2``, ``!FORM_strx1``, ``!FORM_strx``, ``!FORM_strp_sup``, ``!FORM_strp``, ``!FORM_string``, ``!FORM_sec_offset``, ``!FORM_sdata``, ``!FORM_rnglistx``, ``!FORM_ref_udata``, ``!FORM_ref_sup8``, ``!FORM_ref_sup4``, ``!FORM_ref_sig8``, ``!FORM_ref_addr``, ``!FORM_ref8``, ``!FORM_ref4``, ``!FORM_ref2``, ``!FORM_ref1``, ``!FORM_loclistx``, ``!FORM_line_strp``, ``!FORM_indirect``, ``!FORM_implicit_const``, ``!FORM_flag_present``, ``!FORM_flag``, ``!FORM_exprloc``, ``!FORM_data8``, ``!FORM_data4``, ``!FORM_data2``, ``!FORM_data16``, ``!FORM_data1``, ``!FORM_block4``, ``!FORM_block2``, ``!FORM_block1``, ``!FORM_block``, ``!FORM_addrx4``, ``!FORM_addrx3``, ``!FORM_addrx2``, ``!FORM_addrx1``, ``!FORM_addrx``, ``!FORM_addr``, ``!FORM_GNU_strp_alt``, ``!FORM_GNU_str_index``, ``!FORM_GNU_ref_alt``, ``!FORM_GNU_addr_index``, ``!DW_FORM_udata``, ``!DW_FORM_strx4``, ``!DW_FORM_strx3``, ``!DW_FORM_strx2``, ``!DW_FORM_strx1``, ``!DW_FORM_strx``, ``!DW_FORM_strp_sup``, ``!DW_FORM_strp``, ``!DW_FORM_string``, ``!DW_FORM_sec_offset``, ``!DW_FORM_sdata``, ``!DW_FORM_rnglistx``, ``!DW_FORM_ref_udata``, ``!DW_FORM_ref_sup8``, ``!DW_FORM_ref_sup4``, ``!DW_FORM_ref_sig8``, ``!DW_FORM_ref_addr``, ``!DW_FORM_ref8``, ``!DW_FORM_ref4``, ``!DW_FORM_ref2``, ``!DW_FORM_ref1``, ``!DW_FORM_loclistx``, ``!DW_FORM_line_strp``, ``!DW_FORM_indirect``, ``!DW_FORM_implicit_const``, ``!DW_FORM_flag_present``, ``!DW_FORM_flag``, ``!DW_FORM_exprloc``, ``!DW_FORM_data8``, ``!DW_FORM_data4``, ``!DW_FORM_data2``, ``!DW_FORM_data16``, ``!DW_FORM_data1``, ``!DW_FORM_block4``, ``!DW_FORM_block2``, ``!DW_FORM_block1``, ``!DW_FORM_block``, ``!DW_FORM_addrx4``, ``!DW_FORM_addrx3``, ``!DW_FORM_addrx2``, ``!DW_FORM_addrx1``, ``!DW_FORM_addrx``, ``!DW_FORM_addr``, ``!DW_FORM_GNU_strp_alt``, ``!DW_FORM_GNU_str_index``, ``!DW_FORM_GNU_ref_alt``, ``!DW_FORM_GNU_addr_index``.

``T_CONST``
...........

Inspects a constant on TOS and holds if it's the same as indicated by
this word.

``T_ABBREV_ATTR``
.................

Inspects an abbreviation attribute on TOS and holds if its form is the
same as indicated by this word::

	$ dwgrep ./tests/nullptr.o -e 'entry abbrev ?(attribute ?FORM_data2)'
	[17] offset:0xc9, children:no, tag:formal_parameter
		0xc9 abstract_origin (ref4)
		0xcb const_value (data2)

``T_ATTR``
..........

Inspects an attribute on TOS and holds if the form of that attribute
is the same as indicated by this word::

	$ dwgrep ./tests/nullptr.o -e 'entry ?(attribute ?FORM_data2)'
	[e3]	formal_parameter
		abstract_origin (ref4)	[a5];
		const_value (data2)	65535;



.. _zw_vocabulary_dwarf !DW_OP_*:
.. _zw_vocabulary_dwarf !OP_*:
.. _zw_vocabulary_dwarf ?DW_OP_*:
.. _zw_vocabulary_dwarf ?OP_*:

!DW_OP_*, !OP_*, ?DW_OP_*, ?OP_*
--------------------------------

This section describes the following words: ``?OP_xor``, ``?OP_xderef_type``, ``?OP_xderef_size``, ``?OP_xderef``, ``?OP_swap``, ``?OP_stack_value``, ``?OP_skip``, ``?OP_shra``, ``?OP_shr``, ``?OP_shl``, ``?OP_rot``, ``?OP_reinterpret``, ``?OP_regx``, ``?OP_regval_type``, ``?OP_reg9``, ``?OP_reg8``, ``?OP_reg7``, ``?OP_reg6``, ``?OP_reg5``, ``?OP_reg4``, ``?OP_reg31``, ``?OP_reg30``, ``?OP_reg3``, ``?OP_reg29``, ``?OP_reg28``, ``?OP_reg27``, ``?OP_reg26``, ``?OP_reg25``, ``?OP_reg24``, ``?OP_reg23``, ``?OP_reg22``, ``?OP_reg21``, ``?OP_reg20``, ``?OP_reg2``, ``?OP_reg19``, ``?OP_reg18``, ``?OP_reg17``, ``?OP_reg16``, ``?OP_reg15``, ``?OP_reg14``, ``?OP_reg13``, ``?OP_reg12``, ``?OP_reg11``, ``?OP_reg10``, ``?OP_reg1``, ``?OP_reg0``, ``?OP_push_object_address``, ``?OP_plus_uconst``, ``?OP_plus``, ``?OP_piece``, ``?OP_pick``, ``?OP_over``, ``?OP_or``, ``?OP_not``, ``?OP_nop``, ``?OP_neg``, ``?OP_ne``, ``?OP_mul``, ``?OP_mod``, ``?OP_minus``, ``?OP_lt``, ``?OP_lit9``, ``?OP_lit8``, ``?OP_lit7``, ``?OP_lit6``, ``?OP_lit5``, ``?OP_lit4``, ``?OP_lit31``, ``?OP_lit30``, ``?OP_lit3``, ``?OP_lit29``, ``?OP_lit28``, ``?OP_lit27``, ``?OP_lit26``, ``?OP_lit25``, ``?OP_lit24``, ``?OP_lit23``, ``?OP_lit22``, ``?OP_lit21``, ``?OP_lit20``, ``?OP_lit2``, ``?OP_lit19``, ``?OP_lit18``, ``?OP_lit17``, ``?OP_lit16``, ``?OP_lit15``, ``?OP_lit14``, ``?OP_lit13``, ``?OP_lit12``, ``?OP_lit11``, ``?OP_lit10``, ``?OP_lit1``, ``?OP_lit0``, ``?OP_le``, ``?OP_implicit_value``, ``?OP_implicit_pointer``, ``?OP_gt``, ``?OP_ge``, ``?OP_form_tls_address``, ``?OP_fbreg``, ``?OP_eq``, ``?OP_entry_value``, ``?OP_dup``, ``?OP_drop``, ``?OP_div``, ``?OP_deref_type``, ``?OP_deref_size``, ``?OP_deref``, ``?OP_convert``, ``?OP_constx``, ``?OP_constu``, ``?OP_consts``, ``?OP_const_type``, ``?OP_const8u``, ``?OP_const8s``, ``?OP_const4u``, ``?OP_const4s``, ``?OP_const2u``, ``?OP_const2s``, ``?OP_const1u``, ``?OP_const1s``, ``?OP_call_ref``, ``?OP_call_frame_cfa``, ``?OP_call4``, ``?OP_call2``, ``?OP_bregx``, ``?OP_breg9``, ``?OP_breg8``, ``?OP_breg7``, ``?OP_breg6``, ``?OP_breg5``, ``?OP_breg4``, ``?OP_breg31``, ``?OP_breg30``, ``?OP_breg3``, ``?OP_breg29``, ``?OP_breg28``, ``?OP_breg27``, ``?OP_breg26``, ``?OP_breg25``, ``?OP_breg24``, ``?OP_breg23``, ``?OP_breg22``, ``?OP_breg21``, ``?OP_breg20``, ``?OP_breg2``, ``?OP_breg19``, ``?OP_breg18``, ``?OP_breg17``, ``?OP_breg16``, ``?OP_breg15``, ``?OP_breg14``, ``?OP_breg13``, ``?OP_breg12``, ``?OP_breg11``, ``?OP_breg10``, ``?OP_breg1``, ``?OP_breg0``, ``?OP_bra``, ``?OP_bit_piece``, ``?OP_and``, ``?OP_addrx``, ``?OP_addr``, ``?OP_abs``, ``?OP_GNU_variable_value``, ``?OP_GNU_uninit``, ``?OP_GNU_reinterpret``, ``?OP_GNU_regval_type``, ``?OP_GNU_push_tls_address``, ``?OP_GNU_parameter_ref``, ``?OP_GNU_implicit_pointer``, ``?OP_GNU_entry_value``, ``?OP_GNU_encoded_addr``, ``?OP_GNU_deref_type``, ``?OP_GNU_convert``, ``?OP_GNU_const_type``, ``?OP_GNU_const_index``, ``?OP_GNU_addr_index``, ``?DW_OP_xor``, ``?DW_OP_xderef_type``, ``?DW_OP_xderef_size``, ``?DW_OP_xderef``, ``?DW_OP_swap``, ``?DW_OP_stack_value``, ``?DW_OP_skip``, ``?DW_OP_shra``, ``?DW_OP_shr``, ``?DW_OP_shl``, ``?DW_OP_rot``, ``?DW_OP_reinterpret``, ``?DW_OP_regx``, ``?DW_OP_regval_type``, ``?DW_OP_reg9``, ``?DW_OP_reg8``, ``?DW_OP_reg7``, ``?DW_OP_reg6``, ``?DW_OP_reg5``, ``?DW_OP_reg4``, ``?DW_OP_reg31``, ``?DW_OP_reg30``, ``?DW_OP_reg3``, ``?DW_OP_reg29``, ``?DW_OP_reg28``, ``?DW_OP_reg27``, ``?DW_OP_reg26``, ``?DW_OP_reg25``, ``?DW_OP_reg24``, ``?DW_OP_reg23``, ``?DW_OP_reg22``, ``?DW_OP_reg21``, ``?DW_OP_reg20``, ``?DW_OP_reg2``, ``?DW_OP_reg19``, ``?DW_OP_reg18``, ``?DW_OP_reg17``, ``?DW_OP_reg16``, ``?DW_OP_reg15``, ``?DW_OP_reg14``, ``?DW_OP_reg13``, ``?DW_OP_reg12``, ``?DW_OP_reg11``, ``?DW_OP_reg10``, ``?DW_OP_reg1``, ``?DW_OP_reg0``, ``?DW_OP_push_object_address``, ``?DW_OP_plus_uconst``, ``?DW_OP_plus``, ``?DW_OP_piece``, ``?DW_OP_pick``, ``?DW_OP_over``, ``?DW_OP_or``, ``?DW_OP_not``, ``?DW_OP_nop``, ``?DW_OP_neg``, ``?DW_OP_ne``, ``?DW_OP_mul``, ``?DW_OP_mod``, ``?DW_OP_minus``, ``?DW_OP_lt``, ``?DW_OP_lit9``, ``?DW_OP_lit8``, ``?DW_OP_lit7``, ``?DW_OP_lit6``, ``?DW_OP_lit5``, ``?DW_OP_lit4``, ``?DW_OP_lit31``, ``?DW_OP_lit30``, ``?DW_OP_lit3``, ``?DW_OP_lit29``, ``?DW_OP_lit28``, ``?DW_OP_lit27``, ``?DW_OP_lit26``, ``?DW_OP_lit25``, ``?DW_OP_lit24``, ``?DW_OP_lit23``, ``?DW_OP_lit22``, ``?DW_OP_lit21``, ``?DW_OP_lit20``, ``?DW_OP_lit2``, ``?DW_OP_lit19``, ``?DW_OP_lit18``, ``?DW_OP_lit17``, ``?DW_OP_lit16``, ``?DW_OP_lit15``, ``?DW_OP_lit14``, ``?DW_OP_lit13``, ``?DW_OP_lit12``, ``?DW_OP_lit11``, ``?DW_OP_lit10``, ``?DW_OP_lit1``, ``?DW_OP_lit0``, ``?DW_OP_le``, ``?DW_OP_implicit_value``, ``?DW_OP_implicit_pointer``, ``?DW_OP_gt``, ``?DW_OP_ge``, ``?DW_OP_form_tls_address``, ``?DW_OP_fbreg``, ``?DW_OP_eq``, ``?DW_OP_entry_value``, ``?DW_OP_dup``, ``?DW_OP_drop``, ``?DW_OP_div``, ``?DW_OP_deref_type``, ``?DW_OP_deref_size``, ``?DW_OP_deref``, ``?DW_OP_convert``, ``?DW_OP_constx``, ``?DW_OP_constu``, ``?DW_OP_consts``, ``?DW_OP_const_type``, ``?DW_OP_const8u``, ``?DW_OP_const8s``, ``?DW_OP_const4u``, ``?DW_OP_const4s``, ``?DW_OP_const2u``, ``?DW_OP_const2s``, ``?DW_OP_const1u``, ``?DW_OP_const1s``, ``?DW_OP_call_ref``, ``?DW_OP_call_frame_cfa``, ``?DW_OP_call4``, ``?DW_OP_call2``, ``?DW_OP_bregx``, ``?DW_OP_breg9``, ``?DW_OP_breg8``, ``?DW_OP_breg7``, ``?DW_OP_breg6``, ``?DW_OP_breg5``, ``?DW_OP_breg4``, ``?DW_OP_breg31``, ``?DW_OP_breg30``, ``?DW_OP_breg3``, ``?DW_OP_breg29``, ``?DW_OP_breg28``, ``?DW_OP_breg27``, ``?DW_OP_breg26``, ``?DW_OP_breg25``, ``?DW_OP_breg24``, ``?DW_OP_breg23``, ``?DW_OP_breg22``, ``?DW_OP_breg21``, ``?DW_OP_breg20``, ``?DW_OP_breg2``, ``?DW_OP_breg19``, ``?DW_OP_breg18``, ``?DW_OP_breg17``, ``?DW_OP_breg16``, ``?DW_OP_breg15``, ``?DW_OP_breg14``, ``?DW_OP_breg13``, ``?DW_OP_breg12``, ``?DW_OP_breg11``, ``?DW_OP_breg10``, ``?DW_OP_breg1``, ``?DW_OP_breg0``, ``?DW_OP_bra``, ``?DW_OP_bit_piece``, ``?DW_OP_and``, ``?DW_OP_addrx``, ``?DW_OP_addr``, ``?DW_OP_abs``, ``?DW_OP_GNU_variable_value``, ``?DW_OP_GNU_uninit``, ``?DW_OP_GNU_reinterpret``, ``?DW_OP_GNU_regval_type``, ``?DW_OP_GNU_push_tls_address``, ``?DW_OP_GNU_parameter_ref``, ``?DW_OP_GNU_implicit_pointer``, ``?DW_OP_GNU_entry_value``, ``?DW_OP_GNU_encoded_addr``, ``?DW_OP_GNU_deref_type``, ``?DW_OP_GNU_convert``, ``?DW_OP_GNU_const_type``, ``?DW_OP_GNU_const_index``, ``?DW_OP_GNU_addr_index``, ``!OP_xor``, ``!OP_xderef_type``, ``!OP_xderef_size``, ``!OP_xderef``, ``!OP_swap``, ``!OP_stack_value``, ``!OP_skip``, ``!OP_shra``, ``!OP_shr``, ``!OP_shl``, ``!OP_rot``, ``!OP_reinterpret``, ``!OP_regx``, ``!OP_regval_type``, ``!OP_reg9``, ``!OP_reg8``, ``!OP_reg7``, ``!OP_reg6``, ``!OP_reg5``, ``!OP_reg4``, ``!OP_reg31``, ``!OP_reg30``, ``!OP_reg3``, ``!OP_reg29``, ``!OP_reg28``, ``!OP_reg27``, ``!OP_reg26``, ``!OP_reg25``, ``!OP_reg24``, ``!OP_reg23``, ``!OP_reg22``, ``!OP_reg21``, ``!OP_reg20``, ``!OP_reg2``, ``!OP_reg19``, ``!OP_reg18``, ``!OP_reg17``, ``!OP_reg16``, ``!OP_reg15``, ``!OP_reg14``, ``!OP_reg13``, ``!OP_reg12``, ``!OP_reg11``, ``!OP_reg10``, ``!OP_reg1``, ``!OP_reg0``, ``!OP_push_object_address``, ``!OP_plus_uconst``, ``!OP_plus``, ``!OP_piece``, ``!OP_pick``, ``!OP_over``, ``!OP_or``, ``!OP_not``, ``!OP_nop``, ``!OP_neg``, ``!OP_ne``, ``!OP_mul``, ``!OP_mod``, ``!OP_minus``, ``!OP_lt``, ``!OP_lit9``, ``!OP_lit8``, ``!OP_lit7``, ``!OP_lit6``, ``!OP_lit5``, ``!OP_lit4``, ``!OP_lit31``, ``!OP_lit30``, ``!OP_lit3``, ``!OP_lit29``, ``!OP_lit28``, ``!OP_lit27``, ``!OP_lit26``, ``!OP_lit25``, ``!OP_lit24``, ``!OP_lit23``, ``!OP_lit22``, ``!OP_lit21``, ``!OP_lit20``, ``!OP_lit2``, ``!OP_lit19``, ``!OP_lit18``, ``!OP_lit17``, ``!OP_lit16``, ``!OP_lit15``, ``!OP_lit14``, ``!OP_lit13``, ``!OP_lit12``, ``!OP_lit11``, ``!OP_lit10``, ``!OP_lit1``, ``!OP_lit0``, ``!OP_le``, ``!OP_implicit_value``, ``!OP_implicit_pointer``, ``!OP_gt``, ``!OP_ge``, ``!OP_form_tls_address``, ``!OP_fbreg``, ``!OP_eq``, ``!OP_entry_value``, ``!OP_dup``, ``!OP_drop``, ``!OP_div``, ``!OP_deref_type``, ``!OP_deref_size``, ``!OP_deref``, ``!OP_convert``, ``!OP_constx``, ``!OP_constu``, ``!OP_consts``, ``!OP_const_type``, ``!OP_const8u``, ``!OP_const8s``, ``!OP_const4u``, ``!OP_const4s``, ``!OP_const2u``, ``!OP_const2s``, ``!OP_const1u``, ``!OP_const1s``, ``!OP_call_ref``, ``!OP_call_frame_cfa``, ``!OP_call4``, ``!OP_call2``, ``!OP_bregx``, ``!OP_breg9``, ``!OP_breg8``, ``!OP_breg7``, ``!OP_breg6``, ``!OP_breg5``, ``!OP_breg4``, ``!OP_breg31``, ``!OP_breg30``, ``!OP_breg3``, ``!OP_breg29``, ``!OP_breg28``, ``!OP_breg27``, ``!OP_breg26``, ``!OP_breg25``, ``!OP_breg24``, ``!OP_breg23``, ``!OP_breg22``, ``!OP_breg21``, ``!OP_breg20``, ``!OP_breg2``, ``!OP_breg19``, ``!OP_breg18``, ``!OP_breg17``, ``!OP_breg16``, ``!OP_breg15``, ``!OP_breg14``, ``!OP_breg13``, ``!OP_breg12``, ``!OP_breg11``, ``!OP_breg10``, ``!OP_breg1``, ``!OP_breg0``, ``!OP_bra``, ``!OP_bit_piece``, ``!OP_and``, ``!OP_addrx``, ``!OP_addr``, ``!OP_abs``, ``!OP_GNU_variable_value``, ``!OP_GNU_uninit``, ``!OP_GNU_reinterpret``, ``!OP_GNU_regval_type``, ``!OP_GNU_push_tls_address``, ``!OP_GNU_parameter_ref``, ``!OP_GNU_implicit_pointer``, ``!OP_GNU_entry_value``, ``!OP_GNU_encoded_addr``, ``!OP_GNU_deref_type``, ``!OP_GNU_convert``, ``!OP_GNU_const_type``, ``!OP_GNU_const_index``, ``!OP_GNU_addr_index``, ``!DW_OP_xor``, ``!DW_OP_xderef_type``, ``!DW_OP_xderef_size``, ``!DW_OP_xderef``, ``!DW_OP_swap``, ``!DW_OP_stack_value``, ``!DW_OP_skip``, ``!DW_OP_shra``, ``!DW_OP_shr``, ``!DW_OP_shl``, ``!DW_OP_rot``, ``!DW_OP_reinterpret``, ``!DW_OP_regx``, ``!DW_OP_regval_type``, ``!DW_OP_reg9``, ``!DW_OP_reg8``, ``!DW_OP_reg7``, ``!DW_OP_reg6``, ``!DW_OP_reg5``, ``!DW_OP_reg4``, ``!DW_OP_reg31``, ``!DW_OP_reg30``, ``!DW_OP_reg3``, ``!DW_OP_reg29``, ``!DW_OP_reg28``, ``!DW_OP_reg27``, ``!DW_OP_reg26``, ``!DW_OP_reg25``, ``!DW_OP_reg24``, ``!DW_OP_reg23``, ``!DW_OP_reg22``, ``!DW_OP_reg21``, ``!DW_OP_reg20``, ``!DW_OP_reg2``, ``!DW_OP_reg19``, ``!DW_OP_reg18``, ``!DW_OP_reg17``, ``!DW_OP_reg16``, ``!DW_OP_reg15``, ``!DW_OP_reg14``, ``!DW_OP_reg13``, ``!DW_OP_reg12``, ``!DW_OP_reg11``, ``!DW_OP_reg10``, ``!DW_OP_reg1``, ``!DW_OP_reg0``, ``!DW_OP_push_object_address``, ``!DW_OP_plus_uconst``, ``!DW_OP_plus``, ``!DW_OP_piece``, ``!DW_OP_pick``, ``!DW_OP_over``, ``!DW_OP_or``, ``!DW_OP_not``, ``!DW_OP_nop``, ``!DW_OP_neg``, ``!DW_OP_ne``, ``!DW_OP_mul``, ``!DW_OP_mod``, ``!DW_OP_minus``, ``!DW_OP_lt``, ``!DW_OP_lit9``, ``!DW_OP_lit8``, ``!DW_OP_lit7``, ``!DW_OP_lit6``, ``!DW_OP_lit5``, ``!DW_OP_lit4``, ``!DW_OP_lit31``, ``!DW_OP_lit30``, ``!DW_OP_lit3``, ``!DW_OP_lit29``, ``!DW_OP_lit28``, ``!DW_OP_lit27``, ``!DW_OP_lit26``, ``!DW_OP_lit25``, ``!DW_OP_lit24``, ``!DW_OP_lit23``, ``!DW_OP_lit22``, ``!DW_OP_lit21``, ``!DW_OP_lit20``, ``!DW_OP_lit2``, ``!DW_OP_lit19``, ``!DW_OP_lit18``, ``!DW_OP_lit17``, ``!DW_OP_lit16``, ``!DW_OP_lit15``, ``!DW_OP_lit14``, ``!DW_OP_lit13``, ``!DW_OP_lit12``, ``!DW_OP_lit11``, ``!DW_OP_lit10``, ``!DW_OP_lit1``, ``!DW_OP_lit0``, ``!DW_OP_le``, ``!DW_OP_implicit_value``, ``!DW_OP_implicit_pointer``, ``!DW_OP_gt``, ``!DW_OP_ge``, ``!DW_OP_form_tls_address``, ``!DW_OP_fbreg``, ``!DW_OP_eq``, ``!DW_OP_entry_value``, ``!DW_OP_dup``, ``!DW_OP_drop``, ``!DW_OP_div``, ``!DW_OP_deref_type``, ``!DW_OP_deref_size``, ``!DW_OP_deref``, ``!DW_OP_convert``, ``!DW_OP_constx``, ``!DW_OP_constu``, ``!DW_OP_consts``, ``!DW_OP_const_type``, ``!DW_OP_const8u``, ``!DW_OP_const8s``, ``!DW_OP_const4u``, ``!DW_OP_const4s``, ``!DW_OP_const2u``, ``!DW_OP_const2s``, ``!DW_OP_const1u``, ``!DW_OP_const1s``, ``!DW_OP_call_ref``, ``!DW_OP_call_frame_cfa``, ``!DW_OP_call4``, ``!DW_OP_call2``, ``!DW_OP_bregx``, ``!DW_OP_breg9``, ``!DW_OP_breg8``, ``!DW_OP_breg7``, ``!DW_OP_breg6``, ``!DW_OP_breg5``, ``!DW_OP_breg4``, ``!DW_OP_breg31``, ``!DW_OP_breg30``, ``!DW_OP_breg3``, ``!DW_OP_breg29``, ``!DW_OP_breg28``, ``!DW_OP_breg27``, ``!DW_OP_breg26``, ``!DW_OP_breg25``, ``!DW_OP_breg24``, ``!DW_OP_breg23``, ``!DW_OP_breg22``, ``!DW_OP_breg21``, ``!DW_OP_breg20``, ``!DW_OP_breg2``, ``!DW_OP_breg19``, ``!DW_OP_breg18``, ``!DW_OP_breg17``, ``!DW_OP_breg16``, ``!DW_OP_breg15``, ``!DW_OP_breg14``, ``!DW_OP_breg13``, ``!DW_OP_breg12``, ``!DW_OP_breg11``, ``!DW_OP_breg10``, ``!DW_OP_breg1``, ``!DW_OP_breg0``, ``!DW_OP_bra``, ``!DW_OP_bit_piece``, ``!DW_OP_and``, ``!DW_OP_addrx``, ``!DW_OP_addr``, ``!DW_OP_abs``, ``!DW_OP_GNU_variable_value``, ``!DW_OP_GNU_uninit``, ``!DW_OP_GNU_reinterpret``, ``!DW_OP_GNU_regval_type``, ``!DW_OP_GNU_push_tls_address``, ``!DW_OP_GNU_parameter_ref``, ``!DW_OP_GNU_implicit_pointer``, ``!DW_OP_GNU_entry_value``, ``!DW_OP_GNU_encoded_addr``, ``!DW_OP_GNU_deref_type``, ``!DW_OP_GNU_convert``, ``!DW_OP_GNU_const_type``, ``!DW_OP_GNU_const_index``, ``!DW_OP_GNU_addr_index``.

``T_CONST``
...........

Inspects a constant on TOS and holds if it is the same as indicated by
this word.

``T_LOCLIST_OP``
................

Inspects a location expression instruction on TOS and holds if its
opcode is the same as indicated by this word::

	$ dwgrep ./tests/bitcount.o -e 'entry @AT_location elem ?OP_and'
	4:and

``T_LOCLIST_ELEM``
..................

Inspects a location expression on TOS and holds if it contains an
instruction with an opcode indicated by this word::

	$ dwgrep ./tests/bitcount.o -e 'entry @AT_location ?OP_and'
	0x10017..0x1001a:[0:breg5<0>, 2:breg1<0>, 4:and, 5:stack_value]



.. _zw_vocabulary_dwarf !DW_TAG_*:
.. _zw_vocabulary_dwarf !TAG_*:
.. _zw_vocabulary_dwarf ?DW_TAG_*:
.. _zw_vocabulary_dwarf ?TAG_*:

!DW_TAG_*, !TAG_*, ?DW_TAG_*, ?TAG_*
------------------------------------

This section describes the following words: ``?TAG_with_stmt``, ``?TAG_volatile_type``, ``?TAG_variant_part``, ``?TAG_variant``, ``?TAG_variable``, ``?TAG_unspecified_type``, ``?TAG_unspecified_parameters``, ``?TAG_union_type``, ``?TAG_typedef``, ``?TAG_type_unit``, ``?TAG_try_block``, ``?TAG_thrown_type``, ``?TAG_template_value_parameter``, ``?TAG_template_type_parameter``, ``?TAG_template_alias``, ``?TAG_subroutine_type``, ``?TAG_subrange_type``, ``?TAG_subprogram``, ``?TAG_structure_type``, ``?TAG_string_type``, ``?TAG_skeleton_unit``, ``?TAG_shared_type``, ``?TAG_set_type``, ``?TAG_rvalue_reference_type``, ``?TAG_restrict_type``, ``?TAG_reference_type``, ``?TAG_ptr_to_member_type``, ``?TAG_pointer_type``, ``?TAG_partial_unit``, ``?TAG_packed_type``, ``?TAG_namespace``, ``?TAG_namelist_item``, ``?TAG_namelist``, ``?TAG_module``, ``?TAG_member``, ``?TAG_lexical_block``, ``?TAG_label``, ``?TAG_interface_type``, ``?TAG_inlined_subroutine``, ``?TAG_inheritance``, ``?TAG_imported_unit``, ``?TAG_imported_module``, ``?TAG_imported_declaration``, ``?TAG_immutable_type``, ``?TAG_generic_subrange``, ``?TAG_function_template``, ``?TAG_friend``, ``?TAG_format_label``, ``?TAG_formal_parameter``, ``?TAG_file_type``, ``?TAG_enumerator``, ``?TAG_enumeration_type``, ``?TAG_entry_point``, ``?TAG_dynamic_type``, ``?TAG_dwarf_procedure``, ``?TAG_constant``, ``?TAG_const_type``, ``?TAG_condition``, ``?TAG_compile_unit``, ``?TAG_common_inclusion``, ``?TAG_common_block``, ``?TAG_coarray_type``, ``?TAG_class_type``, ``?TAG_class_template``, ``?TAG_catch_block``, ``?TAG_call_site_parameter``, ``?TAG_call_site``, ``?TAG_base_type``, ``?TAG_atomic_type``, ``?TAG_array_type``, ``?TAG_access_declaration``, ``?TAG_MIPS_loop``, ``?TAG_GNU_template_template_param``, ``?TAG_GNU_template_parameter_pack``, ``?TAG_GNU_formal_parameter_pack``, ``?TAG_GNU_call_site_parameter``, ``?TAG_GNU_call_site``, ``?TAG_GNU_EINCL``, ``?TAG_GNU_BINCL``, ``?DW_TAG_with_stmt``, ``?DW_TAG_volatile_type``, ``?DW_TAG_variant_part``, ``?DW_TAG_variant``, ``?DW_TAG_variable``, ``?DW_TAG_unspecified_type``, ``?DW_TAG_unspecified_parameters``, ``?DW_TAG_union_type``, ``?DW_TAG_typedef``, ``?DW_TAG_type_unit``, ``?DW_TAG_try_block``, ``?DW_TAG_thrown_type``, ``?DW_TAG_template_value_parameter``, ``?DW_TAG_template_type_parameter``, ``?DW_TAG_template_alias``, ``?DW_TAG_subroutine_type``, ``?DW_TAG_subrange_type``, ``?DW_TAG_subprogram``, ``?DW_TAG_structure_type``, ``?DW_TAG_string_type``, ``?DW_TAG_skeleton_unit``, ``?DW_TAG_shared_type``, ``?DW_TAG_set_type``, ``?DW_TAG_rvalue_reference_type``, ``?DW_TAG_restrict_type``, ``?DW_TAG_reference_type``, ``?DW_TAG_ptr_to_member_type``, ``?DW_TAG_pointer_type``, ``?DW_TAG_partial_unit``, ``?DW_TAG_packed_type``, ``?DW_TAG_namespace``, ``?DW_TAG_namelist_item``, ``?DW_TAG_namelist``, ``?DW_TAG_module``, ``?DW_TAG_member``, ``?DW_TAG_lexical_block``, ``?DW_TAG_label``, ``?DW_TAG_interface_type``, ``?DW_TAG_inlined_subroutine``, ``?DW_TAG_inheritance``, ``?DW_TAG_imported_unit``, ``?DW_TAG_imported_module``, ``?DW_TAG_imported_declaration``, ``?DW_TAG_immutable_type``, ``?DW_TAG_generic_subrange``, ``?DW_TAG_function_template``, ``?DW_TAG_friend``, ``?DW_TAG_format_label``, ``?DW_TAG_formal_parameter``, ``?DW_TAG_file_type``, ``?DW_TAG_enumerator``, ``?DW_TAG_enumeration_type``, ``?DW_TAG_entry_point``, ``?DW_TAG_dynamic_type``, ``?DW_TAG_dwarf_procedure``, ``?DW_TAG_constant``, ``?DW_TAG_const_type``, ``?DW_TAG_condition``, ``?DW_TAG_compile_unit``, ``?DW_TAG_common_inclusion``, ``?DW_TAG_common_block``, ``?DW_TAG_coarray_type``, ``?DW_TAG_class_type``, ``?DW_TAG_class_template``, ``?DW_TAG_catch_block``, ``?DW_TAG_call_site_parameter``, ``?DW_TAG_call_site``, ``?DW_TAG_base_type``, ``?DW_TAG_atomic_type``, ``?DW_TAG_array_type``, ``?DW_TAG_access_declaration``, ``?DW_TAG_MIPS_loop``, ``?DW_TAG_GNU_template_template_param``, ``?DW_TAG_GNU_template_parameter_pack``, ``?DW_TAG_GNU_formal_parameter_pack``, ``?DW_TAG_GNU_call_site_parameter``, ``?DW_TAG_GNU_call_site``, ``?DW_TAG_GNU_EINCL``, ``?DW_TAG_GNU_BINCL``, ``!TAG_with_stmt``, ``!TAG_volatile_type``, ``!TAG_variant_part``, ``!TAG_variant``, ``!TAG_variable``, ``!TAG_unspecified_type``, ``!TAG_unspecified_parameters``, ``!TAG_union_type``, ``!TAG_typedef``, ``!TAG_type_unit``, ``!TAG_try_block``, ``!TAG_thrown_type``, ``!TAG_template_value_parameter``, ``!TAG_template_type_parameter``, ``!TAG_template_alias``, ``!TAG_subroutine_type``, ``!TAG_subrange_type``, ``!TAG_subprogram``, ``!TAG_structure_type``, ``!TAG_string_type``, ``!TAG_skeleton_unit``, ``!TAG_shared_type``, ``!TAG_set_type``, ``!TAG_rvalue_reference_type``, ``!TAG_restrict_type``, ``!TAG_reference_type``, ``!TAG_ptr_to_member_type``, ``!TAG_pointer_type``, ``!TAG_partial_unit``, ``!TAG_packed_type``, ``!TAG_namespace``, ``!TAG_namelist_item``, ``!TAG_namelist``, ``!TAG_module``, ``!TAG_member``, ``!TAG_lexical_block``, ``!TAG_label``, ``!TAG_interface_type``, ``!TAG_inlined_subroutine``, ``!TAG_inheritance``, ``!TAG_imported_unit``, ``!TAG_imported_module``, ``!TAG_imported_declaration``, ``!TAG_immutable_type``, ``!TAG_generic_subrange``, ``!TAG_function_template``, ``!TAG_friend``, ``!TAG_format_label``, ``!TAG_formal_parameter``, ``!TAG_file_type``, ``!TAG_enumerator``, ``!TAG_enumeration_type``, ``!TAG_entry_point``, ``!TAG_dynamic_type``, ``!TAG_dwarf_procedure``, ``!TAG_constant``, ``!TAG_const_type``, ``!TAG_condition``, ``!TAG_compile_unit``, ``!TAG_common_inclusion``, ``!TAG_common_block``, ``!TAG_coarray_type``, ``!TAG_class_type``, ``!TAG_class_template``, ``!TAG_catch_block``, ``!TAG_call_site_parameter``, ``!TAG_call_site``, ``!TAG_base_type``, ``!TAG_atomic_type``, ``!TAG_array_type``, ``!TAG_access_declaration``, ``!TAG_MIPS_loop``, ``!TAG_GNU_template_template_param``, ``!TAG_GNU_template_parameter_pack``, ``!TAG_GNU_formal_parameter_pack``, ``!TAG_GNU_call_site_parameter``, ``!TAG_GNU_call_site``, ``!TAG_GNU_EINCL``, ``!TAG_GNU_BINCL``, ``!DW_TAG_with_stmt``, ``!DW_TAG_volatile_type``, ``!DW_TAG_variant_part``, ``!DW_TAG_variant``, ``!DW_TAG_variable``, ``!DW_TAG_unspecified_type``, ``!DW_TAG_unspecified_parameters``, ``!DW_TAG_union_type``, ``!DW_TAG_typedef``, ``!DW_TAG_type_unit``, ``!DW_TAG_try_block``, ``!DW_TAG_thrown_type``, ``!DW_TAG_template_value_parameter``, ``!DW_TAG_template_type_parameter``, ``!DW_TAG_template_alias``, ``!DW_TAG_subroutine_type``, ``!DW_TAG_subrange_type``, ``!DW_TAG_subprogram``, ``!DW_TAG_structure_type``, ``!DW_TAG_string_type``, ``!DW_TAG_skeleton_unit``, ``!DW_TAG_shared_type``, ``!DW_TAG_set_type``, ``!DW_TAG_rvalue_reference_type``, ``!DW_TAG_restrict_type``, ``!DW_TAG_reference_type``, ``!DW_TAG_ptr_to_member_type``, ``!DW_TAG_pointer_type``, ``!DW_TAG_partial_unit``, ``!DW_TAG_packed_type``, ``!DW_TAG_namespace``, ``!DW_TAG_namelist_item``, ``!DW_TAG_namelist``, ``!DW_TAG_module``, ``!DW_TAG_member``, ``!DW_TAG_lexical_block``, ``!DW_TAG_label``, ``!DW_TAG_interface_type``, ``!DW_TAG_inlined_subroutine``, ``!DW_TAG_inheritance``, ``!DW_TAG_imported_unit``, ``!DW_TAG_imported_module``, ``!DW_TAG_imported_declaration``, ``!DW_TAG_immutable_type``, ``!DW_TAG_generic_subrange``, ``!DW_TAG_function_template``, ``!DW_TAG_friend``, ``!DW_TAG_format_label``, ``!DW_TAG_formal_parameter``, ``!DW_TAG_file_type``, ``!DW_TAG_enumerator``, ``!DW_TAG_enumeration_type``, ``!DW_TAG_entry_point``, ``!DW_TAG_dynamic_type``, ``!DW_TAG_dwarf_procedure``, ``!DW_TAG_constant``, ``!DW_TAG_const_type``, ``!DW_TAG_condition``, ``!DW_TAG_compile_unit``, ``!DW_TAG_common_inclusion``, ``!DW_TAG_common_block``, ``!DW_TAG_coarray_type``, ``!DW_TAG_class_type``, ``!DW_TAG_class_template``, ``!DW_TAG_catch_block``, ``!DW_TAG_call_site_parameter``, ``!DW_TAG_call_site``, ``!DW_TAG_base_type``, ``!DW_TAG_atomic_type``, ``!DW_TAG_array_type``, ``!DW_TAG_access_declaration``, ``!DW_TAG_MIPS_loop``, ``!DW_TAG_GNU_template_template_param``, ``!DW_TAG_GNU_template_parameter_pack``, ``!DW_TAG_GNU_formal_parameter_pack``, ``!DW_TAG_GNU_call_site_parameter``, ``!DW_TAG_GNU_call_site``, ``!DW_TAG_GNU_EINCL``, ``!DW_TAG_GNU_BINCL``.

``T_DIE``
.........

Inspects a DIE on TOS and holds if its tag is the same as this word
indicates::

	$ dwgrep ./tests/nullptr.o -e 'entry ?TAG_unspecified_type'
	[69]	unspecified_type
		name (strp)	decltype(nullptr);

``T_CONST``
...........

Inspects a constant on TOS and holds if it's the same constant as
indicated by this word::

	$ dwgrep 'DW_TAG_formal_parameter ?TAG_formal_parameter'
	DW_TAG_formal_parameter

	$ dwgrep -c 'DW_TAG_formal_parameter value ?TAG_formal_parameter'
	0

``T_ABBREV``
............

Inspects an abbreviation on TOS and holds if its tag is the same as
indicated by this word.



.. _zw_vocabulary_dwarf !contains:
.. _zw_vocabulary_dwarf ?contains:

!contains, ?contains
--------------------

``T_ASET`` ``T_CONST``
......................

Inspects an address set and a constant on TOS and holds for those
where the constant is contained within the address set.  Note that the
high end of the address set is not actually considered part of the
address set::

	$ dwgrep 'if (0 10 aset 10 ?contains) then "yes" else "no"'
	no
	$ dwgrep 'if (0 10 aset 9 ?contains) then "yes" else "no"'
	yes

``T_ASET`` ``T_ASET``
.....................

Inspects two address sets on TOS, *A* and *B*, and holds for those
where all of *B*'s addresses are covered by *A*.



.. _zw_vocabulary_dwarf !empty:
.. _zw_vocabulary_dwarf ?empty:

!empty, ?empty
--------------

``T_ASET``
..........

Inspects an address set on TOS and holds if it is empty (contains no
addresses).  Could be written as ``!(elem)``.



.. _zw_vocabulary_dwarf !haschildren:
.. _zw_vocabulary_dwarf ?haschildren:

!haschildren, ?haschildren
--------------------------

``T_DIE``
.........

Inspects a DIE on TOS and holds if that DIE might have children,
i.e. it is the same as ``abbrev ?haschildren``.  Note that even DIE's
for which ?haschildren holds may not actually have children, because
the actual children chain in the Dwarf file is immediately terminated.
To determine whether there are actually any children, use
``?(child)``::

	$ dwgrep ./tests/haschildren_childless -e 'entry (offset == 0x2d) abbrev "%s"'
	[2] offset:0x13, children:yes, tag:subprogram

	$ dwgrep ./tests/haschildren_childless -e '
		entry (offset == 0x2d)
		if child then "yes" else "no" "%s: %s"'
	[2d] subprogram: no

``T_ABBREV``
............

Inspects an abbreviation on TOS and holds if DIE's described by this
abbreviation may have children.



.. _zw_vocabulary_dwarf !overlaps:
.. _zw_vocabulary_dwarf ?overlaps:

!overlaps, ?overlaps
--------------------

``T_ASET`` ``T_ASET``
.....................

Inspects two address sets on TOS, and holds if the two address sets
overlap.



.. _zw_vocabulary_dwarf !root:
.. _zw_vocabulary_dwarf ?root:

!root, ?root
------------

``T_DIE``
.........

Holds for root DIE's, i.e. DIE's that don't have a parental DIE.



.. _zw_vocabulary_dwarf @AT_*:
.. _zw_vocabulary_dwarf @DW_AT_*:

@AT_*, @DW_AT_*
---------------

This section describes the following words: ``@DW_AT_vtable_elem_location``, ``@DW_AT_visibility``, ``@DW_AT_virtuality``, ``@DW_AT_variable_parameter``, ``@DW_AT_use_location``, ``@DW_AT_use_UTF8``, ``@DW_AT_upper_bound``, ``@DW_AT_type``, ``@DW_AT_trampoline``, ``@DW_AT_threads_scaled``, ``@DW_AT_string_length_byte_size``, ``@DW_AT_string_length_bit_size``, ``@DW_AT_string_length``, ``@DW_AT_str_offsets_base``, ``@DW_AT_stmt_list``, ``@DW_AT_static_link``, ``@DW_AT_start_scope``, ``@DW_AT_src_info``, ``@DW_AT_src_coords``, ``@DW_AT_specification``, ``@DW_AT_small``, ``@DW_AT_signature``, ``@DW_AT_sibling``, ``@DW_AT_sf_names``, ``@DW_AT_segment``, ``@DW_AT_rvalue_reference``, ``@DW_AT_rnglists_base``, ``@DW_AT_return_addr``, ``@DW_AT_reference``, ``@DW_AT_recursive``, ``@DW_AT_rank``, ``@DW_AT_ranges``, ``@DW_AT_pure``, ``@DW_AT_prototyped``, ``@DW_AT_producer``, ``@DW_AT_priority``, ``@DW_AT_picture_string``, ``@DW_AT_ordering``, ``@DW_AT_object_pointer``, ``@DW_AT_noreturn``, ``@DW_AT_namelist_item``, ``@DW_AT_name``, ``@DW_AT_mutable``, ``@DW_AT_main_subprogram``, ``@DW_AT_macros``, ``@DW_AT_macro_info``, ``@DW_AT_mac_info``, ``@DW_AT_lower_bound``, ``@DW_AT_low_pc``, ``@DW_AT_loclists_base``, ``@DW_AT_location``, ``@DW_AT_linkage_name``, ``@DW_AT_language``, ``@DW_AT_is_optional``, ``@DW_AT_inline``, ``@DW_AT_import``, ``@DW_AT_identifier_case``, ``@DW_AT_high_pc``, ``@DW_AT_friend``, ``@DW_AT_frame_base``, ``@DW_AT_external``, ``@DW_AT_extension``, ``@DW_AT_export_symbols``, ``@DW_AT_explicit``, ``@DW_AT_enum_class``, ``@DW_AT_entry_pc``, ``@DW_AT_endianity``, ``@DW_AT_encoding``, ``@DW_AT_elemental``, ``@DW_AT_dwo_name``, ``@DW_AT_discr_value``, ``@DW_AT_discr_list``, ``@DW_AT_discr``, ``@DW_AT_digit_count``, ``@DW_AT_description``, ``@DW_AT_deleted``, ``@DW_AT_defaulted``, ``@DW_AT_default_value``, ``@DW_AT_declaration``, ``@DW_AT_decl_line``, ``@DW_AT_decl_file``, ``@DW_AT_decl_column``, ``@DW_AT_decimal_sign``, ``@DW_AT_decimal_scale``, ``@DW_AT_data_member_location``, ``@DW_AT_data_location``, ``@DW_AT_data_bit_offset``, ``@DW_AT_count``, ``@DW_AT_containing_type``, ``@DW_AT_const_value``, ``@DW_AT_const_expr``, ``@DW_AT_comp_dir``, ``@DW_AT_common_reference``, ``@DW_AT_calling_convention``, ``@DW_AT_call_value``, ``@DW_AT_call_target_clobbered``, ``@DW_AT_call_target``, ``@DW_AT_call_tail_call``, ``@DW_AT_call_return_pc``, ``@DW_AT_call_pc``, ``@DW_AT_call_parameter``, ``@DW_AT_call_origin``, ``@DW_AT_call_line``, ``@DW_AT_call_file``, ``@DW_AT_call_data_value``, ``@DW_AT_call_data_location``, ``@DW_AT_call_column``, ``@DW_AT_call_all_tail_calls``, ``@DW_AT_call_all_source_calls``, ``@DW_AT_call_all_calls``, ``@DW_AT_byte_stride``, ``@DW_AT_byte_size``, ``@DW_AT_body_end``, ``@DW_AT_body_begin``, ``@DW_AT_bit_stride``, ``@DW_AT_bit_size``, ``@DW_AT_bit_offset``, ``@DW_AT_binary_scale``, ``@DW_AT_base_types``, ``@DW_AT_associated``, ``@DW_AT_artificial``, ``@DW_AT_allocated``, ``@DW_AT_alignment``, ``@DW_AT_address_class``, ``@DW_AT_addr_base``, ``@DW_AT_accessibility``, ``@DW_AT_abstract_origin``, ``@DW_AT_MIPS_tail_loop_begin``, ``@DW_AT_MIPS_stride_elem``, ``@DW_AT_MIPS_stride_byte``, ``@DW_AT_MIPS_stride``, ``@DW_AT_MIPS_software_pipeline_depth``, ``@DW_AT_MIPS_ptr_dopetype``, ``@DW_AT_MIPS_loop_unroll_factor``, ``@DW_AT_MIPS_loop_begin``, ``@DW_AT_MIPS_linkage_name``, ``@DW_AT_MIPS_has_inlines``, ``@DW_AT_MIPS_fde``, ``@DW_AT_MIPS_epilog_begin``, ``@DW_AT_MIPS_clone_origin``, ``@DW_AT_MIPS_assumed_size``, ``@DW_AT_MIPS_assumed_shape_dopetype``, ``@DW_AT_MIPS_allocatable_dopetype``, ``@DW_AT_MIPS_abstract_name``, ``@DW_AT_GNU_vector``, ``@DW_AT_GNU_template_name``, ``@DW_AT_GNU_tail_call``, ``@DW_AT_GNU_shared_locks_required``, ``@DW_AT_GNU_ranges_base``, ``@DW_AT_GNU_pubtypes``, ``@DW_AT_GNU_pubnames``, ``@DW_AT_GNU_pt_guarded_by``, ``@DW_AT_GNU_pt_guarded``, ``@DW_AT_GNU_odr_signature``, ``@DW_AT_GNU_numerator``, ``@DW_AT_GNU_macros``, ``@DW_AT_GNU_locviews``, ``@DW_AT_GNU_locks_excluded``, ``@DW_AT_GNU_guarded_by``, ``@DW_AT_GNU_guarded``, ``@DW_AT_GNU_exclusive_locks_required``, ``@DW_AT_GNU_entry_view``, ``@DW_AT_GNU_dwo_name``, ``@DW_AT_GNU_dwo_id``, ``@DW_AT_GNU_denominator``, ``@DW_AT_GNU_deleted``, ``@DW_AT_GNU_call_site_value``, ``@DW_AT_GNU_call_site_target_clobbered``, ``@DW_AT_GNU_call_site_target``, ``@DW_AT_GNU_call_site_data_value``, ``@DW_AT_GNU_bias``, ``@DW_AT_GNU_all_tail_call_sites``, ``@DW_AT_GNU_all_source_call_sites``, ``@DW_AT_GNU_all_call_sites``, ``@DW_AT_GNU_addr_base``, ``@AT_vtable_elem_location``, ``@AT_visibility``, ``@AT_virtuality``, ``@AT_variable_parameter``, ``@AT_use_location``, ``@AT_use_UTF8``, ``@AT_upper_bound``, ``@AT_type``, ``@AT_trampoline``, ``@AT_threads_scaled``, ``@AT_string_length_byte_size``, ``@AT_string_length_bit_size``, ``@AT_string_length``, ``@AT_str_offsets_base``, ``@AT_stmt_list``, ``@AT_static_link``, ``@AT_start_scope``, ``@AT_src_info``, ``@AT_src_coords``, ``@AT_specification``, ``@AT_small``, ``@AT_signature``, ``@AT_sibling``, ``@AT_sf_names``, ``@AT_segment``, ``@AT_rvalue_reference``, ``@AT_rnglists_base``, ``@AT_return_addr``, ``@AT_reference``, ``@AT_recursive``, ``@AT_rank``, ``@AT_ranges``, ``@AT_pure``, ``@AT_prototyped``, ``@AT_producer``, ``@AT_priority``, ``@AT_picture_string``, ``@AT_ordering``, ``@AT_object_pointer``, ``@AT_noreturn``, ``@AT_namelist_item``, ``@AT_name``, ``@AT_mutable``, ``@AT_main_subprogram``, ``@AT_macros``, ``@AT_macro_info``, ``@AT_mac_info``, ``@AT_lower_bound``, ``@AT_low_pc``, ``@AT_loclists_base``, ``@AT_location``, ``@AT_linkage_name``, ``@AT_language``, ``@AT_is_optional``, ``@AT_inline``, ``@AT_import``, ``@AT_identifier_case``, ``@AT_high_pc``, ``@AT_friend``, ``@AT_frame_base``, ``@AT_external``, ``@AT_extension``, ``@AT_export_symbols``, ``@AT_explicit``, ``@AT_enum_class``, ``@AT_entry_pc``, ``@AT_endianity``, ``@AT_encoding``, ``@AT_elemental``, ``@AT_dwo_name``, ``@AT_discr_value``, ``@AT_discr_list``, ``@AT_discr``, ``@AT_digit_count``, ``@AT_description``, ``@AT_deleted``, ``@AT_defaulted``, ``@AT_default_value``, ``@AT_declaration``, ``@AT_decl_line``, ``@AT_decl_file``, ``@AT_decl_column``, ``@AT_decimal_sign``, ``@AT_decimal_scale``, ``@AT_data_member_location``, ``@AT_data_location``, ``@AT_data_bit_offset``, ``@AT_count``, ``@AT_containing_type``, ``@AT_const_value``, ``@AT_const_expr``, ``@AT_comp_dir``, ``@AT_common_reference``, ``@AT_calling_convention``, ``@AT_call_value``, ``@AT_call_target_clobbered``, ``@AT_call_target``, ``@AT_call_tail_call``, ``@AT_call_return_pc``, ``@AT_call_pc``, ``@AT_call_parameter``, ``@AT_call_origin``, ``@AT_call_line``, ``@AT_call_file``, ``@AT_call_data_value``, ``@AT_call_data_location``, ``@AT_call_column``, ``@AT_call_all_tail_calls``, ``@AT_call_all_source_calls``, ``@AT_call_all_calls``, ``@AT_byte_stride``, ``@AT_byte_size``, ``@AT_body_end``, ``@AT_body_begin``, ``@AT_bit_stride``, ``@AT_bit_size``, ``@AT_bit_offset``, ``@AT_binary_scale``, ``@AT_base_types``, ``@AT_associated``, ``@AT_artificial``, ``@AT_allocated``, ``@AT_alignment``, ``@AT_address_class``, ``@AT_addr_base``, ``@AT_accessibility``, ``@AT_abstract_origin``, ``@AT_MIPS_tail_loop_begin``, ``@AT_MIPS_stride_elem``, ``@AT_MIPS_stride_byte``, ``@AT_MIPS_stride``, ``@AT_MIPS_software_pipeline_depth``, ``@AT_MIPS_ptr_dopetype``, ``@AT_MIPS_loop_unroll_factor``, ``@AT_MIPS_loop_begin``, ``@AT_MIPS_linkage_name``, ``@AT_MIPS_has_inlines``, ``@AT_MIPS_fde``, ``@AT_MIPS_epilog_begin``, ``@AT_MIPS_clone_origin``, ``@AT_MIPS_assumed_size``, ``@AT_MIPS_assumed_shape_dopetype``, ``@AT_MIPS_allocatable_dopetype``, ``@AT_MIPS_abstract_name``, ``@AT_GNU_vector``, ``@AT_GNU_template_name``, ``@AT_GNU_tail_call``, ``@AT_GNU_shared_locks_required``, ``@AT_GNU_ranges_base``, ``@AT_GNU_pubtypes``, ``@AT_GNU_pubnames``, ``@AT_GNU_pt_guarded_by``, ``@AT_GNU_pt_guarded``, ``@AT_GNU_odr_signature``, ``@AT_GNU_numerator``, ``@AT_GNU_macros``, ``@AT_GNU_locviews``, ``@AT_GNU_locks_excluded``, ``@AT_GNU_guarded_by``, ``@AT_GNU_guarded``, ``@AT_GNU_exclusive_locks_required``, ``@AT_GNU_entry_view``, ``@AT_GNU_dwo_name``, ``@AT_GNU_dwo_id``, ``@AT_GNU_denominator``, ``@AT_GNU_deleted``, ``@AT_GNU_call_site_value``, ``@AT_GNU_call_site_target_clobbered``, ``@AT_GNU_call_site_target``, ``@AT_GNU_call_site_data_value``, ``@AT_GNU_bias``, ``@AT_GNU_all_tail_call_sites``, ``@AT_GNU_all_source_call_sites``, ``@AT_GNU_all_call_sites``, ``@AT_GNU_addr_base``.

``T_DIE`` ``->*`` ``T_???``
...........................

Takes a DIE on TOS and yields value of attribute indicated by the
word.  Syntactic sugar for ``(attribute ?(label == AT_*) cooked
value)``::

	$ dwgrep ./tests/nullptr.o -e '
		entry (|A| "%( A @AT_name %): %( A @AT_declaration %)")'
	foo: true



.. _zw_vocabulary_dwarf DW_*:

DW_*
----

This section describes the following words: ``DW_VIS_qualified``, ``DW_VIS_local``, ``DW_VIS_exported``, ``DW_VIRTUALITY_virtual``, ``DW_VIRTUALITY_pure_virtual``, ``DW_VIRTUALITY_none``, ``DW_TAG_with_stmt``, ``DW_TAG_volatile_type``, ``DW_TAG_variant_part``, ``DW_TAG_variant``, ``DW_TAG_variable``, ``DW_TAG_unspecified_type``, ``DW_TAG_unspecified_parameters``, ``DW_TAG_union_type``, ``DW_TAG_typedef``, ``DW_TAG_type_unit``, ``DW_TAG_try_block``, ``DW_TAG_thrown_type``, ``DW_TAG_template_value_parameter``, ``DW_TAG_template_type_parameter``, ``DW_TAG_template_alias``, ``DW_TAG_subroutine_type``, ``DW_TAG_subrange_type``, ``DW_TAG_subprogram``, ``DW_TAG_structure_type``, ``DW_TAG_string_type``, ``DW_TAG_skeleton_unit``, ``DW_TAG_shared_type``, ``DW_TAG_set_type``, ``DW_TAG_rvalue_reference_type``, ``DW_TAG_restrict_type``, ``DW_TAG_reference_type``, ``DW_TAG_ptr_to_member_type``, ``DW_TAG_pointer_type``, ``DW_TAG_partial_unit``, ``DW_TAG_packed_type``, ``DW_TAG_namespace``, ``DW_TAG_namelist_item``, ``DW_TAG_namelist``, ``DW_TAG_module``, ``DW_TAG_member``, ``DW_TAG_lexical_block``, ``DW_TAG_label``, ``DW_TAG_interface_type``, ``DW_TAG_inlined_subroutine``, ``DW_TAG_inheritance``, ``DW_TAG_imported_unit``, ``DW_TAG_imported_module``, ``DW_TAG_imported_declaration``, ``DW_TAG_immutable_type``, ``DW_TAG_generic_subrange``, ``DW_TAG_function_template``, ``DW_TAG_friend``, ``DW_TAG_format_label``, ``DW_TAG_formal_parameter``, ``DW_TAG_file_type``, ``DW_TAG_enumerator``, ``DW_TAG_enumeration_type``, ``DW_TAG_entry_point``, ``DW_TAG_dynamic_type``, ``DW_TAG_dwarf_procedure``, ``DW_TAG_constant``, ``DW_TAG_const_type``, ``DW_TAG_condition``, ``DW_TAG_compile_unit``, ``DW_TAG_common_inclusion``, ``DW_TAG_common_block``, ``DW_TAG_coarray_type``, ``DW_TAG_class_type``, ``DW_TAG_class_template``, ``DW_TAG_catch_block``, ``DW_TAG_call_site_parameter``, ``DW_TAG_call_site``, ``DW_TAG_base_type``, ``DW_TAG_atomic_type``, ``DW_TAG_array_type``, ``DW_TAG_access_declaration``, ``DW_TAG_MIPS_loop``, ``DW_TAG_GNU_template_template_param``, ``DW_TAG_GNU_template_parameter_pack``, ``DW_TAG_GNU_formal_parameter_pack``, ``DW_TAG_GNU_call_site_parameter``, ``DW_TAG_GNU_call_site``, ``DW_TAG_GNU_EINCL``, ``DW_TAG_GNU_BINCL``, ``DW_ORD_row_major``, ``DW_ORD_col_major``, ``DW_OP_xor``, ``DW_OP_xderef_type``, ``DW_OP_xderef_size``, ``DW_OP_xderef``, ``DW_OP_swap``, ``DW_OP_stack_value``, ``DW_OP_skip``, ``DW_OP_shra``, ``DW_OP_shr``, ``DW_OP_shl``, ``DW_OP_rot``, ``DW_OP_reinterpret``, ``DW_OP_regx``, ``DW_OP_regval_type``, ``DW_OP_reg9``, ``DW_OP_reg8``, ``DW_OP_reg7``, ``DW_OP_reg6``, ``DW_OP_reg5``, ``DW_OP_reg4``, ``DW_OP_reg31``, ``DW_OP_reg30``, ``DW_OP_reg3``, ``DW_OP_reg29``, ``DW_OP_reg28``, ``DW_OP_reg27``, ``DW_OP_reg26``, ``DW_OP_reg25``, ``DW_OP_reg24``, ``DW_OP_reg23``, ``DW_OP_reg22``, ``DW_OP_reg21``, ``DW_OP_reg20``, ``DW_OP_reg2``, ``DW_OP_reg19``, ``DW_OP_reg18``, ``DW_OP_reg17``, ``DW_OP_reg16``, ``DW_OP_reg15``, ``DW_OP_reg14``, ``DW_OP_reg13``, ``DW_OP_reg12``, ``DW_OP_reg11``, ``DW_OP_reg10``, ``DW_OP_reg1``, ``DW_OP_reg0``, ``DW_OP_push_object_address``, ``DW_OP_plus_uconst``, ``DW_OP_plus``, ``DW_OP_piece``, ``DW_OP_pick``, ``DW_OP_over``, ``DW_OP_or``, ``DW_OP_not``, ``DW_OP_nop``, ``DW_OP_neg``, ``DW_OP_ne``, ``DW_OP_mul``, ``DW_OP_mod``, ``DW_OP_minus``, ``DW_OP_lt``, ``DW_OP_lit9``, ``DW_OP_lit8``, ``DW_OP_lit7``, ``DW_OP_lit6``, ``DW_OP_lit5``, ``DW_OP_lit4``, ``DW_OP_lit31``, ``DW_OP_lit30``, ``DW_OP_lit3``, ``DW_OP_lit29``, ``DW_OP_lit28``, ``DW_OP_lit27``, ``DW_OP_lit26``, ``DW_OP_lit25``, ``DW_OP_lit24``, ``DW_OP_lit23``, ``DW_OP_lit22``, ``DW_OP_lit21``, ``DW_OP_lit20``, ``DW_OP_lit2``, ``DW_OP_lit19``, ``DW_OP_lit18``, ``DW_OP_lit17``, ``DW_OP_lit16``, ``DW_OP_lit15``, ``DW_OP_lit14``, ``DW_OP_lit13``, ``DW_OP_lit12``, ``DW_OP_lit11``, ``DW_OP_lit10``, ``DW_OP_lit1``, ``DW_OP_lit0``, ``DW_OP_le``, ``DW_OP_implicit_value``, ``DW_OP_implicit_pointer``, ``DW_OP_gt``, ``DW_OP_ge``, ``DW_OP_form_tls_address``, ``DW_OP_fbreg``, ``DW_OP_eq``, ``DW_OP_entry_value``, ``DW_OP_dup``, ``DW_OP_drop``, ``DW_OP_div``, ``DW_OP_deref_type``, ``DW_OP_deref_size``, ``DW_OP_deref``, ``DW_OP_convert``, ``DW_OP_constx``, ``DW_OP_constu``, ``DW_OP_consts``, ``DW_OP_const_type``, ``DW_OP_const8u``, ``DW_OP_const8s``, ``DW_OP_const4u``, ``DW_OP_const4s``, ``DW_OP_const2u``, ``DW_OP_const2s``, ``DW_OP_const1u``, ``DW_OP_const1s``, ``DW_OP_call_ref``, ``DW_OP_call_frame_cfa``, ``DW_OP_call4``, ``DW_OP_call2``, ``DW_OP_bregx``, ``DW_OP_breg9``, ``DW_OP_breg8``, ``DW_OP_breg7``, ``DW_OP_breg6``, ``DW_OP_breg5``, ``DW_OP_breg4``, ``DW_OP_breg31``, ``DW_OP_breg30``, ``DW_OP_breg3``, ``DW_OP_breg29``, ``DW_OP_breg28``, ``DW_OP_breg27``, ``DW_OP_breg26``, ``DW_OP_breg25``, ``DW_OP_breg24``, ``DW_OP_breg23``, ``DW_OP_breg22``, ``DW_OP_breg21``, ``DW_OP_breg20``, ``DW_OP_breg2``, ``DW_OP_breg19``, ``DW_OP_breg18``, ``DW_OP_breg17``, ``DW_OP_breg16``, ``DW_OP_breg15``, ``DW_OP_breg14``, ``DW_OP_breg13``, ``DW_OP_breg12``, ``DW_OP_breg11``, ``DW_OP_breg10``, ``DW_OP_breg1``, ``DW_OP_breg0``, ``DW_OP_bra``, ``DW_OP_bit_piece``, ``DW_OP_and``, ``DW_OP_addrx``, ``DW_OP_addr``, ``DW_OP_abs``, ``DW_OP_GNU_variable_value``, ``DW_OP_GNU_uninit``, ``DW_OP_GNU_reinterpret``, ``DW_OP_GNU_regval_type``, ``DW_OP_GNU_push_tls_address``, ``DW_OP_GNU_parameter_ref``, ``DW_OP_GNU_implicit_pointer``, ``DW_OP_GNU_entry_value``, ``DW_OP_GNU_encoded_addr``, ``DW_OP_GNU_deref_type``, ``DW_OP_GNU_convert``, ``DW_OP_GNU_const_type``, ``DW_OP_GNU_const_index``, ``DW_OP_GNU_addr_index``, ``DW_MACRO_GNU_undef_indirect``, ``DW_MACRO_GNU_undef``, ``DW_MACRO_GNU_transparent_include``, ``DW_MACRO_GNU_start_file``, ``DW_MACRO_GNU_end_file``, ``DW_MACRO_GNU_define_indirect``, ``DW_MACRO_GNU_define``, ``DW_MACINFO_vendor_ext``, ``DW_MACINFO_undef``, ``DW_MACINFO_start_file``, ``DW_MACINFO_end_file``, ``DW_MACINFO_define``, ``DW_LANG_UPC``, ``DW_LANG_Swift``, ``DW_LANG_Rust``, ``DW_LANG_RenderScript``, ``DW_LANG_Python``, ``DW_LANG_Pascal83``, ``DW_LANG_PLI``, ``DW_LANG_OpenCL``, ``DW_LANG_ObjC_plus_plus``, ``DW_LANG_ObjC``, ``DW_LANG_OCaml``, ``DW_LANG_Modula3``, ``DW_LANG_Modula2``, ``DW_LANG_Mips_Assembler``, ``DW_LANG_Julia``, ``DW_LANG_Java``, ``DW_LANG_Haskell``, ``DW_LANG_Go``, ``DW_LANG_Fortran95``, ``DW_LANG_Fortran90``, ``DW_LANG_Fortran77``, ``DW_LANG_Fortran08``, ``DW_LANG_Fortran03``, ``DW_LANG_Dylan``, ``DW_LANG_D``, ``DW_LANG_Cobol85``, ``DW_LANG_Cobol74``, ``DW_LANG_C_plus_plus_14``, ``DW_LANG_C_plus_plus_11``, ``DW_LANG_C_plus_plus_03``, ``DW_LANG_C_plus_plus``, ``DW_LANG_C99``, ``DW_LANG_C89``, ``DW_LANG_C11``, ``DW_LANG_C``, ``DW_LANG_BLISS``, ``DW_LANG_Ada95``, ``DW_LANG_Ada83``, ``DW_INL_not_inlined``, ``DW_INL_inlined``, ``DW_INL_declared_not_inlined``, ``DW_INL_declared_inlined``, ``DW_ID_up_case``, ``DW_ID_down_case``, ``DW_ID_case_sensitive``, ``DW_ID_case_insensitive``, ``DW_FORM_udata``, ``DW_FORM_strx4``, ``DW_FORM_strx3``, ``DW_FORM_strx2``, ``DW_FORM_strx1``, ``DW_FORM_strx``, ``DW_FORM_strp_sup``, ``DW_FORM_strp``, ``DW_FORM_string``, ``DW_FORM_sec_offset``, ``DW_FORM_sdata``, ``DW_FORM_rnglistx``, ``DW_FORM_ref_udata``, ``DW_FORM_ref_sup8``, ``DW_FORM_ref_sup4``, ``DW_FORM_ref_sig8``, ``DW_FORM_ref_addr``, ``DW_FORM_ref8``, ``DW_FORM_ref4``, ``DW_FORM_ref2``, ``DW_FORM_ref1``, ``DW_FORM_loclistx``, ``DW_FORM_line_strp``, ``DW_FORM_indirect``, ``DW_FORM_implicit_const``, ``DW_FORM_flag_present``, ``DW_FORM_flag``, ``DW_FORM_exprloc``, ``DW_FORM_data8``, ``DW_FORM_data4``, ``DW_FORM_data2``, ``DW_FORM_data16``, ``DW_FORM_data1``, ``DW_FORM_block4``, ``DW_FORM_block2``, ``DW_FORM_block1``, ``DW_FORM_block``, ``DW_FORM_addrx4``, ``DW_FORM_addrx3``, ``DW_FORM_addrx2``, ``DW_FORM_addrx1``, ``DW_FORM_addrx``, ``DW_FORM_addr``, ``DW_FORM_GNU_strp_alt``, ``DW_FORM_GNU_str_index``, ``DW_FORM_GNU_ref_alt``, ``DW_FORM_GNU_addr_index``, ``DW_END_little``, ``DW_END_default``, ``DW_END_big``, ``DW_DS_unsigned``, ``DW_DS_trailing_separate``, ``DW_DS_trailing_overpunch``, ``DW_DS_leading_separate``, ``DW_DS_leading_overpunch``, ``DW_DSC_range``, ``DW_DSC_label``, ``DW_CC_program``, ``DW_CC_pass_by_value``, ``DW_CC_pass_by_reference``, ``DW_CC_normal``, ``DW_CC_nocall``, ``DW_AT_vtable_elem_location``, ``DW_AT_visibility``, ``DW_AT_virtuality``, ``DW_AT_variable_parameter``, ``DW_AT_use_location``, ``DW_AT_use_UTF8``, ``DW_AT_upper_bound``, ``DW_AT_type``, ``DW_AT_trampoline``, ``DW_AT_threads_scaled``, ``DW_AT_string_length_byte_size``, ``DW_AT_string_length_bit_size``, ``DW_AT_string_length``, ``DW_AT_str_offsets_base``, ``DW_AT_stmt_list``, ``DW_AT_static_link``, ``DW_AT_start_scope``, ``DW_AT_src_info``, ``DW_AT_src_coords``, ``DW_AT_specification``, ``DW_AT_small``, ``DW_AT_signature``, ``DW_AT_sibling``, ``DW_AT_sf_names``, ``DW_AT_segment``, ``DW_AT_rvalue_reference``, ``DW_AT_rnglists_base``, ``DW_AT_return_addr``, ``DW_AT_reference``, ``DW_AT_recursive``, ``DW_AT_rank``, ``DW_AT_ranges``, ``DW_AT_pure``, ``DW_AT_prototyped``, ``DW_AT_producer``, ``DW_AT_priority``, ``DW_AT_picture_string``, ``DW_AT_ordering``, ``DW_AT_object_pointer``, ``DW_AT_noreturn``, ``DW_AT_namelist_item``, ``DW_AT_name``, ``DW_AT_mutable``, ``DW_AT_main_subprogram``, ``DW_AT_macros``, ``DW_AT_macro_info``, ``DW_AT_mac_info``, ``DW_AT_lower_bound``, ``DW_AT_low_pc``, ``DW_AT_loclists_base``, ``DW_AT_location``, ``DW_AT_linkage_name``, ``DW_AT_language``, ``DW_AT_is_optional``, ``DW_AT_inline``, ``DW_AT_import``, ``DW_AT_identifier_case``, ``DW_AT_high_pc``, ``DW_AT_friend``, ``DW_AT_frame_base``, ``DW_AT_external``, ``DW_AT_extension``, ``DW_AT_export_symbols``, ``DW_AT_explicit``, ``DW_AT_enum_class``, ``DW_AT_entry_pc``, ``DW_AT_endianity``, ``DW_AT_encoding``, ``DW_AT_elemental``, ``DW_AT_dwo_name``, ``DW_AT_discr_value``, ``DW_AT_discr_list``, ``DW_AT_discr``, ``DW_AT_digit_count``, ``DW_AT_description``, ``DW_AT_deleted``, ``DW_AT_defaulted``, ``DW_AT_default_value``, ``DW_AT_declaration``, ``DW_AT_decl_line``, ``DW_AT_decl_file``, ``DW_AT_decl_column``, ``DW_AT_decimal_sign``, ``DW_AT_decimal_scale``, ``DW_AT_data_member_location``, ``DW_AT_data_location``, ``DW_AT_data_bit_offset``, ``DW_AT_count``, ``DW_AT_containing_type``, ``DW_AT_const_value``, ``DW_AT_const_expr``, ``DW_AT_comp_dir``, ``DW_AT_common_reference``, ``DW_AT_calling_convention``, ``DW_AT_call_value``, ``DW_AT_call_target_clobbered``, ``DW_AT_call_target``, ``DW_AT_call_tail_call``, ``DW_AT_call_return_pc``, ``DW_AT_call_pc``, ``DW_AT_call_parameter``, ``DW_AT_call_origin``, ``DW_AT_call_line``, ``DW_AT_call_file``, ``DW_AT_call_data_value``, ``DW_AT_call_data_location``, ``DW_AT_call_column``, ``DW_AT_call_all_tail_calls``, ``DW_AT_call_all_source_calls``, ``DW_AT_call_all_calls``, ``DW_AT_byte_stride``, ``DW_AT_byte_size``, ``DW_AT_body_end``, ``DW_AT_body_begin``, ``DW_AT_bit_stride``, ``DW_AT_bit_size``, ``DW_AT_bit_offset``, ``DW_AT_binary_scale``, ``DW_AT_base_types``, ``DW_AT_associated``, ``DW_AT_artificial``, ``DW_AT_allocated``, ``DW_AT_alignment``, ``DW_AT_address_class``, ``DW_AT_addr_base``, ``DW_AT_accessibility``, ``DW_AT_abstract_origin``, ``DW_AT_MIPS_tail_loop_begin``, ``DW_AT_MIPS_stride_elem``, ``DW_AT_MIPS_stride_byte``, ``DW_AT_MIPS_stride``, ``DW_AT_MIPS_software_pipeline_depth``, ``DW_AT_MIPS_ptr_dopetype``, ``DW_AT_MIPS_loop_unroll_factor``, ``DW_AT_MIPS_loop_begin``, ``DW_AT_MIPS_linkage_name``, ``DW_AT_MIPS_has_inlines``, ``DW_AT_MIPS_fde``, ``DW_AT_MIPS_epilog_begin``, ``DW_AT_MIPS_clone_origin``, ``DW_AT_MIPS_assumed_size``, ``DW_AT_MIPS_assumed_shape_dopetype``, ``DW_AT_MIPS_allocatable_dopetype``, ``DW_AT_MIPS_abstract_name``, ``DW_AT_GNU_vector``, ``DW_AT_GNU_template_name``, ``DW_AT_GNU_tail_call``, ``DW_AT_GNU_shared_locks_required``, ``DW_AT_GNU_ranges_base``, ``DW_AT_GNU_pubtypes``, ``DW_AT_GNU_pubnames``, ``DW_AT_GNU_pt_guarded_by``, ``DW_AT_GNU_pt_guarded``, ``DW_AT_GNU_odr_signature``, ``DW_AT_GNU_numerator``, ``DW_AT_GNU_macros``, ``DW_AT_GNU_locviews``, ``DW_AT_GNU_locks_excluded``, ``DW_AT_GNU_guarded_by``, ``DW_AT_GNU_guarded``, ``DW_AT_GNU_exclusive_locks_required``, ``DW_AT_GNU_entry_view``, ``DW_AT_GNU_dwo_name``, ``DW_AT_GNU_dwo_id``, ``DW_AT_GNU_denominator``, ``DW_AT_GNU_deleted``, ``DW_AT_GNU_call_site_value``, ``DW_AT_GNU_call_site_target_clobbered``, ``DW_AT_GNU_call_site_target``, ``DW_AT_GNU_call_site_data_value``, ``DW_AT_GNU_bias``, ``DW_AT_GNU_all_tail_call_sites``, ``DW_AT_GNU_all_source_call_sites``, ``DW_AT_GNU_all_call_sites``, ``DW_AT_GNU_addr_base``, ``DW_ATE_void``, ``DW_ATE_unsigned_fixed``, ``DW_ATE_unsigned_char``, ``DW_ATE_unsigned``, ``DW_ATE_signed_fixed``, ``DW_ATE_signed_char``, ``DW_ATE_signed``, ``DW_ATE_packed_decimal``, ``DW_ATE_numeric_string``, ``DW_ATE_imaginary_float``, ``DW_ATE_float``, ``DW_ATE_edited``, ``DW_ATE_decimal_float``, ``DW_ATE_complex_float``, ``DW_ATE_boolean``, ``DW_ATE_address``, ``DW_ATE_UTF``, ``DW_ATE_UCS``, ``DW_ATE_ASCII``, ``DW_ADDR_none``, ``DW_ACCESS_public``, ``DW_ACCESS_protected``, ``DW_ACCESS_private``.



These words push to the stack the Dwarf constants referenced by their
name.  Individual classes of constants (e.g. ``DW_TAG_``, ``DW_AT_``,
...) have distinct domains.  That means that, say, ``DW_TAG_member``
and ``DW_AT_bit_size`` don't compare equal, even though they both have
the same underlying value.  It is possible to extract that numeric
value using the word ``value``::

	$ dwgrep -c -e 'DW_TAG_member == DW_AT_bit_size'
	0
	$ dwgrep -c -e 'DW_TAG_member value == DW_AT_bit_size value'
	1



.. _zw_vocabulary_dwarf STB_*:
.. _zw_vocabulary_dwarf STT_*:
.. _zw_vocabulary_dwarf STV_*:

STB_*, STT_*, STV_*
-------------------

This section describes the following words: ``STV_PROTECTED``, ``STV_INTERNAL``, ``STV_HIDDEN``, ``STV_DEFAULT``, ``STT_TLS``, ``STT_SPARC_REGISTER``, ``STT_SECTION``, ``STT_PARISC_MILLICODE``, ``STT_OBJECT``, ``STT_NOTYPE``, ``STT_HP_STUB``, ``STT_HP_OPAQUE``, ``STT_GNU_IFUNC``, ``STT_FUNC``, ``STT_FILE``, ``STT_COMMON``, ``STT_ARM_TFUNC``, ``STT_ARM_16BIT``, ``STB_WEAK``, ``STB_MIPS_SPLIT_COMMON``, ``STB_LOCAL``, ``STB_GNU_UNIQUE``, ``STB_GLOBAL``.



These words push to the stack the ELF constants referenced by their
name.  Individual classes of constants (e.g. ``STT_``, ``STB_``, ...)
have distinct domains.  Furthermore, constants related to some
architectures and operating systems may have further subdivided
constant domains.  Thus, e.g. ``STT_ARM_TFUNC`` and
``STT_SPARC_REGISTER`` don't compare equal even though they are both
``STT_`` constants with the same underlying value::

	$ dwgrep -e '[(STT_SPARC_REGISTER, STT_ARM_TFUNC, STB_MIPS_SPLIT_COMMON) value]'
	[13, 13, 13]
	$ dwgrep -c -e 'STT_SPARC_REGISTER == STT_ARM_TFUNC'
	0
	$ dwgrep -c -e 'STT_SPARC_REGISTER == STB_MIPS_SPLIT_COMMON'
	0



.. _zw_vocabulary_dwarf abbrev:

abbrev
------

``T_CU`` ``->`` ``T_ABBREV_UNIT``
.................................

Takes a CU on TOS and yields the abbreviation unit that contains this
unit's abbreviations.

``T_DIE`` ``->`` ``T_ABBREV``
.............................

Takes a DIE on TOS and yields the abbreviation that describes this
DIE.

``T_DWARF`` ``->*`` ``T_ABBREV_UNIT``
.....................................

Takes a Dwarf on TOS and yields each abbreviation unit present
therein.



.. _zw_vocabulary_dwarf add:

add
---

``T_ASET`` ``T_CONST`` ``->`` ``T_ASET``
........................................

Takes an address set and a constant on TOS, and adds the constant to
range covered by given address set::

	$ dwgrep ./tests/aranges.o -e 'entry @AT_location address 1 add'
	[0x1, 0x2), [0x10000, 0x10010)
	[0x1, 0x2), [0x10010, 0x1001a)

``T_ASET`` ``T_ASET`` ``->`` ``T_ASET``
.......................................

Takes two address sets and yields an address set that covers both
their ranges::

	$ dwgrep ./tests/aranges.o -e '
		[|D| D entry @AT_location address]
		(|L| L elem (pos == 0) L elem (pos == 1)) add'
	[0x10000, 0x1001a)



.. _zw_vocabulary_dwarf address:

address
-------

``T_ATTR`` ``->?`` ``T_CONST``
..............................

Takes a DIE attribute on TOS and yields an address that it references.
For attributes with an address form, this simply yields the value of
the attribute.  For ``DW_AT_high_pc`` and ``DW_AT_entry_pc``
attributes with a constant form, this converts the relative constant
value to absolute address::

	$ dwgrep ./tests/bitcount.o -e 'unit root'
	[b]	compile_unit
		[... snip ...]
		low_pc (addr)	0x10000;
		high_pc (data8)	32;
		stmt_list (sec_offset)	0;

	$ dwgrep ./tests/bitcount.o -e 'unit root attribute ?AT_high_pc address'
	0x10020

``T_DIE`` ``->`` ``T_ASET``
...........................

Takes a DIE on TOS and yields an address set describing address ranges
covered by this DIE.  (This calls dwarf_ranges under the covers.)::

	$ dwgrep ./tests/testfile_const_type -e 'entry (name == "main") address'
	[0x80482f0, 0x80482f3)

``T_LOCLIST_ELEM`` ``->`` ``T_ASET``
....................................

Takes a location list element on TOS and yields an address set
describing where it is valid::

	$ dwgrep ./tests/bitcount.o -e 'entry (offset == 0x91)'
	[91]	formal_parameter
		name (string)	u;
		decl_file (data1)	tests/bitcount.c;
		decl_line (data1)	3;
		type (ref4)	[5e];
		location (sec_offset)	0x10000..0x10017:[0:reg5];0x10017..0x1001a:[0:breg5<0>, 2:breg1<0>, 4:and, 5:stack_value];0x1001a..0x10020:[0:reg5];

	$ dwgrep ./tests/bitcount.o -e 'entry (offset == 0x91) @AT_location address'
	[0x10000, 0x10017)
	[0x10017, 0x1001a)
	[0x1001a, 0x10020)

``T_ELFSYM`` ``->`` ``T_CONST``
...............................

Takes a symbol on TOS and yields its address (``st_value`` field of
``GElf_Sym`` structure).



.. _zw_vocabulary_dwarf aset:

aset
----

``T_CONST`` ``T_CONST`` ``->`` ``T_ASET``
.........................................

Takes two constants on TOS and constructs an address set that spans
that range.  (The higher address is not considered a part of that
range though.)



.. _zw_vocabulary_dwarf attribute:

attribute
---------

``T_DIE`` ``->*`` ``T_ATTR``
............................

Takes a DIE on TOS and yields its individual attributes.  If it is a
raw DIE, it yields only those attributes that the DIE contains.  For
cooked DIE's it also integrates attributes at DIE's referenced by
``DW_AT_abstract_origin`` and ``DW_AT_specification``, except those
that are already present at the original DIE, or those that it makes
no sense to import (as of this writing, ``DW_AT_sibling``,
``DW_AT_declaration``).

Example::

	$ dwgrep ./tests/nullptr.o -e 'raw entry (offset == 0x6e) attribute'
	specification (ref4)	[3f];
	inline (data1)	DW_INL_declared_inlined;
	object_pointer (ref4)	[7c];
	sibling (ref4)	[8b];

	$ dwgrep ./tests/nullptr.o -e 'raw entry (offset == 0x3f)'
	[3f]	subprogram
		external (flag_present)	true;			# Will be integrate.
		name (string)	foo;				# Likewise.
		decl_file (data1)	tests/nullptr.cc;	# Likewise.
		decl_line (data1)	3;			# Likewise.
		declaration (flag_present)	true;		# Won't--meaningless.
		object_pointer (ref4)	[4a];			# Won't--duplicate.

	$ dwgrep ./tests/nullptr.o -e 'entry (offset == 0x6e) attribute'
	specification (ref4)	[3f];
	inline (data1)	DW_INL_declared_inlined;
	object_pointer (ref4)	[7c];
	sibling (ref4)	[8b];
	external (flag_present)	true;
	name (string)	foo;
	decl_file (data1)	tests/nullptr.cc;
	decl_line (data1)	3;

``T_ABBREV`` ``->*`` ``T_ABBREV_ATTR``
......................................

Takes an abbreviation on TOS and yields all its attributes::

	$ dwgrep ./tests/nullptr.o -e 'entry (offset == 0x3f) abbrev attribute'
	0x31 external (flag_present)
	0x33 name (string)
	0x35 decl_file (data1)
	0x37 decl_line (data1)
	0x39 declaration (flag_present)
	0x3b object_pointer (ref4)



.. _zw_vocabulary_dwarf binding:

binding
-------

``T_ELFSYM`` ``->`` ``T_CONST``
...............................

Takes a symbol on TOS and yields its binding (a constant with domain
``STB_``).



.. _zw_vocabulary_dwarf child:

child
-----

``T_DIE`` ``->*`` ``T_DIE``
...........................

Takes a DIE on TOS and yields all its children.  If the taken DIE is
cooked, and one of the children is a ``DW_TAG_imported_unit``, the
operator resolves that reference and recursively yields also all its
children::

	$ dwgrep ./tests/dwz-partial2-1 -e 'unit root (offset == 0xe7) raw child "%s"'
	[f9] imported_unit
	[fe] imported_unit
	[103] variable

	$ dwgrep ./tests/dwz-partial2-1 -e 'unit root (offset == 0xe7) child "%s"'
	[76] base_type
	[7d] base_type
	[4b] typedef
	[51] pointer_type
	[54] pointer_type
	[57] pointer_type
	[5a] const_type
	[5c] volatile_type
	[103] variable



.. _zw_vocabulary_dwarf code:

code
----

``T_ABBREV`` ``->`` ``T_CONST``
...............................

Takes abbreviation on TOS and yields its code.



.. _zw_vocabulary_dwarf cooked:

cooked
------

``T_CU`` ``->`` ``T_CU``
........................

Takes a CU on TOS and yields a cooked version thereof.

|RawCookeImmutable|

``T_DIE`` ``->`` ``T_DIE``
..........................

Takes a DIE on TOS and yields a cooked version thereof.

|RawCookeImmutable|

``T_DWARF`` ``->`` ``T_DWARF``
..............................

Takes a Dwarf on TOS and yields a cooked version thereof.

|RawCookeImmutable|

``T_ATTR`` ``->`` ``T_ATTR``
............................

Takes an attribute on TOS and yields a cooked version thereof.

|RawCookeImmutable|



.. _zw_vocabulary_dwarf dwopen:

dwopen
------

``T_STR`` ``->`` ``T_DWARF``
............................

Takes a string, which is interpreted as a file name, that file is
opened, and a Dwarf value representing that file is yielded::

	$ dwgrep '"dwgrep/dwgrep" dwopen unit'
	CU 0



.. _zw_vocabulary_dwarf elem:
.. _zw_vocabulary_dwarf relem:

elem, relem
-----------

``T_ASET`` ``->*`` ``T_CONST``
..............................

Take an address set on TOS and yield all its addresses.  Be warned
that this may be a very expensive operation.  It is common that
address sets cover the whole address range, which for a 64-bit
architecture is a whole lot of addresses.

Example::

	$ dwgrep ./tests/testfile_const_type -e 'entry (name == "main") address'
	[0x80482f0, 0x80482f3)

	$ dwgrep ./tests/testfile_const_type -e 'entry (name == "main") address elem'
	0x80482f0
	0x80482f1
	0x80482f2

``relem`` behaves similarly, but yields addresses in reverse order.

``T_LOCLIST_ELEM`` ``->*`` ``T_LOCLIST_OP``
...........................................

Takes a location expression on TOS and yields individual operators::

	$ dwgrep ./tests/testfile_const_type -e 'entry (offset == 0x57)'
	[57]	variable
		name (string)	w;
		decl_file (data1)	/home/mark/src/elfutils/tests/const_type.c;
		decl_line (data1)	6;
		type (ref4)	[25];
		location (exprloc)	0..0xffffffffffffffff:[0:fbreg<0>, 2:GNU_deref_type<8>/<37>, [... snip ...]];

	$ dwgrep ./tests/testfile_const_type -e 'entry (offset == 0x57) @AT_location elem'
	0:fbreg<0>
	2:GNU_deref_type<8>/<37>
	5:GNU_const_type<[25] base_type>/<[0, 0, 0x80, 0x67, 0x45, 0x23, 0x1, 0]>
	16:div
	17:GNU_convert<44>
	19:stack_value

``relem`` yields elements backwards.



.. _zw_vocabulary_dwarf entry:

entry
-----

``T_ABBREV_UNIT`` ``->*`` ``T_ABBREV``
......................................

Take an abbreviation unit on TOS and yield all abbreviations that it
contains::

	$ dwgrep ./tests/twocus -e 'abbrev (offset == 0x34) entry "%s"'
	[1] offset:0x34, children:yes, tag:compile_unit
	[2] offset:0x47, children:yes, tag:subprogram
	[3] offset:0x60, children:yes, tag:subprogram
	[4] offset:0x71, children:no, tag:unspecified_parameters
	[5] offset:0x76, children:no, tag:base_type

``T_CU`` ``->*`` ``T_DIE``
..........................

Takes a CU on TOS and yield DIE's that it defines::

	$ dwgrep ./tests/twocus -e 'unit (offset == 0x53) entry "%s"'
	[5e] compile_unit
	[80] subprogram
	[a3] subprogram
	[b0] unspecified_parameters
	[b3] base_type

This operator is similar in operation to the following::

	root child*

The difference may lie (and as of this writing lies) in the order in
which the entries are yielded.

In cooked mode, it resolves any ``DW_TAG_imported_unit``'s that it
finds during exploring the DIE tree.  One entry can thus be explored
several times, each time in a different context::

	$ dwgrep ./tests/dwz-partial -e 'entry (offset == 0x14) (|A| A A parent* ?root) "%s inside %s"'
	[14] pointer_type inside [34] compile_unit
	[14] pointer_type inside [a4] compile_unit
	[14] pointer_type inside [e1] compile_unit
	[14] pointer_type inside [11e] compile_unit

	$ dwgrep ./tests/dwz-partial -e 'raw entry (offset == 0x14) (|A| A A parent* ?root) "%s inside %s"'
	[14] pointer_type inside [b] partial_unit

``T_DWARF`` ``->*`` ``T_DIE``
.............................

Takes a Dwarf on TOS and yields DIE's that it contains.  This operator
behaves equivalently to the following::

	unit entry



.. _zw_vocabulary_dwarf form:

form
----

``T_ABBREV_ATTR`` ``->`` ``T_CONST``
....................................

Takes an abbreviation attribute on TOS and yields its form.

``T_ATTR`` ``->`` ``T_CONST``
.............................

Takes an attribute on TOS and yields its form.



.. _zw_vocabulary_dwarf high:

high
----

``T_DIE`` ``->?`` ``T_CONST``
.............................

Equivalent to ``@AT_high_pc``.

``T_ASET`` ``->?`` ``T_CONST``
..............................

Takes an address set on TOS and yields highest address of this set.
Note that that address doesn't actually belong to the set.  Doesn't
yield at all if the set is empty.



.. _zw_vocabulary_dwarf label:

label
-----

``T_DIE`` ``->`` ``T_CONST``
............................

Takes a DIE on TOS and yields its tag::

	$ dwgrep ./tests/a1.out -e 'raw unit root label'
	DW_TAG_compile_unit
	DW_TAG_partial_unit

``T_LOCLIST_OP`` ``->`` ``T_CONST``
...................................

Takes a location expression instruction on TOS and yields the
operator::

	$ dwgrep ./tests/bitcount.o -e 'entry (offset == 0x91) @AT_location elem label'
	reg5
	breg5
	breg1
	and
	stack_value
	reg5

``T_ELFSYM`` ``->`` ``T_CONST``
...............................

Takes a symbol on TOS and yields its type (a constant with domain
``STT_``).

``T_ABBREV_ATTR`` ``->`` ``T_CONST``
....................................

Takes an abbreviation attribute on TOS and yields its name::

	$ dwgrep ./tests/a1.out -e 'unit root abbrev attribute label'
	DW_AT_producer
	DW_AT_language
	DW_AT_name
	DW_AT_comp_dir
	DW_AT_low_pc
	DW_AT_high_pc
	DW_AT_stmt_list

``T_ABBREV`` ``->`` ``T_CONST``
...............................

Takes an abbreviation on TOS and yields its tag::

	$ dwgrep ./tests/a1.out -e 'raw unit root abbrev label'
	DW_TAG_compile_unit
	DW_TAG_partial_unit

``T_ATTR`` ``->`` ``T_CONST``
.............................

Takes an attribute on TOS and yields its name::

	$ dwgrep ./tests/a1.out -e 'unit root attribute label'
	DW_AT_producer
	DW_AT_language
	DW_AT_name
	DW_AT_comp_dir
	DW_AT_low_pc
	DW_AT_high_pc
	DW_AT_stmt_list



.. _zw_vocabulary_dwarf length:

length
------

``T_LOCLIST_ELEM`` ``->`` ``T_CONST``
.....................................

Takes a location expression on TOS and yields number of operators in
expression::

	$ dwgrep ./tests/bitcount.o -e 'entry @AT_location (length == 4)'
	0x10017..0x1001a:[0:breg5<0>, 2:breg1<0>, 4:and, 5:stack_value]

``T_ASET`` ``->`` ``T_CONST``
.............................

Takes an address set on TOS and yields number of addresses covered by
that set::

	$ dwgrep '0 0x10 aset 0x100 0x110 aset add length'
	32



.. _zw_vocabulary_dwarf low:

low
---

``T_DIE`` ``->?`` ``T_CONST``
.............................

Equivalent to ``@AT_low_pc``.

``T_ASET`` ``->?`` ``T_CONST``
..............................

Takes an address set on TOS and yields lowest address set in this set.
Doesn't yield at all if the set is empty::

	$ dwgrep ./tests/aranges.o -e 'entry @AT_location'
	0x10000..0x10010:[0:reg5]
	0x10010..0x1001a:[0:fbreg<-24>]

	$ dwgrep ./tests/aranges.o -e 'entry @AT_location address low'
	0x10000
	0x10010



.. _zw_vocabulary_dwarf name:

name
----

``T_DIE`` ``->?`` ``T_STR``
...........................

Equivalent to ``@AT_name``.

``T_DWARF`` ``->`` ``T_STR``
............................

Take a Dwarf on TOS and yield its filename.  Note that it may not be
possible to use the reported name to reopen the Dwarf.  The Dwarf may
have been built in place in memory, or the file may have been deleted
or replaced since the Dwarf was opened.

``T_ELFSYM`` ``->`` ``T_STR``
.............................

Takes a symbol on TOS and yields its name.



.. _zw_vocabulary_dwarf offset:

offset
------

``T_CU`` ``->`` ``T_CONST``
...........................

Takes a CU on TOS and yields its offset inside the Dwarf section that
it comes from::

	$ dwgrep tests/twocus -e 'unit offset'
	0
	0x53

Note that CU offset is different from the offset of its root element::

	$ dwgrep tests/twocus -e 'unit root offset'
	0xb
	0x5e

|OffsetsNotUnique|

.. |OffsetsNotUnique| replace::
    Note that offset does not uniquely identify a Dwarf object, as
    offsets of objects from .gnu_debugaltlink files are again numbered
    from 0, and may conflict with those from the main file.  Direct
    comparison of individual objects will not be fooled though.

Example::

	$ dwgrep tests/a1.out -e '
		let A := raw unit (pos == 0);
		let B := raw unit (pos == 1);
		A B if (A == B) then "eq" else "ne"'
	---
	ne
	CU 0
	CU 0
	<Dwarf "tests/a1.out">

``T_DIE`` ``->`` ``T_CONST``
............................

Takes a DIE on TOS and yields its offset inside the Dwarf section that
it comes from::

	$ dwgrep tests/twocus -e 'unit root offset'
	0xb
	0x5e

|OffsetsNotUnique|

Also, DIE's brought in through imports will report the same offset
even though they came in through different paths.  E.g. if a single
DIE is selected in the same context in two different expressions, the
two DIE's compare equal::

	$ dwgrep tests/dwz-partial2-1 -e '
		let A := [entry (offset == 0x14)] elem (pos == 0);
		let B := [entry (offset == 0x14)] elem (pos == 0);
		A B if ?eq then "==" else "!=" swap "%s: %s %s %s"'
	<Dwarf "tests/dwz-partial2-1">: [14] typedef == [14] typedef

However if the two DIE's are taken from different contexts, they will
compare unequal despite them being physically the same DIE::

	$ dwgrep tests/dwz-partial2-1 -e '
		let A := [entry (offset == 0x14)] elem (pos == 0);
		let B := [entry (offset == 0x14)] elem (pos == 1);
		A B if ?eq then "==" else "!=" swap "%s: %s %s %s"'
	<Dwarf "tests/dwz-partial2-1">: [14] typedef != [14] typedef

``T_LOCLIST_OP`` ``->`` ``T_CONST``
...................................

Takes a location list operation on TOS and yields its offset within
the containing location expression::

	$ dwgrep ./tests/testfile_const_type -e 'entry (offset == 0x57)'
	[57]	variable
		name (string)	w;
		decl_file (data1)	/home/mark/src/elfutils/tests/const_type.c;
		decl_line (data1)	6;
		type (ref4)	[25];
		location (exprloc)	0..0xffffffffffffffff:[0:fbreg<0>, 2:GNU_deref_type<8>/<37>, [... snip ...]];

	$ dwgrep ./tests/testfile_const_type -e 'entry (offset == 0x57) @AT_location elem offset'
	0
	0x2
	0x5
	0x10
	0x11
	0x13

``T_ABBREV_ATTR`` ``->`` ``T_CONST``
....................................

Takes an abbreviation attribute on TOS and yields its offset inside
the Dwarf section that it comes from::

	$ dwgrep ./tests/twocus -e '
		abbrev entry attribute (pos == 0) "%(offset%)\t%(dup label%)"'
	0	DW_AT_producer
	0x13	DW_AT_external
	0x28	DW_AT_byte_size
	0x34	DW_AT_producer
	0x47	DW_AT_external
	0x60	DW_AT_external
	0x76	DW_AT_byte_size

``T_ABBREV`` ``->`` ``T_CONST``
...............................

Takes an abbreviation on TOS and yields its offset inside the Dwarf
section that it comes from::

	$ dwgrep ./tests/twocus -e 'abbrev entry "%(code%): %(dup offset%)"'
	1: 0
	2: 0x13
	3: 0x28
	1: 0x34
	2: 0x47
	3: 0x60
	4: 0x71
	5: 0x76

|OffsetsNotUnique|

``T_ABBREV_UNIT`` ``->`` ``T_CONST``
....................................

Takes an abbreviation unit on TOS and yields its offset inside the
Dwarf section that it comes from::

	$ dwgrep ./tests/twocus -e 'abbrev offset'
	0
	0x34

|OffsetsNotUnique|



.. _zw_vocabulary_dwarf overlap:

overlap
-------

``T_ASET`` ``T_ASET`` ``->`` ``T_ASET``
.......................................

Takes two address sets on TOS, and yields a (possibly empty) address
set that covers those addresses that both of the address sets cover.



.. _zw_vocabulary_dwarf parent:

parent
------

``T_DIE`` ``->?`` ``T_DIE``
...........................

Takes a DIE on TOS and yields its parental DIE.  For cooked DIE's, in
traverses parents across import points back to from which context the
particular DIE was explored::

	$ dwgrep ./tests/a1.out -e 'unit raw entry "%s"'
	[b] compile_unit
	[2d] imported_unit
	[32] subprogram
	[51] variable

	$ dwgrep ./tests/a1.out -e 'entry (offset == 0x14) "%s"'
	[14] typedef

	$ dwgrep ./tests/a1.out -e 'entry (offset == 0x14) parent "%s"'
	[b] compile_unit



.. _zw_vocabulary_dwarf range:

range
-----

``T_ASET`` ``->*`` ``T_ASET``
.............................

Takes an address set on TOS and yields all continuous ranges of that
address set, presented as individual address sets::

	$ dwgrep '0 0x10 aset 0x100 0x110 aset add range'
	[0, 0x10)
	[0x100, 0x110)



.. _zw_vocabulary_dwarf raw:

raw
---

``T_CU`` ``->`` ``T_CU``
........................

Takes a CU on TOS and yields a raw version thereof.

|RawCookeImmutable|

``T_DIE`` ``->`` ``T_DIE``
..........................

Takes a DIE on TOS and yields a raw version thereof.

|RawCookeImmutable|

``T_DWARF`` ``->`` ``T_DWARF``
..............................

Takes a Dwarf on TOS and yields a raw version thereof.

|RawCookeImmutable|

.. |RawCookeImmutable| replace::

   The words ``raw`` and ``cooked`` create a new value, they do not
   change a state of an existing one.  The underlying bits that
   constitute the Dwarf data themselves are shared, but those, too,
   are immutable.

In particular, take a look at the following example::

	$ dwgrep ./tests/a1.out -e '
		(|D| D raw D (|R C| [C entry] length [R entry] length))'
	---
	13
	11

Had ``raw`` changed the value that it's applied to, the next reference
to *D* would yield a raw Dwarf.  But raw yields a new value and *D* is
kept intact (despite the sharing of underlying bits, as mentioned).

``T_ATTR`` ``->`` ``T_ATTR``
............................

Takes an attribute on TOS and yields a raw version thereof.

|RawCookeImmutable|



.. _zw_vocabulary_dwarf root:

root
----

``T_CU`` ``->`` ``T_DIE``
.........................

Takes a CU on TOS and yields its root DIE.

``T_DIE`` ``->`` ``T_DIE``
..........................

Takes a DIE on TOS and yields CU DIE of the unit that this DIE comes
from.  For cooked DIE's follows back through import points and yields
the CU DIE of this DIE's context.



.. _zw_vocabulary_dwarf size:

size
----

``T_ELFSYM`` ``->`` ``T_CONST``
...............................

Takes a symbol on TOS and yields its size.



.. _zw_vocabulary_dwarf sub:

sub
---

``T_ASET`` ``T_CONST`` ``->`` ``T_ASET``
........................................

Takes an address set and a constant on TOS and yields an address set
with a hole poked at the address given by the constant::

	$ dwgrep ./tests/aranges.o -e 'entry @AT_location address 0x10010 sub'
	[0x10000, 0x10010)
	[0x10011, 0x1001a)

``T_ASET`` ``T_ASET`` ``->`` ``T_ASET``
.......................................

Takes two address sets *A* and *B*, and yields an address set that
contains all of the *A*'s addresses except those covered by *B*.



.. _zw_vocabulary_dwarf symbol:

symbol
------

``T_DWARF`` ``->*`` ``T_ELFSYM``
................................

Takes a Dwarf on TOS and yields every symbol found in any of the
symbol tables in ELF files that hosts the Dwarf data in question.



.. _zw_vocabulary_dwarf unit:

unit
----

``T_DIE`` ``->`` ``T_CU``
.........................

Take a DIE on TOS and yield a unit that this DIE belongs to::

	$ dwgrep ./tests/twocus -e 'unit'
	CU 0
	CU 0x53

	$ dwgrep ./tests/twocus -e 'entry (offset == 0x4b) unit'
	CU 0

``T_DWARF`` ``->*`` ``T_CU``
............................

Take a Dwarf on TOS and yield units defined therein.  In raw mode,
yields all units without exception, in cooked mode it only yields
actual compile units (i.e. those units whose CU DIE's tag is
``DW_TAG_compile_unit``.

For example::

	$ dwgrep ./tests/dwz-partial -e 'raw unit root "%s"'
	[b] partial_unit
	[34] compile_unit
	[a4] compile_unit
	[e1] compile_unit
	[11e] compile_unit

	$ dwgrep ./tests/dwz-partial -e 'cooked unit root "%s"'
	[34] compile_unit
	[a4] compile_unit
	[e1] compile_unit
	[11e] compile_unit

This operator is identical in operation to the following expression::

	entry ?root unit

``T_ATTR`` ``->`` ``T_CU``
..........................

Take an attribute on TOS and yield a unit where the attribute
originated::

	$ dwgrep ./tests/twocus -e 'unit'
	CU 0
	CU 0x53

	$ dwgrep ./tests/twocus -e 'entry (offset == 0xb3) attribute unit'
	CU 0x53
	CU 0x53
	CU 0x53



.. _zw_vocabulary_dwarf value:

value
-----

``T_LOCLIST_OP`` ``->*`` ``T_???``
..................................

Takes a location expression instruction on TOS and yields its
operands::

	$ dwgrep ./tests/aranges.o -e 'entry @AT_location elem'
	0:reg5
	0:fbreg<-24>

	$ dwgrep ./tests/aranges.o -e 'entry @AT_location elem value'
	-24

Operands could be of any Zwerg type, some will be e.g. DIE's.

``T_ELFSYM`` ``->`` ``T_CONST``
...............................

Takes a symbol on TOS and yields its address (``st_value`` field of
``GElf_Sym`` structure).

``T_ATTR`` ``->*`` ``T_???``
............................

Takes an attribute on TOS and yields its value.  The value can be of
any Zwerg type.  There can even be more than one value.  In particular
location expression attributes yield all the constituent location
expressions::

	$ dwgrep ./tests/aranges.o -e 'entry attribute ?AT_location value'
	0x10000..0x10010:[0:reg5]
	0x10010..0x1001a:[0:fbreg<-24>]



.. _zw_vocabulary_dwarf version:

version
-------

``T_CU`` ``->`` ``T_CONST``
...........................

Takes a CU on TOS and yields a constant corresponding to version of
Dwarf standard according to which this CU has been written.



.. _zw_vocabulary_dwarf visibility:

visibility
----------

``T_ELFSYM`` ``->`` ``T_CONST``
...............................

Takes a symbol on TOS and yields its ELF visibility (a constant with
domain ``STV_``).



