Fwd: Report a bug in HotSpot (original) (raw)
Krystal Mo krystal.mo at oracle.com
Mon Nov 26 10:29:56 PST 2012
- Previous message: Official reviewer needed: Review request for fix for 7200297: agent code does not handle multiple dll_dir paths correctly
- Next message: Fwd: Report a bug in HotSpot
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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)
- Previous message: Official reviewer needed: Review request for fix for 7200297: agent code does not handle multiple dll_dir paths correctly
- Next message: Fwd: Report a bug in HotSpot
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]