OSDN Git Service

Merge "Enable redefining Bootclasspath classes"
authorAlex Light <allight@google.com>
Tue, 31 Jan 2017 18:02:05 +0000 (18:02 +0000)
committerGerrit Code Review <noreply-gerritcodereview@google.com>
Tue, 31 Jan 2017 18:02:06 +0000 (18:02 +0000)
1  2 
runtime/openjdkjvmti/ti_redefine.cc
runtime/openjdkjvmti/ti_redefine.h

@@@ -833,17 -871,29 +840,20 @@@ jvmtiError Redefiner::Run() 
    // TODO We need to update all debugger MethodIDs so they note the method they point to is
    // obsolete or implement some other well defined semantics.
    // TODO We need to decide on & implement semantics for JNI jmethodids when we redefine methods.
-   int32_t cnt = 0;
+   counter = 0;
    for (Redefiner::ClassRedefinition& redef : redefinitions_) {
      art::ScopedAssertNoThreadSuspension nts("Updating runtime objects for redefinition");
-     art::mirror::Class* klass = holder.GetMirrorClass(cnt);
-     ClassLoaderHelper::UpdateJavaDexFile(holder.GetJavaDexFile(cnt),
-                                          holder.GetNewDexFileCookie(cnt));
+     if (holder.GetSourceClassLoader(counter) != nullptr) {
+       ClassLoaderHelper::UpdateJavaDexFile(holder.GetJavaDexFile(counter),
+                                            holder.GetNewDexFileCookie(counter));
+     }
+     art::mirror::Class* klass = holder.GetMirrorClass(counter);
      // TODO Rewrite so we don't do a stack walk for each and every class.
      redef.FindAndAllocateObsoleteMethods(klass);
-     redef.UpdateClass(klass, holder.GetNewDexCache(cnt), holder.GetOriginalDexFileBytes(cnt));
-     cnt++;
+     redef.UpdateClass(klass, holder.GetNewDexCache(counter),
+                       holder.GetOriginalDexFileBytes(counter));
+     counter++;
    }
 -  // Ensure that obsolete methods are deoptimized. This is needed since optimized methods may have
 -  // pointers to their ArtMethod's stashed in registers that they then use to attempt to hit the
 -  // DexCache. (b/33630159)
 -  // TODO This can fail (leave some methods optimized) near runtime methods (including
 -  // quick-to-interpreter transition function).
 -  // TODO We probably don't need this at all once we have a way to ensure that the
 -  // current_art_method is never stashed in a (physical) register by the JIT and lost to the
 -  // stack-walker.
 -  EnsureObsoleteMethodsAreDeoptimized();
    // TODO Verify the new Class.
    // TODO Shrink the obsolete method maps if possible?
    // TODO find appropriate class loader.
Simple merge