diff options
author | 2017-01-18 09:23:12 +0000 | |
---|---|---|
committer | 2017-02-14 14:04:33 +0000 | |
commit | c069a30d42aefd902c20e8bc09dfad1683f07ded (patch) | |
tree | 8bbf72bea7ea5d243b57f8e0ab64b687a9f60e4b /patchoat/patchoat.cc | |
parent | 3f38398380b80d1ded078ebed1211b7e4f51460f (diff) |
ART: invoke-custom support
Adds invoke-custom instruction to the interpreter.
Bug: 33191717,30550796
Test: art/test/run-test --host 952
Change-Id: I3b754128649a8b3a00ade79ba2518d0e377f3a1e
Diffstat (limited to 'patchoat/patchoat.cc')
-rw-r--r-- | patchoat/patchoat.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/patchoat/patchoat.cc b/patchoat/patchoat.cc index 9a73830f99..b9be5f2605 100644 --- a/patchoat/patchoat.cc +++ b/patchoat/patchoat.cc @@ -688,6 +688,16 @@ void PatchOat::PatchDexFileArrays(mirror::ObjectArray<mirror::Object>* img_roots orig_dex_cache->FixupResolvedMethodTypes(RelocatedCopyOf(orig_method_types), RelocatedPointerVisitor(this)); } + + GcRoot<mirror::CallSite>* orig_call_sites = orig_dex_cache->GetResolvedCallSites(); + GcRoot<mirror::CallSite>* relocated_call_sites = RelocatedAddressOfPointer(orig_call_sites); + copy_dex_cache->SetField64<false>( + mirror::DexCache::ResolvedCallSitesOffset(), + static_cast<int64_t>(reinterpret_cast<uintptr_t>(relocated_call_sites))); + if (orig_call_sites != nullptr) { + orig_dex_cache->FixupResolvedCallSites(RelocatedCopyOf(orig_call_sites), + RelocatedPointerVisitor(this)); + } } } |