pub struct LineProgram {
pub file_has_timestamp: bool,
pub file_has_size: bool,
pub file_has_md5: bool,
pub file_has_source: bool,
/* private fields */
}Expand description
A line number program.
Fields§
§file_has_timestamp: boolTrue if the file entries may have valid timestamps.
Entries may still have a timestamp of 0 even if this is set.
For version <= 4, this is ignored.
For version 5, this controls whether to emit DW_LNCT_timestamp.
file_has_size: boolTrue if the file entries may have valid sizes.
Entries may still have a size of 0 even if this is set.
For version <= 4, this is ignored.
For version 5, this controls whether to emit DW_LNCT_size.
file_has_md5: boolTrue if the file entries have valid MD5 checksums.
For version <= 4, this is ignored.
For version 5, this controls whether to emit DW_LNCT_MD5.
file_has_source: boolTrue if the file entries have embedded source code.
For version <= 4, this is ignored.
For version 5, this controls whether to emit DW_LNCT_LLVM_source.
Implementations§
Source§impl LineProgram
impl LineProgram
Sourcepub fn from<R: Reader<Offset = usize>>(
from_program: IncompleteLineProgram<R>,
dwarf: &Dwarf<R>,
line_strings: &mut LineStringTable,
strings: &mut StringTable,
convert_address: &dyn Fn(u64) -> Option<Address>,
) -> ConvertResult<(LineProgram, Vec<FileId>)>
pub fn from<R: Reader<Offset = usize>>( from_program: IncompleteLineProgram<R>, dwarf: &Dwarf<R>, line_strings: &mut LineStringTable, strings: &mut StringTable, convert_address: &dyn Fn(u64) -> Option<Address>, ) -> ConvertResult<(LineProgram, Vec<FileId>)>
Create a line number program by reading the data from the given program.
Return the program and a mapping from file index to FileId.
Source§impl LineProgram
impl LineProgram
Sourcepub fn new(
encoding: Encoding,
line_encoding: LineEncoding,
working_dir: LineString,
source_dir: Option<LineString>,
source_file: LineString,
source_file_info: Option<FileInfo>,
) -> LineProgram
pub fn new( encoding: Encoding, line_encoding: LineEncoding, working_dir: LineString, source_dir: Option<LineString>, source_file: LineString, source_file_info: Option<FileInfo>, ) -> LineProgram
Create a new LineProgram.
working_dir defines the working directory of the compilation unit.
source_dir, source_file and source_file_info define the first
file entry. source_dir may be relative to working_dir, and may be
None if source_file is in working_dir. The first file entry
is usually the primary source file.
The standard specifies that working_dir should be the same as the
DW_AT_comp_dir attribute of the compilation unit DIE, and the
combination of source_dir and source_file should be the same
as the DW_AT_name attribute of the compilation unit DIE.
However, neither of these are enforced by this library.
§Panics
Panics if line_encoding.line_base > 0.
Panics if line_encoding.line_base + line_encoding.line_range <= 0.
Panics if working_dir, source_dir, or source_file are empty or
contain a null byte.
Sourcepub fn none() -> Self
pub fn none() -> Self
Create a new LineProgram with no fields set.
This can be used when the LineProgram will not be used.
You should not attempt to add files or line instructions to
this line program, or write it to the .debug_line section.
Sourcepub fn is_none(&self) -> bool
pub fn is_none(&self) -> bool
Return true if this line program was created with LineProgram::none().
Sourcepub fn address_size(&self) -> u8
pub fn address_size(&self) -> u8
Return the address size in bytes for this line program.
Sourcepub fn default_directory(&self) -> DirectoryId
pub fn default_directory(&self) -> DirectoryId
Return the id for the working directory of the compilation unit.
Sourcepub fn add_directory(&mut self, directory: LineString) -> DirectoryId
pub fn add_directory(&mut self, directory: LineString) -> DirectoryId
Add a directory entry and return its id.
If the directory already exists, then return the id of the existing entry.
If the path is relative, then the directory is located relative to the working directory of the compilation unit.
§Panics
Panics if directory is empty or contains a null byte.
Sourcepub fn get_directory(&self, id: DirectoryId) -> &LineString
pub fn get_directory(&self, id: DirectoryId) -> &LineString
Sourcepub fn add_file(
&mut self,
file: LineString,
directory: DirectoryId,
info: Option<FileInfo>,
) -> FileId
pub fn add_file( &mut self, file: LineString, directory: DirectoryId, info: Option<FileInfo>, ) -> FileId
Add a file entry and return its id.
If the file already exists, then return the id of the existing entry.
If the file path is relative, then the file is located relative to the directory. Otherwise the directory is meaningless, but it is still used as a key for file entries.
If info is None, then new entries are assigned
default information, and existing entries are unmodified.
If info is not None, then it is always assigned to the
entry, even if the entry already exists.
§Panics
Panics if ‘file’ is empty or contains a null byte.
Sourcepub fn files(&self) -> impl Iterator<Item = (FileId, &LineString, DirectoryId)>
pub fn files(&self) -> impl Iterator<Item = (FileId, &LineString, DirectoryId)>
Get an iterator for the files.
Sourcepub fn get_file(&self, id: FileId) -> (&LineString, DirectoryId)
pub fn get_file(&self, id: FileId) -> (&LineString, DirectoryId)
Sourcepub fn get_file_info(&self, id: FileId) -> &FileInfo
pub fn get_file_info(&self, id: FileId) -> &FileInfo
Sourcepub fn get_file_info_mut(&mut self, id: FileId) -> &mut FileInfo
pub fn get_file_info_mut(&mut self, id: FileId) -> &mut FileInfo
Sourcepub fn begin_sequence(&mut self, address: Option<Address>)
pub fn begin_sequence(&mut self, address: Option<Address>)
Sourcepub fn end_sequence(&mut self, address_offset: u64)
pub fn end_sequence(&mut self, address_offset: u64)
End the sequence, and reset the row to its default values.
Only the address_offset and op_index` fields of the current row are used.
§Panics
Panics if a sequence has not begun.
Sourcepub fn in_sequence(&self) -> bool
pub fn in_sequence(&self) -> bool
Return true if a sequence has begun.
Sourcepub fn generate_row(&mut self)
pub fn generate_row(&mut self)
Generates the line number information instructions for the current row.
After the instructions are generated, it sets discriminator to 0, and sets
basic_block, prologue_end, and epilogue_begin to false.
§Panics
Panics if a sequence has not begun. Panics if the address_offset decreases.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the line number program has no instructions.
Does not check the file or directory entries.
Sourcepub fn write<W: Writer>(
&self,
w: &mut DebugLine<W>,
encoding: Encoding,
debug_line_str_offsets: &DebugLineStrOffsets,
debug_str_offsets: &DebugStrOffsets,
) -> Result<DebugLineOffset>
pub fn write<W: Writer>( &self, w: &mut DebugLine<W>, encoding: Encoding, debug_line_str_offsets: &DebugLineStrOffsets, debug_str_offsets: &DebugStrOffsets, ) -> Result<DebugLineOffset>
Trait Implementations§
Source§impl Clone for LineProgram
impl Clone for LineProgram
Source§fn clone(&self) -> LineProgram
fn clone(&self) -> LineProgram
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more