Struct gimli::read::line::LineProgramHeader

source ·
pub struct LineProgramHeader<R, Offset = <R as Reader>::Offset>
where R: Reader<Offset = Offset>, Offset: ReaderOffset,
{
Show 14 fields encoding: Encoding, offset: DebugLineOffset<Offset>, unit_length: Offset, header_length: Offset, line_encoding: LineEncoding, opcode_base: u8, standard_opcode_lengths: R, directory_entry_format: Vec<FileEntryFormat>, include_directories: Vec<AttributeValue<R, Offset>>, file_name_entry_format: Vec<FileEntryFormat>, file_names: Vec<FileEntry<R, Offset>>, program_buf: R, comp_dir: Option<R>, comp_file: Option<FileEntry<R, Offset>>,
}
Expand description

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

Fields§

§encoding: Encoding§offset: DebugLineOffset<Offset>§unit_length: Offset§header_length: Offset§line_encoding: LineEncoding§opcode_base: u8

“The number assigned to the first special opcode.”

§standard_opcode_lengths: R

“This array specifies the number of LEB128 operands for each of the standard opcodes. The first element of the array corresponds to the opcode whose value is 1, and the last element corresponds to the opcode whose value is opcode_base - 1.”

§directory_entry_format: Vec<FileEntryFormat>

“A sequence of directory entry format descriptions.”

§include_directories: Vec<AttributeValue<R, Offset>>

Entries in this sequence describe each path that was searched for included source files in this compilation. (The paths include those directories specified explicitly by the user for the compiler to search and those the compiler searches without explicit direction.) Each path entry is either a full path name or is relative to the current directory of the compilation.

The last entry is followed by a single null byte.

§file_name_entry_format: Vec<FileEntryFormat>

“A sequence of file entry format descriptions.”

§file_names: Vec<FileEntry<R, Offset>>

“Entries in this sequence describe source files that contribute to the line number information for this compilation unit or is used in other contexts.”

§program_buf: R

The encoded line program instructions.

§comp_dir: Option<R>

The current directory of the compilation.

§comp_file: Option<FileEntry<R, Offset>>

The primary source file.

Implementations§

source§

impl<R, Offset> LineProgramHeader<R, Offset>
where R: Reader<Offset = Offset>, Offset: ReaderOffset,

source

pub fn offset(&self) -> DebugLineOffset<R::Offset>

Return the offset of the line number program header in the .debug_line section.

source

pub fn unit_length(&self) -> R::Offset

Return the length of the line number program and header, not including the length of the encoded length itself.

source

pub fn encoding(&self) -> Encoding

Return the encoding parameters for this header’s line program.

source

pub fn version(&self) -> u16

Get the version of this header’s line program.

source

pub fn header_length(&self) -> R::Offset

Get the length of the encoded line number program header, not including the length of the encoded length itself.

source

pub fn address_size(&self) -> u8

Get the size in bytes of a target machine address.

source

pub fn format(&self) -> Format

Whether this line program is encoded in 64- or 32-bit DWARF.

source

pub fn line_encoding(&self) -> LineEncoding

Get the line encoding parameters for this header’s line program.

source

pub fn minimum_instruction_length(&self) -> u8

Get the minimum instruction length any instruction in this header’s line program may have.

source

pub fn maximum_operations_per_instruction(&self) -> u8

Get the maximum number of operations each instruction in this header’s line program may have.

source

pub fn default_is_stmt(&self) -> bool

Get the default value of the is_stmt register for this header’s line program.

source

pub fn line_base(&self) -> i8

Get the line base for this header’s line program.

source

pub fn line_range(&self) -> u8

Get the line range for this header’s line program.

source

pub fn opcode_base(&self) -> u8

Get opcode base for this header’s line program.

source

pub fn standard_opcode_lengths(&self) -> &R

An array of u8 that specifies the number of LEB128 operands for each of the standard opcodes.

source

pub fn directory_entry_format(&self) -> &[FileEntryFormat]

Get the format of a directory entry.

source

pub fn include_directories(&self) -> &[AttributeValue<R, Offset>]

Get the set of include directories for this header’s line program.

For DWARF version <= 4, the compilation’s current directory is not included in the return value, but is implicitly considered to be in the set per spec.

source

pub fn directory(&self, directory: u64) -> Option<AttributeValue<R, Offset>>

The include directory with the given directory index.

A directory index of 0 corresponds to the compilation unit directory.

source

pub fn file_name_entry_format(&self) -> &[FileEntryFormat]

Get the format of a file name entry.

source

pub fn file_has_timestamp(&self) -> bool

Return true if the file entries may have valid timestamps.

Only returns false if we definitely know that all timestamp fields are invalid.

source

pub fn file_has_size(&self) -> bool

Return true if the file entries may have valid sizes.

Only returns false if we definitely know that all size fields are invalid.

source

pub fn file_has_md5(&self) -> bool

Return true if the file name entry format contains an MD5 field.

source

pub fn file_has_source(&self) -> bool

Return true if the file name entry format contains a source field.

source

pub fn file_names(&self) -> &[FileEntry<R, Offset>]

Get the list of source files that appear in this header’s line program.

source

pub fn file(&self, file: u64) -> Option<&FileEntry<R, Offset>>

The source file with the given file index.

A file index of 0 corresponds to the compilation unit file. Note that a file index of 0 is invalid for DWARF version <= 4, but we support it anyway.

source

pub fn raw_program_buf(&self) -> R

Get the raw, un-parsed EndianSlice containing this header’s line number program.

use gimli::{LineProgramHeader, EndianSlice, NativeEndian};

fn get_line_number_program_header<'a>() -> LineProgramHeader<EndianSlice<'a, NativeEndian>> {
    // Get a line number program header from some offset in a
    // `.debug_line` section...
}

let header = get_line_number_program_header();
let raw_program = header.raw_program_buf();
println!("The length of the raw program in bytes is {}", raw_program.len());
source

pub fn instructions(&self) -> LineInstructions<R>

Iterate over the instructions in this header’s line number program, parsing them as we go.

source

fn parse( input: &mut R, offset: DebugLineOffset<Offset>, address_size: u8, comp_dir: Option<R>, comp_name: Option<R>, ) -> Result<LineProgramHeader<R, Offset>>

Trait Implementations§

source§

impl<R, Offset> Clone for LineProgramHeader<R, Offset>
where R: Reader<Offset = Offset> + Clone, Offset: ReaderOffset + Clone,

source§

fn clone(&self) -> LineProgramHeader<R, Offset>

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<R, Offset> Debug for LineProgramHeader<R, Offset>
where R: Reader<Offset = Offset> + Debug, Offset: ReaderOffset + Debug,

source§

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

Formats the value using the given formatter. Read more
source§

impl<R, Offset> PartialEq for LineProgramHeader<R, Offset>
where R: Reader<Offset = Offset> + PartialEq, Offset: ReaderOffset + PartialEq,

source§

fn eq(&self, other: &LineProgramHeader<R, Offset>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<R, Offset> Eq for LineProgramHeader<R, Offset>
where R: Reader<Offset = Offset> + Eq, Offset: ReaderOffset + Eq,

source§

impl<R, Offset> StructuralPartialEq for LineProgramHeader<R, Offset>
where R: Reader<Offset = Offset>, Offset: ReaderOffset,

Auto Trait Implementations§

§

impl<R, Offset> Freeze for LineProgramHeader<R, Offset>
where Offset: Freeze, R: Freeze,

§

impl<R, Offset> RefUnwindSafe for LineProgramHeader<R, Offset>
where Offset: RefUnwindSafe, R: RefUnwindSafe,

§

impl<R, Offset> Send for LineProgramHeader<R, Offset>
where Offset: Send, R: Send,

§

impl<R, Offset> Sync for LineProgramHeader<R, Offset>
where Offset: Sync, R: Sync,

§

impl<R, Offset> Unpin for LineProgramHeader<R, Offset>
where Offset: Unpin, R: Unpin,

§

impl<R, Offset> UnwindSafe for LineProgramHeader<R, Offset>
where Offset: UnwindSafe, R: UnwindSafe,

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§

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,

source§

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

source§

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

source§

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.