Hi Jonathan and Nick, I was trying to build libc++abi from repository but failed. May you provide some instruction to cross compile libc++abi for ARM Linux? Thanks.
Logan On Tue, Apr 15, 2014 at 5:23 AM, Jonathan Roelofs <[email protected] > wrote: > > > On 4/14/14, 1:51 PM, Nick Kledzik wrote: > >> >> On Apr 13, 2014, at 3:16 AM, Logan Chien <[email protected]> >> wrote: >> >> Hi, >>> >>> I have worked on ARM EHABI zero-cost exception handling for libc++abi. >>> >>> With the attached patch, I can compile and run all libc++abi unittests >>> on ARM Linux. >>> >>> Is it OK to commit? Thanks. >>> >>> >> diff --git a/include/unwind.h b/include/unwind.h >>> index c5acd93..e57d756 100644 >>> --- a/include/unwind.h >>> +++ b/include/unwind.h >>> @@ -23,8 +23,24 @@ >>> #define LIBUNWIND_UNAVAIL >>> #endif >>> >>> +#if !defined(LIBCXXABI_SJLJ) >>> +# if defined(__arm__) >>> +# if defined(__APPLE__) >>> +# define LIBCXXABI_ARM_EHABI 0 >>> +# define LIBCXXABI_SJLJ 1 >>> +# else >>> +# define LIBCXXABI_ARM_EHABI 1 >>> +# define LIBCXXABI_SJLJ 0 >>> +# endif >>> +# else >>> +# define LIBCXXABI_ARM_EHABI 0 >>> +# define LIBCXXABI_SJLJ 0 >>> +# endif >>> +#endif >>> >> I recently found that the compiler has a built-in define >> __USING_SJLJ_EXCEPTIONS__ that is set when compiling for setjump/longjump >> based exceptions. Is there are similar built-in for ARM EHABI? If so, we >> can set these up without testing for __arm__ or __APPLE__. In fact, >> LIBCXXABI_SJLJ can be replaced with __USING_SJLJ_EXCEPTIONS__. And perhaps >> LIBCXXABI_ARM_EHABI can be replaced with some built-in? >> > __ARM_EABI_UNWINDER__ perhaps? I'm not exactly sure what the semantics of > it are, and I don't see a definition for it in Clang. In libgcc's unwinder > it's defined in one of the arm config files. I suppose that makes it not a > builtin then.... > >> >> diff --git a/src/cxa_exception.cpp b/src/cxa_exception.cpp >>> index 744dddd..27a55c5 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 LIBCXXABI_SJLJ >>> _Unwind_SjLj_RaiseException(&exception_header->unwindHeader); >>> #else >>> >> I like the conditional test for SJLJ instead of the processor, but as I >> recently discovered, most of the existing __arm__ tests can be changed to >> __USING_SJLJ_EXCEPTIONS__ tests. >> >> -Nick >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> > -- > Jon Roelofs > [email protected] > CodeSourcery / Mentor Embedded > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
