Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: 2.9.2
-
Fix Version/s: 3.0
-
Component/s: Instruction Architecture: PowerPC, MMTk
-
Labels:None
-
Number of attachments :0
Description
Since enabling poisoned read/write barrier tests we are passing them nearly fully on IA32 but failing them all on PPC32 [1]. We appear to be deadlocking early in the VM.boot process.
Activity
ok. I've poked at it a little bit and I'm not going to be able to clear this up quickly.
Testing old revisions it seems that BaseBasePoisoned worked on ppc32 when poisoning was committed but FullAdaptive did not.
This is on my list to look at this soon, but naturally will not be before 2.9.3.
Would like to see some investigation of this before 3.0 if possible (pending confirmation of sanity runs on excalibur over the weekend to see if it really is still a problem).
testing on ppc64-aix. It looks like the problem occurs more or less at the same time as we are making the first JNI calls:
[piccolo:/home/dgrove/buildit/rvm-trunk] ./dist/BaseBasePoisoned_ppc64-aix/rvm -X:verboseBoot=20
Booting
Setting up static fields
Setting up current Processor
Doing thread initialization
Setting up memory manager: bootrecord = 0x0000000030000018
Initializing baseline compiler options to defaults
Fetching command-line arguments
Early stage processing of command line
Collector processing rest of boot options
Initializing bootstrap class loader: ./dist/BaseBasePoisoned_ppc64-aix/jksvm.jar:./dist/BaseBasePoisoned_ppc64-aix/rvmrt.jar
Running various class initializers
running class intializer for java.util.WeakHashMap
invoking method < BootstrapCL, Ljava/util/WeakHashMap; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.Atom$InternedStrings
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/Atom$InternedStrings; >.<clinit> ()V
running class intializer for gnu.classpath.SystemProperties
invoking method < BootstrapCL, Lgnu/classpath/SystemProperties; >.<clinit> ()V
running class intializer for java.lang.Throwable$StaticData
invoking method < BootstrapCL, Ljava/lang/Throwable$StaticData; >.<clinit> ()V
running class intializer for java.lang.Runtime
invoking method < BootstrapCL, Ljava/lang/Runtime; >.<clinit> ()V
running class intializer for java.lang.System
invoking method < BootstrapCL, Ljava/lang/System; >.<clinit> ()V
running class intializer for sun.misc.Unsafe
invoking method < BootstrapCL, Lsun/misc/Unsafe; >.<clinit> ()V
running class intializer for java.lang.Character
invoking method < BootstrapCL, Ljava/lang/Character; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.TypeReferenceVector
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/TypeReferenceVector; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.MethodVector
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/MethodVector; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.FieldVector
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/FieldVector; >.<clinit> ()V
running class intializer for java.lang.ThreadGroup
invoking method < BootstrapCL, Ljava/lang/ThreadGroup; >.<clinit> ()V
running class intializer for java.lang.ThreadLocal
invoking method < BootstrapCL, Ljava/lang/ThreadLocal; >.<clinit> ()V
running class intializer for java.lang.ThreadLocalMap
invoking method < BootstrapCL, Ljava/lang/ThreadLocalMap; >.<clinit> ()V
running class intializer for java.security.VMAccessController
invoking method < BootstrapCL, Ljava/security/VMAccessController; >.<clinit> ()V
Booting Lock
Booting scheduler
Setting up boot thread
Initializing JNI for boot thread
running class intializer for java.io.File
invoking method < BootstrapCL, Ljava/io/File; >.<clinit> ()V
running class intializer for java.lang.String
invoking method < BootstrapCL, Ljava/lang/String; >.<clinit> ()V
running class intializer for gnu.java.security.provider.DefaultPolicy
invoking method < BootstrapCL, Lgnu/java/security/provider/DefaultPolicy; >.<clinit> ()V
running class intializer for java.net.URL
invoking method < BootstrapCL, Ljava/net/URL; >.<clinit> ()V
running class intializer for java.net.URLClassLoader
invoking method < BootstrapCL, Ljava/net/URLClassLoader; >.<clinit> ()V
running class intializer for java.net.URLConnection
invoking method < BootstrapCL, Ljava/net/URLConnection; >.<clinit> ()V
running class intializer for gnu.java.net.protocol.jar.Connection$JarFileCache
invoking method < BootstrapCL, Lgnu/java/net/protocol/jar/Connection$JarFileCache; >.<clinit> ()V
running class intializer for java.lang.ClassLoader$StaticData
invoking method < BootstrapCL, Ljava/lang/ClassLoader$StaticData; >.<clinit> ()V
running class intializer for java.lang.Class$StaticData
invoking method < BootstrapCL, Ljava/lang/Class$StaticData; >.<clinit> ()V
running class intializer for java.nio.charset.Charset
has no clinit method
running class intializer for java.nio.charset.CharsetEncoder
invoking method < BootstrapCL, Ljava/nio/charset/CharsetEncoder; >.<clinit> ()V
running class intializer for java.nio.charset.CoderResult
invoking method < BootstrapCL, Ljava/nio/charset/CoderResult; >.<clinit> ()V
running class intializer for java.io.PrintWriter
invoking method < BootstrapCL, Ljava/io/PrintWriter; >.<clinit> ()V
running class intializer for java.io.PrintStream
invoking method < BootstrapCL, Ljava/io/PrintStream; >.<clinit> ()V
running class intializer for java.util.Locale
invoking method < BootstrapCL, Ljava/util/Locale; >.<clinit> ()V
running class intializer for java.util.ResourceBundle
invoking method < BootstrapCL, Ljava/util/ResourceBundle; >.<clinit> ()V
running class intializer for java.util.zip.CRC32
invoking method < BootstrapCL, Ljava/util/zip/CRC32; >.<clinit> ()V
running class intializer for java.util.zip.Inflater
invoking method < BootstrapCL, Ljava/util/zip/Inflater; >.<clinit> ()V
running class intializer for java.util.zip.DeflaterHuffman
invoking method < BootstrapCL, Ljava/util/zip/DeflaterHuffman; >.<clinit> ()V
running class intializer for java.util.zip.InflaterDynHeader
invoking method < BootstrapCL, Ljava/util/zip/InflaterDynHeader; >.<clinit> ()V
running class intializer for java.util.zip.InflaterHuffmanTree
invoking method < BootstrapCL, Ljava/util/zip/InflaterHuffmanTree; >.<clinit> ()V
Running late class initializers
[piccolo:/home/dgrove/buildit/rvm-trunk] ./dist/BaseBasePoisoned_ppc64-aix/rvm -X:verboseBoot=20
Booting
Setting up static fields
Setting up current Processor
Doing thread initialization
Setting up memory manager: bootrecord = 0x0000000030000018
Initializing baseline compiler options to defaults
Fetching command-line arguments
Early stage processing of command line
Collector processing rest of boot options
Initializing bootstrap class loader: ./dist/BaseBasePoisoned_ppc64-aix/jksvm.jar:./dist/BaseBasePoisoned_ppc64-aix/rvmrt.jar
Running various class initializers
running class intializer for java.util.WeakHashMap
invoking method < BootstrapCL, Ljava/util/WeakHashMap; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.Atom$InternedStrings
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/Atom$InternedStrings; >.<clinit> ()V
running class intializer for gnu.classpath.SystemProperties
invoking method < BootstrapCL, Lgnu/classpath/SystemProperties; >.<clinit> ()V
running class intializer for java.lang.Throwable$StaticData
invoking method < BootstrapCL, Ljava/lang/Throwable$StaticData; >.<clinit> ()V
running class intializer for java.lang.Runtime
invoking method < BootstrapCL, Ljava/lang/Runtime; >.<clinit> ()V
running class intializer for java.lang.System
invoking method < BootstrapCL, Ljava/lang/System; >.<clinit> ()V
running class intializer for sun.misc.Unsafe
invoking method < BootstrapCL, Lsun/misc/Unsafe; >.<clinit> ()V
running class intializer for java.lang.Character
invoking method < BootstrapCL, Ljava/lang/Character; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.TypeReferenceVector
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/TypeReferenceVector; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.MethodVector
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/MethodVector; >.<clinit> ()V
running class intializer for org.jikesrvm.classloader.FieldVector
invoking method < BootstrapCL, Lorg/jikesrvm/classloader/FieldVector; >.<clinit> ()V
running class intializer for java.lang.ThreadGroup
invoking method < BootstrapCL, Ljava/lang/ThreadGroup; >.<clinit> ()V
running class intializer for java.lang.ThreadLocal
invoking method < BootstrapCL, Ljava/lang/ThreadLocal; >.<clinit> ()V
running class intializer for java.lang.ThreadLocalMap
invoking method < BootstrapCL, Ljava/lang/ThreadLocalMap; >.<clinit> ()V
running class intializer for java.security.VMAccessController
invoking method < BootstrapCL, Ljava/security/VMAccessController; >.<clinit> ()V
Booting Lock
Booting scheduler
Setting up boot thread
Initializing JNI for boot thread
running class intializer for java.io.File
invoking method < BootstrapCL, Ljava/io/File; >.<clinit> ()V
running class intializer for java.lang.String
invoking method < BootstrapCL, Ljava/lang/String; >.<clinit> ()V
running class intializer for gnu.java.security.provider.DefaultPolicy
invoking method < BootstrapCL, Lgnu/java/security/provider/DefaultPolicy; >.<clinit> ()V
running class intializer for java.net.URL
invoking method < BootstrapCL, Ljava/net/URL; >.<clinit> ()V
running class intializer for java.net.URLClassLoader
invoking method < BootstrapCL, Ljava/net/URLClassLoader; >.<clinit> ()V
running class intializer for java.net.URLConnection
invoking method < BootstrapCL, Ljava/net/URLConnection; >.<clinit> ()V
running class intializer for gnu.java.net.protocol.jar.Connection$JarFileCache
invoking method < BootstrapCL, Lgnu/java/net/protocol/jar/Connection$JarFileCache; >.<clinit> ()V
running class intializer for java.lang.ClassLoader$StaticData
invoking method < BootstrapCL, Ljava/lang/ClassLoader$StaticData; >.<clinit> ()V
running class intializer for java.lang.Class$StaticData
invoking method < BootstrapCL, Ljava/lang/Class$StaticData; >.<clinit> ()V
running class intializer for java.nio.charset.Charset
has no clinit method
running class intializer for java.nio.charset.CharsetEncoder
invoking method < BootstrapCL, Ljava/nio/charset/CharsetEncoder; >.<clinit> ()V
running class intializer for java.nio.charset.CoderResult
invoking method < BootstrapCL, Ljava/nio/charset/CoderResult; >.<clinit> ()V
running class intializer for java.io.PrintWriter
invoking method < BootstrapCL, Ljava/io/PrintWriter; >.<clinit> ()V
running class intializer for java.io.PrintStream
invoking method < BootstrapCL, Ljava/io/PrintStream; >.<clinit> ()V
running class intializer for java.util.Locale
invoking method < BootstrapCL, Ljava/util/Locale; >.<clinit> ()V
running class intializer for java.util.ResourceBundle
invoking method < BootstrapCL, Ljava/util/ResourceBundle; >.<clinit> ()V
running class intializer for java.util.zip.CRC32
invoking method < BootstrapCL, Ljava/util/zip/CRC32; >.<clinit> ()V
running class intializer for java.util.zip.Inflater
invoking method < BootstrapCL, Ljava/util/zip/Inflater; >.<clinit> ()V
running class intializer for java.util.zip.DeflaterHuffman
invoking method < BootstrapCL, Ljava/util/zip/DeflaterHuffman; >.<clinit> ()V
running class intializer for java.util.zip.InflaterDynHeader
invoking method < BootstrapCL, Ljava/util/zip/InflaterDynHeader; >.<clinit> ()V
running class intializer for java.util.zip.InflaterHuffmanTree
invoking method < BootstrapCL, Ljava/util/zip/InflaterHuffmanTree; >.<clinit> ()V
Running late class initializers
[Dynamic-linking native method org.jikesrvm.runtime.DynamicLibrary.runJNI_OnLoad (Lorg/vmmagic/unboxed/Address;)I
JikesRVM: WARNING: Virtual processor has ignored timer interrupt for 5000 ms.
This may indicate that a blocking system call has occured and the VM is deadlocked
.......
The bug manifests as a SIGSEGV (hard crash) on ppc64-linux.
It's happening in the first JNI function that's invoked from the first native method we invoke (OnLoad in GNU Classpath's jcl.c):
JNIEXPORT jint JNICALL
JNI_OnLoad (JavaVM *vm, void *reserved _attribute_((unused)))
{
JNIEnv *env;
void *envp;
if ((*vm)->GetEnv (vm, &envp, JNI_VERSION_1_4) != JNI_OK)
{ return JNI_VERSION_1_4; } env = (JNIEnv *) envp;
#if SIZEOF_VOID_P == 8
/** we get to here successfully */
rawDataClass = (*env)->FindClass (env, "gnu/classpath/Pointer64");
/** we segfault before we get to here */
if (rawDataClass != NULL)
rawDataClass = (*env)->NewGlobalRef (env, rawDataClass);
Poisoned is ok on PPC32-OSX, this issue seems related to AIX so I think Dave will be the only one able to fix it.
I am looking at this, but it also fails on ppc-linux, so it is not AIX specific.
Fixed in r14839.
Leaving open for Dave to double check the change (and confirm it is being included in 3.0) as the release is imminent.
I'd like to at least understand why this is failing even if we don't fix it before making the 2.9.3 release.