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