From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 96844 invoked by alias); 22 Apr 2016 09:05:52 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 96834 invoked by uid 89); 22 Apr 2016 09:05:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 22 Apr 2016 09:05:50 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3533937E64; Fri, 22 Apr 2016 09:05:49 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u3M95mbl017480; Fri, 22 Apr 2016 05:05:48 -0400 Subject: Re: [PATCH 2/3] Propagate GDB/C++ exceptions across readline using sj/lj-based TRY/CATCH To: Yao Qi References: <1461282640-30425-1-git-send-email-palves@redhat.com> <1461282640-30425-3-git-send-email-palves@redhat.com> <86mvomhxb7.fsf@gmail.com> Cc: gdb-patches@sourceware.org From: Pedro Alves Message-ID: <5719E96B.5050604@redhat.com> Date: Fri, 22 Apr 2016 09:05:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: <86mvomhxb7.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-04/txt/msg00510.txt.bz2 On 04/22/2016 09:17 AM, Yao Qi wrote: > Pedro Alves writes: > > Hi Pedro, > this series is fine with me. I tested them on arm/fedora19, and the > exception can be correctly handled. Great, thanks. >> This turns out to be a much better looking fix than my bespoke API >> attempt, even. We'll probably be able to simplify TRY_SJLJ/CATCH_SJLJ >> when we finally get rid of TRY/CATCH all over the tree, but until > > I don't see anything we can simplify in TRY_SJLJ/CATCH_SJLJ. Can you > elaborate please? When we get to the point when we longer need TRY/CATCH for regular exception handling it means we'll no longer need TRY/CATCH to manage and run cleanups, as all cleaning up will be done by RAII / destructors. So the bits in TRY_SLJLJ/CATCH_SJLJ that manage the cleanup chain and the bit in throw_exception_sjlj that runs cleanups can all disappear. Also, since we always want RETURN_MASK_ALL, the second parameter of CATCH_SJLJ can be eliminated, along with all the return_mask support code. E.g., since CATCH_SJLJ will always catch all exceptions, exceptions_state_mc_catch becomes simply something like: void exceptions_state_mc_catch (struct gdb_exception *exception) { *exception = current_catcher->exception; catcher_pop (); } ... which may itself expose further possible simplifications, like e.g., moving catch_pop to the caller directly. Thanks, Pedro Alves