diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/image_writer.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index fbdb1155dc..8f15ea4a05 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -461,6 +461,12 @@ void ImageWriter::PrepareDexCacheArraySlots() { dex_cache); DCHECK_EQ(dex_file->NumStringIds() != 0u, dex_cache->GetStrings() != nullptr); AddDexCacheArrayRelocation(dex_cache->GetStrings(), start + layout.StringsOffset(), dex_cache); + + if (dex_cache->GetResolvedMethodTypes() != nullptr) { + AddDexCacheArrayRelocation(dex_cache->GetResolvedMethodTypes(), + start + layout.MethodTypesOffset(), + dex_cache); + } } } @@ -2170,6 +2176,14 @@ void ImageWriter::FixupDexCache(mirror::DexCache* orig_dex_cache, mirror::DexCache::SetElementPtrSize(copy_fields, i, copy, target_ptr_size_); } } + mirror::MethodTypeDexCacheType* orig_method_types = orig_dex_cache->GetResolvedMethodTypes(); + if (orig_method_types != nullptr) { + copy_dex_cache->SetFieldPtrWithSize<false>(mirror::DexCache::ResolvedMethodTypesOffset(), + NativeLocationInImage(orig_method_types), + PointerSize::k64); + orig_dex_cache->FixupResolvedMethodTypes(NativeCopyLocation(orig_method_types, orig_dex_cache), + ImageAddressVisitor(this)); + } // Remove the DexFile pointers. They will be fixed up when the runtime loads the oat file. Leaving // compiler pointers in here will make the output non-deterministic. |