Demangling broken (was: Re: [PATCH] Demangler woes with current CVS and type names)
H . J . Lu
hjl@lucon.org
Sat Feb 2 11:19:00 GMT 2002
More information about the Binutils mailing list
Sat Feb 2 11:19:00 GMT 2002
- Previous message (by thread): Demangling broken (was: Re: [PATCH] Demangler woes with current CVS and type names)
- Next message (by thread): Demangling broken (was: Re: [PATCH] Demangler woes with current CVS and type names)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sat, Feb 02, 2002 at 08:53:39AM +0000, Jason Merrill wrote: > >>>>> "H" == H J Lu <hjl@lucon.org> writes: > > > (demangle_v3_type): New. > > (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for > > command line symbol or if demangle_v3_type is not zero. > > * testsuite/Makefile.in (test-filter): Set demangle_v3_type to > > 1 in test-us.c. > > Instead, change regress-demangle to pass the mangled strings on the command > line. > Like this? H.J. ---- 2002-02-02 H.J. Lu (hjl@gnu.org) * demangle.h (cplus_demangle_v3_type): New prototype. 2002-02-02 H.J. Lu (hjl@gnu.org) * cp-demangle.c (cp_demangle_type): Do not protect with IN_LIBGCC2. (cplus_demangle_v3_all): New. (cplus_demangle_v3): Call cplus_demangle_v3_all. (cplus_demangle_v3_type): Call cplus_demangle_v3_all. * cplus-dem.c (cplus_demangle_v3_p): New function pointer. Initialized to cplus_demangle_v3. (cplus_demangle_with_style): Call cplus_demangle_v3_p instead of cplus_demangle_v3. (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for command line symbol. * testsuite/regress-demangle: Pass the mangled name at the command line. --- binutils/include/demangle.h.v3 Fri Dec 7 11:08:35 2001 +++ binutils/include/demangle.h Fri Feb 1 16:15:15 2002 @@ -143,6 +143,11 @@ cplus_demangle_name_to_style PARAMS ((co extern char* cplus_demangle_v3 PARAMS ((const char* mangled)); +/* V3 ABI demangling entry points, defined in cp-demangle.c. Also + demagle types. */ +extern char* +cplus_demangle_v3_type PARAMS ((const char* mangled)); + extern char* java_demangle_v3 PARAMS ((const char* mangled)); --- binutils/libiberty/cp-demangle.c.v3 Fri Feb 1 00:10:51 2002 +++ binutils/libiberty/cp-demangle.c Fri Feb 1 16:15:15 2002 @@ -938,10 +938,10 @@ static status_t demangle_discriminator PARAMS ((demangling_t, int)); static status_t cp_demangle PARAMS ((const char *, dyn_string_t, int)); -#ifdef IN_LIBGCC2 static status_t cp_demangle_type PARAMS ((const char*, dyn_string_t)); -#endif +static char* cplus_demangle_v3_all + PARAMS ((const char*, int)); /* When passed to demangle_bare_function_type, indicates that the function's return type is not encoded before its parameter types. */ @@ -3533,7 +3533,6 @@ cp_demangle (name, result, style) dyn_string_t. On success, returns STATUS_OK. On failiure, returns an error message, and the contents of RESULT are unchanged. */ -#ifdef IN_LIBGCC2 static status_t cp_demangle_type (type_name, result) const char* type_name; @@ -3571,6 +3570,7 @@ cp_demangle_type (type_name, result) return status; } +#ifdef IN_LIBGCC2 extern char *__cxa_demangle PARAMS ((const char *, char *, size_t *, int *)); /* ia64 ABI-mandated entry point in the C++ runtime library for performing @@ -3690,17 +3690,43 @@ char * cplus_demangle_v3 (mangled) const char* mangled; { + return cplus_demangle_v3_all (mangled, 0); +} + +char * +cplus_demangle_v3_type (mangled) + const char* mangled; +{ + return cplus_demangle_v3_all (mangled, 1); +} + +static char * +cplus_demangle_v3_all (mangled, type) + const char* mangled; + int type; +{ dyn_string_t demangled; status_t status; - /* If this isn't a mangled name, don't pretend to demangle it. */ - if (strncmp (mangled, "_Z", 2) != 0) - return NULL; + if (mangled[0] == '_' && mangled[1] == 'Z') + /* It is not a type. */ + type = 0; + else + { + /* It is a type. Stop if we don't want to demangle types. */ + if (!type) + return NULL; + } /* Create a dyn_string to hold the demangled name. */ demangled = dyn_string_new (0); /* Attempt the demangling. */ - status = cp_demangle ((char *) mangled, demangled, 0); + if (!type) + /* Appears to be a function or variable name. */ + status = cp_demangle (mangled, demangled, 0); + else + /* Try to demangle it as the name of a type. */ + status = cp_demangle_type (mangled, demangled); if (STATUS_NO_ERROR (status)) /* Demangling succeeded. */ --- binutils/libiberty/cplus-dem.c.v3 Thu Jan 31 16:14:49 2002 +++ binutils/libiberty/cplus-dem.c Sat Feb 2 11:12:01 2002 @@ -512,6 +512,9 @@ do_hpacc_template_literal PARAMS ((struc static int snarf_numeric_literal PARAMS ((const char **, string *)); +static char* (*cplus_demangle_v3_p) PARAMS ((const char* mangled)) + = cplus_demangle_v3; + /* There is a TYPE_QUAL value for each type qualifier. They can be combined by bitwise-or to form the complete set of qualifiers for a type. */ @@ -946,7 +949,7 @@ cplus_demangle_with_style (mangled, styl if (libiberty_demanglers [style].demangling_style & (DMGL_GNU_V3 | DMGL_AUTO)) { - ret = cplus_demangle_v3 (mangled); + ret = cplus_demangle_v3_p (mangled); if (ret || (libiberty_demanglers [style].demangling_style & DMGL_GNU_V3)) return ret; @@ -5330,6 +5333,7 @@ main (argc, argv) if (optind < argc) { + cplus_demangle_v3_p = cplus_demangle_v3_type; for ( ; optind < argc; optind++) { demangle_it (argv[optind]); --- binutils/libiberty/testsuite/regress-demangle.v3 Tue Jul 18 17:11:02 2000 +++ binutils/libiberty/testsuite/regress-demangle Sat Feb 2 11:11:28 2002 @@ -10,7 +10,7 @@ sed -e '/^#/ d' "$1" | ( read mangled read demangled - x="`echo $mangled | ./test-filter $type`" + x="`./test-filter $type $mangled`" count=`expr $count + 1` if test "x$x" != "x$demangled"; then failures=`expr $failures + 1`
- Previous message (by thread): Demangling broken (was: Re: [PATCH] Demangler woes with current CVS and type names)
- Next message (by thread): Demangling broken (was: Re: [PATCH] Demangler woes with current CVS and type names)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list