_Unwind_RaiseException raises an exception, passing along the given exception object, which should have its exception_class and exception_cleanup fields set. The exception object has been allocated by the language-specific runtime, and has a language-specific format, exception that it must contain an _Unwind_Exception.
_Unwind_RaiseException does not return unless an error condition is found. If an error condition occurs, an _Unwind_Reason_Code is returnd:
The unwinder encountered the end of the stack during phase one without finding a handler. The unwind runtime will not have modified the stack. The C++ runtime will normally call uncaught_exception in this case.
The unwinder encountered an unexpected error during phase one, because of something like stack corruption. The unwind runtime will not have modified the stack. The C++ runtime will normally call terminate in this case.
The unwinder encountered an unexpected error during phase two. This is usually a throw, which will call terminate.