From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18558 invoked by alias); 4 Feb 2004 15:40:24 -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 18533 invoked from network); 4 Feb 2004 15:40:23 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 4 Feb 2004 15:40:23 -0000 Received: from drow by nevyn.them.org with local (Exim 4.30 #1 (Debian)) id 1AoP8Y-0000vC-Ra for ; Wed, 04 Feb 2004 10:40:22 -0500 Date: Wed, 04 Feb 2004 15:40:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: Re: [patch/rfc] Fix inside entry func call Message-ID: <20040204154022.GA28919@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com References: <401F1E37.10007@gnu.org> <20040203172553.GA20758@nevyn.them.org> <40201E5A.70605@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <40201E5A.70605@gnu.org> User-Agent: Mutt/1.5.1i X-SW-Source: 2004-02/txt/msg00072.txt.bz2 On Tue, Feb 03, 2004 at 05:19:06PM -0500, Andrew Cagney wrote: It is > there to prop up legacy code. Given this, I even considered deleting > it (or folding it into legacy_frame_chain_valid). > > Do you want me to add a new separate static frame.c:inside_entry_func? I apologize for my continued obtuseness. How would you feel about the below patch instead? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2004-02-02 Andrew Cagney Daniel Jacobowitz * objfiles.h: Delete comments refering to inside_entry_func and DEPRECATED_FRAME_CHAIN_VALID. * defs.h (inside_entry_func): Update prototype.. * blockframe.c (inside_entry_func): Rename to legacy_inside_entry_func. Add new inside_entry_func taking a frame. * frame.c (get_prev_frame): Pass the frame to inside_entry_func. Index: blockframe.c =================================================================== RCS file: /cvs/src/src/gdb/blockframe.c,v retrieving revision 1.86 diff -u -p -r1.86 blockframe.c --- blockframe.c 15 Jan 2004 20:00:17 -0000 1.86 +++ blockframe.c 4 Feb 2004 15:39:25 -0000 @@ -156,11 +156,18 @@ inside_main_func (CORE_ADDR pc) && symfile_objfile->ei.main_func_highpc > pc); } -/* Test whether PC is inside the range of addresses that corresponds - to the process entry point function. */ +/* Test whether THIS_FRAME is inside the process entry point function. */ int -inside_entry_func (CORE_ADDR pc) +inside_entry_func (struct frame_info *this_frame) +{ + return (get_frame_func (this_frame) == entry_point_address ()); +} + +/* Similar to inside_entry_func, but accomodating legacy frame code. */ + +static int +legacy_inside_entry_func (CORE_ADDR pc) { if (symfile_objfile == 0) return 0; @@ -604,7 +611,7 @@ legacy_frame_chain_valid (CORE_ADDR fp, /* If we're already inside the entry function for the main objfile, then it isn't valid. */ - if (inside_entry_func (get_frame_pc (fi))) + if (legacy_inside_entry_func (get_frame_pc (fi))) return 0; /* If we're inside the entry file, it isn't valid. */ Index: defs.h =================================================================== RCS file: /cvs/src/src/gdb/defs.h,v retrieving revision 1.139 diff -u -p -r1.139 defs.h --- defs.h 2 Feb 2004 16:07:26 -0000 1.139 +++ defs.h 4 Feb 2004 15:39:25 -0000 @@ -324,10 +324,11 @@ struct cleanup struct symtab; struct breakpoint; +struct frame_info; /* From blockframe.c */ -extern int inside_entry_func (CORE_ADDR); +extern int inside_entry_func (struct frame_info *this_frame); extern int deprecated_inside_entry_file (CORE_ADDR addr); @@ -655,8 +656,6 @@ enum lval_type lval_register or lval_memory). */ lval_reg_frame_relative }; - -struct frame_info; /* Control types for commands */ Index: frame.c =================================================================== RCS file: /cvs/src/src/gdb/frame.c,v retrieving revision 1.155 diff -u -p -r1.155 frame.c --- frame.c 11 Jan 2004 16:52:16 -0000 1.155 +++ frame.c 4 Feb 2004 15:39:26 -0000 @@ -1838,7 +1838,7 @@ get_prev_frame (struct frame_info *this_ && backtrace_beyond_entry_func #endif && this_frame->type != DUMMY_FRAME && this_frame->level >= 0 - && inside_entry_func (get_frame_pc (this_frame))) + && inside_entry_func (this_frame)) { if (frame_debug) { Index: objfiles.h =================================================================== RCS file: /cvs/src/src/gdb/objfiles.h,v retrieving revision 1.29 diff -u -p -r1.29 objfiles.h --- objfiles.h 19 Jan 2004 19:56:02 -0000 1.29 +++ objfiles.h 4 Feb 2004 15:39:26 -0000 @@ -98,18 +98,7 @@ struct objfile_data; use the block at main, or can't find it for some reason, everything still works as before. And if we have no startup code debugging information but we do have usable information for main(), backtraces - from user code don't go wandering off into the startup code. - - To use this method, define your DEPRECATED_FRAME_CHAIN_VALID macro - like: - - #define DEPRECATED_FRAME_CHAIN_VALID(chain, thisframe) \ - (chain != 0 \ - && !(inside_main_func ((thisframe)->pc)) \ - && !(inside_entry_func ((thisframe)->pc))) - - and add initializations of the four scope controlling variables inside - the object file / debugging information processing modules. */ + from user code don't go wandering off into the startup code. */ struct entry_info {