X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fsgen%2Fsgen-debug.c;h=6daa9199dfcea5d7067518d98732a153cb5f6abc;hb=cadf391beab4c0d0c4aada7acb8fcb7c2e702e87;hp=28e77a77e87d53c9a3145a586f0545f3b049c639;hpb=196497780f01da0d275fafa1524bc2100459ee27;p=mono.git diff --git a/mono/sgen/sgen-debug.c b/mono/sgen/sgen-debug.c index 28e77a77e87..6daa9199dfc 100644 --- a/mono/sgen/sgen-debug.c +++ b/mono/sgen/sgen-debug.c @@ -493,10 +493,10 @@ static void find_pinning_ref_from_thread (char *obj, size_t size) { #ifndef SGEN_WITHOUT_MONO - int j; char *endobj = obj + size; FOREACH_THREAD (info) { + mword *ctxstart, *ctxcurrent, *ctxend; char **start = (char**)info->client_info.stack_start; if (info->client_info.skip || info->client_info.gc_disabled) continue; @@ -506,15 +506,11 @@ find_pinning_ref_from_thread (char *obj, size_t size) start++; } - for (j = 0; j < ARCH_NUM_REGS; ++j) { -#ifdef USE_MONO_CTX - mword w = ((mword*)&info->client_info.ctx) [j]; -#else - mword w = (mword)&info->client_info.regs [j]; -#endif + for (ctxstart = ctxcurrent = (mword*) &info->client_info.ctx, ctxend = (mword*) (&info->client_info.ctx + 1); ctxcurrent < ctxend; ctxcurrent ++) { + mword w = *ctxcurrent; if (w >= (mword)obj && w < (mword)obj + size) - SGEN_LOG (0, "Object %p referenced in saved reg %d of thread %p (id %p)", obj, j, info, (gpointer)mono_thread_info_get_tid (info)); + SGEN_LOG (0, "Object %p referenced in saved reg %d of thread %p (id %p)", obj, (int) (ctxcurrent - ctxstart), info, (gpointer)mono_thread_info_get_tid (info)); } } FOREACH_THREAD_END #endif @@ -996,9 +992,11 @@ check_reference_for_xdomain (GCObject **ptr, GCObject *obj, MonoDomain *domain) break; } - if (ref->vtable->klass == mono_defaults.string_class) - str = mono_string_to_utf8 ((MonoString*)ref); - else + if (ref->vtable->klass == mono_defaults.string_class) { + MonoError error; + str = mono_string_to_utf8_checked ((MonoString*)ref, &error); + mono_error_cleanup (&error); + } else str = NULL; g_print ("xdomain reference in %p (%s.%s) at offset %d (%s) to %p (%s.%s) (%s) - pointed to by:\n", obj, obj->vtable->klass->name_space, obj->vtable->klass->name,