[haiku-commits] r39843 - in haiku/trunk: headers/private/debug src/kits/debug

  • From: anevilyak@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 14 Dec 2010 00:27:59 +0100 (CET)

Author: anevilyak
Date: 2010-12-14 00:27:59 +0100 (Tue, 14 Dec 2010)
New Revision: 39843
Changeset: http://dev.haiku-os.org/changeset/39843

Modified:
   haiku/trunk/headers/private/debug/debug_support.h
   haiku/trunk/src/kits/debug/debug_support.cpp
Log:
Add write counterparts to debug_read_memory/debug_read_memory_partial.



Modified: haiku/trunk/headers/private/debug/debug_support.h
===================================================================
--- haiku/trunk/headers/private/debug/debug_support.h   2010-12-13 22:26:37 UTC 
(rev 39842)
+++ haiku/trunk/headers/private/debug/debug_support.h   2010-12-13 23:27:59 UTC 
(rev 39843)
@@ -33,6 +33,10 @@
                        void *buffer, size_t size);
 ssize_t debug_read_string(debug_context *context, const void *_address,
                        char *buffer, size_t size);
+ssize_t debug_write_memory_partial(debug_context *context, const void *address,
+                       void *buffer, size_t size);
+ssize_t debug_write_memory(debug_context *context, const void *address,
+                       void *buffer, size_t size);
 
 status_t debug_get_cpu_state(debug_context *context, thread_id thread,
                        debug_debugger_message *messageCode, debug_cpu_state 
*cpuState);

Modified: haiku/trunk/src/kits/debug/debug_support.cpp
===================================================================
--- haiku/trunk/src/kits/debug/debug_support.cpp        2010-12-13 22:26:37 UTC 
(rev 39842)
+++ haiku/trunk/src/kits/debug/debug_support.cpp        2010-12-13 23:27:59 UTC 
(rev 39843)
@@ -1,5 +1,6 @@
 /*
  * Copyright 2005-2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
+ * Copyright 2010, Rene Gollent, rene@xxxxxxxxxxxx
  * Distributed under the terms of the MIT License.
  */
 
@@ -216,6 +217,71 @@
        return sumRead;
 }
 
+// debug_write_memory_partial
+ssize_t
+debug_write_memory_partial(debug_context *context, const void *address,
+       void *buffer, size_t size)
+{
+       if (!context)
+               return B_BAD_VALUE;
+
+       if (size == 0)
+               return 0;
+       if (size > B_MAX_READ_WRITE_MEMORY_SIZE)
+               size = B_MAX_READ_WRITE_MEMORY_SIZE;
+
+       // prepare the message
+       debug_nub_write_memory message;
+       message.reply_port = context->reply_port;
+       message.address = (void*)address;
+       message.size = size;
+
+       // send the message
+       debug_nub_write_memory_reply reply;
+       status_t error = send_debug_message(context, 
B_DEBUG_MESSAGE_WRITE_MEMORY,
+               &message, sizeof(message), &reply, sizeof(reply));
+
+       if (error != B_OK)
+               return error;
+       if (reply.error != B_OK)
+               return reply.error;
+
+       return reply.size;
+}
+
+// debug_write_memory
+ssize_t
+debug_write_memory(debug_context *context, const void *_address, void *_buffer,
+       size_t size)
+{
+       const char *address = (const char *)_address;
+       char *buffer = (char*)_buffer;
+
+       // check parameters
+       if (!context || !address || !buffer)
+               return B_BAD_VALUE;
+       if (size == 0)
+               return 0;
+
+       ssize_t sumWritten = 0;
+       while (size > 0) {
+               ssize_t bytesWritten = debug_write_memory_partial(context, 
address, buffer,
+                       size);
+               if (bytesWritten < 0) {
+                       if (sumWritten > 0)
+                               return sumWritten;
+                       return bytesWritten;
+               }
+
+               address += bytesWritten;
+               buffer += bytesWritten;
+               sumWritten += bytesWritten;
+               size -= bytesWritten;
+       }
+
+       return sumWritten;
+}
+
 // debug_get_cpu_state
 status_t
 debug_get_cpu_state(debug_context *context, thread_id thread,


Other related posts: