JDK-6991512 : G1 barriers fail with 64bit C1
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs20
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2010-10-12
  • Updated: 2013-08-09
  • 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
6u25Fixed 7Fixed hs20Fixed
Related Reports
Relates :  
Description
G1 barriers fail with 64bit c1 with the following symptoms:

1. On x64:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt/P1/B/164731.jcoomes/source/src/share/vm/c1/c1_LIR.hpp:401), pid=13281, tid=20
#  assert(is_single_cpu() && !is_virtual()) failed: type check
#
# JRE version: 7.0
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.0-b01-201010081647.jcoomes.gc-pull-fastdebug mixed mode solaris-amd64 )
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0000000009ad9800):  JavaThread "C1 CompilerThread2" daemon [_thread_in_native, id=20, stack(0xfffffd7f6bb43000,0xfffffd7f6bc43000)]

Stack: [0xfffffd7f6bb43000,0xfffffd7f6bc43000],  sp=0xfffffd7f6bc411a0,  free space=1016k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x2485615];;  __1cHVMErrorGreport6MpnMoutputStream__v_+0x6c5
V  [libjvm.so+0x24866bc];;  __1cHVMErrorOreport_and_die6M_v_+0x4d8
V  [libjvm.so+0xde50a7];;  __1cPreport_vm_error6Fpkci11_v_+0x55f
V  [libjvm.so+0x88778d];;  __1cLLIR_OprDescLas_register6kM_pnMRegisterImpl__+0x6d5
V  [libjvm.so+0x80075a];;  __1cRG1PostBarrierStubJemit_code6MpnNLIR_Assembler__v_+0xb2
V  [libjvm.so+0x8c38b5];;  __1cNLIR_AssemblerUemit_slow_case_stubs6M_v_+0x16d
V  [libjvm.so+0x807f7c];;  __1cLCompilationOemit_code_body6M_i_+0x134
V  [libjvm.so+0x808b77];;  __1cLCompilationTcompile_java_method6M_i_+0xa73
V  [libjvm.so+0x80a787];;  __1cLCompilation2t6MpnQAbstractCompiler_pnFciEnv_pnIciMethod_ipnKBufferBlob__v_+0x3df
V  [libjvm.so+0x80c69a];;  __1cICompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_+0x27e
V  [libjvm.so+0xc6fe33];;  __1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_+0x18df
V  [libjvm.so+0xc6d694];;  __1cNCompileBrokerUcompiler_thread_loop6F_v_+0xeb0
V  [libjvm.so+0x23427f9];;  __1cKJavaThreadRthread_main_inner6M_v_+0x195
V  [libjvm.so+0x234244a];;  __1cKJavaThreadDrun6M_v_+0x61e
V  [libjvm.so+0x1ec02e2];;  java_start+0x6a6
C  [libc.so.1+0xd6e3b]  _thr_slot_offset+0x31b;;  _thr_setup+0x5b
C  [libc.so.1+0xd7070]  _thr_slot_offset+0x550;;  _lwp_start+0x0



2. On sparcv9:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt/P1/B/164731.jcoomes/source/src/cpu/sparc/vm/assembler_sparc.hpp:843), pid=17818, tid=20
#  assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range
#
# JRE version: 7.0
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.0-b01-201010081647.jcoomes.gc-pull-fastdebug mixed mode solaris-sparc )
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0000000109740000):  JavaThread "C1 CompilerThread2" daemon [_thread_in_native, id=20, stack(0xffffffff4b900000,0xffffffff4ba00000)]

Stack: [0xffffffff4b900000,0xffffffff4ba00000],  sp=0xffffffff4b9fe450,  free space=1017k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x12a72ec];;  __1cHVMErrorOreport_and_die6M_v_+0x734
V  [libjvm.so+0x70bbb0];;  __1cPreport_vm_error6Fpkci11_v_+0x78
V  [libjvm.so+0x221290];;  __1cJAssemblerTassert_signed_range6Fli_v_+0x70
V  [libjvm.so+0x214ee4];;  __1cJAssemblerHwdisp166Fll_i_+0x2c
V  [libjvm.so+0x314d60];;  __1cOMacroAssemblerObr_on_reg_cond6MnJAssemblerKRCondition_bn0BHPredict_pnMRegisterImpl_rnFLabel__v_+0x2f8
V  [libjvm.so+0x39fea4];;  __1cQG1PreBarrierStubJemit_code6MpnNLIR_Assembler__v_+0xe4
V  [libjvm.so+0x3ffc98];;  __1cNLIR_AssemblerKemit_stubs6MpnMCodeStubList__v_+0x138
V  [libjvm.so+0x3a41dc];;  __1cLCompilationQemit_code_epilog6MpnNLIR_Assembler__v_+0x34
V  [libjvm.so+0x3a4484];;  __1cLCompilationOemit_code_body6M_i_+0x10c
V  [libjvm.so+0x3a495c];;  __1cLCompilationTcompile_java_method6M_i_+0x414
V  [libjvm.so+0x3a4be8];;  __1cLCompilationOcompile_method6M_v_+0xb0
V  [libjvm.so+0x3a5878];;  __1cLCompilation2t6MpnQAbstractCompiler_pnFciEnv_pnIciMethod_ipnKBufferBlob__v_+0x1f8
V  [libjvm.so+0x3a8790];;  __1cICompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_+0x3b8
V  [libjvm.so+0x659ef8];;  __1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_+0x1d70
V  [libjvm.so+0x657b44];;  __1cNCompileBrokerUcompiler_thread_loop6F_v_+0xb24
V  [libjvm.so+0x11d6ffc];;  __1cKJavaThreadRthread_main_inner6M_v_+0x1a4
V  [libjvm.so+0x11d6e38];;  __1cKJavaThreadDrun6M_v_+0x248
V  [libjvm.so+0xf1dad0];;  java_start+0x300

Comments
EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/c393f046f4c5
13-10-2010

EVALUATION The first failure (on x64) is due to passing a pointer to T_LONG instead of T_OBJECT to G1 post-barrier when emitting LIR for CompareAndSwap intrinsic. The fix is to create a register with an appropriate type when CASing an object reference. The second failure (on sparc) is due to the limited jump range of branch-on-reg-value instruction. The solution is to use cmp+brx since the jump target is not guaranteed to be in 16 bit range (the target is a continuation of a stub).
12-10-2010