This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Recognize bottom of stack on Linux


On Tue, Feb 05, 2002 at 02:59:39PM -0500, Jim Blandy wrote:
> Daniel Jacobowitz <drow@mvista.com> writes:
> > On Sun, Feb 03, 2002 at 09:06:36PM -0500, Jim Blandy wrote:
> > > 
> > > Now, some folks feel that GDB should show the whole stack, including
> > > _start, __libc_start_main, and anything else that's there.  However,
> > > this isn't the way GDB has ever traditionally behaved on native
> > > targets.  So this patch makes GDB's backtraces end after main.
> > > 
> > > 2002-02-03  Jim Blandy  <jimb@redhat.com>
> > > 
> > > 	* i386-linux-tdep.c (i386_linux_frame_chain): Stop the frame chain
> > > 	after `main', not just after the compilation unit containing the
> > > 	entry point.
> > 
> > Shouldn't we use func_frame_chain_valid instead of
> > file_frame_chain_valid instead of duplicating this?
> > 
> > I don't understand why that function doesn't have more callers.  It
> > seems that at least all non-embedded targets, or at the very least all
> > Linux targets, should use it.
> 
> The following works fine for me, too:
> 
> 2002-02-05  Jim Blandy  <jimb@redhat.com>
> 
> 	* i386-linux-tdep.c (i386_linux_frame_chain): Use
> 	func_frame_chain_valid, instead of plain inside_entry_file.

I like this.  The way func_frame_chain_valid should really be used is
by something like:

  /* NOTE: tm-i386nw.h and tm-i386v4.h override this.  */
  set_gdbarch_frame_chain_valid (gdbarch, file_frame_chain_valid);

(copied from i386-tdep.c).

Does this patch work for you?

I'm curious as to why we can't just set this universally, or at least a
little more globally.  Most things that have a main () use it as a
normal main ().  I'd propose that we set it as the default frame chain,
and provide/document an option to ignore inside_main_func.


-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.50
diff -u -r1.50 i386-tdep.c
--- i386-tdep.c	2002/01/01 16:29:43	1.50
+++ i386-tdep.c	2002/02/05 21:47:11
@@ -1324,7 +1324,7 @@
 
   set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_on_stack);
 
-  /* NOTE: tm-i386nw.h and tm-i386v4.h override this.  */
+  /* NOTE: tm-i386nw.h, tm-i386v4.h, and tm-linux.h override this.  */
   set_gdbarch_frame_chain_valid (gdbarch, file_frame_chain_valid);
 
   /* NOTE: tm-i386aix.h, tm-i386bsd.h, tm-i386os9k.h, tm-linux.h,
Index: config/i386/tm-linux.h
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/tm-linux.h,v
retrieving revision 1.16
diff -u -r1.16 tm-linux.h
--- config/i386/tm-linux.h	2001/11/08 00:03:52	1.16
+++ config/i386/tm-linux.h	2002/02/05 21:47:11
@@ -31,6 +31,10 @@
 #include "i386/tm-i386.h"
 #include "tm-linux.h"
 
+/* Use the alternate method of determining valid frame chains. */
+
+#define FRAME_CHAIN_VALID(fp,fi) func_frame_chain_valid (fp, fi)
+
 /* Register number for the "orig_eax" pseudo-register.  If this
    pseudo-register contains a value >= 0 it is interpreted as the
    system call number that the kernel is supposed to restart.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]