internal int RegisterMethodLoadHandler(Thread thread, MonoFunctionType func,
FunctionBreakpointHandle handle)
{
if (method_load_handlers.Contains (handle.Index))
return handle.Index;
if (!thread.CurrentFrame.Language.IsManaged)
throw new TargetException (TargetError.InvalidContext);
TargetAddress retval = thread.CallMethod (
info.InsertSourceBreakpoint, func.SymbolFile.MonoImage,
func.Token, handle.Index, func.DeclaringType.BaseName);
MethodLoadedHandler handler = handle.MethodLoaded;
if (!retval.IsNull) {
thread.ThreadServant.DoTargetAccess (
delegate (TargetMemoryAccess target) {
method_from_jit_info ((TargetAccess) target,
retval, handler);
return null;
});
}
method_load_handlers.Add (handle.Index, handler);
return handle.Index;
}