This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Why type = <data variable, no debug info>?
On Sat, Oct 21, 2006 at 06:20:23AM +0300, Munzir Taha (???????? ????) wrote:
> (gdb) p n
> $2 = 2
> (gdb) whatis errno
> type = <data variable, no debug info>
n is a variable in your program, which you compiled with -g. errno is
a variable in the C library, which does not contain debugging
information.
On Fri, Oct 20, 2006 at 08:51:10PM -0700, Brian Dessent wrote:
> "Munzir Taha (???? ??)" wrote:
> >
> > Hi, in this small program logic tells me that errno and n should have the same
> > value displayed in gdb. Am I missing something obvious?
>
> You're probably running into the fact that on modern glibc errno is a
> TLS symbol, not a regular one. This means it can take on a different
> value in each thread, and thus is accessed through an indirection.
>
> You might get better debugging ability if you compile with -ggdb3
> instead of just -g, which gives gdb some additional information. I
> believe that without any debug information in the binary, gdb cannot do
> anything about TLS symbols, but I'm not sure. See also the proposed
> patch <http://sourceware.org/ml/gdb-patches/2006-08/threads.html#00187>
> and/or <https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337>.
-g3 will help (because you'll get __errno_location), but other than
that this is right for the wrong reasons. You're right that it's a TLS
symbol, but that's not why its type is wrong.
Anyway, you'll note a revised version of support for TLS symbols
without debug info has already been committed, but Jan's changes for
TLS symbols in single threaded programs are much thornier.
--
Daniel Jacobowitz
CodeSourcery