[Lldb-commits] [lldb] r357420 - [Process] Fix WriteMemory return value

Med Ismail Bennani via lldb-commits lldb-commits at lists.llvm.org
Mon Apr 1 12:08:47 PDT 2019


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.bennani at 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);




More information about the lldb-commits mailing list