Re: 'g' packet reply is too long error when target changes number of registers

Pedro Alves <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 02/03/2014 02:11 PM, [email protected] wrote:
> 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 sounds odd.  Why not?  Simply configure it before connecting
with GDB?  It sounds quite wrong to be changing the target behind
GDB's back when GDB is _already_ debugging it.  Not just the size
of the g/G packets may change inadvertently, but the layout as well.
If the target description changes with your re-configuration, it
sounds to me like GDB should fetch/recompute the whole target
description.  Today, I think that can only be done with a
disconnect/reconnect.

> 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.

  /* If this is smaller than we guessed the 'g' packet would be,
     update our records.  A 'g' reply that doesn't include a register's
     value implies either that the register is not available, or that
     the 'p' packet must be used.  */
  if (buf_len < 2 * rsa->sizeof_g_packet)
    {

If we don't shrink it, then we'd send too much when writing
registers, for example, I think?

-- 
Pedro Alves
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.