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. >> >> 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. ... > Umm, sorry, just seen this update to the previous patch. > > The changes to the exception unwinding look a bit more involved. Could > you separate that out into a separate patch, so that it's easier to see > what you're changing? Ok, here the mentioned part as separate diff. The comments are above. The CL below :) Thank you very much! Andreas gcc: * ginclude/unwind-arm-common.h (_Uwind_Control_Block): Define exception_class as double integer for FreeBSD ARM. (_Unwind_Exception): Define _Unwind_Exception_Class as double integer for FreeBSD ARM. libstc++-v3: * libsupc++/unwind-cxx.h (__is_gxx_exception_class, __is_dependent_exception): Exclude FreeBSD ARM from the __ARM_EABI_UNWINDER__ ifdef.