[Bcc'ing jdk7-dev.]

On Mar 23, 2011, at 4:10 PM, Stefanie Tellex wrote:
> Hi,
> 
> Not sure if this is the right place to report this,

The right list would be:  hotspot-...@openjdk.java.net

> but I have a Java program that reliably seg faults the JVM when run under 
> GDB.   It doesn't seem to happen (quickly) when I run it without gdb.  It 
> also doesn't seem to happen if I turn off the JIT, although the original seg 
> fault that triggered this (part of a much larger program) would still happen 
> with the JIT turned off, although it took longer.
> 
> The program is attached, and the command I am running is this:
> 
> gdb --args $JAVA_HOME/jre/bin/java -classpath . Test
> 
> The java program loops forever.  It gets through about 10 iterations and then 
> seg faults with this backtrace:
> 
> (gdb) bt
> #0  0xb4192300 in ?? ()
> Cannot access memory at address 0x234

What you are seeing is that compiled code uses various signals for different 
things, like implicit null-pointer checks.  It happens when running in GDB 
because the debugger handles such signals by default.

When you run the java command in GDB in compiled mode (-Xcomp) you will see 
something like:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x1beb70 (LWP 13690)]
0xf4e74fcc in ?? ()

Ignoring SEGSEGV signals and continuing should run the java command fine:

(gdb) handle SIGSEGV noprint
Signal        Stop      Print   Pass to program Description
SIGSEGV       No        No      Yes             Segmentation fault
(gdb) c
Continuing.
Usage: java [-options] class [args...]
...

Hope that helps.

-- Christian

> 
> 
> I also wrote a simple JNI program (attached in the tar.gz) that creates the 
> JVM and calls Test programmatically.  When I run it, it seg faults after 
> about 10 iterations, (sometimes more, sometimes fewer, every once in a while 
> it will run for quite a long time).
> (gdb) bt
> #0  0x41171329 in ?? ()
> #1  0x4107f3bd in ?? ()
> #2  0x40400dc3 in JavaCalls::call_helper(JavaValue*, methodHandle*, 
> JavaCallArguments*, Thread*) ()
>    from 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//jre/lib/i386/client/libjvm.so
> #3  0x405f2569 in os::os_exception_wrapper(void (*)(JavaValue*, 
> methodHandle*, JavaCallArguments*, Thread*), JavaValue*, methodHandle*, 
> JavaCallArguments*, Thread*) () from 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//jre/lib/i386/client/libjvm.so
> #4  0x403fe907 in JavaCalls::call(JavaValue*, methodHandle, 
> JavaCallArguments*, Thread*) ()
>    from 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//jre/lib/i386/client/libjvm.so
> #5  0x40420a73 in jni_invoke_nonstatic(JNIEnv_*, JavaValue*, _jobject*, 
> JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*) ()
>    from 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//jre/lib/i386/client/libjvm.so
> #6  0x4044b2bb in jni_NewObjectV () from 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//jre/lib/i386/client/libjvm.so
> #7  0x40471542 in checked_jni_NewObjectV () from 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//jre/lib/i386/client/libjvm.so
> #8  0x08048a71 in JNIEnv_::NewObject (this=0x806353c, clazz=0x806475c, 
> methodID=0x80eb088)
>     at /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug//include/jni.h:872
> #9  0x080488ab in jvm_test () at c/create_jvm.cxx:63
> #10 0x08048a16 in main () at c/create_jvm.cxx:116
> 
> 
> I ran the same program in valgrind and I get lots of errors about call_helper 
> doing invalid writes:
> 
> ==24756==
> ==24756== Invalid write of size 4
> ==24756==    at 0x5494416: ???
> ==24756==    by 0x548C0F6: ???
> ==24756==    by 0x548BD04: ???
> ==24756==    by 0x548BE29: ???
> ==24756==    by 0x54893BC: ???
> ==24756==    by 0x440ADC2: JavaCalls::call_helper(JavaValue*, methodHandle*, 
> JavaCallArguments*, Thread*) (in 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug/jre/lib/i386/client/libjvm.so)
> ==24756==    by 0x45FC568: os::os_exception_wrapper(void (*)(JavaValue*, 
> methodHandle*, JavaCallArguments*, Thread*), JavaValue*, methodHandle*, 
> JavaCallArguments*, Thread*) (in 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug/jre/lib/i386/client/libjvm.so)
> ==24756==    by 0x4408906: JavaCalls::call(JavaValue*, methodHandle, 
> JavaCallArguments*, Thread*) (in 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug/jre/lib/i386/client/libjvm.so)
> ==24756==    by 0x44B0A0F: JVM_DoPrivileged (in 
> /home/stefie10/Downloads/jdk7/jdk1.7.0/fastdebug/jre/lib/i386/client/libjvm.so)
> ==24756==    by 0x540E07A: 
> Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2
>  (AccessController.c:67)
> ==24756==    by 0x549571A: ???
> ==24756==    by 0x548BE29: ???
> ==24756==  Address 0xbe951754 is not stack'd, malloc'd or (recently) free'd
> 
> 
> I've reproduced this against 1.7 as well as 1.6 and 1.5.
> 
> There are some bugs that seem to refer to this problem, although they don't 
> seem to be fixed or to have reproduction instructions.
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7016961
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7016303
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7017562
> 
> Any hints would be appreciated.
> 
> Stefanie


Reply via email to