aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2025-01-24 16:12:55 +0000
committerAndrew Burgess <aburgess@redhat.com>2025-01-28 12:48:10 +0000
commit9b381fd11184d1932c0eaefd83ee4ea5c7c280f9 (patch)
tree26b38a818b57d50815d1450bd4b18118c2ecb864 /gold
parentb601c58034ed755fb765fc13782b6876bffd25d4 (diff)
downloadfsf-binutils-gdb-9b381fd11184d1932c0eaefd83ee4ea5c7c280f9.zip
fsf-binutils-gdb-9b381fd11184d1932c0eaefd83ee4ea5c7c280f9.tar.gz
fsf-binutils-gdb-9b381fd11184d1932c0eaefd83ee4ea5c7c280f9.tar.bz2
gdb/remote: add 'binary-upload' feature to guard 'x' packet use
This mailing list discussion: https://inbox.sourceware.org/gdb-patches/CAOp6jLYD0g-GUsx7jhO3g8H_4pHkB6dkh51cbyDT-5yMfQwu+A@mail.gmail.com highlighted the following issue with GDB's 'x' packet implementation. Unfortunately, LLDB also has an 'x' packet, but their implementation is different to GDB's and so targets that have implemented LLDB's 'x' packet are incompatible with GDB. The above thread is specifically about the 'rr' tool, but there could be other remote targets out there that have this problem. The difference between LLDB and GDB is that GDB expects a 'b' prefix on the reply data, while LLDB does not. The 'b' is important as it allows GDB to distinguish between an empty reply (which will be a 'b' prefix with no trailing data) and an unsupported packet (which will be a completely empty packet). It is not clear to me how LLDB distinguishes these two cases. See for discussion of the 'x' packet: https://inbox.sourceware.org/gdb-patches/cover.1710343840.git.tankut.baris.aktemur@intel.com/#r with the part specific to the 'b' marker in: https://inbox.sourceware.org/gdb-patches/87msq82ced.fsf@redhat.com/ I propose that we add a new feature 'binary-upload' which can be reported by a stub in its qSupported reply. By default this feature is "off", meaning GDB will not use the 'x' packet unless a stub advertises this feature. I have updated gdbserver to send 'binary-upload+', and when I examine the gdbserver log I can see this feature being sent back, and then GDB will use the 'x' packet. When connecting to an older gdbserver, the feature is not sent, and GDB does not try to use the 'x' packet at all. I also built the latest version of `rr` and tested using current HEAD of master, where I see problems like this: (rr) x/10i main 0x401106 <main>: Cannot access memory at address 0x401106 Then tested using this patched version of GDB, and now I see: (rr) x/10i main 0x401106 <main>: push %rbp 0x401107 <main+1>: mov %rsp,%rbp 0x40110a <main+4>: mov 0x2f17(%rip),%rax # 0x404028 <global_ptr> ... etc ... and looking in the remote log I see GDB is now using the 'm' packet instead of the 'x' packet. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32593 Reviewed-By: Eli Zaretskii <eliz@gnu.org> Reviewed-By: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Diffstat (limited to 'gold')
0 files changed, 0 insertions, 0 deletions