This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] async changes; Was: Re: regarding transparent data ranges (in tracepoint support)
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: Mark Newman <markn_46 at yahoo dot com>
- Cc: gdb-patches at sources dot redhat dot com, mark dot newman at lmco dot com,ankit_plug at yahoo dot com,
- Date: Thu, 4 Dec 2003 13:59:33 -0500
- Subject: [RFA] async changes; Was: Re: regarding transparent data ranges (in tracepoint support)
- References: <20031129013434.GA13711@nevyn.them.org><20031129020725.27486.qmail@web13804.mail.yahoo.com>
Mark Newman writes:
> I looked at gdb/CONTRIBUTE. I hope that this meets
> the requirements:
>
It is usually a good idea to change the subject to something relevant
to the patch. Here you are not dealing with tracepoints at all.
[redirected to gdb-patches only, specified subject]
> Change Log:
>
> 2003-11-28 Mark Newman <markn_46@yahoo.com>
>
> * provide a better method for filtering of asyn
> commands
>
In the Changelog you need an entry for each file, and for each file an
entry for each function you have touched.
see below for more comments.
>
>
>
> ===================================================================
> RCS file: /cvs/src/src/gdb/infrun.c,v
> retrieving revision 1.122
> diff -c -p -r1.122 infrun.c
> *** gdb/infrun.c 25 Nov 2003 16:01:36 -0000 1.122
> --- gdb/infrun.c 29 Nov 2003 02:00:15 -0000
> ***************
> *** 44,49 ****
> --- 44,51 ----
> #include "value.h"
> #include "observer.h"
> #include "language.h"
> + #include "cli/cli-decode.h"
> +
>
> /* Prototypes for local functions */
>
> *************** Pass and Stop may be combined.",
> NULL));
> *** 4005,4010 ****
> --- 4007,4014 ----
> add_cmd ("stop", class_obscure,
> not_just_help_class_command, "There is no `stop'
> command, but you can set a hook on `stop'.\n\
> This allows you to set a list of commands to be run
> each time execution\n\
> of the program stops.", &cmdlist);
> + async_cmd(stop_command , ASYNC_OK);
> +
>
> numsigs = (int) TARGET_SIGNAL_LAST;
> signal_stop = (unsigned char *) xmalloc (sizeof
> (signal_stop[0]) * numsigs);
> Index: gdb/maint.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/maint.c,v
> retrieving revision 1.40
> diff -c -p -r1.40 maint.c
> *** gdb/maint.c 21 Sep 2003 01:26:45 -0000 1.40
> --- gdb/maint.c 29 Nov 2003 02:00:15 -0000
> *************** Configure variables internal to GDB
> that
> *** 734,745 ****
> 0/*allow-unknown*/,
> &maintenancelist);
>
> ! add_prefix_cmd ("show", class_maintenance,
> maintenance_show_cmd, "\
> Show GDB internal variables used by the GDB
> maintainer.\n\
> Configure variables internal to GDB that aid in
> GDB's maintenance",
> &maintenance_show_cmdlist, "maintenance show ",
> 0/*allow-unknown*/,
> ! &maintenancelist);
>
> #ifndef _WIN32
> add_cmd ("dump-me", class_maintenance,
> maintenance_dump_me,
> --- 734,746 ----
> 0/*allow-unknown*/,
> &maintenancelist);
>
> ! async_cmd ( add_prefix_cmd ("show",
> class_maintenance, maintenance_show_cmd, "\
> Show GDB internal variables used by the GDB
> maintainer.\n\
> Configure variables internal to GDB that aid in
> GDB's maintenance",
> &maintenance_show_cmdlist, "maintenance show ",
> 0/*allow-unknown*/,
> ! &maintenancelist)
> ! , ASYNC_OK);
>
Instead of nesting calls like that, could you declare a variable 'c'
to be used to store the return value of add_prefix_cmd and then call
async_cmd with that parameter?
> #ifndef _WIN32
> add_cmd ("dump-me", class_maintenance,
> maintenance_dump_me,
> Index: gdb/top.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/top.c,v
> retrieving revision 1.85
> diff -c -p -r1.85 top.c
> *** gdb/top.c 8 Nov 2003 00:13:03 -0000 1.85
> --- gdb/top.c 29 Nov 2003 02:00:19 -0000
> *************** execute_command (char *p, int
> from_tty)
> *** 668,679 ****
>
> /* If the target is running, we allow only a
> limited set of
> commands. */
> ! if (event_loop_p && target_can_async_p () &&
> target_executing)
> ! if (strcmp (c->name, "help") != 0
> ! && strcmp (c->name, "pwd") != 0
> ! && strcmp (c->name, "show") != 0
> ! && strcmp (c->name, "stop") != 0)
> ! error ("Cannot execute this command while the
> target is running.");
>
> /* Pass null arg rather than an empty one. */
> arg = *p ? p : 0;
> --- 668,676 ----
>
> /* If the target is running, we allow only a
> limited set of
> commands. */
> ! if (event_loop_p && target_can_async_p () &&
> target_executing)
> ! if ((c->flags & ASYNC_OK) != 0)
> ! error ("Cannot execute this command while
> the target is running.");
>
> /* Pass null arg rather than an empty one. */
> arg = *p ? p : 0;
> *************** execute_command (char *p, int
> from_tty)
> *** 747,752 ****
> --- 744,757 ----
> warned = 1;
> }
> }
> +
> + if (event_loop_p && target_can_async_p () &&
> target_executing) {
> + if ((c->flags & ASYNC_WAIT) != 0) {
> + wait_for_inferior();
> + }
> + }
> +
I don't get this. You never set ASYNC_WAIT. What are you trying to do?
> +
> }
>
> /* Read commands from `instream' and execute them
> Index: gdb/cli/cli-cmds.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/cli/cli-cmds.c,v
> retrieving revision 1.36
> diff -c -p -r1.36 cli-cmds.c
> *** gdb/cli/cli-cmds.c 8 Nov 2003 00:13:03 -0000 1.36
> --- gdb/cli/cli-cmds.c 29 Nov 2003 02:00:20 -0000
> *************** The commands below can be used to
> select
> *** 1056,1063 ****
>
> /* Define general commands. */
>
> ! add_com ("pwd", class_files, pwd_command,
> ! "Print working directory. This is used for your
> program as well.");
> c = add_cmd ("cd", class_files, cd_command,
> "Set working directory to DIR for debugger
> and program being debugged.\n\
> The change does not take effect for the program
> being debugged\n\
> --- 1056,1064 ----
>
> /* Define general commands. */
>
> ! async_cmd(add_com ("pwd", class_files,
> pwd_command,
> ! "Print working directory. This is used for your
> program as well.")
> ! , ASYNC_OK);
Same here. Use a variable.
> c = add_cmd ("cd", class_files, cd_command,
> "Set working directory to DIR for debugger
> and program being debugged.\n\
> The change does not take effect for the program
> being debugged\n\
> *************** when gdb is started.", &cmdlist);
> *** 1091,1096 ****
> --- 1092,1099 ----
>
> add_com ("quit", class_support, quit_command,
> "Exit gdb.");
> c = add_com ("help", class_support, help_command,
> "Print list of commands.");
> + async_cmd(c, ASYNC_OK);
> +
> set_cmd_completer (c, command_completer);
> add_com_alias ("q", "quit", class_support, 1);
> add_com_alias ("h", "help", class_support, 1);
> Index: gdb/cli/cli-decode.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/cli/cli-decode.c,v
> retrieving revision 1.34
> diff -c -p -r1.34 cli-decode.c
> *** gdb/cli/cli-decode.c 8 Nov 2003 00:13:03 -0000
> 1.34
> --- gdb/cli/cli-decode.c 29 Nov 2003 02:00:21 -0000
> *************** cmd_func (struct cmd_list_element
> *cmd,
> *** 1539,1542 ****
> --- 1539,1551 ----
> error ("Invalid command");
> }
>
> + struct cmd_list_element *
> + async_cmd (struct cmd_list_element *cmd, int f)
> + {
> +
> + cmd->flags |= f;
> +
> + return cmd;
> + }
> +
>
> Index: gdb/cli/cli-decode.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/cli/cli-decode.h,v
> retrieving revision 1.17
> diff -c -p -r1.17 cli-decode.h
> *** gdb/cli/cli-decode.h 14 Jan 2003 00:49:05 -0000
> 1.17
> --- gdb/cli/cli-decode.h 29 Nov 2003 02:00:22 -0000
> *************** cmd_types;
> *** 49,54 ****
> --- 49,57 ----
> #define CMD_DEPRECATED 0x1
> #define DEPRECATED_WARN_USER 0x2
> #define MALLOCED_REPLACEMENT 0x4
> + #define ASYNC_OK 0x08
> + #define ASYNC_WAIT 0x10
> +
>
You need to add comments to the structure below that, see where the
other comments about flags are. What is ASYNC_WAIT for? It's never set.
> struct cmd_list_element
> {
>