From: Rodrigo Kumpera Date: Wed, 10 Oct 2012 22:01:21 +0000 (-0400) Subject: Merge remote-tracking branch 'joncham/sgen-msvc2' X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=commitdiff_plain;h=d0baa99bcb8ef12231e24432d0b5710b3a0a4380 Merge remote-tracking branch 'joncham/sgen-msvc2' Conflicts: mono/metadata/sgen-copy-object.h mono/metadata/sgen-gc.c --- d0baa99bcb8ef12231e24432d0b5710b3a0a4380 diff --cc mono/metadata/sgen-copy-object.h index a1eccaee0f0,767be65fc53..c1404df1943 --- a/mono/metadata/sgen-copy-object.h +++ b/mono/metadata/sgen-copy-object.h @@@ -42,13 -44,8 +44,14 @@@ par_copy_object_no_checks (char *destin DEBUG (9, g_assert (vt->klass->inited)); DEBUG (9, fprintf (gc_debug_file, " (to %p, %s size: %lu)\n", destination, ((MonoObject*)obj)->vtable->klass->name, (unsigned long)objsize)); binary_protocol_copy (obj, destination, vt, objsize); - + + if (G_UNLIKELY (MONO_GC_OBJ_MOVED_ENABLED ())) { + int dest_gen = sgen_ptr_in_nursery (destination) ? GENERATION_NURSERY : GENERATION_OLD; + int src_gen = sgen_ptr_in_nursery (obj) ? GENERATION_NURSERY : GENERATION_OLD; + MONO_GC_OBJ_MOVED ((mword)destination, (mword)obj, dest_gen, src_gen, objsize, vt->klass->name_space, vt->klass->name); + } + + #ifdef __GNUC__ if (objsize <= sizeof (gpointer) * 8) { mword *dest = (mword*)destination; goto *copy_labels [objsize / sizeof (gpointer)]; diff --cc mono/metadata/sgen-gc.c index a79b307328c,e6a0bec9479..3431875933b --- a/mono/metadata/sgen-gc.c +++ b/mono/metadata/sgen-gc.c @@@ -3443,14 -3419,12 +3443,14 @@@ update_current_thread_stack (void *star #ifdef USE_MONO_CTX MONO_CONTEXT_GET_CURRENT (cur_thread_ctx); info->monoctx = &cur_thread_ctx; + if (gc_callbacks.thread_suspend_func) + gc_callbacks.thread_suspend_func (info->runtime_data, NULL, info->monoctx); #else - ARCH_STORE_REGS (ptr); - info->stopped_regs = ptr; + ARCH_STORE_REGS (reg_ptr); + info->stopped_regs = reg_ptr; -#endif if (gc_callbacks.thread_suspend_func) - gc_callbacks.thread_suspend_func (info->runtime_data, NULL); + gc_callbacks.thread_suspend_func (info->runtime_data, NULL, NULL); +#endif } void