From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5753 invoked by alias); 11 Nov 2008 23:12:59 -0000 Received: (qmail 5716 invoked by uid 22791); 11 Nov 2008 23:12:58 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 11 Nov 2008 23:12:20 +0000 Received: (qmail 18835 invoked from network); 11 Nov 2008 23:12:18 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 11 Nov 2008 23:12:18 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: [RFA] detect inferior exit in call_function_by_hand Date: Wed, 12 Nov 2008 08:33:00 -0000 User-Agent: KMail/1.9.10 Cc: Doug Evans References: <20081111225021.015C61C79A1@localhost> In-Reply-To: <20081111225021.015C61C79A1@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200811112312.19409.pedro@codesourcery.com> X-IsSubscribed: yes 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 X-SW-Source: 2008-11/txt/msg00220.txt.bz2 On Tuesday 11 November 2008 22:50:20, Doug Evans wrote: > I found this while playing with the archer exception-rewind branch. > The message currently printed when the inferior exits during > call_function_by_hand is misleading. > [On the branch one currently gets a segv, > stopped_by_random_signal/stop_stack_dummy do not fully describe > all the possible states of the inferior.] Looks OK to me, apart from the tiny issues below. > > + if (! target_has_execution) > + { > + /* If we try to restore the inferior status (via the cleanup), > + we'll crash as the inferior is no longer running. */ > + discard_cleanups (inf_status_cleanup); > + discard_inferior_status (inf_status); > + /* FIXME: Insert a bunch of wrap_here; name can be very long if it's > + a C++ name with arguments and stuff. */ Remove this copy&pasted FIXME note, it doesn't make sense for this case (you're not printing a function name). > + error (_("\ > +The program being debugged exited while in a function called from GDB.")); > + } > + > if (stopped_by_random_signal || !stop_stack_dummy) > { > /* Find the name of the function we're about to complain about. */ > + > +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { > + untested callfuncs.exp ^^^^ ECOPYPASTE (callexit.exp) > + return -1 > +# Set the current language to C. This counts as a test. If it > +# fails, then we skip the other tests. > + I don't know why all the infcalls tests do this --- they all seem to do it. Do you/anyone know(s) why? > +proc set_lang_c {} { > + global gdb_prompt > + > + send_gdb "set language c\n" > + gdb_expect { > + -re ".*$gdb_prompt $" {} > + timeout { fail "set language c (timeout)" ; return 0; } > + } > + > + send_gdb "show language\n" > + gdb_expect { > + -re ".* source language is \"c\".*$gdb_prompt $" { > + pass "set language to \"c\"" > + return 1 > + } > + -re ".*$gdb_prompt $" { > + fail "setting language to \"c\"" > + return 0 > + } > + timeout { > + fail "can't show language (timeout)" > + return 0 > + } > + } > +} > + > +# Start with a fresh gdb. > + > +gdb_exit > +gdb_start > +gdb_reinitialize_dir $srcdir/$subdir > +gdb_load ${binfile} > + > +if { ![set_lang_c] } { > + gdb_suppress_tests; > +} else { > + if { ![runto_main] } { > + gdb_suppress_tests; > + } > +} > + -- Pedro Alves