Struct gimli::read::EntriesRaw

source ·
pub struct EntriesRaw<'abbrev, 'unit, R>
where R: Reader,
{ /* private fields */ }
Expand description

A raw reader of the data that defines the Debugging Information Entries.

EntriesRaw provides primitives to read the components of Debugging Information Entries (DIEs). A DIE consists of an abbreviation code (read with read_abbreviation) followed by a number of attributes (read with read_attribute). The user must provide the control flow to read these correctly. In particular, all attributes must always be read before reading another abbreviation code.

EntriesRaw lacks some features of EntriesCursor, such as the ability to skip to the next sibling DIE. However, this also allows it to optimize better, since it does not need to perform the extra bookkeeping required to support these features, and thus it is suitable for cases where performance is important.

§Example Usage

let unit = get_some_unit();
let abbrevs = get_abbrevs_for_unit(&unit);

let mut entries = unit.entries_raw(&abbrevs, None)?;
while !entries.is_empty() {
    let abbrev = if let Some(abbrev) = entries.read_abbreviation()? {
        abbrev
    } else {
        // Null entry with no attributes.
        continue
    };
    match abbrev.tag() {
        gimli::DW_TAG_subprogram => {
            // Loop over attributes for DIEs we care about.
            for spec in abbrev.attributes() {
                let attr = entries.read_attribute(*spec)?;
                match attr.name() {
                    // Handle attributes.
                    _ => {}
                }
            }
        }
        _ => {
            // Skip attributes for DIEs we don't care about.
            entries.skip_attributes(abbrev.attributes());
        }
    }
}

Implementations§

source§

impl<'abbrev, 'unit, R: Reader> EntriesRaw<'abbrev, 'unit, R>

source

pub fn is_empty(&self) -> bool

Return true if there is no more input.

source

pub fn next_offset(&self) -> UnitOffset<R::Offset>

Return the unit offset at which the reader will read next.

If you want the offset of the next entry, then this must be called prior to reading the next entry.

source

pub fn next_depth(&self) -> isize

Return the depth of the next entry.

This depth is updated when read_abbreviation is called, and is updated based on null entries and the has_children field in the abbreviation.

source

pub fn read_abbreviation(&mut self) -> Result<Option<&'abbrev Abbreviation>>

Read an abbreviation code and lookup the corresponding Abbreviation.

Returns Ok(None) for null entries.

source

pub fn read_attribute( &mut self, spec: AttributeSpecification, ) -> Result<Attribute<R>>

Read an attribute.

source

pub fn skip_attributes( &mut self, specs: &[AttributeSpecification], ) -> Result<()>

Skip all the attributes of an abbreviation.

Trait Implementations§

source§

impl<'abbrev, 'unit, R> Clone for EntriesRaw<'abbrev, 'unit, R>
where R: Reader + Clone,

source§

fn clone(&self) -> EntriesRaw<'abbrev, 'unit, R>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'abbrev, 'unit, R> Debug for EntriesRaw<'abbrev, 'unit, R>
where R: Reader + Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'abbrev, 'unit, R> Freeze for EntriesRaw<'abbrev, 'unit, R>
where R: Freeze,

§

impl<'abbrev, 'unit, R> RefUnwindSafe for EntriesRaw<'abbrev, 'unit, R>

§

impl<'abbrev, 'unit, R> Send for EntriesRaw<'abbrev, 'unit, R>
where R: Send + Sync, <R as Reader>::Offset: Sync,

§

impl<'abbrev, 'unit, R> Sync for EntriesRaw<'abbrev, 'unit, R>
where R: Sync, <R as Reader>::Offset: Sync,

§

impl<'abbrev, 'unit, R> Unpin for EntriesRaw<'abbrev, 'unit, R>
where R: Unpin,

§

impl<'abbrev, 'unit, R> UnwindSafe for EntriesRaw<'abbrev, 'unit, R>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.