Looks good.

On Feb 24, 2014, at 9:15 AM, Steve Pucci <[email protected]> wrote:

> I'm attaching a patch that fixes handling of gdbserver binary packets 
> received.  We were not properly handling the escape character 0x7d.  
> https://sourceware.org/gdb/onlinedocs/gdb/Overview.html#Overview says
> 
> The binary data representation uses 7d (ascii ‘}’) as an escape character. 
> Any escaped byte is transmitted as the escape character followed by the 
> original character XORed with 0x20. For example, the byte 0x7d would be 
> transmitted as the two bytes 0x7d 0x5d. The bytes 0x23 (ascii ‘#’), 0x24 
> (ascii ‘$’), and 0x7d (ascii ‘}’) must always be escaped. Responses sent by 
> the stub must also escape 0x2a (ascii ‘*’), so that it is not interpreted as 
> the start of a run-length encoded sequence (described next).
> 
> I've verified that this fixes a problem with the reading of the auxv table on 
> 64-bit Ubuntu 12.04 via the qXfer:auxv:read packet response; prior to this 
> fix, the fields of the auxv table were obviously wrong, and now they look 
> reasonable (though there is another problem which is preventing the correct 
> handling of the table).
> 
> Thanks,
>   Steve
> 
> diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp 
> b/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
> index 1ec75a4..72600d8 100644
> --- a/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
> +++ b/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
> @@ -497,6 +497,13 @@ GDBRemoteCommunication::CheckForPacket (const uint8_t 
> *src, size_t src_len, Stri
>                      for (int i = 0; i < repeat_count; ++i)
>                          packet_str.push_back(char_to_repeat);
>                  }
> +                else if (*c == 0x7d)
> +                {
> +                    // 0x7d is the escape character.  The next character is 
> to
> +                    // be XOR'd with 0x20.
> +                    char escapee = *++c ^ 0x20;
> +                    packet_str.push_back(escapee);
> +                }
>                  else
>                  {
>                      packet_str.push_back(*c);
> 
> <patch-escapeBinaryPackets.txt>_______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev


_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to