Perform write barrier on declaring class when adding instrumentation
Since the instrumentation is marked from the declaring class we need
to mark the card so that mod-union tables and card rescanning know
about the update.
This fixes some moving GC crashes on eng builds.
Bug: 24133607
Change-Id: I66de3e3e5e1e4d2d91a041e2fbc37b93c5091b12
diff --git a/runtime/jit/jit_instrumentation.cc b/runtime/jit/jit_instrumentation.cc
index e9c16c1..9b9c5d2 100644
--- a/runtime/jit/jit_instrumentation.cc
+++ b/runtime/jit/jit_instrumentation.cc
@@ -111,6 +111,9 @@
DCHECK(this_object != nullptr);
ProfilingInfo* info = caller->GetProfilingInfo(sizeof(void*));
if (info != nullptr) {
+ // Since the instrumentation is marked from the declaring class we need to mark the card so
+ // that mod-union tables and card rescanning know about the update.
+ Runtime::Current()->GetHeap()->WriteBarrierEveryFieldOf(caller->GetDeclaringClass());
info->AddInvokeInfo(thread, dex_pc, this_object->GetClass());
}
}