Author: martin
Date: 2007-11-20 14:47:04 -0500 (Tue, 20 Nov 2007)
New Revision: 90020
Modified:
trunk/debugger/ChangeLog
trunk/debugger/backend/BreakpointHandle.cs
trunk/debugger/backend/Inferior.cs
trunk/debugger/backend/MonoThreadManager.cs
trunk/debugger/backend/SingleSteppingEngine.cs
trunk/debugger/backend/ThreadServant.cs
trunk/debugger/backend/arch/CoreFile.cs
trunk/debugger/backend/server/library.c
trunk/debugger/backend/server/server.h
trunk/debugger/backend/server/x86_64-arch.c
trunk/debugger/classes/Thread.cs
trunk/debugger/languages/TargetFunctionType.cs
trunk/debugger/languages/mono/MonoClassType.cs
trunk/debugger/languages/mono/MonoFunctionType.cs
trunk/debugger/languages/mono/MonoLanguageBackend.cs
trunk/debugger/languages/mono/MonoStringType.cs
trunk/debugger/languages/native/NativeFunctionType.cs
trunk/debugger/test/testsuite/TestDelegate.cs
Log:
2007-11-20 Martin Baulig <[EMAIL PROTECTED]>
* test/testsuite/TestDelegate.cs: Temporarily disable this.
* backend/SingleSteppingEngine.cs
(OperationExecuteInstruction): Make this a separate operation
since we need to resume the target after executing the instruction
if we're not single-stepping.
(OperationActivateBreakpoints): Use the new breakpoint code.
* languages/TargetFunctionType.cs
(TargetFunctionType.InsertBreakpoint): Take a
`FunctionBreakpointHandle' argument, not `MethodLoadedHandler'.
Modified: trunk/debugger/ChangeLog
===================================================================
--- trunk/debugger/ChangeLog 2007-11-20 19:34:24 UTC (rev 90019)
+++ trunk/debugger/ChangeLog 2007-11-20 19:47:04 UTC (rev 90020)
@@ -1,3 +1,17 @@
+2007-11-20 Martin Baulig <[EMAIL PROTECTED]>
+
+ * test/testsuite/TestDelegate.cs: Temporarily disable this.
+
+ * backend/SingleSteppingEngine.cs
+ (OperationExecuteInstruction): Make this a separate operation
+ since we need to resume the target after executing the instruction
+ if we're not single-stepping.
+ (OperationActivateBreakpoints): Use the new breakpoint code.
+
+ * languages/TargetFunctionType.cs
+ (TargetFunctionType.InsertBreakpoint): Take a
+ `FunctionBreakpointHandle' argument, not `MethodLoadedHandler'.
+
2007-11-19 Martin Baulig <[EMAIL PROTECTED]>
* frontend/Main.cs
Modified: trunk/debugger/backend/BreakpointHandle.cs
===================================================================
--- trunk/debugger/backend/BreakpointHandle.cs 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/BreakpointHandle.cs 2007-11-20 19:47:04 UTC (rev
90020)
@@ -121,7 +121,7 @@
if (has_load_handler)
return;
- has_load_handler = function.InsertBreakpoint (target,
MethodLoaded);
+ has_load_handler = function.InsertBreakpoint (target,
this);
}
internal void MethodLoaded (TargetMemoryAccess target, Method
method)
Modified: trunk/debugger/backend/Inferior.cs
===================================================================
--- trunk/debugger/backend/Inferior.cs 2007-11-20 19:34:24 UTC (rev 90019)
+++ trunk/debugger/backend/Inferior.cs 2007-11-20 19:47:04 UTC (rev 90020)
@@ -102,7 +102,7 @@
static extern TargetError mono_debugger_server_call_method
(IntPtr handle, long method_address, long method_argument1, long
method_argument2, long callback_argument);
[DllImport("monodebuggerserver")]
- 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);
+ static extern TargetError mono_debugger_server_call_method_1
(IntPtr handle, long method_address, long method_argument, long data_argument,
long data_argument2, string string_argument, long callback_argument);
[DllImport("monodebuggerserver")]
static extern TargetError mono_debugger_server_call_method_2
(IntPtr handle, long method_address, int data_size, IntPtr data, long
callback_argument);
@@ -334,16 +334,16 @@
}
}
- public void CallMethod (TargetAddress method, long arg1, long
arg2,
- string arg3, long callback_arg)
+ public void CallMethod (TargetAddress method, long arg1, long
arg2, long arg3,
+ string arg4, long callback_arg)
{
check_disposed ();
TargetState old_state = change_target_state
(TargetState.Running);
try {
check_error (mono_debugger_server_call_method_1
(
- server_handle, method.Address, arg1,
arg2,
- arg3, callback_arg));
+ server_handle, method.Address, arg1,
arg2, arg3,
+ arg4, callback_arg));
} catch {
change_target_state (old_state);
throw;
Modified: trunk/debugger/backend/MonoThreadManager.cs
===================================================================
--- trunk/debugger/backend/MonoThreadManager.cs 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/MonoThreadManager.cs 2007-11-20 19:47:04 UTC (rev
90020)
@@ -45,6 +45,7 @@
UnloadModule,
DomainCreate,
DomainUnload,
+ ClassInitialized,
Trampoline = 256
}
@@ -285,6 +286,9 @@
resume_target = false;
return false;
+ case NotificationType.ClassInitialized:
+ break;
+
default: {
TargetAddress data = new TargetAddress (
inferior.AddressDomain,
cevent.Data1);
@@ -317,12 +321,13 @@
internal class MonoDebuggerInfo
{
// These constants must match up with those in
mono/mono/metadata/mono-debug.h
- public const int MinDynamicVersion = 64;
- public const int MaxDynamicVersion = 64;
+ public const int MinDynamicVersion = 65;
+ public const int MaxDynamicVersion = 65;
public const long DynamicMagic = 0x7aff65af4253d427;
+ public readonly int MonoTrampolineNum;
+ public readonly TargetAddress MonoTrampolineCode;
public readonly TargetAddress NotificationAddress;
- public readonly TargetAddress MonoTrampolineCode;
public readonly TargetAddress SymbolTable;
public readonly int SymbolTableSize;
public readonly TargetAddress CompileMethod;
@@ -333,8 +338,11 @@
public readonly TargetAddress ClassGetStaticFieldData;
public readonly TargetAddress LookupClass;
public readonly TargetAddress RunFinally;
- public readonly TargetAddress InsertBreakpoint;
+ public readonly TargetAddress InsertMethodBreakpoint;
+ public readonly TargetAddress InsertSourceBreakpoint;
public readonly TargetAddress RemoveBreakpoint;
+ public readonly TargetAddress RegisterClassInitCallback;
+ public readonly TargetAddress RemoveClassInitCallback;
public readonly TargetAddress Attach;
public readonly TargetAddress Detach;
public readonly TargetAddress Initialize;
@@ -381,10 +389,9 @@
reader.Offset = 16;
SymbolTableSize = reader.ReadInteger ();
-
- reader.Offset = 24;
+ MonoTrampolineNum = reader.ReadInteger ();
+ MonoTrampolineCode = reader.ReadAddress ();
NotificationAddress = reader.ReadAddress ();
- MonoTrampolineCode = reader.ReadAddress ();
SymbolTable = reader.ReadAddress ();
TargetAddress metadata_info = reader.ReadAddress ();
CompileMethod = reader.ReadAddress ();
@@ -400,9 +407,14 @@
CreateString = reader.ReadAddress ();
LookupClass = reader.ReadAddress ();
- InsertBreakpoint = reader.ReadAddress ();
+
+ InsertMethodBreakpoint = reader.ReadAddress ();
+ InsertSourceBreakpoint = reader.ReadAddress ();
RemoveBreakpoint = reader.ReadAddress ();
+ RegisterClassInitCallback = reader.ReadAddress ();
+ RemoveClassInitCallback = reader.ReadAddress ();
+
DebuggerVersion = reader.ReadAddress ();
ThreadTable = reader.ReadAddress ();
Modified: trunk/debugger/backend/SingleSteppingEngine.cs
===================================================================
--- trunk/debugger/backend/SingleSteppingEngine.cs 2007-11-20 19:34:24 UTC
(rev 90019)
+++ trunk/debugger/backend/SingleSteppingEngine.cs 2007-11-20 19:47:04 UTC
(rev 90020)
@@ -941,7 +941,7 @@
return true;
}
- inferior.ExecuteInstruction (instruction.Code, true);
+ PushOperation (new OperationExecuteInstruction (this,
instruction));
return true;
}
@@ -1217,6 +1217,9 @@
void remove_temporary_breakpoint ()
{
+ Report.Debug (DebugFlags.SSE, "{0} remove temp
breakpoint {1}",
+ this, temp_breakpoint_id);
+
if (temp_breakpoint_id != 0) {
inferior.RemoveBreakpoint (temp_breakpoint_id);
temp_breakpoint_id = 0;
@@ -1590,10 +1593,10 @@
}
public override CommandResult CallMethod (TargetAddress method,
long arg1, long arg2,
- string
string_argument)
+ long arg3, string
string_argument)
{
return StartOperation (new OperationCallMethod (
- this, method, arg1, arg2, string_argument));
+ this, method, arg1, arg2, arg3,
string_argument));
}
public override CommandResult CallMethod (TargetAddress method,
long arg1, long arg2)
@@ -1698,7 +1701,7 @@
}
internal override void InsertBreakpoint (BreakpointHandle
handle,
- TargetAddress address,
int domain)
+ TargetAddress address,
int domain)
{
SendCommand (delegate {
process.BreakpointManager.InsertBreakpoint (
@@ -2174,21 +2177,24 @@
protected class OperationActivateBreakpoints : Operation
{
+ MonoLanguageBackend language;
+
public OperationActivateBreakpoints (SingleSteppingEngine sse,
Queue pending)
: base (sse, null)
{
this.pending_events = pending;
+ this.language = sse.process.MonoLanguage;
}
- public override bool IsSourceOperation {
- get { return true; }
- }
-
protected override void DoExecute ()
{
do_execute ();
}
+ public override bool IsSourceOperation {
+ get { return false; }
+ }
+
Queue pending_events;
bool completed;
@@ -2197,15 +2203,24 @@
{
args = null;
+ Report.Debug (DebugFlags.SSE,
+ "{0} activate breakpoints: {1}", sse,
completed);
+
while (!completed) {
if (do_execute ())
return EventResult.Running;
+ Report.Debug (DebugFlags.SSE,
+ "{0} activate breakpoints done -
continue", sse);
+ return EventResult.ResumeOperation;
+
sse.do_continue ();
return EventResult.Running;
}
+ Report.Debug (DebugFlags.SSE,
+ "{0} activate breakpoints completed",
sse);
return EventResult.AskParent;
}
@@ -2226,63 +2241,44 @@
Report.Debug (DebugFlags.SSE,
"{0} activate breakpoints: {1}", sse,
handle);
- sse.PushOperation (new OperationMethodBreakpoint (
- sse, handle.Function, handle.MethodLoaded));
+ sse.PushOperation (new OperationInsertBreakpoint (sse,
handle));
return true;
}
}
- protected class OperationMethodBreakpoint : OperationCallback
+ protected class OperationInsertBreakpoint : OperationCallback
{
- public readonly MonoFunctionType Function;
- public readonly MethodLoadedHandler Handler;
+ public readonly FunctionBreakpointHandle Handle;
- MonoLanguageBackend language;
- int index;
-
- bool class_resolved;
-
- public OperationMethodBreakpoint (SingleSteppingEngine sse,
TargetFunctionType func,
- MethodLoadedHandler handler)
- : base (sse)
+ public OperationInsertBreakpoint (SingleSteppingEngine sse,
+ FunctionBreakpointHandle
handle)
+ : base (sse, null)
{
- this.Function = (MonoFunctionType) func;
- this.Handler = handler;
+ this.Handle = handle;
}
protected override void DoExecute ()
{
- language = sse.process.MonoLanguage;
+ MonoDebuggerInfo info =
sse.ProcessServant.MonoManager.MonoDebuggerInfo;
+ MonoLanguageBackend mono = sse.process.MonoLanguage;
- TargetAddress image = Function.MonoClass.File.MonoImage;
+ MonoFunctionType func = (MonoFunctionType)
Handle.Function;
+ TargetAddress image = func.MonoClass.File.MonoImage;
+ int index = MonoLanguageBackend.GetUniqueID ();
- inferior.CallMethod (sse.MonoDebuggerInfo.LookupClass,
image.Address,
- 0, Function.MonoClass.Name, ID);
+ mono.RegisterMethodLoadHandler (index,
Handle.MethodLoaded);
+
+ inferior.CallMethod (
+ info.InsertSourceBreakpoint, image.Address,
+ func.Token, index, func.MonoClass.Name, ID);
}
protected override EventResult CallbackCompleted (long data1,
long data2)
{
Report.Debug (DebugFlags.SSE,
- "{0} method breakpoint callback: {1}
{2:x} {3:x} {4}",
- sse, inferior.CurrentFrame, data1, data2,
class_resolved);
+ "{0} insert breakpoint done: {1:x} {2:x}",
+ sse, data1, data2);
- if (!class_resolved) {
- TargetAddress klass = new TargetAddress
(inferior.AddressDomain, data1);
- MonoClassInfo info =
Function.MonoClass.ClassResolved (sse.Client, klass);
- TargetAddress method = info.GetMethodAddress
(inferior, Function.Token);
-
- index = MonoLanguageBackend.GetUniqueID ();
-
- inferior.CallMethod
(sse.MonoDebuggerInfo.InsertBreakpoint,
- method.Address, index, ID);
-
- language.RegisterMethodLoadHandler (index,
Handler);
-
- class_resolved = true;
- return EventResult.Running;
- }
-
- RestoreStack ();
return EventResult.AskParent;
}
}
@@ -2495,6 +2491,40 @@
}
}
+ protected class OperationExecuteInstruction : Operation
+ {
+ public readonly Instruction Instruction;
+
+ public OperationExecuteInstruction (SingleSteppingEngine sse,
Instruction insn)
+ : base (sse, null)
+ {
+ this.Instruction = insn;
+ }
+
+ public override bool IsSourceOperation {
+ get { return false; }
+ }
+
+ protected override void DoExecute ()
+ {
+ Report.Debug (DebugFlags.SSE,
+ "{0} executing instruction: {1}", sse,
Instruction);
+
+ inferior.ExecuteInstruction (Instruction.Code, true);
+ }
+
+ protected override EventResult DoProcessEvent
(Inferior.ChildEvent cevent,
+ out
TargetEventArgs args)
+ {
+ Report.Debug (DebugFlags.SSE,
+ "{0} executed instruction {1} at {2}:
{3}",
+ sse, Instruction, inferior.CurrentFrame,
cevent);
+
+ args = null;
+ return EventResult.ResumeOperation;
+ }
+ }
+
protected abstract class OperationStepBase : Operation
{
protected OperationStepBase (SingleSteppingEngine sse,
CommandResult result)
@@ -2791,6 +2821,14 @@
sse.do_continue ();
}
+ protected override bool ResumeOperation ()
+ {
+ Report.Debug (DebugFlags.SSE, "{0} resuming operation
{1}", sse, this);
+
+ sse.do_continue ();
+ return true;
+ }
+
protected override EventResult DoProcessEvent
(Inferior.ChildEvent cevent,
out
TargetEventArgs args)
{
@@ -3049,7 +3087,7 @@
"{0} rti resolving class
{1}:{2:x}", sse, image, token);
inferior.CallMethod (
- sse.MonoDebuggerInfo.LookupClass,
image.Address, 0,
+ sse.MonoDebuggerInfo.LookupClass,
image.Address, 0, 0,
Function.MonoClass.Name, ID);
return;
}
@@ -3285,17 +3323,19 @@
public readonly TargetAddress Method;
public readonly long Argument1;
public readonly long Argument2;
+ public readonly long Argument3;
public readonly string StringArgument;
public OperationCallMethod (SingleSteppingEngine sse,
- TargetAddress method, long arg1,
long arg2,
+ TargetAddress method, long arg1,
long arg2, long arg3,
string sarg)
: base (sse)
{
- this.Type = CallMethodType.LongString;
+ this.Type = CallMethodType.LongLongLongString;
this.Method = method;
this.Argument1 = arg1;
this.Argument2 = arg2;
+ this.Argument3 = arg3;
this.StringArgument = sarg;
}
@@ -3316,8 +3356,8 @@
inferior.CallMethod (Method, Argument1,
Argument2, ID);
break;
- case CallMethodType.LongString:
- inferior.CallMethod (Method, Argument1,
Argument2,
+ case CallMethodType.LongLongLongString:
+ inferior.CallMethod (Method, Argument1,
Argument2, Argument3,
StringArgument, ID);
break;
@@ -3559,6 +3599,7 @@
protected override bool DoProcessEvent ()
{
TargetAddress current_frame = inferior.CurrentFrame;
+
Report.Debug (DebugFlags.SSE, "{0} wrapper stopped at
{1} ({2}:{3})",
sse, current_frame, method.StartAddress,
method.EndAddress);
if ((current_frame < method.StartAddress) ||
(current_frame > method.EndAddress))
@@ -3692,6 +3733,6 @@
internal enum CallMethodType
{
LongLong,
- LongString
+ LongLongLongString
}
}
Modified: trunk/debugger/backend/ThreadServant.cs
===================================================================
--- trunk/debugger/backend/ThreadServant.cs 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/ThreadServant.cs 2007-11-20 19:47:04 UTC (rev
90020)
@@ -212,7 +212,7 @@
long arg2);
public abstract CommandResult CallMethod (TargetAddress method,
long arg1,
- long arg2, string
string_arg);
+ long arg2, long arg3,
string string_arg);
public abstract CommandResult Return (bool run_finally);
Modified: trunk/debugger/backend/arch/CoreFile.cs
===================================================================
--- trunk/debugger/backend/arch/CoreFile.cs 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/arch/CoreFile.cs 2007-11-20 19:47:04 UTC (rev
90020)
@@ -586,7 +586,7 @@
}
public override CommandResult CallMethod (TargetAddress
method,
- long arg1,
long arg2,
+ long arg1,
long arg2, long arg3,
string
string_arg)
{
throw new InvalidOperationException ();
Modified: trunk/debugger/backend/server/library.c
===================================================================
--- trunk/debugger/backend/server/library.c 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/server/library.c 2007-11-20 19:47:04 UTC (rev
90020)
@@ -209,14 +209,15 @@
ServerCommandError
mono_debugger_server_call_method_1 (ServerHandle *handle, guint64
method_address,
guint64 method_argument, guint64
data_argument,
- const gchar *string_argument, guint64
callback_argument)
+ guint64 data_argument2, const gchar
*string_argument,
+ guint64 callback_argument)
{
if (!global_vtable->call_method_1)
return COMMAND_ERROR_NOT_IMPLEMENTED;
return (* global_vtable->call_method_1) (
handle, method_address, method_argument, data_argument,
- string_argument, callback_argument);
+ data_argument2, string_argument, callback_argument);
}
ServerCommandError
Modified: trunk/debugger/backend/server/server.h
===================================================================
--- trunk/debugger/backend/server/server.h 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/server/server.h 2007-11-20 19:47:04 UTC (rev
90020)
@@ -236,6 +236,7 @@
guint64 method,
guint64
method_argument,
guint64
data_argument,
+ guint64
data_argument2,
const gchar
*string_argument,
guint64
callback_argument);
@@ -474,6 +475,7 @@
guint64 method_address,
guint64 method_argument,
guint64 data_argument,
+ guint64 data_argument2,
const gchar *string_argument,
guint64
callback_argument);
Modified: trunk/debugger/backend/server/x86_64-arch.c
===================================================================
--- trunk/debugger/backend/server/x86_64-arch.c 2007-11-20 19:34:24 UTC (rev
90019)
+++ trunk/debugger/backend/server/x86_64-arch.c 2007-11-20 19:47:04 UTC (rev
90020)
@@ -905,7 +905,8 @@
static ServerCommandError
server_ptrace_call_method_1 (ServerHandle *handle, guint64 method_address,
guint64 method_argument, guint64 data_argument,
- const gchar *string_argument, guint64
callback_argument)
+ guint64 data_argument2, const gchar
*string_argument,
+ guint64 callback_argument)
{
ServerCommandError result = COMMAND_ERROR_NONE;
ArchInfo *arch = handle->arch;
@@ -944,7 +945,8 @@
INFERIOR_REG_RIP (arch->current_regs) = method_address;
INFERIOR_REG_RDI (arch->current_regs) = method_argument;
INFERIOR_REG_RSI (arch->current_regs) = data_argument;
- INFERIOR_REG_RDX (arch->current_regs) = new_rsp + static_size;
+ INFERIOR_REG_RDX (arch->current_regs) = data_argument2;
+ INFERIOR_REG_RCX (arch->current_regs) = new_rsp + static_size;
INFERIOR_REG_RSP (arch->current_regs) = new_rsp;
g_ptr_array_add (arch->callback_stack, cdata);
Modified: trunk/debugger/classes/Thread.cs
===================================================================
--- trunk/debugger/classes/Thread.cs 2007-11-20 19:34:24 UTC (rev 90019)
+++ trunk/debugger/classes/Thread.cs 2007-11-20 19:47:04 UTC (rev 90020)
@@ -559,6 +559,23 @@
}
}
+ public TargetAddress CallMethod (TargetAddress method, long
arg1, long arg2)
+ {
+ CommandResult result;
+
+ lock (this) {
+ check_alive ();
+ result = servant.CallMethod (method, arg1,
arg2);
+ }
+
+ result.Wait ();
+
+ if (result.Result == null)
+ throw new TargetException
(TargetError.UnknownError);
+
+ return (TargetAddress) result.Result;
+ }
+
public TargetAddress CallMethod (TargetAddress method,
TargetAddress arg1,
long arg2)
{
@@ -578,13 +595,14 @@
}
public TargetAddress CallMethod (TargetAddress method,
TargetAddress arg1,
- long arg2, string string_arg)
+ long arg2, long arg3, string
string_arg)
{
CommandResult result;
lock (this) {
check_alive ();
- result = servant.CallMethod (method,
arg1.Address, arg2, string_arg);
+ result = servant.CallMethod (
+ method, arg1.Address, arg2, arg3,
string_arg);
}
result.Wait ();
Modified: trunk/debugger/languages/TargetFunctionType.cs
===================================================================
--- trunk/debugger/languages/TargetFunctionType.cs 2007-11-20 19:34:24 UTC
(rev 90019)
+++ trunk/debugger/languages/TargetFunctionType.cs 2007-11-20 19:47:04 UTC
(rev 90020)
@@ -1,4 +1,5 @@
-using System.Runtime.Serialization;
+using System;
+using Mono.Debugger.Backends;
namespace Mono.Debugger.Languages
{
@@ -72,7 +73,8 @@
public abstract TargetAddress GetMethodAddress (Thread target);
- internal abstract bool InsertBreakpoint (Thread target,
MethodLoadedHandler handler);
+ internal abstract bool InsertBreakpoint (Thread target,
+
FunctionBreakpointHandle handle);
internal abstract void RemoveBreakpoint (Thread target);
}
Modified: trunk/debugger/languages/mono/MonoClassType.cs
===================================================================
--- trunk/debugger/languages/mono/MonoClassType.cs 2007-11-20 19:34:24 UTC
(rev 90019)
+++ trunk/debugger/languages/mono/MonoClassType.cs 2007-11-20 19:47:04 UTC
(rev 90020)
@@ -473,7 +473,7 @@
TargetAddress klass_address = target.CallMethod (
file.MonoLanguage.MonoDebuggerInfo.LookupClass,
- file.MonoImage, 0, Name);
+ file.MonoImage, 0, 0, Name);
class_info = file.MonoLanguage.ReadClassInfo (target,
klass_address);
if (class_info == null)
Modified: trunk/debugger/languages/mono/MonoFunctionType.cs
===================================================================
--- trunk/debugger/languages/mono/MonoFunctionType.cs 2007-11-20 19:34:24 UTC
(rev 90019)
+++ trunk/debugger/languages/mono/MonoFunctionType.cs 2007-11-20 19:47:04 UTC
(rev 90020)
@@ -179,13 +179,11 @@
get { return true; }
}
- internal override bool InsertBreakpoint (Thread target,
MethodLoadedHandler handler)
+ internal override bool InsertBreakpoint (Thread target,
+
FunctionBreakpointHandle handle)
{
- TargetAddress method = GetMethodAddress (target);
-
load_handler =
klass.File.MonoLanguage.RegisterMethodLoadHandler (
- target, method, handler);
-
+ target, this, handle);
return load_handler > 0;
}
Modified: trunk/debugger/languages/mono/MonoLanguageBackend.cs
===================================================================
--- trunk/debugger/languages/mono/MonoLanguageBackend.cs 2007-11-20
19:34:24 UTC (rev 90019)
+++ trunk/debugger/languages/mono/MonoLanguageBackend.cs 2007-11-20
19:47:04 UTC (rev 90020)
@@ -384,15 +384,13 @@
void read_mono_debugger_info (TargetMemoryAccess memory)
{
- trampolines = new TargetAddress [4];
+ trampolines = new TargetAddress
[info.MonoTrampolineNum];
+
TargetAddress address = info.MonoTrampolineCode;
- trampolines [0] = memory.ReadAddress (address);
- address += memory.TargetMemoryInfo.TargetAddressSize;
- trampolines [1] = memory.ReadAddress (address);
- address += memory.TargetMemoryInfo.TargetAddressSize;
- trampolines [2] = memory.ReadAddress (address);
- address += 2 *
memory.TargetMemoryInfo.TargetAddressSize;
- trampolines [3] = memory.ReadAddress (address);
+ for (int i = 0; i < trampolines.Length; i++) {
+ trampolines [i] = memory.ReadAddress (address);
+ address +=
memory.TargetMemoryInfo.TargetAddressSize;
+ }
symfile_by_index = new Hashtable ();
symfile_by_image_addr = new Hashtable ();
@@ -723,7 +721,7 @@
int index = GetUniqueID ();
TargetAddress retval = target.CallMethod (
- info.InsertBreakpoint, method_address, index);
+ info.InsertMethodBreakpoint, method_address,
index);
if (!retval.IsNull)
method_from_jit_info (target, retval, handler);
@@ -739,9 +737,27 @@
internal void RemoveMethodLoadHandler (Thread target, int index)
{
- target.CallMethod (info.RemoveBreakpoint,
TargetAddress.Null, 0);
+ target.CallMethod (info.RemoveBreakpoint, index, 0);
method_load_handlers.Remove (index);
}
+
+ internal int RegisterMethodLoadHandler (Thread target,
MonoFunctionType func,
+
FunctionBreakpointHandle handle)
+ {
+ int index = GetUniqueID ();
+
+ TargetAddress retval = target.CallMethod (
+ info.InsertSourceBreakpoint,
func.MonoClass.File.MonoImage,
+ func.Token, index, func.MonoClass.Name);
+
+ MethodLoadedHandler handler = handle.MethodLoaded;
+
+ if (!retval.IsNull)
+ method_from_jit_info (target, retval, handler);
+
+ method_load_handlers.Add (index, handler);
+ return index;
+ }
#endregion
#region Language implementation
Modified: trunk/debugger/languages/mono/MonoStringType.cs
===================================================================
--- trunk/debugger/languages/mono/MonoStringType.cs 2007-11-20 19:34:24 UTC
(rev 90019)
+++ trunk/debugger/languages/mono/MonoStringType.cs 2007-11-20 19:47:04 UTC
(rev 90020)
@@ -69,7 +69,7 @@
throw new ArgumentException ();
TargetAddress retval = target.CallMethod (
- CreateString, TargetAddress.Null, 0, str);
+ CreateString, TargetAddress.Null, 0, 0, str);
TargetLocation location = new AbsoluteTargetLocation
(retval);
return new MonoStringObject (this, location);
}
Modified: trunk/debugger/languages/native/NativeFunctionType.cs
===================================================================
--- trunk/debugger/languages/native/NativeFunctionType.cs 2007-11-20
19:34:24 UTC (rev 90019)
+++ trunk/debugger/languages/native/NativeFunctionType.cs 2007-11-20
19:47:04 UTC (rev 90020)
@@ -1,5 +1,5 @@
using System;
-using System.Runtime.Serialization;
+using Mono.Debugger.Backends;
namespace Mono.Debugger.Languages.Native
{
@@ -116,7 +116,8 @@
get { return false; }
}
- internal override bool InsertBreakpoint (Thread target,
MethodLoadedHandler handler)
+ internal override bool InsertBreakpoint (Thread target,
+
FunctionBreakpointHandle handle)
{
throw new InvalidOperationException ();
}
Modified: trunk/debugger/test/testsuite/TestDelegate.cs
===================================================================
--- trunk/debugger/test/testsuite/TestDelegate.cs 2007-11-20 19:34:24 UTC
(rev 90019)
+++ trunk/debugger/test/testsuite/TestDelegate.cs 2007-11-20 19:47:04 UTC
(rev 90020)
@@ -15,7 +15,7 @@
{ }
[Test]
- [Category("ManagedTypes")]
+ [Category("NotWorking")]
public void Main ()
{
Process process = Start ();
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches