@@ -500,16 +500,19 @@ void Deserializer::DecodeReservation(
500500}
501501
502502
503- void Deserializer::FlushICacheForNewCodeObjects () {
504- if (!deserializing_user_code_) {
505- // The entire isolate is newly deserialized. Simply flush all code pages.
506- PageIterator it (isolate_->heap ()->code_space ());
507- while (it.has_next ()) {
508- Page* p = it.next ();
509- CpuFeatures::FlushICache (p->area_start (),
510- p->area_end () - p->area_start ());
511- }
503+ void Deserializer::FlushICacheForNewIsolate () {
504+ DCHECK (!deserializing_user_code_);
505+ // The entire isolate is newly deserialized. Simply flush all code pages.
506+ PageIterator it (isolate_->heap ()->code_space ());
507+ while (it.has_next ()) {
508+ Page* p = it.next ();
509+ CpuFeatures::FlushICache (p->area_start (), p->area_end () - p->area_start ());
512510 }
511+ }
512+
513+
514+ void Deserializer::FlushICacheForNewCodeObjects () {
515+ DCHECK (deserializing_user_code_);
513516 for (Code* code : new_code_objects_) {
514517 CpuFeatures::FlushICache (code->instruction_start (),
515518 code->instruction_size ());
@@ -557,6 +560,7 @@ void Deserializer::Deserialize(Isolate* isolate) {
557560 isolate_->heap ()->RepairFreeListsAfterDeserialization ();
558561 isolate_->heap ()->IterateWeakRoots (this , VISIT_ALL);
559562 DeserializeDeferredObjects ();
563+ FlushICacheForNewIsolate ();
560564 }
561565
562566 isolate_->heap ()->set_native_contexts_list (
@@ -574,8 +578,6 @@ void Deserializer::Deserialize(Isolate* isolate) {
574578 ExtraNatives::UpdateSourceCache (isolate_->heap ());
575579 CodeStubNatives::UpdateSourceCache (isolate_->heap ());
576580
577- FlushICacheForNewCodeObjects ();
578-
579581 // Issue code events for newly deserialized code objects.
580582 LOG_CODE_EVENT (isolate_, LogCodeObjects ());
581583 LOG_CODE_EVENT (isolate_, LogCompiledFunctions ());
@@ -631,6 +633,7 @@ MaybeHandle<SharedFunctionInfo> Deserializer::DeserializeCode(
631633 Object* root;
632634 VisitPointer (&root);
633635 DeserializeDeferredObjects ();
636+ FlushICacheForNewCodeObjects ();
634637 result = Handle<SharedFunctionInfo>(SharedFunctionInfo::cast (root));
635638 }
636639 CommitPostProcessedObjects (isolate);
@@ -2625,7 +2628,6 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
26252628 if (FLAG_profile_deserialization) PrintF (" [Deserializing failed]\n " );
26262629 return MaybeHandle<SharedFunctionInfo>();
26272630 }
2628- deserializer.FlushICacheForNewCodeObjects ();
26292631
26302632 if (FLAG_profile_deserialization) {
26312633 double ms = timer.Elapsed ().InMillisecondsF ();
0 commit comments