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
(cherry picked from commit b5bba5966045258fd8b755fb65e381cd7fb9c311)
Change-Id: Ibe8430e32e161d33ce0a6782e8dc252e5c86c8da
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());
}
}