This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: Demangling and searches
- From: David Carlton <carlton at math dot stanford dot edu>
- To: Paul Hilfinger <hilfingr at CS dot Berkeley dot EDU>
- Cc: Elena Zannoni <ezannoni at redhat dot com>, Adam Fedor <fedor at doc dot com>, GDB Patches <gdb at sources dot redhat dot com>, Daniel Jacobowitz <drow at mvista dot com>
- Date: 07 Jan 2003 16:13:38 -0800
- Subject: Re: Demangling and searches
- References: <200301072354.PAA18230@tully.CS.Berkeley.EDU>
On Tue, 07 Jan 2003 15:54:36 -0800, Paul Hilfinger <hilfingr@CS.Berkeley.EDU> said:
> For some time, I've been meaning to ask a basic question about GDB
> search strategy: for language implementations that mangle their
> identifiers, the standard procedure in GDB at the moment is to
> search for the demangled identifier among the demangled identifiers
> of the symbol table, and to speed this search up by precomputing and
> storing the demangled symbol names. Why?
> We used to do that for Ada mode in GDB, but subsequently changed our
> approach entirely. For Ada, we MANGLE the symbol we're searching
> for and then search among the MANGLED (i.e., raw, unmodified,
> warm-from- the-executable) names.
I'm curious: in Ada, what does the mangling do? In particular, how
much type info does it contain? In C++, the mangled name contains
type info for the arguments for functions; I don't see how, using
GDB's current data structures, to allow us to allow users to, say,
break on a function without requiring them to specify the types of the
arguments, if we took your approach. (Though it might be possible to
modify GDB's data structures to allow that.)
Also, C++ debugging really takes place in a mixed C/C++ environment
(which is really inherent to the nature of C++, given the possibility
of 'extern "C"') so it can be hard to tell if mangling is required in
the first place. Come to think of it, anonymous namespaces would make
life pretty difficult, too.
It's amusing that you raise the issue right now, because several of us
are arguing about this off-list: I'd rather not deal with the fact
that sometimes we demangle and sometimes (partial symbols) we don't,
but other people say that demangling partial symbols would be too
expensive. Daniel Jacobowitz might be coming up with a nice
compromise that allows us to share data when appropriate. I don't see
how to reasonably avoid doing quite a lot of demangling (at the very
least demangling all minimal symbols when loading them in), but maybe
it's possible if you folks are doing it.
David Carlton
carlton@math.stanford.edu