Author: martin
Date: 2007-10-31 10:56:32 -0500 (Wed, 31 Oct 2007)
New Revision: 88569

Modified:
   trunk/debugger/ChangeLog
   trunk/debugger/backend/Inferior.cs
Log:
2007-10-31  Martin Baulig  <[EMAIL PROTECTED]>

        Merged the Plophos branch.

        * backend/Inferior.cs
        (Inferior.ChildEvent): Added public readonly `CallbackData' field.
        (Inferior.CallMethod(long,long)): Take a `byte[]' and a `long'
        argument instead of two `long' arguments.
        (Inferior.ExecuteInstruction): New public method.
        (Inferior.ProcessEvent): mono_debugger_server_dispatch_event() may
        now pass us an additional byte[] argument.



Modified: trunk/debugger/ChangeLog
===================================================================
--- trunk/debugger/ChangeLog    2007-10-31 15:53:40 UTC (rev 88568)
+++ trunk/debugger/ChangeLog    2007-10-31 15:56:32 UTC (rev 88569)
@@ -2,6 +2,14 @@
 
        Merged the Plophos branch.
 
+       * backend/Inferior.cs
+       (Inferior.ChildEvent): Added public readonly `CallbackData' field.
+       (Inferior.CallMethod(long,long)): Take a `byte[]' and a `long'
+       argument instead of two `long' arguments.
+       (Inferior.ExecuteInstruction): New public method.
+       (Inferior.ProcessEvent): mono_debugger_server_dispatch_event() may
+       now pass us an additional byte[] argument.
+
        * backend/server/breakpoints.h
        (BreakpointInfo): Added `runtime_table_slot'.
 

Modified: trunk/debugger/backend/Inferior.cs
===================================================================
--- trunk/debugger/backend/Inferior.cs  2007-10-31 15:53:40 UTC (rev 88568)
+++ trunk/debugger/backend/Inferior.cs  2007-10-31 15:56:32 UTC (rev 88569)
@@ -105,7 +105,7 @@
                static extern TargetError mono_debugger_server_call_method_1 
(IntPtr handle, long method_address, long method_argument, long data_argument, 
string string_argument, long callback_argument);
 
                [DllImport("monodebuggerserver")]
-               static extern TargetError mono_debugger_server_call_method_2 
(IntPtr handle, long method_address, long method_argument, long 
callback_argument);
+               static extern TargetError mono_debugger_server_call_method_2 
(IntPtr handle, long method_address, int data_size, IntPtr data, long 
callback_argument);
 
                [DllImport("monodebuggerserver")]
                static extern TargetError mono_debugger_server_mark_rti_frame 
(IntPtr handle);
@@ -117,6 +117,9 @@
                static extern TargetError 
mono_debugger_server_call_method_invoke (IntPtr handle, long invoke_method, 
long method_address, int num_params, int blob_size, IntPtr param_data, IntPtr 
offset_data, IntPtr blob_data, long callback_argument, bool debug);
 
                [DllImport("monodebuggerserver")]
+               static extern TargetError 
mono_debugger_server_execute_instruction (IntPtr handle, IntPtr instruction, 
int orig_insn_size, int insn_size, bool push_retaddr);
+
+               [DllImport("monodebuggerserver")]
                static extern TargetError 
mono_debugger_server_insert_breakpoint (IntPtr handle, long address, out int 
breakpoint);
 
                [DllImport("monodebuggerserver")]
@@ -153,7 +156,7 @@
                static extern IntPtr mono_debugger_server_create_inferior 
(IntPtr breakpoint_manager);
 
                [DllImport("monodebuggerserver")]
-               static extern ChildEventType 
mono_debugger_server_dispatch_event (IntPtr handle, int status, out long arg, 
out long data1, out long data2);
+               static extern ChildEventType 
mono_debugger_server_dispatch_event (IntPtr handle, int status, out long arg, 
out long data1, out long data2, out int opt_data_size, out IntPtr opt_data);
 
                [DllImport("monodebuggerserver")]
                static extern TargetError mono_debugger_server_get_signal_info 
(IntPtr handle, out IntPtr data);
@@ -177,7 +180,7 @@
                static extern TargetError 
mono_debugger_server_get_callback_frame (IntPtr handle, long stack_pointer, 
bool exact_match, IntPtr registers);
 
                [DllImport("monodebuggerserver")]
-               static extern void mono_debugger_server_set_notification 
(IntPtr handle, long address);
+               static extern void mono_debugger_server_set_runtime_info 
(IntPtr handle, IntPtr mono_runtime_info);
 
                internal enum ChildEventType {
                        NONE = 0,
@@ -218,8 +221,9 @@
                        public readonly long Data1;
                        public readonly long Data2;
 
-                       public ChildEvent (ChildEventType type, long arg,
-                                          long data1, long data2)
+                       public readonly byte[] CallbackData;
+
+                       public ChildEvent (ChildEventType type, long arg, long 
data1, long data2)
                        {
                                this.Type = type;
                                this.Argument = arg;
@@ -227,6 +231,13 @@
                                this.Data2 = data2;
                        }
 
+                       public ChildEvent (ChildEventType type, long arg, long 
data1, long data2,
+                                          byte[] callback_data)
+                               : this (type, arg, data1, data2)
+                       {
+                               this.CallbackData = callback_data;
+                       }
+
                        public override string ToString ()
                        {
                                return String.Format ("ChildEvent 
({0}:{1}:{2:x}:{3:x})",
@@ -339,17 +350,30 @@
                        }
                }
 
-               public void CallMethod (TargetAddress method, long arg1, long 
callback_arg)
+               public void CallMethod (TargetAddress method, byte[] data, long 
callback_arg)
                {
                        check_disposed ();
 
                        TargetState old_state = change_target_state 
(TargetState.Running);
+
+                       IntPtr data_ptr = IntPtr.Zero;
+                       int data_size = data != null ? data.Length : 0;
+
                        try {
+                               if (data != null) {
+                                       data_ptr = Marshal.AllocHGlobal 
(data_size);
+                                       Marshal.Copy (data, 0, data_ptr, 
data_size);
+                               }
+
                                check_error (mono_debugger_server_call_method_2 
(
-                                       server_handle, method.Address, arg1, 
callback_arg));
+                                       server_handle, method.Address,
+                                       data_size, data_ptr, callback_arg));
                        } catch {
                                change_target_state (old_state);
                                throw;
+                       } finally {
+                               if (data_ptr != IntPtr.Zero)
+                                       Marshal.FreeHGlobal (data_ptr);
                        }
                }
 
@@ -421,6 +445,24 @@
                        }
                }
 
+               public void ExecuteInstruction (byte[] instruction, int 
orig_insn_size,
+                                               bool push_retaddr)
+               {
+                       check_disposed ();
+
+                       IntPtr data = IntPtr.Zero;
+                       try {
+                               data = Marshal.AllocHGlobal 
(instruction.Length);
+                               Marshal.Copy (instruction, 0, data, 
instruction.Length);
+
+                               check_error 
(mono_debugger_server_execute_instruction (
+                                       server_handle, data, orig_insn_size, 
instruction.Length,
+                                       push_retaddr));
+                       } finally {
+                               Marshal.FreeHGlobal (data);
+                       }
+               }
+
                public void MarkRuntimeInvokeFrame ()
                {
                        check_error (mono_debugger_server_mark_rti_frame 
(server_handle));
@@ -604,8 +646,12 @@
                        long arg, data1, data2;
                        ChildEventType message;
 
+                       int opt_data_size;
+                       IntPtr opt_data;
+
                        message = mono_debugger_server_dispatch_event (
-                               server_handle, status, out arg, out data1, out 
data2);
+                               server_handle, status, out arg, out data1, out 
data2,
+                               out opt_data_size, out opt_data);
 
                        switch (message) {
                        case ChildEventType.CHILD_EXITED:
@@ -626,6 +672,14 @@
                                break;
                        }
 
+                       if (opt_data_size > 0) {
+                               byte[] data = new byte [opt_data_size];
+                               Marshal.Copy (opt_data, data, 0, opt_data_size);
+                               g_free (opt_data);
+
+                               return new ChildEvent (message, arg, data1, 
data2, data);
+                       }
+
                        return new ChildEvent (message, arg, data1, data2);
                }
 
@@ -1279,9 +1333,9 @@
                        }
                }
 
-               internal void SetNotificationAddress (TargetAddress 
notification)
+               internal void SetRuntimeInfo (IntPtr mono_runtime_info)
                {
-                       mono_debugger_server_set_notification (server_handle, 
notification.Address);
+                       mono_debugger_server_set_runtime_info (server_handle, 
mono_runtime_info);
                }
 
                internal struct ServerStackFrame

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to