demangle.h (enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>) (enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS>): New.

include
2009-07-17  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* demangle.h
	(enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
	(enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS>):
	New.
libiberty
2009-07-17  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* cp-demangle.c (d_print_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
	(d_print_comp <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS): New.
	(d_make_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
	(d_make_comp <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS): New.
	(d_demangle_callback): The variable type is now declared as enum.
	Replace parser of _GLOBAL_ symbols by a d_make_comp call.

From-SVN: r149756
This commit is contained in:
Jan Kratochvil 2009-07-17 19:09:54 +00:00 committed by Tom Tromey
parent a0ce0e6e57
commit 23b1a789fd
4 changed files with 63 additions and 18 deletions

View File

@ -1,3 +1,10 @@
2009-07-17 Jan Kratochvil <jan.kratochvil@redhat.com>
* demangle.h
(enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
(enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS>):
New.
2009-07-09 Jakub Jelinek <jakub@redhat.com>
* dwarf2.h (enum dwarf_location_atom): Add DW_OP_implicit_value

View File

@ -377,6 +377,10 @@ enum demangle_component_type
DEMANGLE_COMPONENT_CHARACTER,
/* A decltype type. */
DEMANGLE_COMPONENT_DECLTYPE,
/* Global constructors keyed to name. */
DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,
/* Global destructors keyed to name. */
DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS,
/* A pack expansion. */
DEMANGLE_COMPONENT_PACK_EXPANSION
};

View File

@ -1,3 +1,12 @@
2009-07-17 Jan Kratochvil <jan.kratochvil@redhat.com>
* cp-demangle.c (d_print_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
(d_print_comp <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS): New.
(d_make_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
(d_make_comp <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS): New.
(d_demangle_callback): The variable type is now declared as enum.
Replace parser of _GLOBAL_ symbols by a d_make_comp call.
2009-06-21 Jakub Jelinek <jakub@redhat.com>
* hashtab.c (htab_traverse): Don't call htab_expand for

View File

@ -819,6 +819,8 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
case DEMANGLE_COMPONENT_JAVA_RESOURCE:
case DEMANGLE_COMPONENT_DECLTYPE:
case DEMANGLE_COMPONENT_PACK_EXPANSION:
case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
if (left == NULL)
return NULL;
break;
@ -4054,6 +4056,16 @@ d_print_comp (struct d_print_info *dpi,
return;
}
case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
d_append_string (dpi, "global constructors keyed to ");
d_print_comp (dpi, dc->u.s_binary.left);
return;
case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
d_append_string (dpi, "global destructors keyed to ");
d_print_comp (dpi, dc->u.s_binary.left);
return;
default:
d_print_error (dpi);
return;
@ -4484,33 +4496,30 @@ static int
d_demangle_callback (const char *mangled, int options,
demangle_callbackref callback, void *opaque)
{
int type;
enum
{
DCT_TYPE,
DCT_MANGLED,
DCT_GLOBAL_CTORS,
DCT_GLOBAL_DTORS
}
type;
struct d_info di;
struct demangle_component *dc;
int status;
if (mangled[0] == '_' && mangled[1] == 'Z')
type = 0;
type = DCT_MANGLED;
else if (strncmp (mangled, "_GLOBAL_", 8) == 0
&& (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
&& (mangled[9] == 'D' || mangled[9] == 'I')
&& mangled[10] == '_')
{
const char *intro;
intro = (mangled[9] == 'I')
? "global constructors keyed to "
: "global destructors keyed to ";
callback (intro, strlen (intro), opaque);
callback (mangled + 11, strlen (mangled + 11), opaque);
return 1;
}
type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS;
else
{
if ((options & DMGL_TYPES) == 0)
return 0;
type = 1;
type = DCT_TYPE;
}
cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
@ -4527,10 +4536,26 @@ d_demangle_callback (const char *mangled, int options,
di.subs = alloca (di.num_subs * sizeof (*di.subs));
#endif
if (type)
dc = cplus_demangle_type (&di);
else
dc = cplus_demangle_mangled_name (&di, 1);
switch (type)
{
case DCT_TYPE:
dc = cplus_demangle_type (&di);
break;
case DCT_MANGLED:
dc = cplus_demangle_mangled_name (&di, 1);
break;
case DCT_GLOBAL_CTORS:
case DCT_GLOBAL_DTORS:
d_advance (&di, 11);
dc = d_make_comp (&di,
(type == DCT_GLOBAL_CTORS
? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS
: DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS),
d_make_name (&di, d_str (&di), strlen (d_str (&di))),
NULL);
d_advance (&di, strlen (d_str (&di)));
break;
}
/* If DMGL_PARAMS is set, then if we didn't consume the entire
mangled string, then we didn't successfully demangle it. If