Fix completer.c FIXME, and invalid pointer to pointer conversion.
As mentioned in the previous patch, I grepped for "\*\*) &" and found one hit in completer.c. I was about to post a patch that simply made current_demangling_style_string const, and cast away constness at the xfree site. However, looking deeper, it seem to be there's a lot of dead code in the file. First, all external callers of set_demangling_style are found in the stabs reader, commented out for over 12 years: http://sourceware.org/ml/gdb-patches/2000-12/msg00214.html I don't think it's likely we'll ever make the older mangling schemes work for stabs. If we do, we can rediscuss the approach then. Then, set_demangling_command has special handling for unknown demangling styles, but "set demangle-style" is an enum command, and with those, the user can only specify a known enumeration value, by design: (gdb) set demangle-style gangnam-style Undefined item: "gangnam-style". This patch removes all that dead code, then makes current_demangling_style_string point to an element of demangling_style_names, as the FIXME suggests, and then makes current_demangling_style_string, removing the need for the 'const char **' cast. gdb/ 2013-03-13 Pedro Alves <palves@redhat.com> * dbxread.c (read_ofile_symtab, process_one_symbol): Remove commented out code. * demangle.c (current_demangling_style_string): Make it const. (set_demangling_command): Assert the demangling style is known. Remove all handling of unknown styles. Set 'current_demangling_style_string' to an element of the demangling_style_names array. (set_demangling_style): Delete. (_initialize_demangler): Set current_demangling_style_string to the element of the demangling_style_names array that corresponds to the default demangling style. Remove FIXME note. Don't call set_demangling_style. * gdb-demangle.h (set_demangling_style): Remove declaration.
This commit is contained in:
parent
4fa7e2ff22
commit
10217050c8
@ -1,3 +1,19 @@
|
||||
2013-03-13 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* dbxread.c (read_ofile_symtab, process_one_symbol): Remove
|
||||
commented out code.
|
||||
* demangle.c (current_demangling_style_string): Make it const.
|
||||
(set_demangling_command): Assert the demangling style is known.
|
||||
Remove all handling of unknown styles. Set
|
||||
'current_demangling_style_string' to an element of the
|
||||
demangling_style_names array.
|
||||
(set_demangling_style): Delete.
|
||||
(_initialize_demangler): Set current_demangling_style_string to the
|
||||
element of the demangling_style_names array that corresponds to
|
||||
the default demangling style. Remove FIXME note. Don't call
|
||||
set_demangling_style.
|
||||
* gdb-demangle.h (set_demangling_style): Remove declaration.
|
||||
|
||||
2013-03-13 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* ada-lang.c (struct add_partial_datum) <text, text0, word>: Make
|
||||
|
@ -2580,21 +2580,6 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
|
||||
if (strncmp (tempstring, "__gnu_compiled", 14) == 0)
|
||||
processing_gcc_compilation = 2;
|
||||
}
|
||||
|
||||
/* Try to select a C++ demangling based on the compilation unit
|
||||
producer. */
|
||||
|
||||
#if 0
|
||||
/* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
|
||||
know whether it will use the old style or v3 mangling. */
|
||||
if (processing_gcc_compilation)
|
||||
{
|
||||
if (AUTO_DEMANGLING)
|
||||
{
|
||||
set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2660,15 +2645,6 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
|
||||
processing_gcc_compilation = 1;
|
||||
else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
|
||||
processing_gcc_compilation = 2;
|
||||
|
||||
#if 0
|
||||
/* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
|
||||
know whether it will use the old style or v3 mangling. */
|
||||
if (AUTO_DEMANGLING)
|
||||
{
|
||||
set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (type & N_EXT || type == (unsigned char) N_TEXT
|
||||
|| type == (unsigned char) N_NBTEXT)
|
||||
@ -3270,15 +3246,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
||||
if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0)
|
||||
{
|
||||
processing_gcc_compilation = 2;
|
||||
#if 0 /* Works, but is experimental. -fnf */
|
||||
/* For now, stay with AUTO_DEMANGLING for g++ output, as
|
||||
we don't know whether it will use the old style or v3
|
||||
mangling. */
|
||||
if (AUTO_DEMANGLING)
|
||||
{
|
||||
set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
n_opt_found = 1;
|
||||
|
@ -72,7 +72,7 @@ show_asm_demangle (struct ui_file *file, int from_tty,
|
||||
"set demangle-style" command, printed as part of the output by the
|
||||
"show demangle-style" command. */
|
||||
|
||||
static char *current_demangling_style_string;
|
||||
static const char *current_demangling_style_string;
|
||||
|
||||
/* The array of names of the known demanglyng styles. Generated by
|
||||
_initialize_demangler from libiberty_demanglers[] array. */
|
||||
@ -106,13 +106,14 @@ static void
|
||||
set_demangling_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
||||
{
|
||||
const struct demangler_engine *dem;
|
||||
int i;
|
||||
|
||||
/* First just try to match whatever style name the user supplied with
|
||||
one of the known ones. Don't bother special casing for an empty
|
||||
name, we just treat it as any other style name that doesn't match.
|
||||
If we match, update the current demangling style enum. */
|
||||
|
||||
for (dem = libiberty_demanglers;
|
||||
for (dem = libiberty_demanglers, i = 0;
|
||||
dem->demangling_style != unknown_demangling;
|
||||
dem++)
|
||||
{
|
||||
@ -120,60 +121,15 @@ set_demangling_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
||||
dem->demangling_style_name) == 0)
|
||||
{
|
||||
current_demangling_style = dem->demangling_style;
|
||||
current_demangling_style_string = demangling_style_names[i];
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
/* Check to see if we found a match. If not, gripe about any non-empty
|
||||
style name and supply a list of valid ones. FIXME: This should
|
||||
probably be done with some sort of completion and with help. */
|
||||
|
||||
if (dem->demangling_style == unknown_demangling)
|
||||
{
|
||||
if (*current_demangling_style_string != '\0')
|
||||
{
|
||||
printf_unfiltered (_("Unknown demangling style `%s'.\n"),
|
||||
current_demangling_style_string);
|
||||
}
|
||||
printf_unfiltered (_("The currently understood settings are:\n\n"));
|
||||
for (dem = libiberty_demanglers;
|
||||
dem->demangling_style != unknown_demangling;
|
||||
dem++)
|
||||
{
|
||||
printf_unfiltered ("%-10s %s\n", dem->demangling_style_name,
|
||||
dem->demangling_style_doc);
|
||||
if (dem->demangling_style == current_demangling_style)
|
||||
{
|
||||
xfree (current_demangling_style_string);
|
||||
current_demangling_style_string =
|
||||
xstrdup (dem->demangling_style_name);
|
||||
}
|
||||
}
|
||||
if (current_demangling_style == unknown_demangling)
|
||||
{
|
||||
/* This can happen during initialization if gdb is compiled with
|
||||
a DEMANGLING_STYLE value that is unknown, so pick the first
|
||||
one as the default. */
|
||||
current_demangling_style = libiberty_demanglers[0].demangling_style;
|
||||
current_demangling_style_string =
|
||||
xstrdup (libiberty_demanglers[0].demangling_style_name);
|
||||
warning (_("`%s' style demangling chosen as the default."),
|
||||
current_demangling_style_string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* See documentation in gdb-demangle.h. */
|
||||
|
||||
void
|
||||
set_demangling_style (char *style)
|
||||
{
|
||||
if (current_demangling_style_string != NULL)
|
||||
{
|
||||
xfree (current_demangling_style_string);
|
||||
}
|
||||
current_demangling_style_string = xstrdup (style);
|
||||
set_demangling_command ((char *) NULL, 0, (struct cmd_list_element *) NULL);
|
||||
/* We should have found a match, given we only add known styles to
|
||||
the enumeration list. */
|
||||
gdb_assert (dem->demangling_style != unknown_demangling);
|
||||
}
|
||||
|
||||
/* G++ uses a special character to indicate certain internal names. Which
|
||||
@ -204,7 +160,8 @@ _initialize_demangler (void)
|
||||
{
|
||||
int i, ndems;
|
||||
|
||||
/* Fill the demangling_style_names[] array. */
|
||||
/* Fill the demangling_style_names[] array, and set the default
|
||||
demangling style chosen at compilation time. */
|
||||
for (ndems = 0;
|
||||
libiberty_demanglers[ndems].demangling_style != unknown_demangling;
|
||||
ndems++)
|
||||
@ -213,8 +170,14 @@ _initialize_demangler (void)
|
||||
for (i = 0;
|
||||
libiberty_demanglers[i].demangling_style != unknown_demangling;
|
||||
i++)
|
||||
demangling_style_names[i] =
|
||||
xstrdup (libiberty_demanglers[i].demangling_style_name);
|
||||
{
|
||||
demangling_style_names[i]
|
||||
= xstrdup (libiberty_demanglers[i].demangling_style_name);
|
||||
|
||||
if (current_demangling_style_string == NULL
|
||||
&& strcmp (DEFAULT_DEMANGLING_STYLE, demangling_style_names[i]) == 0)
|
||||
current_demangling_style_string = demangling_style_names[i];
|
||||
}
|
||||
|
||||
add_setshow_boolean_cmd ("demangle", class_support, &demangle, _("\
|
||||
Set demangling of encoded C++/ObjC names when displaying symbols."), _("\
|
||||
@ -230,20 +193,13 @@ Show demangling of C++/ObjC names in disassembly listings."), NULL,
|
||||
show_asm_demangle,
|
||||
&setprintlist, &showprintlist);
|
||||
|
||||
/* FIXME: cagney/2005-02-20: The code implementing this variable are
|
||||
malloc-ing and free-ing current_demangling_style_string when it
|
||||
should instead just point to an element of
|
||||
demangling_style_names. */
|
||||
add_setshow_enum_cmd ("demangle-style", class_support,
|
||||
demangling_style_names,
|
||||
(const char **) ¤t_demangling_style_string, _("\
|
||||
¤t_demangling_style_string, _("\
|
||||
Set the current C++ demangling style."), _("\
|
||||
Show the current C++ demangling style."), _("\
|
||||
Use `set demangle-style' without arguments for a list of demangling styles."),
|
||||
set_demangling_command,
|
||||
show_demangling_style_names,
|
||||
&setlist, &showlist);
|
||||
|
||||
/* Set the default demangling style chosen at compilation time. */
|
||||
set_demangling_style (DEFAULT_DEMANGLING_STYLE);
|
||||
}
|
||||
|
@ -28,9 +28,6 @@ extern int demangle;
|
||||
DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
|
||||
extern int asm_demangle;
|
||||
|
||||
/* Fake a "set demangle-style" command. */
|
||||
extern void set_demangling_style (char *);
|
||||
|
||||
/* Check if a character is one of the commonly used C++ marker characters. */
|
||||
extern int is_cplus_marker (int);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user