X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Flanguage.c;h=69c73b0318e1b46db6ffc0eb8bc125aac0cf65bf;hb=dd1ae8eaa369ac5c7df7e55c929b42ac8ac44526;hp=a3f96ecd6ff77bf607106775766ce2e229a14c72;hpb=2f822da535ba9b159174d02d7114b4fc4f7c8818;p=binutils-gdb.git diff --git a/gdb/language.c b/gdb/language.c index a3f96ecd6ff..69c73b0318e 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -1,6 +1,6 @@ /* Multiple source language support for GDB. - Copyright (C) 1991-2021 Free Software Foundation, Inc. + Copyright (C) 1991-2022 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -114,12 +114,12 @@ show_language_command (struct ui_file *file, int from_tty, enum language flang; /* The language of the frame. */ if (language_mode == language_mode_auto) - fprintf_filtered (gdb_stdout, + fprintf_filtered (file, _("The current source language is " "\"auto; currently %s\".\n"), current_language->name ()); else - fprintf_filtered (gdb_stdout, + fprintf_filtered (file, _("The current source language is \"%s\".\n"), current_language->name ()); @@ -132,7 +132,7 @@ show_language_command (struct ui_file *file, int from_tty, if (flang != language_unknown && language_mode == language_mode_manual && current_language->la_language != flang) - printf_filtered ("%s\n", _(lang_frame_mismatch_warn)); + fprintf_filtered (file, "%s\n", _(lang_frame_mismatch_warn)); } } @@ -220,12 +220,12 @@ show_range_command (struct ui_file *file, int from_tty, "Unrecognized range check setting."); } - fprintf_filtered (gdb_stdout, + fprintf_filtered (file, _("Range checking is \"auto; currently %s\".\n"), tmp); } else - fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"), + fprintf_filtered (file, _("Range checking is \"%s\".\n"), value); if (range_check == range_check_warn @@ -296,13 +296,13 @@ show_case_command (struct ui_file *file, int from_tty, "Unrecognized case-sensitive setting."); } - fprintf_filtered (gdb_stdout, + fprintf_filtered (file, _("Case sensitivity in " "name search is \"auto; currently %s\".\n"), tmp); } else - fprintf_filtered (gdb_stdout, + fprintf_filtered (file, _("Case sensitivity in name search is \"%s\".\n"), value); @@ -383,33 +383,8 @@ language_info () return; expected_language = current_language; - printf_unfiltered (_("Current language: %s\n"), language); - show_language_command (NULL, 1, NULL, NULL); -} - - -/* Returns non-zero if the value is a pointer type. */ -int -pointer_type (struct type *type) -{ - return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type); -} - - -/* This page contains functions that return info about - (struct value) values used in GDB. */ - -/* Returns non-zero if the value VAL represents a true value. */ -int -value_true (struct value *val) -{ - /* It is possible that we should have some sort of error if a non-boolean - value is used in this context. Possibly dependent on some kind of - "boolean-checking" option like range checking. But it should probably - not depend on the language except insofar as is necessary to identify - a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean - should be an error, probably). */ - return !value_logical_not (val); + printf_filtered (_("Current language: %s\n"), language); + show_language_command (gdb_stdout, 1, NULL, NULL); } /* This page contains functions for the printing out of @@ -501,7 +476,8 @@ add_set_language_command () /* Display "auto", "local" and "unknown" first, and then the rest, alpha sorted. */ const char **language_names_p = language_names; - *language_names_p++ = language_def (language_auto)->name (); + language = language_def (language_auto)->name (); + *language_names_p++ = language; *language_names_p++ = "local"; *language_names_p++ = language_def (language_unknown)->name (); const char **sort_begin = language_names_p; @@ -576,7 +552,7 @@ skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc) more flexible demangler for the languages that need it. FIXME: Sometimes the demangler is invoked when we don't know the language, so we can't use this everywhere. */ -char * +gdb::unique_xmalloc_ptr language_demangle (const struct language_defn *current_language, const char *mangled, int options) { @@ -627,8 +603,7 @@ language_defn::watch_location_expression (struct type *type, /* Generates an expression that assumes a C like syntax is valid. */ type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); std::string name = type_to_string (type); - return gdb::unique_xmalloc_ptr - (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr))); + return xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)); } /* See language.h. */ @@ -796,7 +771,8 @@ public: /* See language.h. */ - char *demangle_symbol (const char *mangled, int options) const override + gdb::unique_xmalloc_ptr demangle_symbol (const char *mangled, + int options) const override { /* The auto language just uses the C++ demangler. */ return gdb_demangle (mangled, options); @@ -825,8 +801,8 @@ public: int parser (struct parser_state *ps) const override { - /* No parsing is done, just claim success. */ - return 1; + error (_("expression parsing not implemented for language \"%s\""), + natural_name ()); } /* See language.h. */ @@ -999,7 +975,7 @@ language_arch_info::bool_type () const sym = lookup_symbol (m_bool_type_name, NULL, VAR_DOMAIN, NULL).symbol; if (sym != nullptr) { - struct type *type = SYMBOL_TYPE (sym); + struct type *type = sym->type (); if (type != nullptr && type->code () == TYPE_CODE_BOOL) return type; } @@ -1022,11 +998,11 @@ language_arch_info::type_and_symbol::alloc_type_symbol symbol->m_name = type->name (); symbol->set_language (lang, nullptr); symbol->owner.arch = gdbarch; - SYMBOL_OBJFILE_OWNED (symbol) = 0; + symbol->set_is_objfile_owned (0); symbol->set_section_index (0); - SYMBOL_TYPE (symbol) = type; - SYMBOL_DOMAIN (symbol) = VAR_DOMAIN; - SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF; + symbol->set_type (type); + symbol->set_domain (VAR_DOMAIN); + symbol->set_aclass_index (LOC_TYPEDEF); return symbol; } @@ -1164,18 +1140,19 @@ _initialize_language () /* GDB commands for language specific stuff. */ - add_basic_prefix_cmd ("check", no_class, - _("Set the status of the type/range checker."), - &setchecklist, 0, &setlist); - add_alias_cmd ("c", "check", no_class, 1, &setlist); - add_alias_cmd ("ch", "check", no_class, 1, &setlist); - - add_show_prefix_cmd ("check", no_class, - _("Show the status of the type/range checker."), - &showchecklist, 0, &showlist); - add_alias_cmd ("c", "check", no_class, 1, &showlist); - add_alias_cmd ("ch", "check", no_class, 1, &showlist); - + set_show_commands setshow_check_cmds + = add_setshow_prefix_cmd ("check", no_class, + _("Set the status of the type/range checker."), + _("Show the status of the type/range checker."), + &setchecklist, &showchecklist, + &setlist, &showlist); + add_alias_cmd ("c", setshow_check_cmds.set, no_class, 1, &setlist); + add_alias_cmd ("ch", setshow_check_cmds.set, no_class, 1, &setlist); + add_alias_cmd ("c", setshow_check_cmds.show, no_class, 1, &showlist); + add_alias_cmd ("ch", setshow_check_cmds.show, no_class, 1, &showlist); + + range = type_or_range_names[3]; + gdb_assert (strcmp (range, "auto") == 0); add_setshow_enum_cmd ("range", class_support, type_or_range_names, &range, _("Set range checking (on/warn/off/auto)."), @@ -1184,6 +1161,8 @@ _initialize_language () show_range_command, &setchecklist, &showchecklist); + case_sensitive = case_sensitive_names[2]; + gdb_assert (strcmp (case_sensitive, "auto") == 0); add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names, &case_sensitive, _("\ Set case sensitivity in name search (on/off/auto)."), _("\ @@ -1200,10 +1179,6 @@ For Fortran the default is off; for other languages the default is on."), add_set_language_command (); - language = "auto"; - range = "auto"; - case_sensitive = "auto"; - /* Have the above take effect. */ set_language (language_auto); }