Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Robert Picco <Robert.Picco@hp.com>
To: gdb-patches@sources.redhat.com
Subject: new gdb remote packet type
Date: Fri, 16 Apr 2004 00:45:00 -0000	[thread overview]
Message-ID: <407F2BAB.4060408@hp.com> (raw)

Hi:

I encountered an issue when  attempting to get the kernel debugger (kgdb) running for IA64 on Linux.  
The debugger works fine over ethernet but won't work over a serial line 
because of the size of the g-packet (>10K bytes).  Most registers in the 
g-packet aren't required for kernel debugging.  The patch below
has introduced a new gdb packet which asks the target (kgdb) for the 
register offsets in the g-packet.  In my kernel kgdb stub  all stacked 
registers, nearly all floating point (kernel uses small subset of 
floating point), all predicate registers, all nat registers and most of 
the application registers are excluded.  The patch won't break any 
existing targets of gdb because the new packet won't be recognized.  No other 
architectures (at least those I'm aware of) suffer from such a huge 
g-packet. 

Do you think a solution like this is possible for inclusion into gdb?

thanks,

Bob


--- gdb-6.0-orig/gdb/remote.c	2003-06-30 11:51:49.000000000 -0400
+++ gdb-6.0/gdb/remote.c	2004-04-13 11:46:38.000000000 -0400
@@ -2131,6 +2131,44 @@
   return 1;
 }
 
+static int register_init;
+
+static void
+remote_register_size(void)
+{
+  struct remote_state *rs = get_remote_state ();
+  char *buf = alloca (rs->remote_packet_size);
+  int regnum, offset, size;
+
+  
+  register_init = 1;
+
+  for (size = 0, regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
+    {
+        struct packet_reg *r = &rs->regs[regnum];
+	buf[0] = 'r';
+	bin2hex ((char *) &regnum, &buf[1], sizeof(regnum));
+  	putpkt(buf);
+	getpkt (buf, (rs->remote_packet_size), 0);
+	if (buf[0] != 'r') {
+		if (regnum)
+			fprintf_unfiltered (gdb_stdlog, 
+				"Received some valid register packets and later failed\n");
+		return;
+	}
+        hex2bin(&buf[1], (char *)&offset, sizeof(offset));
+	r->offset = offset;
+	if (offset != -1) {
+		r->in_g_packet = 1;
+		size += register_size (current_gdbarch, regnum);
+	}
+	else
+		r->in_g_packet = 0;
+
+    }
+    rs->sizeof_g_packet = size;
+}
+
 static int
 remote_start_remote (struct ui_out *uiout, void *dummy)
 {
@@ -2139,9 +2177,13 @@
   /* Ack any packet which the remote side has already sent.  */
   serial_write (remote_desc, "+", 1);
 
+
   /* Let the stub know that we want it to return the thread.  */
   set_thread (-1, 0);
 
+  if (!register_init)
+	remote_register_size();
+
   inferior_ptid = remote_current_thread (inferior_ptid);
 
   get_offsets ();		/* Get text, data & bss offsets */
@@ -3438,8 +3480,8 @@
       gdb_assert (reg != NULL);
       if (!reg->in_g_packet)
 	internal_error (__FILE__, __LINE__,
-			"Attempt to fetch a non G-packet register when this "
-			"remote.c does not support the p-packet.");
+			"Attempt to fetch a non G-packet register (%d) when this "
+			"remote.c does not support the p-packet.", regnum);
     }
 
   sprintf (buf, "g");



             reply	other threads:[~2004-04-16  0:45 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-16  0:45 Robert Picco [this message]
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
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=407F2BAB.4060408@hp.com \
    --to=robert.picco@hp.com \
    --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