From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8267 invoked by alias); 19 Feb 2003 16:56:27 -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 8244 invoked from network); 19 Feb 2003 16:56:26 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by 172.16.49.205 with SMTP; 19 Feb 2003 16:56:26 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18lZPO-0006fu-00 for ; Wed, 19 Feb 2003 12:57:30 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18lXWB-000274-00 for ; Wed, 19 Feb 2003 11:56:23 -0500 Date: Wed, 19 Feb 2003 16:56:00 -0000 From: Daniel Jacobowitz To: GDB Patches Subject: Re: [patch/rfc] Add a sentinel frame Message-ID: <20030219165623.GA7961@nevyn.them.org> Mail-Followup-To: GDB Patches References: <3E305670.3020700@redhat.com> <3E48378E.6090007@suse.cz> <3E492953.8010001@redhat.com> <3E52173B.1030800@suse.cz> <3E538770.6070209@redhat.com> <20030219140441.GA20537@nevyn.them.org> <3E53B61C.2050807@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3E53B61C.2050807@redhat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-02/txt/msg00412.txt.bz2 On Wed, Feb 19, 2003 at 11:51:40AM -0500, Andrew Cagney wrote: > >On Wed, Feb 19, 2003 at 08:32:32AM -0500, Andrew Cagney wrote: > > > >>So I think it is one of these tests going awall: > >> > >> if (next_frame->level >= 0 > >> && !backtrace_below_main > >> && inside_main_func (get_frame_pc (next_frame))) > >> /* Don't unwind past main(), bug always unwind the sentinel frame. > >> Note, this is done _before_ the frame has been marked as > >> previously unwound. That way if the user later decides to > >> allow unwinds past main(), that just happens. */ > >> return NULL; > >> > >> /* If we're inside the entry file, it isn't valid. */ > >> /* NOTE: drow/2002-12-25: should there be a way to disable this > >> check? It assumes a single small entry file, and the way some > >> debug readers (e.g. dbxread) figure out which object is the > >> entry file is somewhat hokey. */ > >> /* NOTE: cagney/2003-01-10: If there is a way of disabling this test > >> then it should probably be moved to before the ->prev_p test, > >> above. */ > >> if (inside_entry_file (get_frame_pc (next_frame))) > >> return NULL; > >> > >>The second looks worrying (the dummy frame breakpoint lives in the entry > >>file ...). Perhaphs something like: > >> > >>if (dummy_frame_p (get_frame_pc (next_frame) != NULL > >> && inside_entry_file (get_frame_pc (next_frame)) > >> return NULL; > > > > > >Hrm, shouldn't we have already detected the dummy frame at this point? > > No. GDB is trying to perform: > > pop_frame (get_current_frame()) > > with the assumption that it has a dummy frame and get_current_frame() > will return it. > > >That's what happens on i386 IIRC... I thought that we wouldn't reach frame_chain_valid if the next frame was a dummy frame. Hmm, that only seems to happen for deprecated generic dummy frames: if (DEPRECATED_USE_GENERIC_DUMMY_FRAMES && DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), 0, 0)) return 1; Oh I didn't realize the contents of frame_chain_valid had ended up repeated in get_prev_frame, I've been looking at the wrong function. That's why I didn't understand you. Should the check above exist in get_prev_frame also? [Why does this logic need to be in more than one place?] -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer