Struct gimli::read::line::LineRow

source ·
pub struct LineRow {
Show 13 fields tombstone: bool, address: u64, op_index: Wrapping<u64>, file: u64, line: Wrapping<u64>, column: u64, is_stmt: bool, basic_block: bool, end_sequence: bool, prologue_end: bool, epilogue_begin: bool, isa: u64, discriminator: u64,
}
Expand description

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

Each row is a copy of the registers of the state machine, as defined in section 6.2.2.

Fields§

§tombstone: bool§address: u64§op_index: Wrapping<u64>§file: u64§line: Wrapping<u64>§column: u64§is_stmt: bool§basic_block: bool§end_sequence: bool§prologue_end: bool§epilogue_begin: bool§isa: u64§discriminator: u64

Implementations§

source§

impl LineRow

source

pub fn new<R: Reader>(header: &LineProgramHeader<R>) -> Self

Create a line number row in the initial state for the given program.

source

pub fn address(&self) -> u64

“The program-counter value corresponding to a machine instruction generated by the compiler.”

source

pub fn op_index(&self) -> u64

An unsigned integer representing the index of an operation within a VLIW instruction. The index of the first operation is 0. For non-VLIW architectures, this register will always be 0.

The address and op_index registers, taken together, form an operation pointer that can reference any individual operation with the instruction stream.

source

pub fn file_index(&self) -> u64

“An unsigned integer indicating the identity of the source file corresponding to a machine instruction.”

source

pub fn file<'header, R: Reader>( &self, header: &'header LineProgramHeader<R>, ) -> Option<&'header FileEntry<R>>

The source file corresponding to the current machine instruction.

source

pub fn line(&self) -> Option<NonZeroU64>

“An unsigned integer indicating a source line number. Lines are numbered beginning at 1. The compiler may emit the value 0 in cases where an instruction cannot be attributed to any source line.” Line number values of 0 are represented as None.

source

pub fn column(&self) -> ColumnType

“An unsigned integer indicating a column number within a source line. Columns are numbered beginning at 1. The value 0 is reserved to indicate that a statement begins at the “left edge” of the line.”

source

pub fn is_stmt(&self) -> bool

“A boolean indicating that the current instruction is a recommended breakpoint location. A recommended breakpoint location is intended to “represent” a line, a statement and/or a semantically distinct subpart of a statement.”

source

pub fn basic_block(&self) -> bool

“A boolean indicating that the current instruction is the beginning of a basic block.”

source

pub fn end_sequence(&self) -> bool

“A boolean indicating that the current address is that of the first byte after the end of a sequence of target machine instructions. end_sequence terminates a sequence of lines; therefore other information in the same row is not meaningful.”

source

pub fn prologue_end(&self) -> bool

“A boolean indicating that the current address is one (of possibly many) where execution should be suspended for an entry breakpoint of a function.”

source

pub fn epilogue_begin(&self) -> bool

“A boolean indicating that the current address is one (of possibly many) where execution should be suspended for an exit breakpoint of a function.”

source

pub fn isa(&self) -> u64

Tag for the current instruction set architecture.

An unsigned integer whose value encodes the applicable instruction set architecture for the current instruction.

The encoding of instruction sets should be shared by all users of a given architecture. It is recommended that this encoding be defined by the ABI authoring committee for each architecture.

source

pub fn discriminator(&self) -> u64

“An unsigned integer identifying the block to which the current instruction belongs. Discriminator values are assigned arbitrarily by the DWARF producer and serve to distinguish among multiple blocks that may all be associated with the same source file, line, and column. Where only one block exists for a given source position, the discriminator value should be zero.”

source

pub fn execute<R, Program>( &mut self, instruction: LineInstruction<R>, program: &mut Program, ) -> Result<bool>
where Program: LineProgram<R>, R: Reader,

Execute the given instruction, and return true if a new row in the line number matrix needs to be generated.

Unknown opcodes are treated as no-ops.

source

pub fn reset<R: Reader>(&mut self, header: &LineProgramHeader<R>)

Perform any reset that was required after copying the previous row.

source

fn apply_line_advance(&mut self, line_increment: i64)

Step 1 of section 6.2.5.1

source

fn apply_operation_advance<R: Reader>( &mut self, operation_advance: u64, header: &LineProgramHeader<R>, ) -> Result<()>

Step 2 of section 6.2.5.1

source

fn adjust_opcode<R: Reader>( &self, opcode: u8, header: &LineProgramHeader<R>, ) -> u8

source

fn exec_special_opcode<R: Reader>( &mut self, opcode: u8, header: &LineProgramHeader<R>, ) -> Result<()>

Section 6.2.5.1

Trait Implementations§

source§

impl Clone for LineRow

source§

fn clone(&self) -> LineRow

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 Debug for LineRow

source§

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

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

impl PartialEq for LineRow

source§

fn eq(&self, other: &LineRow) -> 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 Copy for LineRow

source§

impl Eq for LineRow

source§

impl StructuralPartialEq for LineRow

Auto Trait Implementations§

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.