summaryrefslogtreecommitdiff
path: root/runtime/mirror/class_ext.cc
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.cc
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.cc')
-rw-r--r--runtime/mirror/class_ext.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/runtime/mirror/class_ext.cc b/runtime/mirror/class_ext.cc
index 7c6a710cef..efd949e031 100644
--- a/runtime/mirror/class_ext.cc
+++ b/runtime/mirror/class_ext.cc
@@ -113,6 +113,11 @@ void ClassExt::SetVerifyError(ObjPtr<Object> err) {
}
}
+void ClassExt::SetOriginalDexFileBytes(ObjPtr<ByteArray> bytes) {
+ DCHECK(!Runtime::Current()->IsActiveTransaction());
+ SetFieldObject<false>(OFFSET_OF_OBJECT_MEMBER(ClassExt, original_dex_file_bytes_), bytes);
+}
+
void ClassExt::SetClass(ObjPtr<Class> dalvik_system_ClassExt) {
CHECK(dalvik_system_ClassExt != nullptr);
dalvik_system_ClassExt_ = GcRoot<Class>(dalvik_system_ClassExt);