Revert^2 "Support using opaque JNI ids"
We weren't handing the fact that encoding jmethodIDs could cause OOM
exceptions in some places in reflection.cc. This could lead to
attempting to use a null jmethodID as if it were a real id. This issue
is fixed by the parent CL.
This reverts commit b476a29a2c.
This reverts commit 3b2905366c.
This Unreverts commit d5d645ffec.
This Unreverts commit 21d5994583.
Reason for revert: Fixed issue causing 004 debuggable flakes
Test: ./test.py --host --jit --debuggable
Bug: 134162467
Change-Id: Iece08ab299cd8a20f8382be7be6c3796858e70eb
diff --git a/runtime/mirror/class_ext.h b/runtime/mirror/class_ext.h
index 70bea33..6fb225f 100644
--- a/runtime/mirror/class_ext.h
+++ b/runtime/mirror/class_ext.h
@@ -48,6 +48,33 @@
template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> EnsureInstanceJFieldIDsArrayPresent(size_t count)
+ REQUIRES_SHARED(Locks::mutator_lock_);
+
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> GetInstanceJFieldIDs() REQUIRES_SHARED(Locks::mutator_lock_);
+
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> EnsureStaticJFieldIDsArrayPresent(size_t count)
+ REQUIRES_SHARED(Locks::mutator_lock_);
+
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> GetStaticJFieldIDs() REQUIRES_SHARED(Locks::mutator_lock_);
+
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> EnsureJMethodIDsArrayPresent(size_t count)
+ REQUIRES_SHARED(Locks::mutator_lock_);
+
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> GetJMethodIDs() REQUIRES_SHARED(Locks::mutator_lock_);
+
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
ObjPtr<PointerArray> GetObsoleteMethods() REQUIRES_SHARED(Locks::mutator_lock_);
ObjPtr<Object> GetOriginalDexFile() REQUIRES_SHARED(Locks::mutator_lock_);
@@ -82,19 +109,36 @@
static ObjPtr<ClassExt> Alloc(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_);
private:
+ template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
+ ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
+ ObjPtr<PointerArray> EnsureJniIdsArrayPresent(MemberOffset off, size_t count)
+ REQUIRES_SHARED(Locks::mutator_lock_);
+
// Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
+ // An array containing the jfieldIDs assigned to each field in the corresponding position in the
+ // classes ifields_ array or '0' if no id has been assigned to that field yet.
+ HeapReference<PointerArray> instance_jfield_ids_;
+
+ // An array containing the jmethodIDs assigned to each method in the corresponding position in
+ // the classes methods_ array or '0' if no id has been assigned to that method yet.
+ HeapReference<PointerArray> jmethod_ids_;
+
HeapReference<ObjectArray<DexCache>> obsolete_dex_caches_;
HeapReference<PointerArray> obsolete_methods_;
HeapReference<Object> original_dex_file_;
+ // An array containing the jfieldIDs assigned to each field in the corresponding position in the
+ // classes sfields_ array or '0' if no id has been assigned to that field yet.
+ HeapReference<PointerArray> static_jfield_ids_;
+
// The saved verification error of this class.
HeapReference<Object> verify_error_;
// Native pointer to DexFile and ClassDef index of this class before it was JVMTI-redefined.
- int64_t pre_redefine_dex_file_ptr_;
int32_t pre_redefine_class_def_index_;
+ int64_t pre_redefine_dex_file_ptr_;
friend struct art::ClassExtOffsets; // for verifying offset information
DISALLOW_IMPLICIT_CONSTRUCTORS(ClassExt);