This is the mail archive of the gdb@sourceware.cygnus.com mailing list for the GDB project. See the GDB home page for more information.


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

Re: Name Mangling from Solaris CC


Hi,

Jason Molenda wrote:
> 
> On Mon, May 04, 1998 at 05:44:18PM -0400, Jake Colman wrote:
> >
> > Does gdb 4.17 debug output from Solaris 2.4 CC compiler?  I tried using it and
> > it appears that gdb does not demangle that compiler's function names.  Is this
> > true? I would have thought that 4.17 would have added that support.
> 
> I don't know of any support for the Solaris C++ compiler's name mangling
> in GDB.  I don't know of anybody currently working on this support.
> GDB does have support for different name mangling styles (there is code
> in GDB for the g++ , Lucid, and ARM styles).
> 
> If you would like to add support for the Solaris C++ name mangling,
> and can do so from publically available documentation from Sun or by
> examination of the compiler's output, I would be interested in adding
> this support.  Talk to me directly if you're in a position to do this
> and are interested.

Hmm, is this really such a big deal of adding it? gdb correctly outputs
the non demangled C++ names on Solaris. Cut&Paste from gdb output to
dem(1) on Solaris yields the proper demangled name. How about just
adding a call to 

cplus_demangle(const char *in, char *out, size_t size);

in the Solaris case and invoke this with a new option to the demangling
style?

gorgo% uname -a
SunOS gorgo.bk.bosch.de 5.5.1 Generic_103640-12 sun4u sparc SUNW,Ultra-1
gorgo% man demangle
DEMANGLE(3)       MISC. REFERENCE MANUAL PAGES        DEMANGLE(3)
 
 
 
NAME
     demangle - decode a C++ encoded symbol name
 
SYNOPSIS
     CC [ flag ... ] file ... [ library ...]
     #include <demangle.h>
     cplus_demangle(const char *in, char *out, size_t size);
 
DESCRIPTION
     cplus_demangle() decodes  the  string  in,  and  copies  the
     result  to  out.   in points to a string representing a name
     mangled by the C++ compiler. out is a buffer of size  bytes,
     that  you specify. If the output buffer is too small to con-
     tain   the   demangled   name,   cplus_demangle()    returns
     DEMANGLE_ESPACE,  and  the  contents  of  out are undefined.
     Otherwise,  if  the  name  is  a  valid  C++  mangled  name,
     cplus_demangle()  returns  0.  If in is not a valid C++ man-
     gled name, it is copied unchanged to out, and  the  function
     returns DEMANGLE_ENAME.
 
     cplus_demangle() operates on mangled names generated by  C++
     3.0.1 and all versions of C++ 4.0 and above.
 
SEE ALSO
     CC(1)

  Guenther