JDK-7110489 : C1: 64-bit tiered with ForceUnreachable: assert(reachable(src)) failed: Address should be reachable
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs23
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2011-11-10
  • Updated: 2012-03-22
  • Resolved: 2012-01-20
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 7 JDK 8 Other
7u4Fixed 8Fixed hs23Fixed
$ java -showversion -d64 -XX:+TieredCompilation -Xbatch -XX:+ForceUnreachable 
VM option '+TieredCompilation'
VM option '+ForceUnreachable'
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/assembler_x86.cpp:6988
# A fatal error has been detected by the Java Runtime Environment:
#  Internal Error (/home/ct232829/hsx/hotspot-comp/hotspot/src/cpu/x86/vm/assembler_x86.cpp:6988), pid=22384, tid=29
#  assert(reachable(src)) failed: Address should be reachable
# JRE version: 8.0-b11
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0-b03-internal-fastdebug mixed mode solaris-amd64 compressed oops)
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
# An error report file with more information is saved as:
# /home/ct232829/hsx/hotspot-comp/hotspot/make/hs_err_pid22384.log
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
Current thread is 29
Dumping core ...

Stack: [0xfffffd7dee12b000,0xfffffd7dee22b000],  sp=0xfffffd7dee2294f0,  free space=1017k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x1449f64]  void VMError::report(outputStream*)+0x1304
V  [libjvm.so+0x144b720]  void VMError::report_and_die()+0x9b0
V  [libjvm.so+0xc971fa]  void report_vm_error(const char*,int,const char*,const char*)+0x9a
V  [libjvm.so+0x9889c3]  void MacroAssembler::testl(RegisterImpl*,AddressLiteral)+0xa3
V  [libjvm.so+0xa5925c]  void LIR_Assembler::return_op(LIR_OprDesc*)+0x39c
V  [libjvm.so+0xa52c16]  void LIR_Assembler::emit_op1(LIR_Op1*)+0x2c6
V  [libjvm.so+0xa46bf2]  void LIR_Op1::emit_code(LIR_Assembler*)+0x22
V  [libjvm.so+0xa51bb5]  void LIR_Assembler::emit_lir_list(LIR_List*)+0x205
V  [libjvm.so+0xa51952]  void LIR_Assembler::emit_block(BlockBegin*)+0x2a2
V  [libjvm.so+0xa5164b]  void LIR_Assembler::emit_code(BlockList*)+0x7b
V  [libjvm.so+0x9facac]  int Compilation::emit_code_body()+0x1cc
V  [libjvm.so+0x9fb124]  int Compilation::compile_java_method()+0x344
V  [libjvm.so+0x9fb546]  void Compilation::compile_method()+0x126
V  [libjvm.so+0x9fbe48]  Compilation::Compilation(AbstractCompiler*,ciEnv*,ciMethod*,int,BufferBlob*)+0x348
V  [libjvm.so+0x9ff50a]  void Compiler::compile_method(ciEnv*,ciMethod*,int)+0xfa
V  [libjvm.so+0xc14c39]  void CompileBroker::invoke_compiler_on_method(CompileTask*)+0x649
V  [libjvm.so+0xc13ef1]  void CompileBroker::compiler_thread_loop()+0x4c1
V  [libjvm.so+0x13cfc58]  void compiler_thread_entry(JavaThread*,Thread*)+0x78
V  [libjvm.so+0x13c9a73]  void JavaThread::thread_main_inner()+0x1a3
V  [libjvm.so+0x13c98c1]  void JavaThread::run()+0x271
V  [libjvm.so+0x11f76d8]  java_start+0x258
C  [libc.so.1+0xd704b]  _thr_setup+0x5b
C  [libc.so.1+0xd7280]  ht_pause+0x10

EVALUATION http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/59bc0d4d9ea3

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-emb/hotspot/rev/59bc0d4d9ea3

EVALUATION 7110489: C1: 64-bit tiered with ForceUnreachable: assert(reachable(src)) failed: Address should be reachable Reviewed-by: kvn, iveresov, twisti The ForceUnreachable flag hadn't been tested broadly on x64 and in this particular failure, there's a mismatch between is_polling_page_far and reachable which causes the assertion failure. I also lowered the buffer limit of x64 too much which resulted in failures so I've raised the limit back up to 120000 for debug x64. The method handle adapters lazily generated so only actual method handles tests verify that the buffer was properly generated. I modified the JVM to force the generation during bootstrap and ran it through JPRT with +ForceUnreachable. This exposed a separate problem in the arraycopy stubs on windows where the rscratch1 (r10) is being used to preseve rsi and the increment of the copy counters can blow it away if the counter isn't reachable. I fixed this be reordering the counter updates to be after the restore of rsi.

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/59bc0d4d9ea3