xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/cp-support.c (revision 8ecbf5f02b752fcb7debe1a8fab1dc82602bc760)
1 /* Helper routines for C++ support in GDB.
2    Copyright (C) 2002-2017 Free Software Foundation, Inc.
3 
4    Contributed by MontaVista Software.
5 
6    This file is part of GDB.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20 
21 #include "defs.h"
22 #include "cp-support.h"
23 #include "demangle.h"
24 #include "gdbcmd.h"
25 #include "dictionary.h"
26 #include "objfiles.h"
27 #include "frame.h"
28 #include "symtab.h"
29 #include "block.h"
30 #include "complaints.h"
31 #include "gdbtypes.h"
32 #include "expression.h"
33 #include "value.h"
34 #include "cp-abi.h"
35 #include "namespace.h"
36 #include <signal.h>
37 #include "gdb_setjmp.h"
38 #include "safe-ctype.h"
39 
40 #define d_left(dc) (dc)->u.s_binary.left
41 #define d_right(dc) (dc)->u.s_binary.right
42 
43 /* Functions related to demangled name parsing.  */
44 
45 static unsigned int cp_find_first_component_aux (const char *name,
46 						 int permissive);
47 
48 static void demangled_name_complaint (const char *name);
49 
50 /* Functions/variables related to overload resolution.  */
51 
52 static int sym_return_val_size = -1;
53 static int sym_return_val_index;
54 static struct symbol **sym_return_val;
55 
56 static void overload_list_add_symbol (struct symbol *sym,
57 				      const char *oload_name);
58 
59 static void make_symbol_overload_list_using (const char *func_name,
60 					     const char *the_namespace);
61 
62 static void make_symbol_overload_list_qualified (const char *func_name);
63 
64 /* The list of "maint cplus" commands.  */
65 
66 struct cmd_list_element *maint_cplus_cmd_list = NULL;
67 
68 /* The actual commands.  */
69 
70 static void maint_cplus_command (char *arg, int from_tty);
71 static void first_component_command (char *arg, int from_tty);
72 
73 /* A list of typedefs which should not be substituted by replace_typedefs.  */
74 static const char * const ignore_typedefs[] =
75   {
76     "std::istream", "std::iostream", "std::ostream", "std::string"
77   };
78 
79 static void
80   replace_typedefs (struct demangle_parse_info *info,
81 		    struct demangle_component *ret_comp,
82 		    canonicalization_ftype *finder,
83 		    void *data);
84 
85 /* A convenience function to copy STRING into OBSTACK, returning a pointer
86    to the newly allocated string and saving the number of bytes saved in LEN.
87 
88    It does not copy the terminating '\0' byte!  */
89 
90 static char *
91 copy_string_to_obstack (struct obstack *obstack, const char *string,
92 			long *len)
93 {
94   *len = strlen (string);
95   return (char *) obstack_copy (obstack, string, *len);
96 }
97 
98 /* Return 1 if STRING is clearly already in canonical form.  This
99    function is conservative; things which it does not recognize are
100    assumed to be non-canonical, and the parser will sort them out
101    afterwards.  This speeds up the critical path for alphanumeric
102    identifiers.  */
103 
104 static int
105 cp_already_canonical (const char *string)
106 {
107   /* Identifier start character [a-zA-Z_].  */
108   if (!ISIDST (string[0]))
109     return 0;
110 
111   /* These are the only two identifiers which canonicalize to other
112      than themselves or an error: unsigned -> unsigned int and
113      signed -> int.  */
114   if (string[0] == 'u' && strcmp (&string[1], "nsigned") == 0)
115     return 0;
116   else if (string[0] == 's' && strcmp (&string[1], "igned") == 0)
117     return 0;
118 
119   /* Identifier character [a-zA-Z0-9_].  */
120   while (ISIDNUM (string[1]))
121     string++;
122 
123   if (string[1] == '\0')
124     return 1;
125   else
126     return 0;
127 }
128 
129 /* Inspect the given RET_COMP for its type.  If it is a typedef,
130    replace the node with the typedef's tree.
131 
132    Returns 1 if any typedef substitutions were made, 0 otherwise.  */
133 
134 static int
135 inspect_type (struct demangle_parse_info *info,
136 	      struct demangle_component *ret_comp,
137 	      canonicalization_ftype *finder,
138 	      void *data)
139 {
140   int i;
141   char *name;
142   struct symbol *sym;
143 
144   /* Copy the symbol's name from RET_COMP and look it up
145      in the symbol table.  */
146   name = (char *) alloca (ret_comp->u.s_name.len + 1);
147   memcpy (name, ret_comp->u.s_name.s, ret_comp->u.s_name.len);
148   name[ret_comp->u.s_name.len] = '\0';
149 
150   /* Ignore any typedefs that should not be substituted.  */
151   for (i = 0; i < ARRAY_SIZE (ignore_typedefs); ++i)
152     {
153       if (strcmp (name, ignore_typedefs[i]) == 0)
154 	return 0;
155     }
156 
157   sym = NULL;
158 
159   TRY
160     {
161       sym = lookup_symbol (name, 0, VAR_DOMAIN, 0).symbol;
162     }
163   CATCH (except, RETURN_MASK_ALL)
164     {
165       return 0;
166     }
167   END_CATCH
168 
169   if (sym != NULL)
170     {
171       struct type *otype = SYMBOL_TYPE (sym);
172 
173       if (finder != NULL)
174 	{
175 	  const char *new_name = (*finder) (otype, data);
176 
177 	  if (new_name != NULL)
178 	    {
179 	      ret_comp->u.s_name.s = new_name;
180 	      ret_comp->u.s_name.len = strlen (new_name);
181 	      return 1;
182 	    }
183 
184 	  return 0;
185 	}
186 
187       /* If the type is a typedef or namespace alias, replace it.  */
188       if (TYPE_CODE (otype) == TYPE_CODE_TYPEDEF
189 	  || TYPE_CODE (otype) == TYPE_CODE_NAMESPACE)
190 	{
191 	  long len;
192 	  int is_anon;
193 	  struct type *type;
194 	  std::unique_ptr<demangle_parse_info> i;
195 
196 	  /* Get the real type of the typedef.  */
197 	  type = check_typedef (otype);
198 
199 	  /* If the symbol is a namespace and its type name is no different
200 	     than the name we looked up, this symbol is not a namespace
201 	     alias and does not need to be substituted.  */
202 	  if (TYPE_CODE (otype) == TYPE_CODE_NAMESPACE
203 	      && strcmp (TYPE_NAME (type), name) == 0)
204 	    return 0;
205 
206 	  is_anon = (TYPE_TAG_NAME (type) == NULL
207 		     && (TYPE_CODE (type) == TYPE_CODE_ENUM
208 			 || TYPE_CODE (type) == TYPE_CODE_STRUCT
209 			 || TYPE_CODE (type) == TYPE_CODE_UNION));
210 	  if (is_anon)
211 	    {
212 	      struct type *last = otype;
213 
214 	      /* Find the last typedef for the type.  */
215 	      while (TYPE_TARGET_TYPE (last) != NULL
216 		     && (TYPE_CODE (TYPE_TARGET_TYPE (last))
217 			 == TYPE_CODE_TYPEDEF))
218 		last = TYPE_TARGET_TYPE (last);
219 
220 	      /* If there is only one typedef for this anonymous type,
221 		 do not substitute it.  */
222 	      if (type == otype)
223 		return 0;
224 	      else
225 		/* Use the last typedef seen as the type for this
226 		   anonymous type.  */
227 		type = last;
228 	    }
229 
230 	  string_file buf;
231 	  TRY
232 	    {
233 	      type_print (type, "", &buf, -1);
234 	    }
235 	  /* If type_print threw an exception, there is little point
236 	     in continuing, so just bow out gracefully.  */
237 	  CATCH (except, RETURN_MASK_ERROR)
238 	    {
239 	      return 0;
240 	    }
241 	  END_CATCH
242 
243 	  len = buf.size ();
244 	  name = (char *) obstack_copy0 (&info->obstack, buf.c_str (), len);
245 
246 	  /* Turn the result into a new tree.  Note that this
247 	     tree will contain pointers into NAME, so NAME cannot
248 	     be free'd until all typedef conversion is done and
249 	     the final result is converted into a string.  */
250 	  i = cp_demangled_name_to_comp (name, NULL);
251 	  if (i != NULL)
252 	    {
253 	      /* Merge the two trees.  */
254 	      cp_merge_demangle_parse_infos (info, ret_comp, i.get ());
255 
256 	      /* Replace any newly introduced typedefs -- but not
257 		 if the type is anonymous (that would lead to infinite
258 		 looping).  */
259 	      if (!is_anon)
260 		replace_typedefs (info, ret_comp, finder, data);
261 	    }
262 	  else
263 	    {
264 	      /* This shouldn't happen unless the type printer has
265 		 output something that the name parser cannot grok.
266 		 Nonetheless, an ounce of prevention...
267 
268 		 Canonicalize the name again, and store it in the
269 		 current node (RET_COMP).  */
270 	      std::string canon = cp_canonicalize_string_no_typedefs (name);
271 
272 	      if (!canon.empty ())
273 		{
274 		  /* Copy the canonicalization into the obstack.  */
275 		  name = copy_string_to_obstack (&info->obstack, canon.c_str (), &len);
276 		}
277 
278 	      ret_comp->u.s_name.s = name;
279 	      ret_comp->u.s_name.len = len;
280 	    }
281 
282 	  return 1;
283 	}
284     }
285 
286   return 0;
287 }
288 
289 /* Replace any typedefs appearing in the qualified name
290    (DEMANGLE_COMPONENT_QUAL_NAME) represented in RET_COMP for the name parse
291    given in INFO.  */
292 
293 static void
294 replace_typedefs_qualified_name (struct demangle_parse_info *info,
295 				 struct demangle_component *ret_comp,
296 				 canonicalization_ftype *finder,
297 				 void *data)
298 {
299   long len;
300   char *name;
301   string_file buf;
302   struct demangle_component *comp = ret_comp;
303 
304   /* Walk each node of the qualified name, reconstructing the name of
305      this element.  With every node, check for any typedef substitutions.
306      If a substitution has occurred, replace the qualified name node
307      with a DEMANGLE_COMPONENT_NAME node representing the new, typedef-
308      substituted name.  */
309   while (comp->type == DEMANGLE_COMPONENT_QUAL_NAME)
310     {
311       if (d_left (comp)->type == DEMANGLE_COMPONENT_NAME)
312 	{
313 	  struct demangle_component newobj;
314 
315 	  buf.write (d_left (comp)->u.s_name.s, d_left (comp)->u.s_name.len);
316 	  len = buf.size ();
317 	  name = (char *) obstack_copy0 (&info->obstack, buf.c_str (), len);
318 	  newobj.type = DEMANGLE_COMPONENT_NAME;
319 	  newobj.u.s_name.s = name;
320 	  newobj.u.s_name.len = len;
321 	  if (inspect_type (info, &newobj, finder, data))
322 	    {
323 	      char *n, *s;
324 	      long slen;
325 
326 	      /* A typedef was substituted in NEW.  Convert it to a
327 		 string and replace the top DEMANGLE_COMPONENT_QUAL_NAME
328 		 node.  */
329 
330 	      buf.clear ();
331 	      n = cp_comp_to_string (&newobj, 100);
332 	      if (n == NULL)
333 		{
334 		  /* If something went astray, abort typedef substitutions.  */
335 		  return;
336 		}
337 
338 	      s = copy_string_to_obstack (&info->obstack, n, &slen);
339 	      xfree (n);
340 
341 	      d_left (ret_comp)->type = DEMANGLE_COMPONENT_NAME;
342 	      d_left (ret_comp)->u.s_name.s = s;
343 	      d_left (ret_comp)->u.s_name.len = slen;
344 	      d_right (ret_comp) = d_right (comp);
345 	      comp = ret_comp;
346 	      continue;
347 	    }
348 	}
349       else
350 	{
351 	  /* The current node is not a name, so simply replace any
352 	     typedefs in it.  Then print it to the stream to continue
353 	     checking for more typedefs in the tree.  */
354 	  replace_typedefs (info, d_left (comp), finder, data);
355 	  name = cp_comp_to_string (d_left (comp), 100);
356 	  if (name == NULL)
357 	    {
358 	      /* If something went astray, abort typedef substitutions.  */
359 	      return;
360 	    }
361 	  buf.puts (name);
362 	  xfree (name);
363 	}
364 
365       buf.write ("::", 2);
366       comp = d_right (comp);
367     }
368 
369   /* If the next component is DEMANGLE_COMPONENT_NAME, save the qualified
370      name assembled above and append the name given by COMP.  Then use this
371      reassembled name to check for a typedef.  */
372 
373   if (comp->type == DEMANGLE_COMPONENT_NAME)
374     {
375       buf.write (comp->u.s_name.s, comp->u.s_name.len);
376       len = buf.size ();
377       name = (char *) obstack_copy0 (&info->obstack, buf.c_str (), len);
378 
379       /* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node
380 	 with a DEMANGLE_COMPONENT_NAME node containing the whole
381 	 name.  */
382       ret_comp->type = DEMANGLE_COMPONENT_NAME;
383       ret_comp->u.s_name.s = name;
384       ret_comp->u.s_name.len = len;
385       inspect_type (info, ret_comp, finder, data);
386     }
387   else
388     replace_typedefs (info, comp, finder, data);
389 }
390 
391 
392 /* A function to check const and volatile qualifiers for argument types.
393 
394    "Parameter declarations that differ only in the presence
395    or absence of `const' and/or `volatile' are equivalent."
396    C++ Standard N3290, clause 13.1.3 #4.  */
397 
398 static void
399 check_cv_qualifiers (struct demangle_component *ret_comp)
400 {
401   while (d_left (ret_comp) != NULL
402 	 && (d_left (ret_comp)->type == DEMANGLE_COMPONENT_CONST
403 	     || d_left (ret_comp)->type == DEMANGLE_COMPONENT_VOLATILE))
404     {
405       d_left (ret_comp) = d_left (d_left (ret_comp));
406     }
407 }
408 
409 /* Walk the parse tree given by RET_COMP, replacing any typedefs with
410    their basic types.  */
411 
412 static void
413 replace_typedefs (struct demangle_parse_info *info,
414 		  struct demangle_component *ret_comp,
415 		  canonicalization_ftype *finder,
416 		  void *data)
417 {
418   if (ret_comp)
419     {
420       if (finder != NULL
421 	  && (ret_comp->type == DEMANGLE_COMPONENT_NAME
422 	      || ret_comp->type == DEMANGLE_COMPONENT_QUAL_NAME
423 	      || ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE
424 	      || ret_comp->type == DEMANGLE_COMPONENT_BUILTIN_TYPE))
425 	{
426 	  char *local_name = cp_comp_to_string (ret_comp, 10);
427 
428 	  if (local_name != NULL)
429 	    {
430 	      struct symbol *sym = NULL;
431 
432 	      sym = NULL;
433 	      TRY
434 		{
435 		  sym = lookup_symbol (local_name, 0, VAR_DOMAIN, 0).symbol;
436 		}
437 	      CATCH (except, RETURN_MASK_ALL)
438 		{
439 		}
440 	      END_CATCH
441 
442 	      xfree (local_name);
443 
444 	      if (sym != NULL)
445 		{
446 		  struct type *otype = SYMBOL_TYPE (sym);
447 		  const char *new_name = (*finder) (otype, data);
448 
449 		  if (new_name != NULL)
450 		    {
451 		      ret_comp->type = DEMANGLE_COMPONENT_NAME;
452 		      ret_comp->u.s_name.s = new_name;
453 		      ret_comp->u.s_name.len = strlen (new_name);
454 		      return;
455 		    }
456 		}
457 	    }
458 	}
459 
460       switch (ret_comp->type)
461 	{
462 	case DEMANGLE_COMPONENT_ARGLIST:
463 	  check_cv_qualifiers (ret_comp);
464 	  /* Fall through */
465 
466 	case DEMANGLE_COMPONENT_FUNCTION_TYPE:
467 	case DEMANGLE_COMPONENT_TEMPLATE:
468 	case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
469 	case DEMANGLE_COMPONENT_TYPED_NAME:
470 	  replace_typedefs (info, d_left (ret_comp), finder, data);
471 	  replace_typedefs (info, d_right (ret_comp), finder, data);
472 	  break;
473 
474 	case DEMANGLE_COMPONENT_NAME:
475 	  inspect_type (info, ret_comp, finder, data);
476 	  break;
477 
478 	case DEMANGLE_COMPONENT_QUAL_NAME:
479 	  replace_typedefs_qualified_name (info, ret_comp, finder, data);
480 	  break;
481 
482 	case DEMANGLE_COMPONENT_LOCAL_NAME:
483 	case DEMANGLE_COMPONENT_CTOR:
484 	case DEMANGLE_COMPONENT_ARRAY_TYPE:
485 	case DEMANGLE_COMPONENT_PTRMEM_TYPE:
486 	  replace_typedefs (info, d_right (ret_comp), finder, data);
487 	  break;
488 
489 	case DEMANGLE_COMPONENT_CONST:
490 	case DEMANGLE_COMPONENT_RESTRICT:
491 	case DEMANGLE_COMPONENT_VOLATILE:
492 	case DEMANGLE_COMPONENT_VOLATILE_THIS:
493 	case DEMANGLE_COMPONENT_CONST_THIS:
494 	case DEMANGLE_COMPONENT_RESTRICT_THIS:
495 	case DEMANGLE_COMPONENT_POINTER:
496 	case DEMANGLE_COMPONENT_REFERENCE:
497 	case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
498 	  replace_typedefs (info, d_left (ret_comp), finder, data);
499 	  break;
500 
501 	default:
502 	  break;
503 	}
504     }
505 }
506 
507 /* Parse STRING and convert it to canonical form, resolving any
508    typedefs.  If parsing fails, or if STRING is already canonical,
509    return the empty string.  Otherwise return the canonical form.  If
510    FINDER is not NULL, then type components are passed to FINDER to be
511    looked up.  DATA is passed verbatim to FINDER.  */
512 
513 std::string
514 cp_canonicalize_string_full (const char *string,
515 			     canonicalization_ftype *finder,
516 			     void *data)
517 {
518   std::string ret;
519   unsigned int estimated_len;
520   std::unique_ptr<demangle_parse_info> info;
521 
522   estimated_len = strlen (string) * 2;
523   info = cp_demangled_name_to_comp (string, NULL);
524   if (info != NULL)
525     {
526       /* Replace all the typedefs in the tree.  */
527       replace_typedefs (info.get (), info->tree, finder, data);
528 
529       /* Convert the tree back into a string.  */
530       ret = cp_comp_to_string (info->tree, estimated_len);
531       gdb_assert (!ret.empty ());
532 
533       /* Finally, compare the original string with the computed
534 	 name, returning NULL if they are the same.  */
535       if (ret == string)
536 	return std::string ();
537     }
538 
539   return ret;
540 }
541 
542 /* Like cp_canonicalize_string_full, but always passes NULL for
543    FINDER.  */
544 
545 std::string
546 cp_canonicalize_string_no_typedefs (const char *string)
547 {
548   return cp_canonicalize_string_full (string, NULL, NULL);
549 }
550 
551 /* Parse STRING and convert it to canonical form.  If parsing fails,
552    or if STRING is already canonical, return the empty string.
553    Otherwise return the canonical form.  */
554 
555 std::string
556 cp_canonicalize_string (const char *string)
557 {
558   std::unique_ptr<demangle_parse_info> info;
559   unsigned int estimated_len;
560 
561   if (cp_already_canonical (string))
562     return std::string ();
563 
564   info = cp_demangled_name_to_comp (string, NULL);
565   if (info == NULL)
566     return std::string ();
567 
568   estimated_len = strlen (string) * 2;
569   std::string ret = cp_comp_to_string (info->tree, estimated_len);
570 
571   if (ret.empty ())
572     {
573       warning (_("internal error: string \"%s\" failed to be canonicalized"),
574 	       string);
575       return std::string ();
576     }
577 
578   if (ret == string)
579     return std::string ();
580 
581   return ret;
582 }
583 
584 /* Convert a mangled name to a demangle_component tree.  *MEMORY is
585    set to the block of used memory that should be freed when finished
586    with the tree.  DEMANGLED_P is set to the char * that should be
587    freed when finished with the tree, or NULL if none was needed.
588    OPTIONS will be passed to the demangler.  */
589 
590 static std::unique_ptr<demangle_parse_info>
591 mangled_name_to_comp (const char *mangled_name, int options,
592 		      void **memory, char **demangled_p)
593 {
594   char *demangled_name;
595 
596   /* If it looks like a v3 mangled name, then try to go directly
597      to trees.  */
598   if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
599     {
600       struct demangle_component *ret;
601 
602       ret = cplus_demangle_v3_components (mangled_name,
603 					  options, memory);
604       if (ret)
605 	{
606 	  std::unique_ptr<demangle_parse_info> info (new demangle_parse_info);
607 	  info->tree = ret;
608 	  *demangled_p = NULL;
609 	  return info;
610 	}
611     }
612 
613   /* If it doesn't, or if that failed, then try to demangle the
614      name.  */
615   demangled_name = gdb_demangle (mangled_name, options);
616   if (demangled_name == NULL)
617    return NULL;
618 
619   /* If we could demangle the name, parse it to build the component
620      tree.  */
621   std::unique_ptr<demangle_parse_info> info
622     = cp_demangled_name_to_comp (demangled_name, NULL);
623 
624   if (info == NULL)
625     {
626       xfree (demangled_name);
627       return NULL;
628     }
629 
630   *demangled_p = demangled_name;
631   return info;
632 }
633 
634 /* Return the name of the class containing method PHYSNAME.  */
635 
636 char *
637 cp_class_name_from_physname (const char *physname)
638 {
639   void *storage = NULL;
640   char *demangled_name = NULL, *ret;
641   struct demangle_component *ret_comp, *prev_comp, *cur_comp;
642   std::unique_ptr<demangle_parse_info> info;
643   int done;
644 
645   info = mangled_name_to_comp (physname, DMGL_ANSI,
646 			       &storage, &demangled_name);
647   if (info == NULL)
648     return NULL;
649 
650   done = 0;
651   ret_comp = info->tree;
652 
653   /* First strip off any qualifiers, if we have a function or
654      method.  */
655   while (!done)
656     switch (ret_comp->type)
657       {
658       case DEMANGLE_COMPONENT_CONST:
659       case DEMANGLE_COMPONENT_RESTRICT:
660       case DEMANGLE_COMPONENT_VOLATILE:
661       case DEMANGLE_COMPONENT_CONST_THIS:
662       case DEMANGLE_COMPONENT_RESTRICT_THIS:
663       case DEMANGLE_COMPONENT_VOLATILE_THIS:
664       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
665         ret_comp = d_left (ret_comp);
666         break;
667       default:
668 	done = 1;
669 	break;
670       }
671 
672   /* If what we have now is a function, discard the argument list.  */
673   if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
674     ret_comp = d_left (ret_comp);
675 
676   /* If what we have now is a template, strip off the template
677      arguments.  The left subtree may be a qualified name.  */
678   if (ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE)
679     ret_comp = d_left (ret_comp);
680 
681   /* What we have now should be a name, possibly qualified.
682      Additional qualifiers could live in the left subtree or the right
683      subtree.  Find the last piece.  */
684   done = 0;
685   prev_comp = NULL;
686   cur_comp = ret_comp;
687   while (!done)
688     switch (cur_comp->type)
689       {
690       case DEMANGLE_COMPONENT_QUAL_NAME:
691       case DEMANGLE_COMPONENT_LOCAL_NAME:
692 	prev_comp = cur_comp;
693         cur_comp = d_right (cur_comp);
694         break;
695       case DEMANGLE_COMPONENT_TEMPLATE:
696       case DEMANGLE_COMPONENT_NAME:
697       case DEMANGLE_COMPONENT_CTOR:
698       case DEMANGLE_COMPONENT_DTOR:
699       case DEMANGLE_COMPONENT_OPERATOR:
700       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
701 	done = 1;
702 	break;
703       default:
704 	done = 1;
705 	cur_comp = NULL;
706 	break;
707       }
708 
709   ret = NULL;
710   if (cur_comp != NULL && prev_comp != NULL)
711     {
712       /* We want to discard the rightmost child of PREV_COMP.  */
713       *prev_comp = *d_left (prev_comp);
714       /* The ten is completely arbitrary; we don't have a good
715 	 estimate.  */
716       ret = cp_comp_to_string (ret_comp, 10);
717     }
718 
719   xfree (storage);
720   xfree (demangled_name);
721   return ret;
722 }
723 
724 /* Return the child of COMP which is the basename of a method,
725    variable, et cetera.  All scope qualifiers are discarded, but
726    template arguments will be included.  The component tree may be
727    modified.  */
728 
729 static struct demangle_component *
730 unqualified_name_from_comp (struct demangle_component *comp)
731 {
732   struct demangle_component *ret_comp = comp, *last_template;
733   int done;
734 
735   done = 0;
736   last_template = NULL;
737   while (!done)
738     switch (ret_comp->type)
739       {
740       case DEMANGLE_COMPONENT_QUAL_NAME:
741       case DEMANGLE_COMPONENT_LOCAL_NAME:
742         ret_comp = d_right (ret_comp);
743         break;
744       case DEMANGLE_COMPONENT_TYPED_NAME:
745         ret_comp = d_left (ret_comp);
746         break;
747       case DEMANGLE_COMPONENT_TEMPLATE:
748 	gdb_assert (last_template == NULL);
749 	last_template = ret_comp;
750 	ret_comp = d_left (ret_comp);
751 	break;
752       case DEMANGLE_COMPONENT_CONST:
753       case DEMANGLE_COMPONENT_RESTRICT:
754       case DEMANGLE_COMPONENT_VOLATILE:
755       case DEMANGLE_COMPONENT_CONST_THIS:
756       case DEMANGLE_COMPONENT_RESTRICT_THIS:
757       case DEMANGLE_COMPONENT_VOLATILE_THIS:
758       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
759         ret_comp = d_left (ret_comp);
760         break;
761       case DEMANGLE_COMPONENT_NAME:
762       case DEMANGLE_COMPONENT_CTOR:
763       case DEMANGLE_COMPONENT_DTOR:
764       case DEMANGLE_COMPONENT_OPERATOR:
765       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
766 	done = 1;
767 	break;
768       default:
769 	return NULL;
770 	break;
771       }
772 
773   if (last_template)
774     {
775       d_left (last_template) = ret_comp;
776       return last_template;
777     }
778 
779   return ret_comp;
780 }
781 
782 /* Return the name of the method whose linkage name is PHYSNAME.  */
783 
784 char *
785 method_name_from_physname (const char *physname)
786 {
787   void *storage = NULL;
788   char *demangled_name = NULL, *ret;
789   struct demangle_component *ret_comp;
790   std::unique_ptr<demangle_parse_info> info;
791 
792   info = mangled_name_to_comp (physname, DMGL_ANSI,
793 			       &storage, &demangled_name);
794   if (info == NULL)
795     return NULL;
796 
797   ret_comp = unqualified_name_from_comp (info->tree);
798 
799   ret = NULL;
800   if (ret_comp != NULL)
801     /* The ten is completely arbitrary; we don't have a good
802        estimate.  */
803     ret = cp_comp_to_string (ret_comp, 10);
804 
805   xfree (storage);
806   xfree (demangled_name);
807   return ret;
808 }
809 
810 /* If FULL_NAME is the demangled name of a C++ function (including an
811    arg list, possibly including namespace/class qualifications),
812    return a new string containing only the function name (without the
813    arg list/class qualifications).  Otherwise, return NULL.  The
814    caller is responsible for freeing the memory in question.  */
815 
816 char *
817 cp_func_name (const char *full_name)
818 {
819   char *ret;
820   struct demangle_component *ret_comp;
821   std::unique_ptr<demangle_parse_info> info;
822 
823   info = cp_demangled_name_to_comp (full_name, NULL);
824   if (!info)
825     return NULL;
826 
827   ret_comp = unqualified_name_from_comp (info->tree);
828 
829   ret = NULL;
830   if (ret_comp != NULL)
831     ret = cp_comp_to_string (ret_comp, 10);
832 
833   return ret;
834 }
835 
836 /* DEMANGLED_NAME is the name of a function, including parameters and
837    (optionally) a return type.  Return the name of the function without
838    parameters or return type, or NULL if we can not parse the name.  */
839 
840 char *
841 cp_remove_params (const char *demangled_name)
842 {
843   int done = 0;
844   struct demangle_component *ret_comp;
845   std::unique_ptr<demangle_parse_info> info;
846   char *ret = NULL;
847 
848   if (demangled_name == NULL)
849     return NULL;
850 
851   info = cp_demangled_name_to_comp (demangled_name, NULL);
852   if (info == NULL)
853     return NULL;
854 
855   /* First strip off any qualifiers, if we have a function or method.  */
856   ret_comp = info->tree;
857   while (!done)
858     switch (ret_comp->type)
859       {
860       case DEMANGLE_COMPONENT_CONST:
861       case DEMANGLE_COMPONENT_RESTRICT:
862       case DEMANGLE_COMPONENT_VOLATILE:
863       case DEMANGLE_COMPONENT_CONST_THIS:
864       case DEMANGLE_COMPONENT_RESTRICT_THIS:
865       case DEMANGLE_COMPONENT_VOLATILE_THIS:
866       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
867         ret_comp = d_left (ret_comp);
868         break;
869       default:
870 	done = 1;
871 	break;
872       }
873 
874   /* What we have now should be a function.  Return its name.  */
875   if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
876     ret = cp_comp_to_string (d_left (ret_comp), 10);
877 
878   return ret;
879 }
880 
881 /* Here are some random pieces of trivia to keep in mind while trying
882    to take apart demangled names:
883 
884    - Names can contain function arguments or templates, so the process
885      has to be, to some extent recursive: maybe keep track of your
886      depth based on encountering <> and ().
887 
888    - Parentheses don't just have to happen at the end of a name: they
889      can occur even if the name in question isn't a function, because
890      a template argument might be a type that's a function.
891 
892    - Conversely, even if you're trying to deal with a function, its
893      demangled name might not end with ')': it could be a const or
894      volatile class method, in which case it ends with "const" or
895      "volatile".
896 
897    - Parentheses are also used in anonymous namespaces: a variable
898      'foo' in an anonymous namespace gets demangled as "(anonymous
899      namespace)::foo".
900 
901    - And operator names can contain parentheses or angle brackets.  */
902 
903 /* FIXME: carlton/2003-03-13: We have several functions here with
904    overlapping functionality; can we combine them?  Also, do they
905    handle all the above considerations correctly?  */
906 
907 
908 /* This returns the length of first component of NAME, which should be
909    the demangled name of a C++ variable/function/method/etc.
910    Specifically, it returns the index of the first colon forming the
911    boundary of the first component: so, given 'A::foo' or 'A::B::foo'
912    it returns the 1, and given 'foo', it returns 0.  */
913 
914 /* The character in NAME indexed by the return value is guaranteed to
915    always be either ':' or '\0'.  */
916 
917 /* NOTE: carlton/2003-03-13: This function is currently only intended
918    for internal use: it's probably not entirely safe when called on
919    user-generated input, because some of the 'index += 2' lines in
920    cp_find_first_component_aux might go past the end of malformed
921    input.  */
922 
923 unsigned int
924 cp_find_first_component (const char *name)
925 {
926   return cp_find_first_component_aux (name, 0);
927 }
928 
929 /* Helper function for cp_find_first_component.  Like that function,
930    it returns the length of the first component of NAME, but to make
931    the recursion easier, it also stops if it reaches an unexpected ')'
932    or '>' if the value of PERMISSIVE is nonzero.  */
933 
934 /* Let's optimize away calls to strlen("operator").  */
935 
936 #define LENGTH_OF_OPERATOR 8
937 
938 static unsigned int
939 cp_find_first_component_aux (const char *name, int permissive)
940 {
941   unsigned int index = 0;
942   /* Operator names can show up in unexpected places.  Since these can
943      contain parentheses or angle brackets, they can screw up the
944      recursion.  But not every string 'operator' is part of an
945      operater name: e.g. you could have a variable 'cooperator'.  So
946      this variable tells us whether or not we should treat the string
947      'operator' as starting an operator.  */
948   int operator_possible = 1;
949 
950   for (;; ++index)
951     {
952       switch (name[index])
953 	{
954 	case '<':
955 	  /* Template; eat it up.  The calls to cp_first_component
956 	     should only return (I hope!) when they reach the '>'
957 	     terminating the component or a '::' between two
958 	     components.  (Hence the '+ 2'.)  */
959 	  index += 1;
960 	  for (index += cp_find_first_component_aux (name + index, 1);
961 	       name[index] != '>';
962 	       index += cp_find_first_component_aux (name + index, 1))
963 	    {
964 	      if (name[index] != ':')
965 		{
966 		  demangled_name_complaint (name);
967 		  return strlen (name);
968 		}
969 	      index += 2;
970 	    }
971 	  operator_possible = 1;
972 	  break;
973 	case '(':
974 	  /* Similar comment as to '<'.  */
975 	  index += 1;
976 	  for (index += cp_find_first_component_aux (name + index, 1);
977 	       name[index] != ')';
978 	       index += cp_find_first_component_aux (name + index, 1))
979 	    {
980 	      if (name[index] != ':')
981 		{
982 		  demangled_name_complaint (name);
983 		  return strlen (name);
984 		}
985 	      index += 2;
986 	    }
987 	  operator_possible = 1;
988 	  break;
989 	case '>':
990 	case ')':
991 	  if (permissive)
992 	    return index;
993 	  else
994 	    {
995 	      demangled_name_complaint (name);
996 	      return strlen (name);
997 	    }
998 	case '\0':
999 	  return index;
1000 	case ':':
1001 	  /* ':' marks a component iff the next character is also a ':'.
1002 	     Otherwise it is probably malformed input.  */
1003 	  if (name[index + 1] == ':')
1004 	    return index;
1005 	  break;
1006 	case 'o':
1007 	  /* Operator names can screw up the recursion.  */
1008 	  if (operator_possible
1009 	      && strncmp (name + index, "operator",
1010 			  LENGTH_OF_OPERATOR) == 0)
1011 	    {
1012 	      index += LENGTH_OF_OPERATOR;
1013 	      while (ISSPACE(name[index]))
1014 		++index;
1015 	      switch (name[index])
1016 		{
1017 		  /* Skip over one less than the appropriate number of
1018 		     characters: the for loop will skip over the last
1019 		     one.  */
1020 		case '<':
1021 		  if (name[index + 1] == '<')
1022 		    index += 1;
1023 		  else
1024 		    index += 0;
1025 		  break;
1026 		case '>':
1027 		case '-':
1028 		  if (name[index + 1] == '>')
1029 		    index += 1;
1030 		  else
1031 		    index += 0;
1032 		  break;
1033 		case '(':
1034 		  index += 1;
1035 		  break;
1036 		default:
1037 		  index += 0;
1038 		  break;
1039 		}
1040 	    }
1041 	  operator_possible = 0;
1042 	  break;
1043 	case ' ':
1044 	case ',':
1045 	case '.':
1046 	case '&':
1047 	case '*':
1048 	  /* NOTE: carlton/2003-04-18: I'm not sure what the precise
1049 	     set of relevant characters are here: it's necessary to
1050 	     include any character that can show up before 'operator'
1051 	     in a demangled name, and it's safe to include any
1052 	     character that can't be part of an identifier's name.  */
1053 	  operator_possible = 1;
1054 	  break;
1055 	default:
1056 	  operator_possible = 0;
1057 	  break;
1058 	}
1059     }
1060 }
1061 
1062 /* Complain about a demangled name that we don't know how to parse.
1063    NAME is the demangled name in question.  */
1064 
1065 static void
1066 demangled_name_complaint (const char *name)
1067 {
1068   complaint (&symfile_complaints,
1069 	     "unexpected demangled name '%s'", name);
1070 }
1071 
1072 /* If NAME is the fully-qualified name of a C++
1073    function/variable/method/etc., this returns the length of its
1074    entire prefix: all of the namespaces and classes that make up its
1075    name.  Given 'A::foo', it returns 1, given 'A::B::foo', it returns
1076    4, given 'foo', it returns 0.  */
1077 
1078 unsigned int
1079 cp_entire_prefix_len (const char *name)
1080 {
1081   unsigned int current_len = cp_find_first_component (name);
1082   unsigned int previous_len = 0;
1083 
1084   while (name[current_len] != '\0')
1085     {
1086       gdb_assert (name[current_len] == ':');
1087       previous_len = current_len;
1088       /* Skip the '::'.  */
1089       current_len += 2;
1090       current_len += cp_find_first_component (name + current_len);
1091     }
1092 
1093   return previous_len;
1094 }
1095 
1096 /* Overload resolution functions.  */
1097 
1098 /* Test to see if SYM is a symbol that we haven't seen corresponding
1099    to a function named OLOAD_NAME.  If so, add it to the current
1100    completion list.  */
1101 
1102 static void
1103 overload_list_add_symbol (struct symbol *sym,
1104 			  const char *oload_name)
1105 {
1106   int newsize;
1107   int i;
1108   char *sym_name;
1109 
1110   /* If there is no type information, we can't do anything, so
1111      skip.  */
1112   if (SYMBOL_TYPE (sym) == NULL)
1113     return;
1114 
1115   /* skip any symbols that we've already considered.  */
1116   for (i = 0; i < sym_return_val_index; ++i)
1117     if (strcmp (SYMBOL_LINKAGE_NAME (sym),
1118 		SYMBOL_LINKAGE_NAME (sym_return_val[i])) == 0)
1119       return;
1120 
1121   /* Get the demangled name without parameters */
1122   sym_name = cp_remove_params (SYMBOL_NATURAL_NAME (sym));
1123   if (!sym_name)
1124     return;
1125 
1126   /* skip symbols that cannot match */
1127   if (strcmp (sym_name, oload_name) != 0)
1128     {
1129       xfree (sym_name);
1130       return;
1131     }
1132 
1133   xfree (sym_name);
1134 
1135   /* We have a match for an overload instance, so add SYM to the
1136      current list of overload instances */
1137   if (sym_return_val_index + 3 > sym_return_val_size)
1138     {
1139       newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
1140       sym_return_val = (struct symbol **)
1141 	xrealloc ((char *) sym_return_val, newsize);
1142     }
1143   sym_return_val[sym_return_val_index++] = sym;
1144   sym_return_val[sym_return_val_index] = NULL;
1145 }
1146 
1147 /* Return a null-terminated list of pointers to function symbols that
1148    are named FUNC_NAME and are visible within NAMESPACE.  */
1149 
1150 struct symbol **
1151 make_symbol_overload_list (const char *func_name,
1152 			   const char *the_namespace)
1153 {
1154   struct cleanup *old_cleanups;
1155   const char *name;
1156 
1157   sym_return_val_size = 100;
1158   sym_return_val_index = 0;
1159   sym_return_val = XNEWVEC (struct symbol *, sym_return_val_size + 1);
1160   sym_return_val[0] = NULL;
1161 
1162   old_cleanups = make_cleanup (xfree, sym_return_val);
1163 
1164   make_symbol_overload_list_using (func_name, the_namespace);
1165 
1166   if (the_namespace[0] == '\0')
1167     name = func_name;
1168   else
1169     {
1170       char *concatenated_name
1171 	= (char *) alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1);
1172       strcpy (concatenated_name, the_namespace);
1173       strcat (concatenated_name, "::");
1174       strcat (concatenated_name, func_name);
1175       name = concatenated_name;
1176     }
1177 
1178   make_symbol_overload_list_qualified (name);
1179 
1180   discard_cleanups (old_cleanups);
1181 
1182   return sym_return_val;
1183 }
1184 
1185 /* Add all symbols with a name matching NAME in BLOCK to the overload
1186    list.  */
1187 
1188 static void
1189 make_symbol_overload_list_block (const char *name,
1190                                  const struct block *block)
1191 {
1192   struct block_iterator iter;
1193   struct symbol *sym;
1194 
1195   ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym)
1196     overload_list_add_symbol (sym, name);
1197 }
1198 
1199 /* Adds the function FUNC_NAME from NAMESPACE to the overload set.  */
1200 
1201 static void
1202 make_symbol_overload_list_namespace (const char *func_name,
1203                                      const char *the_namespace)
1204 {
1205   const char *name;
1206   const struct block *block = NULL;
1207 
1208   if (the_namespace[0] == '\0')
1209     name = func_name;
1210   else
1211     {
1212       char *concatenated_name
1213 	= (char *) alloca (strlen (the_namespace) + 2 + strlen (func_name) + 1);
1214 
1215       strcpy (concatenated_name, the_namespace);
1216       strcat (concatenated_name, "::");
1217       strcat (concatenated_name, func_name);
1218       name = concatenated_name;
1219     }
1220 
1221   /* Look in the static block.  */
1222   block = block_static_block (get_selected_block (0));
1223   if (block)
1224     make_symbol_overload_list_block (name, block);
1225 
1226   /* Look in the global block.  */
1227   block = block_global_block (block);
1228   if (block)
1229     make_symbol_overload_list_block (name, block);
1230 
1231 }
1232 
1233 /* Search the namespace of the given type and namespace of and public
1234    base types.  */
1235 
1236 static void
1237 make_symbol_overload_list_adl_namespace (struct type *type,
1238                                          const char *func_name)
1239 {
1240   char *the_namespace;
1241   const char *type_name;
1242   int i, prefix_len;
1243 
1244   while (TYPE_CODE (type) == TYPE_CODE_PTR
1245 	 || TYPE_IS_REFERENCE (type)
1246          || TYPE_CODE (type) == TYPE_CODE_ARRAY
1247          || TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1248     {
1249       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1250 	type = check_typedef(type);
1251       else
1252 	type = TYPE_TARGET_TYPE (type);
1253     }
1254 
1255   type_name = TYPE_NAME (type);
1256 
1257   if (type_name == NULL)
1258     return;
1259 
1260   prefix_len = cp_entire_prefix_len (type_name);
1261 
1262   if (prefix_len != 0)
1263     {
1264       the_namespace = (char *) alloca (prefix_len + 1);
1265       strncpy (the_namespace, type_name, prefix_len);
1266       the_namespace[prefix_len] = '\0';
1267 
1268       make_symbol_overload_list_namespace (func_name, the_namespace);
1269     }
1270 
1271   /* Check public base type */
1272   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1273     for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
1274       {
1275 	if (BASETYPE_VIA_PUBLIC (type, i))
1276 	  make_symbol_overload_list_adl_namespace (TYPE_BASECLASS (type,
1277 								   i),
1278 						   func_name);
1279       }
1280 }
1281 
1282 /* Adds the overload list overload candidates for FUNC_NAME found
1283    through argument dependent lookup.  */
1284 
1285 struct symbol **
1286 make_symbol_overload_list_adl (struct type **arg_types, int nargs,
1287                                const char *func_name)
1288 {
1289   int i;
1290 
1291   gdb_assert (sym_return_val_size != -1);
1292 
1293   for (i = 1; i <= nargs; i++)
1294     make_symbol_overload_list_adl_namespace (arg_types[i - 1],
1295 					     func_name);
1296 
1297   return sym_return_val;
1298 }
1299 
1300 /* Used for cleanups to reset the "searched" flag in case of an
1301    error.  */
1302 
1303 static void
1304 reset_directive_searched (void *data)
1305 {
1306   struct using_direct *direct = (struct using_direct *) data;
1307   direct->searched = 0;
1308 }
1309 
1310 /* This applies the using directives to add namespaces to search in,
1311    and then searches for overloads in all of those namespaces.  It
1312    adds the symbols found to sym_return_val.  Arguments are as in
1313    make_symbol_overload_list.  */
1314 
1315 static void
1316 make_symbol_overload_list_using (const char *func_name,
1317 				 const char *the_namespace)
1318 {
1319   struct using_direct *current;
1320   const struct block *block;
1321 
1322   /* First, go through the using directives.  If any of them apply,
1323      look in the appropriate namespaces for new functions to match
1324      on.  */
1325 
1326   for (block = get_selected_block (0);
1327        block != NULL;
1328        block = BLOCK_SUPERBLOCK (block))
1329     for (current = block_using (block);
1330 	current != NULL;
1331 	current = current->next)
1332       {
1333 	/* Prevent recursive calls.  */
1334 	if (current->searched)
1335 	  continue;
1336 
1337         /* If this is a namespace alias or imported declaration ignore
1338 	   it.  */
1339         if (current->alias != NULL || current->declaration != NULL)
1340           continue;
1341 
1342         if (strcmp (the_namespace, current->import_dest) == 0)
1343 	  {
1344 	    /* Mark this import as searched so that the recursive call
1345 	       does not search it again.  */
1346 	    struct cleanup *old_chain;
1347 	    current->searched = 1;
1348 	    old_chain = make_cleanup (reset_directive_searched,
1349 				      current);
1350 
1351 	    make_symbol_overload_list_using (func_name,
1352 					     current->import_src);
1353 
1354 	    current->searched = 0;
1355 	    discard_cleanups (old_chain);
1356 	  }
1357       }
1358 
1359   /* Now, add names for this namespace.  */
1360   make_symbol_overload_list_namespace (func_name, the_namespace);
1361 }
1362 
1363 /* This does the bulk of the work of finding overloaded symbols.
1364    FUNC_NAME is the name of the overloaded function we're looking for
1365    (possibly including namespace info).  */
1366 
1367 static void
1368 make_symbol_overload_list_qualified (const char *func_name)
1369 {
1370   struct compunit_symtab *cust;
1371   struct objfile *objfile;
1372   const struct block *b, *surrounding_static_block = 0;
1373 
1374   /* Look through the partial symtabs for all symbols which begin by
1375      matching FUNC_NAME.  Make sure we read that symbol table in.  */
1376 
1377   ALL_OBJFILES (objfile)
1378   {
1379     if (objfile->sf)
1380       objfile->sf->qf->expand_symtabs_for_function (objfile, func_name);
1381   }
1382 
1383   /* Search upwards from currently selected frame (so that we can
1384      complete on local vars.  */
1385 
1386   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
1387     make_symbol_overload_list_block (func_name, b);
1388 
1389   surrounding_static_block = block_static_block (get_selected_block (0));
1390 
1391   /* Go through the symtabs and check the externs and statics for
1392      symbols which match.  */
1393 
1394   ALL_COMPUNITS (objfile, cust)
1395   {
1396     QUIT;
1397     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), GLOBAL_BLOCK);
1398     make_symbol_overload_list_block (func_name, b);
1399   }
1400 
1401   ALL_COMPUNITS (objfile, cust)
1402   {
1403     QUIT;
1404     b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), STATIC_BLOCK);
1405     /* Don't do this block twice.  */
1406     if (b == surrounding_static_block)
1407       continue;
1408     make_symbol_overload_list_block (func_name, b);
1409   }
1410 }
1411 
1412 /* Lookup the rtti type for a class name.  */
1413 
1414 struct type *
1415 cp_lookup_rtti_type (const char *name, struct block *block)
1416 {
1417   struct symbol * rtti_sym;
1418   struct type * rtti_type;
1419 
1420   /* Use VAR_DOMAIN here as NAME may be a typedef.  PR 18141, 18417.
1421      Classes "live" in both STRUCT_DOMAIN and VAR_DOMAIN.  */
1422   rtti_sym = lookup_symbol (name, block, VAR_DOMAIN, NULL).symbol;
1423 
1424   if (rtti_sym == NULL)
1425     {
1426       warning (_("RTTI symbol not found for class '%s'"), name);
1427       return NULL;
1428     }
1429 
1430   if (SYMBOL_CLASS (rtti_sym) != LOC_TYPEDEF)
1431     {
1432       warning (_("RTTI symbol for class '%s' is not a type"), name);
1433       return NULL;
1434     }
1435 
1436   rtti_type = check_typedef (SYMBOL_TYPE (rtti_sym));
1437 
1438   switch (TYPE_CODE (rtti_type))
1439     {
1440     case TYPE_CODE_STRUCT:
1441       break;
1442     case TYPE_CODE_NAMESPACE:
1443       /* chastain/2003-11-26: the symbol tables often contain fake
1444 	 symbols for namespaces with the same name as the struct.
1445 	 This warning is an indication of a bug in the lookup order
1446 	 or a bug in the way that the symbol tables are populated.  */
1447       warning (_("RTTI symbol for class '%s' is a namespace"), name);
1448       return NULL;
1449     default:
1450       warning (_("RTTI symbol for class '%s' has bad type"), name);
1451       return NULL;
1452     }
1453 
1454   return rtti_type;
1455 }
1456 
1457 #ifdef HAVE_WORKING_FORK
1458 
1459 /* If nonzero, attempt to catch crashes in the demangler and print
1460    useful debugging information.  */
1461 
1462 static int catch_demangler_crashes = 1;
1463 
1464 /* Stack context and environment for demangler crash recovery.  */
1465 
1466 static SIGJMP_BUF gdb_demangle_jmp_buf;
1467 
1468 /* If nonzero, attempt to dump core from the signal handler.  */
1469 
1470 static int gdb_demangle_attempt_core_dump = 1;
1471 
1472 /* Signal handler for gdb_demangle.  */
1473 
1474 static void
1475 gdb_demangle_signal_handler (int signo)
1476 {
1477   if (gdb_demangle_attempt_core_dump)
1478     {
1479       if (fork () == 0)
1480 	dump_core ();
1481 
1482       gdb_demangle_attempt_core_dump = 0;
1483     }
1484 
1485   SIGLONGJMP (gdb_demangle_jmp_buf, signo);
1486 }
1487 
1488 #endif
1489 
1490 /* A wrapper for bfd_demangle.  */
1491 
1492 char *
1493 gdb_demangle (const char *name, int options)
1494 {
1495   char *result = NULL;
1496   int crash_signal = 0;
1497 
1498 #ifdef HAVE_WORKING_FORK
1499 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
1500   struct sigaction sa, old_sa;
1501 #else
1502   sighandler_t ofunc;
1503 #endif
1504   static int core_dump_allowed = -1;
1505 
1506   if (core_dump_allowed == -1)
1507     {
1508       core_dump_allowed = can_dump_core (LIMIT_CUR);
1509 
1510       if (!core_dump_allowed)
1511 	gdb_demangle_attempt_core_dump = 0;
1512     }
1513 
1514   if (catch_demangler_crashes)
1515     {
1516 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
1517       sa.sa_handler = gdb_demangle_signal_handler;
1518       sigemptyset (&sa.sa_mask);
1519 #ifdef HAVE_SIGALTSTACK
1520       sa.sa_flags = SA_ONSTACK;
1521 #else
1522       sa.sa_flags = 0;
1523 #endif
1524       sigaction (SIGSEGV, &sa, &old_sa);
1525 #else
1526       ofunc = signal (SIGSEGV, gdb_demangle_signal_handler);
1527 #endif
1528 
1529       crash_signal = SIGSETJMP (gdb_demangle_jmp_buf);
1530     }
1531 #endif
1532 
1533   if (crash_signal == 0)
1534     result = bfd_demangle (NULL, name, options);
1535 
1536 #ifdef HAVE_WORKING_FORK
1537   if (catch_demangler_crashes)
1538     {
1539 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
1540       sigaction (SIGSEGV, &old_sa, NULL);
1541 #else
1542       signal (SIGSEGV, ofunc);
1543 #endif
1544 
1545       if (crash_signal != 0)
1546 	{
1547 	  static int error_reported = 0;
1548 
1549 	  if (!error_reported)
1550 	    {
1551 	      char *short_msg, *long_msg;
1552 	      struct cleanup *back_to;
1553 
1554 	      short_msg = xstrprintf (_("unable to demangle '%s' "
1555 				      "(demangler failed with signal %d)"),
1556 				    name, crash_signal);
1557 	      back_to = make_cleanup (xfree, short_msg);
1558 
1559 	      long_msg = xstrprintf ("%s:%d: %s: %s", __FILE__, __LINE__,
1560 				    "demangler-warning", short_msg);
1561 	      make_cleanup (xfree, long_msg);
1562 
1563 	      make_cleanup_restore_target_terminal ();
1564 	      target_terminal_ours_for_output ();
1565 
1566 	      begin_line ();
1567 	      if (core_dump_allowed)
1568 		fprintf_unfiltered (gdb_stderr,
1569 				    _("%s\nAttempting to dump core.\n"),
1570 				    long_msg);
1571 	      else
1572 		warn_cant_dump_core (long_msg);
1573 
1574 	      demangler_warning (__FILE__, __LINE__, "%s", short_msg);
1575 
1576 	      do_cleanups (back_to);
1577 
1578 	      error_reported = 1;
1579 	    }
1580 
1581 	  result = NULL;
1582 	}
1583     }
1584 #endif
1585 
1586   return result;
1587 }
1588 
1589 /* See cp-support.h.  */
1590 
1591 int
1592 gdb_sniff_from_mangled_name (const char *mangled, char **demangled)
1593 {
1594   *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
1595   return *demangled != NULL;
1596 }
1597 
1598 /* Don't allow just "maintenance cplus".  */
1599 
1600 static  void
1601 maint_cplus_command (char *arg, int from_tty)
1602 {
1603   printf_unfiltered (_("\"maintenance cplus\" must be followed "
1604 		       "by the name of a command.\n"));
1605   help_list (maint_cplus_cmd_list,
1606 	     "maintenance cplus ",
1607 	     all_commands, gdb_stdout);
1608 }
1609 
1610 /* This is a front end for cp_find_first_component, for unit testing.
1611    Be careful when using it: see the NOTE above
1612    cp_find_first_component.  */
1613 
1614 static void
1615 first_component_command (char *arg, int from_tty)
1616 {
1617   int len;
1618   char *prefix;
1619 
1620   if (!arg)
1621     return;
1622 
1623   len = cp_find_first_component (arg);
1624   prefix = (char *) alloca (len + 1);
1625 
1626   memcpy (prefix, arg, len);
1627   prefix[len] = '\0';
1628 
1629   printf_unfiltered ("%s\n", prefix);
1630 }
1631 
1632 extern initialize_file_ftype _initialize_cp_support; /* -Wmissing-prototypes */
1633 
1634 
1635 /* Implement "info vtbl".  */
1636 
1637 static void
1638 info_vtbl_command (char *arg, int from_tty)
1639 {
1640   struct value *value;
1641 
1642   value = parse_and_eval (arg);
1643   cplus_print_vtable (value);
1644 }
1645 
1646 void
1647 _initialize_cp_support (void)
1648 {
1649   add_prefix_cmd ("cplus", class_maintenance,
1650 		  maint_cplus_command,
1651 		  _("C++ maintenance commands."),
1652 		  &maint_cplus_cmd_list,
1653 		  "maintenance cplus ",
1654 		  0, &maintenancelist);
1655   add_alias_cmd ("cp", "cplus",
1656 		 class_maintenance, 1,
1657 		 &maintenancelist);
1658 
1659   add_cmd ("first_component",
1660 	   class_maintenance,
1661 	   first_component_command,
1662 	   _("Print the first class/namespace component of NAME."),
1663 	   &maint_cplus_cmd_list);
1664 
1665   add_info ("vtbl", info_vtbl_command,
1666 	    _("Show the virtual function table for a C++ object.\n\
1667 Usage: info vtbl EXPRESSION\n\
1668 Evaluate EXPRESSION and display the virtual function table for the\n\
1669 resulting object."));
1670 
1671 #ifdef HAVE_WORKING_FORK
1672   add_setshow_boolean_cmd ("catch-demangler-crashes", class_maintenance,
1673 			   &catch_demangler_crashes, _("\
1674 Set whether to attempt to catch demangler crashes."), _("\
1675 Show whether to attempt to catch demangler crashes."), _("\
1676 If enabled GDB will attempt to catch demangler crashes and\n\
1677 display the offending symbol."),
1678 			   NULL,
1679 			   NULL,
1680 			   &maintenance_set_cmdlist,
1681 			   &maintenance_show_cmdlist);
1682 #endif
1683 }
1684