JDK-6968646 : JVM crashes with SIGFPE during startup
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs17
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2010-07-13
  • Updated: 2012-06-08
  • Resolved: 2011-03-08
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
JVM crashes on vm-x2250-05.sfbay, both linux-i586 and linux-amd64 versions when launching just a "java -version":

vm-x2250-05$ /net/sqenfs-1.sfbay/export1/comp/vm/jdk/hsx/19/pit/b04/jdk7b101/product/linux-amd64/bin/java -version
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGFPE (0x8) at pc=0x00007f4a2e348aa0, pid=9317, tid=1092385104
#
# JRE version: 7.0-b99
# Java VM: Java HotSpot(TM) 64-Bit Server VM (19.0-b04-201007090738.et151817.hs19b04 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x711aa0]
#
# An error report file with more information is saved as:
# /home/ks158143/bugs/hs_err_pid9317.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
Aborted

gdb shows the following backtrace:

Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 0x4030b950 (LWP 9958)]
0x00007f1351644aa6 in VM_Version::get_processor_features () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
(gdb) bt
#0  0x00007f1351644aa6 in VM_Version::get_processor_features ()
   from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
#1  0x00007f1351645f1d in VM_Version::initialize () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
#2  0x00007f1351644439 in VM_Version_init () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
#3  0x00007f135117a8dd in init_globals () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
#4  0x00007f13515cc6ab in Threads::create_vm () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
#5  0x00007f13511d69e1 in JNI_CreateJavaVM () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/jre/lib/amd64/server/libjvm.so
#6  0x00007f1352122b4f in JavaMain () from /net/sqenfs-1.sfbay/export1/jdk/vm/hsx/19/pit/b04/jdk7b101/fastdebug/linux-amd64/bin/../jre/lib/amd64/jli/libjli.so
#7  0x00007f135233b3f7 in start_thread () from /lib/libpthread.so.0
#8  0x00007f1351c8fbbd in clone () from /lib/libc.so.6
#9  0x0000000000000000 in ?? ()

hs_err file is attached.
Christian Thalinger encountered a bug, which looks similar on OpenSolaris:

"I get a SIGFPE with the RI on my MacBook Pro running OpenSolaris:

(dbx) where
current thread: t@1
  [1] _lwp_kill(0x1, 0x6, 0x8045cd8, 0xc84e989a), at 0xc84f1045 
  [2] thr_kill(0x1, 0x6, 0x8045cd8, 0xc849904e), at 0xc84e98bc 
  [3] raise(0x6, 0x0, 0x8045d28, 0xc847102a), at 0xc849905a 
  [4] abort(0x6, 0xc999435c, 0xc924982c, 0x8040031, 0xc8e198e4, 0xc9a7e990), at 0xc847104a 
=>[5] os::abort(dump_core = true), line 1804 in "os_solaris.cpp"
  [6] VMError::report_and_die(this = 0x80460dc), line 894 in "vmError.cpp"
  [7] JVM_handle_solaris_signal(sig = 8, info = 0x8046464, ucVoid = 0x8046264, abort_if_unrecognized = 1), line 712 in "os_solaris_x86.cpp"
  [8] signalHandler(sig = 8, info = 0x8046464, ucVoid = 0x8046264), line 4102 in "os_solaris.cpp"
  [9] __sighndlr(0x8, 0x8046464, 0x8046264, 0xc924fde0), at 0xc84ec025 
  ---- called from signal handler with signal 8 (SIGFPE) ------
  [10] VM_Version::cores_per_cpu(), line 383 in "vm_version_x86.hpp"
  [11] VM_Version::get_processor_features(), line 338 in "vm_version_x86.cpp"
  [12] VM_Version::initialize(), line 590 in "vm_version_x86.cpp"
  [13] VM_Version_init(), line 219 in "vm_version.cpp"
  [14] init_globals(), line 87 in "init.cpp"
  [15] Threads::create_vm(args = 0x8046b2c, canTryAgain = 0x8046aff), line 2951 in "thread.cpp"
  [16] JNI_CreateJavaVM(vm = 0x80473b0, penv = 0x80473ac, args = 0x8046b2c), line 3282 in "jni.cpp"
  [17] InitializeJVM(pvm = 0x80473b0, penv = 0x80473ac, ifn = 0x8047380), line 1082 in "java.c"
  [18] main(argc = 0, argv = 0x80473e8), line 330 in "java.c"
(dbx) fr 10
Current function is VM_Version::cores_per_cpu
  383           result = _cpuid_info.tpl_cpuidB1_ebx.bits.logical_cpus /
(dbx) p _cpuid_info
_cpuid_info = {
    std_max_function  = 13U
    std_vendor_name_0 = 1970169159U
    std_vendor_name_1 = 1818588270U
    std_vendor_name_2 = 1231384169U
    std_cpuid1_eax    = {
        value = 67194U
        bits  = {
            stepping   = 10U
            model      = 7U
            family     = 6U
            proc_type  = 0
            ext_model  = 1U
            ext_family = 0
        }
    }
    std_cpuid1_ebx    = {
        value = 16910336U
        bits  = {
            brand_id        = 0
            clflush_size    = 8U
            threads_per_cpu = 2U
            apic_id         = 1U
        }
    }
    std_cpuid1_ecx    = {
        value = 67691517U
        bits  = {
            sse3      = 1U
            monitor   = 1U
            vmx       = 1U
            est       = 1U
            ssse3     = 1U
            cid       = 0
            cmpxchg16 = 1U
            dca       = 0
            sse4_1    = 1U
            sse4_2    = 0
            popcnt    = 0
        }
    }
    std_cpuid1_edx    = {
        value = 3219913727U
        bits  = {
            tsc      = 1U
            cmpxchg8 = 1U
            cmov     = 1U
            mmx      = 1U
            fxsr     = 1U
            sse      = 1U
            sse2     = 1U
            ht       = 1U
        }
    }
    dcp_cpuid4_eax    = {
        value = 67109153U
        bits  = {
            cache_type    = 1U
            cores_per_cpu = 1U
        }
    }
    dcp_cpuid4_ebx    = {
        value = 29360191U
        bits  = {
            L1_line_size  = 63U
            partitions    = 0
            associativity = 7U
        }
    }
    dcp_cpuid4_ecx    = 63U
    dcp_cpuid4_edx    = 1U
    tpl_cpuidB0_eax   = 0
    tpl_cpuidB0_ebx   = {
        value = 0
        bits  = {
            logical_cpus = 0
        }
    }
    tpl_cpuidB0_ecx   = 0
    tpl_cpuidB0_edx   = 0
    tpl_cpuidB1_eax   = 0
    tpl_cpuidB1_ebx   = {
        value = 0
        bits  = {
            logical_cpus = 0
        }
    }
    tpl_cpuidB1_ecx   = 0
    tpl_cpuidB1_edx   = 0
    tpl_cpuidB2_eax   = 0
    tpl_cpuidB2_ebx   = {
        value = 0
        bits  = {
            logical_cpus = 0
        }
    }
    tpl_cpuidB2_ecx   = 0
    tpl_cpuidB2_edx   = 0
    ext_max_function  = 0
    ext_vendor_name_0 = 0
    ext_vendor_name_1 = 0
    ext_vendor_name_2 = 0
    ext_cpuid1_eax    = 0
    ext_cpuid1_ebx    = 0
    ext_cpuid1_ecx    = {
        value = 1U
        bits  = {
            LahfSahf    = 1U
            CmpLegacy   = 0
            lzcnt       = 0
            sse4a       = 0
            misalignsse = 0
            prefetchw   = 0
        }
    }
    ext_cpuid1_edx    = {
        value = 537919488U
        bits  = {
            mmx_amd   = 0
            mmx       = 0
            fxsr      = 0
            long_mode = 1U
            tdnow2    = 0
            tdnow     = 0
        }
    }
    proc_name_0       = 0
    proc_name_1       = 0
    proc_name_2       = 0
    proc_name_3       = 0
    proc_name_4       = 0
    proc_name_5       = 0
    proc_name_6       = 0
    proc_name_7       = 0
    proc_name_8       = 0
    proc_name_9       = 0
    proc_name_10      = 0
    proc_name_11      = 0
    ext_cpuid5_eax    = 0
    ext_cpuid5_ebx    = 0
    ext_cpuid5_ecx    = {
        value = 0
        bits  = {
            L1_line_size = 0
            L1_tag_lines = 0
            L1_assoc     = 0
            L1_size      = 0
        }
    }
    ext_cpuid5_edx    = {
        value = 0
        bits  = {
            L1_line_size = 0
            L1_tag_lines = 0
            L1_assoc     = 0
            L1_size      = 0
        }
    }
    ext_cpuid8_eax    = 12324U
    ext_cpuid8_ebx    = 0
    ext_cpuid8_ecx    = {
        value = 0
        bits  = {
            cores_per_cpu = 0
        }
    }
    ext_cpuid8_edx    = 0
}

Below are excerts from email exchange between Christian and Vladimir Kozlov:

Vladimir:

family 6 model 23 stepping 10  is Intel(R) Core(TM)2 Duo CPU

The problem is next (even newest cpus has it value only 11u):

>     std_max_function  = 13U

Is it possible some one stomp bits into the field (? I can't find such cpu here. Christian could you stop when cpuid assembler code is executed at the line 129 and check what value in eax?

Christian:

Sure:
 (dbx) p $eax
 $eax = 13U

Comments
EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/079980c86f33
21-07-2010

PUBLIC COMMENTS Introduced by changes for 6964774 which added cpuid processor topology code. Some cpus have max cpuid >= 11 but do not support processor topology: vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5472 @ 3.00GHz stepping : 10 cpu MHz : 2403.000 cpu cores : 4 cpuid level : 13 Solution: Check that cpuid returns valid values for processor topology (not zeros) and use old code if they are invalid.
15-07-2010

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/079980c86f33
14-07-2010