This is the mail archive of the gdb@sourceware.org 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: 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


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