summaryrefslogtreecommitdiff
path: root/runtime/mirror/class_ext.h
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2017-01-19 14:57:28 -0800
committer Alex Light <allight@google.com> 2017-01-20 11:32:03 -0800
commita7e38d8aaacfca85b40b5df654f85c0979968672 (patch)
tree34322c79fc328a608fc17303453c8ec1f38b9eaa /runtime/mirror/class_ext.h
parent05778764cb11162b6f3ff72386135ed45a07af33 (diff)
Use original dex file for retransformation.
The spec requires us to pass the dex file as it appeared before any retransformation-capable agents had modified it to the ClassFileLoadHooks when RetransformClasses is called. We do this by saving the initial dex file bytes into the class as a byte[]. Bug: 32369916 Test: mma -j40 test-art-host Change-Id: Ic6af3738cd2a831e91ba1144f502fa58b3c333e4
Diffstat (limited to 'runtime/mirror/class_ext.h')
-rw-r--r--runtime/mirror/class_ext.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/runtime/mirror/class_ext.h b/runtime/mirror/class_ext.h
index 91046314db..ad8a61b676 100644
--- a/runtime/mirror/class_ext.h
+++ b/runtime/mirror/class_ext.h
@@ -61,6 +61,12 @@ class MANAGED ClassExt : public Object {
return GetFieldObject<PointerArray>(OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_methods_));
}
+ ByteArray* GetOriginalDexFileBytes() REQUIRES_SHARED(Locks::mutator_lock_) {
+ return GetFieldObject<ByteArray>(OFFSET_OF_OBJECT_MEMBER(ClassExt, original_dex_file_bytes_));
+ }
+
+ void SetOriginalDexFileBytes(ObjPtr<ByteArray> bytes) REQUIRES_SHARED(Locks::mutator_lock_);
+
void SetObsoleteArrays(ObjPtr<PointerArray> methods, ObjPtr<ObjectArray<DexCache>> dex_caches)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -80,7 +86,7 @@ class MANAGED ClassExt : public Object {
HeapReference<PointerArray> obsolete_methods_;
- HeapReference<DexCache> original_dex_cache_;
+ HeapReference<ByteArray> original_dex_file_bytes_;
// The saved verification error of this class.
HeapReference<Object> verify_error_;