On 13/01/15 21:08, Andreas Tobler wrote: > On 13.01.15 11:25, Ramana Radhakrishnan wrote: >> On Thu, Jan 8, 2015 at 8:51 PM, Andreas Tobler <andreast-l...@fgznet.ch> >> wrote: >>> On 08.01.15 17:27, Richard Earnshaw wrote: >>>> >>>> On 29/12/14 18:44, Andreas Tobler wrote: >>>>> >>>>> All, >>>>> >>>>> here is the third attempt to support ARM with FreeBSD. >>>>> >>>>> In the meantime we found another issue in the unwinder where I had to >>>>> adapt some stuff. >>>>> >>>>> The unwind_phase2_forced function in libgcc calls a stop_fn function. >>>>> This stop_fn is in FreeBSD's libthr implementation and is called >>>>> thread_unwind_stop. This thread_unwind_stop is a generic function used >>>>> on all FreeBSD archs. >>>>> >>>>> The issue is now that this thread_unwind_stop expects a double int for >>>>> the exception_class, like on every other arch. For ARM EABI this >>>>> exception_class is an array of char which is passed in one register as >>>>> pointer vs. two registers for a double int. >>>>> >>>>> To solve this issue we defined the exception_class as double integer for >>>>> FreeBSD. >> >> My apologies for the slow response, some other work and then holidays >> intervened. > > Np, the only issue which made me hurry was the stage 4 entering this week. > >> >From my understanding of the ABI document the implementation is >> currently as mandated by the ABI. Also this isn't a part of the ABI >> that's available for the platform (here FreeBSD to manipulate and >> change as per it's wishes). ARM EHABI is special for software, making >> FreeBSD more "special" for ARM appears to be counter intuitive from my >> point of view. A number of exception unwinding libraries. for e.g. >> libobjc , libstdc++ all use this implementation of exception_class. >> Therefore this creates a divergence for the FreeBSD port which is >> different from everything else. I expect that a number of language run >> time support libraries that supported the ARM EHABI would be using >> such an implementation, therefore you need to fix every single >> implementation of this in every unwinder that supports the ARM EHABI >> which I expect to have been ported to in a number of libraries >> already. (I already see this in libobjc and libstdc++ in the GCC tree) > > Grr ;) I didn't want to hear this answer, but I expected it somehow. > My proposal was the least effort for me. > The other way round is going to be very hard. Maybe impossible. > > It is not only FreeBSD which is affected but also llvm and friends. They > use for exception_class uint64_t. > > I have to take a picture how the effort is and if it would be possible > to do such a change in FreeBSD and more important in llvm etc. > >> I would rather fix the thread_unwind_stop implementation in libthr for >> ARM EHABI rather than make this change. > > It wouldn't be a 'fix' but more a wrapper I think. > >>>>> This adaptation reduced the failure count in libstdc++ by about 40 fails. >>>>> >>>>> I build and test this port on a regular basis and I post the results to >>>>> the usual place. >> >> Thanks for doing this. I'm really glad that FreeBSD is finally moving to >> EABI. >
I agree with Ramana on this one, I feel that FreeBSD trying to plough a slightly different furrow is just going to cause major problems for everyone. I don't believe a claim that LLVM can't be made to work with the standard EHABI data structures. It can do this on Linux, so I can't conceive of any reason why it cannot also do so on FreeBSD. R. > Thanks for the review and the feedback. > > Gruss, > Andreas > >