From: Robert Picco <Robert.Picco@hp.com>
To: Andrew Cagney <cagney@gnu.org>
Cc: gdb-patches@sources.redhat.com
Subject: Re: new gdb remote packet type
Date: Mon, 02 Aug 2004 15:51:00 -0000 [thread overview]
Message-ID: <410E623C.3020107@hp.com> (raw)
In-Reply-To: <40A26AF4.4050001@gnu.org>
Andrew Cagney wrote:
>
> To get this in, there's some additional leg work:
>
> - copyright assignment?
>
> - documentation (see gdb/doc/gdb.texinfo near the end)
>
> - a corresponding gdbserver patch
>
> - not to forget, ChangeLogs :-)
>
> Andrew
>
>
Hi Andrew,
FSF has a copyright assignment on file for me. The other items you
mentioned are contained in the patch below with the exception of
gdbserver patch. There wasn't any feedback on 'P' packet support not
being in gdbserver. So I'm assuming that not adding 'p' packet support
is o.k.
thanks,
Bob
diff -ruN gdb-6.1.1-orig/gdb/ChangeLog gdb-6.1.1/gdb/ChangeLog
--- gdb-6.1.1-orig/gdb/ChangeLog 2004-06-14 18:39:49.000000000 -0400
+++ gdb-6.1.1/gdb/ChangeLog 2004-08-02 10:33:03.993382712 -0400
@@ -1,3 +1,9 @@
+2004-06-28 Robert Picco <Robert.Picco@hp.com>
+ * Add new 'p' packet to gdb/remote.c. The 'p' is for fetching
+ the value of a single register. It complements the 'P' which
+ writes a single register. Should the remote gdbserver support
+ the 'p', then 'g' packets aren't used.
+
2004-06-14 GDB Administrator <gdbadmin@sourceware.org>
GDB 6.1.1 released.
diff -ruN gdb-6.1.1-orig/gdb/doc/gdb.texinfo gdb-6.1.1/gdb/doc/gdb.texinfo
--- gdb-6.1.1-orig/gdb/doc/gdb.texinfo 2004-06-14 18:25:29.000000000 -0400
+++ gdb-6.1.1/gdb/doc/gdb.texinfo 2004-08-02 10:33:28.011731368 -0400
@@ -19896,19 +19896,18 @@
@item @code{O} --- reserved
-Reserved for future use.
-
-@item @code{p}@var{n@dots{}} --- read reg @strong{(reserved)}
+@item @code{p}@var{hex value of register} --- read register packet
@cindex @code{p} packet
-@xref{write register packet}.
-
Reply:
@table @samp
@item @var{r@dots{}.}
-The hex encoded value of the register in target byte order.
+Two hex values for each byte of register content in target byte order.
+@item E@var{NN}
+for an error
@end table
+
@item @code{P}@var{n@dots{}}@code{=}@var{r@dots{}} --- write register
@anchor{write register packet}
@cindex @code{P} packet
diff -ruN gdb-6.1.1-orig/gdb/remote.c gdb-6.1.1/gdb/remote.c
--- gdb-6.1.1-orig/gdb/remote.c 2004-02-25 15:41:00.000000000 -0500
+++ gdb-6.1.1/gdb/remote.c 2004-08-02 10:32:48.960668032 -0400
@@ -809,6 +809,23 @@
show_packet_config_cmd (&remote_protocol_E);
}
+static struct packet_config remote_protocol_p;
+
+static void
+set_remote_protocol_p_packet_cmd (char *args, int from_tty,
+ struct cmd_list_element *c)
+{
+ update_packet_config (&remote_protocol_p);
+}
+
+static void
+show_remote_protocol_p_packet_cmd (char *args, int from_tty,
+ struct cmd_list_element *c)
+{
+ show_packet_config_cmd (&remote_protocol_p);
+}
+
+
/* Should we try the 'P' (set register) request? */
@@ -2080,6 +2097,7 @@
update_packet_config (&remote_protocol_e);
update_packet_config (&remote_protocol_E);
update_packet_config (&remote_protocol_P);
+ update_packet_config (&remote_protocol_p);
update_packet_config (&remote_protocol_qSymbol);
update_packet_config (&remote_protocol_vcont);
for (i = 0; i < NR_Z_PACKET_TYPES; i++)
@@ -3240,6 +3258,36 @@
/* Read the remote registers into the block REGS. */
/* Currently we just read all the registers, so we don't use regnum. */
+static int
+fetch_register_using_p (int regnum)
+{
+ struct remote_state *rs = get_remote_state ();
+ char *buf = alloca (rs->remote_packet_size), *p;
+ char regp[MAX_REGISTER_SIZE];
+ int i;
+
+ buf[0] = 'p';
+ bin2hex((char *) ®num, &buf[1], sizeof(regnum));
+ buf[9] = 0;
+ remote_send (buf, rs->remote_packet_size);
+ if (buf[0] != 0 && buf[0] != 'E') {
+ p = buf;
+ i = 0;
+ while (p[0] != 0) {
+ if (p[1] == 0) {
+ error("fetch_register_using_p: early buf termination");
+ return 0;
+ }
+ regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
+ p += 2;
+ }
+ regcache_raw_supply (current_regcache, regnum, regp);
+ return 1;
+ }
+
+ return 0;
+}
+
static void
remote_fetch_registers (int regnum)
{
@@ -3260,6 +3308,31 @@
"Attempt to fetch a non G-packet register when this "
"remote.c does not support the p-packet.");
}
+ switch (remote_protocol_p.support)
+ {
+ case PACKET_DISABLE:
+ break;
+ case PACKET_ENABLE:
+ if (fetch_register_using_p (regnum))
+ return;
+ else
+ error ("Protocol error: p packet not recognized by stub");
+ case PACKET_SUPPORT_UNKNOWN:
+ if (fetch_register_using_p (regnum))
+ {
+ /* The stub recognized the 'p' packet. Remember this. */
+ remote_protocol_p.support = PACKET_ENABLE;
+ return;
+ }
+ else
+ {
+ /* The stub does not support the 'P' packet. Use 'G'
+ instead, and don't try using 'P' in the future (it
+ will just waste our time). */
+ remote_protocol_p.support = PACKET_DISABLE;
+ break;
+ }
+ }
sprintf (buf, "g");
remote_send (buf, (rs->remote_packet_size));
@@ -5419,6 +5492,7 @@
show_remote_protocol_e_packet_cmd (args, from_tty, NULL);
show_remote_protocol_E_packet_cmd (args, from_tty, NULL);
show_remote_protocol_P_packet_cmd (args, from_tty, NULL);
+ show_remote_protocol_p_packet_cmd (args, from_tty, NULL);
show_remote_protocol_qSymbol_packet_cmd (args, from_tty, NULL);
show_remote_protocol_vcont_packet_cmd (args, from_tty, NULL);
show_remote_protocol_binary_download_cmd (args, from_tty, NULL);
@@ -5631,6 +5705,13 @@
&remote_set_cmdlist, &remote_show_cmdlist,
1);
+ add_packet_config_cmd (&remote_protocol_p,
+ "p", "fetch-register",
+ set_remote_protocol_p_packet_cmd,
+ show_remote_protocol_p_packet_cmd,
+ &remote_set_cmdlist, &remote_show_cmdlist,
+ 1);
+
add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_SOFTWARE_BP],
"Z0", "software-breakpoint",
set_remote_protocol_Z_software_bp_packet_cmd,
next prev parent reply other threads:[~2004-08-02 15:51 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-16 0:45 Robert Picco
2004-04-16 18:33 ` Andrew Cagney
2004-04-22 15:45 ` Robert Picco
2004-04-22 16:09 ` Andrew Cagney
2004-04-29 15:31 ` Robert Picco
2004-04-30 17:31 ` Andrew Cagney
2004-05-04 17:56 ` Robert Picco
2004-05-05 19:10 ` Andrew Cagney
2004-05-06 19:41 ` Robert Picco
2004-05-11 17:31 ` Robert Picco
2004-05-12 18:20 ` Andrew Cagney
2004-05-12 18:31 ` Daniel Jacobowitz
2004-05-12 18:59 ` Robert Picco
2004-05-12 20:55 ` Daniel Jacobowitz
2004-05-12 22:16 ` Robert Picco
[not found] ` <40A279AF.30603@gnu.org>
2004-05-12 20:53 ` Daniel Jacobowitz
2004-08-02 15:51 ` Robert Picco [this message]
2004-09-24 20:07 ` Andrew Cagney
2004-09-25 16:33 ` Eli Zaretskii
2004-09-27 19:21 ` Andrew Cagney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=410E623C.3020107@hp.com \
--to=robert.picco@hp.com \
--cc=cagney@gnu.org \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox