diff options
Diffstat (limited to 'patchoat/patchoat.cc')
| -rw-r--r-- | patchoat/patchoat.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/patchoat/patchoat.cc b/patchoat/patchoat.cc index d6b52dbe63..986f265b3f 100644 --- a/patchoat/patchoat.cc +++ b/patchoat/patchoat.cc @@ -677,6 +677,16 @@ void PatchOat::PatchDexFileArrays(mirror::ObjectArray<mirror::Object>* img_roots mirror::DexCache::SetElementPtrSize(copy_fields, j, copy, pointer_size); } } + mirror::MethodTypeDexCacheType* orig_method_types = orig_dex_cache->GetResolvedMethodTypes(); + mirror::MethodTypeDexCacheType* relocated_method_types = + RelocatedAddressOfPointer(orig_method_types); + copy_dex_cache->SetField64<false>( + mirror::DexCache::ResolvedMethodTypesOffset(), + static_cast<int64_t>(reinterpret_cast<uintptr_t>(relocated_method_types))); + if (orig_method_types != nullptr) { + orig_dex_cache->FixupResolvedMethodTypes(RelocatedCopyOf(orig_method_types), + RelocatedPointerVisitor(this)); + } } } @@ -1360,15 +1370,13 @@ static int ParseFd(const StringPiece& option, const char* cmdline_arg) { } static int patchoat(int argc, char **argv) { - InitLogging(argv); + InitLogging(argv, Runtime::Aborter); MemMap::Init(); const bool debug = kIsDebugBuild; orig_argc = argc; orig_argv = argv; TimingLogger timings("patcher", false, false); - InitLogging(argv); - // Skip over the command name. argv++; argc--; |