Date: Mon, 25 Aug 2014 12:48:08 -0600 From: Ian Lepore <ian@FreeBSD.org> To: Olavi Kumpulainen <olavi.m.kumpulainen@gmail.com> Cc: freebsd-arm@freebsd.org Subject: Re: C++ exceptions in freebsd-arm doesn't seem to work Message-ID: <1408992488.1150.105.camel@revolution.hippie.lan> In-Reply-To: <2C97B126-91FE-4E93-920F-6ED5045666A6@gmail.com> References: <BEAC4CFB-EC4F-456D-8173-2E34CCE3A2C1@gmail.com> <1405809318.85788.35.camel@revolution.hippie.lan> <1406063473.71975.8.camel@revolution.hippie.lan> <53D2CFBE.3040207@fgznet.ch> <834BA562-84ED-425C-9D61-0A235A28A94A@gmail.com> <1408472517.56408.659.camel@revolution.hippie.lan> <F4EE79A6-9D99-4EE1-9452-2C7ECF963646@gmail.com> <1408562392.1150.4.camel@revolution.hippie.lan> <2C97B126-91FE-4E93-920F-6ED5045666A6@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2014-08-21 at 18:54 +0200, Olavi Kumpulainen wrote: > On 20 Aug 2014, at 21:19 , Ian Lepore <ian@FreeBSD.org> wrote: >=20 > > On Wed, 2014-08-20 at 19:19 +0200, Olavi Kumpulainen wrote: > >> On 19 Aug 2014, at 20:21 , Ian Lepore <ian@FreeBSD.org> wrote: > >>=20 > >>> On Tue, 2014-08-19 at 19:40 +0200, Olavi Kumpulainen wrote: > >>>> On 25 Jul 2014, at 23:44 , Andreas Tobler <andreast-list@fgznet.ch= > wrote: > >>>>=20 > >>>>> On 22.07.14 23:11, Ian Lepore wrote: > >>>>>> On Sat, 2014-07-19 at 16:35 -0600, Ian Lepore wrote: > >>>>>>> On Sat, 2014-06-07 at 14:12 +0200, Olavi Kumpulainen wrote: > >>>>>>>> [c++ exceptions don't work and related discussion] > >>>>>>>=20 > >>>>>>> I checked in a partial fix for c++ exception handling in r26889= 3. It > >>>>>>> fixes the specific problem you detailed above, which was essent= ially > >>>>>>> that the __gnu_Unwind_Find_exidx() function was not available i= n any > >>>>>>> shared library, making the unwinder fall back to using the __ex= idx_start > >>>>>>> and end symbols, which are only valid in a statically-linked ap= p. > >>>>>>>=20 > >>>>>>> With the new function in place, exceptions are closer to workin= g with > >>>>>>> gcc 4.2.1, but still don't work with clang. With gcc, some thi= ngs work > >>>>>>> and some things don't. For example if you throw an exception a= nd in the > >>>>>>> same function have a catch with the right specific type it segf= aults, > >>>>>>> but a catch(...) will catch it without problems. But you can c= atch an > >>>>>>> exception by type if the catch is in a function higher up the c= all chain > >>>>>>> from the place it was thrown. > >>>>>>>=20 > >>>>>>> We're continuing to debug this at $work, and welcome any input = if anyone > >>>>>>> else makes progress with it. Right now we still don't know whe= ther the > >>>>>>> segfaults are because of bad unwinder library code or bad unwin= d data > >>>>>>> emitted by gcc. (I sure hope it's the library, because that's = easier to > >>>>>>> fix.) > >>>>>>>=20 > >>>>>>> On the clang front, it has been said that c++ exceptions work i= n clang > >>>>>>> 3.5, so we tried the clang-devel port, and it didn't just work.= But it > >>>>>>> turns out that port hasn't been updated for quite a while, so w= e may not > >>>>>>> have tested the code that's supposed to work right. While tryi= ng that I > >>>>>>> discovered that clang 3.5 isn't scheduled for release for about= another > >>>>>>> year, so that really isn't a viable solution for anyone with ne= ar-term > >>>>>>> needs, unless the required changes can be cherry-picked and bro= ught into > >>>>>>> our version of 3.4. > >>>>>>>=20 > >>>>>>> -- Ian > >>>>>>=20 > >>>>>> Another update to this... today I committed r268993 and r268994,= and now > >>>>>> I believe arm eabi c++ exceptions are fully working with gcc. I= haven't > >>>>>> run an extensive test suite, but all the test cases we've been u= sing at > >>>>>> $work to debug this now work correctly. > >>>>>=20 > >>>>> Thank you! Confirmed. My test cases which are working with gcc-4.= 10 are now also working with the system gcc, 4.2.1. > >>>>> I totally forgot about this change. I have it in my local gcc tre= e since a while but I forgot about..... > >>>>>=20 > >>>>> Andreas > >>>>>=20 > >>>>>=20 > >>>>=20 > >>>> Please excuse my late reply. I=A2ve been away from keyboard for a = while. > >>>>=20 > >>>> I back-ported r268893, r268993 and r268994 to stable/10 for beagl= ebone. C++ exceptions works for static builds, but not for binaries linke= d to shared libs. > >>>>=20 > >>>> Since this seems to work ok in HEAD, I=A2m obviously missing somet= hing. Do any of you guys have any ideas? > >>>>=20 > >>>> Cheers > >>>>=20 > >>>=20 > >>> I'm not sure what you mean by "backported to stable/10", I merged a= ll > >>> the necessary changes to stable-10 as r269792 on Aug 10. Are you > >>> working with a checkout from earlier than that? If so, just updati= ng > >>> should fix it for you. > >>>=20 > >>> -- Ian > >>>=20 > >>>=20 > >>=20 > >>=20 > >> Updating to stable-10 as of today didn=A2t help. I=A2m running a cle= an checkout except for a couple of drivers in the kernel. > >> This makes me think I have a bad src.conf - How shall I configure th= e build for this to work? > >>=20 > >> /Olavi > >>=20 > >>=20 > >>=20 > >>=20 > >=20 > > You need to use GCC, not clang, as the compiler. Exceptions are just > > broken on clang 3.4, so we're waiting for 3.5 (should be released any > > time now I think). > >=20 > > To compile with gcc, put this in your /etc/make.conf: > >=20 > > WITH_GCC=3Dyes > > WITH_GNUCXX=3Dyes > > WITH_GCC_BOOTSTRAP=3Dyes > > WITHOUT_CLANG=3Dyes > > WITHOUT_CLANG_IS_CC=3Dyes > > WITHOUT_CLANG_BOOTSTRAP=3Dyes > >=20 > > -- Ian > >=20 > >=20 >=20 >=20 > Thank you. It turned out that I already used these with the exception o= f WITHOUT_CLANG_BOOTSTRAP. >=20 > However, c++ exceptions in stable/10 is still defunct when I build it.=20 >=20 > So instead I pulled master, built and installed that instead. And voila= - Exceptions do work!=20 >=20 > Therefore it seems my build method, flags and environment is ok after a= ll. I glanced the commit logs in master but didn=A2t find anything obviou= s, but still; something related seems missing in stable/10 if you ask me. >=20 > /Olavi >=20 >=20 >=20 > _______________________________________________ > freebsd-arm@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-arm > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org" >=20 I chased this down today to a missing MFC. One of my merges claimed to include a change that wasn't really included. I fixed it today with r270606, and this time I actually tested that I could throw and catch an exception using freebsd built from stable-10 at this rev. :) Thanks for testing this, and sorry for claiming it was fixed when it wasn't quite complete. -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1408992488.1150.105.camel>