From: Michael Veksler <mveksler@techunix.technion.ac.il>
To: Frederic RISS <frederic.riss@st.com>, gdb@sourceware.org
Subject: Re: Get versioned minsyms from dynamic symtab (Was: Re: How to call operator<< functions?)
Date: Thu, 31 Aug 2006 19:48:00 -0000 [thread overview]
Message-ID: <44F73D1B.6010507@tx.technion.ac.il> (raw)
In-Reply-To: <20060831165738.GA6529@nevyn.them.org>
Daniel Jacobowitz wrote:
> On Thu, Aug 31, 2006 at 06:48:04PM +0200, Frederic RISS wrote:
>
>> What happens is that you get 2 definitions of std::cout in the debug
>> information of your example. One definition for each file. The gotcha is
>> that neither of these definitions are complete. They're just empty
>>
...
> This is a deliberate choice on GCC's part, to reduce overly excessive
> debug information. There've been arguments about it in the past. My
>
From bits/ostream.tcc header file:
// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
#if _GLIBCXX_EXTERN_TEMPLATE
extern template class basic_ostream<char>;
> feeling is that we will end up with something like a -gfull argument
> to force the extra information to be emitted. GDB needs to work as
> well as possible anyway.
>
>
Reading it more, one can force full instantiation of ostream:
g++ -g -D_GLIBCXX_EXTERN_TEMPLATE=0 myCout.cpp cout-gdb.cpp
Now everything works, and it is not that much bigger.
>> The first 'p x.Print(std::cout)' works because at this point, the
>> debugger has only read the full debug information of the first file.
>> This file contains a definition of std::cout and the definition of
>> B::Print which both point to the same instance of the std::ostream type.
>> Being the same instance, even if the type is incomplete GDB resolves the
>> overload correctly.
>> After you've referenced 'myCout' which is defined in the second file,
>> the debug info of the latter has been read, bringing a second definition
>> of std::cout in the global scope. This second definition is found by
>> further lookups of this symbol, and this time, the symbol type isn't the
>> same instance as before. GDB tries to compare to incomplete types and of
>> course it fails...
>>
>
> This is a problem with GDB, that I've always been amazed we didn't
> hit more often. It's a very difficult problem and I don't really know
> what we should be doing about it. I don't know if there's a standard
> term for this, but I've called it type unification in the past.
>
> We need some way to figure out that these are the same type, to the
> best of our knowledge.
>
>
It sounds similar to the problem of GDB on AIX (with XCOFF). There is a
PR on this:
http://sources.redhat.com/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gdb&pr=1170&return_url=http%3A%2F%2Fsources.redhat.com%2Fcgi-bin%2Fgnatsweb.pl%3Fdatabase%3Dgdb%26cmd%3Dsubmit%2520query%26category%3Dall%26severity%3Dall%26priority%3Dall%26responsible%3Dall%26submitter_id%3Dall%26state%3Dall%26ignoreclosed%3DIgnore%2520Closed%26class%3Dall%26synopsis%3D%26multitext%3DAIX%26columns%3Dcategory%26columns%3Dstate%26columns%3Dclass%26columns%3Dresponsible%26columns%3Dsynopsis%26displaydate%3DDisplay%2520Current%2520Date%26sortby%3DResponsible%26.cgifields%3Ddisplaydate%26.cgifields%3Dignoreclosed%26.cgifields%3Doriginatedbyme%26.cgifields%3Dcolumns
It happens when debug information is ordered in a different way than GDB
expects. This is something that native /bin/as does, and is not a fault
of gcc. According to X-COFF spec, the assembler is allowed to do this
reordering. I guess that this issue happens in different places GDB, but
it still has similar sound - GDB is sensitive to the order it reads
debug information.
--
Michael
next prev parent reply other threads:[~2006-08-31 19:48 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-30 10:11 How to call operator<< functions? Michael Veksler
2006-08-30 11:13 ` Frederic RISS
2006-08-30 13:30 ` Frederic RISS
2006-08-30 13:40 ` Breakpoint Handling in GDB Veenu Verma (AS/EAB)
2006-08-30 13:43 ` Daniel Jacobowitz
2006-08-30 20:30 ` Michael Snyder
2006-08-31 11:34 ` Get versioned minsyms from dynamic symtab (Was: Re: How to call operator<< functions?) Frederic RISS
2006-08-31 12:09 ` Michael Veksler
2006-08-31 12:26 ` Frederic RISS
2006-08-31 13:02 ` Michael Veksler
2006-08-31 13:23 ` Frederic RISS
2006-08-31 16:48 ` Frederic RISS
2006-08-31 16:57 ` Daniel Jacobowitz
2006-08-31 17:41 ` Frédéric Riss
2006-08-31 17:45 ` Daniel Jacobowitz
2006-08-31 19:48 ` Michael Veksler [this message]
2006-08-31 19:52 ` Daniel Jacobowitz
2006-08-30 12:46 ` How to call operator<< functions? Daniel Jacobowitz
2006-08-30 20:05 ` Michael Veksler
2006-08-30 20:24 ` Daniel Jacobowitz
2006-08-30 20:45 ` Michael Veksler
2006-08-30 20:54 ` Daniel Jacobowitz
2006-08-31 12:05 ` Michael Veksler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44F73D1B.6010507@tx.technion.ac.il \
--to=mveksler@techunix.technion.ac.il \
--cc=frederic.riss@st.com \
--cc=gdb@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox