LLDB mainline
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
lldb_private::LineTable Class Reference

A line table class. More...

#include "lldb/Symbol/LineTable.h"

Classes

struct  Entry
 
struct  EntrySearchInfo
 
class  LineSequenceImpl
 

Public Types

typedef lldb_private::RangeVector< lldb::addr_t, lldb::addr_t, 32 > FileAddressRanges
 
typedef RangeDataVector< lldb::addr_t, lldb::addr_t, lldb::addr_tFileRangeMap
 

Public Member Functions

 LineTable (CompileUnit *comp_unit)
 Construct with compile unit.
 
 LineTable (CompileUnit *comp_unit, std::vector< std::unique_ptr< LineSequence > > &&sequences)
 Construct with entries found in sequences.
 
 ~LineTable ()
 Destructor.
 
void InsertLineEntry (lldb::addr_t file_addr, uint32_t line, uint16_t column, uint16_t file_idx, bool is_start_of_statement, bool is_start_of_basic_block, bool is_prologue_end, bool is_epilogue_begin, bool is_terminal_entry)
 Adds a new line entry to this line table.
 
void InsertSequence (LineSequence *sequence)
 
void Dump (Stream *s, Target *target, Address::DumpStyle style, Address::DumpStyle fallback_style, bool show_line_ranges)
 Dump all line entries in this line table to the stream s.
 
void GetDescription (Stream *s, Target *target, lldb::DescriptionLevel level)
 
bool FindLineEntryByAddress (const Address &so_addr, LineEntry &line_entry, uint32_t *index_ptr=nullptr)
 Find a line entry that contains the section offset address so_addr.
 
uint32_t FindLineEntryIndexByFileIndex (uint32_t start_idx, uint32_t file_idx, const SourceLocationSpec &src_location_spec, LineEntry *line_entry_ptr)
 Find a line entry index that has a matching file index and source line number.
 
uint32_t FindLineEntryIndexByFileIndex (uint32_t start_idx, const std::vector< uint32_t > &file_idx, const SourceLocationSpec &src_location_spec, LineEntry *line_entry_ptr)
 
size_t FindLineEntriesForFileIndex (uint32_t file_idx, bool append, SymbolContextList &sc_list)
 
bool GetLineEntryAtIndex (uint32_t idx, LineEntry &line_entry)
 Get the line entry from the line table at index idx.
 
uint32_t GetSize () const
 Gets the size of the line table in number of line table entries.
 
size_t GetContiguousFileAddressRanges (FileAddressRanges &file_ranges, bool append)
 Gets all contiguous file address ranges for the entire line table.
 
LineTableLinkLineTable (const FileRangeMap &file_range_map)
 

Static Public Member Functions

static std::unique_ptr< LineSequenceCreateLineSequenceContainer ()
 
static void AppendLineEntryToSequence (LineSequence *sequence, lldb::addr_t file_addr, uint32_t line, uint16_t column, uint16_t file_idx, bool is_start_of_statement, bool is_start_of_basic_block, bool is_prologue_end, bool is_epilogue_begin, bool is_terminal_entry)
 

Protected Types

typedef std::vector< lldb_private::Section * > section_collection
 The collection type for the sections.
 
typedef std::vector< Entryentry_collection
 The collection type for the line entries.
 

Protected Member Functions

bool ConvertEntryAtIndexToLineEntry (uint32_t idx, LineEntry &line_entry)
 

Protected Attributes

CompileUnitm_comp_unit
 The compile unit that this line table belongs to.
 
entry_collection m_entries
 The collection of line entries in this line table.
 

Private Member Functions

 LineTable (const LineTable &)=delete
 
const LineTableoperator= (const LineTable &)=delete
 
template<typename T >
uint32_t FindLineEntryIndexByFileIndexImpl (uint32_t start_idx, T file_idx, const SourceLocationSpec &src_location_spec, LineEntry *line_entry_ptr, std::function< bool(T, uint16_t)> file_idx_matcher)
 

Detailed Description

A line table class.

Definition at line 40 of file LineTable.h.

Member Typedef Documentation

◆ entry_collection

typedef std::vector<Entry> lldb_private::LineTable::entry_collection
protected

The collection type for the line entries.

Definition at line 316 of file LineTable.h.

◆ FileAddressRanges

Definition at line 187 of file LineTable.h.

◆ FileRangeMap

Definition at line 205 of file LineTable.h.

◆ section_collection

The collection type for the sections.

Definition at line 314 of file LineTable.h.

Constructor & Destructor Documentation

◆ LineTable() [1/3]

LineTable::LineTable ( CompileUnit comp_unit)

Construct with compile unit.

Parameters
[in]comp_unitThe compile unit to which this line table belongs.

Definition at line 21 of file LineTable.cpp.

◆ LineTable() [2/3]

LineTable::LineTable ( CompileUnit comp_unit,
std::vector< std::unique_ptr< LineSequence > > &&  sequences 
)

Construct with entries found in sequences.

Parameters
[in]sequencesUnsorted list of line sequences.

Definition at line 24 of file LineTable.cpp.

References m_entries, and lldb_private::LineTable::LineSequenceImpl::m_entries.

◆ ~LineTable()

LineTable::~LineTable ( )
default

Destructor.

◆ LineTable() [3/3]

lldb_private::LineTable::LineTable ( const LineTable )
privatedelete

Member Function Documentation

◆ AppendLineEntryToSequence()

void LineTable::AppendLineEntryToSequence ( LineSequence sequence,
lldb::addr_t  file_addr,
uint32_t  line,
uint16_t  column,
uint16_t  file_idx,
bool  is_start_of_statement,
bool  is_start_of_basic_block,
bool  is_prologue_end,
bool  is_epilogue_begin,
bool  is_terminal_entry 
)
static

◆ ConvertEntryAtIndexToLineEntry()

bool LineTable::ConvertEntryAtIndexToLineEntry ( uint32_t  idx,
LineEntry line_entry 
)
protected

◆ CreateLineSequenceContainer()

std::unique_ptr< LineSequence > LineTable::CreateLineSequenceContainer ( )
static

◆ Dump()

void LineTable::Dump ( Stream s,
Target target,
Address::DumpStyle  style,
Address::DumpStyle  fallback_style,
bool  show_line_ranges 
)

Dump all line entries in this line table to the stream s.

Parameters
[in]sThe stream to which to dump the object description.
[in]styleThe display style for the address.
See also
Address::DumpStyle

Definition at line 356 of file LineTable.cpp.

References ConvertEntryAtIndexToLineEntry(), lldb_private::LineEntry::Dump(), lldb_private::Stream::EOL(), m_entries, and lldb_private::LineEntry::original_file_sp.

◆ FindLineEntriesForFileIndex()

size_t LineTable::FindLineEntriesForFileIndex ( uint32_t  file_idx,
bool  append,
SymbolContextList sc_list 
)

◆ FindLineEntryByAddress()

bool LineTable::FindLineEntryByAddress ( const Address so_addr,
LineEntry line_entry,
uint32_t *  index_ptr = nullptr 
)

Find a line entry that contains the section offset address so_addr.

Parameters
[in]so_addrA section offset address object containing the address we are searching for.
[out]line_entryA copy of the line entry that was found if true is returned, otherwise entry is left unmodified.
[out]index_ptrA pointer to a 32 bit integer that will get the actual line entry index if it is not nullptr.
Returns
Returns true if so_addr is contained in a line entry in this line table, false otherwise.

Definition at line 188 of file LineTable.cpp.

References ConvertEntryAtIndexToLineEntry(), lldb_private::LineTable::Entry::file_addr, lldb_private::Address::GetFileAddress(), lldb_private::Address::GetModule(), lldb_private::ModuleChild::GetModule(), LLDB_INVALID_ADDRESS, m_comp_unit, m_entries, and UINT32_MAX.

Referenced by CommandObjectThreadUntil::DoExecute(), lldb_private::Function::GetEndLineSourceInfo(), lldb_private::Function::GetPrologueByteSize(), lldb_private::Function::GetStartLineSourceInfo(), and lldb_private::ThreadPlanStepOverRange::ShouldStop().

◆ FindLineEntryIndexByFileIndex() [1/2]

uint32_t LineTable::FindLineEntryIndexByFileIndex ( uint32_t  start_idx,
const std::vector< uint32_t > &  file_idx,
const SourceLocationSpec src_location_spec,
LineEntry line_entry_ptr 
)

Definition at line 316 of file LineTable.cpp.

References lldb_private::LineTable::Entry::file_idx.

◆ FindLineEntryIndexByFileIndex() [2/2]

uint32_t LineTable::FindLineEntryIndexByFileIndex ( uint32_t  start_idx,
uint32_t  file_idx,
const SourceLocationSpec src_location_spec,
LineEntry line_entry_ptr 
)

Find a line entry index that has a matching file index and source line number.

Finds the next line entry that has a matching file_idx and source line number line starting at the start_idx entries into the line entry collection.

Parameters
[in]start_idxThe number of entries to skip when starting the search.
[out]file_idxThe file index to search for that should be found prior to calling this function using the following functions: CompileUnit::GetSupportFiles() FileSpecList::FindFileIndex (uint32_t, const FileSpec &) const
[in]src_location_specThe source location specifier to match.
[out]line_entry_ptrA pointer to a line entry object that will get a copy of the line entry if true is returned, otherwise line_entry is left untouched.
Returns
Returns true if a matching line entry is found in this line table, false otherwise.
See also
CompileUnit::GetSupportFiles()
FileSpecList::FindFileIndex (uint32_t, const FileSpec &) const

Definition at line 305 of file LineTable.cpp.

References lldb_private::LineTable::Entry::file_idx.

Referenced by lldb_private::CompileUnit::FindLineEntry(), and lldb_private::CompileUnit::ResolveSymbolContext().

◆ FindLineEntryIndexByFileIndexImpl()

template<typename T >
uint32_t lldb_private::LineTable::FindLineEntryIndexByFileIndexImpl ( uint32_t  start_idx,
file_idx,
const SourceLocationSpec src_location_spec,
LineEntry line_entry_ptr,
std::function< bool(T, uint16_t)>  file_idx_matcher 
)
inlineprivate

◆ GetContiguousFileAddressRanges()

size_t LineTable::GetContiguousFileAddressRanges ( FileAddressRanges file_ranges,
bool  append 
)

Gets all contiguous file address ranges for the entire line table.

Parameters
[out]file_rangesA collection of file address ranges that will be filled in by this function.
[out]appendIf true, then append to file_ranges, otherwise clear file_ranges prior to adding any ranges.
Returns
The number of address ranges added to file_ranges

Definition at line 381 of file LineTable.cpp.

References lldb_private::RangeVector< B, S, N >::Append(), lldb_private::RangeVector< B, S, N >::Clear(), lldb_private::Range< B, S >::Clear(), lldb_private::LineTable::Entry::file_addr, lldb_private::Range< B, S >::GetRangeBase(), lldb_private::RangeVector< B, S, N >::GetSize(), lldb_private::LineTable::Entry::is_terminal_entry, LLDB_INVALID_ADDRESS, m_entries, lldb_private::Range< B, S >::SetRangeBase(), and lldb_private::Range< B, S >::SetRangeEnd().

◆ GetDescription()

void LineTable::GetDescription ( Stream s,
Target target,
lldb::DescriptionLevel  level 
)

◆ GetLineEntryAtIndex()

bool LineTable::GetLineEntryAtIndex ( uint32_t  idx,
LineEntry line_entry 
)

Get the line entry from the line table at index idx.

Parameters
[in]idxAn index into the line table entry collection.
Returns
A valid line entry if idx is a valid index, or an invalid line entry if idx is not valid.
See also
LineTable::GetSize()
LineEntry::IsValid() const

Definition at line 179 of file LineTable.cpp.

References lldb_private::LineEntry::Clear(), ConvertEntryAtIndexToLineEntry(), and m_entries.

Referenced by lldb::SBCompileUnit::GetLineEntryAtIndex(), lldb_private::Function::GetPrologueByteSize(), and lldb_private::ThreadPlanStepOverRange::ShouldStop().

◆ GetSize()

uint32_t LineTable::GetSize ( ) const

Gets the size of the line table in number of line table entries.

Returns
The number of line table entries in this line table.

Definition at line 177 of file LineTable.cpp.

References m_entries.

Referenced by lldb::SBCompileUnit::GetNumLineEntries().

◆ InsertLineEntry()

void LineTable::InsertLineEntry ( lldb::addr_t  file_addr,
uint32_t  line,
uint16_t  column,
uint16_t  file_idx,
bool  is_start_of_statement,
bool  is_start_of_basic_block,
bool  is_prologue_end,
bool  is_epilogue_begin,
bool  is_terminal_entry 
)

Adds a new line entry to this line table.

All line entries are maintained in file address order.

Parameters
[in]line_entryA const reference to a new line_entry to add to this line table.
See also
Address::DumpStyle

Definition at line 39 of file LineTable.cpp.

References m_entries.

◆ InsertSequence()

void LineTable::InsertSequence ( LineSequence sequence)

◆ LinkLineTable()

LineTable * LineTable::LinkLineTable ( const FileRangeMap file_range_map)

◆ operator=()

const LineTable & lldb_private::LineTable::operator= ( const LineTable )
privatedelete

Member Data Documentation

◆ m_comp_unit

CompileUnit* lldb_private::LineTable::m_comp_unit
protected

The compile unit that this line table belongs to.

Definition at line 319 of file LineTable.h.

Referenced by ConvertEntryAtIndexToLineEntry(), FindLineEntriesForFileIndex(), FindLineEntryByAddress(), GetDescription(), and LinkLineTable().

◆ m_entries

entry_collection lldb_private::LineTable::m_entries
protected

The documentation for this class was generated from the following files: