Use XCNEW gdbarch_tdep
[external/binutils.git] / gdb / cp-support.c
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 }