[cfe-dev] [PATCH 2/3] Fixes incorrect #ifs for SJ/LJ exceptions

Dan Albert danalbert at google.com
Tue Apr 22 12:59:59 PDT 2014


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> 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
> CodeSourcery / Mentor Embedded
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140422/977d4d65/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fixes-incorrect-ifs-for-SJ-LJ-exceptions.patch
Type: text/x-patch
Size: 2705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140422/977d4d65/attachment.bin>


More information about the cfe-dev mailing list