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