That first change looks ok. Feel free to submit a patch for the multiple 
<feature> request. Someone added this on linux a while back and was probably 
just working with their gdbserver that only sent a single packet. Shouldn't be 
too hard to fix.

Feel free to submit a patch via Phabricator:

http://llvm.org/docs/Phabricator.html


> On Dec 2, 2016, at 9:21 PM, jw4...@gmail.com via lldb-dev 
> <lldb-dev@lists.llvm.org> wrote:
> 
> Hi all,
> 
> I've been adding support for the qXfer:features:read:target.xml message for 
> our tools at $WORK and have run into a couple hiccups to puzzle over.
> First off, the request message as defined at 
> https://sourceware.org/gdb/onlinedocs/gdb/General-Query-Packets.html#qXfer%20target%20description%20read
>  
> <https://sourceware.org/gdb/onlinedocs/gdb/General-Query-Packets.html#qXfer%20target%20description%20read>
>  is in the form qXfer:features:read:annex:offset,size.  When talking to GDB 
> it works to respond with a 'l' or 'm' message smaller than size, then GDB 
> proceeds to request the next chunk, and so on until the debug server says 
> there is no more data.  I believe there is a bug in lldb's handling of this 
> message in that if the response is shorter than 'size' while also being 
> incomplete, lldb requests the next chunk with a giant offset.  This patch 
> fixes the behavior:
> 
> Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
> ===================================================================
> --- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp  
> (revision 288181)
> +++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp  
> (working copy)
> @@ -3342,7 +3342,7 @@
>      case ('m'):
>        if (str.length() > 1)
>          output << &str[1];
> -      offset += size;
> +      offset += str.length() - 1;
>        break;
> 
>      // unknown chunk
> 
> Secondly, it appears that lldb only processes a single <feature> element per 
> "file" when discovering the register descriptions, the workaround seems to be 
> to put each individual feature in an <xi:include> file or conglomerate 
> everything under a single feature in target.xml, but that has an unfortunate 
> side effect of not working right when talking to GDB.  This one I didn't dig 
> too far into that code but it looks like 
> ProcessGDBRemote::GetGDBServerRegisterInfo only extracts a single <feature> 
> node (the last one) from the target description.
> 
> In any case, these are both able to be worked around in my environment 
> without too much work but it would be nice to get at least that first item 
> fixed.
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to