See also https://discourse.llvm.org/t/rfc-fixing-incompatibilties-of-the-x-packet-w-r-t-gdb/84288 and https://sourceware.org/pipermail/gdb/2025-January/051705.html
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
import lldb
|
|
from lldbsuite.support import seven
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.gdbclientutils import *
|
|
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
|
|
|
|
|
|
class TestReadMemory(GDBRemoteTestBase):
|
|
def test_x_with_prefix(self):
|
|
class MyResponder(MockGDBServerResponder):
|
|
def qSupported(self, client_features):
|
|
# binary-upload+ indicates we use the gdb style of x packets
|
|
return super().qSupported(client_features) + ";binary-upload+"
|
|
|
|
def x(self, addr, length):
|
|
return "bfoobar" if addr == 0x1000 else "E01"
|
|
|
|
self.server.responder = MyResponder()
|
|
target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64-pc-linux")
|
|
process = self.connect(target)
|
|
|
|
error = lldb.SBError()
|
|
self.assertEqual(b"foobar", process.ReadMemory(0x1000, 10, error))
|
|
|
|
def test_x_bare(self):
|
|
class MyResponder(MockGDBServerResponder):
|
|
def x(self, addr, length):
|
|
# The OK response indicates we use the old lldb style.
|
|
if addr == 0 and length == 0:
|
|
return "OK"
|
|
return "foobar" if addr == 0x1000 else "E01"
|
|
|
|
self.server.responder = MyResponder()
|
|
target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64-pc-linux")
|
|
process = self.connect(target)
|
|
|
|
error = lldb.SBError()
|
|
self.assertEqual(b"foobar", process.ReadMemory(0x1000, 10, error))
|
|
|
|
def test_m_fallback(self):
|
|
class MyResponder(MockGDBServerResponder):
|
|
def x(self, addr, length):
|
|
# If `x` is unsupported, we should fall back to `m`.
|
|
return ""
|
|
|
|
def readMemory(self, addr, length):
|
|
return seven.hexlify("foobar") if addr == 0x1000 else "E01"
|
|
|
|
self.server.responder = MyResponder()
|
|
target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64-pc-linux")
|
|
process = self.connect(target)
|
|
|
|
error = lldb.SBError()
|
|
self.assertEqual(b"foobar", process.ReadMemory(0x1000, 10, error))
|