Author: mib Date: Mon Apr 1 12:08:47 2019 New Revision: 357420 URL: http://llvm.org/viewvc/llvm-project?rev=357420&view=rev Log: [Process] Fix WriteMemory return value
Summary: In case of a breakpoint site overlapping with the destination address, the WriteMemory method reported an incorrect memory size. Instead of returning the right amount of bytes written, it falls through the scope and returned 0. Signed-off-by: Med Ismail Bennani <medismail.benn...@gmail.com> Reviewers: jasonmolenda, friss, jingham Subscribers: JDevlieghere, davide, lldb-commits, #lldb Tags: #lldb Differential Revision: https://reviews.llvm.org/D60022 Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestWriteMemory.py Modified: lldb/trunk/source/Target/Process.cpp Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestWriteMemory.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestWriteMemory.py?rev=357420&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestWriteMemory.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestWriteMemory.py Mon Apr 1 12:08:47 2019 @@ -0,0 +1,29 @@ +from __future__ import print_function +import lldb +from lldbsuite.test.lldbtest import * +from lldbsuite.test.decorators import * +from gdbclientutils import * + + +class TestWriteMemory(GDBRemoteTestBase): + + def test(self): + + class MyResponder(MockGDBServerResponder): + def setBreakpoint(self, packet): + return "OK" + + self.server.responder = MyResponder() + target = self.dbg.CreateTarget('') + process = self.connect(target) + + bp = target.BreakpointCreateByAddress(0x1000) + self.assertTrue(bp.IsValid()) + self.assertEqual(bp.GetNumLocations(), 1) + bp.SetEnabled(True) + self.assertTrue(bp.IsEnabled()) + + err = lldb.SBError() + data = str("\x01\x02\x03\x04") + result = process.WriteMemory(0x1000, data, err) + self.assertEqual(result, 4) Modified: lldb/trunk/source/Target/Process.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=357420&r1=357419&r2=357420&view=diff ============================================================================== --- lldb/trunk/source/Target/Process.cpp (original) +++ lldb/trunk/source/Target/Process.cpp Mon Apr 1 12:08:47 2019 @@ -2261,8 +2261,9 @@ size_t Process::WriteMemory(addr_t addr, }); if (bytes_written < size) - WriteMemoryPrivate(addr + bytes_written, ubuf + bytes_written, - size - bytes_written, error); + return bytes_written + WriteMemoryPrivate(addr + bytes_written, + ubuf + bytes_written, + size - bytes_written, error); } } else { return WriteMemoryPrivate(addr, buf, size, error); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits