diff options
author | Hiroshi Yamauchi <yamauchi@google.com> | 2015-02-09 17:11:42 -0800 |
---|---|---|
committer | Hiroshi Yamauchi <yamauchi@google.com> | 2015-03-03 17:33:18 -0800 |
commit | e15ea086439b41a805d164d2beb07b4ba96aaa97 (patch) | |
tree | 465ee3780acd8b7cb35c8a7f42a1f3c5df3d26ec /compiler/image_writer.cc | |
parent | 0b25c71ac93fb10c484dbacb9e23db505a8e2353 (diff) | |
download | art-e15ea086439b41a805d164d2beb07b4ba96aaa97.zip art-e15ea086439b41a805d164d2beb07b4ba96aaa97.tar.gz art-e15ea086439b41a805d164d2beb07b4ba96aaa97.tar.bz2 |
Reserve bits in the lock word for read barriers.
This prepares for the CC collector to use the standard object header
model by storing the read barrier state in the lock word.
Bug: 19355854
Bug: 12687968
Change-Id: Ia7585662dd2cebf0479a3e74f734afe5059fb70f
Diffstat (limited to 'compiler/image_writer.cc')
-rw-r--r-- | compiler/image_writer.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index f5f9320..b4732c8 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -909,7 +909,9 @@ void ImageWriter::CopyAndFixupObjects() { heap->VisitObjects(CopyAndFixupObjectsCallback, this); // Fix up the object previously had hash codes. for (const std::pair<mirror::Object*, uint32_t>& hash_pair : saved_hashes_) { - hash_pair.first->SetLockWord(LockWord::FromHashCode(hash_pair.second), false); + Object* obj = hash_pair.first; + DCHECK_EQ(obj->GetLockWord(false).ReadBarrierState(), 0U); + obj->SetLockWord(LockWord::FromHashCode(hash_pair.second, 0U), false); } saved_hashes_.clear(); } @@ -935,7 +937,7 @@ void ImageWriter::CopyAndFixupObjectsCallback(Object* obj, void* arg) { Object* copy = reinterpret_cast<Object*>(dst); // Write in a hash code of objects which have inflated monitors or a hash code in their monitor // word. - copy->SetLockWord(LockWord(), false); + copy->SetLockWord(LockWord::Default(), false); image_writer->FixupObject(obj, copy); } |