aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/arch-utils.c5
-rw-r--r--gdb/arm-tdep.c2
-rw-r--r--gdb/charset.c9
-rw-r--r--gdb/cli/cli-decode.c10
-rw-r--r--gdb/guile/scm-param.c4
-rw-r--r--gdb/language.c11
-rw-r--r--gdb/osabi.c4
-rw-r--r--gdb/python/py-param.c4
-rw-r--r--gdb/testsuite/gdb.python/py-parameter.exp4
9 files changed, 41 insertions, 12 deletions
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 38e3132..3ee978a 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -359,7 +359,7 @@ static const char *const endian_enum[] =
endian_auto,
NULL,
};
-static const char *set_endian_string;
+static const char *set_endian_string = endian_auto;
enum bfd_endian
selected_byte_order (void)
@@ -757,7 +757,8 @@ initialize_current_architecture (void)
list of architectures. */
{
/* Append ``auto''. */
- arches.push_back ("auto");
+ set_architecture_string = "auto";
+ arches.push_back (set_architecture_string);
arches.push_back (nullptr);
set_show_commands architecture_cmds
= add_setshow_enum_cmd ("architecture", class_support,
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index f6bd76a..f46913e 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -9802,6 +9802,8 @@ _initialize_arm_tdep ()
size_t offset = strlen ("reg-names-");
const char *style = disasm_options->name[i];
valid_disassembly_styles[j++] = &style[offset];
+ if (strcmp (&style[offset], "std") == 0)
+ disassembly_style = &style[offset];
length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
disasm_options->description[i]);
rdptr += length;
diff --git a/gdb/charset.c b/gdb/charset.c
index 9b1de08..bf205ae 100644
--- a/gdb/charset.c
+++ b/gdb/charset.c
@@ -1029,6 +1029,9 @@ _initialize_charset ()
#endif
#endif
+ /* Recall that the first element is always "auto". */
+ host_charset_name = charset_enum[0];
+ gdb_assert (strcmp (host_charset_name, "auto") == 0);
add_setshow_enum_cmd ("charset", class_support,
charset_enum, &host_charset_name, _("\
Set the host and target character sets."), _("\
@@ -1057,6 +1060,9 @@ To see a list of the character sets GDB supports, type `set host-charset <TAB>'.
show_host_charset_name,
&setlist, &showlist);
+ /* Recall that the first element is always "auto". */
+ target_charset_name = charset_enum[0];
+ gdb_assert (strcmp (target_charset_name, "auto") == 0);
add_setshow_enum_cmd ("target-charset", class_support,
charset_enum, &target_charset_name, _("\
Set the target character set."), _("\
@@ -1069,6 +1075,9 @@ To see a list of the character sets GDB supports, type `set target-charset'<TAB>
show_target_charset_name,
&setlist, &showlist);
+ /* Recall that the first element is always "auto". */
+ target_wide_charset_name = charset_enum[0];
+ gdb_assert (strcmp (target_wide_charset_name, "auto") == 0);
add_setshow_enum_cmd ("target-wide-charset", class_support,
charset_enum, &target_wide_charset_name,
_("\
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index c8cd956..5d94030 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -613,6 +613,16 @@ add_setshow_enum_cmd (const char *name,
struct cmd_list_element **set_list,
struct cmd_list_element **show_list)
{
+ /* We require *VAR to be initialized before this call, and
+ furthermore it must be == to one of the values in ENUMLIST. */
+ gdb_assert (var != nullptr && *var != nullptr);
+ for (int i = 0; ; ++i)
+ {
+ gdb_assert (enumlist[i] != nullptr);
+ if (*var == enumlist[i])
+ break;
+ }
+
set_show_commands commands
= add_setshow_cmd_full<const char *> (name, theclass, var_enum, var,
set_doc, show_doc, help_doc,
diff --git a/gdb/guile/scm-param.c b/gdb/guile/scm-param.c
index 2bbd463..42727bb 100644
--- a/gdb/guile/scm-param.c
+++ b/gdb/guile/scm-param.c
@@ -458,12 +458,12 @@ add_setshow_generic (enum var_types param_type, enum command_class cmd_class,
break;
case var_enum:
+ /* Initialize the value, just in case. */
+ make_setting (self).set<const char *> (self->enumeration[0]);
commands = add_setshow_enum_cmd (cmd_name, cmd_class, self->enumeration,
&self->value.cstringval, set_doc,
show_doc, help_doc, set_func, show_func,
set_list, show_list);
- /* Initialize the value, just in case. */
- make_setting (self).set<const char *> (self->enumeration[0]);
break;
default:
diff --git a/gdb/language.c b/gdb/language.c
index 0846b3e..f000142 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -476,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;
@@ -1150,6 +1151,8 @@ _initialize_language ()
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)."),
@@ -1158,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)."), _("\
@@ -1174,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);
}
diff --git a/gdb/osabi.c b/gdb/osabi.c
index 40c86e7..d4a9806 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -666,11 +666,13 @@ _initialize_gdb_osabi ()
generic_elf_osabi_sniffer);
/* Register the "set osabi" command. */
+ user_osabi_state = osabi_auto;
+ set_osabi_string = gdb_osabi_available_names[0];
+ gdb_assert (strcmp (set_osabi_string, "auto") == 0);
add_setshow_enum_cmd ("osabi", class_support, gdb_osabi_available_names,
&set_osabi_string,
_("Set OS ABI of target."),
_("Show OS ABI of target."),
NULL, set_osabi, show_osabi,
&setlist, &showlist);
- user_osabi_state = osabi_auto;
}
diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c
index 24678bc..f5f0eca 100644
--- a/gdb/python/py-param.c
+++ b/gdb/python/py-param.c
@@ -572,13 +572,13 @@ add_setshow_generic (int parmclass, enum command_class cmdclass,
break;
case var_enum:
+ /* Initialize the value, just in case. */
+ self->value.cstringval = self->enumeration[0];
commands = add_setshow_enum_cmd (cmd_name.get (), cmdclass,
self->enumeration,
&self->value.cstringval, set_doc,
show_doc, help_doc, get_set_value,
get_show_value, set_list, show_list);
- /* Initialize the value, just in case. */
- self->value.cstringval = self->enumeration[0];
break;
default:
diff --git a/gdb/testsuite/gdb.python/py-parameter.exp b/gdb/testsuite/gdb.python/py-parameter.exp
index b025c25..2de148c 100644
--- a/gdb/testsuite/gdb.python/py-parameter.exp
+++ b/gdb/testsuite/gdb.python/py-parameter.exp
@@ -364,3 +364,7 @@ test_really_undocumented_parameter
test_deprecated_api_parameter
test_integer_parameter
test_throwing_parameter
+
+# This caused a gdb crash.
+gdb_test "python print(gdb.parameter('endian'))" "auto" \
+ "print endian parameter"