| Index: gdb/demangle.c
|
| diff --git a/gdb/demangle.c b/gdb/demangle.c
|
| index fa6f4a635d62a557a3a368ff486928b3151211b8..2d4b0c5181569240a6874f1c3629679ea7e4efff 100644
|
| --- a/gdb/demangle.c
|
| +++ b/gdb/demangle.c
|
| @@ -1,7 +1,6 @@
|
| /* Basic C++ demangling support for GDB.
|
|
|
| - Copyright (C) 1991-1996, 1998-2001, 2003, 2007-2012 Free Software
|
| - Foundation, Inc.
|
| + Copyright (C) 1991-2013 Free Software Foundation, Inc.
|
|
|
| Written by Fred Fish at Cygnus Support.
|
|
|
| @@ -29,7 +28,7 @@
|
| #include "gdbcmd.h"
|
| #include "demangle.h"
|
| #include "gdb-demangle.h"
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
|
|
| /* Select the default C++ demangling style to use. The default is "auto",
|
| which allows gdb to attempt to pick an appropriate demangling style for
|
| @@ -73,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. */
|
| @@ -107,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++)
|
| {
|
| @@ -121,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
|
| @@ -205,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++)
|
| @@ -214,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."), _("\
|
| @@ -231,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);
|
| }
|
|
|