From owner-freebsd-arm@FreeBSD.ORG Fri Aug 29 16:34:06 2014 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id DA0DCECB; Fri, 29 Aug 2014 16:34:06 +0000 (UTC) Received: from mail-la0-x232.google.com (mail-la0-x232.google.com [IPv6:2a00:1450:4010:c03::232]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2045213D1; Fri, 29 Aug 2014 16:34:05 +0000 (UTC) Received: by mail-la0-f50.google.com with SMTP id mc6so3024650lab.37 for ; Fri, 29 Aug 2014 09:34:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=Gf7gt5gGSp9sL2f5DUGofeACyC5KDFaT7aaCYEfHDP4=; b=LLoCd1r4u0gCKccboXGIroWmoM5Rl/RRmsW7rBIkxdxBuoMdXiygRM36/UHTm4K32z 8ETe1eI8ifxjtY4zqwt3ozerj3/VFmLS1gU5KGxbC4MsxKUqCF3hy4Kzdt+14FmNhWmW lo2m/puT3Tv2S1lEFwbCYcI8Fee3vVpqZQc68FHbqMUdJMiOhNXkMpXVavp58n9Z+Llx so03As/foEU+VUQjFghejH7XWWPdXAGH6bpW6GtUQsi4md4qVjVcrwnx/MXD6CwKaEVK rh3XHxolCGxbOYAxBzwMW4bYG7fMmi4iI5E8L4njfaLqL28rQreK2Qt7ODnH444qirvd LMQw== X-Received: by 10.152.234.36 with SMTP id ub4mr12577518lac.52.1409330043777; Fri, 29 Aug 2014 09:34:03 -0700 (PDT) Received: from [192.168.1.100] (c-d135e155.556-1-64736c11.cust.bredbandsbolaget.se. [85.225.53.209]) by mx.google.com with ESMTPSA id w11sm651780lbm.30.2014.08.29.09.34.02 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 29 Aug 2014 09:34:02 -0700 (PDT) Content-Type: text/plain; charset=iso-8859-7 Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: C++ exceptions in freebsd-arm doesn't seem to work From: Olavi Kumpulainen In-Reply-To: <1408992488.1150.105.camel@revolution.hippie.lan> Date: Fri, 29 Aug 2014 18:34:00 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <9EC067FB-EE88-4C6D-A0B2-E90467683A5B@gmail.com> References: <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> <1408562392.1150.4.camel@revolution.hippie.lan> <2C97B126-91FE-4E93-920F-6ED5045666A6@gmail.com> <1408992488.1150.105.camel@revolution.hippie.lan> To: Ian Lepore X-Mailer: Apple Mail (2.1878.6) Cc: freebsd-arm@freebsd.org X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Aug 2014 16:34:06 -0000 On 25 Aug 2014, at 20:48 , Ian Lepore wrote: > On Thu, 2014-08-21 at 18:54 +0200, Olavi Kumpulainen wrote: >> On 20 Aug 2014, at 21:19 , Ian Lepore wrote: >>=20 >>> On Wed, 2014-08-20 at 19:19 +0200, Olavi Kumpulainen wrote: >>>> On 19 Aug 2014, at 20:21 , Ian Lepore wrote: >>>>=20 >>>>> On Tue, 2014-08-19 at 19:40 +0200, Olavi Kumpulainen wrote: >>>>>> On 25 Jul 2014, at 23:44 , Andreas Tobler = 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 = r268893. It >>>>>>>>> fixes the specific problem you detailed above, which was = essentially >>>>>>>>> that the __gnu_Unwind_Find_exidx() function was not available = in any >>>>>>>>> shared library, making the unwinder fall back to using the = __exidx_start >>>>>>>>> and end symbols, which are only valid in a statically-linked = app. >>>>>>>>>=20 >>>>>>>>> With the new function in place, exceptions are closer to = working with >>>>>>>>> gcc 4.2.1, but still don't work with clang. With gcc, some = things work >>>>>>>>> and some things don't. For example if you throw an exception = and in the >>>>>>>>> same function have a catch with the right specific type it = segfaults, >>>>>>>>> but a catch(...) will catch it without problems. But you can = catch an >>>>>>>>> exception by type if the catch is in a function higher up the = call 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 = whether the >>>>>>>>> segfaults are because of bad unwinder library code or bad = unwind 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 = in 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 = we may not >>>>>>>>> have tested the code that's supposed to work right. While = trying 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 = near-term >>>>>>>>> needs, unless the required changes can be cherry-picked and = brought 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 = using 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 = tree 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 = beaglebone. C++ exceptions works for static builds, but not for binaries = linked to shared libs. >>>>>>=20 >>>>>> Since this seems to work ok in HEAD, I=A2m obviously missing = something. 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 = all >>>>> the necessary changes to stable-10 as r269792 on Aug 10. Are you >>>>> working with a checkout from earlier than that? If so, just = updating >>>>> 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 = clean checkout except for a couple of drivers in the kernel. >>>> This makes me think I have a bad src.conf - How shall I configure = the 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 = of 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 = all. I glanced the commit logs in master but didn=A2t find anything = obvious, 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 >=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. :) >=20 > Thanks for testing this, and sorry for claiming it was fixed when it > wasn't quite complete. >=20 > -- Ian >=20 >=20 I=A2m a little late again, but I still want to confirm that stable/10 = works for me too. It catches c++ exceptions like a real champ! Thanks a million - /Olavi