From: "alexandru.sardan@freescale.com" <alexandru.sardan@freescale.com>
To: "gdb@sourceware.org" <gdb@sourceware.org>
Cc: "catalin.udma@freescale.com" <catalin.udma@freescale.com>
Subject: 'g' packet reply is too long error when target changes number of registers
Date: Mon, 03 Feb 2014 14:12:00 -0000 [thread overview]
Message-ID: <5651102df70243a088e7688170617c31@DM2PR03MB368.namprd03.prod.outlook.com> (raw)
Hello,
I'm trying to debug an ARM Aarch64 target with gdb-cross and I get a
'g' packet reply is too long error in the following scenario:
* I debug my ARM target through a probe that has a gdbserver running on it
(gdbproxy).
* First I load a custom target description in gdb that reflects the current
hardware I am debugging
* I connect to the probe with "target remote probe_ip"
* Then I configure the probe to connect to the target (using the same target
description as the one loaded in GDB)
* When I ask for the register Info (info reg), I get the 'g' packet reply
error.
Because the probe had no knowledge of the target that will be debugged
beforehand, the "target remote" command will force the probe to reply with
info about a smaller number of registers (according to the default description)
than gdb expects.
This causes rsa->sizeof_g_packet to be reduced.
After configuration, the probe will send all the register information of the
target. This causes the 'g'packet reply error because now, more registers
are being sent.
Why is rsa->sizeof_g_packet shrunk when a smaller packet is received.
Shouldn't this reflect the size in accordance with the target description?
I've made a small patch to address this issue. Do you think it's a proper fix?
Kind regards,
Alex
Patch follows:
From 8cae18e62d544094b160878459624605c0491534 Mon Sep 17 00:00:00 2001
From: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
Date: Tue, 21 Jan 2014 17:45:20 +0200
Subject: [PATCH] Fix remote 'g' packet reply is too long error
Fix remote 'g' packet reply is too long error
when target architecture is modified.
As long as the target description is the same as
the hardware, this error will no longer appeear
Signed-off-by: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
---
gdb/remote.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/gdb/remote.c b/gdb/remote.c
index 7761e00..c29d88a 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -6103,7 +6103,7 @@ process_g_packet (struct regcache *regcache)
struct gdbarch *gdbarch = get_regcache_arch (regcache);
struct remote_state *rs = get_remote_state ();
struct remote_arch_state *rsa = get_remote_arch_state ();
- int i, buf_len;
+ int i, buf_len, reg_pack_sz;
char *p;
char *regs;
@@ -6125,31 +6125,33 @@ process_g_packet (struct regcache *regcache)
the 'p' packet must be used. */
if (buf_len < 2 * rsa->sizeof_g_packet)
{
- rsa->sizeof_g_packet = buf_len / 2;
+ reg_pack_sz = buf_len / 2;
for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
{
if (rsa->regs[i].pnum == -1)
continue;
- if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
+ if (rsa->regs[i].offset >= reg_pack_sz )
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}
+ else
+ reg_pack_sz = rsa->sizeof_g_packet;
- regs = alloca (rsa->sizeof_g_packet);
+ regs = alloca (reg_pack_sz);
/* Unimplemented registers read as all bits zero. */
- memset (regs, 0, rsa->sizeof_g_packet);
+ memset (regs, 0, reg_pack_sz);
/* Reply describes registers byte by byte, each byte encoded as two
hex characters. Suck them all up, then supply them to the
register cacheing/storage mechanism. */
p = rs->buf;
- for (i = 0; i < rsa->sizeof_g_packet; i++)
+ for (i = 0; i < reg_pack_sz; i++)
{
if (p[0] == 0 || p[1] == 0)
/* This shouldn't happen - we adjusted sizeof_g_packet above. */
--
1.7.9.5
next reply other threads:[~2014-02-03 14:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-03 14:12 alexandru.sardan [this message]
2014-02-04 18:44 ` Pedro Alves
2014-02-05 14:07 ` alexandru.sardan
2014-02-05 14:56 ` Pedro Alves
2014-02-05 15:14 ` alexandru.sardan
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=5651102df70243a088e7688170617c31@DM2PR03MB368.namprd03.prod.outlook.com \
--to=alexandru.sardan@freescale.com \
--cc=catalin.udma@freescale.com \
--cc=gdb@sourceware.org \
/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