diff options
Diffstat (limited to 'runtime/art_method.cc')
-rw-r--r-- | runtime/art_method.cc | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/runtime/art_method.cc b/runtime/art_method.cc index eeece90be5..96b6f18403 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -51,6 +51,17 @@ extern "C" void art_quick_invoke_stub(ArtMethod*, uint32_t*, uint32_t, Thread*, extern "C" void art_quick_invoke_static_stub(ArtMethod*, uint32_t*, uint32_t, Thread*, JValue*, const char*); +ArtMethod* ArtMethod::GetSingleImplementation() { + DCHECK(!IsNative()); + if (!IsAbstract()) { + // A non-abstract's single implementation is itself. + return this; + } + // TODO: add single-implementation logic for abstract method by storing it + // in ptr_sized_fields_. + return nullptr; +} + ArtMethod* ArtMethod::FromReflectedMethod(const ScopedObjectAccessAlreadyRunnable& soa, jobject jlr_method) { ObjPtr<mirror::Executable> executable = soa.Decode<mirror::Executable>(jlr_method); @@ -68,7 +79,8 @@ mirror::DexCache* ArtMethod::GetObsoleteDexCache() { DCHECK(ext->GetObsoleteDexCaches() != nullptr); int32_t len = obsolete_methods->GetLength(); DCHECK_EQ(len, ext->GetObsoleteDexCaches()->GetLength()); - // TODO I think this is fine since images should never have obsolete methods in them. + // Using kRuntimePointerSize (instead of using the image's pointer size) is fine since images + // should never have obsolete methods in them so they should always be the same. PointerSize pointer_size = kRuntimePointerSize; DCHECK_EQ(kRuntimePointerSize, Runtime::Current()->GetClassLinker()->GetImagePointerSize()); for (int32_t i = 0; i < len; i++) { @@ -345,7 +357,7 @@ void ArtMethod::RegisterNative(const void* native_method, bool is_fast) { CHECK(!IsFastNative()) << PrettyMethod(); CHECK(native_method != nullptr) << PrettyMethod(); if (is_fast) { - SetAccessFlags(GetAccessFlags() | kAccFastNative); + AddAccessFlags(kAccFastNative); } SetEntryPointFromJni(native_method); } @@ -503,7 +515,7 @@ const uint8_t* ArtMethod::GetQuickenedInfo(PointerSize pointer_size) { if (oat_file == nullptr) { return nullptr; } - return oat_file->DexBegin() + header->vmap_table_offset_; + return oat_file->DexBegin() + header->GetVmapTableOffset(); } else { return oat_method.GetVmapTable(); } @@ -601,7 +613,7 @@ const OatQuickMethodHeader* ArtMethod::GetOatQuickMethodHeader(uintptr_t pc) { DCHECK(method_header->Contains(pc)) << PrettyMethod() << " " << std::hex << pc << " " << oat_entry_point - << " " << (uintptr_t)(method_header->code_ + method_header->code_size_); + << " " << (uintptr_t)(method_header->GetCode() + method_header->GetCodeSize()); return method_header; } |