diff options
author | Pavel Labath <labath@google.com> | 2015-10-14 12:59:37 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2015-10-14 12:59:37 +0000 |
commit | 3bf1125619ea97511626b7af56c97ed07863c67c (patch) | |
tree | a24e9d5b51a6b1abc3c79ac05f799d6fbc3383c4 /lldb/test/tools/lldb-server/TestGDBRemoteMemoryRead.py | |
parent | c888e190ba51783109182fcda6d670497730e7c1 (diff) | |
download | bcm5719-llvm-3bf1125619ea97511626b7af56c97ed07863c67c.tar.gz bcm5719-llvm-3bf1125619ea97511626b7af56c97ed07863c67c.zip |
lldb-server: add support for binary memory reads
Summary:
This commit adds support for binary memory reads ($x) to lldb-server. It also removes the "0x"
prefix from the $x client packet, to make it more compatible with the old $m packet. This allows
us to use almost the same code for handling both packet types. I have verified that debugserver
correctly handles $x packets even without the leading "0x". I have added a test which verifies
that the stub returns the same memory contents for both kinds of memory reads ($x and $m).
Reviewers: tberghammer, jasonmolenda
Subscribers: iancottrell, lldb-commits
Differential Revision: http://reviews.llvm.org/D13695
llvm-svn: 250295
Diffstat (limited to 'lldb/test/tools/lldb-server/TestGDBRemoteMemoryRead.py')
-rw-r--r-- | lldb/test/tools/lldb-server/TestGDBRemoteMemoryRead.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lldb/test/tools/lldb-server/TestGDBRemoteMemoryRead.py b/lldb/test/tools/lldb-server/TestGDBRemoteMemoryRead.py new file mode 100644 index 00000000000..33baaa559ab --- /dev/null +++ b/lldb/test/tools/lldb-server/TestGDBRemoteMemoryRead.py @@ -0,0 +1,45 @@ +""" +Tests the binary ($x) and hex ($m) memory read packets of the remote stub +""" + +import os +import unittest2 +import lldb +from lldbtest import * +import lldbutil +import binascii + + +class MemoryReadTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipUnlessPlatform(getDarwinOSTriples()+["linux"]) + def test_memory_read(self): + self.build() + exe = os.path.join (os.getcwd(), "a.out") + + target = self.dbg.CreateTarget(exe) + lldbutil.run_break_set_by_symbol(self, "main") + + process = target.LaunchSimple (None, None, self.get_process_working_directory()) + self.assertTrue(process, PROCESS_IS_VALID) + self.assertEqual(process.GetState(), lldb.eStateStopped, "Process is stopped") + + pc = process.GetSelectedThread().GetSelectedFrame().GetPC() + for size in [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]: + error = lldb.SBError() + memory = process.ReadMemory(pc, size, error) + self.assertTrue(error.Success()) + self.match("process plugin packet send x%x,%x" % (pc, size), ["response:", memory]) + self.match("process plugin packet send m%x,%x" % (pc, size), ["response:", binascii.hexlify(memory)]) + + process.Continue() + self.assertEqual(process.GetState(), lldb.eStateExited, "Process exited") + + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() |