JDK-6808665 : Use486InstrsOnly aborts 32-bit VM
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs15,9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2009-02-23
  • Updated: 2023-08-16
  • Resolved: 2015-12-09
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 9
9 b103Fixed
Sub Tasks
JDK-8177133 :  
Description
Running a 32-bit x86 build with -XX:+Use486InstrsOnly aborts the VM:

$ gamma -XX:+Use486InstrsOnly -XX:+PrintMiscellaneous -XX:+Verbose -version
VM option '+Use486InstrsOnly'
VM option '+PrintMiscellaneous'
VM option '+Verbose'
[SafePoint Polling address: 0xfd7d0000]
[Memory Serialize  Page address: 0xfd6c0000]
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/vm_version_x86_32.hpp:312
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/export/home/twisti/hotspot-comp/hotspot/src/cpu/x86/vm/vm_version_x86_32.hpp:312), pid=8233, tid=1
#  Error: assert(_cpuid_info.std_cpuid1_rax.bits.family != 0,"VM_Version not initialized")
#
# JRE version: 7.0-b47
# Java VM: OpenJDK Server VM (15.0-b01-internal-jvmg mixed mode solaris-x86 )
# An error report file with more information is saved as:
# /export/home/twisti/hotspot-comp/hotspot/hs_err_pid8233.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
Current thread is 1
Dumping core ...
Abort

Comments
URL: http://hg.openjdk.java.net/jdk9/jdk9/hotspot/rev/3ca74c930fa2 User: lana Date: 2016-01-27 21:42:23 +0000
27-01-2016

URL: http://hg.openjdk.java.net/jdk9/hs-comp/hotspot/rev/3ca74c930fa2 User: thartmann Date: 2015-12-09 12:21:56 +0000
09-12-2015

Normally we would make the flag Obsolete as it is not useful, but given this can't possibly be being used we can go straight to complete removal.
01-12-2015

CCC request for command line option removal on draft stage http://ccc.us.oracle.com/6808665
30-11-2015

This ancient code needs to be removed.
24-11-2015

ILW=Assert, Only 32-bit builds when forcing Use486InstrsOnly, none=MLH=P4
27-05-2014

EVALUATION Here is a backtrace: (dbx) where current thread: t@1 [1] _lwp_kill(0x1, 0x6, 0x80463c8, 0xfda9a6ea), at 0xfdaa1f95 [2] thr_kill(0x1, 0x6, 0x80463c8, 0xfda4a3ce), at 0xfda9a70c [3] raise(0x6, 0x0, 0x8046418, 0xfda2188a), at 0xfda4a3da [4] abort(0x6, 0xfee23e04, 0xfe76d6bc, 0x8040031, 0xfe389d64, 0xfeefa300), at 0xfda218aa =>[5] os::abort(dump_core = true), line 1810 in "os_solaris.cpp" [6] VMError::report_and_die(this = 0x804659c), line 831 in "vmError.cpp" [7] report_assertion_failure(file_name = 0xfe9c037a "/export/home/twisti/hotspot-comp/hotspot/src/cpu/x86/vm/vm_version_x86_32.hpp", line_no = 312, message = 0xfe9c03c8 "assert(_cpuid_info.std_cpuid1_rax.bits.family != 0,"VM_Version not initialized")"), line 173 in "debug.cpp" [8] VM_Version::assert_is_initialized(), line 312 in "vm_version_x86_32.hpp" [9] VM_Version::is_amd(), line 333 in "vm_version_x86_32.hpp" [10] VM_Version::supports_mmx_ext(), line 386 in "vm_version_x86_32.hpp" [11] VM_Version::get_processor_features(), line 266 in "vm_version_x86_32.cpp" [12] VM_Version::initialize(), line 471 in "vm_version_x86_32.cpp" [13] VM_Version_init(), line 207 in "vm_version.cpp" [14] init_globals(), line 89 in "init.cpp" [15] Threads::create_vm(args = 0x8046c3c, canTryAgain = 0x8046c0f), line 2915 in "thread.cpp" [16] JNI_CreateJavaVM(vm = 0x80474c0, penv = 0x80474bc, args = 0x8046c3c), line 3253 in "jni.cpp" [17] InitializeJVM(pvm = 0x80474c0, penv = 0x80474bc, ifn = 0x8047490), line 1082 in "java.c" [18] main(argc = 1, argv = 0x80474f8), line 330 in "java.c" The reason is that printing the features string calls is_amd() which calls assert_is_initialized(). But when Use486InstrsOnly is used getPsrInfo_stub() is not called: if (!Use486InstrsOnly) { // Get raw processor info getPsrInfo_stub(&_cpuid_info);
23-02-2009