Lines Matching +full:docs +full:- +full:libunwind +full:- +full:html
14 front-ends or dealing directly with the information. Further, this document
18 Itanium ABI Zero-cost Exception Handling
19 ----------------------------------------
30 algorithm. Thus, the specification is said to add "zero-cost" to the normal
35 <http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html>`_. A description of the
37 <http://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html>`_,
41 <http://itanium-cxx-abi.github.io/cxx-abi/exceptions.pdf>`_.
44 ---------------------------------
50 For each function which does exception processing --- be it ``try``/``catch``
51 blocks or cleanups --- that function registers itself on a global frame
61 frame information in out-of-line tables, SJLJ exception handling builds and
68 -----------------------------------
76 --------
122 -----
141 ---------
144 exception. In those circumstances, the LLVM C++ front-end replaces the call with
171 - ``catch <type> @ExcType``
173 - This clause means that the landingpad block should be entered if the
178 - If ``@ExcType`` is ``null``, any exception matches, so the landingpad
179 should always be entered. This is used for C++ catch-all blocks ("``catch
182 - When this clause is matched, the selector value will be equal to the value
186 - ``filter <type> [<type> @ExcType1, ..., <type> @ExcTypeN]``
188 - This clause means that the landingpad should be entered if the exception
192 - C++ front-ends use this to implement the C++ exception specifications, such as
196 - When this clause is matched, the selector value will be negative.
198 - The array argument to ``filter`` may be empty; for example, "``[0 x i8**]
204 - ``cleanup``
206 - This clause means that the landingpad should always be entered.
208 - C++ front-ends use this for calling objects' destructors.
210 - When this clause is matched, the selector value will be zero.
212 - The runtime may treat "``cleanup``" differently from "``catch <type>
216 ``std::terminate()``, but it is implementation-defined whether the runtime
222 implement this by searching for a matching non-``cleanup`` clause, and
248 was not re-thrown by throw.
256 --------
270 languages describe different high-level semantics for these situations: for
280 -------------
292 having more than one cleanup is pointless). The LLVM C++ front-end can generate
297 ------------
300 call frame's language-specific personality function. Not all unwinders guarantee
313 the `resume instruction <LangRef.html#i_resume>`_ if none of the conditions
326 ----------------------
328 .. code-block:: llvm
337 Uses of this intrinsic are generated by the C++ front-end.
342 ----------------------------
344 .. code-block:: text
354 ---------------
365 .. code-block:: text
377 context is saved. The format and contents of the buffer are target-specific.
389 .. code-block:: llvm
402 .. code-block:: llvm
408 function. The SJLJ front-end code stores this address in the exception handling
414 .. code-block:: llvm
430 ------------------------
439 The format of this call frame information (CFI) is often platform-dependent,
442 since 32-bit x86. LLVM will emit whatever information is required by the
446 ----------------
450 referred to as the language-specific data area (LSDA). The format of the LSDA
454 that have calls only to non-throwing functions. They do not need an exception
463 ---------------------------------
523 -----------------------
540 ------------------------------------
553 they must be the first non-phi instruction of a basic block that may be the
585 .. code-block:: c
604 .. code-block:: text
649 -----------------------
668 .. code-block:: c
681 .. code-block:: text
716 .. _wineh-constraints:
719 -----------------------
732 ``catchpad``\ s are appropriate for the in-flight exception and it unwinds
753 of the pad that an unwind edge enters must be the most-recently-entered
754 not-yet-exited pad (after exiting from any pads that the unwind edge exits),
756 funclets at run-time always corresponds to some path in the funclet pad tree
777 ensures that EH lowering can construct "try regions" with a tree-like
778 structure, which funclet-based personalities may require.
790 directives <https://sourceware.org/binutils/docs/as/CFI-directives.html>`_
808 is used in GCC unwinder (`libgcc <https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html>`_),
809 but not in LLVM unwinder (`libunwind <https://clang.llvm.org/docs/Toolchain.html#unwind-library>`_).
815 `libunwind <https://clang.llvm.org/docs/Toolchain.html#unwind-library>`_
816 to see what have to be done there. For ``libunwind``, you have to do the following
822 * ``include/libunwind.h``