diff options
| -rw-r--r-- | dex2oat/linker/image_writer.cc | 2 | ||||
| -rw-r--r-- | openjdkjvmti/ti_class_definition.cc | 2 | ||||
| -rw-r--r-- | openjdkjvmti/ti_redefine.cc | 2 | ||||
| -rw-r--r-- | runtime/art_method.cc | 2 | ||||
| -rw-r--r-- | runtime/class_linker.cc | 11 | ||||
| -rw-r--r-- | runtime/mirror/class_ext-inl.h | 21 | ||||
| -rw-r--r-- | runtime/mirror/class_ext.cc | 4 | ||||
| -rw-r--r-- | runtime/mirror/class_ext.h | 20 |
8 files changed, 38 insertions, 26 deletions
diff --git a/dex2oat/linker/image_writer.cc b/dex2oat/linker/image_writer.cc index e8786783db..e56fdcf175 100644 --- a/dex2oat/linker/image_writer.cc +++ b/dex2oat/linker/image_writer.cc @@ -61,7 +61,7 @@ #include "lock_word.h" #include "mirror/array-inl.h" #include "mirror/class-inl.h" -#include "mirror/class_ext.h" +#include "mirror/class_ext-inl.h" #include "mirror/class_loader.h" #include "mirror/dex_cache-inl.h" #include "mirror/dex_cache.h" diff --git a/openjdkjvmti/ti_class_definition.cc b/openjdkjvmti/ti_class_definition.cc index 20feb784bd..c4287fbafc 100644 --- a/openjdkjvmti/ti_class_definition.cc +++ b/openjdkjvmti/ti_class_definition.cc @@ -40,7 +40,7 @@ #include "handle.h" #include "handle_scope-inl.h" #include "mirror/class-inl.h" -#include "mirror/class_ext.h" +#include "mirror/class_ext-inl.h" #include "mirror/object-inl.h" #include "reflection.h" #include "thread.h" diff --git a/openjdkjvmti/ti_redefine.cc b/openjdkjvmti/ti_redefine.cc index ad11663320..27ac88f470 100644 --- a/openjdkjvmti/ti_redefine.cc +++ b/openjdkjvmti/ti_redefine.cc @@ -67,7 +67,7 @@ #include "mirror/array-alloc-inl.h" #include "mirror/class-alloc-inl.h" #include "mirror/class-inl.h" -#include "mirror/class_ext.h" +#include "mirror/class_ext-inl.h" #include "mirror/object.h" #include "mirror/object_array-alloc-inl.h" #include "mirror/object_array-inl.h" diff --git a/runtime/art_method.cc b/runtime/art_method.cc index 32884fafb5..b9d514e5aa 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -40,7 +40,7 @@ #include "jit/profiling_info.h" #include "jni/jni_internal.h" #include "mirror/class-inl.h" -#include "mirror/class_ext.h" +#include "mirror/class_ext-inl.h" #include "mirror/executable.h" #include "mirror/object-inl.h" #include "mirror/object_array-inl.h" diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index dde4f366de..80e0f462bc 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -175,7 +175,7 @@ static bool HasInitWithString(Thread* self, ClassLinker* class_linker, const cha return exception_init_method != nullptr; } -static mirror::Object* GetVerifyError(ObjPtr<mirror::Class> c) +static ObjPtr<mirror::Object> GetVerifyError(ObjPtr<mirror::Class> c) REQUIRES_SHARED(Locks::mutator_lock_) { ObjPtr<mirror::ClassExt> ext(c->GetExtData()); if (ext == nullptr) { @@ -241,8 +241,8 @@ void ClassLinker::ThrowEarlierClassFailure(ObjPtr<mirror::Class> c, Runtime* const runtime = Runtime::Current(); if (!runtime->IsAotCompiler()) { // Give info if this occurs at runtime. std::string extra; - if (GetVerifyError(c) != nullptr) { - ObjPtr<mirror::Object> verify_error = GetVerifyError(c); + ObjPtr<mirror::Object> verify_error = GetVerifyError(c); + if (verify_error != nullptr) { if (verify_error->IsClass()) { extra = mirror::Class::PrettyDescriptor(verify_error->AsClass()); } else { @@ -262,14 +262,15 @@ void ClassLinker::ThrowEarlierClassFailure(ObjPtr<mirror::Class> c, ObjPtr<mirror::Throwable> pre_allocated = runtime->GetPreAllocatedNoClassDefFoundError(); self->SetException(pre_allocated); } else { - if (GetVerifyError(c) != nullptr) { + ObjPtr<mirror::Object> verify_error = GetVerifyError(c); + if (verify_error != nullptr) { // Rethrow stored error. HandleEarlierVerifyError(self, this, c); } // TODO This might be wrong if we hit an OOME while allocating the ClassExt. In that case we // might have meant to go down the earlier if statement with the original error but it got // swallowed by the OOM so we end up here. - if (GetVerifyError(c) == nullptr || wrap_in_no_class_def) { + if (verify_error == nullptr || wrap_in_no_class_def) { // If there isn't a recorded earlier error, or this is a repeat throw from initialization, // the top-level exception must be a NoClassDefFoundError. The potentially already pending // exception will be a cause. diff --git a/runtime/mirror/class_ext-inl.h b/runtime/mirror/class_ext-inl.h index 8d68dc92f9..bf51654447 100644 --- a/runtime/mirror/class_ext-inl.h +++ b/runtime/mirror/class_ext-inl.h @@ -20,10 +20,31 @@ #include "class_ext.h" #include "art_method-inl.h" +#include "object-inl.h" namespace art { namespace mirror { +inline ObjPtr<Object> ClassExt::GetVerifyError() { + return GetFieldObject<ClassExt>(OFFSET_OF_OBJECT_MEMBER(ClassExt, verify_error_)); +} + +inline ObjPtr<ObjectArray<DexCache>> ClassExt::GetObsoleteDexCaches() { + return GetFieldObject<ObjectArray<DexCache>>( + OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_dex_caches_)); +} + +template<VerifyObjectFlags kVerifyFlags, + ReadBarrierOption kReadBarrierOption> +inline ObjPtr<PointerArray> ClassExt::GetObsoleteMethods() { + return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>( + OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_methods_)); +} + +inline ObjPtr<Object> ClassExt::GetOriginalDexFile() { + return GetFieldObject<Object>(OFFSET_OF_OBJECT_MEMBER(ClassExt, original_dex_file_)); +} + template<ReadBarrierOption kReadBarrierOption, class Visitor> void ClassExt::VisitNativeRoots(Visitor& visitor, PointerSize pointer_size) { ObjPtr<PointerArray> arr(GetObsoleteMethods<kDefaultVerifyFlags, kReadBarrierOption>()); diff --git a/runtime/mirror/class_ext.cc b/runtime/mirror/class_ext.cc index 146adc978c..d12f340690 100644 --- a/runtime/mirror/class_ext.cc +++ b/runtime/mirror/class_ext.cc @@ -102,8 +102,8 @@ bool ClassExt::ExtendObsoleteArrays(Thread* self, uint32_t increase) { return true; } -ClassExt* ClassExt::Alloc(Thread* self) { - return down_cast<ClassExt*>(GetClassRoot<ClassExt>()->AllocObject(self).Ptr()); +ObjPtr<ClassExt> ClassExt::Alloc(Thread* self) { + return ObjPtr<ClassExt>::DownCast(GetClassRoot<ClassExt>()->AllocObject(self)); } void ClassExt::SetVerifyError(ObjPtr<Object> err) { diff --git a/runtime/mirror/class_ext.h b/runtime/mirror/class_ext.h index 126f94a61d..8fbbf5c2e1 100644 --- a/runtime/mirror/class_ext.h +++ b/runtime/mirror/class_ext.h @@ -42,25 +42,15 @@ class MANAGED ClassExt : public Object { void SetVerifyError(ObjPtr<Object> obj) REQUIRES_SHARED(Locks::mutator_lock_); - Object* GetVerifyError() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetFieldObject<ClassExt>(OFFSET_OF_OBJECT_MEMBER(ClassExt, verify_error_)); - } + ObjPtr<Object> GetVerifyError() REQUIRES_SHARED(Locks::mutator_lock_); - ObjectArray<DexCache>* GetObsoleteDexCaches() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetFieldObject<ObjectArray<DexCache>>( - OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_dex_caches_)); - } + ObjPtr<ObjectArray<DexCache>> GetObsoleteDexCaches() REQUIRES_SHARED(Locks::mutator_lock_); template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> - inline PointerArray* GetObsoleteMethods() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>( - OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_methods_)); - } + ObjPtr<PointerArray> GetObsoleteMethods() REQUIRES_SHARED(Locks::mutator_lock_); - Object* GetOriginalDexFile() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetFieldObject<Object>(OFFSET_OF_OBJECT_MEMBER(ClassExt, original_dex_file_)); - } + ObjPtr<Object> GetOriginalDexFile() REQUIRES_SHARED(Locks::mutator_lock_); void SetOriginalDexFile(ObjPtr<Object> bytes) REQUIRES_SHARED(Locks::mutator_lock_); @@ -89,7 +79,7 @@ class MANAGED ClassExt : public Object { inline void VisitNativeRoots(Visitor& visitor, PointerSize pointer_size) REQUIRES_SHARED(Locks::mutator_lock_); - static ClassExt* Alloc(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_); + static ObjPtr<ClassExt> Alloc(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_); private: // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses". |