From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 56343 invoked by alias); 22 Oct 2015 11:23:10 -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 56329 invoked by uid 89); 22 Oct 2015 11:23:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 22 Oct 2015 11:23:08 +0000 Received: from svr-orw-fem-03.mgc.mentorg.com ([147.34.97.39]) by relay1.mentorg.com with esmtp id 1ZpDxZ-0003eG-CF from Luis_Gustavo@mentor.com ; Thu, 22 Oct 2015 04:23:05 -0700 Received: from [172.30.15.53] (147.34.91.1) by svr-orw-fem-03.mgc.mentorg.com (147.34.97.39) with Microsoft SMTP Server id 14.3.224.2; Thu, 22 Oct 2015 04:23:04 -0700 Reply-To: Luis Machado Subject: Re: [PATCH] Do not pass NULL for the string in catch_errors References: <1441809933-9612-1-git-send-email-lgustavo@codesourcery.com> <55F182B1.4020404@redhat.com> <5627739A.2090401@codesourcery.com> <5628C37E.2030208@redhat.com> To: Pedro Alves , From: Luis Machado Message-ID: <5628C715.5010701@codesourcery.com> Date: Thu, 22 Oct 2015 13:39:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <5628C37E.2030208@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg00448.txt.bz2 On 10/22/2015 09:07 AM, Pedro Alves wrote: > On 10/21/2015 12:14 PM, Luis Machado wrote: >> On 09/10/2015 10:16 AM, Pedro Alves wrote: >>> On 09/09/2015 03:45 PM, Luis Machado wrote: >>>> I caught a segmentation fault while running gdb.reverse/sigall-reverse.exp, >>>> in a mingw32 GDB, in this code path. It boils down to the code trying to >>>> strlen () a NULL pointer. I tracked things down and it looks like >>>> record_full_message_wrapper_safe is the only occurrence. >>>> >>>> We could also change catch_errors to check the char pointer and pass the >>>> empty string automatically if the pointer is NULL. Then again, it seems like >>>> catch_errors is going away at any time now, being potentially replaced >>>> with catch_exceptions. >>> >>> It's been marked superseded for years. If you had fixed this by >>> converting this one instance, we'd be a little closer. ;-) >>> >> >> Well, we shouldn't rush! :-) >> >> Seriously, i've been looking into this and it doesn't look like >> catch_exceptions/catch_exceptions_with_msg is something we'll want to >> use in the long run either. Those couple functions also do not directly >> replace catch_errors. >> >> I thought about replacing the remaining catch_errors occurrences with >> TRY/CATCH/END_CATCH blocks, which sounds better aligned with what we >> want to do in the future - migrating to C++ etc. Then we can finally get >> rid of catch_errors and a few useless wrappers. How does that sound? > > Sounds like better leave it be then. It may be that with proper C++/RAII > the try/catches would disappear altogether in the end, for instance. I see. Unfortunately, for the cases where catch_exceptions supposedly acts similarly to catch_errors, it still doesn't work correctly because catch_exceptions doesn't seem to cope well with error () calls, like the case inside record-full.c. With catch_exceptions, instead of catching the error and letting the inferior continue, it will just cause the inferior to terminate. The other cases spread through breakpoint.c, infrun.c, solib.c etc, are supposed to emit a message in case an error happens, as opposed to passing an empty string. catch_exceptions_with_msg only allows recording a copy of the message from an exception thrown from the guarded called function. It doesn't emit a message passed in as argument like catch_errors.