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