Undo dex2dex compilation before invoking LoadHook
We need to undo any dex_to_dex compilation that might have taken place
before passing a dex file to any registered ClassFileLoadHooks to
ensure that no internal opcodes are present in any methods.
Test: ./test.py --host -j40
Bug: 36653594
Change-Id: Ia42c77312e685d69f6b3ea764fad01710b10ab45
diff --git a/runtime/openjdkjvmti/ti_redefine.cc b/runtime/openjdkjvmti/ti_redefine.cc
index 7faddfb..95a1b00 100644
--- a/runtime/openjdkjvmti/ti_redefine.cc
+++ b/runtime/openjdkjvmti/ti_redefine.cc
@@ -347,7 +347,7 @@
def.dex_len = definitions[i].class_byte_count;
def.dex_data = MakeJvmtiUniquePtr(env, class_bytes_copy);
// We are definitely modified.
- def.SetModified();
+ def.SetRedefined();
def.original_dex_file = art::ArraySlice<const unsigned char>(definitions[i].class_bytes,
definitions[i].class_byte_count);
res = Transformer::FillInTransformationData(env, definitions[i].klass, &def);
@@ -386,7 +386,7 @@
Redefiner r(runtime, self, error_msg);
for (const ArtClassDefinition& def : definitions) {
// Only try to transform classes that have been modified.
- if (def.IsModified(self)) {
+ if (def.IsModified()) {
jvmtiError res = r.AddRedefinition(env, def);
if (res != OK) {
return res;
@@ -443,7 +443,7 @@
def.klass,
dex_file.release(),
signature_ptr,
- def.original_dex_file));
+ def.GetNewOriginalDexFile()));
return OK;
}