diff --git a/abi-eh.html b/abi-eh.html index d7ad49f..b7e8d7f 100644 --- a/abi-eh.html +++ b/abi-eh.html @@ -2077,6 +2077,52 @@
+Vaguely, the process of throwing an exception consists of +three independent parts: +
+Sometimes it's desirable to do p.1 and p.2 with leaving p.3 for later: this is what
+std::exception_ptr
does.
+To better support such use cases implementors of the ABI are encouraged to provide a
+__cxa_init_primary_exception
function, which implements p.2.
+
+
+The arguments are:
+
+ void* __cxa_init_primary_exception (void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) );
+
+
+
std::type_info
pointer,
+ giving the static type of the throw argument
+ as a std::type_info
pointer,
+ used for matching potential catch sites to the thrown exception.
++
__cxa_throw
,__cxa_init_primary_exception
is expected to be used as a subroutine of __cxa_throw
.
+
+
+
+Collaboration between __cxa_init_primary_exception()
and
+whichever way std::rethrow_exception
is implemented is necessary to handle the p.3 (deferred unwinding).
+
+