JDK-5063219 : JVM crashes at reg_split.cpp during heavy load test in 1.5b55 on Itenium2
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 5.0
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: linux_redhat_3.0
  • CPU: x86
  • Submitted: 2004-06-15
  • Updated: 2004-07-20
  • Resolved: 2004-07-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.
Other
5.0 b59Fixed
Related Reports
Relates :  
Description
When heavy load test applies to JVM(1.5b55), it crashes at register allocation.

REPRODUCE :

  1) Compile the attached program

  
---- Test.java ---->

class Test{

    static void goToHeaven(double arg){

      StringBuffer buf = new StringBuffer();

      if (arg < 0.0d){
         buf.append('-');
         arg = -arg;
      }

      int i3 = (int)(arg * 2.0d);

      buf.append(i3);

    }

    public static void main(String[] args){

    // force compilation
      (new StringBuffer()).append(1);

    // Now, go to heaven
       goToHeaven(0.5);

    }

}

<------------------

  
2) Launch the java or java_g command with options,  
    -Xcomp and -XX:-BackgroundCompilation

    ex.
      "java -Xcomp  -XX:-BackgroundCompilation Test"


  You will see the following crash message.

2-1) java command

#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  SIGSEGV (0xb) at pc=0x2000000001089ca0, pid=9001, tid=2305843011035756752
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.5.0-beta3-b55 compiled mode)
# Problematic frame:
# V  [libjvm.so+0xd7dca0]
#
# An error report file with more information is saved as hs_err_pid9001.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp



2-2) java_g command

# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/reg_split.cpp:802]
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  Internal Error (/BUILD_AREA/jdk1.5.0/hotspot/src/share/vm/opto/reg_split.cpp, 802), pid=9024, tid=230584301105253
3968
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.5.0-beta3-b55-debug compiled mode)
#
# Error: assert(def != __null,"Using Undefined Value in Split()
")
# An error report file with more information is saved as hs_err_pid9024.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#


CONFIGURATION ;

   OS  : RedHat Enterprise Linux AS 3.0
   JRE : 1.5b55

java version "1.5.0-beta3"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta3-b55)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0-beta3-b55, compiled mode)



===============================================================================

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: tiger-rc FIXED IN: tiger-rc INTEGRATED IN: tiger-b59 tiger-rc
08-09-2004

SUGGESTED FIX See PRT webrev: http://analemma.sfbay.sun.com/net/prt-archiver.sfbay/export2/archived_workspaces/main/c2_baseline/2004/20040714093444.rasbold.c2_baseline/workspace/webrevs/webrev-2004.07.14/index.html ###@###.### 2004-07-14 --------------------------------
14-07-2004

EVALUATION I tested Tadayuki's fix and it does seem to fix the bug... ###@###.### 2004-06-22 Tadayuki's fix changes a very fundamental portion of the register allocator, and it seems unlikely to be the root cause of the problem ###@###.### 2004-06-23 Chuck discovered the root of this problem, it seems when computing degrees the resulting value was saved in a unsigned 8 bit integer, but it was possible to wrap that value (as was the case in this bug). Changing the return value to an integer fixes this. ###@###.### 2004-06-30 In compute_degree() in ifg.cpp, the value returned is an int, but due to an oversight in the MAX cleanup of 2001, the returned value is intermediately saved in an unsigned char. This may cause truncation of the return value. In the case of the test program, during compilation of goToHeaven, the result of a specific call to compute_degree() results in a value of 64 instead of 320. Because of this, conservative coalescing does some non-conservative work, which results in an unexpected split soon after. We currently compress the uf map without updating the liveout vectors because such splits of conservative unions should not happen. ###@###.### 2004-06-30
30-06-2004