LLVM: llvm::EHStreamer Class Reference (original) (raw)

Emits exception handling directives. More...

#include "[CodeGen/AsmPrinter/EHStreamer.h](EHStreamer%5F8h%5Fsource.html)"

Classes
struct ActionEntry
Structure describing an entry in the actions table. More...
struct CallSiteEntry
Structure describing an entry in the call-site table. More...
struct CallSiteRange
Structure describing a contiguous range of call-sites which reside in the same procedure fragment. More...
struct PadRange
Structure holding a try-range and the associated landing pad. More...
Public Member Functions
EHStreamer (AsmPrinter *A)
~EHStreamer () override
Public Member Functions inherited from llvm::AsmPrinterHandler
virtual ~AsmPrinterHandler ()
Pin vtables to this file.
virtual void beginModule (Module *M)
virtual void endModule ()=0
Emit all sections that should come after the content.
virtual void beginFunction (const MachineFunction *MF)=0
Gather pre-function debug information.
virtual void markFunctionEnd ()
virtual void endFunction (const MachineFunction *MF)=0
Gather post-function debug information.
virtual void beginBasicBlockSection (const MachineBasicBlock &MBB)
Process the beginning of a new basic-block-section within a function.
virtual void endBasicBlockSection (const MachineBasicBlock &MBB)
Process the end of a basic-block-section within a function.
virtual void setSymbolSize (const MCSymbol *Sym, uint64_t Size)
For symbols that have a size designated (e.g.
virtual void beginInstruction (const MachineInstr *MI)
Process beginning of an instruction.
virtual void endInstruction ()
Process end of an instruction.
virtual void beginCodeAlignment (const MachineBasicBlock &MBB)
virtual void beginFunclet (const MachineBasicBlock &MBB, MCSymbol *Sym=nullptr)
Emit target-specific EH funclet machinery.
virtual void endFunclet ()
Static Public Member Functions
static bool callToNoUnwindFunction (const MachineInstr *MI)
Return ‘true’ if this is a call to a function marked ‘nounwind’.
Protected Member Functions
void computeActionsTable (const SmallVectorImpl< const LandingPadInfo * > &LandingPads, SmallVectorImpl< ActionEntry > &Actions, SmallVectorImpl< unsigned > &FirstActions)
Compute the actions table and gather the first action index for each landing pad site.
void computePadMap (const SmallVectorImpl< const LandingPadInfo * > &LandingPads, RangeMapType &PadMap)
virtual void computeCallSiteTable (SmallVectorImpl< CallSiteEntry > &CallSites, SmallVectorImpl< CallSiteRange > &CallSiteRanges, const SmallVectorImpl< const LandingPadInfo * > &LandingPads, const SmallVectorImpl< unsigned > &FirstActions)
Compute the call-site table and the call-site ranges.
MCSymbol * emitExceptionTable ()
Emit landing pads and actions.
virtual void emitTypeInfos (unsigned TTypeEncoding, MCSymbol *TTBaseLabel)
Static Protected Member Functions
static unsigned sharedTypeIDs (const LandingPadInfo *L, const LandingPadInfo *R)
How many leading type ids two landing pads have in common.
static bool isFilterEHSelector (int Selector)
static bool isCleanupEHSelector (int Selector)
static bool isCatchEHSelector (int Selector)

Emits exception handling directives.

Definition at line 30 of file EHStreamer.h.

RangeMapType

~EHStreamer()

EHStreamer::~EHStreamer ( ) overridedefault

callToNoUnwindFunction()

Return ‘true’ if this is a call to a function marked ‘nounwind’.

Return ‘false’ otherwise.

References MI.

Referenced by computeCallSiteTable().

computeActionsTable()

Compute the actions table and gather the first action index for each landing pad site.

Definition at line 51 of file EHStreamer.cpp.

References Asm, assert(), llvm::getSLEB128Size(), llvm::getULEB128Size(), isFilterEHSelector(), llvm::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::reserve(), sharedTypeIDs(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::LandingPadInfo::TypeIds.

Referenced by emitExceptionTable().

computeCallSiteTable()

Compute the call-site table and the call-site ranges.

Compute the call-site table.

The entry for an invoke has a try-range containing the call, a non-zero landing pad and an appropriate action. The entry for an ordinary call has a try-range containing the call and zero for the landing pad and the action. Calls marked 'nounwind' have no entry and must not be contained in the try-range of any entry - they form gaps in the table. Entries must be ordered by try-range address. CallSiteRanges vector is only populated for Itanium exception handling.

The entry for an invoke has a try-range containing the call, a non-zero landing pad, and an appropriate action. The entry for an ordinary call has a try-range containing the call and zero for the landing pad and the action. Calls marked 'nounwind' have no entry and must not be contained in the try-range of any entry - they form gaps in the table. Entries must be ordered by try-range address.

Call-sites are split into one or more call-site ranges associated with different sections of the function.

Reimplemented in llvm::WasmException.

Definition at line 229 of file EHStreamer.cpp.

References llvm::EHStreamer::CallSiteEntry::Action, llvm::AIX, Asm, assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::LandingPadInfo::BeginLabels, callToNoUnwindFunction(), computePadMap(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::EHStreamer::CallSiteEntry::EndLabel, llvm::LandingPadInfo::EndLabels, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::LandingPadInfo::LandingPadLabel, llvm::EHStreamer::CallSiteEntry::LPad, MBB, MI, P, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Range, llvm::SmallVectorImpl< T >::resize(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::SjLj.

Referenced by emitExceptionTable().

computePadMap()

Definition at line 186 of file EHStreamer.cpp.

References assert(), llvm::LandingPadInfo::BeginLabels, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::MCSymbol::isDefined(), N, P, and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by computeCallSiteTable().

emitExceptionTable()

MCSymbol * EHStreamer::emitExceptionTable ( ) protected

Emit landing pads and actions.

The general organization of the table is complex, but the basic concepts are easy. First there is a header which describes the location and organization of the three components that follow.

  1. The landing pad site information describes the range of code covered by the try. In our case it's an accumulation of the ranges covered by the invokes in the try. There is also a reference to the landing pad that handles the exception once processed. Finally an index into the actions table.
  2. The action table, in our case, is composed of pairs of type ids and next action offset. Starting with the action index from the landing pad site, each type Id is checked for a match to the current exception. If it matches then the exception and type id are passed on to the landing pad. Otherwise the next action is looked up. This chain is terminated with a next action of zero. If no type id is found the frame is unwound and handling continues.
  3. Type id table contains references to all the C++ typeinfo for all catches in the function. This tables is reversed indexed base 1.

Returns the starting symbol of an exception table.

The general organization of the table is complex, but the basic concepts are easy. First there is a header which describes the location and organization of the three components that follow.

  1. The landing pad site information describes the range of code covered by the try. In our case it's an accumulation of the ranges covered by the invokes in the try. There is also a reference to the landing pad that handles the exception once processed. Finally an index into the actions table.
  2. The action table, in our case, is composed of pairs of type IDs and next action offset. Starting with the action index from the landing pad site, each type ID is checked for a match to the current exception. If it matches then the exception and type id are passed on to the landing pad. Otherwise the next action is looked up. This chain is terminated with a next action of zero. If no type id is found then the frame is unwound and handling continues.
  3. Type ID table contains references to all the C++ typeinfo for all catches in the function. This tables is reverse indexed base 1.

Returns the starting symbol of an exception table.

Definition at line 379 of file EHStreamer.cpp.

References llvm::EHStreamer::CallSiteEntry::Action, Asm, assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::EHStreamer::CallSiteEntry::BeginLabel, llvm::EHStreamer::CallSiteRange::CallSiteBeginIdx, llvm::EHStreamer::CallSiteRange::CallSiteEndIdx, computeActionsTable(), computeCallSiteTable(), llvm::MCSymbolRefExpr::create(), llvm::MCBinaryExpr::createSub(), llvm::dwarf::DW_EH_PE_absptr, llvm::dwarf::DW_EH_PE_omit, llvm::dwarf::DW_EH_PE_pcrel, llvm::dwarf::DW_EH_PE_udata4, emitTypeInfos(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::EHStreamer::CallSiteEntry::EndLabel, llvm::EHStreamer::CallSiteRange::FragmentBeginLabel, llvm::MachineFunction::getFilterIds(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getLandingPads(), llvm::MCSymbol::getName(), llvm::getSLEB128Size(), llvm::MachineFunction::getTypeInfos(), llvm::getULEB128Size(), I, llvm::isUInt(), llvm::LandingPadInfo::LandingPadLabel, llvm::EHStreamer::CallSiteEntry::LPad, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::report_fatal_error(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::SjLj, llvm::sort(), and llvm::Wasm.

Referenced by llvm::AIXException::endFunction(), llvm::ARMException::endFunction(), llvm::DwarfCFIException::endFunction(), llvm::WasmException::endFunction(), and llvm::WinException::endFunction().

emitTypeInfos()

void EHStreamer::emitTypeInfos ( unsigned TTypeEncoding, MCSymbol * TTBaseLabel ) protectedvirtual

isCatchEHSelector()

bool llvm::EHStreamer::isCatchEHSelector ( int Selector) inlinestaticprotected

isCleanupEHSelector()

bool llvm::EHStreamer::isCleanupEHSelector ( int Selector) inlinestaticprotected

isFilterEHSelector()

bool llvm::EHStreamer::isFilterEHSelector ( int Selector) inlinestaticprotected

sharedTypeIDs()

Asm

Target of directive emission.

Definition at line 33 of file EHStreamer.h.

Referenced by llvm::DwarfCFIException::beginBasicBlockSection(), llvm::WinException::beginFunclet(), llvm::ARMException::beginFunction(), llvm::DwarfCFIException::beginFunction(), llvm::WinException::beginFunction(), computeActionsTable(), computeCallSiteTable(), llvm::WasmException::computeCallSiteTable(), EHStreamer(), emitExceptionTable(), emitTypeInfos(), llvm::DwarfCFIException::endBasicBlockSection(), llvm::WinException::endFunclet(), llvm::AIXException::endFunction(), llvm::ARMException::endFunction(), llvm::WasmException::endFunction(), llvm::WinException::endFunction(), llvm::DwarfCFIException::endModule(), llvm::WinException::endModule(), llvm::ARMException::markFunctionEnd(), llvm::WinException::markFunctionEnd(), and llvm::WinException::WinException().

MMI


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