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

Reply via email to