[PATCH][cxxabi] ARM EHABI zero-cost exception handling for libc++abi

Jonathan Roelofs jonathan at codesourcery.com
Mon Apr 14 08:47:05 PDT 2014


Logan,

On 4/13/14, 9:37 AM, Logan Chien wrote:
> Hi Jonathan,
>
> Thanks for your reply.
>
>  >  *  One thing that immediately jumps out at me as missing from this
>  >     implementation are the __aeabi_unwind_pr{0,1,2} functions, which
>  >     are necessary to unwind more kinds of frames that the backend spits out.
>
> Yes.  I have only implemented the personality function in this patch.  Thus, we
> still have to link with libgcc at the moment.

Is it going to work having half of the unwinder come from libgcc and the other 
half come from libcxxabi+libcxx? I was under the impression that support had to 
be all or nothing...

 > AFAICT, following important functions are missing:
>
> - __aeabi_unwind_pr{0,1,2}()
> - _Unwind_RaiseException(), _Unwind_GetLanguageSpecificData(),
> _Unwind_GetRegionStart()
> - _Unwind_VRS_{Get,Set}()
> - __gnu_unwind_frame()
If these two implementations can be merged, then we'll get all but the last one 
for 'free'. I believe the last one is an implementation detail of libgcc, and is 
not part of the unwinder's public api, so I don't think it needs implementing.

To reduce my own merge anxiety, I'd like to get Nico's patches upstreamed too. 
I'll focus more on that in the next couple of days.
>
>  >  *  Also, I believe there might be a catch clause indexing bug as fixed in [2]
>  >     (though maybe that change should be under #if LIBCXXABI_ARM_EHABI ?).
>
> It seems that I am using different way to handle the filter type index, thus it
> won't be a problem.
>
>  >  *  A bunch of the _Unwind_* functions are done up as static inline... would be
>  >     nicer to use the unwind cursor abstraction to help keep down #ifdef
>  >     proliferation.
>
> I don't quite understand what do you mean by "unwind cursor abstraction".  May
> you give further explanation?
I'm referring to the AbstractUnwindCursor class in UnwindCursor.hpp. This makes 
a nice platform agnostic interface for these kinds of operations. Also see 
UnwindLevel1.c.
>
> I wrote those static inline function simply because I wish to reuse the code
> with _Unwind_GetGR()/_Unwind_SetGR().  It seems that the header from clang did
> the same thing.
Oh... never mind, I see what you did now.
>
>  > I'm being pedantic here: you say they compile & run, but what's the pass rate?
>
> I have tried every test cases in libcxxabi/test, and all of them are passing
> except one case in test_demangle.cpp.  That case assumes that long double has
> 80-bit, which is not true for ARM.  Thus, I have changed it in the patch.
Ok, excellent. That one was failing for me with [1], and I hadn't looked into it 
yet.
>
> I haven't tried the test case from libc++ yet, though I am planning to do so.
>
> Cheers,
> Logan

-- 
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded



More information about the cfe-commits mailing list