Dwarf vocabulary

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)

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)

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

entry, offset

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.

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;

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

abbrev, cooked, entry, offset, raw, root, version

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;

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

abbrev, cooked, entry, name, raw, symbol, unit

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

address, binding, label, name, size, value, visibility

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]

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

!DW_OP_*, !OP_*, ?DW_OP_*, ?OP_*, label, offset, value

!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_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_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_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_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_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_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_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_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_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_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_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_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;

!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;

!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]

!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.

!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.

!empty, ?empty

T_ASET

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

!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.

!overlaps, ?overlaps

T_ASET T_ASET

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

!root, ?root

T_DIE

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

@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_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_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_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_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_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_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

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_DEFAULTED_out_of_class, DW_DEFAULTED_no, DW_DEFAULTED_in_class, 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_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_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_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

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

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.

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)

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).

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.)

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)

binding

T_ELFSYM -> T_CONST

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

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

code

T_ABBREV -> T_CONST

Takes abbreviation on TOS and yields its code.

cooked

T_CU -> T_CU

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

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.

T_DIE -> T_DIE

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

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.

T_DWARF -> T_DWARF

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

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.

T_ATTR -> T_ATTR

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

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.

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

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.

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

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.

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.

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

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

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

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.

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

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

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.

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

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.

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

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.

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.

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

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)

raw

T_CU -> T_CU

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

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.

T_DIE -> T_DIE

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

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.

T_DWARF -> T_DWARF

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

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.

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.

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.

size

T_ELFSYM -> T_CONST

Takes a symbol on TOS and yields its size.

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.

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.

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

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>]

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.

visibility

T_ELFSYM -> T_CONST

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