From 1868c04ebae02e64e51631c2614703b4a294be6b Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Mon, 18 Mar 2002 02:26:32 +0000 Subject: [PATCH] * cli/cli-decode.c (cmd_type): New function. * command.h (cmd_type): Declare. * infrun.c (set_schedlock_func): Call function cmd_type. * kod.c (kod_set_os): Call cmd_type. * cris-tdep.c (cris_version_update): Use function cmd_type. (cris_mode_update, cris_abi_update): Ditto. --- gdb/ChangeLog | 7 +++++++ gdb/cli/cli-decode.c | 6 ++++++ gdb/command.h | 12 ++++++++++++ gdb/cris-tdep.c | 33 ++++++++++++++++++++++++++++++--- gdb/infrun.c | 10 +++++++++- gdb/kod.c | 17 ++++++++++------- 6 files changed, 74 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d6dc6dc9ad..682cc5c81f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2002-03-17 Andrew Cagney + * cli/cli-decode.c (cmd_type): New function. + * command.h (cmd_type): Declare. + * infrun.c (set_schedlock_func): Call function cmd_type. + * kod.c (kod_set_os): Call cmd_type. + * cris-tdep.c (cris_version_update): Use function cmd_type. + (cris_mode_update, cris_abi_update): Ditto. + * command.h: (execute_cmd_post_hook): Declare. (execute_cmd_pre_hook): Declare. * cli/cli-script.c (clear_hook_in_cleanup): New function. diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index f68064eb0a..1568e31ae3 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -86,6 +86,12 @@ cmd_cfunc_eq (struct cmd_list_element *cmd, return cmd->func == do_cfunc && cmd->function.cfunc == cfunc; } +enum cmd_types +cmd_type (struct cmd_list_element *cmd) +{ + return cmd->type; +} + void set_cmd_completer (struct cmd_list_element *cmd, char **(*completer) (char *text, char *word)) diff --git a/gdb/command.h b/gdb/command.h index 58574f4142..fffa3be532 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -306,6 +306,18 @@ extern int cmd_cfunc_eq (struct cmd_list_element *cmd, extern void execute_cmd_pre_hook (struct cmd_list_element *cmd); extern void execute_cmd_post_hook (struct cmd_list_element *cmd); +/* Return the type of the command. */ +/* NOTE: cagney/2002-03-17: The add_show_from_set() function clones + the set command passed as a parameter. The clone operation will + include (BUG?) any ``set'' command callback, if present. Commands + like ``info set'' call all the ``show'' command callbacks. + Unfortunatly, for ``show'' commands cloned from ``set'', this + includes callbacks belonging to ``set'' commands. Making this + worse, this only occures if add_show_from_set() is called after + add_cmd_sfunc() (BUG?). */ +extern enum cmd_types cmd_type (struct cmd_list_element *cmd); + + extern struct cmd_list_element *lookup_cmd (char **, struct cmd_list_element *, char *, int, int); diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c index 4662ebaac2..9a526114d9 100644 --- a/gdb/cris-tdep.c +++ b/gdb/cris-tdep.c @@ -3925,8 +3925,17 @@ cris_version_update (char *ignore_args, int from_tty, { struct gdbarch_info info; + /* NOTE: cagney/2002-03-17: The add_show_from_set() function clones + the set command passed as a parameter. The clone operation will + include (BUG?) any ``set'' command callback, if present. + Commands like ``info set'' call all the ``show'' command + callbacks. Unfortunatly, for ``show'' commands cloned from + ``set'', this includes callbacks belonging to ``set'' commands. + Making this worse, this only occures if add_show_from_set() is + called after add_cmd_sfunc() (BUG?). */ + /* From here on, trust the user's CRIS version setting. */ - if (c->type == set_cmd) + if (cmd_type (c) == set_cmd) { usr_cmd_cris_version_valid = 1; @@ -3943,8 +3952,17 @@ cris_mode_update (char *ignore_args, int from_tty, { struct gdbarch_info info; + /* NOTE: cagney/2002-03-17: The add_show_from_set() function clones + the set command passed as a parameter. The clone operation will + include (BUG?) any ``set'' command callback, if present. + Commands like ``info set'' call all the ``show'' command + callbacks. Unfortunatly, for ``show'' commands cloned from + ``set'', this includes callbacks belonging to ``set'' commands. + Making this worse, this only occures if add_show_from_set() is + called after add_cmd_sfunc() (BUG?). */ + /* From here on, trust the user's CRIS mode setting. */ - if (c->type == set_cmd) + if (cmd_type (c) == set_cmd) { usr_cmd_cris_mode_valid = 1; @@ -3961,8 +3979,17 @@ cris_abi_update (char *ignore_args, int from_tty, { struct gdbarch_info info; + /* NOTE: cagney/2002-03-17: The add_show_from_set() function clones + the set command passed as a parameter. The clone operation will + include (BUG?) any ``set'' command callback, if present. + Commands like ``info set'' call all the ``show'' command + callbacks. Unfortunatly, for ``show'' commands cloned from + ``set'', this includes callbacks belonging to ``set'' commands. + Making this worse, this only occures if add_show_from_set() is + called after add_cmd_sfunc() (BUG?). */ + /* From here on, trust the user's CRIS ABI setting. */ - if (c->type == set_cmd) + if (cmd_type (c) == set_cmd) { usr_cmd_cris_abi_valid = 1; diff --git a/gdb/infrun.c b/gdb/infrun.c index 466305f987..2415e8a98d 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -749,7 +749,15 @@ static const char *scheduler_enums[] = static void set_schedlock_func (char *args, int from_tty, struct cmd_list_element *c) { - if (c->type == set_cmd) + /* NOTE: cagney/2002-03-17: The add_show_from_set() function clones + the set command passed as a parameter. The clone operation will + include (BUG?) any ``set'' command callback, if present. + Commands like ``info set'' call all the ``show'' command + callbacks. Unfortunatly, for ``show'' commands cloned from + ``set'', this includes callbacks belonging to ``set'' commands. + Making this worse, this only occures if add_show_from_set() is + called after add_cmd_sfunc() (BUG?). */ + if (cmd_type (c) == set_cmd) if (!target_can_lock_scheduler) { scheduler_mode = schedlock_off; diff --git a/gdb/kod.c b/gdb/kod.c index 8e8a716914..8f565bb8c3 100644 --- a/gdb/kod.c +++ b/gdb/kod.c @@ -132,13 +132,16 @@ kod_set_os (char *arg, int from_tty, struct cmd_list_element *command) { char *p; - /* NOTE: cagney/2002-03-17: This function gets called by the command - ``info set'' with COMMAND pointing to a show_cmd rather than a - set command. This the test below is removed, a core dump results - (think about what happens when OPERATING_SYSTEM is NULL). The - wiered thing is that all other ``set'' handlers don't need this - test. */ - if (command->type != set_cmd) + /* NOTE: cagney/2002-03-17: The add_show_from_set() function clones + the set command passed as a parameter. The clone operation will + include (BUG?) any ``set'' command callback, if present. + Commands like ``info set'' call all the ``show'' command + callbacks. Unfortunatly, for ``show'' commands cloned from + ``set'', this includes callbacks belonging to ``set'' commands. + Making this worse, this only occures if add_show_from_set() is + called after add_cmd_sfunc() (BUG?). */ + + if (cmd_type (command) != set_cmd) return; /* If we had already had an open OS, close it. */