Re: no stack trace with 2.6.11 and gdb 6.3

H. J. Lu
2005-06-13T20:13:58Z

On Mon, Jun 13, 2005 at 10:34:12AM -0500, Rich Coe wrote:
> On Mon, 13 Jun 2005 08:26:46 -0700
> "H. J. Lu" <hjl@lucon.org> wrote:
> > On Mon, Jun 13, 2005 at 10:16:29AM -0500, Rich Coe wrote:
> > > On Fri, 10 Jun 2005 19:21:48 -0700
> > > "H. J. Lu" <hjl@lucon.org> wrote:
> > > > On Fri, Jun 10, 2005 at 08:51:13PM -0400, Daniel Jacobowitz wrote:
> > > > >
> > > > > No, I told you that I expected it to work in CVS. If it does not, then
> > > > > someone needs to reproduce your problem using an unpatched GDB and
> > > > > debug it. I do not have a Red Hat x86_64 system on which to reproduce
> > > > > it, but I may be able to elsewhere - if I have time.
> > > >
> > > > Gdb should support vDSO on Linux 2.6.11/x86_64 with this patch:
> > > >
> > > > http://sources.redhat.com/ml/gdb/2005-06/msg00095.html
> > > >
> > > > If it doesn't work, I will be interested to know.
> > > > H.J.
> > >
> > > The patch makes it work only if you start the program from the gdb
> > > command line. As I said in my original post:
> >
> > You are saying:
> >
> > 1. # gdb foo
> > works.
> >
> > 2. But
> > # foo
> # foo &
> > # gdb foo pid
> > doesn't work?
>
> Yes.
>
> > Tell me how to reproduce it. I will take a look.
> >
>
> Compile the following program, -m32.
> run it in the background, and attach with gdb.
> get a bt.
>
> Results:
> gdb gtest 29769
> GNU gdb Red Hat Linux (6.3.0.0-1.10rh)
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "x86_64-redhat-linux-gnu"...Using host libthread_db library "/lib64/tls/libthread_db.so.1".
>
> Attaching to program: /data/rhcoe/data/mr/gtest, process 29769
> Reading symbols from /lib/tls/libc.so.6...done.
> Loaded symbols for /lib/tls/libc.so.6
> Reading symbols from /lib/ld-linux.so.2...done.
> Loaded symbols for /lib/ld-linux.so.2
> 0xffffe405 in ?? ()
> (gdb) bt
> #0 0xffffe405 in ?? ()
> #1 0xffffd9f8 in ?? ()
> #2 0x4ba3e45d in ___newselect_nocancel () from /lib/tls/libc.so.6
> #3 0x080484fe in myselect ()
> #4 0x00000000 in ?? ()
> (gdb) add-symbol-file-from-memory 0xffffe000
> Reading symbols from shared object read from target memory...done.
> (gdb) bt
> #0 0xffffe405 in __kernel_vsyscall ()
> #1 0x4ba3e45d in ___newselect_nocancel () from /lib/tls/libc.so.6
> #2 0x080484fe in myselect ()
> #3 0x08048565 in func_two ()
> #4 0x0804858e in func_one ()
> #5 0x080485cf in main ()

You also need this patch for gdb 6.3.

H.J.
--- gdb/inftarg.c.attach 2004-11-11 16:46:57.000000000 -0800
+++ gdb/inftarg.c 2005-06-13 13:07:14.000000000 -0700
@@ -211,6 +211,10 @@ child_attach (char *args, int from_tty)

inferior_ptid = pid_to_ptid (pid);
push_target (&deprecated_child_ops);
+
+ /* Do this first, before anything has had a chance to query the
+ inferiors symbol table or similar. */
+ observer_notify_inferior_created (&current_target, from_tty);
}

#if !defined(CHILD_POST_ATTACH)