<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>Exception Handling in LLVM</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="description" 
        content="Exception Handling in LLVM.">
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>

<body>

<div class="doc_title">Exception Handling in LLVM</div>

<table class="layout" style="width:100%">
  <tr class="layout">
    <td class="left">
<ul>
  <li><a href="#introduction">Introduction</a>
  <ol>
    <li><a href="#itanium">Itanium ABI Zero-cost Exception Handling</a></li>
    <li><a href="#sjlj">Setjmp/Longjmp Exception Handling</a></li>
    <li><a href="#overview">Overview</a></li>
  </ol></li>
  <li><a href="#codegen">LLVM Code Generation</a>
  <ol>
    <li><a href="#throw">Throw</a></li>
    <li><a href="#try_catch">Try/Catch</a></li>
    <li><a href="#cleanups">Cleanups</a></li>
    <li><a href="#throw_filters">Throw Filters</a></li>
    <li><a href="#restrictions">Restrictions</a></li>
  </ol></li>
  <li><a href="#format_common_intrinsics">Exception Handling Intrinsics</a>
  <ol>
  	<li><a href="#llvm_eh_exception"><tt>llvm.eh.exception</tt></a></li>
  	<li><a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a></li>
  	<li><a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a></li>
  	<li><a href="#llvm_eh_sjlj_setjmp"><tt>llvm.eh.sjlj.setjmp</tt></a></li>
  	<li><a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a></li>
  	<li><a href="#llvm_eh_sjlj_lsda"><tt>llvm.eh.sjlj.lsda</tt></a></li>
  </ol></li>
  <li><a href="#asm">Asm Table Formats</a>
  <ol>
    <li><a href="#unwind_tables">Exception Handling Frame</a></li>
    <li><a href="#exception_tables">Exception Tables</a></li>
  </ol></li>
  <li><a href="#todo">ToDo</a></li>
</ul>
</td>
</tr></table>

<div class="doc_author">
  <p>Written by <a href="mailto:jlaskey@mac.com">Jim Laskey</a></p>
</div>


<!-- *********************************************************************** -->
<div class="doc_section"><a name="introduction">Introduction</a></div> 
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This document is the central repository for all information pertaining to
   exception handling in LLVM.  It describes the format that LLVM exception
   handling information takes, which is useful for those interested in creating
   front-ends or dealing directly with the information.  Further, this document
   provides specific examples of what exception handling information is used for
   in C/C++.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="itanium">Itanium ABI Zero-cost Exception Handling</a>
</div>

<div class="doc_text">

<p>Exception handling for most programming languages is designed to recover from
   conditions that rarely occur during general use of an application.  To that
   end, exception handling should not interfere with the main flow of an
   application's algorithm by performing checkpointing tasks, such as saving the
   current pc or register state.</p>

<p>The Itanium ABI Exception Handling Specification defines a methodology for
   providing outlying data in the form of exception tables without inlining
   speculative exception handling code in the flow of an application's main
   algorithm.  Thus, the specification is said to add "zero-cost" to the normal
   execution of an application.</p>

<p>A more complete description of the Itanium ABI exception handling runtime
   support of can be found at
   <a href="http://www.codesourcery.com/cxx-abi/abi-eh.html">Itanium C++ ABI:
   Exception Handling</a>. A description of the exception frame format can be
   found at
   <a href="http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html">Exception
   Frames</a>, with details of the DWARF 3 specification at
   <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3 Standard</a>.
   A description for the C++ exception table formats can be found at
   <a href="http://www.codesourcery.com/cxx-abi/exceptions.pdf">Exception Handling
   Tables</a>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="sjlj">Setjmp/Longjmp Exception Handling</a>
</div>

<div class="doc_text">

<p>Setjmp/Longjmp (SJLJ) based exception handling uses LLVM intrinsics
   <a href="#llvm_eh_sjlj_setjmp"><tt>llvm.eh.sjlj.setjmp</tt></a> and
   <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a> to
   handle control flow for exception handling.</p>

<p>For each function which does exception processing, be it try/catch blocks
   or cleanups, that function registers itself on a global frame list. When
   exceptions are being unwound, the runtime uses this list to identify which
   functions need processing.<p>

<p>Landing pad selection is encoded in the call site entry of the function
   context. The runtime returns to the function via
   <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a>, where
   a switch table transfers control to the appropriate landing pad based on
   the index stored in the function context.</p>

<p>In contrast to DWARF exception handling, which encodes exception regions
   and frame information in out-of-line tables, SJLJ exception handling
   builds and removes the unwind frame context at runtime. This results in
   faster exception handling at the expense of slower execution when no
   exceptions are thrown. As exceptions are, by their nature, intended for
   uncommon code paths, DWARF exception handling is generally preferred to
   SJLJ.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="overview">Overview</a>
</div>

<div class="doc_text">

<p>When an exception is thrown in LLVM code, the runtime does its best to find a
   handler suited to processing the circumstance.</p>

<p>The runtime first attempts to find an <i>exception frame</i> corresponding to
   the function where the exception was thrown.  If the programming language
   (e.g. C++) supports exception handling, the exception frame contains a
   reference to an exception table describing how to process the exception.  If
   the language (e.g. C) does not support exception handling, or if the
   exception needs to be forwarded to a prior activation, the exception frame
   contains information about how to unwind the current activation and restore
   the state of the prior activation.  This process is repeated until the
   exception is handled.  If the exception is not handled and no activations
   remain, then the application is terminated with an appropriate error
   message.</p>

<p>Because different programming languages have different behaviors when
   handling exceptions, the exception handling ABI provides a mechanism for
   supplying <i>personalities.</i> An exception handling personality is defined
   by way of a <i>personality function</i> (e.g. <tt>__gxx_personality_v0</tt>
   in C++), which receives the context of the exception, an <i>exception
   structure</i> containing the exception object type and value, and a reference
   to the exception table for the current function.  The personality function
   for the current compile unit is specified in a <i>common exception
   frame</i>.</p>

<p>The organization of an exception table is language dependent.  For C++, an
   exception table is organized as a series of code ranges defining what to do
   if an exception occurs in that range.  Typically, the information associated
   with a range defines which types of exception objects (using C++ <i>type
   info</i>) that are handled in that range, and an associated action that
   should take place.  Actions typically pass control to a <i>landing
   pad</i>.</p>

<p>A landing pad corresponds to the code found in the <i>catch</i> portion of
   a <i>try</i>/<i>catch</i> sequence.  When execution resumes at a landing
   pad, it receives the exception structure and a selector corresponding to
   the <i>type</i> of exception thrown.  The selector is then used to determine
   which <i>catch</i> should actually process the exception.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_section">
  <a name="codegen">LLVM Code Generation</a>
</div>

<div class="doc_text">

<p>At the time of this writing, only C++ exception handling support is available
   in LLVM.  So the remainder of this document will be somewhat C++-centric.</p>

<p>From the C++ developers perspective, exceptions are defined in terms of the
   <tt>throw</tt> and <tt>try</tt>/<tt>catch</tt> statements.  In this section
   we will describe the implementation of LLVM exception handling in terms of
   C++ examples.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="throw">Throw</a>
</div>

<div class="doc_text">

<p>Languages that support exception handling typically provide a <tt>throw</tt>
   operation to initiate the exception process.  Internally, a throw operation
   breaks down into two steps.  First, a request is made to allocate exception
   space for an exception structure.  This structure needs to survive beyond the
   current activation.  This structure will contain the type and value of the
   object being thrown.  Second, a call is made to the runtime to raise the
   exception, passing the exception structure as an argument.</p>

<p>In C++, the allocation of the exception structure is done by
   the <tt>__cxa_allocate_exception</tt> runtime function.  The exception
   raising is handled by <tt>__cxa_throw</tt>.  The type of the exception is
   represented using a C++ RTTI structure.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="try_catch">Try/Catch</a>
</div>

<div class="doc_text">

<p>A call within the scope of a <i>try</i> statement can potentially raise an
   exception.  In those circumstances, the LLVM C++ front-end replaces the call
   with an <tt>invoke</tt> instruction.  Unlike a call, the <tt>invoke</tt> has
   two potential continuation points: where to continue when the call succeeds
   as per normal; and where to continue if the call raises an exception, either
   by a throw or the unwinding of a throw.</p>

<p>The term used to define a the place where an <tt>invoke</tt> continues after
   an exception is called a <i>landing pad</i>.  LLVM landing pads are
   conceptually alternative function entry points where an exception structure
   reference and a type info index are passed in as arguments.  The landing pad
   saves the exception structure reference and then proceeds to select the catch
   block that corresponds to the type info of the exception object.</p>

<p>Two LLVM intrinsic functions are used to convey information about the landing
   pad to the back end.</p>

<ol>
  <li><a href="#llvm_eh_exception"><tt>llvm.eh.exception</tt></a> takes no
      arguments and returns a pointer to the exception structure.  This only
      returns a sensible value if called after an <tt>invoke</tt> has branched
      to a landing pad.  Due to code generation limitations, it must currently
      be called in the landing pad itself.</li>

  <li><a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> takes a minimum
      of three arguments.  The first argument is the reference to the exception
      structure. The second argument is a reference to the personality function
      to be used for this <tt>try</tt>/<tt>catch</tt> sequence. Each of the
      remaining arguments is either a reference to the type info for
      a <tt>catch</tt> statement, a <a href="#throw_filters">filter</a>
      expression, or the number zero (<tt>0</tt>) representing
      a <a href="#cleanups">cleanup</a>.  The exception is tested against the
      arguments sequentially from first to last.  The result of
      the <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> is a
      positive number if the exception matched a type info, a negative number if
      it matched a filter, and zero if it matched a cleanup.  If nothing is
      matched, the behaviour of the program
      is <a href="#restrictions">undefined</a>.  This only returns a sensible
      value if called after an <tt>invoke</tt> has branched to a landing pad.
      Due to codegen limitations, it must currently be called in the landing pad
      itself.  If a type info matched, then the selector value is the index of
      the type info in the exception table, which can be obtained using the
      <a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a>
      intrinsic.</li>
</ol>

<p>Once the landing pad has the type info selector, the code branches to the
   code for the first catch.  The catch then checks the value of the type info
   selector against the index of type info for that catch.  Since the type info
   index is not known until all the type info have been gathered in the backend,
   the catch code will call the
   <a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a> intrinsic
   to determine the index for a given type info.  If the catch fails to match
   the selector then control is passed on to the next catch. Note: Since the
   landing pad will not be used if there is no match in the list of type info on
   the call to <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>, then
   neither the last catch nor <i>catch all</i> need to perform the check
   against the selector.</p>

<p>Finally, the entry and exit of catch code is bracketed with calls
   to <tt>__cxa_begin_catch</tt> and <tt>__cxa_end_catch</tt>.</p>

<ul>
  <li><tt>__cxa_begin_catch</tt> takes a exception structure reference as an
      argument and returns the value of the exception object.</li>

  <li><tt>__cxa_end_catch</tt> takes a exception structure reference as an
      argument. This function clears the exception from the exception space.
      Note: a rethrow from within the catch may replace this call with
      a <tt>__cxa_rethrow</tt>.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="cleanups">Cleanups</a>
</div>

<div class="doc_text">

<p>To handle destructors and cleanups in <tt>try</tt> code, control may not run
   directly from a landing pad to the first catch.  Control may actually flow
   from the landing pad to clean up code and then to the first catch.  Since the
   required clean up for each <tt>invoke</tt> in a <tt>try</tt> may be different
   (e.g. intervening constructor), there may be several landing pads for a given
   try.  If cleanups need to be run, an <tt>i32 0</tt> should be passed as the
   last <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> argument.
   However, when using DWARF exception handling with C++, a <tt>i8* null</tt>
   <a href="#restrictions">must</a> be passed instead.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="throw_filters">Throw Filters</a>
</div>

<div class="doc_text">

<p>C++ allows the specification of which exception types can be thrown from a
   function.  To represent this a top level landing pad may exist to filter out
   invalid types.  To express this in LLVM code the landing pad will
   call <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>.  The
   arguments are a reference to the exception structure, a reference to the
   personality function, the length of the filter expression (the number of type
   infos plus one), followed by the type infos themselves.
   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> will return a
   negative value if the exception does not match any of the type infos.  If no
   match is found then a call to <tt>__cxa_call_unexpected</tt> should be made,
   otherwise <tt>_Unwind_Resume</tt>.  Each of these functions requires a
   reference to the exception structure.  Note that the most general form of an
   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> call can contain
   any number of type infos, filter expressions and cleanups (though having more
   than one cleanup is pointless).  The LLVM C++ front-end can generate such
   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> calls due to
   inlining creating nested exception handling scopes.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="restrictions">Restrictions</a>
</div>

<div class="doc_text">

<p>The semantics of the invoke instruction require that any exception that
   unwinds through an invoke call should result in a branch to the invoke's
   unwind label.  However such a branch will only happen if the
   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> matches. Thus in
   order to ensure correct operation, the front-end must only generate
   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> calls that are
   guaranteed to always match whatever exception unwinds through the invoke.
   For most languages it is enough to pass zero, indicating the presence of
   a <a href="#cleanups">cleanup</a>, as the
   last <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> argument.
   However for C++ this is not sufficient, because the C++ personality function
   will terminate the program if it detects that unwinding the exception only
   results in matches with cleanups.  For C++ a <tt>null i8*</tt> should be
   passed as the last <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>
   argument instead.  This is interpreted as a catch-all by the C++ personality
   function, and will always match.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_section">
  <a name="format_common_intrinsics">Exception Handling Intrinsics</a>
</div>

<div class="doc_text">

<p>LLVM uses several intrinsic functions (name prefixed with "llvm.eh") to
   provide exception handling information at various points in generated
   code.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="llvm_eh_exception">llvm.eh.exception</a>
</div>

<div class="doc_text">

<pre>
  i8* %<a href="#llvm_eh_exception">llvm.eh.exception</a>( )
</pre>

<p>This intrinsic returns a pointer to the exception structure.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="llvm_eh_selector">llvm.eh.selector</a>
</div>

<div class="doc_text">

<pre>
  i32 %<a href="#llvm_eh_selector">llvm.eh.selector.i32</a>(i8*, i8*, i8*, ...)
  i64 %<a href="#llvm_eh_selector">llvm.eh.selector.i64</a>(i8*, i8*, i8*, ...)
</pre>

<p>This intrinsic is used to compare the exception with the given type infos,
   filters and cleanups.</p>

<p><a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> takes a minimum of
   three arguments.  The first argument is the reference to the exception
   structure. The second argument is a reference to the personality function to
   be used for this try catch sequence. Each of the remaining arguments is
   either a reference to the type info for a catch statement,
   a <a href="#throw_filters">filter</a> expression, or the number zero
   representing a <a href="#cleanups">cleanup</a>.  The exception is tested
   against the arguments sequentially from first to last.  The result of
   the <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> is a positive
   number if the exception matched a type info, a negative number if it matched
   a filter, and zero if it matched a cleanup.  If nothing is matched, the
   behaviour of the program is <a href="#restrictions">undefined</a>.  If a type
   info matched then the selector value is the index of the type info in the
   exception table, which can be obtained using the
   <a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a> intrinsic.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="llvm_eh_typeid_for">llvm.eh.typeid.for</a>
</div>

<div class="doc_text">

<pre>
  i32 %<a href="#llvm_eh_typeid_for">llvm.eh.typeid.for.i32</a>(i8*)
  i64 %<a href="#llvm_eh_typeid_for">llvm.eh.typeid.for.i64</a>(i8*)
</pre>

<p>This intrinsic returns the type info index in the exception table of the
   current function.  This value can be used to compare against the result
   of <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>.  The single
   argument is a reference to a type info.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="llvm_eh_sjlj_setjmp">llvm.eh.sjlj.setjmp</a>
</div>

<div class="doc_text">

<pre>
  i32 %<a href="#llvm_eh_sjlj_setjmp">llvm.eh.sjlj.setjmp</a>(i8*)
</pre>

<p>The SJLJ exception handling uses this intrinsic to force register saving for
   the current function and to store the address of the following instruction
   for use as a destination address by <a href="#llvm_eh_sjlj_longjmp">
   <tt>llvm.eh.sjlj.longjmp</tt></a>. The buffer format and the overall
   functioning of this intrinsic is compatible with the GCC
   <tt>__builtin_setjmp</tt> implementation, allowing code built with the
   two compilers to interoperate.</p>

<p>The single parameter is a pointer to a five word buffer in which the calling
   context is saved. The front end places the frame pointer in the first word,
   and the target implementation of this intrinsic should place the destination
   address for a
   <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a> in the
   second word. The following three words are available for use in a
   target-specific manner.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="llvm_eh_sjlj_lsda">llvm.eh.sjlj.lsda</a>
</div>

<div class="doc_text">

<pre>
  i8* %<a href="#llvm_eh_sjlj_lsda">llvm.eh.sjlj.lsda</a>( )
</pre>

<p>Used for SJLJ based exception handling, the <a href="#llvm_eh_sjlj_lsda">
   <tt>llvm.eh.sjlj.lsda</tt></a> intrinsic returns the address of the Language
   Specific Data Area (LSDA) for the current function. The SJLJ front-end code
   stores this address in the exception handling function context for use by the
   runtime.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_section">
  <a name="asm">Asm Table Formats</a>
</div>

<div class="doc_text">

<p>There are two tables that are used by the exception handling runtime to
   determine which actions should take place when an exception is thrown.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="unwind_tables">Exception Handling Frame</a>
</div>

<div class="doc_text">

<p>An exception handling frame <tt>eh_frame</tt> is very similar to the unwind
   frame used by dwarf debug info.  The frame contains all the information
   necessary to tear down the current frame and restore the state of the prior
   frame.  There is an exception handling frame for each function in a compile
   unit, plus a common exception handling frame that defines information common
   to all functions in the unit.</p>

<p>Todo - Table details here.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="exception_tables">Exception Tables</a>
</div>

<div class="doc_text">

<p>An exception table contains information about what actions to take when an
   exception is thrown in a particular part of a function's code.  There is one
   exception table per function except leaf routines and functions that have
   only calls to non-throwing functions will not need an exception table.</p>

<p>Todo - Table details here.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_section">
  <a name="todo">ToDo</a>
</div>

<div class="doc_text">

<ol>

  <li>Testing/Testing/Testing.</li>

</ol>

</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
