DescriptionAdd support for exception handling using the PNaClSjLjEH LLVM pass
Extend libcxxabi with support for PNaCl's SJLJ
(setjmp()+longjmp()-based) C++ exception handling. The routines
assume that the program has been transformed using the PNaClSjLjEH
LLVM pass, which inserts setjmp() calls around function calls that
need to handle C++ exceptions.
As noted in the comments, this will coexist with non-SJLJ (zero cost)
exception handling within the same build of libcxxabi. When SJLJ is
enabled, pnacl-ld.py will rename
__pnacl_eh_sjlj_Unwind_RaiseException() to _Unwind_RaiseException() at
link time to enable cxa_pnacl_sjlj_exception.cpp.
This is similar to the eh_pnacl.cc file I added before to libsupc++.
Some of the differences are:
* Coding style: 4-space indentation, etc.
* Use libcxxabi's can_catch() instead of libsupc++'s __do_catch().
We no longer need the __is_pointer_p() check, because that's built
into can_catch(). So get_adjusted_ptr() becomes trivial and can be
inlined.
* Add casting between std::type_info and __shim_type_info, which are
equivalent.
* Add helpers: get_object_from_ue(), get_exception_header_from_ue().
libcxxabi tends to open code the implementation of these.
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3696
TEST=run_eh_throw_tests_sjlj_test from the NaCl build
Committed: https://gerrit.chromium.org/gerrit/gitweb?p=native_client/pnacl-libcxxabi.git;a=commit;h=bf2aa59
Patch Set 1 #Patch Set 2 : Retry upload #Patch Set 3 : Cleanup #Patch Set 4 : Fix line length #Patch Set 5 : Fix references to libsupc++ in comments #
Total comments: 4
Patch Set 6 : Fix handling of exceptions with virtual base classes #Messages
Total messages: 9 (0 generated)
|