diff options
Diffstat (limited to 'compiler/image_writer.cc')
| -rw-r--r-- | compiler/image_writer.cc | 19 | 
1 files changed, 14 insertions, 5 deletions
| diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index 7a34683bb5..efae4d0583 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -39,6 +39,7 @@  #include "gc/accounting/card_table-inl.h"  #include "gc/accounting/heap_bitmap.h"  #include "gc/accounting/space_bitmap-inl.h" +#include "gc/collector/concurrent_copying.h"  #include "gc/heap.h"  #include "gc/space/large_object_space.h"  #include "gc/space/space-inl.h" @@ -1372,11 +1373,14 @@ void ImageWriter::CalculateNewObjectOffsets() {    image_methods_[ImageHeader::kResolutionMethod] = runtime->GetResolutionMethod();    image_methods_[ImageHeader::kImtConflictMethod] = runtime->GetImtConflictMethod();    image_methods_[ImageHeader::kImtUnimplementedMethod] = runtime->GetImtUnimplementedMethod(); -  image_methods_[ImageHeader::kCalleeSaveMethod] = runtime->GetCalleeSaveMethod(Runtime::kSaveAll); -  image_methods_[ImageHeader::kRefsOnlySaveMethod] = -      runtime->GetCalleeSaveMethod(Runtime::kRefsOnly); -  image_methods_[ImageHeader::kRefsAndArgsSaveMethod] = -      runtime->GetCalleeSaveMethod(Runtime::kRefsAndArgs); +  image_methods_[ImageHeader::kSaveAllCalleeSavesMethod] = +      runtime->GetCalleeSaveMethod(Runtime::kSaveAllCalleeSaves); +  image_methods_[ImageHeader::kSaveRefsOnlyMethod] = +      runtime->GetCalleeSaveMethod(Runtime::kSaveRefsOnly); +  image_methods_[ImageHeader::kSaveRefsAndArgsMethod] = +      runtime->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs); +  image_methods_[ImageHeader::kSaveEverythingMethod] = +      runtime->GetCalleeSaveMethod(Runtime::kSaveEverything);    // Visit image methods first to have the main runtime methods in the first image.    for (auto* m : image_methods_) {      CHECK(m != nullptr); @@ -1823,6 +1827,11 @@ void ImageWriter::CopyAndFixupObject(Object* obj) {    const auto it = saved_hashcode_map_.find(obj);    dst->SetLockWord(it != saved_hashcode_map_.end() ?        LockWord::FromHashCode(it->second, 0u) : LockWord::Default(), false); +  if (kUseBakerReadBarrier && gc::collector::ConcurrentCopying::kGrayDirtyImmuneObjects) { +    // Treat all of the objects in the image as marked to avoid unnecessary dirty pages. This is +    // safe since we mark all of the objects that may reference non immune objects as gray. +    CHECK(dst->AtomicSetMarkBit(0, 1)); +  }    FixupObject(obj, dst);  } |