Home | History | Annotate | Line # | Download | only in gdb
cp-support.c revision 1.1.1.9
      1      1.1  christos /* Helper routines for C++ support in GDB.
      2  1.1.1.9  christos    Copyright (C) 2002-2024 Free Software Foundation, Inc.
      3      1.1  christos 
      4      1.1  christos    Contributed by MontaVista Software.
      5      1.1  christos 
      6      1.1  christos    This file is part of GDB.
      7      1.1  christos 
      8      1.1  christos    This program is free software; you can redistribute it and/or modify
      9      1.1  christos    it under the terms of the GNU General Public License as published by
     10      1.1  christos    the Free Software Foundation; either version 3 of the License, or
     11      1.1  christos    (at your option) any later version.
     12      1.1  christos 
     13      1.1  christos    This program is distributed in the hope that it will be useful,
     14      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16      1.1  christos    GNU General Public License for more details.
     17      1.1  christos 
     18      1.1  christos    You should have received a copy of the GNU General Public License
     19      1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     20      1.1  christos 
     21      1.1  christos #include "cp-support.h"
     22  1.1.1.9  christos #include "language.h"
     23      1.1  christos #include "demangle.h"
     24  1.1.1.9  christos #include "cli/cli-cmds.h"
     25      1.1  christos #include "dictionary.h"
     26      1.1  christos #include "objfiles.h"
     27      1.1  christos #include "frame.h"
     28      1.1  christos #include "symtab.h"
     29      1.1  christos #include "block.h"
     30      1.1  christos #include "complaints.h"
     31      1.1  christos #include "gdbtypes.h"
     32      1.1  christos #include "expression.h"
     33      1.1  christos #include "value.h"
     34      1.1  christos #include "cp-abi.h"
     35  1.1.1.4  christos #include "namespace.h"
     36  1.1.1.2  christos #include <signal.h>
     37  1.1.1.7  christos #include "gdbsupport/gdb_setjmp.h"
     38  1.1.1.9  christos #include "gdbsupport/gdb-safe-ctype.h"
     39  1.1.1.7  christos #include "gdbsupport/selftest.h"
     40  1.1.1.7  christos #include "gdbsupport/gdb-sigmask.h"
     41  1.1.1.7  christos #include <atomic>
     42  1.1.1.7  christos #include "event-top.h"
     43  1.1.1.7  christos #include "run-on-main-thread.h"
     44  1.1.1.8  christos #include "typeprint.h"
     45  1.1.1.9  christos #include "inferior.h"
     46      1.1  christos 
     47      1.1  christos #define d_left(dc) (dc)->u.s_binary.left
     48      1.1  christos #define d_right(dc) (dc)->u.s_binary.right
     49      1.1  christos 
     50      1.1  christos /* Functions related to demangled name parsing.  */
     51      1.1  christos 
     52      1.1  christos static unsigned int cp_find_first_component_aux (const char *name,
     53      1.1  christos 						 int permissive);
     54      1.1  christos 
     55      1.1  christos static void demangled_name_complaint (const char *name);
     56      1.1  christos 
     57  1.1.1.6  christos /* Functions related to overload resolution.  */
     58      1.1  christos 
     59      1.1  christos static void overload_list_add_symbol (struct symbol *sym,
     60  1.1.1.6  christos 				      const char *oload_name,
     61  1.1.1.6  christos 				      std::vector<symbol *> *overload_list);
     62      1.1  christos 
     63  1.1.1.6  christos static void add_symbol_overload_list_using
     64  1.1.1.6  christos   (const char *func_name, const char *the_namespace,
     65  1.1.1.6  christos    std::vector<symbol *> *overload_list);
     66  1.1.1.6  christos 
     67  1.1.1.6  christos static void add_symbol_overload_list_qualified
     68  1.1.1.6  christos   (const char *func_name,
     69  1.1.1.6  christos    std::vector<symbol *> *overload_list);
     70      1.1  christos 
     71      1.1  christos /* The list of "maint cplus" commands.  */
     72      1.1  christos 
     73      1.1  christos struct cmd_list_element *maint_cplus_cmd_list = NULL;
     74      1.1  christos 
     75      1.1  christos static void
     76      1.1  christos   replace_typedefs (struct demangle_parse_info *info,
     77      1.1  christos 		    struct demangle_component *ret_comp,
     78      1.1  christos 		    canonicalization_ftype *finder,
     79      1.1  christos 		    void *data);
     80      1.1  christos 
     81  1.1.1.8  christos static struct demangle_component *
     82  1.1.1.8  christos   gdb_cplus_demangle_v3_components (const char *mangled,
     83  1.1.1.8  christos 				    int options, void **mem);
     84  1.1.1.8  christos 
     85      1.1  christos /* A convenience function to copy STRING into OBSTACK, returning a pointer
     86      1.1  christos    to the newly allocated string and saving the number of bytes saved in LEN.
     87      1.1  christos 
     88      1.1  christos    It does not copy the terminating '\0' byte!  */
     89      1.1  christos 
     90      1.1  christos static char *
     91      1.1  christos copy_string_to_obstack (struct obstack *obstack, const char *string,
     92      1.1  christos 			long *len)
     93      1.1  christos {
     94      1.1  christos   *len = strlen (string);
     95  1.1.1.4  christos   return (char *) obstack_copy (obstack, string, *len);
     96      1.1  christos }
     97      1.1  christos 
     98      1.1  christos /* Return 1 if STRING is clearly already in canonical form.  This
     99      1.1  christos    function is conservative; things which it does not recognize are
    100      1.1  christos    assumed to be non-canonical, and the parser will sort them out
    101      1.1  christos    afterwards.  This speeds up the critical path for alphanumeric
    102      1.1  christos    identifiers.  */
    103      1.1  christos 
    104      1.1  christos static int
    105      1.1  christos cp_already_canonical (const char *string)
    106      1.1  christos {
    107      1.1  christos   /* Identifier start character [a-zA-Z_].  */
    108      1.1  christos   if (!ISIDST (string[0]))
    109      1.1  christos     return 0;
    110      1.1  christos 
    111      1.1  christos   /* These are the only two identifiers which canonicalize to other
    112      1.1  christos      than themselves or an error: unsigned -> unsigned int and
    113      1.1  christos      signed -> int.  */
    114      1.1  christos   if (string[0] == 'u' && strcmp (&string[1], "nsigned") == 0)
    115      1.1  christos     return 0;
    116      1.1  christos   else if (string[0] == 's' && strcmp (&string[1], "igned") == 0)
    117      1.1  christos     return 0;
    118      1.1  christos 
    119      1.1  christos   /* Identifier character [a-zA-Z0-9_].  */
    120      1.1  christos   while (ISIDNUM (string[1]))
    121      1.1  christos     string++;
    122      1.1  christos 
    123      1.1  christos   if (string[1] == '\0')
    124      1.1  christos     return 1;
    125      1.1  christos   else
    126      1.1  christos     return 0;
    127      1.1  christos }
    128      1.1  christos 
    129      1.1  christos /* Inspect the given RET_COMP for its type.  If it is a typedef,
    130      1.1  christos    replace the node with the typedef's tree.
    131      1.1  christos 
    132      1.1  christos    Returns 1 if any typedef substitutions were made, 0 otherwise.  */
    133      1.1  christos 
    134      1.1  christos static int
    135      1.1  christos inspect_type (struct demangle_parse_info *info,
    136      1.1  christos 	      struct demangle_component *ret_comp,
    137      1.1  christos 	      canonicalization_ftype *finder,
    138      1.1  christos 	      void *data)
    139      1.1  christos {
    140      1.1  christos   char *name;
    141      1.1  christos   struct symbol *sym;
    142      1.1  christos 
    143      1.1  christos   /* Copy the symbol's name from RET_COMP and look it up
    144      1.1  christos      in the symbol table.  */
    145      1.1  christos   name = (char *) alloca (ret_comp->u.s_name.len + 1);
    146      1.1  christos   memcpy (name, ret_comp->u.s_name.s, ret_comp->u.s_name.len);
    147      1.1  christos   name[ret_comp->u.s_name.len] = '\0';
    148      1.1  christos 
    149      1.1  christos   sym = NULL;
    150      1.1  christos 
    151  1.1.1.7  christos   try
    152  1.1.1.3  christos     {
    153  1.1.1.9  christos       sym = lookup_symbol (name, 0, SEARCH_VFT, 0).symbol;
    154  1.1.1.3  christos     }
    155  1.1.1.7  christos   catch (const gdb_exception &except)
    156  1.1.1.3  christos     {
    157  1.1.1.3  christos       return 0;
    158  1.1.1.3  christos     }
    159  1.1.1.3  christos 
    160  1.1.1.3  christos   if (sym != NULL)
    161      1.1  christos     {
    162  1.1.1.8  christos       struct type *otype = sym->type ();
    163      1.1  christos 
    164      1.1  christos       if (finder != NULL)
    165      1.1  christos 	{
    166      1.1  christos 	  const char *new_name = (*finder) (otype, data);
    167      1.1  christos 
    168      1.1  christos 	  if (new_name != NULL)
    169      1.1  christos 	    {
    170      1.1  christos 	      ret_comp->u.s_name.s = new_name;
    171      1.1  christos 	      ret_comp->u.s_name.len = strlen (new_name);
    172      1.1  christos 	      return 1;
    173      1.1  christos 	    }
    174      1.1  christos 
    175      1.1  christos 	  return 0;
    176      1.1  christos 	}
    177      1.1  christos 
    178      1.1  christos       /* If the type is a typedef or namespace alias, replace it.  */
    179  1.1.1.7  christos       if (otype->code () == TYPE_CODE_TYPEDEF
    180  1.1.1.7  christos 	  || otype->code () == TYPE_CODE_NAMESPACE)
    181      1.1  christos 	{
    182      1.1  christos 	  long len;
    183      1.1  christos 	  int is_anon;
    184      1.1  christos 	  struct type *type;
    185  1.1.1.5  christos 	  std::unique_ptr<demangle_parse_info> i;
    186      1.1  christos 
    187      1.1  christos 	  /* Get the real type of the typedef.  */
    188      1.1  christos 	  type = check_typedef (otype);
    189      1.1  christos 
    190  1.1.1.7  christos 	  /* If the symbol name is the same as the original type name,
    191  1.1.1.7  christos 	     don't substitute.  That would cause infinite recursion in
    192  1.1.1.7  christos 	     symbol lookups, as the typedef symbol is often the first
    193  1.1.1.7  christos 	     found symbol in the symbol table.
    194  1.1.1.7  christos 
    195  1.1.1.7  christos 	     However, this can happen in a number of situations, such as:
    196  1.1.1.7  christos 
    197  1.1.1.7  christos 	     If the symbol is a namespace and its type name is no different
    198      1.1  christos 	     than the name we looked up, this symbol is not a namespace
    199  1.1.1.7  christos 	     alias and does not need to be substituted.
    200  1.1.1.7  christos 
    201  1.1.1.7  christos 	     If the symbol is typedef and its type name is the same
    202  1.1.1.7  christos 	     as the symbol's name, e.g., "typedef struct foo foo;".  */
    203  1.1.1.7  christos 	  if (type->name () != nullptr
    204  1.1.1.7  christos 	      && strcmp (type->name (), name) == 0)
    205      1.1  christos 	    return 0;
    206      1.1  christos 
    207  1.1.1.7  christos 	  is_anon = (type->name () == NULL
    208  1.1.1.7  christos 		     && (type->code () == TYPE_CODE_ENUM
    209  1.1.1.7  christos 			 || type->code () == TYPE_CODE_STRUCT
    210  1.1.1.7  christos 			 || type->code () == TYPE_CODE_UNION));
    211      1.1  christos 	  if (is_anon)
    212      1.1  christos 	    {
    213      1.1  christos 	      struct type *last = otype;
    214      1.1  christos 
    215      1.1  christos 	      /* Find the last typedef for the type.  */
    216  1.1.1.8  christos 	      while (last->target_type () != NULL
    217  1.1.1.8  christos 		     && (last->target_type ()->code ()
    218      1.1  christos 			 == TYPE_CODE_TYPEDEF))
    219  1.1.1.8  christos 		last = last->target_type ();
    220      1.1  christos 
    221      1.1  christos 	      /* If there is only one typedef for this anonymous type,
    222      1.1  christos 		 do not substitute it.  */
    223      1.1  christos 	      if (type == otype)
    224      1.1  christos 		return 0;
    225      1.1  christos 	      else
    226      1.1  christos 		/* Use the last typedef seen as the type for this
    227      1.1  christos 		   anonymous type.  */
    228      1.1  christos 		type = last;
    229      1.1  christos 	    }
    230      1.1  christos 
    231  1.1.1.5  christos 	  string_file buf;
    232  1.1.1.7  christos 	  try
    233  1.1.1.5  christos 	    {
    234  1.1.1.8  christos 	      /* Avoid using the current language.  If the language is
    235  1.1.1.8  christos 		 C, and TYPE is a struct/class, the printed type is
    236  1.1.1.8  christos 		 prefixed with "struct " or "class ", which we don't
    237  1.1.1.8  christos 		 want when we're expanding a C++ typedef.  Print using
    238  1.1.1.8  christos 		 the type symbol's language to expand a C++ typedef
    239  1.1.1.8  christos 		 the C++ way even if the current language is C.  */
    240  1.1.1.8  christos 	      const language_defn *lang = language_def (sym->language ());
    241  1.1.1.8  christos 	      lang->print_type (type, "", &buf, -1, 0, &type_print_raw_options);
    242  1.1.1.5  christos 	    }
    243      1.1  christos 	  /* If type_print threw an exception, there is little point
    244      1.1  christos 	     in continuing, so just bow out gracefully.  */
    245  1.1.1.7  christos 	  catch (const gdb_exception_error &except)
    246      1.1  christos 	    {
    247      1.1  christos 	      return 0;
    248      1.1  christos 	    }
    249      1.1  christos 
    250  1.1.1.5  christos 	  len = buf.size ();
    251  1.1.1.7  christos 	  name = obstack_strdup (&info->obstack, buf.string ());
    252      1.1  christos 
    253      1.1  christos 	  /* Turn the result into a new tree.  Note that this
    254      1.1  christos 	     tree will contain pointers into NAME, so NAME cannot
    255      1.1  christos 	     be free'd until all typedef conversion is done and
    256      1.1  christos 	     the final result is converted into a string.  */
    257      1.1  christos 	  i = cp_demangled_name_to_comp (name, NULL);
    258      1.1  christos 	  if (i != NULL)
    259      1.1  christos 	    {
    260      1.1  christos 	      /* Merge the two trees.  */
    261  1.1.1.9  christos 	      cp_merge_demangle_parse_infos (info, ret_comp, std::move (i));
    262      1.1  christos 
    263      1.1  christos 	      /* Replace any newly introduced typedefs -- but not
    264      1.1  christos 		 if the type is anonymous (that would lead to infinite
    265      1.1  christos 		 looping).  */
    266      1.1  christos 	      if (!is_anon)
    267      1.1  christos 		replace_typedefs (info, ret_comp, finder, data);
    268      1.1  christos 	    }
    269      1.1  christos 	  else
    270      1.1  christos 	    {
    271      1.1  christos 	      /* This shouldn't happen unless the type printer has
    272      1.1  christos 		 output something that the name parser cannot grok.
    273      1.1  christos 		 Nonetheless, an ounce of prevention...
    274      1.1  christos 
    275      1.1  christos 		 Canonicalize the name again, and store it in the
    276      1.1  christos 		 current node (RET_COMP).  */
    277  1.1.1.7  christos 	      gdb::unique_xmalloc_ptr<char> canon
    278  1.1.1.7  christos 		= cp_canonicalize_string_no_typedefs (name);
    279      1.1  christos 
    280  1.1.1.7  christos 	      if (canon != nullptr)
    281      1.1  christos 		{
    282  1.1.1.5  christos 		  /* Copy the canonicalization into the obstack.  */
    283  1.1.1.7  christos 		  name = copy_string_to_obstack (&info->obstack, canon.get (), &len);
    284      1.1  christos 		}
    285      1.1  christos 
    286      1.1  christos 	      ret_comp->u.s_name.s = name;
    287      1.1  christos 	      ret_comp->u.s_name.len = len;
    288      1.1  christos 	    }
    289      1.1  christos 
    290      1.1  christos 	  return 1;
    291      1.1  christos 	}
    292      1.1  christos     }
    293      1.1  christos 
    294      1.1  christos   return 0;
    295      1.1  christos }
    296      1.1  christos 
    297  1.1.1.7  christos /* Helper for replace_typedefs_qualified_name to handle
    298  1.1.1.7  christos    DEMANGLE_COMPONENT_TEMPLATE.  TMPL is the template node.  BUF is
    299  1.1.1.7  christos    the buffer that holds the qualified name being built by
    300  1.1.1.7  christos    replace_typedefs_qualified_name.  REPL is the node that will be
    301  1.1.1.7  christos    rewritten as a DEMANGLE_COMPONENT_NAME node holding the 'template
    302  1.1.1.7  christos    plus template arguments' name with typedefs replaced.  */
    303  1.1.1.7  christos 
    304  1.1.1.7  christos static bool
    305  1.1.1.7  christos replace_typedefs_template (struct demangle_parse_info *info,
    306  1.1.1.7  christos 			   string_file &buf,
    307  1.1.1.7  christos 			   struct demangle_component *tmpl,
    308  1.1.1.7  christos 			   struct demangle_component *repl,
    309  1.1.1.7  christos 			   canonicalization_ftype *finder,
    310  1.1.1.7  christos 			   void *data)
    311  1.1.1.7  christos {
    312  1.1.1.7  christos   demangle_component *tmpl_arglist = d_right (tmpl);
    313  1.1.1.7  christos 
    314  1.1.1.7  christos   /* Replace typedefs in the template argument list.  */
    315  1.1.1.7  christos   replace_typedefs (info, tmpl_arglist, finder, data);
    316  1.1.1.7  christos 
    317  1.1.1.7  christos   /* Convert 'template + replaced template argument list' to a string
    318  1.1.1.7  christos      and replace the REPL node.  */
    319  1.1.1.7  christos   gdb::unique_xmalloc_ptr<char> tmpl_str = cp_comp_to_string (tmpl, 100);
    320  1.1.1.7  christos   if (tmpl_str == nullptr)
    321  1.1.1.7  christos     {
    322  1.1.1.7  christos       /* If something went astray, abort typedef substitutions.  */
    323  1.1.1.7  christos       return false;
    324  1.1.1.7  christos     }
    325  1.1.1.7  christos   buf.puts (tmpl_str.get ());
    326  1.1.1.7  christos 
    327  1.1.1.7  christos   repl->type = DEMANGLE_COMPONENT_NAME;
    328  1.1.1.7  christos   repl->u.s_name.s = obstack_strdup (&info->obstack, buf.string ());
    329  1.1.1.7  christos   repl->u.s_name.len = buf.size ();
    330  1.1.1.7  christos   return true;
    331  1.1.1.7  christos }
    332  1.1.1.7  christos 
    333      1.1  christos /* Replace any typedefs appearing in the qualified name
    334      1.1  christos    (DEMANGLE_COMPONENT_QUAL_NAME) represented in RET_COMP for the name parse
    335      1.1  christos    given in INFO.  */
    336      1.1  christos 
    337      1.1  christos static void
    338      1.1  christos replace_typedefs_qualified_name (struct demangle_parse_info *info,
    339      1.1  christos 				 struct demangle_component *ret_comp,
    340      1.1  christos 				 canonicalization_ftype *finder,
    341      1.1  christos 				 void *data)
    342      1.1  christos {
    343  1.1.1.5  christos   string_file buf;
    344      1.1  christos   struct demangle_component *comp = ret_comp;
    345      1.1  christos 
    346      1.1  christos   /* Walk each node of the qualified name, reconstructing the name of
    347      1.1  christos      this element.  With every node, check for any typedef substitutions.
    348      1.1  christos      If a substitution has occurred, replace the qualified name node
    349      1.1  christos      with a DEMANGLE_COMPONENT_NAME node representing the new, typedef-
    350      1.1  christos      substituted name.  */
    351      1.1  christos   while (comp->type == DEMANGLE_COMPONENT_QUAL_NAME)
    352      1.1  christos     {
    353  1.1.1.7  christos       if (d_left (comp)->type == DEMANGLE_COMPONENT_TEMPLATE)
    354  1.1.1.7  christos 	{
    355  1.1.1.7  christos 	  /* Convert 'template + replaced template argument list' to a
    356  1.1.1.7  christos 	     string and replace the top DEMANGLE_COMPONENT_QUAL_NAME
    357  1.1.1.7  christos 	     node.  */
    358  1.1.1.7  christos 	  if (!replace_typedefs_template (info, buf,
    359  1.1.1.7  christos 					  d_left (comp), d_left (ret_comp),
    360  1.1.1.7  christos 					  finder, data))
    361  1.1.1.7  christos 	    return;
    362  1.1.1.7  christos 
    363  1.1.1.7  christos 	  buf.clear ();
    364  1.1.1.7  christos 	  d_right (ret_comp) = d_right (comp);
    365  1.1.1.7  christos 	  comp = ret_comp;
    366  1.1.1.7  christos 
    367  1.1.1.7  christos 	  /* Fallback to DEMANGLE_COMPONENT_NAME processing.  We want
    368  1.1.1.7  christos 	     to call inspect_type for this template, in case we have a
    369  1.1.1.7  christos 	     template alias, like:
    370  1.1.1.7  christos 	       template<typename T> using alias = base<int, t>;
    371  1.1.1.7  christos 	     in which case we want inspect_type to do a replacement like:
    372  1.1.1.7  christos 	       alias<int> -> base<int, int>
    373  1.1.1.7  christos 	  */
    374  1.1.1.7  christos 	}
    375  1.1.1.7  christos 
    376      1.1  christos       if (d_left (comp)->type == DEMANGLE_COMPONENT_NAME)
    377      1.1  christos 	{
    378  1.1.1.3  christos 	  struct demangle_component newobj;
    379      1.1  christos 
    380  1.1.1.5  christos 	  buf.write (d_left (comp)->u.s_name.s, d_left (comp)->u.s_name.len);
    381  1.1.1.3  christos 	  newobj.type = DEMANGLE_COMPONENT_NAME;
    382  1.1.1.7  christos 	  newobj.u.s_name.s = obstack_strdup (&info->obstack, buf.string ());
    383  1.1.1.6  christos 	  newobj.u.s_name.len = buf.size ();
    384  1.1.1.3  christos 	  if (inspect_type (info, &newobj, finder, data))
    385      1.1  christos 	    {
    386  1.1.1.6  christos 	      char *s;
    387      1.1  christos 	      long slen;
    388      1.1  christos 
    389      1.1  christos 	      /* A typedef was substituted in NEW.  Convert it to a
    390      1.1  christos 		 string and replace the top DEMANGLE_COMPONENT_QUAL_NAME
    391      1.1  christos 		 node.  */
    392      1.1  christos 
    393  1.1.1.5  christos 	      buf.clear ();
    394  1.1.1.6  christos 	      gdb::unique_xmalloc_ptr<char> n
    395  1.1.1.6  christos 		= cp_comp_to_string (&newobj, 100);
    396      1.1  christos 	      if (n == NULL)
    397      1.1  christos 		{
    398      1.1  christos 		  /* If something went astray, abort typedef substitutions.  */
    399      1.1  christos 		  return;
    400      1.1  christos 		}
    401      1.1  christos 
    402  1.1.1.6  christos 	      s = copy_string_to_obstack (&info->obstack, n.get (), &slen);
    403      1.1  christos 
    404      1.1  christos 	      d_left (ret_comp)->type = DEMANGLE_COMPONENT_NAME;
    405      1.1  christos 	      d_left (ret_comp)->u.s_name.s = s;
    406      1.1  christos 	      d_left (ret_comp)->u.s_name.len = slen;
    407      1.1  christos 	      d_right (ret_comp) = d_right (comp);
    408      1.1  christos 	      comp = ret_comp;
    409      1.1  christos 	      continue;
    410      1.1  christos 	    }
    411      1.1  christos 	}
    412      1.1  christos       else
    413      1.1  christos 	{
    414      1.1  christos 	  /* The current node is not a name, so simply replace any
    415      1.1  christos 	     typedefs in it.  Then print it to the stream to continue
    416      1.1  christos 	     checking for more typedefs in the tree.  */
    417      1.1  christos 	  replace_typedefs (info, d_left (comp), finder, data);
    418  1.1.1.6  christos 	  gdb::unique_xmalloc_ptr<char> name
    419  1.1.1.6  christos 	    = cp_comp_to_string (d_left (comp), 100);
    420      1.1  christos 	  if (name == NULL)
    421      1.1  christos 	    {
    422      1.1  christos 	      /* If something went astray, abort typedef substitutions.  */
    423      1.1  christos 	      return;
    424      1.1  christos 	    }
    425  1.1.1.6  christos 	  buf.puts (name.get ());
    426      1.1  christos 	}
    427      1.1  christos 
    428  1.1.1.5  christos       buf.write ("::", 2);
    429      1.1  christos       comp = d_right (comp);
    430      1.1  christos     }
    431      1.1  christos 
    432  1.1.1.7  christos   /* If the next component is DEMANGLE_COMPONENT_TEMPLATE or
    433  1.1.1.7  christos      DEMANGLE_COMPONENT_NAME, save the qualified name assembled above
    434  1.1.1.7  christos      and append the name given by COMP.  Then use this reassembled
    435  1.1.1.7  christos      name to check for a typedef.  */
    436  1.1.1.7  christos 
    437  1.1.1.7  christos   if (comp->type == DEMANGLE_COMPONENT_TEMPLATE)
    438  1.1.1.7  christos     {
    439  1.1.1.7  christos       /* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node with a
    440  1.1.1.7  christos 	 DEMANGLE_COMPONENT_NAME node containing the whole name.  */
    441  1.1.1.7  christos       if (!replace_typedefs_template (info, buf, comp, ret_comp, finder, data))
    442  1.1.1.7  christos 	return;
    443  1.1.1.7  christos       inspect_type (info, ret_comp, finder, data);
    444  1.1.1.7  christos     }
    445  1.1.1.7  christos   else if (comp->type == DEMANGLE_COMPONENT_NAME)
    446      1.1  christos     {
    447  1.1.1.5  christos       buf.write (comp->u.s_name.s, comp->u.s_name.len);
    448      1.1  christos 
    449      1.1  christos       /* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node
    450      1.1  christos 	 with a DEMANGLE_COMPONENT_NAME node containing the whole
    451      1.1  christos 	 name.  */
    452      1.1  christos       ret_comp->type = DEMANGLE_COMPONENT_NAME;
    453  1.1.1.7  christos       ret_comp->u.s_name.s = obstack_strdup (&info->obstack, buf.string ());
    454  1.1.1.6  christos       ret_comp->u.s_name.len = buf.size ();
    455      1.1  christos       inspect_type (info, ret_comp, finder, data);
    456      1.1  christos     }
    457      1.1  christos   else
    458      1.1  christos     replace_typedefs (info, comp, finder, data);
    459      1.1  christos }
    460      1.1  christos 
    461      1.1  christos 
    462      1.1  christos /* A function to check const and volatile qualifiers for argument types.
    463      1.1  christos 
    464      1.1  christos    "Parameter declarations that differ only in the presence
    465      1.1  christos    or absence of `const' and/or `volatile' are equivalent."
    466      1.1  christos    C++ Standard N3290, clause 13.1.3 #4.  */
    467      1.1  christos 
    468      1.1  christos static void
    469      1.1  christos check_cv_qualifiers (struct demangle_component *ret_comp)
    470      1.1  christos {
    471      1.1  christos   while (d_left (ret_comp) != NULL
    472      1.1  christos 	 && (d_left (ret_comp)->type == DEMANGLE_COMPONENT_CONST
    473      1.1  christos 	     || d_left (ret_comp)->type == DEMANGLE_COMPONENT_VOLATILE))
    474      1.1  christos     {
    475      1.1  christos       d_left (ret_comp) = d_left (d_left (ret_comp));
    476      1.1  christos     }
    477      1.1  christos }
    478      1.1  christos 
    479      1.1  christos /* Walk the parse tree given by RET_COMP, replacing any typedefs with
    480      1.1  christos    their basic types.  */
    481      1.1  christos 
    482      1.1  christos static void
    483      1.1  christos replace_typedefs (struct demangle_parse_info *info,
    484      1.1  christos 		  struct demangle_component *ret_comp,
    485      1.1  christos 		  canonicalization_ftype *finder,
    486      1.1  christos 		  void *data)
    487      1.1  christos {
    488      1.1  christos   if (ret_comp)
    489      1.1  christos     {
    490      1.1  christos       if (finder != NULL
    491      1.1  christos 	  && (ret_comp->type == DEMANGLE_COMPONENT_NAME
    492      1.1  christos 	      || ret_comp->type == DEMANGLE_COMPONENT_QUAL_NAME
    493      1.1  christos 	      || ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE
    494      1.1  christos 	      || ret_comp->type == DEMANGLE_COMPONENT_BUILTIN_TYPE))
    495      1.1  christos 	{
    496  1.1.1.6  christos 	  gdb::unique_xmalloc_ptr<char> local_name
    497  1.1.1.6  christos 	    = cp_comp_to_string (ret_comp, 10);
    498      1.1  christos 
    499      1.1  christos 	  if (local_name != NULL)
    500      1.1  christos 	    {
    501  1.1.1.3  christos 	      struct symbol *sym = NULL;
    502      1.1  christos 
    503      1.1  christos 	      sym = NULL;
    504  1.1.1.7  christos 	      try
    505      1.1  christos 		{
    506  1.1.1.6  christos 		  sym = lookup_symbol (local_name.get (), 0,
    507  1.1.1.9  christos 				       SEARCH_VFT, 0).symbol;
    508      1.1  christos 		}
    509  1.1.1.7  christos 	      catch (const gdb_exception &except)
    510  1.1.1.3  christos 		{
    511  1.1.1.3  christos 		}
    512  1.1.1.3  christos 
    513  1.1.1.3  christos 	      if (sym != NULL)
    514      1.1  christos 		{
    515  1.1.1.8  christos 		  struct type *otype = sym->type ();
    516      1.1  christos 		  const char *new_name = (*finder) (otype, data);
    517      1.1  christos 
    518      1.1  christos 		  if (new_name != NULL)
    519      1.1  christos 		    {
    520      1.1  christos 		      ret_comp->type = DEMANGLE_COMPONENT_NAME;
    521      1.1  christos 		      ret_comp->u.s_name.s = new_name;
    522      1.1  christos 		      ret_comp->u.s_name.len = strlen (new_name);
    523      1.1  christos 		      return;
    524      1.1  christos 		    }
    525      1.1  christos 		}
    526      1.1  christos 	    }
    527      1.1  christos 	}
    528      1.1  christos 
    529      1.1  christos       switch (ret_comp->type)
    530      1.1  christos 	{
    531      1.1  christos 	case DEMANGLE_COMPONENT_ARGLIST:
    532      1.1  christos 	  check_cv_qualifiers (ret_comp);
    533  1.1.1.9  christos 	  [[fallthrough]];
    534      1.1  christos 
    535      1.1  christos 	case DEMANGLE_COMPONENT_FUNCTION_TYPE:
    536      1.1  christos 	case DEMANGLE_COMPONENT_TEMPLATE:
    537      1.1  christos 	case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
    538      1.1  christos 	case DEMANGLE_COMPONENT_TYPED_NAME:
    539      1.1  christos 	  replace_typedefs (info, d_left (ret_comp), finder, data);
    540      1.1  christos 	  replace_typedefs (info, d_right (ret_comp), finder, data);
    541      1.1  christos 	  break;
    542      1.1  christos 
    543      1.1  christos 	case DEMANGLE_COMPONENT_NAME:
    544      1.1  christos 	  inspect_type (info, ret_comp, finder, data);
    545      1.1  christos 	  break;
    546      1.1  christos 
    547      1.1  christos 	case DEMANGLE_COMPONENT_QUAL_NAME:
    548      1.1  christos 	  replace_typedefs_qualified_name (info, ret_comp, finder, data);
    549      1.1  christos 	  break;
    550      1.1  christos 
    551      1.1  christos 	case DEMANGLE_COMPONENT_LOCAL_NAME:
    552      1.1  christos 	case DEMANGLE_COMPONENT_CTOR:
    553      1.1  christos 	case DEMANGLE_COMPONENT_ARRAY_TYPE:
    554      1.1  christos 	case DEMANGLE_COMPONENT_PTRMEM_TYPE:
    555      1.1  christos 	  replace_typedefs (info, d_right (ret_comp), finder, data);
    556      1.1  christos 	  break;
    557      1.1  christos 
    558      1.1  christos 	case DEMANGLE_COMPONENT_CONST:
    559      1.1  christos 	case DEMANGLE_COMPONENT_RESTRICT:
    560      1.1  christos 	case DEMANGLE_COMPONENT_VOLATILE:
    561      1.1  christos 	case DEMANGLE_COMPONENT_VOLATILE_THIS:
    562      1.1  christos 	case DEMANGLE_COMPONENT_CONST_THIS:
    563      1.1  christos 	case DEMANGLE_COMPONENT_RESTRICT_THIS:
    564      1.1  christos 	case DEMANGLE_COMPONENT_POINTER:
    565      1.1  christos 	case DEMANGLE_COMPONENT_REFERENCE:
    566  1.1.1.5  christos 	case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
    567      1.1  christos 	  replace_typedefs (info, d_left (ret_comp), finder, data);
    568      1.1  christos 	  break;
    569      1.1  christos 
    570      1.1  christos 	default:
    571      1.1  christos 	  break;
    572      1.1  christos 	}
    573      1.1  christos     }
    574      1.1  christos }
    575      1.1  christos 
    576  1.1.1.5  christos /* Parse STRING and convert it to canonical form, resolving any
    577  1.1.1.5  christos    typedefs.  If parsing fails, or if STRING is already canonical,
    578  1.1.1.7  christos    return nullptr.  Otherwise return the canonical form.  If
    579  1.1.1.5  christos    FINDER is not NULL, then type components are passed to FINDER to be
    580  1.1.1.5  christos    looked up.  DATA is passed verbatim to FINDER.  */
    581      1.1  christos 
    582  1.1.1.7  christos gdb::unique_xmalloc_ptr<char>
    583      1.1  christos cp_canonicalize_string_full (const char *string,
    584      1.1  christos 			     canonicalization_ftype *finder,
    585      1.1  christos 			     void *data)
    586      1.1  christos {
    587      1.1  christos   unsigned int estimated_len;
    588  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info;
    589      1.1  christos 
    590      1.1  christos   estimated_len = strlen (string) * 2;
    591      1.1  christos   info = cp_demangled_name_to_comp (string, NULL);
    592      1.1  christos   if (info != NULL)
    593      1.1  christos     {
    594      1.1  christos       /* Replace all the typedefs in the tree.  */
    595  1.1.1.5  christos       replace_typedefs (info.get (), info->tree, finder, data);
    596      1.1  christos 
    597      1.1  christos       /* Convert the tree back into a string.  */
    598  1.1.1.6  christos       gdb::unique_xmalloc_ptr<char> us = cp_comp_to_string (info->tree,
    599  1.1.1.6  christos 							    estimated_len);
    600  1.1.1.6  christos       gdb_assert (us);
    601      1.1  christos 
    602      1.1  christos       /* Finally, compare the original string with the computed
    603      1.1  christos 	 name, returning NULL if they are the same.  */
    604  1.1.1.7  christos       if (strcmp (us.get (), string) == 0)
    605  1.1.1.7  christos 	return nullptr;
    606  1.1.1.7  christos 
    607  1.1.1.7  christos       return us;
    608      1.1  christos     }
    609      1.1  christos 
    610  1.1.1.7  christos   return nullptr;
    611      1.1  christos }
    612      1.1  christos 
    613      1.1  christos /* Like cp_canonicalize_string_full, but always passes NULL for
    614      1.1  christos    FINDER.  */
    615      1.1  christos 
    616  1.1.1.7  christos gdb::unique_xmalloc_ptr<char>
    617      1.1  christos cp_canonicalize_string_no_typedefs (const char *string)
    618      1.1  christos {
    619      1.1  christos   return cp_canonicalize_string_full (string, NULL, NULL);
    620      1.1  christos }
    621      1.1  christos 
    622      1.1  christos /* Parse STRING and convert it to canonical form.  If parsing fails,
    623  1.1.1.7  christos    or if STRING is already canonical, return nullptr.
    624  1.1.1.5  christos    Otherwise return the canonical form.  */
    625      1.1  christos 
    626  1.1.1.7  christos gdb::unique_xmalloc_ptr<char>
    627      1.1  christos cp_canonicalize_string (const char *string)
    628      1.1  christos {
    629  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info;
    630      1.1  christos   unsigned int estimated_len;
    631      1.1  christos 
    632      1.1  christos   if (cp_already_canonical (string))
    633  1.1.1.7  christos     return nullptr;
    634      1.1  christos 
    635      1.1  christos   info = cp_demangled_name_to_comp (string, NULL);
    636      1.1  christos   if (info == NULL)
    637  1.1.1.7  christos     return nullptr;
    638      1.1  christos 
    639      1.1  christos   estimated_len = strlen (string) * 2;
    640  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> us (cp_comp_to_string (info->tree,
    641  1.1.1.6  christos 						       estimated_len));
    642      1.1  christos 
    643  1.1.1.6  christos   if (!us)
    644      1.1  christos     {
    645      1.1  christos       warning (_("internal error: string \"%s\" failed to be canonicalized"),
    646      1.1  christos 	       string);
    647  1.1.1.7  christos       return nullptr;
    648      1.1  christos     }
    649      1.1  christos 
    650  1.1.1.7  christos   if (strcmp (us.get (), string) == 0)
    651  1.1.1.7  christos     return nullptr;
    652      1.1  christos 
    653  1.1.1.7  christos   return us;
    654      1.1  christos }
    655      1.1  christos 
    656      1.1  christos /* Convert a mangled name to a demangle_component tree.  *MEMORY is
    657      1.1  christos    set to the block of used memory that should be freed when finished
    658      1.1  christos    with the tree.  DEMANGLED_P is set to the char * that should be
    659      1.1  christos    freed when finished with the tree, or NULL if none was needed.
    660      1.1  christos    OPTIONS will be passed to the demangler.  */
    661      1.1  christos 
    662  1.1.1.5  christos static std::unique_ptr<demangle_parse_info>
    663      1.1  christos mangled_name_to_comp (const char *mangled_name, int options,
    664  1.1.1.8  christos 		      void **memory,
    665  1.1.1.8  christos 		      gdb::unique_xmalloc_ptr<char> *demangled_p)
    666      1.1  christos {
    667      1.1  christos   /* If it looks like a v3 mangled name, then try to go directly
    668      1.1  christos      to trees.  */
    669      1.1  christos   if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
    670      1.1  christos     {
    671      1.1  christos       struct demangle_component *ret;
    672      1.1  christos 
    673  1.1.1.8  christos       ret = gdb_cplus_demangle_v3_components (mangled_name,
    674  1.1.1.8  christos 					      options, memory);
    675      1.1  christos       if (ret)
    676      1.1  christos 	{
    677  1.1.1.9  christos 	  auto info = std::make_unique<demangle_parse_info> ();
    678      1.1  christos 	  info->tree = ret;
    679      1.1  christos 	  *demangled_p = NULL;
    680      1.1  christos 	  return info;
    681      1.1  christos 	}
    682      1.1  christos     }
    683      1.1  christos 
    684      1.1  christos   /* If it doesn't, or if that failed, then try to demangle the
    685      1.1  christos      name.  */
    686  1.1.1.8  christos   gdb::unique_xmalloc_ptr<char> demangled_name = gdb_demangle (mangled_name,
    687  1.1.1.8  christos 							       options);
    688      1.1  christos   if (demangled_name == NULL)
    689      1.1  christos    return NULL;
    690      1.1  christos 
    691      1.1  christos   /* If we could demangle the name, parse it to build the component
    692      1.1  christos      tree.  */
    693  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info
    694  1.1.1.8  christos     = cp_demangled_name_to_comp (demangled_name.get (), NULL);
    695      1.1  christos 
    696      1.1  christos   if (info == NULL)
    697  1.1.1.8  christos     return NULL;
    698      1.1  christos 
    699  1.1.1.8  christos   *demangled_p = std::move (demangled_name);
    700      1.1  christos   return info;
    701      1.1  christos }
    702      1.1  christos 
    703      1.1  christos /* Return the name of the class containing method PHYSNAME.  */
    704      1.1  christos 
    705      1.1  christos char *
    706      1.1  christos cp_class_name_from_physname (const char *physname)
    707      1.1  christos {
    708      1.1  christos   void *storage = NULL;
    709  1.1.1.8  christos   gdb::unique_xmalloc_ptr<char> demangled_name;
    710  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> ret;
    711      1.1  christos   struct demangle_component *ret_comp, *prev_comp, *cur_comp;
    712  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info;
    713      1.1  christos   int done;
    714      1.1  christos 
    715      1.1  christos   info = mangled_name_to_comp (physname, DMGL_ANSI,
    716      1.1  christos 			       &storage, &demangled_name);
    717      1.1  christos   if (info == NULL)
    718      1.1  christos     return NULL;
    719      1.1  christos 
    720      1.1  christos   done = 0;
    721      1.1  christos   ret_comp = info->tree;
    722      1.1  christos 
    723      1.1  christos   /* First strip off any qualifiers, if we have a function or
    724      1.1  christos      method.  */
    725      1.1  christos   while (!done)
    726      1.1  christos     switch (ret_comp->type)
    727      1.1  christos       {
    728      1.1  christos       case DEMANGLE_COMPONENT_CONST:
    729      1.1  christos       case DEMANGLE_COMPONENT_RESTRICT:
    730      1.1  christos       case DEMANGLE_COMPONENT_VOLATILE:
    731      1.1  christos       case DEMANGLE_COMPONENT_CONST_THIS:
    732      1.1  christos       case DEMANGLE_COMPONENT_RESTRICT_THIS:
    733      1.1  christos       case DEMANGLE_COMPONENT_VOLATILE_THIS:
    734      1.1  christos       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
    735  1.1.1.8  christos 	ret_comp = d_left (ret_comp);
    736  1.1.1.8  christos 	break;
    737      1.1  christos       default:
    738      1.1  christos 	done = 1;
    739      1.1  christos 	break;
    740      1.1  christos       }
    741      1.1  christos 
    742      1.1  christos   /* If what we have now is a function, discard the argument list.  */
    743      1.1  christos   if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
    744      1.1  christos     ret_comp = d_left (ret_comp);
    745      1.1  christos 
    746      1.1  christos   /* If what we have now is a template, strip off the template
    747      1.1  christos      arguments.  The left subtree may be a qualified name.  */
    748      1.1  christos   if (ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE)
    749      1.1  christos     ret_comp = d_left (ret_comp);
    750      1.1  christos 
    751      1.1  christos   /* What we have now should be a name, possibly qualified.
    752      1.1  christos      Additional qualifiers could live in the left subtree or the right
    753      1.1  christos      subtree.  Find the last piece.  */
    754      1.1  christos   done = 0;
    755      1.1  christos   prev_comp = NULL;
    756      1.1  christos   cur_comp = ret_comp;
    757      1.1  christos   while (!done)
    758      1.1  christos     switch (cur_comp->type)
    759      1.1  christos       {
    760      1.1  christos       case DEMANGLE_COMPONENT_QUAL_NAME:
    761      1.1  christos       case DEMANGLE_COMPONENT_LOCAL_NAME:
    762      1.1  christos 	prev_comp = cur_comp;
    763  1.1.1.8  christos 	cur_comp = d_right (cur_comp);
    764  1.1.1.8  christos 	break;
    765      1.1  christos       case DEMANGLE_COMPONENT_TEMPLATE:
    766      1.1  christos       case DEMANGLE_COMPONENT_NAME:
    767      1.1  christos       case DEMANGLE_COMPONENT_CTOR:
    768      1.1  christos       case DEMANGLE_COMPONENT_DTOR:
    769      1.1  christos       case DEMANGLE_COMPONENT_OPERATOR:
    770      1.1  christos       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
    771      1.1  christos 	done = 1;
    772      1.1  christos 	break;
    773      1.1  christos       default:
    774      1.1  christos 	done = 1;
    775      1.1  christos 	cur_comp = NULL;
    776      1.1  christos 	break;
    777      1.1  christos       }
    778      1.1  christos 
    779      1.1  christos   if (cur_comp != NULL && prev_comp != NULL)
    780      1.1  christos     {
    781      1.1  christos       /* We want to discard the rightmost child of PREV_COMP.  */
    782      1.1  christos       *prev_comp = *d_left (prev_comp);
    783      1.1  christos       /* The ten is completely arbitrary; we don't have a good
    784      1.1  christos 	 estimate.  */
    785      1.1  christos       ret = cp_comp_to_string (ret_comp, 10);
    786      1.1  christos     }
    787      1.1  christos 
    788      1.1  christos   xfree (storage);
    789  1.1.1.6  christos   return ret.release ();
    790      1.1  christos }
    791      1.1  christos 
    792      1.1  christos /* Return the child of COMP which is the basename of a method,
    793      1.1  christos    variable, et cetera.  All scope qualifiers are discarded, but
    794      1.1  christos    template arguments will be included.  The component tree may be
    795      1.1  christos    modified.  */
    796      1.1  christos 
    797      1.1  christos static struct demangle_component *
    798      1.1  christos unqualified_name_from_comp (struct demangle_component *comp)
    799      1.1  christos {
    800      1.1  christos   struct demangle_component *ret_comp = comp, *last_template;
    801      1.1  christos   int done;
    802      1.1  christos 
    803      1.1  christos   done = 0;
    804      1.1  christos   last_template = NULL;
    805      1.1  christos   while (!done)
    806      1.1  christos     switch (ret_comp->type)
    807      1.1  christos       {
    808      1.1  christos       case DEMANGLE_COMPONENT_QUAL_NAME:
    809      1.1  christos       case DEMANGLE_COMPONENT_LOCAL_NAME:
    810  1.1.1.8  christos 	ret_comp = d_right (ret_comp);
    811  1.1.1.8  christos 	break;
    812      1.1  christos       case DEMANGLE_COMPONENT_TYPED_NAME:
    813  1.1.1.8  christos 	ret_comp = d_left (ret_comp);
    814  1.1.1.8  christos 	break;
    815      1.1  christos       case DEMANGLE_COMPONENT_TEMPLATE:
    816      1.1  christos 	gdb_assert (last_template == NULL);
    817      1.1  christos 	last_template = ret_comp;
    818      1.1  christos 	ret_comp = d_left (ret_comp);
    819      1.1  christos 	break;
    820      1.1  christos       case DEMANGLE_COMPONENT_CONST:
    821      1.1  christos       case DEMANGLE_COMPONENT_RESTRICT:
    822      1.1  christos       case DEMANGLE_COMPONENT_VOLATILE:
    823      1.1  christos       case DEMANGLE_COMPONENT_CONST_THIS:
    824      1.1  christos       case DEMANGLE_COMPONENT_RESTRICT_THIS:
    825      1.1  christos       case DEMANGLE_COMPONENT_VOLATILE_THIS:
    826      1.1  christos       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
    827  1.1.1.8  christos 	ret_comp = d_left (ret_comp);
    828  1.1.1.8  christos 	break;
    829      1.1  christos       case DEMANGLE_COMPONENT_NAME:
    830      1.1  christos       case DEMANGLE_COMPONENT_CTOR:
    831      1.1  christos       case DEMANGLE_COMPONENT_DTOR:
    832      1.1  christos       case DEMANGLE_COMPONENT_OPERATOR:
    833      1.1  christos       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
    834      1.1  christos 	done = 1;
    835      1.1  christos 	break;
    836      1.1  christos       default:
    837      1.1  christos 	return NULL;
    838      1.1  christos 	break;
    839      1.1  christos       }
    840      1.1  christos 
    841      1.1  christos   if (last_template)
    842      1.1  christos     {
    843      1.1  christos       d_left (last_template) = ret_comp;
    844      1.1  christos       return last_template;
    845      1.1  christos     }
    846      1.1  christos 
    847      1.1  christos   return ret_comp;
    848      1.1  christos }
    849      1.1  christos 
    850      1.1  christos /* Return the name of the method whose linkage name is PHYSNAME.  */
    851      1.1  christos 
    852      1.1  christos char *
    853      1.1  christos method_name_from_physname (const char *physname)
    854      1.1  christos {
    855      1.1  christos   void *storage = NULL;
    856  1.1.1.8  christos   gdb::unique_xmalloc_ptr<char> demangled_name;
    857  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> ret;
    858      1.1  christos   struct demangle_component *ret_comp;
    859  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info;
    860      1.1  christos 
    861      1.1  christos   info = mangled_name_to_comp (physname, DMGL_ANSI,
    862      1.1  christos 			       &storage, &demangled_name);
    863      1.1  christos   if (info == NULL)
    864      1.1  christos     return NULL;
    865      1.1  christos 
    866      1.1  christos   ret_comp = unqualified_name_from_comp (info->tree);
    867      1.1  christos 
    868      1.1  christos   if (ret_comp != NULL)
    869      1.1  christos     /* The ten is completely arbitrary; we don't have a good
    870      1.1  christos        estimate.  */
    871      1.1  christos     ret = cp_comp_to_string (ret_comp, 10);
    872      1.1  christos 
    873      1.1  christos   xfree (storage);
    874  1.1.1.6  christos   return ret.release ();
    875      1.1  christos }
    876      1.1  christos 
    877      1.1  christos /* If FULL_NAME is the demangled name of a C++ function (including an
    878      1.1  christos    arg list, possibly including namespace/class qualifications),
    879      1.1  christos    return a new string containing only the function name (without the
    880  1.1.1.6  christos    arg list/class qualifications).  Otherwise, return NULL.  */
    881      1.1  christos 
    882  1.1.1.6  christos gdb::unique_xmalloc_ptr<char>
    883      1.1  christos cp_func_name (const char *full_name)
    884      1.1  christos {
    885  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> ret;
    886      1.1  christos   struct demangle_component *ret_comp;
    887  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info;
    888      1.1  christos 
    889      1.1  christos   info = cp_demangled_name_to_comp (full_name, NULL);
    890      1.1  christos   if (!info)
    891  1.1.1.6  christos     return nullptr;
    892      1.1  christos 
    893      1.1  christos   ret_comp = unqualified_name_from_comp (info->tree);
    894      1.1  christos 
    895      1.1  christos   if (ret_comp != NULL)
    896      1.1  christos     ret = cp_comp_to_string (ret_comp, 10);
    897      1.1  christos 
    898      1.1  christos   return ret;
    899      1.1  christos }
    900      1.1  christos 
    901  1.1.1.6  christos /* Helper for cp_remove_params.  DEMANGLED_NAME is the name of a
    902  1.1.1.6  christos    function, including parameters and (optionally) a return type.
    903  1.1.1.6  christos    Return the name of the function without parameters or return type,
    904  1.1.1.6  christos    or NULL if we can not parse the name.  If REQUIRE_PARAMS is false,
    905  1.1.1.6  christos    then tolerate a non-existing or unbalanced parameter list.  */
    906      1.1  christos 
    907  1.1.1.6  christos static gdb::unique_xmalloc_ptr<char>
    908  1.1.1.6  christos cp_remove_params_1 (const char *demangled_name, bool require_params)
    909      1.1  christos {
    910  1.1.1.6  christos   bool done = false;
    911      1.1  christos   struct demangle_component *ret_comp;
    912  1.1.1.5  christos   std::unique_ptr<demangle_parse_info> info;
    913  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> ret;
    914      1.1  christos 
    915      1.1  christos   if (demangled_name == NULL)
    916      1.1  christos     return NULL;
    917      1.1  christos 
    918      1.1  christos   info = cp_demangled_name_to_comp (demangled_name, NULL);
    919      1.1  christos   if (info == NULL)
    920      1.1  christos     return NULL;
    921      1.1  christos 
    922      1.1  christos   /* First strip off any qualifiers, if we have a function or method.  */
    923      1.1  christos   ret_comp = info->tree;
    924      1.1  christos   while (!done)
    925      1.1  christos     switch (ret_comp->type)
    926      1.1  christos       {
    927      1.1  christos       case DEMANGLE_COMPONENT_CONST:
    928      1.1  christos       case DEMANGLE_COMPONENT_RESTRICT:
    929      1.1  christos       case DEMANGLE_COMPONENT_VOLATILE:
    930      1.1  christos       case DEMANGLE_COMPONENT_CONST_THIS:
    931      1.1  christos       case DEMANGLE_COMPONENT_RESTRICT_THIS:
    932      1.1  christos       case DEMANGLE_COMPONENT_VOLATILE_THIS:
    933      1.1  christos       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
    934  1.1.1.8  christos 	ret_comp = d_left (ret_comp);
    935  1.1.1.8  christos 	break;
    936      1.1  christos       default:
    937  1.1.1.6  christos 	done = true;
    938      1.1  christos 	break;
    939      1.1  christos       }
    940      1.1  christos 
    941      1.1  christos   /* What we have now should be a function.  Return its name.  */
    942      1.1  christos   if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
    943      1.1  christos     ret = cp_comp_to_string (d_left (ret_comp), 10);
    944  1.1.1.6  christos   else if (!require_params
    945  1.1.1.6  christos 	   && (ret_comp->type == DEMANGLE_COMPONENT_NAME
    946  1.1.1.6  christos 	       || ret_comp->type == DEMANGLE_COMPONENT_QUAL_NAME
    947  1.1.1.6  christos 	       || ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE))
    948  1.1.1.6  christos     ret = cp_comp_to_string (ret_comp, 10);
    949      1.1  christos 
    950      1.1  christos   return ret;
    951      1.1  christos }
    952      1.1  christos 
    953  1.1.1.6  christos /* DEMANGLED_NAME is the name of a function, including parameters and
    954  1.1.1.6  christos    (optionally) a return type.  Return the name of the function
    955  1.1.1.6  christos    without parameters or return type, or NULL if we can not parse the
    956  1.1.1.6  christos    name.  */
    957  1.1.1.6  christos 
    958  1.1.1.6  christos gdb::unique_xmalloc_ptr<char>
    959  1.1.1.6  christos cp_remove_params (const char *demangled_name)
    960  1.1.1.6  christos {
    961  1.1.1.6  christos   return cp_remove_params_1 (demangled_name, true);
    962  1.1.1.6  christos }
    963  1.1.1.6  christos 
    964  1.1.1.6  christos /* See cp-support.h.  */
    965  1.1.1.6  christos 
    966  1.1.1.6  christos gdb::unique_xmalloc_ptr<char>
    967  1.1.1.6  christos cp_remove_params_if_any (const char *demangled_name, bool completion_mode)
    968  1.1.1.6  christos {
    969  1.1.1.6  christos   /* Trying to remove parameters from the empty string fails.  If
    970  1.1.1.6  christos      we're completing / matching everything, avoid returning NULL
    971  1.1.1.6  christos      which would make callers interpret the result as an error.  */
    972  1.1.1.6  christos   if (demangled_name[0] == '\0' && completion_mode)
    973  1.1.1.7  christos     return make_unique_xstrdup ("");
    974  1.1.1.6  christos 
    975  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> without_params
    976  1.1.1.6  christos     = cp_remove_params_1 (demangled_name, false);
    977  1.1.1.6  christos 
    978  1.1.1.6  christos   if (without_params == NULL && completion_mode)
    979  1.1.1.6  christos     {
    980  1.1.1.6  christos       std::string copy = demangled_name;
    981  1.1.1.6  christos 
    982  1.1.1.6  christos       while (!copy.empty ())
    983  1.1.1.6  christos 	{
    984  1.1.1.6  christos 	  copy.pop_back ();
    985  1.1.1.6  christos 	  without_params = cp_remove_params_1 (copy.c_str (), false);
    986  1.1.1.6  christos 	  if (without_params != NULL)
    987  1.1.1.6  christos 	    break;
    988  1.1.1.6  christos 	}
    989  1.1.1.6  christos     }
    990  1.1.1.6  christos 
    991  1.1.1.6  christos   return without_params;
    992  1.1.1.6  christos }
    993  1.1.1.6  christos 
    994      1.1  christos /* Here are some random pieces of trivia to keep in mind while trying
    995      1.1  christos    to take apart demangled names:
    996      1.1  christos 
    997      1.1  christos    - Names can contain function arguments or templates, so the process
    998      1.1  christos      has to be, to some extent recursive: maybe keep track of your
    999      1.1  christos      depth based on encountering <> and ().
   1000      1.1  christos 
   1001      1.1  christos    - Parentheses don't just have to happen at the end of a name: they
   1002      1.1  christos      can occur even if the name in question isn't a function, because
   1003      1.1  christos      a template argument might be a type that's a function.
   1004      1.1  christos 
   1005      1.1  christos    - Conversely, even if you're trying to deal with a function, its
   1006      1.1  christos      demangled name might not end with ')': it could be a const or
   1007      1.1  christos      volatile class method, in which case it ends with "const" or
   1008      1.1  christos      "volatile".
   1009      1.1  christos 
   1010      1.1  christos    - Parentheses are also used in anonymous namespaces: a variable
   1011      1.1  christos      'foo' in an anonymous namespace gets demangled as "(anonymous
   1012      1.1  christos      namespace)::foo".
   1013      1.1  christos 
   1014      1.1  christos    - And operator names can contain parentheses or angle brackets.  */
   1015      1.1  christos 
   1016      1.1  christos /* FIXME: carlton/2003-03-13: We have several functions here with
   1017      1.1  christos    overlapping functionality; can we combine them?  Also, do they
   1018      1.1  christos    handle all the above considerations correctly?  */
   1019      1.1  christos 
   1020      1.1  christos 
   1021      1.1  christos /* This returns the length of first component of NAME, which should be
   1022      1.1  christos    the demangled name of a C++ variable/function/method/etc.
   1023      1.1  christos    Specifically, it returns the index of the first colon forming the
   1024      1.1  christos    boundary of the first component: so, given 'A::foo' or 'A::B::foo'
   1025      1.1  christos    it returns the 1, and given 'foo', it returns 0.  */
   1026      1.1  christos 
   1027      1.1  christos /* The character in NAME indexed by the return value is guaranteed to
   1028      1.1  christos    always be either ':' or '\0'.  */
   1029      1.1  christos 
   1030      1.1  christos /* NOTE: carlton/2003-03-13: This function is currently only intended
   1031      1.1  christos    for internal use: it's probably not entirely safe when called on
   1032      1.1  christos    user-generated input, because some of the 'index += 2' lines in
   1033      1.1  christos    cp_find_first_component_aux might go past the end of malformed
   1034      1.1  christos    input.  */
   1035      1.1  christos 
   1036      1.1  christos unsigned int
   1037      1.1  christos cp_find_first_component (const char *name)
   1038      1.1  christos {
   1039      1.1  christos   return cp_find_first_component_aux (name, 0);
   1040      1.1  christos }
   1041      1.1  christos 
   1042      1.1  christos /* Helper function for cp_find_first_component.  Like that function,
   1043      1.1  christos    it returns the length of the first component of NAME, but to make
   1044      1.1  christos    the recursion easier, it also stops if it reaches an unexpected ')'
   1045      1.1  christos    or '>' if the value of PERMISSIVE is nonzero.  */
   1046      1.1  christos 
   1047      1.1  christos static unsigned int
   1048      1.1  christos cp_find_first_component_aux (const char *name, int permissive)
   1049      1.1  christos {
   1050      1.1  christos   unsigned int index = 0;
   1051      1.1  christos   /* Operator names can show up in unexpected places.  Since these can
   1052      1.1  christos      contain parentheses or angle brackets, they can screw up the
   1053      1.1  christos      recursion.  But not every string 'operator' is part of an
   1054  1.1.1.7  christos      operator name: e.g. you could have a variable 'cooperator'.  So
   1055      1.1  christos      this variable tells us whether or not we should treat the string
   1056      1.1  christos      'operator' as starting an operator.  */
   1057      1.1  christos   int operator_possible = 1;
   1058      1.1  christos 
   1059      1.1  christos   for (;; ++index)
   1060      1.1  christos     {
   1061      1.1  christos       switch (name[index])
   1062      1.1  christos 	{
   1063      1.1  christos 	case '<':
   1064      1.1  christos 	  /* Template; eat it up.  The calls to cp_first_component
   1065      1.1  christos 	     should only return (I hope!) when they reach the '>'
   1066      1.1  christos 	     terminating the component or a '::' between two
   1067      1.1  christos 	     components.  (Hence the '+ 2'.)  */
   1068      1.1  christos 	  index += 1;
   1069      1.1  christos 	  for (index += cp_find_first_component_aux (name + index, 1);
   1070      1.1  christos 	       name[index] != '>';
   1071      1.1  christos 	       index += cp_find_first_component_aux (name + index, 1))
   1072      1.1  christos 	    {
   1073      1.1  christos 	      if (name[index] != ':')
   1074      1.1  christos 		{
   1075      1.1  christos 		  demangled_name_complaint (name);
   1076      1.1  christos 		  return strlen (name);
   1077      1.1  christos 		}
   1078      1.1  christos 	      index += 2;
   1079      1.1  christos 	    }
   1080      1.1  christos 	  operator_possible = 1;
   1081      1.1  christos 	  break;
   1082      1.1  christos 	case '(':
   1083      1.1  christos 	  /* Similar comment as to '<'.  */
   1084      1.1  christos 	  index += 1;
   1085      1.1  christos 	  for (index += cp_find_first_component_aux (name + index, 1);
   1086      1.1  christos 	       name[index] != ')';
   1087      1.1  christos 	       index += cp_find_first_component_aux (name + index, 1))
   1088      1.1  christos 	    {
   1089      1.1  christos 	      if (name[index] != ':')
   1090      1.1  christos 		{
   1091      1.1  christos 		  demangled_name_complaint (name);
   1092      1.1  christos 		  return strlen (name);
   1093      1.1  christos 		}
   1094      1.1  christos 	      index += 2;
   1095      1.1  christos 	    }
   1096      1.1  christos 	  operator_possible = 1;
   1097      1.1  christos 	  break;
   1098      1.1  christos 	case '>':
   1099      1.1  christos 	case ')':
   1100      1.1  christos 	  if (permissive)
   1101      1.1  christos 	    return index;
   1102      1.1  christos 	  else
   1103      1.1  christos 	    {
   1104      1.1  christos 	      demangled_name_complaint (name);
   1105      1.1  christos 	      return strlen (name);
   1106      1.1  christos 	    }
   1107      1.1  christos 	case '\0':
   1108      1.1  christos 	  return index;
   1109  1.1.1.4  christos 	case ':':
   1110  1.1.1.4  christos 	  /* ':' marks a component iff the next character is also a ':'.
   1111  1.1.1.4  christos 	     Otherwise it is probably malformed input.  */
   1112  1.1.1.4  christos 	  if (name[index + 1] == ':')
   1113  1.1.1.4  christos 	    return index;
   1114  1.1.1.4  christos 	  break;
   1115      1.1  christos 	case 'o':
   1116      1.1  christos 	  /* Operator names can screw up the recursion.  */
   1117      1.1  christos 	  if (operator_possible
   1118  1.1.1.6  christos 	      && startswith (name + index, CP_OPERATOR_STR))
   1119      1.1  christos 	    {
   1120  1.1.1.6  christos 	      index += CP_OPERATOR_LEN;
   1121      1.1  christos 	      while (ISSPACE(name[index]))
   1122      1.1  christos 		++index;
   1123      1.1  christos 	      switch (name[index])
   1124      1.1  christos 		{
   1125  1.1.1.6  christos 		case '\0':
   1126  1.1.1.6  christos 		  return index;
   1127      1.1  christos 		  /* Skip over one less than the appropriate number of
   1128      1.1  christos 		     characters: the for loop will skip over the last
   1129      1.1  christos 		     one.  */
   1130      1.1  christos 		case '<':
   1131      1.1  christos 		  if (name[index + 1] == '<')
   1132      1.1  christos 		    index += 1;
   1133      1.1  christos 		  else
   1134      1.1  christos 		    index += 0;
   1135      1.1  christos 		  break;
   1136      1.1  christos 		case '>':
   1137      1.1  christos 		case '-':
   1138      1.1  christos 		  if (name[index + 1] == '>')
   1139      1.1  christos 		    index += 1;
   1140      1.1  christos 		  else
   1141      1.1  christos 		    index += 0;
   1142      1.1  christos 		  break;
   1143      1.1  christos 		case '(':
   1144      1.1  christos 		  index += 1;
   1145      1.1  christos 		  break;
   1146      1.1  christos 		default:
   1147      1.1  christos 		  index += 0;
   1148      1.1  christos 		  break;
   1149      1.1  christos 		}
   1150      1.1  christos 	    }
   1151      1.1  christos 	  operator_possible = 0;
   1152      1.1  christos 	  break;
   1153      1.1  christos 	case ' ':
   1154      1.1  christos 	case ',':
   1155      1.1  christos 	case '.':
   1156      1.1  christos 	case '&':
   1157      1.1  christos 	case '*':
   1158      1.1  christos 	  /* NOTE: carlton/2003-04-18: I'm not sure what the precise
   1159      1.1  christos 	     set of relevant characters are here: it's necessary to
   1160      1.1  christos 	     include any character that can show up before 'operator'
   1161      1.1  christos 	     in a demangled name, and it's safe to include any
   1162      1.1  christos 	     character that can't be part of an identifier's name.  */
   1163      1.1  christos 	  operator_possible = 1;
   1164      1.1  christos 	  break;
   1165      1.1  christos 	default:
   1166      1.1  christos 	  operator_possible = 0;
   1167      1.1  christos 	  break;
   1168      1.1  christos 	}
   1169      1.1  christos     }
   1170      1.1  christos }
   1171      1.1  christos 
   1172      1.1  christos /* Complain about a demangled name that we don't know how to parse.
   1173      1.1  christos    NAME is the demangled name in question.  */
   1174      1.1  christos 
   1175      1.1  christos static void
   1176      1.1  christos demangled_name_complaint (const char *name)
   1177      1.1  christos {
   1178  1.1.1.6  christos   complaint ("unexpected demangled name '%s'", name);
   1179      1.1  christos }
   1180      1.1  christos 
   1181      1.1  christos /* If NAME is the fully-qualified name of a C++
   1182      1.1  christos    function/variable/method/etc., this returns the length of its
   1183      1.1  christos    entire prefix: all of the namespaces and classes that make up its
   1184      1.1  christos    name.  Given 'A::foo', it returns 1, given 'A::B::foo', it returns
   1185      1.1  christos    4, given 'foo', it returns 0.  */
   1186      1.1  christos 
   1187      1.1  christos unsigned int
   1188      1.1  christos cp_entire_prefix_len (const char *name)
   1189      1.1  christos {
   1190      1.1  christos   unsigned int current_len = cp_find_first_component (name);
   1191      1.1  christos   unsigned int previous_len = 0;
   1192      1.1  christos 
   1193      1.1  christos   while (name[current_len] != '\0')
   1194      1.1  christos     {
   1195      1.1  christos       gdb_assert (name[current_len] == ':');
   1196      1.1  christos       previous_len = current_len;
   1197      1.1  christos       /* Skip the '::'.  */
   1198      1.1  christos       current_len += 2;
   1199      1.1  christos       current_len += cp_find_first_component (name + current_len);
   1200      1.1  christos     }
   1201      1.1  christos 
   1202      1.1  christos   return previous_len;
   1203      1.1  christos }
   1204      1.1  christos 
   1205      1.1  christos /* Overload resolution functions.  */
   1206      1.1  christos 
   1207      1.1  christos /* Test to see if SYM is a symbol that we haven't seen corresponding
   1208  1.1.1.6  christos    to a function named OLOAD_NAME.  If so, add it to
   1209  1.1.1.6  christos    OVERLOAD_LIST.  */
   1210      1.1  christos 
   1211      1.1  christos static void
   1212      1.1  christos overload_list_add_symbol (struct symbol *sym,
   1213  1.1.1.6  christos 			  const char *oload_name,
   1214  1.1.1.6  christos 			  std::vector<symbol *> *overload_list)
   1215      1.1  christos {
   1216      1.1  christos   /* If there is no type information, we can't do anything, so
   1217      1.1  christos      skip.  */
   1218  1.1.1.8  christos   if (sym->type () == NULL)
   1219      1.1  christos     return;
   1220      1.1  christos 
   1221      1.1  christos   /* skip any symbols that we've already considered.  */
   1222  1.1.1.6  christos   for (symbol *listed_sym : *overload_list)
   1223  1.1.1.7  christos     if (strcmp (sym->linkage_name (), listed_sym->linkage_name ()) == 0)
   1224      1.1  christos       return;
   1225      1.1  christos 
   1226      1.1  christos   /* Get the demangled name without parameters */
   1227  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> sym_name
   1228  1.1.1.7  christos     = cp_remove_params (sym->natural_name ());
   1229      1.1  christos   if (!sym_name)
   1230      1.1  christos     return;
   1231      1.1  christos 
   1232      1.1  christos   /* skip symbols that cannot match */
   1233  1.1.1.6  christos   if (strcmp (sym_name.get (), oload_name) != 0)
   1234  1.1.1.6  christos     return;
   1235      1.1  christos 
   1236  1.1.1.6  christos   overload_list->push_back (sym);
   1237      1.1  christos }
   1238      1.1  christos 
   1239      1.1  christos /* Return a null-terminated list of pointers to function symbols that
   1240      1.1  christos    are named FUNC_NAME and are visible within NAMESPACE.  */
   1241      1.1  christos 
   1242  1.1.1.6  christos struct std::vector<symbol *>
   1243      1.1  christos make_symbol_overload_list (const char *func_name,
   1244  1.1.1.3  christos 			   const char *the_namespace)
   1245      1.1  christos {
   1246      1.1  christos   const char *name;
   1247  1.1.1.6  christos   std::vector<symbol *> overload_list;
   1248      1.1  christos 
   1249  1.1.1.6  christos   overload_list.reserve (100);
   1250      1.1  christos 
   1251  1.1.1.6  christos   add_symbol_overload_list_using (func_name, the_namespace, &overload_list);
   1252      1.1  christos 
   1253  1.1.1.3  christos   if (the_namespace[0] == '\0')
   1254      1.1  christos     name = func_name;
   1255      1.1  christos   else
   1256      1.1  christos     {
   1257      1.1  christos       char *concatenated_name
   1258  1.1.1.4  christos 	= (char *) alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1);
   1259  1.1.1.3  christos       strcpy (concatenated_name, the_namespace);
   1260      1.1  christos       strcat (concatenated_name, "::");
   1261      1.1  christos       strcat (concatenated_name, func_name);
   1262      1.1  christos       name = concatenated_name;
   1263      1.1  christos     }
   1264      1.1  christos 
   1265  1.1.1.6  christos   add_symbol_overload_list_qualified (name, &overload_list);
   1266  1.1.1.6  christos   return overload_list;
   1267      1.1  christos }
   1268      1.1  christos 
   1269      1.1  christos /* Add all symbols with a name matching NAME in BLOCK to the overload
   1270      1.1  christos    list.  */
   1271      1.1  christos 
   1272      1.1  christos static void
   1273  1.1.1.6  christos add_symbol_overload_list_block (const char *name,
   1274  1.1.1.6  christos 				const struct block *block,
   1275  1.1.1.6  christos 				std::vector<symbol *> *overload_list)
   1276      1.1  christos {
   1277  1.1.1.6  christos   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
   1278  1.1.1.6  christos 
   1279  1.1.1.9  christos   for (struct symbol *sym : block_iterator_range (block, &lookup_name))
   1280  1.1.1.6  christos     overload_list_add_symbol (sym, name, overload_list);
   1281      1.1  christos }
   1282      1.1  christos 
   1283      1.1  christos /* Adds the function FUNC_NAME from NAMESPACE to the overload set.  */
   1284      1.1  christos 
   1285      1.1  christos static void
   1286  1.1.1.6  christos add_symbol_overload_list_namespace (const char *func_name,
   1287  1.1.1.6  christos 				    const char *the_namespace,
   1288  1.1.1.6  christos 				    std::vector<symbol *> *overload_list)
   1289      1.1  christos {
   1290      1.1  christos   const char *name;
   1291      1.1  christos   const struct block *block = NULL;
   1292      1.1  christos 
   1293  1.1.1.3  christos   if (the_namespace[0] == '\0')
   1294      1.1  christos     name = func_name;
   1295      1.1  christos   else
   1296      1.1  christos     {
   1297      1.1  christos       char *concatenated_name
   1298  1.1.1.4  christos 	= (char *) alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1);
   1299      1.1  christos 
   1300  1.1.1.3  christos       strcpy (concatenated_name, the_namespace);
   1301      1.1  christos       strcat (concatenated_name, "::");
   1302      1.1  christos       strcat (concatenated_name, func_name);
   1303      1.1  christos       name = concatenated_name;
   1304      1.1  christos     }
   1305      1.1  christos 
   1306      1.1  christos   /* Look in the static block.  */
   1307  1.1.1.9  christos   block = get_selected_block (0);
   1308  1.1.1.9  christos   block = block == nullptr ? nullptr : block->static_block ();
   1309  1.1.1.9  christos   if (block != nullptr)
   1310  1.1.1.9  christos     {
   1311  1.1.1.9  christos       add_symbol_overload_list_block (name, block, overload_list);
   1312  1.1.1.9  christos 
   1313  1.1.1.9  christos       /* Look in the global block.  */
   1314  1.1.1.9  christos       block = block->global_block ();
   1315  1.1.1.9  christos       if (block)
   1316  1.1.1.9  christos 	add_symbol_overload_list_block (name, block, overload_list);
   1317  1.1.1.9  christos     }
   1318      1.1  christos }
   1319      1.1  christos 
   1320      1.1  christos /* Search the namespace of the given type and namespace of and public
   1321      1.1  christos    base types.  */
   1322      1.1  christos 
   1323      1.1  christos static void
   1324  1.1.1.6  christos add_symbol_overload_list_adl_namespace (struct type *type,
   1325  1.1.1.6  christos 					const char *func_name,
   1326  1.1.1.6  christos 					std::vector<symbol *> *overload_list)
   1327      1.1  christos {
   1328  1.1.1.3  christos   char *the_namespace;
   1329      1.1  christos   const char *type_name;
   1330      1.1  christos   int i, prefix_len;
   1331      1.1  christos 
   1332  1.1.1.8  christos   while (type->is_pointer_or_reference ()
   1333  1.1.1.8  christos 	 || type->code () == TYPE_CODE_ARRAY
   1334  1.1.1.8  christos 	 || type->code () == TYPE_CODE_TYPEDEF)
   1335      1.1  christos     {
   1336  1.1.1.7  christos       if (type->code () == TYPE_CODE_TYPEDEF)
   1337  1.1.1.7  christos 	type = check_typedef (type);
   1338      1.1  christos       else
   1339  1.1.1.8  christos 	type = type->target_type ();
   1340      1.1  christos     }
   1341      1.1  christos 
   1342  1.1.1.7  christos   type_name = type->name ();
   1343      1.1  christos 
   1344      1.1  christos   if (type_name == NULL)
   1345      1.1  christos     return;
   1346      1.1  christos 
   1347      1.1  christos   prefix_len = cp_entire_prefix_len (type_name);
   1348      1.1  christos 
   1349      1.1  christos   if (prefix_len != 0)
   1350      1.1  christos     {
   1351  1.1.1.4  christos       the_namespace = (char *) alloca (prefix_len + 1);
   1352  1.1.1.3  christos       strncpy (the_namespace, type_name, prefix_len);
   1353  1.1.1.3  christos       the_namespace[prefix_len] = '\0';
   1354      1.1  christos 
   1355  1.1.1.6  christos       add_symbol_overload_list_namespace (func_name, the_namespace,
   1356  1.1.1.6  christos 					  overload_list);
   1357      1.1  christos     }
   1358      1.1  christos 
   1359      1.1  christos   /* Check public base type */
   1360  1.1.1.7  christos   if (type->code () == TYPE_CODE_STRUCT)
   1361      1.1  christos     for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
   1362      1.1  christos       {
   1363      1.1  christos 	if (BASETYPE_VIA_PUBLIC (type, i))
   1364  1.1.1.6  christos 	  add_symbol_overload_list_adl_namespace (TYPE_BASECLASS (type, i),
   1365  1.1.1.6  christos 						  func_name,
   1366  1.1.1.6  christos 						  overload_list);
   1367      1.1  christos       }
   1368      1.1  christos }
   1369      1.1  christos 
   1370  1.1.1.6  christos /* Adds to OVERLOAD_LIST the overload list overload candidates for
   1371  1.1.1.6  christos    FUNC_NAME found through argument dependent lookup.  */
   1372      1.1  christos 
   1373  1.1.1.6  christos void
   1374  1.1.1.6  christos add_symbol_overload_list_adl (gdb::array_view<type *> arg_types,
   1375  1.1.1.6  christos 			      const char *func_name,
   1376  1.1.1.6  christos 			      std::vector<symbol *> *overload_list)
   1377  1.1.1.6  christos {
   1378  1.1.1.6  christos   for (type *arg_type : arg_types)
   1379  1.1.1.6  christos     add_symbol_overload_list_adl_namespace (arg_type, func_name,
   1380  1.1.1.6  christos 					    overload_list);
   1381      1.1  christos }
   1382      1.1  christos 
   1383      1.1  christos /* This applies the using directives to add namespaces to search in,
   1384      1.1  christos    and then searches for overloads in all of those namespaces.  It
   1385      1.1  christos    adds the symbols found to sym_return_val.  Arguments are as in
   1386      1.1  christos    make_symbol_overload_list.  */
   1387      1.1  christos 
   1388      1.1  christos static void
   1389  1.1.1.6  christos add_symbol_overload_list_using (const char *func_name,
   1390  1.1.1.6  christos 				const char *the_namespace,
   1391  1.1.1.6  christos 				std::vector<symbol *> *overload_list)
   1392      1.1  christos {
   1393      1.1  christos   struct using_direct *current;
   1394      1.1  christos   const struct block *block;
   1395      1.1  christos 
   1396      1.1  christos   /* First, go through the using directives.  If any of them apply,
   1397      1.1  christos      look in the appropriate namespaces for new functions to match
   1398      1.1  christos      on.  */
   1399      1.1  christos 
   1400      1.1  christos   for (block = get_selected_block (0);
   1401      1.1  christos        block != NULL;
   1402  1.1.1.8  christos        block = block->superblock ())
   1403  1.1.1.9  christos     for (current = block->get_using ();
   1404      1.1  christos 	current != NULL;
   1405      1.1  christos 	current = current->next)
   1406      1.1  christos       {
   1407      1.1  christos 	/* Prevent recursive calls.  */
   1408      1.1  christos 	if (current->searched)
   1409      1.1  christos 	  continue;
   1410      1.1  christos 
   1411  1.1.1.8  christos 	/* If this is a namespace alias or imported declaration ignore
   1412      1.1  christos 	   it.  */
   1413  1.1.1.8  christos 	if (current->alias != NULL || current->declaration != NULL)
   1414  1.1.1.8  christos 	  continue;
   1415      1.1  christos 
   1416  1.1.1.8  christos 	if (strcmp (the_namespace, current->import_dest) == 0)
   1417      1.1  christos 	  {
   1418      1.1  christos 	    /* Mark this import as searched so that the recursive call
   1419      1.1  christos 	       does not search it again.  */
   1420  1.1.1.6  christos 	    scoped_restore reset_directive_searched
   1421  1.1.1.6  christos 	      = make_scoped_restore (&current->searched, 1);
   1422      1.1  christos 
   1423  1.1.1.6  christos 	    add_symbol_overload_list_using (func_name,
   1424  1.1.1.6  christos 					    current->import_src,
   1425  1.1.1.6  christos 					    overload_list);
   1426      1.1  christos 	  }
   1427      1.1  christos       }
   1428      1.1  christos 
   1429      1.1  christos   /* Now, add names for this namespace.  */
   1430  1.1.1.6  christos   add_symbol_overload_list_namespace (func_name, the_namespace,
   1431  1.1.1.6  christos 				      overload_list);
   1432      1.1  christos }
   1433      1.1  christos 
   1434      1.1  christos /* This does the bulk of the work of finding overloaded symbols.
   1435      1.1  christos    FUNC_NAME is the name of the overloaded function we're looking for
   1436      1.1  christos    (possibly including namespace info).  */
   1437      1.1  christos 
   1438      1.1  christos static void
   1439  1.1.1.6  christos add_symbol_overload_list_qualified (const char *func_name,
   1440  1.1.1.6  christos 				    std::vector<symbol *> *overload_list)
   1441      1.1  christos {
   1442  1.1.1.8  christos   const struct block *surrounding_static_block = 0;
   1443      1.1  christos 
   1444      1.1  christos   /* Look through the partial symtabs for all symbols which begin by
   1445      1.1  christos      matching FUNC_NAME.  Make sure we read that symbol table in.  */
   1446      1.1  christos 
   1447  1.1.1.6  christos   for (objfile *objf : current_program_space->objfiles ())
   1448  1.1.1.8  christos     objf->expand_symtabs_for_function (func_name);
   1449      1.1  christos 
   1450      1.1  christos   /* Search upwards from currently selected frame (so that we can
   1451      1.1  christos      complete on local vars.  */
   1452      1.1  christos 
   1453  1.1.1.8  christos   for (const block *b = get_selected_block (0);
   1454  1.1.1.8  christos        b != nullptr;
   1455  1.1.1.8  christos        b = b->superblock ())
   1456  1.1.1.6  christos     add_symbol_overload_list_block (func_name, b, overload_list);
   1457      1.1  christos 
   1458  1.1.1.9  christos   surrounding_static_block = get_selected_block (0);
   1459  1.1.1.9  christos   surrounding_static_block = (surrounding_static_block == nullptr
   1460  1.1.1.9  christos 			      ? nullptr
   1461  1.1.1.9  christos 			      : surrounding_static_block->static_block ());
   1462      1.1  christos 
   1463      1.1  christos   /* Go through the symtabs and check the externs and statics for
   1464      1.1  christos      symbols which match.  */
   1465      1.1  christos 
   1466  1.1.1.8  christos   const block *block = get_selected_block (0);
   1467  1.1.1.9  christos   struct objfile *current_objfile = block ? block->objfile () : nullptr;
   1468      1.1  christos 
   1469  1.1.1.8  christos   gdbarch_iterate_over_objfiles_in_search_order
   1470  1.1.1.9  christos     (current_objfile ? current_objfile->arch () : current_inferior ()->arch (),
   1471  1.1.1.8  christos      [func_name, surrounding_static_block, &overload_list]
   1472  1.1.1.8  christos      (struct objfile *obj)
   1473  1.1.1.8  christos        {
   1474  1.1.1.8  christos 	 for (compunit_symtab *cust : obj->compunits ())
   1475  1.1.1.8  christos 	   {
   1476  1.1.1.8  christos 	     QUIT;
   1477  1.1.1.8  christos 	     const struct block *b = cust->blockvector ()->global_block ();
   1478  1.1.1.8  christos 	     add_symbol_overload_list_block (func_name, b, overload_list);
   1479  1.1.1.8  christos 
   1480  1.1.1.8  christos 	     b = cust->blockvector ()->static_block ();
   1481  1.1.1.8  christos 	     /* Don't do this block twice.  */
   1482  1.1.1.8  christos 	     if (b == surrounding_static_block)
   1483  1.1.1.8  christos 	       continue;
   1484  1.1.1.8  christos 
   1485  1.1.1.8  christos 	     add_symbol_overload_list_block (func_name, b, overload_list);
   1486  1.1.1.8  christos 	   }
   1487  1.1.1.8  christos 
   1488  1.1.1.8  christos 	 return 0;
   1489  1.1.1.8  christos        }, current_objfile);
   1490      1.1  christos }
   1491      1.1  christos 
   1492      1.1  christos /* Lookup the rtti type for a class name.  */
   1493      1.1  christos 
   1494      1.1  christos struct type *
   1495  1.1.1.7  christos cp_lookup_rtti_type (const char *name, const struct block *block)
   1496      1.1  christos {
   1497      1.1  christos   struct symbol * rtti_sym;
   1498      1.1  christos   struct type * rtti_type;
   1499      1.1  christos 
   1500  1.1.1.9  christos   rtti_sym = lookup_symbol (name, block,
   1501  1.1.1.9  christos 			    SEARCH_TYPE_DOMAIN | SEARCH_STRUCT_DOMAIN,
   1502  1.1.1.9  christos 			    nullptr).symbol;
   1503      1.1  christos 
   1504      1.1  christos   if (rtti_sym == NULL)
   1505      1.1  christos     {
   1506      1.1  christos       warning (_("RTTI symbol not found for class '%s'"), name);
   1507      1.1  christos       return NULL;
   1508      1.1  christos     }
   1509      1.1  christos 
   1510  1.1.1.8  christos   if (rtti_sym->aclass () != LOC_TYPEDEF)
   1511      1.1  christos     {
   1512      1.1  christos       warning (_("RTTI symbol for class '%s' is not a type"), name);
   1513      1.1  christos       return NULL;
   1514      1.1  christos     }
   1515      1.1  christos 
   1516  1.1.1.8  christos   rtti_type = check_typedef (rtti_sym->type ());
   1517      1.1  christos 
   1518  1.1.1.7  christos   switch (rtti_type->code ())
   1519      1.1  christos     {
   1520  1.1.1.2  christos     case TYPE_CODE_STRUCT:
   1521      1.1  christos       break;
   1522      1.1  christos     case TYPE_CODE_NAMESPACE:
   1523      1.1  christos       /* chastain/2003-11-26: the symbol tables often contain fake
   1524      1.1  christos 	 symbols for namespaces with the same name as the struct.
   1525      1.1  christos 	 This warning is an indication of a bug in the lookup order
   1526      1.1  christos 	 or a bug in the way that the symbol tables are populated.  */
   1527      1.1  christos       warning (_("RTTI symbol for class '%s' is a namespace"), name);
   1528      1.1  christos       return NULL;
   1529      1.1  christos     default:
   1530      1.1  christos       warning (_("RTTI symbol for class '%s' has bad type"), name);
   1531      1.1  christos       return NULL;
   1532      1.1  christos     }
   1533      1.1  christos 
   1534      1.1  christos   return rtti_type;
   1535      1.1  christos }
   1536      1.1  christos 
   1537  1.1.1.2  christos #ifdef HAVE_WORKING_FORK
   1538  1.1.1.2  christos 
   1539  1.1.1.7  christos /* If true, attempt to catch crashes in the demangler and print
   1540  1.1.1.2  christos    useful debugging information.  */
   1541  1.1.1.2  christos 
   1542  1.1.1.7  christos static bool catch_demangler_crashes = true;
   1543  1.1.1.2  christos 
   1544  1.1.1.2  christos /* Stack context and environment for demangler crash recovery.  */
   1545  1.1.1.2  christos 
   1546  1.1.1.7  christos static thread_local SIGJMP_BUF *gdb_demangle_jmp_buf;
   1547  1.1.1.2  christos 
   1548  1.1.1.7  christos /* If true, attempt to dump core from the signal handler.  */
   1549  1.1.1.2  christos 
   1550  1.1.1.7  christos static std::atomic<bool> gdb_demangle_attempt_core_dump;
   1551  1.1.1.2  christos 
   1552  1.1.1.2  christos /* Signal handler for gdb_demangle.  */
   1553  1.1.1.2  christos 
   1554  1.1.1.2  christos static void
   1555  1.1.1.2  christos gdb_demangle_signal_handler (int signo)
   1556  1.1.1.2  christos {
   1557  1.1.1.2  christos   if (gdb_demangle_attempt_core_dump)
   1558  1.1.1.2  christos     {
   1559  1.1.1.2  christos       if (fork () == 0)
   1560  1.1.1.2  christos 	dump_core ();
   1561  1.1.1.2  christos 
   1562  1.1.1.7  christos       gdb_demangle_attempt_core_dump = false;
   1563  1.1.1.2  christos     }
   1564  1.1.1.2  christos 
   1565  1.1.1.7  christos   SIGLONGJMP (*gdb_demangle_jmp_buf, signo);
   1566  1.1.1.7  christos }
   1567  1.1.1.7  christos 
   1568  1.1.1.7  christos /* A helper for gdb_demangle that reports a demangling failure.  */
   1569  1.1.1.7  christos 
   1570  1.1.1.7  christos static void
   1571  1.1.1.7  christos report_failed_demangle (const char *name, bool core_dump_allowed,
   1572  1.1.1.7  christos 			int crash_signal)
   1573  1.1.1.7  christos {
   1574  1.1.1.7  christos   static bool error_reported = false;
   1575  1.1.1.7  christos 
   1576  1.1.1.7  christos   if (!error_reported)
   1577  1.1.1.7  christos     {
   1578  1.1.1.7  christos       std::string short_msg
   1579  1.1.1.7  christos 	= string_printf (_("unable to demangle '%s' "
   1580  1.1.1.7  christos 			   "(demangler failed with signal %d)"),
   1581  1.1.1.7  christos 			 name, crash_signal);
   1582  1.1.1.7  christos 
   1583  1.1.1.7  christos       std::string long_msg
   1584  1.1.1.7  christos 	= string_printf ("%s:%d: %s: %s", __FILE__, __LINE__,
   1585  1.1.1.7  christos 			 "demangler-warning", short_msg.c_str ());
   1586  1.1.1.7  christos 
   1587  1.1.1.7  christos       target_terminal::scoped_restore_terminal_state term_state;
   1588  1.1.1.7  christos       target_terminal::ours_for_output ();
   1589  1.1.1.7  christos 
   1590  1.1.1.7  christos       begin_line ();
   1591  1.1.1.7  christos       if (core_dump_allowed)
   1592  1.1.1.8  christos 	gdb_printf (gdb_stderr,
   1593  1.1.1.8  christos 		    _("%s\nAttempting to dump core.\n"),
   1594  1.1.1.8  christos 		    long_msg.c_str ());
   1595  1.1.1.7  christos       else
   1596  1.1.1.7  christos 	warn_cant_dump_core (long_msg.c_str ());
   1597  1.1.1.7  christos 
   1598  1.1.1.7  christos       demangler_warning (__FILE__, __LINE__, "%s", short_msg.c_str ());
   1599  1.1.1.7  christos 
   1600  1.1.1.7  christos       error_reported = true;
   1601  1.1.1.7  christos     }
   1602  1.1.1.2  christos }
   1603  1.1.1.2  christos 
   1604  1.1.1.2  christos #endif
   1605  1.1.1.2  christos 
   1606      1.1  christos /* A wrapper for bfd_demangle.  */
   1607      1.1  christos 
   1608  1.1.1.8  christos gdb::unique_xmalloc_ptr<char>
   1609      1.1  christos gdb_demangle (const char *name, int options)
   1610      1.1  christos {
   1611  1.1.1.8  christos   gdb::unique_xmalloc_ptr<char> result;
   1612  1.1.1.2  christos   int crash_signal = 0;
   1613  1.1.1.2  christos 
   1614  1.1.1.2  christos #ifdef HAVE_WORKING_FORK
   1615  1.1.1.8  christos   scoped_segv_handler_restore restore_segv
   1616  1.1.1.8  christos     (catch_demangler_crashes
   1617  1.1.1.8  christos      ? gdb_demangle_signal_handler
   1618  1.1.1.8  christos      : nullptr);
   1619  1.1.1.7  christos 
   1620  1.1.1.7  christos   bool core_dump_allowed = gdb_demangle_attempt_core_dump;
   1621  1.1.1.7  christos   SIGJMP_BUF jmp_buf;
   1622  1.1.1.7  christos   scoped_restore restore_jmp_buf
   1623  1.1.1.7  christos     = make_scoped_restore (&gdb_demangle_jmp_buf, &jmp_buf);
   1624  1.1.1.2  christos   if (catch_demangler_crashes)
   1625  1.1.1.2  christos     {
   1626  1.1.1.7  christos       /* The signal handler may keep the signal blocked when we longjmp out
   1627  1.1.1.8  christos 	 of it.  If we have sigprocmask, we can use it to unblock the signal
   1628  1.1.1.7  christos 	 afterwards and we can avoid the performance overhead of saving the
   1629  1.1.1.7  christos 	 signal mask just in case the signal gets triggered.  Otherwise, just
   1630  1.1.1.7  christos 	 tell sigsetjmp to save the mask.  */
   1631  1.1.1.7  christos #ifdef HAVE_SIGPROCMASK
   1632  1.1.1.7  christos       crash_signal = SIGSETJMP (*gdb_demangle_jmp_buf, 0);
   1633  1.1.1.2  christos #else
   1634  1.1.1.7  christos       crash_signal = SIGSETJMP (*gdb_demangle_jmp_buf, 1);
   1635  1.1.1.2  christos #endif
   1636  1.1.1.2  christos     }
   1637  1.1.1.2  christos #endif
   1638  1.1.1.2  christos 
   1639  1.1.1.2  christos   if (crash_signal == 0)
   1640  1.1.1.8  christos     result.reset (bfd_demangle (NULL, name, options | DMGL_VERBOSE));
   1641  1.1.1.2  christos 
   1642  1.1.1.2  christos #ifdef HAVE_WORKING_FORK
   1643  1.1.1.2  christos   if (catch_demangler_crashes)
   1644  1.1.1.2  christos     {
   1645  1.1.1.2  christos       if (crash_signal != 0)
   1646  1.1.1.8  christos 	{
   1647  1.1.1.7  christos #ifdef HAVE_SIGPROCMASK
   1648  1.1.1.7  christos 	  /* If we got the signal, SIGSEGV may still be blocked; restore it.  */
   1649  1.1.1.7  christos 	  sigset_t segv_sig_set;
   1650  1.1.1.7  christos 	  sigemptyset (&segv_sig_set);
   1651  1.1.1.7  christos 	  sigaddset (&segv_sig_set, SIGSEGV);
   1652  1.1.1.7  christos 	  gdb_sigmask (SIG_UNBLOCK, &segv_sig_set, NULL);
   1653  1.1.1.7  christos #endif
   1654  1.1.1.2  christos 
   1655  1.1.1.7  christos 	  /* If there was a failure, we can't report it here, because
   1656  1.1.1.7  christos 	     we might be in a background thread.  Instead, arrange for
   1657  1.1.1.7  christos 	     the reporting to happen on the main thread.  */
   1658  1.1.1.8  christos 	  std::string copy = name;
   1659  1.1.1.9  christos 	  run_on_main_thread ([=, copy = std::move (copy)] ()
   1660  1.1.1.8  christos 	    {
   1661  1.1.1.8  christos 	      report_failed_demangle (copy.c_str (), core_dump_allowed,
   1662  1.1.1.8  christos 				      crash_signal);
   1663  1.1.1.8  christos 	    });
   1664  1.1.1.2  christos 
   1665  1.1.1.8  christos 	  result = NULL;
   1666  1.1.1.8  christos 	}
   1667  1.1.1.2  christos     }
   1668  1.1.1.2  christos #endif
   1669  1.1.1.2  christos 
   1670  1.1.1.2  christos   return result;
   1671      1.1  christos }
   1672      1.1  christos 
   1673  1.1.1.4  christos /* See cp-support.h.  */
   1674  1.1.1.4  christos 
   1675  1.1.1.8  christos char *
   1676  1.1.1.8  christos gdb_cplus_demangle_print (int options,
   1677  1.1.1.8  christos 			  struct demangle_component *tree,
   1678  1.1.1.8  christos 			  int estimated_length,
   1679  1.1.1.8  christos 			  size_t *p_allocated_size)
   1680  1.1.1.8  christos {
   1681  1.1.1.8  christos   return cplus_demangle_print (options | DMGL_VERBOSE, tree,
   1682  1.1.1.8  christos 			       estimated_length, p_allocated_size);
   1683  1.1.1.8  christos }
   1684  1.1.1.8  christos 
   1685  1.1.1.8  christos /* A wrapper for cplus_demangle_v3_components that forces
   1686  1.1.1.8  christos    DMGL_VERBOSE.  */
   1687  1.1.1.8  christos 
   1688  1.1.1.8  christos static struct demangle_component *
   1689  1.1.1.8  christos gdb_cplus_demangle_v3_components (const char *mangled,
   1690  1.1.1.8  christos 				  int options, void **mem)
   1691  1.1.1.8  christos {
   1692  1.1.1.8  christos   return cplus_demangle_v3_components (mangled, options | DMGL_VERBOSE, mem);
   1693  1.1.1.8  christos }
   1694  1.1.1.8  christos 
   1695  1.1.1.8  christos /* See cp-support.h.  */
   1696  1.1.1.8  christos 
   1697  1.1.1.6  christos unsigned int
   1698  1.1.1.6  christos cp_search_name_hash (const char *search_name)
   1699  1.1.1.6  christos {
   1700  1.1.1.6  christos   /* cp_entire_prefix_len assumes a fully-qualified name with no
   1701  1.1.1.6  christos      leading "::".  */
   1702  1.1.1.6  christos   if (startswith (search_name, "::"))
   1703  1.1.1.6  christos     search_name += 2;
   1704  1.1.1.6  christos 
   1705  1.1.1.6  christos   unsigned int prefix_len = cp_entire_prefix_len (search_name);
   1706  1.1.1.6  christos   if (prefix_len != 0)
   1707  1.1.1.6  christos     search_name += prefix_len + 2;
   1708  1.1.1.6  christos 
   1709  1.1.1.6  christos   unsigned int hash = 0;
   1710  1.1.1.6  christos   for (const char *string = search_name; *string != '\0'; ++string)
   1711  1.1.1.6  christos     {
   1712  1.1.1.6  christos       string = skip_spaces (string);
   1713  1.1.1.6  christos 
   1714  1.1.1.6  christos       if (*string == '(')
   1715  1.1.1.6  christos 	break;
   1716  1.1.1.6  christos 
   1717  1.1.1.6  christos       /* Ignore ABI tags such as "[abi:cxx11].  */
   1718  1.1.1.6  christos       if (*string == '['
   1719  1.1.1.6  christos 	  && startswith (string + 1, "abi:")
   1720  1.1.1.6  christos 	  && string[5] != ':')
   1721  1.1.1.6  christos 	break;
   1722  1.1.1.6  christos 
   1723  1.1.1.8  christos       /* Ignore template parameter lists.  */
   1724  1.1.1.8  christos       if (string[0] == '<'
   1725  1.1.1.8  christos 	  && string[1] != '(' && string[1] != '<' && string[1] != '='
   1726  1.1.1.8  christos 	  && string[1] != ' ' && string[1] != '\0')
   1727  1.1.1.8  christos 	break;
   1728  1.1.1.8  christos 
   1729  1.1.1.6  christos       hash = SYMBOL_HASH_NEXT (hash, *string);
   1730  1.1.1.6  christos     }
   1731  1.1.1.6  christos   return hash;
   1732  1.1.1.6  christos }
   1733  1.1.1.6  christos 
   1734  1.1.1.6  christos /* Helper for cp_symbol_name_matches (i.e., symbol_name_matcher_ftype
   1735  1.1.1.6  christos    implementation for symbol_name_match_type::WILD matching).  Split
   1736  1.1.1.6  christos    to a separate function for unit-testing convenience.
   1737  1.1.1.6  christos 
   1738  1.1.1.6  christos    If SYMBOL_SEARCH_NAME has more scopes than LOOKUP_NAME, we try to
   1739  1.1.1.6  christos    match ignoring the extra leading scopes of SYMBOL_SEARCH_NAME.
   1740  1.1.1.6  christos    This allows conveniently setting breakpoints on functions/methods
   1741  1.1.1.6  christos    inside any namespace/class without specifying the fully-qualified
   1742  1.1.1.6  christos    name.
   1743  1.1.1.6  christos 
   1744  1.1.1.6  christos    E.g., these match:
   1745  1.1.1.6  christos 
   1746  1.1.1.6  christos     [symbol search name]   [lookup name]
   1747  1.1.1.6  christos     foo::bar::func         foo::bar::func
   1748  1.1.1.6  christos     foo::bar::func         bar::func
   1749  1.1.1.6  christos     foo::bar::func         func
   1750  1.1.1.6  christos 
   1751  1.1.1.6  christos    While these don't:
   1752  1.1.1.6  christos 
   1753  1.1.1.6  christos     [symbol search name]   [lookup name]
   1754  1.1.1.6  christos     foo::zbar::func        bar::func
   1755  1.1.1.6  christos     foo::bar::func         foo::func
   1756  1.1.1.6  christos 
   1757  1.1.1.6  christos    See more examples in the test_cp_symbol_name_matches selftest
   1758  1.1.1.6  christos    function below.
   1759  1.1.1.6  christos 
   1760  1.1.1.6  christos    See symbol_name_matcher_ftype for description of SYMBOL_SEARCH_NAME
   1761  1.1.1.6  christos    and COMP_MATCH_RES.
   1762  1.1.1.6  christos 
   1763  1.1.1.6  christos    LOOKUP_NAME/LOOKUP_NAME_LEN is the name we're looking up.
   1764  1.1.1.6  christos 
   1765  1.1.1.6  christos    See strncmp_iw_with_mode for description of MODE.
   1766  1.1.1.6  christos */
   1767  1.1.1.6  christos 
   1768  1.1.1.6  christos static bool
   1769  1.1.1.6  christos cp_symbol_name_matches_1 (const char *symbol_search_name,
   1770  1.1.1.6  christos 			  const char *lookup_name,
   1771  1.1.1.6  christos 			  size_t lookup_name_len,
   1772  1.1.1.6  christos 			  strncmp_iw_mode mode,
   1773  1.1.1.6  christos 			  completion_match_result *comp_match_res)
   1774  1.1.1.6  christos {
   1775  1.1.1.6  christos   const char *sname = symbol_search_name;
   1776  1.1.1.6  christos   completion_match_for_lcd *match_for_lcd
   1777  1.1.1.6  christos     = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL);
   1778  1.1.1.6  christos 
   1779  1.1.1.9  christos   gdb_assert (match_for_lcd == nullptr || match_for_lcd->empty ());
   1780  1.1.1.9  christos 
   1781  1.1.1.6  christos   while (true)
   1782  1.1.1.6  christos     {
   1783  1.1.1.6  christos       if (strncmp_iw_with_mode (sname, lookup_name, lookup_name_len,
   1784  1.1.1.8  christos 				mode, language_cplus, match_for_lcd, true) == 0)
   1785  1.1.1.6  christos 	{
   1786  1.1.1.6  christos 	  if (comp_match_res != NULL)
   1787  1.1.1.6  christos 	    {
   1788  1.1.1.6  christos 	      /* Note here we set different MATCH and MATCH_FOR_LCD
   1789  1.1.1.6  christos 		 strings.  This is because with
   1790  1.1.1.6  christos 
   1791  1.1.1.6  christos 		  (gdb) b push_bac[TAB]
   1792  1.1.1.6  christos 
   1793  1.1.1.6  christos 		 we want the completion matches to list
   1794  1.1.1.6  christos 
   1795  1.1.1.6  christos 		  std::vector<int>::push_back(...)
   1796  1.1.1.6  christos 		  std::vector<char>::push_back(...)
   1797  1.1.1.6  christos 
   1798  1.1.1.6  christos 		 etc., which are SYMBOL_SEARCH_NAMEs, while we want
   1799  1.1.1.6  christos 		 the input line to auto-complete to
   1800  1.1.1.6  christos 
   1801  1.1.1.6  christos 		  (gdb) push_back(...)
   1802  1.1.1.6  christos 
   1803  1.1.1.6  christos 		 which is SNAME, not to
   1804  1.1.1.6  christos 
   1805  1.1.1.6  christos 		  (gdb) std::vector<
   1806  1.1.1.6  christos 
   1807  1.1.1.6  christos 		 which would be the regular common prefix between all
   1808  1.1.1.6  christos 		 the matches otherwise.  */
   1809  1.1.1.6  christos 	      comp_match_res->set_match (symbol_search_name, sname);
   1810  1.1.1.6  christos 	    }
   1811  1.1.1.6  christos 	  return true;
   1812  1.1.1.6  christos 	}
   1813  1.1.1.6  christos 
   1814  1.1.1.9  christos       /* Clear match_for_lcd so the next strncmp_iw_with_mode call starts
   1815  1.1.1.9  christos 	 from scratch.  */
   1816  1.1.1.9  christos       if (match_for_lcd != nullptr)
   1817  1.1.1.9  christos 	match_for_lcd->clear ();
   1818  1.1.1.9  christos 
   1819  1.1.1.6  christos       unsigned int len = cp_find_first_component (sname);
   1820  1.1.1.6  christos 
   1821  1.1.1.6  christos       if (sname[len] == '\0')
   1822  1.1.1.6  christos 	return false;
   1823  1.1.1.6  christos 
   1824  1.1.1.6  christos       gdb_assert (sname[len] == ':');
   1825  1.1.1.6  christos       /* Skip the '::'.  */
   1826  1.1.1.6  christos       sname += len + 2;
   1827  1.1.1.6  christos     }
   1828  1.1.1.6  christos }
   1829  1.1.1.6  christos 
   1830  1.1.1.6  christos /* C++ symbol_name_matcher_ftype implementation.  */
   1831  1.1.1.6  christos 
   1832  1.1.1.6  christos static bool
   1833  1.1.1.6  christos cp_fq_symbol_name_matches (const char *symbol_search_name,
   1834  1.1.1.6  christos 			   const lookup_name_info &lookup_name,
   1835  1.1.1.6  christos 			   completion_match_result *comp_match_res)
   1836  1.1.1.6  christos {
   1837  1.1.1.6  christos   /* Get the demangled name.  */
   1838  1.1.1.6  christos   const std::string &name = lookup_name.cplus ().lookup_name ();
   1839  1.1.1.6  christos   completion_match_for_lcd *match_for_lcd
   1840  1.1.1.6  christos     = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL);
   1841  1.1.1.6  christos   strncmp_iw_mode mode = (lookup_name.completion_mode ()
   1842  1.1.1.6  christos 			  ? strncmp_iw_mode::NORMAL
   1843  1.1.1.6  christos 			  : strncmp_iw_mode::MATCH_PARAMS);
   1844  1.1.1.6  christos 
   1845  1.1.1.6  christos   if (strncmp_iw_with_mode (symbol_search_name,
   1846  1.1.1.6  christos 			    name.c_str (), name.size (),
   1847  1.1.1.6  christos 			    mode, language_cplus, match_for_lcd) == 0)
   1848  1.1.1.6  christos     {
   1849  1.1.1.6  christos       if (comp_match_res != NULL)
   1850  1.1.1.6  christos 	comp_match_res->set_match (symbol_search_name);
   1851  1.1.1.6  christos       return true;
   1852  1.1.1.6  christos     }
   1853  1.1.1.6  christos 
   1854  1.1.1.6  christos   return false;
   1855  1.1.1.6  christos }
   1856  1.1.1.6  christos 
   1857  1.1.1.6  christos /* C++ symbol_name_matcher_ftype implementation for wild matches.
   1858  1.1.1.6  christos    Defers work to cp_symbol_name_matches_1.  */
   1859  1.1.1.6  christos 
   1860  1.1.1.6  christos static bool
   1861  1.1.1.6  christos cp_symbol_name_matches (const char *symbol_search_name,
   1862  1.1.1.6  christos 			const lookup_name_info &lookup_name,
   1863  1.1.1.6  christos 			completion_match_result *comp_match_res)
   1864  1.1.1.6  christos {
   1865  1.1.1.6  christos   /* Get the demangled name.  */
   1866  1.1.1.6  christos   const std::string &name = lookup_name.cplus ().lookup_name ();
   1867  1.1.1.6  christos 
   1868  1.1.1.6  christos   strncmp_iw_mode mode = (lookup_name.completion_mode ()
   1869  1.1.1.6  christos 			  ? strncmp_iw_mode::NORMAL
   1870  1.1.1.6  christos 			  : strncmp_iw_mode::MATCH_PARAMS);
   1871  1.1.1.6  christos 
   1872  1.1.1.6  christos   return cp_symbol_name_matches_1 (symbol_search_name,
   1873  1.1.1.6  christos 				   name.c_str (), name.size (),
   1874  1.1.1.6  christos 				   mode, comp_match_res);
   1875  1.1.1.6  christos }
   1876  1.1.1.6  christos 
   1877  1.1.1.6  christos /* See cp-support.h.  */
   1878  1.1.1.6  christos 
   1879  1.1.1.6  christos symbol_name_matcher_ftype *
   1880  1.1.1.6  christos cp_get_symbol_name_matcher (const lookup_name_info &lookup_name)
   1881  1.1.1.6  christos {
   1882  1.1.1.6  christos   switch (lookup_name.match_type ())
   1883  1.1.1.6  christos     {
   1884  1.1.1.6  christos     case symbol_name_match_type::FULL:
   1885  1.1.1.6  christos     case symbol_name_match_type::EXPRESSION:
   1886  1.1.1.6  christos     case symbol_name_match_type::SEARCH_NAME:
   1887  1.1.1.6  christos       return cp_fq_symbol_name_matches;
   1888  1.1.1.6  christos     case symbol_name_match_type::WILD:
   1889  1.1.1.6  christos       return cp_symbol_name_matches;
   1890  1.1.1.6  christos     }
   1891  1.1.1.6  christos 
   1892  1.1.1.6  christos   gdb_assert_not_reached ("");
   1893  1.1.1.6  christos }
   1894  1.1.1.6  christos 
   1895  1.1.1.6  christos #if GDB_SELF_TEST
   1896  1.1.1.6  christos 
   1897  1.1.1.6  christos namespace selftests {
   1898  1.1.1.6  christos 
   1899  1.1.1.7  christos static void
   1900  1.1.1.6  christos test_cp_symbol_name_matches ()
   1901  1.1.1.6  christos {
   1902  1.1.1.6  christos #define CHECK_MATCH(SYMBOL, INPUT)					\
   1903  1.1.1.6  christos   SELF_CHECK (cp_symbol_name_matches_1 (SYMBOL,				\
   1904  1.1.1.6  christos 					INPUT, sizeof (INPUT) - 1,	\
   1905  1.1.1.6  christos 					strncmp_iw_mode::MATCH_PARAMS,	\
   1906  1.1.1.6  christos 					NULL))
   1907  1.1.1.6  christos 
   1908  1.1.1.6  christos #define CHECK_NOT_MATCH(SYMBOL, INPUT)					\
   1909  1.1.1.6  christos   SELF_CHECK (!cp_symbol_name_matches_1 (SYMBOL,			\
   1910  1.1.1.6  christos 					 INPUT, sizeof (INPUT) - 1,	\
   1911  1.1.1.6  christos 					 strncmp_iw_mode::MATCH_PARAMS,	\
   1912  1.1.1.6  christos 					 NULL))
   1913  1.1.1.6  christos 
   1914  1.1.1.6  christos   /* Like CHECK_MATCH, and also check that INPUT (and all substrings
   1915  1.1.1.6  christos      that start at index 0) completes to SYMBOL.  */
   1916  1.1.1.6  christos #define CHECK_MATCH_C(SYMBOL, INPUT)					\
   1917  1.1.1.6  christos   do									\
   1918  1.1.1.6  christos     {									\
   1919  1.1.1.6  christos       CHECK_MATCH (SYMBOL, INPUT);					\
   1920  1.1.1.6  christos       for (size_t i = 0; i < sizeof (INPUT) - 1; i++)			\
   1921  1.1.1.6  christos 	SELF_CHECK (cp_symbol_name_matches_1 (SYMBOL, INPUT, i,		\
   1922  1.1.1.6  christos 					      strncmp_iw_mode::NORMAL,	\
   1923  1.1.1.6  christos 					      NULL));			\
   1924  1.1.1.6  christos     } while (0)
   1925  1.1.1.6  christos 
   1926  1.1.1.6  christos   /* Like CHECK_NOT_MATCH, and also check that INPUT does NOT complete
   1927  1.1.1.6  christos      to SYMBOL.  */
   1928  1.1.1.6  christos #define CHECK_NOT_MATCH_C(SYMBOL, INPUT)				\
   1929  1.1.1.6  christos   do									\
   1930  1.1.1.6  christos     { 									\
   1931  1.1.1.6  christos       CHECK_NOT_MATCH (SYMBOL, INPUT);					\
   1932  1.1.1.6  christos       SELF_CHECK (!cp_symbol_name_matches_1 (SYMBOL, INPUT,		\
   1933  1.1.1.6  christos 					     sizeof (INPUT) - 1,	\
   1934  1.1.1.6  christos 					     strncmp_iw_mode::NORMAL,	\
   1935  1.1.1.6  christos 					     NULL));			\
   1936  1.1.1.6  christos     } while (0)
   1937  1.1.1.6  christos 
   1938  1.1.1.6  christos   /* Lookup name without parens matches all overloads.  */
   1939  1.1.1.6  christos   CHECK_MATCH_C ("function()", "function");
   1940  1.1.1.6  christos   CHECK_MATCH_C ("function(int)", "function");
   1941  1.1.1.6  christos 
   1942  1.1.1.6  christos   /* Check whitespace around parameters is ignored.  */
   1943  1.1.1.6  christos   CHECK_MATCH_C ("function()", "function ()");
   1944  1.1.1.6  christos   CHECK_MATCH_C ("function ( )", "function()");
   1945  1.1.1.6  christos   CHECK_MATCH_C ("function ()", "function( )");
   1946  1.1.1.6  christos   CHECK_MATCH_C ("func(int)", "func( int )");
   1947  1.1.1.6  christos   CHECK_MATCH_C ("func(int)", "func ( int ) ");
   1948  1.1.1.6  christos   CHECK_MATCH_C ("func ( int )", "func( int )");
   1949  1.1.1.6  christos   CHECK_MATCH_C ("func ( int )", "func ( int ) ");
   1950  1.1.1.6  christos 
   1951  1.1.1.6  christos   /* Check symbol name prefixes aren't incorrectly matched.  */
   1952  1.1.1.6  christos   CHECK_NOT_MATCH ("func", "function");
   1953  1.1.1.6  christos   CHECK_NOT_MATCH ("function", "func");
   1954  1.1.1.6  christos   CHECK_NOT_MATCH ("function()", "func");
   1955  1.1.1.6  christos 
   1956  1.1.1.6  christos   /* Check that if the lookup name includes parameters, only the right
   1957  1.1.1.6  christos      overload matches.  */
   1958  1.1.1.6  christos   CHECK_MATCH_C ("function(int)", "function(int)");
   1959  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function(int)", "function()");
   1960  1.1.1.6  christos 
   1961  1.1.1.6  christos   /* Check that whitespace within symbol names is not ignored.  */
   1962  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function", "func tion");
   1963  1.1.1.6  christos   CHECK_NOT_MATCH_C ("func__tion", "func_ _tion");
   1964  1.1.1.6  christos   CHECK_NOT_MATCH_C ("func11tion", "func1 1tion");
   1965  1.1.1.6  christos 
   1966  1.1.1.6  christos   /* Check the converse, which can happen with template function,
   1967  1.1.1.6  christos      where the return type is part of the demangled name.  */
   1968  1.1.1.6  christos   CHECK_NOT_MATCH_C ("func tion", "function");
   1969  1.1.1.6  christos   CHECK_NOT_MATCH_C ("func1 1tion", "func11tion");
   1970  1.1.1.6  christos   CHECK_NOT_MATCH_C ("func_ _tion", "func__tion");
   1971  1.1.1.6  christos 
   1972  1.1.1.6  christos   /* Within parameters too.  */
   1973  1.1.1.6  christos   CHECK_NOT_MATCH_C ("func(param)", "func(par am)");
   1974  1.1.1.6  christos 
   1975  1.1.1.6  christos   /* Check handling of whitespace around C++ operators.  */
   1976  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator<<", "opera tor<<");
   1977  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator<<", "operator< <");
   1978  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator<<", "operator < <");
   1979  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator==", "operator= =");
   1980  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator==", "operator = =");
   1981  1.1.1.6  christos   CHECK_MATCH_C ("operator<<", "operator <<");
   1982  1.1.1.6  christos   CHECK_MATCH_C ("operator<<()", "operator <<");
   1983  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator<<()", "operator<<(int)");
   1984  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator<<(int)", "operator<<()");
   1985  1.1.1.6  christos   CHECK_MATCH_C ("operator==", "operator ==");
   1986  1.1.1.6  christos   CHECK_MATCH_C ("operator==()", "operator ==");
   1987  1.1.1.6  christos   CHECK_MATCH_C ("operator <<", "operator<<");
   1988  1.1.1.6  christos   CHECK_MATCH_C ("operator ==", "operator==");
   1989  1.1.1.6  christos   CHECK_MATCH_C ("operator bool", "operator  bool");
   1990  1.1.1.6  christos   CHECK_MATCH_C ("operator bool ()", "operator  bool");
   1991  1.1.1.6  christos   CHECK_MATCH_C ("operatorX<<", "operatorX < <");
   1992  1.1.1.6  christos   CHECK_MATCH_C ("Xoperator<<", "Xoperator < <");
   1993  1.1.1.6  christos 
   1994  1.1.1.6  christos   CHECK_MATCH_C ("operator()(int)", "operator()(int)");
   1995  1.1.1.6  christos   CHECK_MATCH_C ("operator()(int)", "operator ( ) ( int )");
   1996  1.1.1.6  christos   CHECK_MATCH_C ("operator()<long>(int)", "operator ( ) < long > ( int )");
   1997  1.1.1.6  christos   /* The first "()" is not the parameter list.  */
   1998  1.1.1.6  christos   CHECK_NOT_MATCH ("operator()(int)", "operator");
   1999  1.1.1.6  christos 
   2000  1.1.1.6  christos   /* Misc user-defined operator tests.  */
   2001  1.1.1.6  christos 
   2002  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator/=()", "operator ^=");
   2003  1.1.1.6  christos   /* Same length at end of input.  */
   2004  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator>>", "operator[]");
   2005  1.1.1.6  christos   /* Same length but not at end of input.  */
   2006  1.1.1.6  christos   CHECK_NOT_MATCH_C ("operator>>()", "operator[]()");
   2007  1.1.1.6  christos 
   2008  1.1.1.6  christos   CHECK_MATCH_C ("base::operator char*()", "base::operator char*()");
   2009  1.1.1.6  christos   CHECK_MATCH_C ("base::operator char*()", "base::operator char * ()");
   2010  1.1.1.6  christos   CHECK_MATCH_C ("base::operator char**()", "base::operator char * * ()");
   2011  1.1.1.6  christos   CHECK_MATCH ("base::operator char**()", "base::operator char * *");
   2012  1.1.1.6  christos   CHECK_MATCH_C ("base::operator*()", "base::operator*()");
   2013  1.1.1.6  christos   CHECK_NOT_MATCH_C ("base::operator char*()", "base::operatorc");
   2014  1.1.1.6  christos   CHECK_NOT_MATCH ("base::operator char*()", "base::operator char");
   2015  1.1.1.6  christos   CHECK_NOT_MATCH ("base::operator char*()", "base::operat");
   2016  1.1.1.6  christos 
   2017  1.1.1.6  christos   /* Check handling of whitespace around C++ scope operators.  */
   2018  1.1.1.6  christos   CHECK_NOT_MATCH_C ("foo::bar", "foo: :bar");
   2019  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar", "foo :: bar");
   2020  1.1.1.6  christos   CHECK_MATCH_C ("foo :: bar", "foo::bar");
   2021  1.1.1.6  christos 
   2022  1.1.1.6  christos   CHECK_MATCH_C ("abc::def::ghi()", "abc::def::ghi()");
   2023  1.1.1.6  christos   CHECK_MATCH_C ("abc::def::ghi ( )", "abc::def::ghi()");
   2024  1.1.1.6  christos   CHECK_MATCH_C ("abc::def::ghi()", "abc::def::ghi ( )");
   2025  1.1.1.6  christos   CHECK_MATCH_C ("function()", "function()");
   2026  1.1.1.6  christos   CHECK_MATCH_C ("bar::function()", "bar::function()");
   2027  1.1.1.6  christos 
   2028  1.1.1.6  christos   /* Wild matching tests follow.  */
   2029  1.1.1.6  christos 
   2030  1.1.1.6  christos   /* Tests matching symbols in some scope.  */
   2031  1.1.1.6  christos   CHECK_MATCH_C ("foo::function()", "function");
   2032  1.1.1.6  christos   CHECK_MATCH_C ("foo::function(int)", "function");
   2033  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar::function()", "function");
   2034  1.1.1.6  christos   CHECK_MATCH_C ("bar::function()", "bar::function");
   2035  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar::function()", "bar::function");
   2036  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar::function(int)", "bar::function");
   2037  1.1.1.6  christos 
   2038  1.1.1.6  christos   /* Same, with parameters in the lookup name.  */
   2039  1.1.1.6  christos   CHECK_MATCH_C ("foo::function()", "function()");
   2040  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar::function()", "function()");
   2041  1.1.1.6  christos   CHECK_MATCH_C ("foo::function(int)", "function(int)");
   2042  1.1.1.6  christos   CHECK_MATCH_C ("foo::function()", "foo::function()");
   2043  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar::function()", "bar::function()");
   2044  1.1.1.6  christos   CHECK_MATCH_C ("foo::bar::function(int)", "bar::function(int)");
   2045  1.1.1.6  christos   CHECK_MATCH_C ("bar::function()", "bar::function()");
   2046  1.1.1.6  christos 
   2047  1.1.1.6  christos   CHECK_NOT_MATCH_C ("foo::bar::function(int)", "bar::function()");
   2048  1.1.1.6  christos 
   2049  1.1.1.6  christos   CHECK_MATCH_C ("(anonymous namespace)::bar::function(int)",
   2050  1.1.1.6  christos 		 "bar::function(int)");
   2051  1.1.1.6  christos   CHECK_MATCH_C ("foo::(anonymous namespace)::bar::function(int)",
   2052  1.1.1.6  christos 		 "function(int)");
   2053  1.1.1.6  christos 
   2054  1.1.1.6  christos   /* Lookup scope wider than symbol scope, should not match.  */
   2055  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function()", "bar::function");
   2056  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function()", "bar::function()");
   2057  1.1.1.6  christos 
   2058  1.1.1.6  christos   /* Explicit global scope doesn't match.  */
   2059  1.1.1.6  christos   CHECK_NOT_MATCH_C ("foo::function()", "::function");
   2060  1.1.1.6  christos   CHECK_NOT_MATCH_C ("foo::function()", "::function()");
   2061  1.1.1.6  christos   CHECK_NOT_MATCH_C ("foo::function(int)", "::function()");
   2062  1.1.1.6  christos   CHECK_NOT_MATCH_C ("foo::function(int)", "::function(int)");
   2063  1.1.1.6  christos 
   2064  1.1.1.6  christos   /* Test ABI tag matching/ignoring.  */
   2065  1.1.1.6  christos 
   2066  1.1.1.6  christos   /* If the symbol name has an ABI tag, but the lookup name doesn't,
   2067  1.1.1.6  christos      then the ABI tag in the symbol name is ignored.  */
   2068  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo]()", "function");
   2069  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo](int)", "function");
   2070  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo]()", "function ()");
   2071  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function[abi:foo]()", "function (int)");
   2072  1.1.1.6  christos 
   2073  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo]()", "function[abi:foo]");
   2074  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo](int)", "function[abi:foo]");
   2075  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo]()", "function[abi:foo] ()");
   2076  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo][abi:bar]()", "function");
   2077  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo][abi:bar](int)", "function");
   2078  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo][abi:bar]()", "function[abi:foo]");
   2079  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo][abi:bar](int)", "function[abi:foo]");
   2080  1.1.1.6  christos   CHECK_MATCH_C ("function[abi:foo][abi:bar]()", "function[abi:foo] ()");
   2081  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function[abi:foo][abi:bar]()", "function[abi:foo] (int)");
   2082  1.1.1.6  christos 
   2083  1.1.1.6  christos   CHECK_MATCH_C ("function  [abi:foo][abi:bar] ( )", "function [abi:foo]");
   2084  1.1.1.6  christos 
   2085  1.1.1.6  christos   /* If the symbol name does not have an ABI tag, while the lookup
   2086  1.1.1.6  christos      name has one, then there's no match.  */
   2087  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function()", "function[abi:foo]()");
   2088  1.1.1.6  christos   CHECK_NOT_MATCH_C ("function()", "function[abi:foo]");
   2089  1.1.1.6  christos }
   2090  1.1.1.6  christos 
   2091  1.1.1.6  christos /* If non-NULL, return STR wrapped in quotes.  Otherwise, return a
   2092  1.1.1.6  christos    "<null>" string (with no quotes).  */
   2093  1.1.1.6  christos 
   2094  1.1.1.6  christos static std::string
   2095  1.1.1.6  christos quote (const char *str)
   2096  1.1.1.6  christos {
   2097  1.1.1.6  christos   if (str != NULL)
   2098  1.1.1.7  christos     return std::string (1, '"') + str + '"';
   2099  1.1.1.6  christos   else
   2100  1.1.1.6  christos     return "<null>";
   2101  1.1.1.6  christos }
   2102  1.1.1.6  christos 
   2103  1.1.1.6  christos /* Check that removing parameter info out of NAME produces EXPECTED.
   2104  1.1.1.6  christos    COMPLETION_MODE indicates whether we're testing normal and
   2105  1.1.1.6  christos    completion mode.  FILE and LINE are used to provide better test
   2106  1.1.1.9  christos    location information in case the check fails.  */
   2107  1.1.1.6  christos 
   2108  1.1.1.6  christos static void
   2109  1.1.1.6  christos check_remove_params (const char *file, int line,
   2110  1.1.1.6  christos 		      const char *name, const char *expected,
   2111  1.1.1.6  christos 		      bool completion_mode)
   2112  1.1.1.6  christos {
   2113  1.1.1.6  christos   gdb::unique_xmalloc_ptr<char> result
   2114  1.1.1.6  christos     = cp_remove_params_if_any (name, completion_mode);
   2115  1.1.1.6  christos 
   2116  1.1.1.6  christos   if ((expected == NULL) != (result == NULL)
   2117  1.1.1.6  christos       || (expected != NULL
   2118  1.1.1.6  christos 	  && strcmp (result.get (), expected) != 0))
   2119  1.1.1.6  christos     {
   2120  1.1.1.6  christos       error (_("%s:%d: make-paramless self-test failed: (completion=%d) "
   2121  1.1.1.6  christos 	       "\"%s\" -> %s, expected %s"),
   2122  1.1.1.6  christos 	     file, line, completion_mode, name,
   2123  1.1.1.6  christos 	     quote (result.get ()).c_str (), quote (expected).c_str ());
   2124  1.1.1.6  christos     }
   2125  1.1.1.6  christos }
   2126  1.1.1.6  christos 
   2127  1.1.1.6  christos /* Entry point for cp_remove_params unit tests.  */
   2128  1.1.1.6  christos 
   2129  1.1.1.6  christos static void
   2130  1.1.1.6  christos test_cp_remove_params ()
   2131  1.1.1.6  christos {
   2132  1.1.1.6  christos   /* Check that removing parameter info out of NAME produces EXPECTED.
   2133  1.1.1.6  christos      Checks both normal and completion modes.  */
   2134  1.1.1.6  christos #define CHECK(NAME, EXPECTED)						\
   2135  1.1.1.6  christos   do									\
   2136  1.1.1.6  christos     {									\
   2137  1.1.1.6  christos       check_remove_params (__FILE__, __LINE__, NAME, EXPECTED, false);	\
   2138  1.1.1.6  christos       check_remove_params (__FILE__, __LINE__, NAME, EXPECTED, true);	\
   2139  1.1.1.6  christos     }									\
   2140  1.1.1.6  christos   while (0)
   2141  1.1.1.6  christos 
   2142  1.1.1.6  christos   /* Similar, but used when NAME is incomplete -- i.e., is has
   2143  1.1.1.6  christos      unbalanced parentheses.  In this case, looking for the exact name
   2144  1.1.1.6  christos      should fail / return empty.  */
   2145  1.1.1.6  christos #define CHECK_INCOMPL(NAME, EXPECTED)					\
   2146  1.1.1.6  christos   do									\
   2147  1.1.1.6  christos     {									\
   2148  1.1.1.6  christos       check_remove_params (__FILE__, __LINE__, NAME, NULL, false);	\
   2149  1.1.1.6  christos       check_remove_params (__FILE__, __LINE__, NAME, EXPECTED, true);	\
   2150  1.1.1.6  christos     }									\
   2151  1.1.1.6  christos   while (0)
   2152  1.1.1.6  christos 
   2153  1.1.1.6  christos   CHECK ("function()", "function");
   2154  1.1.1.6  christos   CHECK_INCOMPL ("function(", "function");
   2155  1.1.1.6  christos   CHECK ("function() const", "function");
   2156  1.1.1.6  christos 
   2157  1.1.1.6  christos   CHECK ("(anonymous namespace)::A::B::C",
   2158  1.1.1.6  christos 	 "(anonymous namespace)::A::B::C");
   2159  1.1.1.6  christos 
   2160  1.1.1.6  christos   CHECK ("A::(anonymous namespace)",
   2161  1.1.1.6  christos 	 "A::(anonymous namespace)");
   2162  1.1.1.6  christos 
   2163  1.1.1.6  christos   CHECK_INCOMPL ("A::(anonymou", "A");
   2164  1.1.1.6  christos 
   2165  1.1.1.6  christos   CHECK ("A::foo<int>()",
   2166  1.1.1.6  christos 	 "A::foo<int>");
   2167  1.1.1.6  christos 
   2168  1.1.1.6  christos   CHECK_INCOMPL ("A::foo<int>(",
   2169  1.1.1.6  christos 		 "A::foo<int>");
   2170  1.1.1.6  christos 
   2171  1.1.1.6  christos   CHECK ("A::foo<(anonymous namespace)::B>::func(int)",
   2172  1.1.1.6  christos 	 "A::foo<(anonymous namespace)::B>::func");
   2173  1.1.1.6  christos 
   2174  1.1.1.6  christos   CHECK_INCOMPL ("A::foo<(anonymous namespace)::B>::func(in",
   2175  1.1.1.6  christos 		 "A::foo<(anonymous namespace)::B>::func");
   2176  1.1.1.6  christos 
   2177  1.1.1.6  christos   CHECK_INCOMPL ("A::foo<(anonymous namespace)::B>::",
   2178  1.1.1.6  christos 		 "A::foo<(anonymous namespace)::B>");
   2179  1.1.1.6  christos 
   2180  1.1.1.6  christos   CHECK_INCOMPL ("A::foo<(anonymous namespace)::B>:",
   2181  1.1.1.6  christos 		 "A::foo<(anonymous namespace)::B>");
   2182  1.1.1.6  christos 
   2183  1.1.1.6  christos   CHECK ("A::foo<(anonymous namespace)::B>",
   2184  1.1.1.6  christos 	 "A::foo<(anonymous namespace)::B>");
   2185  1.1.1.6  christos 
   2186  1.1.1.6  christos   CHECK_INCOMPL ("A::foo<(anonymous namespace)::B",
   2187  1.1.1.6  christos 		 "A::foo");
   2188  1.1.1.6  christos 
   2189  1.1.1.6  christos   CHECK ("A::foo<void(int)>::func(int)",
   2190  1.1.1.6  christos 	 "A::foo<void(int)>::func");
   2191  1.1.1.6  christos 
   2192  1.1.1.6  christos   CHECK_INCOMPL ("A::foo<void(int",
   2193  1.1.1.6  christos 		 "A::foo");
   2194  1.1.1.6  christos 
   2195  1.1.1.6  christos #undef CHECK
   2196  1.1.1.6  christos #undef CHECK_INCOMPL
   2197  1.1.1.6  christos }
   2198  1.1.1.6  christos 
   2199  1.1.1.6  christos } // namespace selftests
   2200  1.1.1.6  christos 
   2201  1.1.1.6  christos #endif /* GDB_SELF_CHECK */
   2202  1.1.1.6  christos 
   2203      1.1  christos /* This is a front end for cp_find_first_component, for unit testing.
   2204      1.1  christos    Be careful when using it: see the NOTE above
   2205      1.1  christos    cp_find_first_component.  */
   2206      1.1  christos 
   2207      1.1  christos static void
   2208  1.1.1.6  christos first_component_command (const char *arg, int from_tty)
   2209      1.1  christos {
   2210      1.1  christos   if (!arg)
   2211      1.1  christos     return;
   2212      1.1  christos 
   2213  1.1.1.9  christos   int len = cp_find_first_component (arg);
   2214  1.1.1.9  christos   gdb_printf ("%.*s\n", len, arg);
   2215      1.1  christos }
   2216      1.1  christos 
   2217      1.1  christos /* Implement "info vtbl".  */
   2218      1.1  christos 
   2219      1.1  christos static void
   2220  1.1.1.6  christos info_vtbl_command (const char *arg, int from_tty)
   2221      1.1  christos {
   2222      1.1  christos   struct value *value;
   2223      1.1  christos 
   2224      1.1  christos   value = parse_and_eval (arg);
   2225      1.1  christos   cplus_print_vtable (value);
   2226      1.1  christos }
   2227      1.1  christos 
   2228  1.1.1.8  christos /* See description in cp-support.h.  */
   2229  1.1.1.8  christos 
   2230  1.1.1.8  christos const char *
   2231  1.1.1.8  christos find_toplevel_char (const char *s, char c)
   2232  1.1.1.8  christos {
   2233  1.1.1.8  christos   int quoted = 0;		/* zero if we're not in quotes;
   2234  1.1.1.8  christos 				   '"' if we're in a double-quoted string;
   2235  1.1.1.8  christos 				   '\'' if we're in a single-quoted string.  */
   2236  1.1.1.8  christos   int depth = 0;		/* Number of unclosed parens we've seen.  */
   2237  1.1.1.8  christos   const char *scan;
   2238  1.1.1.8  christos 
   2239  1.1.1.8  christos   for (scan = s; *scan; scan++)
   2240  1.1.1.8  christos     {
   2241  1.1.1.8  christos       if (quoted)
   2242  1.1.1.8  christos 	{
   2243  1.1.1.8  christos 	  if (*scan == quoted)
   2244  1.1.1.8  christos 	    quoted = 0;
   2245  1.1.1.8  christos 	  else if (*scan == '\\' && *(scan + 1))
   2246  1.1.1.8  christos 	    scan++;
   2247  1.1.1.8  christos 	}
   2248  1.1.1.8  christos       else if (*scan == c && ! quoted && depth == 0)
   2249  1.1.1.8  christos 	return scan;
   2250  1.1.1.8  christos       else if (*scan == '"' || *scan == '\'')
   2251  1.1.1.8  christos 	quoted = *scan;
   2252  1.1.1.8  christos       else if (*scan == '(' || *scan == '<')
   2253  1.1.1.8  christos 	depth++;
   2254  1.1.1.8  christos       else if ((*scan == ')' || *scan == '>') && depth > 0)
   2255  1.1.1.8  christos 	depth--;
   2256  1.1.1.8  christos       else if (*scan == 'o' && !quoted && depth == 0)
   2257  1.1.1.8  christos 	{
   2258  1.1.1.8  christos 	  /* Handle C++ operator names.  */
   2259  1.1.1.8  christos 	  if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
   2260  1.1.1.8  christos 	    {
   2261  1.1.1.8  christos 	      scan += CP_OPERATOR_LEN;
   2262  1.1.1.8  christos 	      if (*scan == c)
   2263  1.1.1.8  christos 		return scan;
   2264  1.1.1.8  christos 	      while (ISSPACE (*scan))
   2265  1.1.1.8  christos 		{
   2266  1.1.1.8  christos 		  ++scan;
   2267  1.1.1.8  christos 		  if (*scan == c)
   2268  1.1.1.8  christos 		    return scan;
   2269  1.1.1.8  christos 		}
   2270  1.1.1.8  christos 	      if (*scan == '\0')
   2271  1.1.1.8  christos 		break;
   2272  1.1.1.8  christos 
   2273  1.1.1.8  christos 	      switch (*scan)
   2274  1.1.1.8  christos 		{
   2275  1.1.1.8  christos 		  /* Skip over one less than the appropriate number of
   2276  1.1.1.8  christos 		     characters: the for loop will skip over the last
   2277  1.1.1.8  christos 		     one.  */
   2278  1.1.1.8  christos 		case '<':
   2279  1.1.1.8  christos 		  if (scan[1] == '<')
   2280  1.1.1.8  christos 		    {
   2281  1.1.1.8  christos 		      scan++;
   2282  1.1.1.8  christos 		      if (*scan == c)
   2283  1.1.1.8  christos 			return scan;
   2284  1.1.1.8  christos 		    }
   2285  1.1.1.8  christos 		  break;
   2286  1.1.1.8  christos 		case '>':
   2287  1.1.1.8  christos 		  if (scan[1] == '>')
   2288  1.1.1.8  christos 		    {
   2289  1.1.1.8  christos 		      scan++;
   2290  1.1.1.8  christos 		      if (*scan == c)
   2291  1.1.1.8  christos 			return scan;
   2292  1.1.1.8  christos 		    }
   2293  1.1.1.8  christos 		  break;
   2294  1.1.1.8  christos 		}
   2295  1.1.1.8  christos 	    }
   2296  1.1.1.8  christos 	}
   2297  1.1.1.8  christos     }
   2298  1.1.1.8  christos 
   2299  1.1.1.8  christos   return 0;
   2300  1.1.1.8  christos }
   2301  1.1.1.8  christos 
   2302  1.1.1.7  christos void _initialize_cp_support ();
   2303      1.1  christos void
   2304  1.1.1.7  christos _initialize_cp_support ()
   2305      1.1  christos {
   2306  1.1.1.8  christos   cmd_list_element *maintenance_cplus
   2307  1.1.1.8  christos     = add_basic_prefix_cmd ("cplus", class_maintenance,
   2308  1.1.1.8  christos 			    _("C++ maintenance commands."),
   2309  1.1.1.8  christos 			    &maint_cplus_cmd_list,
   2310  1.1.1.8  christos 			    0, &maintenancelist);
   2311  1.1.1.8  christos   add_alias_cmd ("cp", maintenance_cplus, class_maintenance, 1,
   2312      1.1  christos 		 &maintenancelist);
   2313      1.1  christos 
   2314      1.1  christos   add_cmd ("first_component",
   2315      1.1  christos 	   class_maintenance,
   2316      1.1  christos 	   first_component_command,
   2317      1.1  christos 	   _("Print the first class/namespace component of NAME."),
   2318      1.1  christos 	   &maint_cplus_cmd_list);
   2319      1.1  christos 
   2320      1.1  christos   add_info ("vtbl", info_vtbl_command,
   2321      1.1  christos 	    _("Show the virtual function table for a C++ object.\n\
   2322      1.1  christos Usage: info vtbl EXPRESSION\n\
   2323      1.1  christos Evaluate EXPRESSION and display the virtual function table for the\n\
   2324      1.1  christos resulting object."));
   2325  1.1.1.2  christos 
   2326  1.1.1.2  christos #ifdef HAVE_WORKING_FORK
   2327  1.1.1.2  christos   add_setshow_boolean_cmd ("catch-demangler-crashes", class_maintenance,
   2328  1.1.1.2  christos 			   &catch_demangler_crashes, _("\
   2329  1.1.1.2  christos Set whether to attempt to catch demangler crashes."), _("\
   2330  1.1.1.2  christos Show whether to attempt to catch demangler crashes."), _("\
   2331  1.1.1.2  christos If enabled GDB will attempt to catch demangler crashes and\n\
   2332  1.1.1.2  christos display the offending symbol."),
   2333  1.1.1.2  christos 			   NULL,
   2334  1.1.1.2  christos 			   NULL,
   2335  1.1.1.2  christos 			   &maintenance_set_cmdlist,
   2336  1.1.1.2  christos 			   &maintenance_show_cmdlist);
   2337  1.1.1.7  christos 
   2338  1.1.1.7  christos   gdb_demangle_attempt_core_dump = can_dump_core (LIMIT_CUR);
   2339  1.1.1.2  christos #endif
   2340  1.1.1.6  christos 
   2341  1.1.1.6  christos #if GDB_SELF_TEST
   2342  1.1.1.6  christos   selftests::register_test ("cp_symbol_name_matches",
   2343  1.1.1.6  christos 			    selftests::test_cp_symbol_name_matches);
   2344  1.1.1.6  christos   selftests::register_test ("cp_remove_params",
   2345  1.1.1.6  christos 			    selftests::test_cp_remove_params);
   2346  1.1.1.6  christos #endif
   2347      1.1  christos }
   2348