class UnwindTable

Declaration

class UnwindTable { /* full declaration omitted */ };

Description

A class that contains all UnwindRow objects for an FDE or a single unwind row for a CIE. To unwind an address the rows, which are sorted by start address, can be searched to find the UnwindRow with the lowest starting address that is greater than or equal to the address that is being looked up.

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:319

Member Variables

private llvm::dwarf::UnwindTable::RowContainer Rows
private Optional<uint64_t> EndAddress
The end address when data is extracted from a FDE. This value will be invalid when a UnwindTable is extracted from a CIE.

Method Overview

  • public llvm::dwarf::UnwindTable::iterator begin()
  • public llvm::dwarf::UnwindTable::const_iterator begin() const
  • public static Expected<llvm::dwarf::UnwindTable> create(const llvm::dwarf::CIE * Cie)
  • public static Expected<llvm::dwarf::UnwindTable> create(const llvm::dwarf::FDE * Fde)
  • public void dump(llvm::raw_ostream & OS, const llvm::MCRegisterInfo * MRI, bool IsEH, unsigned int IndentLevel = 0) const
  • public llvm::dwarf::UnwindTable::iterator end()
  • public llvm::dwarf::UnwindTable::const_iterator end() const
  • private llvm::Error parseRows(const llvm::dwarf::CFIProgram & CFIP, llvm::dwarf::UnwindRow & CurrRow, const llvm::dwarf::RegisterLocations * InitialLocs)
  • public size_t size() const

Methods

llvm::dwarf::UnwindTable::iterator begin()

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:326

llvm::dwarf::UnwindTable::const_iterator begin()
    const

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:327

static Expected<llvm::dwarf::UnwindTable> create(
    const llvm::dwarf::CIE* Cie)

Description

Create an UnwindTable from a Common Information Entry (CIE).

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:360

Parameters

const llvm::dwarf::CIE* Cie
The Common Information Entry to extract the table from. The CFIProgram is retrieved from the \a Cie object and used to create the UnwindTable.

Returns

An error if the DWARF Call Frame Information opcodes have state machine errors, or a valid UnwindTable otherwise.

static Expected<llvm::dwarf::UnwindTable> create(
    const llvm::dwarf::FDE* Fde)

Description

Create an UnwindTable from a Frame Descriptor Entry (FDE).

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:370

Parameters

const llvm::dwarf::FDE* Fde
The Frame Descriptor Entry to extract the table from. The CFIProgram is retrieved from the \a Fde object and used to create the UnwindTable.

Returns

An error if the DWARF Call Frame Information opcodes have state machine errors, or a valid UnwindTable otherwise.

void dump(llvm::raw_ostream& OS,
          const llvm::MCRegisterInfo* MRI,
          bool IsEH,
          unsigned int IndentLevel = 0) const

Description

Dump the UnwindTable to the stream.

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:349

Parameters

llvm::raw_ostream& OS
the stream to use for output.
const llvm::MCRegisterInfo* MRI
register information that helps emit register names insteead of raw register numbers.
bool IsEH
true if the DWARF Call Frame Information is from .eh_frame instead of from .debug_frame. This is needed for register number conversion because some register numbers differ between the two sections for certain architectures like x86.
unsigned int IndentLevel = 0
specify the indent level as an integer. The UnwindRow will be output to the stream preceded by 2 * IndentLevel number of spaces.

llvm::dwarf::UnwindTable::iterator end()

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:328

llvm::dwarf::UnwindTable::const_iterator end()
    const

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:329

llvm::Error parseRows(
    const llvm::dwarf::CFIProgram& CFIP,
    llvm::dwarf::UnwindRow& CurrRow,
    const llvm::dwarf::RegisterLocations*
        InitialLocs)

Description

Parse the information in the CFIProgram and update the CurrRow object that the state machine describes. This is an internal implementation that emulates the state machine described in the DWARF Call Frame Information opcodes and will push CurrRow onto the Rows container when needed.

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:393

Parameters

const llvm::dwarf::CFIProgram& CFIP
the CFI program that contains the opcodes from a CIE or FDE.
llvm::dwarf::UnwindRow& CurrRow
the current row to modify while parsing the state machine.
const llvm::dwarf::RegisterLocations* InitialLocs
If non-NULL, we are parsing a FDE and this contains the initial register locations from the CIE. If NULL, then a CIE's opcodes are being parsed and this is not needed. This is used for the DW_CFA_restore and DW_CFA_restore_extended opcodes.

size_t size() const

Declared at: llvm/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h:325