From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29999 invoked by alias); 10 Sep 2003 18:36:33 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 29981 invoked from network); 10 Sep 2003 18:36:30 -0000 Received: from unknown (HELO localhost.redhat.com) (207.219.125.105) by sources.redhat.com with SMTP; 10 Sep 2003 18:36:30 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id A80D82B7F; Wed, 10 Sep 2003 14:36:28 -0400 (EDT) Message-ID: <3F5F6F2C.2030403@redhat.com> Date: Wed, 10 Sep 2003 18:36:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030820 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Daniel Jacobowitz , "J. Johnston" Cc: gdb-patches@sources.redhat.com Subject: Re: RFC: fix problems with errors during quitting (killed.exp) References: <3F58B193.5090400@redhat.com> <20030905155833.GA27258@nevyn.them.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-09/txt/msg00202.txt.bz2 >> My new strategy is to intercept error() calls during quitting. Basically, >> a simple get/set function is set up to denote when we the user has confirmed >> a quit. > > > My immediate concern is, does killed.exp leave a stopped binary around? > > Other than that I like it. I feel ill. The first bug is in quit_force, so modifying throw_exeption to work around it is a hack. quit_force needs to catch any errors thrown by the target vector. Looking at the function's body. I think the first part: > /* An optional expression may be used to cause gdb to terminate with the > value of that expression. */ > if (args) > { > struct value *val = parse_and_eval (args); > > exit_code = (int) value_as_long (val); > } should still be allowed to error out. Otherwize something like: (gdb) exit bogus operand will quit gdb denying the user of an oportunity to enter the correct command. The target calls and (I guess) the write_history should be captured: > if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution) > { > if (attach_flag) > target_detach (args, from_tty); > else > target_kill (); > } > > /* UDI wants this, to kill the TIP. */ > target_close (1); > > /* Save the history information if it is appropriate to do so. */ > if (write_history_p && history_filename) > write_history (history_filename); Also putting the do_final_cleanups inside the safety net would also probably be for the best. > do_final_cleanups (ALL_CLEANUPS); /* Do any final cleanups before exiting The second less urgent bug is in the target code. The target code should catch the error and then force itself to be popped (then rethrowing the error I guess). That would have ensured that forward progress was made and that second quit attemt worked. Andrew