Fwd: Report a bug in HotSpot

Krystal Mo krystal.mo at oracle.com
Mon Nov 26 10:29:56 PST 2012


Hi all,

Xi Yang has reported a bug in HotSpot's interpreter that it doesn't 
empty the FPU stack on return from JNI calls. His mail is included below.

e.g. If a native function called via JNI is using MMX registers without 
emptying the FPU stack before returning, then after returning to Java 
the FPU stack will be in a bad state.

The test case Xi gave is demonstrated here on JDK7u9, x86: 
https://gist.github.com/4148771
Running the example with -XX:+VerifyFPU shows what's going on.

This test case shows the bug affecting 32-bit x86 version of HotSpot's 
interpreter.

Not really familiar with how to file a bug on JBS yet, I'll file a bug 
to track this after I learn how to do it.

Regards,
Kris


-------- Original Message --------
Subject: 	Fwd: Report a bug in HotSpot
Date: 	Tue, 27 Nov 2012 02:02:59 +0800
From: 	Krystal Mok <rednaxelafx at gmail.com>
To: 	Krystal Mo <krystal.mo at oracle.com>



---------- Forwarded message ----------
From: Xi Yang <hiyangxi at gmail.com>
Date: Tue, Nov 20, 2012 at 1:44 PM
Subject: Report a bug in HotSpot
To: Krystal Mok <rednaxelafx at gmail.com>


Hi,

It looks like HotSpot does not do "emms" after backing from JNI. Here
is the code to show the bug. Would you like to try the newest version?


Hello.java
class Hello {
     private static native void abc();
     public static void main(String[] args) {
       System.out.println("I am main");
         System.loadLibrary("Hello");
         abc();
         long a = 100;
         double b = (double)a;
         System.out.println("Double a is " + b);
     }
}

Hello.c
#include <jni.h>
#include <stdio.h>

JNIEXPORT void JNICALL
Java_Hello_abc(JNIEnv *env, jclass cls)
{
   printf("I mmmmmmmmmmmmmmmmmmmmmmmmm java Helo world\n");
   unsigned int dummy;
   asm volatile("movd %%mm0, %0\n":"=r"(dummy));
   printf("dummy is %x\n", dummy);
}


gcc -m32 -shared   ./Hello.c -o ./libHello.so


/opt/jdk1.7.0/bin/java -Djava.library.path=. Hello
I am main
I mmmmmmmmmmmmmmmmmmmmmmmmm java Helo world
dummy is 0
Double a is NaN


$ /opt/jdk1.7.0/bin/java -version
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b93)
Java HotSpot(TM) Server VM (build 18.0-b04, mixed mode)





More information about the hotspot-dev mailing list