From f6d40077568ea7443e5202bb39062d468b1680d2 Mon Sep 17 00:00:00 2001 From: skybber Date: Sat, 3 Dec 2016 12:07:09 +0100 Subject: [PATCH] Fix problem with java8 breakpoints Jvmti GetLoadedClasses collects classes from classloaders in java8 while java7 collects it from SystemDictionary. Dcevm7/8 holds only new classes in Dictionary while classloader holds all versions including old one. Therefore dcevm8 must return only new version in jvmti getLoadedClasses. --- .../jvmti-getLoadedClasses-java8.patch | 19 +++++++++++++++++++ hotspot/.hg/patches/series | 1 + 2 files changed, 20 insertions(+) create mode 100644 hotspot/.hg/patches/jvmti-getLoadedClasses-java8.patch diff --git a/hotspot/.hg/patches/jvmti-getLoadedClasses-java8.patch b/hotspot/.hg/patches/jvmti-getLoadedClasses-java8.patch new file mode 100644 index 00000000..cde459da --- /dev/null +++ b/hotspot/.hg/patches/jvmti-getLoadedClasses-java8.patch @@ -0,0 +1,19 @@ +diff --git a/src/share/vm/prims/jvmtiGetLoadedClasses.cpp b/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +index 70aede5..381868b 100644 +--- a/src/share/vm/prims/jvmtiGetLoadedClasses.cpp ++++ b/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +@@ -42,7 +42,13 @@ + + void do_klass(Klass* k) { + // Collect all jclasses +- _classStack.push((jclass) _env->jni_reference(k->java_mirror())); ++ // DCEVM : LoadedClassesClosure in dcevm7 iterates over classes from SystemDictionary therefore the class "k" is always ++ // the new version (SystemDictionary stores only new versions). But the LoadedClassesClosure's functionality was ++ // changed in java8 where jvmtiLoadedClasses collects all classes from all classloaders, therefore we ++ // must use new versions only. ++ if (k->new_version()==NULL) { ++ _classStack.push((jclass) _env->jni_reference(k->java_mirror())); ++ } + } + + int extract(jclass* result_list) { diff --git a/hotspot/.hg/patches/series b/hotspot/.hg/patches/series index 0dd5cc48..0d9ce3bb 100644 --- a/hotspot/.hg/patches/series +++ b/hotspot/.hg/patches/series @@ -49,6 +49,7 @@ light-jdk8u20-b22.patch #+light-jdk8u20-b22 #+light-jdk8u31-b13 light-jdk8u40-b25.patch #+light-jdk8u40-b25 #+light-jdk8u45-b14 #+light-jdk8u51-b16 light-jdk8u66-b17.patch #+light-jdk8u66-b17 #+light-jdk8u74-b02 light-jdk8u92-b14.patch #+light-jdk8u92-b14 #+light-jdk8u102-b31 #+light-jdk8u111-b14 #+light-jdk8u112-b16 +jvmti-getLoadedClasses-java8.patch #+light-jdk8u112-b16 light-jdk8u20-deopt-cp.patch #+light-jdk8u20-b22 #+light-jdk8u31-b13 #+light-jdk8u40-b25 #+light-jdk8u45-b14 #+light-jdk8u51-b16 light-jdk8u66-b17-deopt-cp.patch #+light-jdk8u66-b17 #+light-jdk8u74-b02 #+light-jdk8u92-b14 #+light-jdk8u102-b31 #+light-jdk8u111-b14 #+light-jdk8u112-b16 dont-clear-f1.patch #+light-jdk8u74-b02 #+light-jdk8u92-b14 #+light-jdk8u102-b31 #+light-jdk8u111-b14 #+light-jdk8u112-b16 -- 2.39.5