JDK-6973308 : Missing zero length check before repne scas in check_klass_subtype_slow_path()
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs12
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: solaris_10
  • CPU: sparc
  • Submitted: 2010-07-29
  • Updated: 2011-04-23
  • Resolved: 2011-04-23
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7 Other
6u21pFixed 7Fixed hs19Fixed
Description
Z flag value will not be set by 'repne' if RCX == 0 since 'repne' does not change flags.

Setting Z = 1 before repne_scanl() in check_klass_subtype_slow_path():

     // pointer were to sneak in here.  Note that we have already loaded the
     // Klass::super_check_offset from the super_klass in the fast path,
     // so if there is a null in that register, we are already in the afterlife.
+    push(rax);
+    xorq(rax,rax); // Set Z = 1
+    pop(rax);
     repne_scanl();

will cause next exception:

% java -Xmx128M -jar GCBasher.jar -time:300
Exception in thread "main" java.lang.IncompatibleClassChangeError
        at java.lang.StringCoding$StringDecoder.decode(StringCoding.java:153)
        at java.lang.StringCoding.decode(StringCoding.java:193)
        at java.lang.String.<init>(String.java:452)
        at java.util.jar.Attributes.read(Attributes.java:418)
        at java.util.jar.Manifest.read(Manifest.java:199)
        at java.util.jar.Manifest.<init>(Manifest.java:69)
        at java.util.jar.JarFile.getManifestFromReference(JarFile.java:177)
        at java.util.jar.JarFile.getManifest(JarFile.java:163)
j

Comments
EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-rt/hotspot/rev/66c5dadb4d61
14-08-2010

PUBLIC COMMENTS Instead of checking RCX for zero set Z = 0 (not equal) before 'repne' to indicate that class was not found when RCX == 0. Verify r12_heapbase even in zero based case- these changes exposed this bug. Also fixed printed free stack size in hs_err files. Added ability to abort VM only on the exception with specific message.
30-07-2010

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/66c5dadb4d61
30-07-2010