Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmono/mini/ChangeLog5
-rw-r--r--mono/mini/method-to-ir.c9
2 files changed, 14 insertions, 0 deletions
diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog
index 4c4f0efeaf5..fd069819e2a 100755
--- a/mono/mini/ChangeLog
+++ b/mono/mini/ChangeLog
@@ -1,5 +1,10 @@
2010-05-28 Mark Probst <mark.probst@gmail.com>
+ * method-to-ir.c (mono_method_to_ir): Emit a write barrier for
+ cpobj with reference types.
+
+2010-05-28 Mark Probst <mark.probst@gmail.com>
+
* method-to-ir.c (mono_method_to_ir): Only explicitly add the
write barrier for reference types.
diff --git a/mono/mini/method-to-ir.c b/mono/mini/method-to-ir.c
index 13466a6d94b..b689dff1569 100644
--- a/mono/mini/method-to-ir.c
+++ b/mono/mini/method-to-ir.c
@@ -7190,6 +7190,15 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
NEW_STORE_MEMBASE (cfg, store, OP_STORE_MEMBASE_REG, sp [0]->dreg, 0, dreg);
store->flags |= ins_flag;
MONO_ADD_INS (cfg->cbb, store);
+
+#if HAVE_WRITE_BARRIERS
+ if (cfg->method->wrapper_type != MONO_WRAPPER_WRITE_BARRIER) {
+ MonoInst *dummy_use;
+ MonoMethod *write_barrier = mono_gc_get_write_barrier ();
+ mono_emit_method_call (cfg, write_barrier, sp, NULL);
+ EMIT_NEW_DUMMY_USE (cfg, dummy_use, sp [1]);
+ }
+#endif
} else {
mini_emit_stobj (cfg, sp [0], sp [1], klass, FALSE);
}