Date: Mon, 21 Jan 2013 18:54:28 +0200 From: Konstantin Belousov <kostikbel@gmail.com> To: David Chisnall <theraven@FreeBSD.org> Cc: "toolchain@freebsd.org" <toolchain@FreeBSD.org>, Hongli Lai <hongli@phusion.nl>, Pedro Giffuni <pfg@FreeBSD.org> Subject: Re: standards/175453: Catching C++ std::bad_cast doesn't work in FreeBSD 9.1 Message-ID: <20130121165427.GG2522@kib.kiev.ua> In-Reply-To: <398F1CB4-D4B0-4C21-BA05-59DDE77C5DA6@FreeBSD.org> References: <201301201652.r0KGq0d1042817@red.freebsd.org> <20130121014745.GD2522@kib.kiev.ua> <1358741301.62974.YahooMailNeo@web162102.mail.bf1.yahoo.com> <20130121044912.GE2522@kib.kiev.ua> <398F1CB4-D4B0-4C21-BA05-59DDE77C5DA6@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--J1ldk4ymECC/Y9sn Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Jan 21, 2013 at 04:12:00PM +0000, David Chisnall wrote: > On 21 Jan 2013, at 04:49, Konstantin Belousov wrote: >=20 > > Yes, quite possible. AFAIR, the 'catch' code compares the exception cla= sses > > by the shared object ownership. It might get confused due to filter pro= viding > > some symbols. > >=20 > > But I did not investigated the cause for real. >=20 > The issue appears to be that the libstdc++ exports a few functions[1] tha= t libsupc++ exports, but with different symbol versions. Unfortunately, th= ese are things that set handlers that are then called from libsupc++ / libc= xxrt when, for example, an exception specification violation is encountered. >=20 > I'm not sure what the solution is here. Is there some version-script-foo= that we can do to say 'filter this symbol with this version as if it were = this one with this version'? We ideally want to keep them with the current= version in libcxxrt / libsupc++, but not introduce linker errors. =20 >=20 > David >=20 > [1] std::set_new_handler(), std::set_terminate(), std::set_unexpected() Can you prepare the minimal isolated test case which demostrates the behaviour ? A plan would be to ask somebody to run the test on the linux. I think we must be bug-to-bug compatible with glibc in regard to the filters quirks. Gnu filters work only on the whole object scope. Solaris linkers do have per-symbol filtering, but Solaris does not implement per-symbol versioning, on the other hand. --J1ldk4ymECC/Y9sn Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQIcBAEBAgAGBQJQ/XLDAAoJEJDCuSvBvK1BLSgP/ilxbTO+0sUU6miJCWTkt65Y K3DGVuMKEIC4sQeMPvt5+K3WXdGYmEyEpNAFuU3CQqAvJO+4cwPpflKFlMqzkfOB G7B2IIAtM+eyQqEL1oh6patFr3+IrF2V3n7dWYCKrXygNdbCfYxVA1Z1L00cEiD3 zPqK6fBVJT5MBx8Ny6tX3bB9ehrW24FeYCgBjI0+FvFonAPHWOUu3NA1szkMpWr7 mE6bDZhQ+eZOs/sEmS0ys9U9pVK5by+U/faLFJr0D2j1y+zxYCw/d5hedg3JgFT2 rRKEK5S13Aqwe2za/pUNVlQDoKdNRkhGQr5awN61GIl+XxSkF7yVkO15j7mL2n62 NAEaqFq4GftHWZhDhHkcn1hWAKfGfCSV9+N/USCs1HCNADWg9iGiYTjynnofd8SE 3RmiJ5aDJY5nI+R2qUCjXZuMXTlgW+iJO0ibOoyvdBsST7l6wJ+xy9kjet5k03TC d/se2Qz7/4NEI+yDI/fy29lbKYF6Cjhgs+RLThzDay8Faj0nSSDJkjTT8NVHk/20 cxgzk5bfJ/VzYYarG6A4Jm2fhSxGfQ9cPCX66h797b8bzYUJC+LohajL4WszcLt1 NCC/OWS/mn4w0u3WaCScYbWcs1KM4zKIdFlUMGefYxQucHXO8Lqb5A6GNNSsSAnE YJQHX4e+80j8IR/914dC =8VBT -----END PGP SIGNATURE----- --J1ldk4ymECC/Y9sn--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130121165427.GG2522>