1 /* Multiple source language support for GDB. 2 3 Copyright (C) 1991-2023 Free Software Foundation, Inc. 4 5 Contributed by the Department of Computer Science at the State University 6 of New York at Buffalo. 7 8 This file is part of GDB. 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 3 of the License, or 13 (at your option) any later version. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 22 23 /* This file contains functions that return things that are specific 24 to languages. Each function should examine current_language if necessary, 25 and return the appropriate result. */ 26 27 /* FIXME: Most of these would be better organized as macros which 28 return data out of a "language-specific" struct pointer that is set 29 whenever the working language changes. That would be a lot faster. */ 30 31 #include "defs.h" 32 #include <ctype.h> 33 #include "symtab.h" 34 #include "gdbtypes.h" 35 #include "value.h" 36 #include "gdbcmd.h" 37 #include "expression.h" 38 #include "language.h" 39 #include "varobj.h" 40 #include "target.h" 41 #include "parser-defs.h" 42 #include "demangle.h" 43 #include "symfile.h" 44 #include "cp-support.h" 45 #include "frame.h" 46 #include "c-lang.h" 47 #include <algorithm> 48 #include "gdbarch.h" 49 #include "compile/compile-internal.h" 50 51 static void set_range_case (void); 52 53 /* range_mode == 54 range_mode_auto: range_check set automatically to default of language. 55 range_mode_manual: range_check set manually by user. */ 56 57 enum range_mode 58 { 59 range_mode_auto, range_mode_manual 60 }; 61 62 /* case_mode == 63 case_mode_auto: case_sensitivity set upon selection of scope. 64 case_mode_manual: case_sensitivity set only by user. */ 65 66 enum case_mode 67 { 68 case_mode_auto, case_mode_manual 69 }; 70 71 /* The current (default at startup) state of type and range checking. 72 (If the modes are set to "auto", though, these are changed based 73 on the default language at startup, and then again based on the 74 language of the first source file. */ 75 76 static enum range_mode range_mode = range_mode_auto; 77 enum range_check range_check = range_check_off; 78 static enum case_mode case_mode = case_mode_auto; 79 enum case_sensitivity case_sensitivity = case_sensitive_on; 80 81 /* The current language and language_mode (see language.h). */ 82 83 const struct language_defn *current_language = nullptr; 84 enum language_mode language_mode = language_mode_auto; 85 86 /* The language that the user expects to be typing in (the language 87 of main(), or the last language we notified them about, or C). */ 88 89 const struct language_defn *expected_language; 90 91 /* Define the array containing all languages. */ 92 93 const struct language_defn *language_defn::languages[nr_languages]; 94 95 /* The current values of the "set language/range/case-sensitive" enum 96 commands. */ 97 static const char *language; 98 static const char *range; 99 static const char *case_sensitive; 100 101 /* See language.h. */ 102 const char lang_frame_mismatch_warn[] = 103 N_("Warning: the current language does not match this frame."); 104 105 /* This page contains the functions corresponding to GDB commands 106 and their helpers. */ 107 108 /* Show command. Display a warning if the language set 109 does not match the frame. */ 110 static void 111 show_language_command (struct ui_file *file, int from_tty, 112 struct cmd_list_element *c, const char *value) 113 { 114 enum language flang; /* The language of the frame. */ 115 116 if (language_mode == language_mode_auto) 117 gdb_printf (file, 118 _("The current source language is " 119 "\"auto; currently %s\".\n"), 120 current_language->name ()); 121 else 122 gdb_printf (file, 123 _("The current source language is \"%s\".\n"), 124 current_language->name ()); 125 126 if (has_stack_frames ()) 127 { 128 frame_info_ptr frame; 129 130 frame = get_selected_frame (NULL); 131 flang = get_frame_language (frame); 132 if (flang != language_unknown 133 && language_mode == language_mode_manual 134 && current_language->la_language != flang) 135 gdb_printf (file, "%s\n", _(lang_frame_mismatch_warn)); 136 } 137 } 138 139 /* Set command. Change the current working language. */ 140 static void 141 set_language_command (const char *ignore, 142 int from_tty, struct cmd_list_element *c) 143 { 144 enum language flang = language_unknown; 145 146 /* "local" is a synonym of "auto". */ 147 if (strcmp (language, "local") == 0) 148 language = "auto"; 149 150 /* Search the list of languages for a match. */ 151 for (const auto &lang : language_defn::languages) 152 { 153 if (strcmp (lang->name (), language) == 0) 154 { 155 /* Found it! Go into manual mode, and use this language. */ 156 if (lang->la_language == language_auto) 157 { 158 /* Enter auto mode. Set to the current frame's language, if 159 known, or fallback to the initial language. */ 160 language_mode = language_mode_auto; 161 try 162 { 163 frame_info_ptr frame; 164 165 frame = get_selected_frame (NULL); 166 flang = get_frame_language (frame); 167 } 168 catch (const gdb_exception_error &ex) 169 { 170 flang = language_unknown; 171 } 172 173 if (flang != language_unknown) 174 set_language (flang); 175 else 176 set_initial_language (); 177 expected_language = current_language; 178 return; 179 } 180 else 181 { 182 /* Enter manual mode. Set the specified language. */ 183 language_mode = language_mode_manual; 184 current_language = lang; 185 set_range_case (); 186 expected_language = current_language; 187 return; 188 } 189 } 190 } 191 192 internal_error ("Couldn't find language `%s' in known languages list.", 193 language); 194 } 195 196 /* Show command. Display a warning if the range setting does 197 not match the current language. */ 198 static void 199 show_range_command (struct ui_file *file, int from_tty, 200 struct cmd_list_element *c, const char *value) 201 { 202 if (range_mode == range_mode_auto) 203 { 204 const char *tmp; 205 206 switch (range_check) 207 { 208 case range_check_on: 209 tmp = "on"; 210 break; 211 case range_check_off: 212 tmp = "off"; 213 break; 214 case range_check_warn: 215 tmp = "warn"; 216 break; 217 default: 218 internal_error ("Unrecognized range check setting."); 219 } 220 221 gdb_printf (file, 222 _("Range checking is \"auto; currently %s\".\n"), 223 tmp); 224 } 225 else 226 gdb_printf (file, _("Range checking is \"%s\".\n"), 227 value); 228 229 if (range_check == range_check_warn 230 || ((range_check == range_check_on) 231 != current_language->range_checking_on_by_default ())) 232 warning (_("the current range check setting " 233 "does not match the language.\n")); 234 } 235 236 /* Set command. Change the setting for range checking. */ 237 static void 238 set_range_command (const char *ignore, 239 int from_tty, struct cmd_list_element *c) 240 { 241 if (strcmp (range, "on") == 0) 242 { 243 range_check = range_check_on; 244 range_mode = range_mode_manual; 245 } 246 else if (strcmp (range, "warn") == 0) 247 { 248 range_check = range_check_warn; 249 range_mode = range_mode_manual; 250 } 251 else if (strcmp (range, "off") == 0) 252 { 253 range_check = range_check_off; 254 range_mode = range_mode_manual; 255 } 256 else if (strcmp (range, "auto") == 0) 257 { 258 range_mode = range_mode_auto; 259 set_range_case (); 260 return; 261 } 262 else 263 { 264 internal_error (_("Unrecognized range check setting: \"%s\""), range); 265 } 266 if (range_check == range_check_warn 267 || ((range_check == range_check_on) 268 != current_language->range_checking_on_by_default ())) 269 warning (_("the current range check setting " 270 "does not match the language.\n")); 271 } 272 273 /* Show command. Display a warning if the case sensitivity setting does 274 not match the current language. */ 275 static void 276 show_case_command (struct ui_file *file, int from_tty, 277 struct cmd_list_element *c, const char *value) 278 { 279 if (case_mode == case_mode_auto) 280 { 281 const char *tmp = NULL; 282 283 switch (case_sensitivity) 284 { 285 case case_sensitive_on: 286 tmp = "on"; 287 break; 288 case case_sensitive_off: 289 tmp = "off"; 290 break; 291 default: 292 internal_error ("Unrecognized case-sensitive setting."); 293 } 294 295 gdb_printf (file, 296 _("Case sensitivity in " 297 "name search is \"auto; currently %s\".\n"), 298 tmp); 299 } 300 else 301 gdb_printf (file, 302 _("Case sensitivity in name search is \"%s\".\n"), 303 value); 304 305 if (case_sensitivity != current_language->case_sensitivity ()) 306 warning (_("the current case sensitivity setting does not match " 307 "the language.\n")); 308 } 309 310 /* Set command. Change the setting for case sensitivity. */ 311 312 static void 313 set_case_command (const char *ignore, int from_tty, struct cmd_list_element *c) 314 { 315 if (strcmp (case_sensitive, "on") == 0) 316 { 317 case_sensitivity = case_sensitive_on; 318 case_mode = case_mode_manual; 319 } 320 else if (strcmp (case_sensitive, "off") == 0) 321 { 322 case_sensitivity = case_sensitive_off; 323 case_mode = case_mode_manual; 324 } 325 else if (strcmp (case_sensitive, "auto") == 0) 326 { 327 case_mode = case_mode_auto; 328 set_range_case (); 329 return; 330 } 331 else 332 { 333 internal_error ("Unrecognized case-sensitive setting: \"%s\"", 334 case_sensitive); 335 } 336 337 if (case_sensitivity != current_language->case_sensitivity ()) 338 warning (_("the current case sensitivity setting does not match " 339 "the language.\n")); 340 } 341 342 /* Set the status of range and type checking and case sensitivity based on 343 the current modes and the current language. 344 If SHOW is non-zero, then print out the current language, 345 type and range checking status. */ 346 static void 347 set_range_case (void) 348 { 349 if (range_mode == range_mode_auto) 350 range_check = (current_language->range_checking_on_by_default () 351 ? range_check_on : range_check_off); 352 353 if (case_mode == case_mode_auto) 354 case_sensitivity = current_language->case_sensitivity (); 355 } 356 357 /* Set current language to (enum language) LANG. Returns previous 358 language. */ 359 360 enum language 361 set_language (enum language lang) 362 { 363 enum language prev_language; 364 365 prev_language = current_language->la_language; 366 current_language = language_def (lang); 367 set_range_case (); 368 return prev_language; 369 } 370 371 372 /* See language.h. */ 373 374 void 375 language_info () 376 { 377 if (expected_language == current_language) 378 return; 379 380 expected_language = current_language; 381 gdb_printf (_("Current language: %s\n"), language); 382 show_language_command (gdb_stdout, 1, NULL, NULL); 383 } 384 385 /* This page contains functions for the printing out of 386 error messages that occur during type- and range- 387 checking. */ 388 389 /* This is called when a language fails a range-check. The 390 first argument should be a printf()-style format string, and the 391 rest of the arguments should be its arguments. If range_check is 392 range_check_on, an error is printed; if range_check_warn, a warning; 393 otherwise just the message. */ 394 395 void 396 range_error (const char *string,...) 397 { 398 va_list args; 399 400 va_start (args, string); 401 switch (range_check) 402 { 403 case range_check_warn: 404 vwarning (string, args); 405 break; 406 case range_check_on: 407 verror (string, args); 408 break; 409 case range_check_off: 410 /* FIXME: cagney/2002-01-30: Should this function print anything 411 when range error is off? */ 412 gdb_vprintf (gdb_stderr, string, args); 413 gdb_printf (gdb_stderr, "\n"); 414 break; 415 default: 416 internal_error (_("bad switch")); 417 } 418 va_end (args); 419 } 420 421 422 /* This page contains miscellaneous functions. */ 423 424 /* Return the language enum for a given language string. */ 425 426 enum language 427 language_enum (const char *str) 428 { 429 for (const auto &lang : language_defn::languages) 430 if (strcmp (lang->name (), str) == 0) 431 return lang->la_language; 432 433 if (strcmp (str, "local") == 0) 434 return language_auto; 435 436 return language_unknown; 437 } 438 439 /* Return the language struct for a given language enum. */ 440 441 const struct language_defn * 442 language_def (enum language lang) 443 { 444 const struct language_defn *l = language_defn::languages[lang]; 445 gdb_assert (l != nullptr); 446 return l; 447 } 448 449 /* Return the language as a string. */ 450 451 const char * 452 language_str (enum language lang) 453 { 454 return language_def (lang)->name (); 455 } 456 457 458 459 /* Build and install the "set language LANG" command. */ 460 461 static void 462 add_set_language_command () 463 { 464 static const char **language_names; 465 466 /* Build the language names array, to be used as enumeration in the 467 "set language" enum command. +1 for "local" and +1 for NULL 468 termination. */ 469 language_names = new const char *[ARRAY_SIZE (language_defn::languages) + 2]; 470 471 /* Display "auto", "local" and "unknown" first, and then the rest, 472 alpha sorted. */ 473 const char **language_names_p = language_names; 474 language = language_def (language_auto)->name (); 475 *language_names_p++ = language; 476 *language_names_p++ = "local"; 477 *language_names_p++ = language_def (language_unknown)->name (); 478 const char **sort_begin = language_names_p; 479 for (const auto &lang : language_defn::languages) 480 { 481 /* Already handled above. */ 482 if (lang->la_language == language_auto 483 || lang->la_language == language_unknown) 484 continue; 485 *language_names_p++ = lang->name (); 486 } 487 *language_names_p = NULL; 488 std::sort (sort_begin, language_names_p, compare_cstrings); 489 490 /* Add the filename extensions. */ 491 for (const auto &lang : language_defn::languages) 492 for (const char * const &ext : lang->filename_extensions ()) 493 add_filename_language (ext, lang->la_language); 494 495 /* Build the "help set language" docs. */ 496 string_file doc; 497 498 doc.printf (_("Set the current source language.\n" 499 "The currently understood settings are:\n\nlocal or " 500 "auto Automatic setting based on source file")); 501 502 for (const auto &lang : language_defn::languages) 503 { 504 /* Already dealt with these above. */ 505 if (lang->la_language == language_unknown 506 || lang->la_language == language_auto) 507 continue; 508 509 /* Note that we add the newline at the front, so we don't wind 510 up with a trailing newline. */ 511 doc.printf ("\n%-16s Use the %s language", 512 lang->name (), 513 lang->natural_name ()); 514 } 515 516 add_setshow_enum_cmd ("language", class_support, 517 language_names, 518 &language, 519 doc.c_str (), 520 _("Show the current source language."), 521 NULL, set_language_command, 522 show_language_command, 523 &setlist, &showlist); 524 } 525 526 /* Iterate through all registered languages looking for and calling 527 any non-NULL struct language_defn.skip_trampoline() functions. 528 Return the result from the first that returns non-zero, or 0 if all 529 `fail'. */ 530 CORE_ADDR 531 skip_language_trampoline (frame_info_ptr frame, CORE_ADDR pc) 532 { 533 for (const auto &lang : language_defn::languages) 534 { 535 CORE_ADDR real_pc = lang->skip_trampoline (frame, pc); 536 537 if (real_pc != 0) 538 return real_pc; 539 } 540 541 return 0; 542 } 543 544 /* Return demangled language symbol, or NULL. 545 FIXME: Options are only useful for certain languages and ignored 546 by others, so it would be better to remove them here and have a 547 more flexible demangler for the languages that need it. 548 FIXME: Sometimes the demangler is invoked when we don't know the 549 language, so we can't use this everywhere. */ 550 gdb::unique_xmalloc_ptr<char> 551 language_demangle (const struct language_defn *current_language, 552 const char *mangled, int options) 553 { 554 if (current_language != NULL) 555 return current_language->demangle_symbol (mangled, options); 556 return NULL; 557 } 558 559 /* Return information about whether TYPE should be passed 560 (and returned) by reference at the language level. */ 561 562 struct language_pass_by_ref_info 563 language_pass_by_reference (struct type *type) 564 { 565 return current_language->pass_by_reference_info (type); 566 } 567 568 /* Return the default string containing the list of characters 569 delimiting words. This is a reasonable default value that 570 most languages should be able to use. */ 571 572 const char * 573 default_word_break_characters (void) 574 { 575 return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-"; 576 } 577 578 /* See language.h. */ 579 580 void 581 language_defn::print_array_index (struct type *index_type, LONGEST index, 582 struct ui_file *stream, 583 const value_print_options *options) const 584 { 585 struct value *index_value = value_from_longest (index_type, index); 586 587 gdb_printf (stream, "["); 588 value_print (index_value, stream, options); 589 gdb_printf (stream, "] = "); 590 } 591 592 /* See language.h. */ 593 594 gdb::unique_xmalloc_ptr<char> 595 language_defn::watch_location_expression (struct type *type, 596 CORE_ADDR addr) const 597 { 598 /* Generates an expression that assumes a C like syntax is valid. */ 599 type = check_typedef (check_typedef (type)->target_type ()); 600 std::string name = type_to_string (type); 601 return xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)); 602 } 603 604 /* See language.h. */ 605 606 void 607 language_defn::value_print (struct value *val, struct ui_file *stream, 608 const struct value_print_options *options) const 609 { 610 return c_value_print (val, stream, options); 611 } 612 613 /* See language.h. */ 614 615 int 616 language_defn::parser (struct parser_state *ps) const 617 { 618 return c_parse (ps); 619 } 620 621 /* See language.h. */ 622 623 void 624 language_defn::value_print_inner 625 (struct value *val, struct ui_file *stream, int recurse, 626 const struct value_print_options *options) const 627 { 628 return c_value_print_inner (val, stream, recurse, options); 629 } 630 631 /* See language.h. */ 632 633 void 634 language_defn::print_typedef (struct type *type, struct symbol *new_symbol, 635 struct ui_file *stream) const 636 { 637 c_print_typedef (type, new_symbol, stream); 638 } 639 640 /* See language.h. */ 641 642 bool 643 language_defn::is_string_type_p (struct type *type) const 644 { 645 return c_is_string_type_p (type); 646 } 647 648 /* See language.h. */ 649 650 std::unique_ptr<compile_instance> 651 language_defn::get_compile_instance () const 652 { 653 return {}; 654 } 655 656 /* The default implementation of the get_symbol_name_matcher_inner method 657 from the language_defn class. Matches with strncmp_iw. */ 658 659 static bool 660 default_symbol_name_matcher (const char *symbol_search_name, 661 const lookup_name_info &lookup_name, 662 completion_match_result *comp_match_res) 663 { 664 gdb::string_view name = lookup_name.name (); 665 completion_match_for_lcd *match_for_lcd 666 = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL); 667 strncmp_iw_mode mode = (lookup_name.completion_mode () 668 ? strncmp_iw_mode::NORMAL 669 : strncmp_iw_mode::MATCH_PARAMS); 670 671 if (strncmp_iw_with_mode (symbol_search_name, name.data (), name.size (), 672 mode, language_minimal, match_for_lcd) == 0) 673 { 674 if (comp_match_res != NULL) 675 comp_match_res->set_match (symbol_search_name); 676 return true; 677 } 678 else 679 return false; 680 } 681 682 /* See language.h. */ 683 684 symbol_name_matcher_ftype * 685 language_defn::get_symbol_name_matcher 686 (const lookup_name_info &lookup_name) const 687 { 688 /* If currently in Ada mode, and the lookup name is wrapped in 689 '<...>', hijack all symbol name comparisons using the Ada 690 matcher, which handles the verbatim matching. */ 691 if (current_language->la_language == language_ada 692 && lookup_name.ada ().verbatim_p ()) 693 return current_language->get_symbol_name_matcher_inner (lookup_name); 694 695 return this->get_symbol_name_matcher_inner (lookup_name); 696 } 697 698 /* See language.h. */ 699 700 symbol_name_matcher_ftype * 701 language_defn::get_symbol_name_matcher_inner 702 (const lookup_name_info &lookup_name) const 703 { 704 return default_symbol_name_matcher; 705 } 706 707 /* See language.h. */ 708 709 const struct lang_varobj_ops * 710 language_defn::varobj_ops () const 711 { 712 /* The ops for the C language are suitable for the vast majority of the 713 supported languages. */ 714 return &c_varobj_ops; 715 } 716 717 /* Parent class for both the "auto" and "unknown" languages. These two 718 pseudo-languages are very similar so merging their implementations like 719 this makes sense. */ 720 721 class auto_or_unknown_language : public language_defn 722 { 723 public: 724 auto_or_unknown_language (enum language lang) 725 : language_defn (lang) 726 { /* Nothing. */ } 727 728 /* See language.h. */ 729 void language_arch_info (struct gdbarch *gdbarch, 730 struct language_arch_info *lai) const override 731 { 732 lai->set_string_char_type (builtin_type (gdbarch)->builtin_char); 733 lai->set_bool_type (builtin_type (gdbarch)->builtin_int); 734 } 735 736 /* See language.h. */ 737 738 void print_type (struct type *type, const char *varstring, 739 struct ui_file *stream, int show, int level, 740 const struct type_print_options *flags) const override 741 { 742 error (_("type printing not implemented for language \"%s\""), 743 natural_name ()); 744 } 745 746 /* See language.h. */ 747 748 gdb::unique_xmalloc_ptr<char> demangle_symbol (const char *mangled, 749 int options) const override 750 { 751 /* The auto language just uses the C++ demangler. */ 752 return gdb_demangle (mangled, options); 753 } 754 755 /* See language.h. */ 756 757 void value_print (struct value *val, struct ui_file *stream, 758 const struct value_print_options *options) const override 759 { 760 error (_("value printing not implemented for language \"%s\""), 761 natural_name ()); 762 } 763 764 /* See language.h. */ 765 766 void value_print_inner 767 (struct value *val, struct ui_file *stream, int recurse, 768 const struct value_print_options *options) const override 769 { 770 error (_("inner value printing not implemented for language \"%s\""), 771 natural_name ()); 772 } 773 774 /* See language.h. */ 775 776 int parser (struct parser_state *ps) const override 777 { 778 error (_("expression parsing not implemented for language \"%s\""), 779 natural_name ()); 780 } 781 782 /* See language.h. */ 783 784 void emitchar (int ch, struct type *chtype, 785 struct ui_file *stream, int quoter) const override 786 { 787 error (_("emit character not implemented for language \"%s\""), 788 natural_name ()); 789 } 790 791 /* See language.h. */ 792 793 void printchar (int ch, struct type *chtype, 794 struct ui_file *stream) const override 795 { 796 error (_("print character not implemented for language \"%s\""), 797 natural_name ()); 798 } 799 800 /* See language.h. */ 801 802 void printstr (struct ui_file *stream, struct type *elttype, 803 const gdb_byte *string, unsigned int length, 804 const char *encoding, int force_ellipses, 805 const struct value_print_options *options) const override 806 { 807 error (_("print string not implemented for language \"%s\""), 808 natural_name ()); 809 } 810 811 /* See language.h. */ 812 813 void print_typedef (struct type *type, struct symbol *new_symbol, 814 struct ui_file *stream) const override 815 { 816 error (_("print typedef not implemented for language \"%s\""), 817 natural_name ()); 818 } 819 820 /* See language.h. */ 821 822 bool is_string_type_p (struct type *type) const override 823 { 824 type = check_typedef (type); 825 while (type->code () == TYPE_CODE_REF) 826 { 827 type = type->target_type (); 828 type = check_typedef (type); 829 } 830 return (type->code () == TYPE_CODE_STRING); 831 } 832 833 /* See language.h. */ 834 835 const char *name_of_this () const override 836 { return "this"; } 837 }; 838 839 /* Class representing the fake "auto" language. */ 840 841 class auto_language : public auto_or_unknown_language 842 { 843 public: 844 auto_language () 845 : auto_or_unknown_language (language_auto) 846 { /* Nothing. */ } 847 848 /* See language.h. */ 849 850 const char *name () const override 851 { return "auto"; } 852 853 /* See language.h. */ 854 855 const char *natural_name () const override 856 { return "Auto"; } 857 }; 858 859 /* Single instance of the fake "auto" language. */ 860 861 static auto_language auto_language_defn; 862 863 /* Class representing the unknown language. */ 864 865 class unknown_language : public auto_or_unknown_language 866 { 867 public: 868 unknown_language () 869 : auto_or_unknown_language (language_unknown) 870 { /* Nothing. */ } 871 872 /* See language.h. */ 873 874 const char *name () const override 875 { return "unknown"; } 876 877 /* See language.h. */ 878 879 const char *natural_name () const override 880 { return "Unknown"; } 881 882 /* See language.h. */ 883 884 bool store_sym_names_in_linkage_form_p () const override 885 { return true; } 886 }; 887 888 /* Single instance of the unknown language class. */ 889 890 static unknown_language unknown_language_defn; 891 892 893 /* Per-architecture language information. */ 894 895 struct language_gdbarch 896 { 897 /* A vector of per-language per-architecture info. Indexed by "enum 898 language". */ 899 struct language_arch_info arch_info[nr_languages]; 900 }; 901 902 static const registry<gdbarch>::key<language_gdbarch> language_gdbarch_data; 903 904 static language_gdbarch * 905 get_language_gdbarch (struct gdbarch *gdbarch) 906 { 907 struct language_gdbarch *l = language_gdbarch_data.get (gdbarch); 908 if (l == nullptr) 909 { 910 l = new struct language_gdbarch; 911 for (const auto &lang : language_defn::languages) 912 { 913 gdb_assert (lang != nullptr); 914 lang->language_arch_info (gdbarch, &l->arch_info[lang->la_language]); 915 } 916 language_gdbarch_data.set (gdbarch, l); 917 } 918 919 return l; 920 } 921 922 /* See language.h. */ 923 924 struct type * 925 language_string_char_type (const struct language_defn *la, 926 struct gdbarch *gdbarch) 927 { 928 struct language_gdbarch *ld = get_language_gdbarch (gdbarch); 929 return ld->arch_info[la->la_language].string_char_type (); 930 } 931 932 /* See language.h. */ 933 934 struct type * 935 language_bool_type (const struct language_defn *la, 936 struct gdbarch *gdbarch) 937 { 938 struct language_gdbarch *ld = get_language_gdbarch (gdbarch); 939 return ld->arch_info[la->la_language].bool_type (); 940 } 941 942 /* See language.h. */ 943 944 struct type * 945 language_arch_info::bool_type () const 946 { 947 if (m_bool_type_name != nullptr) 948 { 949 struct symbol *sym; 950 951 sym = lookup_symbol (m_bool_type_name, NULL, VAR_DOMAIN, NULL).symbol; 952 if (sym != nullptr) 953 { 954 struct type *type = sym->type (); 955 if (type != nullptr && type->code () == TYPE_CODE_BOOL) 956 return type; 957 } 958 } 959 960 return m_bool_type_default; 961 } 962 963 /* See language.h. */ 964 965 struct symbol * 966 language_arch_info::type_and_symbol::alloc_type_symbol 967 (enum language lang, struct type *type) 968 { 969 struct symbol *symbol; 970 struct gdbarch *gdbarch; 971 gdb_assert (!type->is_objfile_owned ()); 972 gdbarch = type->arch_owner (); 973 symbol = new (gdbarch_obstack (gdbarch)) struct symbol (); 974 symbol->m_name = type->name (); 975 symbol->set_language (lang, nullptr); 976 symbol->owner.arch = gdbarch; 977 symbol->set_is_objfile_owned (0); 978 symbol->set_section_index (0); 979 symbol->set_type (type); 980 symbol->set_domain (VAR_DOMAIN); 981 symbol->set_aclass_index (LOC_TYPEDEF); 982 return symbol; 983 } 984 985 /* See language.h. */ 986 987 language_arch_info::type_and_symbol * 988 language_arch_info::lookup_primitive_type_and_symbol (const char *name) 989 { 990 for (struct type_and_symbol &tas : primitive_types_and_symbols) 991 { 992 if (strcmp (tas.type ()->name (), name) == 0) 993 return &tas; 994 } 995 996 return nullptr; 997 } 998 999 /* See language.h. */ 1000 1001 struct type * 1002 language_arch_info::lookup_primitive_type (const char *name) 1003 { 1004 type_and_symbol *tas = lookup_primitive_type_and_symbol (name); 1005 if (tas != nullptr) 1006 return tas->type (); 1007 return nullptr; 1008 } 1009 1010 /* See language.h. */ 1011 1012 struct type * 1013 language_arch_info::lookup_primitive_type 1014 (gdb::function_view<bool (struct type *)> filter) 1015 { 1016 for (struct type_and_symbol &tas : primitive_types_and_symbols) 1017 { 1018 if (filter (tas.type ())) 1019 return tas.type (); 1020 } 1021 1022 return nullptr; 1023 } 1024 1025 /* See language.h. */ 1026 1027 struct symbol * 1028 language_arch_info::lookup_primitive_type_as_symbol (const char *name, 1029 enum language lang) 1030 { 1031 type_and_symbol *tas = lookup_primitive_type_and_symbol (name); 1032 if (tas != nullptr) 1033 return tas->symbol (lang); 1034 return nullptr; 1035 } 1036 1037 /* Helper for the language_lookup_primitive_type overloads to forward 1038 to the corresponding language's lookup_primitive_type overload. */ 1039 1040 template<typename T> 1041 static struct type * 1042 language_lookup_primitive_type_1 (const struct language_defn *la, 1043 struct gdbarch *gdbarch, 1044 T arg) 1045 { 1046 struct language_gdbarch *ld = get_language_gdbarch (gdbarch); 1047 return ld->arch_info[la->la_language].lookup_primitive_type (arg); 1048 } 1049 1050 /* See language.h. */ 1051 1052 struct type * 1053 language_lookup_primitive_type (const struct language_defn *la, 1054 struct gdbarch *gdbarch, 1055 const char *name) 1056 { 1057 return language_lookup_primitive_type_1 (la, gdbarch, name); 1058 } 1059 1060 /* See language.h. */ 1061 1062 struct type * 1063 language_lookup_primitive_type (const struct language_defn *la, 1064 struct gdbarch *gdbarch, 1065 gdb::function_view<bool (struct type *)> filter) 1066 { 1067 return language_lookup_primitive_type_1 (la, gdbarch, filter); 1068 } 1069 1070 /* See language.h. */ 1071 1072 struct symbol * 1073 language_lookup_primitive_type_as_symbol (const struct language_defn *la, 1074 struct gdbarch *gdbarch, 1075 const char *name) 1076 { 1077 struct language_gdbarch *ld = get_language_gdbarch (gdbarch); 1078 struct language_arch_info *lai = &ld->arch_info[la->la_language]; 1079 1080 symbol_lookup_debug_printf 1081 ("language = \"%s\", gdbarch @ %s, type = \"%s\")", 1082 la->name (), host_address_to_string (gdbarch), name); 1083 1084 struct symbol *sym 1085 = lai->lookup_primitive_type_as_symbol (name, la->la_language); 1086 1087 symbol_lookup_debug_printf ("found symbol @ %s", 1088 host_address_to_string (sym)); 1089 1090 /* Note: The result of symbol lookup is normally a symbol *and* the block 1091 it was found in. Builtin types don't live in blocks. We *could* give 1092 them one, but there is no current need so to keep things simple symbol 1093 lookup is extended to allow for BLOCK_FOUND to be NULL. */ 1094 1095 return sym; 1096 } 1097 1098 /* Initialize the language routines. */ 1099 1100 void _initialize_language (); 1101 void 1102 _initialize_language () 1103 { 1104 static const char *const type_or_range_names[] 1105 = { "on", "off", "warn", "auto", NULL }; 1106 1107 static const char *const case_sensitive_names[] 1108 = { "on", "off", "auto", NULL }; 1109 1110 /* GDB commands for language specific stuff. */ 1111 1112 set_show_commands setshow_check_cmds 1113 = add_setshow_prefix_cmd ("check", no_class, 1114 _("Set the status of the type/range checker."), 1115 _("Show the status of the type/range checker."), 1116 &setchecklist, &showchecklist, 1117 &setlist, &showlist); 1118 add_alias_cmd ("c", setshow_check_cmds.set, no_class, 1, &setlist); 1119 add_alias_cmd ("ch", setshow_check_cmds.set, no_class, 1, &setlist); 1120 add_alias_cmd ("c", setshow_check_cmds.show, no_class, 1, &showlist); 1121 add_alias_cmd ("ch", setshow_check_cmds.show, no_class, 1, &showlist); 1122 1123 range = type_or_range_names[3]; 1124 gdb_assert (strcmp (range, "auto") == 0); 1125 add_setshow_enum_cmd ("range", class_support, type_or_range_names, 1126 &range, 1127 _("Set range checking (on/warn/off/auto)."), 1128 _("Show range checking (on/warn/off/auto)."), 1129 NULL, set_range_command, 1130 show_range_command, 1131 &setchecklist, &showchecklist); 1132 1133 case_sensitive = case_sensitive_names[2]; 1134 gdb_assert (strcmp (case_sensitive, "auto") == 0); 1135 add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names, 1136 &case_sensitive, _("\ 1137 Set case sensitivity in name search (on/off/auto)."), _("\ 1138 Show case sensitivity in name search (on/off/auto)."), _("\ 1139 For Fortran the default is off; for other languages the default is on."), 1140 set_case_command, 1141 show_case_command, 1142 &setlist, &showlist); 1143 1144 /* In order to call SET_LANGUAGE (below) we need to make sure that 1145 CURRENT_LANGUAGE is not NULL. So first set the language to unknown, 1146 then we can change the language to 'auto'. */ 1147 current_language = language_def (language_unknown); 1148 1149 add_set_language_command (); 1150 1151 /* Have the above take effect. */ 1152 set_language (language_auto); 1153 } 1154