[cfe-dev] [PATCH 2/3] Fixes incorrect #ifs for SJ/LJ exceptions
Jonathan Roelofs
jonathan at codesourcery.com
Tue Apr 22 13:24:35 PDT 2014
LGTM
Jon
On 4/22/14, 12:59 PM, Dan Albert wrote:
> Sorry for the delay. I've attached a revised patch.
>
> I opted to switch unwind.h to the more generic definition as well since that
> seems cleaner. Let me know if there's a good reason to do otherwise.
>
> - Dan
>
>
> On Wed, Apr 16, 2014 at 11:18 AM, Jonathan Roelofs <jonathan at codesourcery.com
> <mailto:jonathan at codesourcery.com>> wrote:
>
> Dan,
>
> I think that it would be a good idea to keep libc++abi from depending on
> this particular unwinder, because not all targets are going to use it, and
> they really are two separate components. Also, I've read rumors that folks
> want to move said unwinder over to the compiler-rt repository...
>
> Therefore the guards in cxa_exception.cpp and cxa_personality.cpp should be
> using __USING_SJLJ_EXCEPTIONS__ instead (which is defined by the compiler
> when setjmp-longjmp exceptions are being used). In unwind.h, to me it still
> makes sense to use _LIBUNWIND_BUILD_SJLJ_APIS, but its definition needs to
> be pulled in from config.h.
>
> Jon
>
>
> On 4/16/14, 9:29 AM, Dan Albert wrote:
>
> The was working because, given __APPLE__, _LIBUNWIND_BUILD_SJLJ_APIS was
> set to
> __arm__, but other ARM targets not using SJ/LJ will fail to compile.
> ---
> include/unwind.h | 2 +-
> src/cxa_exception.cpp | 6 +++---
> src/cxa_personality.cpp | 2 +-
> 3 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/include/unwind.h b/include/unwind.h
> index c5acd93..50e2d4b 100644
> --- a/include/unwind.h
> +++ b/include/unwind.h
> @@ -83,7 +83,7 @@ extern "C" {
> //
> // The following are the base functions documented by the C++ ABI
> //
> -#if __arm__
> +#if _LIBUNWIND_BUILD_SJLJ_APIS
> extern _Unwind_Reason_Code
> _Unwind_SjLj_RaiseException(__struct _Unwind_Exception
> *exception_object);
> extern void _Unwind_SjLj_Resume(struct _Unwind_Exception
> *exception_object);
> diff --git a/src/cxa_exception.cpp b/src/cxa_exception.cpp
> index 744dddd..787d8a8 100644
> --- a/src/cxa_exception.cpp
> +++ b/src/cxa_exception.cpp
> @@ -232,7 +232,7 @@ __cxa_throw(void* thrown_object, std::type_info*
> tinfo, void (*dest)(void*))
> globals->uncaughtExceptions += 1; // Not atomically, since
> globals are thread-local
>
> exception_header->__unwindHeader.exception_cleanup =
> exception_cleanup_func;
> -#if __arm__
> +#if _LIBUNWIND_BUILD_SJLJ_APIS
> _Unwind_SjLj_RaiseException(&__exception_header->__unwindHeader);
> #else
> _Unwind_RaiseException(&__exception_header->__unwindHeader);
> @@ -465,7 +465,7 @@ __cxa_rethrow()
> // nothing
> globals->caughtExceptions = 0;
> }
> -#if __arm__
> +#if _LIBUNWIND_BUILD_SJLJ_APIS
> _Unwind_SjLj_RaiseException(&__exception_header->__unwindHeader);
> #else
> _Unwind_RaiseException(&__exception_header->__unwindHeader);
> @@ -594,7 +594,7 @@ __cxa_rethrow_primary___exception(void* thrown_object)
>
> setDependentExceptionClass(&__dep_exception_header->__unwindHeader);
> __cxa_get_globals()->__uncaughtExceptions += 1;
> dep_exception_header->__unwindHeader.exception_cleanup =
> dependent_exception_cleanup;
> -#if __arm__
> +#if _LIBUNWIND_BUILD_SJLJ_APIS
>
> _Unwind_SjLj_RaiseException(&__dep_exception_header->__unwindHeader);
> #else
> _Unwind_RaiseException(&dep___exception_header->__unwindHeader);
> diff --git a/src/cxa_personality.cpp b/src/cxa_personality.cpp
> index 81104b8..32a3127 100644
> --- a/src/cxa_personality.cpp
> +++ b/src/cxa_personality.cpp
> @@ -838,7 +838,7 @@ _UA_CLEANUP_PHASE
> */
>
> _Unwind_Reason_Code
> -#if __arm__
> +#if _LIBUNWIND_BUILD_SJLJ_APIS
> __gxx_personality_sj0
> #else
> __gxx_personality_v0
>
>
> --
> Jon Roelofs
> jonathan at codesourcery.com <mailto:jonathan at codesourcery.com>
> CodeSourcery / Mentor Embedded
>
>
--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded
More information about the cfe-dev
mailing list