diff options
-rw-r--r-- | gdb/ChangeLog | 25 | ||||
-rw-r--r-- | gdb/breakpoint.c | 7 | ||||
-rw-r--r-- | gdb/breakpoint.h | 3 | ||||
-rw-r--r-- | gdb/cli/cli-script.c | 56 | ||||
-rw-r--r-- | gdb/compile/compile.c | 6 | ||||
-rw-r--r-- | gdb/compile/compile.h | 3 | ||||
-rw-r--r-- | gdb/guile/guile.c | 5 | ||||
-rw-r--r-- | gdb/guile/guile.h | 3 | ||||
-rw-r--r-- | gdb/python/python.c | 5 | ||||
-rw-r--r-- | gdb/python/python.h | 3 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/python.exp | 4 | ||||
-rw-r--r-- | gdb/tracepoint.c | 6 | ||||
-rw-r--r-- | gdb/tracepoint.h | 3 |
14 files changed, 98 insertions, 36 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 351dc2d..7fb64d6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,28 @@ +2018-09-17 Simon Marchi <simon.marchi@polymtl.ca> + + PR python/23669 + * breakpoint.c (commands_cmd_element): New. + (_initialize_breakpoint): Assign commands_cmd_element. + * breakpoint.h (commands_cmd_element): New. + * cli/cli-script.c (while_cmd_element, if_command, + define_cmd_element): New. + (command_name_equals): Remove. + (process_next_line): Compare commands by pointer, not by name. + (_initialize_cli_script): Assign the various cmd_list_element + variables. + * compile/compile.c (compile_cmd_element): New. + (_initialize_compile): Assign compile_cmd_element. + * compile/compile.h (compile_cmd_element): New. + * guile/guile.c (guile_cmd_element): New. + (install_gdb_commands): Assign guile_cmd_element. + * guile/guile.h (guile_cmd_element): New. + * python/python.c (python_cmd_element): New. + (_initialize_python): Assign python_cmd_element. + * python/python.h (python_cmd_element): New. + * tracepoint.c (while_stepping_cmd_element): New. + (_initialize_tracepoint): Assign while_stepping_cmd_element. + * tracepoint.h (while_stepping_cmd_element): New. + 2018-09-17 Tom Tromey <tom@tromey.com> * infrun.c (save_infcall_suspend_state): Return diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 85cb7d7..7591648 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -15506,6 +15506,10 @@ initialize_breakpoint_ops (void) static struct cmd_list_element *enablebreaklist = NULL; +/* See breakpoint.h. */ + +cmd_list_element *commands_cmd_element = nullptr; + void _initialize_breakpoint (void) { @@ -15531,7 +15535,8 @@ _initialize_breakpoint (void) Set ignore-count of breakpoint number N to COUNT.\n\ Usage is `ignore N COUNT'.")); - add_com ("commands", class_breakpoint, commands_command, _("\ + commands_cmd_element = add_com ("commands", class_breakpoint, + commands_command, _("\ Set commands to be executed when the given breakpoints are hit.\n\ Give a space-separated breakpoint list as argument after \"commands\".\n\ A list element can be a breakpoint number (e.g. `5') or a range of numbers\n\ diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 63cb537..66375b6 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -1679,4 +1679,7 @@ extern void maybe_print_thread_hit_breakpoint (struct ui_out *uiout); /* Print the specified breakpoint. */ extern void print_breakpoint (breakpoint *bp); +/* Command element for the 'commands' command. */ +extern cmd_list_element *commands_cmd_element; + #endif /* !defined (BREAKPOINT_H) */ diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index 8496fb8..e5b0f40 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -25,6 +25,7 @@ #include "ui-out.h" #include "top.h" #include "breakpoint.h" +#include "tracepoint.h" #include "cli/cli-cmds.h" #include "cli/cli-decode.h" #include "cli/cli-script.h" @@ -33,6 +34,8 @@ #include "interps.h" #include "compile/compile.h" #include "common/gdb_string_view.h" +#include "python/python.h" +#include "guile/guile.h" #include <vector> @@ -58,6 +61,15 @@ static int command_nest_depth = 1; /* This is to prevent certain commands being printed twice. */ static int suppress_next_print_command_trace = 0; +/* Command element for the 'while' command. */ +static cmd_list_element *while_cmd_element = nullptr; + +/* Command element for the 'if' command. */ +static cmd_list_element *if_cmd_element = nullptr; + +/* Command element for the 'define' command. */ +static cmd_list_element *define_cmd_element = nullptr; + /* Structure for arguments to user defined functions. */ class user_args @@ -906,16 +918,6 @@ read_next_line (void) return command_line_input (prompt_ptr, "commands"); } -/* Return true if CMD's name is NAME. */ - -static bool -command_name_equals (struct cmd_list_element *cmd, const char *name) -{ - return (cmd != NULL - && cmd != CMD_LIST_AMBIGUOUS - && strcmp (cmd->name, name) == 0); -} - /* Given an input line P, skip the command and return a pointer to the first argument. */ @@ -990,7 +992,7 @@ process_next_line (const char *p, struct command_line **command, /* Check for while, if, break, continue, etc and build a new command line structure for them. */ - if (command_name_equals (cmd, "while-stepping")) + if (cmd == while_stepping_cmd_element) { /* Because validate_actionline and encode_action lookup command's line as command, we need the line to @@ -1005,34 +1007,28 @@ process_next_line (const char *p, struct command_line **command, not. */ *command = build_command_line (while_stepping_control, p); } - else if (command_name_equals (cmd, "while")) - { - *command = build_command_line (while_control, line_first_arg (p)); - } - else if (command_name_equals (cmd, "if")) - { - *command = build_command_line (if_control, line_first_arg (p)); - } - else if (command_name_equals (cmd, "commands")) - { - *command = build_command_line (commands_control, line_first_arg (p)); - } - else if (command_name_equals (cmd, "define")) + else if (cmd == while_cmd_element) + *command = build_command_line (while_control, line_first_arg (p)); + else if (cmd == if_cmd_element) + *command = build_command_line (if_control, line_first_arg (p)); + else if (cmd == commands_cmd_element) + *command = build_command_line (commands_control, line_first_arg (p)); + else if (cmd == define_cmd_element) *command = build_command_line (define_control, line_first_arg (p)); - else if (command_name_equals (cmd, "python") && !inline_cmd) + else if (cmd == python_cmd_element && !inline_cmd) { /* Note that we ignore the inline "python command" form here. */ *command = build_command_line (python_control, ""); } - else if (command_name_equals (cmd, "compile") && !inline_cmd) + else if (cmd == compile_cmd_element && !inline_cmd) { /* Note that we ignore the inline "compile command" form here. */ *command = build_command_line (compile_control, ""); (*command)->control_u.compile.scope = COMPILE_I_INVALID_SCOPE; } - else if (command_name_equals (cmd, "guile") && !inline_cmd) + else if (cmd == guile_cmd_element && !inline_cmd) { /* Note that we ignore the inline "guile command" form here. */ *command = build_command_line (guile_control, ""); @@ -1597,7 +1593,7 @@ _initialize_cli_script (void) Document a user-defined command.\n\ Give command name as argument. Give documentation on following lines.\n\ End with a line of just \"end\".")); - add_com ("define", class_support, define_command, _("\ + define_cmd_element = add_com ("define", class_support, define_command, _("\ Define a new command name. Command name is argument.\n\ Definition appears on following lines, one command per line.\n\ End with a line of just \"end\".\n\ @@ -1606,13 +1602,13 @@ Commands defined in this way may accept an unlimited number of arguments\n\ accessed via $arg0 .. $argN. $argc tells how many arguments have\n\ been passed.")); - add_com ("while", class_support, while_command, _("\ + while_cmd_element = add_com ("while", class_support, while_command, _("\ Execute nested commands WHILE the conditional expression is non zero.\n\ The conditional expression must follow the word `while' and must in turn be\n\ followed by a new line. The nested commands must be entered one per line,\n\ and should be terminated by the word `end'.")); - add_com ("if", class_support, if_command, _("\ + if_cmd_element = add_com ("if", class_support, if_command, _("\ Execute nested commands once IF the conditional expression is non zero.\n\ The conditional expression must follow the word `if' and must in turn be\n\ followed by a new line. The nested commands must be entered one per line,\n\ diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c index f4d2091..02c162c 100644 --- a/gdb/compile/compile.c +++ b/gdb/compile/compile.c @@ -908,14 +908,16 @@ compile_instance::compile (const char *filename, int verbose_level) #undef FORWARD +/* See compile.h. */ +cmd_list_element *compile_cmd_element = nullptr; void _initialize_compile (void) { struct cmd_list_element *c = NULL; - add_prefix_cmd ("compile", class_obscure, compile_command, - _("\ + compile_cmd_element = add_prefix_cmd ("compile", class_obscure, + compile_command, _("\ Command to compile source code and inject it into the inferior."), &compile_command_list, "compile ", 1, &cmdlist); add_com_alias ("expression", "compile", class_obscure, 0); diff --git a/gdb/compile/compile.h b/gdb/compile/compile.h index 89cc00f..955f883 100644 --- a/gdb/compile/compile.h +++ b/gdb/compile/compile.h @@ -103,4 +103,7 @@ extern void compile_dwarf_bounds_to_c (string_file *stream, extern void compile_print_value (struct value *val, void *data_voidp); +/* Command element for the 'compile' command. */ +extern cmd_list_element *compile_cmd_element; + #endif /* GDB_COMPILE_H */ diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c index 95b36fe..9384e84 100644 --- a/gdb/guile/guile.c +++ b/gdb/guile/guile.c @@ -700,6 +700,9 @@ gdbscm_set_backtrace (int enable) #endif /* HAVE_GUILE */ +/* See guile.h. */ +cmd_list_element *guile_cmd_element = nullptr; + /* Install the various gdb commands used by Guile. */ static void @@ -725,7 +728,7 @@ This command is only a placeholder.") /* Since "help guile" is easy to type, and intuitive, we add general help in using GDB+Guile to this command. */ - add_com ("guile", class_obscure, guile_command, + guile_cmd_element = add_com ("guile", class_obscure, guile_command, #ifdef HAVE_GUILE _("\ Evaluate one or more Guile expressions.\n\ diff --git a/gdb/guile/guile.h b/gdb/guile/guile.h index aaa0058..2faa23d 100644 --- a/gdb/guile/guile.h +++ b/gdb/guile/guile.h @@ -25,4 +25,7 @@ /* This is all that guile exports to gdb. */ extern const struct extension_language_defn extension_language_guile; +/* Command element for the 'guile' command. */ +extern cmd_list_element *guile_cmd_element; + #endif /* GDB_GUILE_H */ diff --git a/gdb/python/python.c b/gdb/python/python.c index 1a0562a..c16305b 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1745,6 +1745,9 @@ do_start_initialization () #endif /* HAVE_PYTHON */ +/* See python.h. */ +cmd_list_element *python_cmd_element = nullptr; + void _initialize_python (void) { @@ -1774,7 +1777,7 @@ This command is only a placeholder.") ); add_com_alias ("pi", "python-interactive", class_obscure, 1); - add_com ("python", class_obscure, python_command, + python_cmd_element = add_com ("python", class_obscure, python_command, #ifdef HAVE_PYTHON _("\ Evaluate a Python command.\n\ diff --git a/gdb/python/python.h b/gdb/python/python.h index de58fd8..4b36f83 100644 --- a/gdb/python/python.h +++ b/gdb/python/python.h @@ -25,4 +25,7 @@ /* This is all that python exports to gdb. */ extern const struct extension_language_defn extension_language_python; +/* Command element for the 'python' command. */ +extern cmd_list_element *python_cmd_element; + #endif /* GDB_PYTHON_H */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 02aeb04..ad74bfd 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-09-17 Simon Marchi <simon.marchi@polymtl.ca> + + PR python/23669 + * gdb.python/python.exp: Test gdb.execute("show commands"). + 2018-09-16 Tom Tromey <tom@tromey.com> * gdb.base/new-ui.exp (do_execution_tests): Update. diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp index 1d7ea5b..a37113c 100644 --- a/gdb/testsuite/gdb.python/python.exp +++ b/gdb/testsuite/gdb.python/python.exp @@ -497,3 +497,7 @@ gdb_test "python print(gdb.convenience_variable('cvar3'))" "None" \ "print reset convenience variable from python" gdb_test "print \$cvar3" "= void" \ "print reset convenience variable from CLI" + +# Test PR 23669, the following would invoke the "commands" command instead of +# "show commands". +gdb_test "python gdb.execute(\"show commands\")" "$decimal print \\\$cvar3.*" diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index bb5a850..6d964c1 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -3977,6 +3977,9 @@ static const struct internalvar_funcs sdata_funcs = NULL }; +/* See tracepoint.h. */ +cmd_list_element *while_stepping_cmd_element = nullptr; + /* module initialization */ void _initialize_tracepoint (void) @@ -4088,7 +4091,8 @@ Entering \"end\" on a line by itself is the normal way to terminate\n\ such a list.\n\n\ Note: the \"end\" command cannot be used at the gdb prompt.")); - add_com ("while-stepping", class_trace, while_stepping_pseudocommand, _("\ + while_stepping_cmd_element = add_com ("while-stepping", class_trace, + while_stepping_pseudocommand, _("\ Specify single-stepping behavior at a tracepoint.\n\ Argument is number of instructions to trace in single-step mode\n\ following the tracepoint. This command is normally followed by\n\ diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h index c185672..b43fbd7 100644 --- a/gdb/tracepoint.h +++ b/gdb/tracepoint.h @@ -436,4 +436,7 @@ extern struct traceframe_info *get_traceframe_info (void); extern struct bp_location *get_traceframe_location (int *stepping_frame_p); +/* Command element for the 'while-stepping' command. */ +extern cmd_list_element *while_stepping_cmd_element; + #endif /* TRACEPOINT_H */ |