merge from gcc
This commit is contained in:
parent
6ca652b0db
commit
42da15d6b3
6 changed files with 66 additions and 9 deletions
|
@ -1,3 +1,7 @@
|
|||
2002-02-02 H.J. Lu (hjl@gnu.org)
|
||||
|
||||
* demangle.h (cplus_demangle_v3_type): New prototype.
|
||||
|
||||
2002-01-31 Ivan Guzvinec <ivang@opencores.org>
|
||||
|
||||
* dis-asm.h : Add support for or32 targets
|
||||
|
|
|
@ -127,6 +127,11 @@ cplus_demangle_name_to_style PARAMS ((const char *name));
|
|||
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));
|
||||
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
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.
|
||||
|
||||
2002-02-01 H.J. Lu <hjl@gnu.org>
|
||||
|
||||
* cp-demangle.c (cp_demangle_type): Call demangling_new with
|
||||
|
|
|
@ -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
|
||||
|
@ -3689,18 +3689,44 @@ __cxa_demangle (mangled_name, output_buffer, length, status)
|
|||
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)
|
||||
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. */
|
||||
|
|
|
@ -478,6 +478,9 @@ do_hpacc_template_literal PARAMS ((struct work_stuff *, const char **, string *)
|
|||
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. */
|
||||
|
@ -911,7 +914,7 @@ cplus_demangle (mangled, options)
|
|||
/* The V3 ABI demangling is implemented elsewhere. */
|
||||
if (GNU_V3_DEMANGLING || AUTO_DEMANGLING)
|
||||
{
|
||||
ret = cplus_demangle_v3 (mangled);
|
||||
ret = cplus_demangle_v3_p (mangled);
|
||||
if (ret || GNU_V3_DEMANGLING)
|
||||
return ret;
|
||||
}
|
||||
|
@ -5086,6 +5089,7 @@ main (argc, argv)
|
|||
|
||||
if (optind < argc)
|
||||
{
|
||||
cplus_demangle_v3_p = cplus_demangle_v3_type;
|
||||
for ( ; optind < argc; optind++)
|
||||
{
|
||||
demangle_it (argv[optind]);
|
||||
|
|
|
@ -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`
|
||||
|
|
Loading…
Reference in a new issue