Crate gimli [] [src]

A lazy, zero-copy parser for the DWARF debugging information format.

  • Zero-copy: everything is just a reference to the original input buffer. No copies of the input data ever get made.

  • Lazy: only the compilation units' entries that you iterate over get parsed, and only as deep as you ask. Skip over a compilation unit and its entries don't get parsed.

  • Bring your own object file parser: gimli isn't coupled to any platform or object file format. Use your own ELF parser on Linux or a Mach-O parser on OSX.

This library primarily targets the fourth edition of the standard (the most recent, at time of writing).

Example Usage

Print out all of the functions in a compilation unit.

use gimli;

// Read the .debug_info and .debug_abbrev sections with whatever object
// loader you're using.
let debug_info = gimli::DebugInfo::<gimli::LittleEndian>::new(read_debug_info());
let debug_abbrev = gimli::DebugAbbrev::<gimli::LittleEndian>::new(read_debug_abbrev());

// Grab the first compilation unit.
let unit = debug_info.units().next()
    .expect("Should have at least one unit")
    .expect("and it should parse OK");

// Parse the abbreviations for this compilation unit.
let abbrevs = unit.abbreviations(debug_abbrev)
    .expect("Should parse the abbreviations OK");

// Get a cursor for iterating over this unit's entries.
let mut entries = unit.entries(&abbrevs);

// Keep iterating entries while the cursor is not exhausted.
while let Some((_, entry)) = entries.next_dfs().expect("Should parse next entry") {
    // If we find an entry for a function, print it.
    if entry.tag() == gimli::DW_TAG_subprogram {
        println!("Found a function: {:?}", entry);
    }
}

See the examples/dwarfdump.rs program for a complete example program.

Structs

Abbreviation

An abbreviation describes the shape of a DebuggingInformationEntry's type: its code, tag type, whether it has children, and its set of attributes.

Abbreviations

A set of type abbreviations.

Attribute

An attribute in a DebuggingInformationEntry, consisting of a name and associated value.

AttributeSpecification

The description of an attribute in an abbreviated type. It is a pair of name and form.

AttrsIter

An iterator over a particular entry's attributes.

DebugAbbrev

The DebugAbbrev struct represents the abbreviations describing DebuggingInformationEntrys' attribute names and forms found in the .debug_abbrev section.

DebugAbbrevOffset

An offset into the .debug_abbrev section.

DebugInfo

The DebugInfo struct represents the DWARF debugging information found in the .debug_info section.

DebugInfoOffset

An offset into the .debug_info section.

DebugLine

The DebugLine struct contains the source location to instruction mapping found in the .debug_line section.

DebugLineOffset

An offset into the .debug_line section.

DebugLocOffset

An offset into the .debug_loc section.

DebugMacinfoOffset

An offset into the .debug_macinfo section.

DebugStr

The DebugStr struct represents the DWARF strings found in the .debug_str section.

DebugStrOffset

An offset into the .debug_str section.

DebugTypes

The DebugTypes struct represents the DWARF type information found in the .debug_types section.

DebugTypesOffset

An offset into the .debug_types section.

DebuggingInformationEntry

A Debugging Information Entry (DIE).

DwAt
DwChildren
DwForm
DwLne
DwLns
DwTag
EndianBuf

A &[u8] slice with compile-time endianity metadata.

EntriesCursor

A cursor into the Debugging Information Entries tree for a compilation unit.

FileEntry

An entry in the LineNumberProgramHeader's file_names set.

LineNumberProgramHeader

A header for a line number program in the .debug_line section, as defined in section 6.2.4 of the standard.

LineNumberRow

A row in the line number program's resulting matrix.

OpcodesIter

An iterator yielding parsed opcodes.

StateMachine

Executes a LineNumberProgram to recreate the matrix mapping to and from instructions to source locations.

TypeUnitHeader

The header of a type unit's debugging information.

TypeUnitHeadersIter

An iterator over the type-units of this .debug_types section.

UnitHeader

The header of a compilation unit's debugging information.

UnitHeadersIter

An iterator over the compilation- and partial-units of a section.

UnitOffset

An offset into the current compilation or type unit.

Enums

AttributeValue

The value of an attribute in a DebuggingInformationEntry.

BigEndian

Big endian byte order.

ColumnType

The type of column that a row is referring to.

Error

An error that occurred when parsing.

Format

Whether the format of a compilation unit is 32- or 64-bit.

LittleEndian

Little endian byte order.

Opcode

A parsed line number program opcode.

Constants

DW_AT_abstract_origin
DW_AT_accessibility
DW_AT_address_class
DW_AT_allocated
DW_AT_artificial
DW_AT_associated
DW_AT_base_types
DW_AT_binary_scale
DW_AT_bit_offset
DW_AT_bit_size
DW_AT_bit_stride
DW_AT_byte_size
DW_AT_byte_stride
DW_AT_call_column
DW_AT_call_file
DW_AT_call_line
DW_AT_calling_convention
DW_AT_common_reference
DW_AT_comp_dir
DW_AT_const_expr
DW_AT_const_value
DW_AT_containing_type
DW_AT_count
DW_AT_data_bit_offset
DW_AT_data_location
DW_AT_data_member_location
DW_AT_decimal_scale
DW_AT_decimal_sign
DW_AT_decl_column
DW_AT_decl_file
DW_AT_decl_line
DW_AT_declaration
DW_AT_default_value
DW_AT_description
DW_AT_digit_count
DW_AT_discr
DW_AT_discr_list
DW_AT_discr_value
DW_AT_elemental
DW_AT_encoding
DW_AT_endianity
DW_AT_entry_pc
DW_AT_enum_class
DW_AT_explicit
DW_AT_extension
DW_AT_external
DW_AT_frame_base
DW_AT_friend
DW_AT_hi_user
DW_AT_high_pc
DW_AT_identifier_case
DW_AT_import
DW_AT_inline
DW_AT_is_optional
DW_AT_language
DW_AT_linkage_name
DW_AT_lo_user
DW_AT_location
DW_AT_low_pc
DW_AT_lower_bound
DW_AT_macro_info
DW_AT_main_subprogram
DW_AT_mutable
DW_AT_name
DW_AT_namelist_item
DW_AT_null
DW_AT_object_pointer
DW_AT_ordering
DW_AT_picture_string
DW_AT_priority
DW_AT_producer
DW_AT_prototyped
DW_AT_pure
DW_AT_ranges
DW_AT_recursive
DW_AT_return_addr
DW_AT_segment
DW_AT_sibling
DW_AT_signature
DW_AT_small
DW_AT_specification
DW_AT_start_scope
DW_AT_static_link
DW_AT_stmt_list
DW_AT_string_length
DW_AT_threads_scaled
DW_AT_trampoline
DW_AT_type
DW_AT_upper_bound
DW_AT_use_UTF8
DW_AT_use_location
DW_AT_variable_parameter
DW_AT_virtuality
DW_AT_visibility
DW_AT_vtable_elem_location
DW_CHILDREN_no
DW_CHILDREN_yes
DW_FORM_addr
DW_FORM_block
DW_FORM_block1
DW_FORM_block2
DW_FORM_block4
DW_FORM_data1
DW_FORM_data2
DW_FORM_data4
DW_FORM_data8
DW_FORM_exprloc
DW_FORM_flag
DW_FORM_flag_present
DW_FORM_indirect
DW_FORM_null
DW_FORM_ref1
DW_FORM_ref2
DW_FORM_ref4
DW_FORM_ref8
DW_FORM_ref_addr
DW_FORM_ref_sig8
DW_FORM_ref_udata
DW_FORM_sdata
DW_FORM_sec_offset
DW_FORM_string
DW_FORM_strp
DW_FORM_udata
DW_LNE_define_file
DW_LNE_end_sequence
DW_LNE_hi_user
DW_LNE_lo_user
DW_LNE_set_address
DW_LNE_set_discriminator
DW_LNS_advance_line
DW_LNS_advance_pc
DW_LNS_const_add_pc
DW_LNS_copy
DW_LNS_fixed_advance_pc
DW_LNS_negate_stmt
DW_LNS_set_basic_block
DW_LNS_set_column
DW_LNS_set_epilogue_begin
DW_LNS_set_file
DW_LNS_set_isa
DW_LNS_set_prologue_end
DW_TAG_access_declaration
DW_TAG_array_type
DW_TAG_base_type
DW_TAG_catch_block
DW_TAG_class_type
DW_TAG_common_block
DW_TAG_common_inclusion
DW_TAG_compile_unit
DW_TAG_condition
DW_TAG_const_type
DW_TAG_constant
DW_TAG_dwarf_procedure
DW_TAG_entry_point
DW_TAG_enumeration_type
DW_TAG_enumerator
DW_TAG_file_type
DW_TAG_formal_parameter
DW_TAG_friend
DW_TAG_hi_user
DW_TAG_imported_declaration
DW_TAG_imported_module
DW_TAG_imported_unit
DW_TAG_inheritance
DW_TAG_inlined_subroutine
DW_TAG_interface_type
DW_TAG_label
DW_TAG_lexical_block
DW_TAG_lo_user
DW_TAG_member
DW_TAG_module
DW_TAG_namelist
DW_TAG_namelist_item
DW_TAG_namespace
DW_TAG_null
DW_TAG_packed_type
DW_TAG_partial_unit
DW_TAG_pointer_type
DW_TAG_ptr_to_member_type
DW_TAG_reference_type
DW_TAG_restrict_type
DW_TAG_rvalue_reference_type
DW_TAG_set_type
DW_TAG_shared_type
DW_TAG_string_type
DW_TAG_structure_type
DW_TAG_subprogram
DW_TAG_subrange_type
DW_TAG_subroutine_type
DW_TAG_template_alias
DW_TAG_template_type_parameter
DW_TAG_template_value_parameter
DW_TAG_thrown_type
DW_TAG_try_block
DW_TAG_type_unit
DW_TAG_typedef
DW_TAG_union_type
DW_TAG_unspecified_parameters
DW_TAG_unspecified_type
DW_TAG_variable
DW_TAG_variant
DW_TAG_variant_part
DW_TAG_volatile_type
DW_TAG_with_stmt

Traits

Endianity

A trait describing the endianity of some buffer.

Type Definitions

ParseResult

The result of a parse.