summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dex2oat/linker/image_writer.cc2
-rw-r--r--openjdkjvmti/ti_class_definition.cc2
-rw-r--r--openjdkjvmti/ti_redefine.cc2
-rw-r--r--runtime/art_method.cc2
-rw-r--r--runtime/class_linker.cc11
-rw-r--r--runtime/mirror/class_ext-inl.h21
-rw-r--r--runtime/mirror/class_ext.cc4
-rw-r--r--runtime/mirror/class_ext.h20
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".