This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: gdb debugging threads help
Also I tried a c in the gdb and I get this errors:
(gdb) c
Continuing.
Error while mapping shared library sections:
/lib/libc.so.0: No such file or directory.
Error while mapping shared library sections:
/lib/libpthread.so.0: No such file or directory.
Error while mapping shared library sections:
/lib/ld-uClibc.so.0: No such file or directory.
Error while reading shared library symbols:
/lib/libc.so.0: No such file or directory.
Error while reading shared library symbols:
/lib/ld-uClibc.so.0: No such file or directory.
Program exited normally.
(gdb) quit
so even when this libraries are in the target file system I am debugging
remote from my host so on my host these libraries do not exist
under /lib instead they are under target/fs/lib.
> > > on the target:
> > > # gdbserver :5234 simple
> >
> > Is gdbserver linked to libthread_db? Check the build log, or check the
> > gdbserver binary.
>
> I check the config.log and I have this errors when checking for the
> thread_db library:
>
> configure:1510: checking for libthread_db
> configure:1531: gcc -o conftest -g -O2 conftest.c -lthread_db 1>&5
> configure:1596: gcc -o conftest -g -O2 -rdynamic conftest.c
> -lthread_db 1>&5
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_pdwrite'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_pglobal_lookup'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_lsetfpregs'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_getpid'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_lsetregs'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_pdread'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_lgetfpregs'
> /usr/lib/gcc/i486-linux-gnu/3.4.5/../../../../lib/libthread_db.so:
> undefined reference to `ps_lgetregs'
> collect2: ld returned 1 exit status
> configure: failed program was:
> #line 1589 "configure"
> #include "confdefs.h"
>
>
> I see that is wrong that looks for the thread_db library in my host
> libs, it should look in the target libs, so I add the param
> --libdir=/target/libs to the configure and now the config.log doesn't
> say any error about thread_db library and I can compile gdbserver fine.
>
> Which command can I use to see if it is linked against the correct
> thread_db library?? I use a nm -D gdbserver but all I see are the
> symbols from the dynamic libraries not the libraries.
>
> .....
> 0000eeec T target_signal_to_name
> 0000ee90 T target_signal_to_string
> U tcgetattr
> U tcsetattr
> U tcsetpgrp
> U td_symbol_list
> U td_ta_event_addr
> U td_ta_event_getmsg
> U td_ta_new
> U td_ta_set_event
> U td_ta_thr_iter
> U td_thr_event_enable
> U td_thr_get_info
> 0001f42c D the_low_target
> 00020784 B the_target
> 00014664 T thread_db_init
> 00020690 B thread_from_wait
> ......
>
> Now I get a different error from gdb:
>
> on the target:
>
> # gdbserver :5234 simple
> Process simple created; pid = 41
> Listening on port 5234
>
>
> on the host:
>
> GNU gdb 6.3
> 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 "--host=i686-linux --target=arm-linux".
> (gdb) set solib-absolute-prefix /lib
> (gdb) file simple
> Reading symbols
> from /home/trivas/dm320-appro/fs/examples/threads/simple...done.
> (gdb) target remote 192.168.200.199:5234
> Remote debugging using 192.168.200.199:5234
> 0x40000c60 in ?? ()
> warning: Unable to find dynamic linker breakpoint function.
> GDB will be unable to debug shared library initializers
> and track explicitly loaded dynamic code.
> (gdb) info shared
> No shared libraries loaded at this time.
> (gdb)
>
>
> > > (gdb) set solib-absolute-prefix /target/arm-linux/lib
> >
> > That's probably not right. The paths below solib-absolute-prefix
> > should match the target filesystem. So if solib-absolute-prefix
> > is "/target/arm-linux", then the target /lib/ld-linux.so.2 should be in
> > /target/arm-linux/lib/ld-linux.so.2.
> >
> > > (gdb) set solib-search-path /target/arm-linux/lib
> >
> > You should not need to set that.
> >
> > > (gdb) dir /target/arm-linux/lib
> >
> > Or this.
> >
> > > Source directories searched: /target/arm-linux/lib:$cdir:$cwd
> > > (gdb) set endian little
> > > The target is assumed to be little endian
> >
> > Or this.
> >
> > > (gdb) handle SIG32 nostop noprint pass
> > > Signal Stop Print Pass to program Description
> > > SIG32 No No Yes Real-time event 32
> >
> > Don't do that; it never helps.
> >
> > > (gdb) add-symbol-file simple
> > > add symbol table from file "simple" at
> > > (y or n) y
> > > Reading symbols
> > > from /home/trivas/dm320-appro/fs/examples/threads/simple...done.
> >
> > Don't do this either. Use "file simple", and do it before issuing the
> > "target remote" command.
> >
> > > and if I try a info shared it says "No shared libraries loaded at this
> > > time"
> >
> > Thread debugging will not work until this works. It should show you
> > the list of libraries and say that they have symbols loaded (at main,
> > not when you first connect).
> >
--
Teresa R. Rivas
teresa.rivas@cadenux.com
Cadenux, LLC