OpenJDK / loom / loom
changeset 505:a18cb2faf5b9
Merge
author | duke |
---|---|
date | Wed, 05 Jul 2017 16:36:48 +0200 |
parents | 2c73948e4bf3 72f298ba0165 |
children | bc3b26154039 |
files | hotspot/build/hotspot_distro hotspot/build/linux/Makefile hotspot/build/linux/Queens.class hotspot/build/linux/README hotspot/build/linux/adlc_updater hotspot/build/linux/build.sh hotspot/build/linux/makefiles/adjust-mflags.sh hotspot/build/linux/makefiles/adlc.make hotspot/build/linux/makefiles/amd64.make hotspot/build/linux/makefiles/buildtree.make hotspot/build/linux/makefiles/compiler1.make hotspot/build/linux/makefiles/compiler2.make hotspot/build/linux/makefiles/core.make hotspot/build/linux/makefiles/cscope.make hotspot/build/linux/makefiles/debug.make hotspot/build/linux/makefiles/defs.make hotspot/build/linux/makefiles/dtrace.make hotspot/build/linux/makefiles/fastdebug.make hotspot/build/linux/makefiles/gcc.make hotspot/build/linux/makefiles/hp.make hotspot/build/linux/makefiles/hp1.make hotspot/build/linux/makefiles/i486.make hotspot/build/linux/makefiles/jsig.make hotspot/build/linux/makefiles/jvmg.make hotspot/build/linux/makefiles/jvmti.make hotspot/build/linux/makefiles/launcher.make hotspot/build/linux/makefiles/makedeps.make hotspot/build/linux/makefiles/mapfile-vers-debug hotspot/build/linux/makefiles/mapfile-vers-jsig hotspot/build/linux/makefiles/mapfile-vers-product hotspot/build/linux/makefiles/optimized.make hotspot/build/linux/makefiles/product.make hotspot/build/linux/makefiles/profiled.make hotspot/build/linux/makefiles/rules.make hotspot/build/linux/makefiles/sa.make hotspot/build/linux/makefiles/saproc.make hotspot/build/linux/makefiles/sparcWorks.make hotspot/build/linux/makefiles/tiered.make hotspot/build/linux/makefiles/top.make hotspot/build/linux/makefiles/vm.make hotspot/build/linux/platform_amd64 hotspot/build/linux/platform_amd64.suncc hotspot/build/linux/platform_i486 hotspot/build/linux/platform_i486.suncc hotspot/build/linux/platform_sparc hotspot/build/sa.files hotspot/build/solaris/Makefile hotspot/build/solaris/Queens.class hotspot/build/solaris/adlc_updater hotspot/build/solaris/build.sh hotspot/build/solaris/makefiles/adjust-mflags.sh hotspot/build/solaris/makefiles/adlc.make hotspot/build/solaris/makefiles/amd64.make hotspot/build/solaris/makefiles/buildtree.make hotspot/build/solaris/makefiles/compiler1.make hotspot/build/solaris/makefiles/compiler2.make hotspot/build/solaris/makefiles/core.make hotspot/build/solaris/makefiles/cscope.make hotspot/build/solaris/makefiles/debug.make hotspot/build/solaris/makefiles/defs.make hotspot/build/solaris/makefiles/dtrace.make hotspot/build/solaris/makefiles/fastdebug.make hotspot/build/solaris/makefiles/gcc.make hotspot/build/solaris/makefiles/hp.make hotspot/build/solaris/makefiles/hp1.make hotspot/build/solaris/makefiles/i486.make hotspot/build/solaris/makefiles/jsig.make hotspot/build/solaris/makefiles/jvmg.make hotspot/build/solaris/makefiles/jvmti.make hotspot/build/solaris/makefiles/kernel.make hotspot/build/solaris/makefiles/launcher.make hotspot/build/solaris/makefiles/makedeps.make hotspot/build/solaris/makefiles/mapfile-vers hotspot/build/solaris/makefiles/mapfile-vers-COMPILER1 hotspot/build/solaris/makefiles/mapfile-vers-COMPILER2 hotspot/build/solaris/makefiles/mapfile-vers-CORE hotspot/build/solaris/makefiles/mapfile-vers-TIERED hotspot/build/solaris/makefiles/mapfile-vers-debug hotspot/build/solaris/makefiles/mapfile-vers-jsig hotspot/build/solaris/makefiles/mapfile-vers-jvm_db hotspot/build/solaris/makefiles/mapfile-vers-jvm_dtrace hotspot/build/solaris/makefiles/mapfile-vers-nonproduct hotspot/build/solaris/makefiles/optimized.make hotspot/build/solaris/makefiles/product.make hotspot/build/solaris/makefiles/profiled.make hotspot/build/solaris/makefiles/reorder_COMPILER1_i486 hotspot/build/solaris/makefiles/reorder_COMPILER1_sparc hotspot/build/solaris/makefiles/reorder_COMPILER1_sparcv9 hotspot/build/solaris/makefiles/reorder_COMPILER2_amd64 hotspot/build/solaris/makefiles/reorder_COMPILER2_i486 hotspot/build/solaris/makefiles/reorder_COMPILER2_sparc hotspot/build/solaris/makefiles/reorder_COMPILER2_sparcv9 hotspot/build/solaris/makefiles/reorder_CORE_amd64 hotspot/build/solaris/makefiles/reorder_CORE_i486 hotspot/build/solaris/makefiles/reorder_CORE_sparc hotspot/build/solaris/makefiles/reorder_CORE_sparcv9 hotspot/build/solaris/makefiles/reorder_TIERED_amd64 hotspot/build/solaris/makefiles/reorder_TIERED_i486 hotspot/build/solaris/makefiles/reorder_TIERED_sparc hotspot/build/solaris/makefiles/rules.make hotspot/build/solaris/makefiles/sa.make hotspot/build/solaris/makefiles/saproc.make hotspot/build/solaris/makefiles/sparc.make hotspot/build/solaris/makefiles/sparcWorks.make hotspot/build/solaris/makefiles/sparcv9.make hotspot/build/solaris/makefiles/tiered.make hotspot/build/solaris/makefiles/top.make hotspot/build/solaris/makefiles/vm.make hotspot/build/solaris/platform_amd64 hotspot/build/solaris/platform_amd64.gcc hotspot/build/solaris/platform_i486 hotspot/build/solaris/platform_i486.gcc hotspot/build/solaris/platform_sparc hotspot/build/solaris/platform_sparc.gcc hotspot/build/solaris/platform_sparcv9 hotspot/build/solaris/platform_sparcv9.gcc hotspot/build/solaris/reorder.sh hotspot/build/test/Queens.java hotspot/build/windows/README hotspot/build/windows/build.bat hotspot/build/windows/build.make hotspot/build/windows/build_vm_def.sh hotspot/build/windows/create.bat hotspot/build/windows/cross_build.bat hotspot/build/windows/get_msc_ver.sh hotspot/build/windows/jvmexp.lcf hotspot/build/windows/jvmexp_g.lcf hotspot/build/windows/makefiles/adlc.make hotspot/build/windows/makefiles/compile.make hotspot/build/windows/makefiles/debug.make hotspot/build/windows/makefiles/defs.make hotspot/build/windows/makefiles/fastdebug.make hotspot/build/windows/makefiles/generated.make hotspot/build/windows/makefiles/jvmti.make hotspot/build/windows/makefiles/makedeps.make hotspot/build/windows/makefiles/product.make hotspot/build/windows/makefiles/rules.make hotspot/build/windows/makefiles/sa.make hotspot/build/windows/makefiles/sanity.make hotspot/build/windows/makefiles/shared.make hotspot/build/windows/makefiles/top.make hotspot/build/windows/makefiles/vm.make hotspot/build/windows/platform_amd64 hotspot/build/windows/platform_i486 hotspot/build/windows/projectfiles/common/Makefile hotspot/build/windows/projectfiles/compiler1/Makefile hotspot/build/windows/projectfiles/compiler1/vm.def hotspot/build/windows/projectfiles/compiler1/vm.dsw hotspot/build/windows/projectfiles/compiler2/ADLCompiler.dsp hotspot/build/windows/projectfiles/compiler2/ADLCompiler.dsw hotspot/build/windows/projectfiles/compiler2/Makefile hotspot/build/windows/projectfiles/compiler2/vm.def hotspot/build/windows/projectfiles/compiler2/vm.dsw hotspot/build/windows/projectfiles/core/Makefile hotspot/build/windows/projectfiles/core/vm.def hotspot/build/windows/projectfiles/core/vm.dsw hotspot/build/windows/projectfiles/kernel/Makefile hotspot/build/windows/projectfiles/kernel/vm.def hotspot/build/windows/projectfiles/kernel/vm.dsw hotspot/build/windows/projectfiles/tiered/ADLCompiler.dsp hotspot/build/windows/projectfiles/tiered/ADLCompiler.dsw hotspot/build/windows/projectfiles/tiered/Makefile hotspot/build/windows/projectfiles/tiered/vm.def hotspot/build/windows/projectfiles/tiered/vm.dsw hotspot/src/cpu/sparc/vm/disassembler_sparc.cpp hotspot/src/cpu/x86/vm/disassembler_x86.cpp hotspot/src/share/vm/compiler/disassemblerEnv.hpp |
diffstat | 1208 files changed, 124648 insertions(+), 88783 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags-top-repo Thu Apr 24 12:12:16 2008 -0700 +++ b/.hgtags-top-repo Wed Jul 05 16:36:48 2017 +0200 @@ -1,2 +1,3 @@ cfeea66a3fa8ca3686a7cfa2d0ce8ab0169f168d jdk7-b24 cbc8ad9dd0e085a607427ea35411990982f19a36 jdk7-b25 +9410f77cc30c604d1caf7c9fe3a57fa19e1acbe8 jdk7-b26
--- a/README-builds.html Thu Apr 24 12:12:16 2008 -0700 +++ b/README-builds.html Wed Jul 05 16:36:48 2017 +0200 @@ -1,1447 +1,1587 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - <html> -<head><title>OpenJDK Build README</title></head> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<center> - <h1>OpenJDK Build README</h1> -</center> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="introduction">Introduction</a></h2> - -<blockquote> - <p> - This README file contains build instructions for the - <a href="http://openjdk.java.net">OpenJDK</a>. - Building the source code for the - OpenJDK - requires - a certain degree of technical expertise. -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="contents">Contents</a></h2> - -<blockquote> - <ul> - <li><a href="#introduction">Introduction</a></li> - <li><a href="#MBE">Minimum Build Environments</a></li> - <li><a href="#SDBE">Specific Developer Build Environments</a></li> - <li><a href="#directories">Source Directory Structure</a> </li> - <li><a href="#building">Build Information</a> - <ul type="disc"> - <li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li> - <li><a href="#linux">Basic Linux System Setup</a> </li> - <li><a href="#solaris">Basic Solaris System Setup</a> </li> - <li><a href="#windows">Basic Windows System Setup</a> </li> - <li><a href="#dependencies">Build Dependencies</a> </li> - <ul type="disc"> - <li><a href="#bootjdk">Bootstrap JDK</a> </li> - <li><a href="#binaryplugs">Binary Plugs</a> </li> - <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li> - <li><a href="#compilers">Compilers</a> - <ul> - <li><a href="#msvc">Microsoft Visual Studio</a> </li> - <li><a href="#mssdk">Microsoft Platform SDK</a> </li> - <li><a href="#gcc">Linux gcc/binutils</a> </li> - <li><a href="#studio">Sun Studio</a> </li> - </ul> - </li> - <li>Linux and Solaris: - <ul> - <li><a href="#cups">CUPS Include files</a> </li> - </ul> - </li> - <li>Windows only: - <ul> - <li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>)</li> - <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li> - </ul> - </li> - </ul> - </ul> - </li> - <li><a href="#creating">Creating the Build</a> </li> - <li><a href="#testing">Testing the Build</a> </li> - <li><a href="#variables">Environment/Make Variables</a></li> - <li><a href="#troubleshooting">Troubleshooting</a></li> - </ul> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="MBE">Minimum Build Environments</a></h2> - -<blockquote> - <p> - This file often describes specific requirements for what we call the - "minimum build environments" (MBE) for the JDK. - Building with the MBE will generate the most compatible - bits that install on, and run correctly on, the most variations - of the same base OS and hardware architecture. - These usually represent what is often called the - least common denominator platforms. - It is understood that most developers will NOT be using these - specific platforms, and in fact creating these specific platforms - may be difficult due to the age of some of this software. - <p> - - <p> - The minimum OS and C/C++ compiler versions needed for building the - OpenJDK: - <p> - <center> - <table border="1"> - <thead> - <tr> - <th>Base OS and Architecture</th> - <th>OS</th> - <th>Compiler</th> - </tr> - </thead> - <tbody> - <tr> - <td>Linux X86 (32bit)</td> - <td>Red Hat Enterprise Linux 4 </td> - <td>gcc 4 </td> - </tr> - <tr> - <td>Linux X64 (64bit)</td> - <td>Red Hat Enterprise Linux 4 </td> - <td>gcc 4 </td> - </tr> - <tr> - <td>Solaris SPARC (32bit)</td> - <td>Solaris 10 + patches - <br> - See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads. - </td> - <td>Sun Studio 11 </td> - </tr> - <tr> - <td>Solaris SPARCV9 (64bit)</td> - <td>Solaris 10 + patches - <br> - See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads. - </td> - <td>Sun Studio 11</td> - </tr> - <tr> - <td>Solaris X86 (32bit)</td> - <td>Solaris 10 + patches - <br> - See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads. - </td> - <td>Sun Studio 11</td> - </tr> - <tr> - <td>Solaris X64 (64bit)</td> - <td>Solaris 10 + patches - <br> - See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads. - </td> - <td>Sun Studio 11</td> - </tr> - <tr> - <td>Windows X86 (32bit)</td> - <td>Windows XP</td> - <td>Microsoft Visual Studio .NET 2003 Professional</td> - </tr> - <tr> - <td>Windows X64 (64bit)</td> - <td>Windows Server 2003 - Enterprise x64 Edition</td> - <td>Microsoft Platform SDK - April 2005</td> - </tr> - </tbody> + <head> + <title>OpenJDK Build README</title> + </head> + <body style="background-color:lightcyan"> + <!-- ====================================================== --> + <table width="100%" style="background-color:white"> + <tr> + <td align="center"> + <a href="http://openjdk.java.net" border="0"> + <img alt="OpenJDK" + src="http://openjdk.java.net/images/openjdk.png" + width=256 + style="border-style: none"/> + </a> + </td> + </tr> + <tr> + <td align=center> + <h1>OpenJDK Build README</h1> + </td> + </tr> </table> - </center> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="SDBE">Specific Developer Build Environments</a></h2> - -<blockquote> - <p> - We won't be listing all the possible environments, but - we will try to provide what information we have available to us. -</blockquote> - -<h3><a name="fedora">Fedora</a></h3> - -<blockquote> - TBD -</blockquote> - -<h3><a name="debian">Debian</a></h3> - -<blockquote> - TBD -</blockquote> - -<h3><a name="ubuntu">Ubuntu</a></h3> - -<blockquote> - <p> - In addition to needing the Bootstrap JDK and the Binary Plugs, - when building on Ubuntu you will need to - make sure certain packages are installed. - In particular, certain X11 packages, make, m4, gawk, gcc 4, - binutils, cups, freetype - and alsa. - - <h4>Ubuntu 6.06</h4> - - <p> - The following list of packages for Ubuntu 6.06 is a working set that - does appear to work. - - <p> - <b>Note that it's quite possible that some of these - packages are not required, so anyone discovering that some of the - packages listed below are NOT required, - please let the - OpenJDK - team know.</b> - <p> - All the packages below can be installed with the - Synaptic Package manager provided with the base Ubuntu 6.06 release. - - <blockquote> - <ul> - <li>binutils (2.16.1cvs20060117-1ubuntu2.1)</li> - <li>cpp (4:4.0.3-1)</li> - <li>cpp-4.0 (4.0.3-1ubuntu5)</li> - <li>libfreetype6-dev</li> - <li>g++ (4:4.0.3-1)</li> - <li>g++-4.0 (4.0.3-1ubuntu5)</li> - <li>gawk (1:3.1.5-2build1)</li> - <li>gcc (4:4.0.3-1)</li> - <li>gcc-4.0 (4.0.3-1ubuntu5)</li> - <li>libasound2-dev (1.0.10-2ubuntu4)</li> - <li>libc6 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li> - <li>libc6-dev (2.3.6-0ubuntu20.4)</li> - <li>libc6-i686 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li> - <li>libcupsys2-dev (1.2.2-0ubuntu0.6.06)</li> - <li>libgcrypt11-dev (1.2.2-1)</li> - <li>libgnutls-dev (1.2.9-2ubuntu1.1)</li> - <li>libgnutls12 (1.2.9-2ubuntu1) to 1.2.9-2ubuntu1.1</li> - <li>libgpg-error-dev (1.1-4)</li> - <li>libice-dev (2:1.0.0-0ubuntu2)</li> - <li>liblockfile1 (1.06.1)</li> - <li>libopencdk8-dev (0.5.7-2)</li> - <li>libpopt-dev (1.7-5)</li> - <li>libsm-dev (2:1.0.0-0ubuntu2)</li> - <li>libstdc++6-4.0-dev (4.0.3-1ubuntu5)</li> - <li>libtasn1-2-dev (0.2.17-1ubuntu1)</li> - <li>libx11-dev (2:1.0.0-0ubuntu9)</li> - <li>libxau-dev (1:1.0.0-0ubuntu4)</li> - <li>libxaw-headers (2:1.0.1-0ubuntu3)</li> - <li>libxaw7-dev (2:1.0.1-0ubuntu3)</li> - <li>libxdmcp-dev (1:1.0.0-0ubuntu2)</li> - <li>libxext-dev (2:1.0.0-0ubuntu4)</li> - <li>libxi-dev (2:1.0.0-0ubuntu3) </li> - <li>libxmu-dev (2:1.0.0-0ubuntu3)</li> - <li>libxmu-headers (2:1.0.0-0ubuntu3)</li> - <li>libxmuu-dev (2:1.0.0-0ubuntu3)</li> - <li>libxp-dev (6.8.2-11ubuntu2)</li> - <li>libxpm-dev (1:3.5.4.2-0ubuntu3)</li> - <li>libxrandr-dev (1:1.1.0.2-0ubuntu4)</li> - <li>libxt-dev (1:1.0.0-0ubuntu3)</li> - <li>libxtrap-dev (2:1.0.0-0ubuntu2)</li> - <li>libxtst-dev (2:1.0.1-0ubuntu2)</li> - <li>libxv-dev (2:1.0.1-0ubuntu3)</li> - <li>linux-kernel-headers (2.6.11.2-0ubuntu18)</li> - <li>m4 (1.4.4-1)</li> - <li>make (3.80+3.81.b4-1)</li> - <li>ssl-cert (1.0.13)</li> - <li>x-dev (7.0.4-0ubuntu2)</li> - <li>x11proto-core-dev (7.0.4-0ubuntu2)</li> - <li>x11proto-input-dev (1.3.2-0ubuntu2)</li> - <li>x11proto-kb-dev (1.0.2-0ubuntu2)</li> - <li>x11proto-randr-dev (1.1.2-0ubuntu2)</li> - <li>x11proto-record-dev (1.13.2-0ubuntu2)</li> - <li>x11proto-trap-dev (3.4.3-0ubuntu2)</li> - <li>x11proto-video-dev (2.2.2-0ubuntu2)</li> - <li>x11proto-xext-dev (7.0.2-0ubuntu2)</li> - <li>xlibs-dev (7.0.0-0ubuntu45)</li> - <li>zlib1g-dev (1:1.2.3-6ubuntu4)</li> - </ul> - </blockquote> - - <h4>Ubuntu 7.04</h4> - - <p> - Using the Synaptic Package Manager, download the following - packages (double indented packages are automatically aquired - due to package dependencies): - - <blockquote> - <ul> - <li>build-essential</li> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="introduction">Introduction</a></h2> + <blockquote> + <p> + This README file contains build instructions for the + <a href="http://openjdk.java.net" target="_blank">OpenJDK</a>. + Building the source code for the + OpenJDK + requires + a certain degree of technical expertise. + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="contents">Contents</a></h2> + <blockquote> <ul> - <li>dpkg-dev</li> - <li>g++</li> - <li>g++-4.1</li> - <li>libc6-dev</li> - <li>libstdc++6.4.1-dev</li> - <li>linux-libc-dev</li> - </ul> - <li>gawk</li> - <li>m4</li> - <li>libasound2-dev</li> - <li>libcupsys2-dev</li> - <ul> - <li>libgcrypt11-dev</li> - <li>lgnutls-dev</li> - <li>libgpg-error-dev</li> - <li>liblzo-dev</li> - <li>libopencdk8-dev</li> - <li>libpopt-dev</li> - <li>libtasn1-3-dev</li> - <li>zlib1g-dev</li> - </ul> - <li>sun-java6-jdk</li> - <ul> - <li>java-common</li> - <li>libltdl3</li> - <li>odbcinst1debian1</li> - <li>sun-java6-bin</li> - <li>sun-java6-jre</li> - <li>unixodbc</li> - </ul> - <li>xlibs-dev</li> - <ul> - <li>(many)</li> - </ul> - <li>x11proto-print-dev</li> - <li>libxaw7-dev</li> - <ul> - <li>libxaw-headers</li> + <li><a href="#introduction">Introduction</a></li> + <li><a href="#MBE">Minimum Build Environments</a></li> + <li><a href="#SDBE">Specific Developer Build Environments</a></li> + <li><a href="#directories">Source Directory Structure</a> </li> + <li><a href="#building">Build Information</a> + <ul> + <li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li> + <li><a href="#linux">Basic Linux System Setup</a> </li> + <li><a href="#solaris">Basic Solaris System Setup</a> </li> + <li><a href="#windows">Basic Windows System Setup</a> </li> + <li><a href="#dependencies">Build Dependencies</a> </li> + <ul> + <li><a href="#bootjdk">Bootstrap JDK</a> </li> + <li><a href="#binaryplugs">Binary Plugs</a> </li> + <li><a href="#importjdk">Optional Import JDK</a> </li> + <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li> + <li><a href="#compilers">Compilers</a> + <ul> + <li><a href="#msvc">Microsoft Visual Studio</a> </li> + <li><a href="#mssdk">Microsoft Platform SDK</a> </li> + <li><a href="#gcc">Linux gcc/binutils</a> </li> + <li><a href="#studio">Sun Studio</a> </li> + </ul> + </li> + <li><a href="#zip">Zip and Unzip</a> </li> + <li><a href="#freetype">FreeType2 Fonts</a> </li> + <li>Linux and Solaris: + <ul> + <li><a href="#cups">CUPS Include files</a> </li> + </ul> + </li> + <li>Linux only: + <ul> + <li><a href="#alsa">ALSA files</a> </li> + </ul> + </li> + <li>Windows only: + <ul> + <li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>)</li> + <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li> + </ul> + </li> + </ul> + </ul> + </li> + <li><a href="#creating">Creating the Build</a> </li> + <li><a href="#testing">Testing the Build</a> </li> + <li><a href="#variables">Environment/Make Variables</a></li> + <li><a href="#troubleshooting">Troubleshooting</a></li> </ul> - <li>libxp-dev</li> - <li>libfreetype6-dev</li> - </ul> - </blockquote> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="directories">Source Directory Structure</a></h2> - -<blockquote> - <p> - The source code for the OpenJDK is delivered in a set of - directories: - <tt>hotspot</tt>, - <tt>langtools</tt>, - <tt>corba</tt>, - <tt>jaxws</tt>, - <tt>jaxp</tt>, - and - <tt>jdk</tt>. - The <tt>hotspot</tt> directory contains the source code and make - files for building the OpenJDK Hotspot Virtual Machine. - The <tt>langtools</tt> directory contains the source code and make - files for building the OpenJDK javac and language tools. - The <tt>corba</tt> directory contains the source code and make - files for building the OpenJDK Corba files. - The <tt>jaxws</tt> directory contains the source code and make - files for building the OpenJDK JAXWS files. - The <tt>jaxp</tt> directory contains the source code and make - files for building the OpenJDK JAXP files. - The <tt>jdk</tt> directory contains the source code and make files for - building the OpenJDK runtime libraries and misc files. - The top level <tt>Makefile</tt> - is used to build the entire OpenJDK. -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="building">Build Information</a></h2> - -<blockquote> - <p> - Building the - OpenJDK - is done with a <tt><i>gmake</i></tt> - command line and various - environment or make variable settings that direct the make rules - to where various components have been installed. - Where possible the makefiles will attempt to located the various - components in the default locations or any component specific - variable settings. - When the normal defaults fail or components cannot be found, - the various - <tt>ALT_*</tt> variables (alternates) - can be used to help the makefiles locate components. - <p> - Refer to the bash/sh/ksh setup file - <tt>jdk/make/jdk_generic_profile.sh</tt> - if you need help in setting up your environment variables. - A build could be as simple as: - <blockquote> - <pre><tt> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="MBE">Minimum Build Environments</a></h2> + <blockquote> + This file often describes specific requirements for what we call the + "minimum build environments" (MBE) for the JDK. + Building with the MBE will generate the most compatible + bits that install on, and run correctly on, the most variations + of the same base OS and hardware architecture. + These usually represent what is often called the + least common denominator platforms. + It is understood that most developers will NOT be using these + specific platforms, and in fact creating these specific platforms + may be difficult due to the age of some of this software. + <p> + The minimum OS and C/C++ compiler versions needed for building the + OpenJDK: + <p> + <table border="1"> + <thead> + <tr> + <th>Base OS and Architecture</th> + <th>OS</th> + <th>Compiler</th> + </tr> + </thead> + <tbody> + <tr> + <td>Linux X86 (32bit)</td> + <td>Red Hat Enterprise Linux 4 </td> + <td>gcc 4 </td> + </tr> + <tr> + <td>Linux X64 (64bit)</td> + <td>Red Hat Enterprise Linux 4 </td> + <td>gcc 4 </td> + </tr> + <tr> + <td>Solaris SPARC (32bit)</td> + <td>Solaris 10 + patches + <br> + See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank"> + SunSolve</a> for patch downloads. + </td> + <td>Sun Studio 11 </td> + </tr> + <tr> + <td>Solaris SPARCV9 (64bit)</td> + <td>Solaris 10 + patches + <br> + See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank"> + SunSolve</a> for patch downloads. + </td> + <td>Sun Studio 11</td> + </tr> + <tr> + <td>Solaris X86 (32bit)</td> + <td>Solaris 10 + patches + <br> + See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank"> + SunSolve</a> for patch downloads. + </td> + <td>Sun Studio 11</td> + </tr> + <tr> + <td>Solaris X64 (64bit)</td> + <td>Solaris 10 + patches + <br> + See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank"> + SunSolve</a> for patch downloads. + </td> + <td>Sun Studio 11</td> + </tr> + <tr> + <td>Windows X86 (32bit)</td> + <td>Windows XP</td> + <td>Microsoft Visual Studio .NET 2003 Professional</td> + </tr> + <tr> + <td>Windows X64 (64bit)</td> + <td>Windows Server 2003 - Enterprise x64 Edition</td> + <td>Microsoft Platform SDK - April 2005</td> + </tr> + </tbody> + </table> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="SDBE">Specific Developer Build Environments</a></h2> + <blockquote> + We won't be listing all the possible environments, but + we will try to provide what information we have available to us. + </blockquote> + <!-- ------------------------------------------------------ --> + <h3><a name="fedora">Fedora</a></h3> + <blockquote> + TBD + </blockquote> + <!-- ------------------------------------------------------ --> + <h3><a name="debian">Debian</a></h3> + <blockquote> + TBD + </blockquote> + <!-- ------------------------------------------------------ --> + <h3><a name="ubuntu">Ubuntu</a></h3> + <blockquote> + In addition to needing the Bootstrap JDK and the Binary Plugs, + when building on Ubuntu you will need to + make sure certain packages are installed. + In particular, certain X11 packages, make, m4, gawk, gcc 4, + binutils, cups, freetype + and alsa. + <!-- ------------------------------------------------------ --> + <h4>Ubuntu 6.06</h4> + <p> + The following list of packages for Ubuntu 6.06 is a working set that + does appear to work. + <p> + <b>Note that it's quite possible that some of these + packages are not required, so anyone discovering that some of the + packages listed below are NOT required, + please let the + OpenJDK + team know.</b> + <p> + All the packages below can be installed with the + Synaptic Package manager provided with the base Ubuntu 6.06 release. + <blockquote> + <ul> + <li>binutils (2.16.1cvs20060117-1ubuntu2.1)</li> + <li>cpp (4:4.0.3-1)</li> + <li>cpp-4.0 (4.0.3-1ubuntu5)</li> + <li>libfreetype6-dev</li> + <li>g++ (4:4.0.3-1)</li> + <li>g++-4.0 (4.0.3-1ubuntu5)</li> + <li>gawk (1:3.1.5-2build1)</li> + <li>gcc (4:4.0.3-1)</li> + <li>gcc-4.0 (4.0.3-1ubuntu5)</li> + <li>libasound2-dev (1.0.10-2ubuntu4)</li> + <li>libc6 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li> + <li>libc6-dev (2.3.6-0ubuntu20.4)</li> + <li>libc6-i686 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li> + <li>libcupsys2-dev (1.2.2-0ubuntu0.6.06)</li> + <li>libgcrypt11-dev (1.2.2-1)</li> + <li>libgnutls-dev (1.2.9-2ubuntu1.1)</li> + <li>libgnutls12 (1.2.9-2ubuntu1) to 1.2.9-2ubuntu1.1</li> + <li>libgpg-error-dev (1.1-4)</li> + <li>libice-dev (2:1.0.0-0ubuntu2)</li> + <li>liblockfile1 (1.06.1)</li> + <li>libopencdk8-dev (0.5.7-2)</li> + <li>libpopt-dev (1.7-5)</li> + <li>libsm-dev (2:1.0.0-0ubuntu2)</li> + <li>libstdc++6-4.0-dev (4.0.3-1ubuntu5)</li> + <li>libtasn1-2-dev (0.2.17-1ubuntu1)</li> + <li>libx11-dev (2:1.0.0-0ubuntu9)</li> + <li>libxau-dev (1:1.0.0-0ubuntu4)</li> + <li>libxaw-headers (2:1.0.1-0ubuntu3)</li> + <li>libxaw7-dev (2:1.0.1-0ubuntu3)</li> + <li>libxdmcp-dev (1:1.0.0-0ubuntu2)</li> + <li>libxext-dev (2:1.0.0-0ubuntu4)</li> + <li>libxi-dev (2:1.0.0-0ubuntu3) </li> + <li>libxmu-dev (2:1.0.0-0ubuntu3)</li> + <li>libxmu-headers (2:1.0.0-0ubuntu3)</li> + <li>libxmuu-dev (2:1.0.0-0ubuntu3)</li> + <li>libxp-dev (6.8.2-11ubuntu2)</li> + <li>libxpm-dev (1:3.5.4.2-0ubuntu3)</li> + <li>libxrandr-dev (1:1.1.0.2-0ubuntu4)</li> + <li>libxt-dev (1:1.0.0-0ubuntu3)</li> + <li>libxtrap-dev (2:1.0.0-0ubuntu2)</li> + <li>libxtst-dev (2:1.0.1-0ubuntu2)</li> + <li>libxv-dev (2:1.0.1-0ubuntu3)</li> + <li>linux-kernel-headers (2.6.11.2-0ubuntu18)</li> + <li>m4 (1.4.4-1)</li> + <li>make (3.80+3.81.b4-1)</li> + <li>ssl-cert (1.0.13)</li> + <li>x-dev (7.0.4-0ubuntu2)</li> + <li>x11proto-core-dev (7.0.4-0ubuntu2)</li> + <li>x11proto-input-dev (1.3.2-0ubuntu2)</li> + <li>x11proto-kb-dev (1.0.2-0ubuntu2)</li> + <li>x11proto-randr-dev (1.1.2-0ubuntu2)</li> + <li>x11proto-record-dev (1.13.2-0ubuntu2)</li> + <li>x11proto-trap-dev (3.4.3-0ubuntu2)</li> + <li>x11proto-video-dev (2.2.2-0ubuntu2)</li> + <li>x11proto-xext-dev (7.0.2-0ubuntu2)</li> + <li>xlibs-dev (7.0.0-0ubuntu45)</li> + <li>zlib1g-dev (1:1.2.3-6ubuntu4)</li> + </ul> + </blockquote> + <!-- ------------------------------------------------------ --> + <h4>Ubuntu 7.04</h4> + <p> + Using the Synaptic Package Manager, download the following + packages (double indented packages are automatically aquired + due to package dependencies): + <blockquote> + <ul> + <li>build-essential</li> + <ul> + <li>dpkg-dev</li> + <li>g++</li> + <li>g++-4.1</li> + <li>libc6-dev</li> + <li>libstdc++6.4.1-dev</li> + <li>linux-libc-dev</li> + </ul> + <li>gawk</li> + <li>m4</li> + <li>libasound2-dev</li> + <li>libcupsys2-dev</li> + <ul> + <li>libgcrypt11-dev</li> + <li>lgnutls-dev</li> + <li>libgpg-error-dev</li> + <li>liblzo-dev</li> + <li>libopencdk8-dev</li> + <li>libpopt-dev</li> + <li>libtasn1-3-dev</li> + <li>zlib1g-dev</li> + </ul> + <li>sun-java6-jdk</li> + <ul> + <li>java-common</li> + <li>libltdl3</li> + <li>odbcinst1debian1</li> + <li>sun-java6-bin</li> + <li>sun-java6-jre</li> + <li>unixodbc</li> + </ul> + <li>xlibs-dev</li> + <ul> + <li>(many)</li> + </ul> + <li>x11proto-print-dev</li> + <li>libxaw7-dev</li> + <ul> + <li>libxaw-headers</li> + </ul> + <li>libxp-dev</li> + <li>libfreetype6-dev</li> + </ul> + </blockquote> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="directories">Source Directory Structure</a></h2> + <blockquote> + <p> + The source code for the OpenJDK is delivered in a set of + directories: + <tt>hotspot</tt>, + <tt>langtools</tt>, + <tt>corba</tt>, + <tt>jaxws</tt>, + <tt>jaxp</tt>, + and + <tt>jdk</tt>. + The <tt>hotspot</tt> directory contains the source code and make + files for building the OpenJDK Hotspot Virtual Machine. + The <tt>langtools</tt> directory contains the source code and make + files for building the OpenJDK javac and language tools. + The <tt>corba</tt> directory contains the source code and make + files for building the OpenJDK Corba files. + The <tt>jaxws</tt> directory contains the source code and make + files for building the OpenJDK JAXWS files. + The <tt>jaxp</tt> directory contains the source code and make + files for building the OpenJDK JAXP files. + The <tt>jdk</tt> directory contains the source code and make files for + building the OpenJDK runtime libraries and misc files. + The top level <tt>Makefile</tt> + is used to build the entire OpenJDK. + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="building">Build Information</a></h2> + <blockquote> + Building the OpenJDK + is done with a <tt><i>gmake</i></tt> + command line and various + environment or make variable settings that direct the make rules + to where various components have been installed. + Where possible the makefiles will attempt to located the various + components in the default locations or any component specific + variable settings. + When the normal defaults fail or components cannot be found, + the various + <tt>ALT_*</tt> variables (alternates) + can be used to help the makefiles locate components. + <p> + Refer to the bash/sh/ksh setup file + <tt>jdk/make/jdk_generic_profile.sh</tt> + if you need help in setting up your environment variables. + A build could be as simple as: + <blockquote> + <pre><tt> bash . jdk/make/jdk_generic_profile.sh <i>gmake</i> sanity && <i>gmake</i> - </tt></pre> - </blockquote> - <p> - Of course ksh or sh would work too. - But some customization will probably be necessary. - The <tt>sanity</tt> rule will make some basic checks on build - dependencies and generate appropriate warning messages - regarding missing, out of date, or newer than expected components - found on your system. -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h3><a name="gmake">GNU make (<tt><i>gmake</i></tt>)</a></h3> - -<blockquote> - <p> - The Makefiles in the - OpenJDK - are only valid when used with the - GNU version of the utility command <tt>make</tt> - (<tt><i>gmake</i></tt>). - A few notes about using GNU make: - <ul> - <li> - In general, you need GNU make version 3.78.1 or newer. - </li> - <li> - Place the location of the GNU make binary in the <tt>PATH</tt>. - </li> - <li> - <strong>Linux:</strong> - The <tt>/usr/bin/make</tt> command should work fine for you. - </li> - <li> - <strong>Solaris:</strong> - Do NOT use <tt>/usr/bin/make</tt> on Solaris. - If your Solaris system has the software - from the Solaris Companion CD installed, - you should use <tt>gmake</tt> - which will be located in either the <tt>/opt/sfw/bin</tt> or - <tt>/usr/sfw/bin</tt> directory. - </li> - <li> + </tt></pre> + </blockquote> + <p> + Of course ksh or sh would work too. + But some customization will probably be necessary. + The <tt>sanity</tt> rule will make some basic checks on build + dependencies and generate appropriate warning messages + regarding missing, out of date, or newer than expected components + found on your system. + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h3><a name="gmake">GNU make (<tt><i>gmake</i></tt>)</a></h3> + <blockquote> + The Makefiles in the OpenJDK are only valid when used with the + GNU version of the utility command <tt>make</tt> + (<tt><i>gmake</i></tt>). + A few notes about using GNU make: + <ul> + <li> + In general, you need GNU make version 3.78.1 or newer. + </li> + <li> + Place the location of the GNU make binary in the <tt>PATH</tt>. + </li> + <li> + <strong>Linux:</strong> + The <tt>/usr/bin/make</tt> command should work fine for you. + </li> + <li> + <strong>Solaris:</strong> + Do NOT use <tt>/usr/bin/make</tt> on Solaris. + If your Solaris system has the software + from the Solaris Companion CD installed, + you should use <tt>gmake</tt> + which will be located in either the <tt>/opt/sfw/bin</tt> or + <tt>/usr/sfw/bin</tt> directory. + </li> + <li> + <strong>Windows:</strong> + Make sure you start your build inside a bash/sh/ksh shell. + <br> + <b>WARNING:</b> Watch out for make version 3.81, it may + not work due to a lack of support for drive letter paths + like <tt>C:/</tt>. See + <a href="#gmake">section on gmake</a>. + Use a 3.80 version, or find a newer + version that has this problem fixed. + The older 3.80 version of make.exe can be downloaded with this + <a href="http://cygwin.paracoda.com/release/make/make-3.80-1.tar.bz2" target="_blank"> + link</a>. + Also see the + <a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank"> + mozilla developer center</a> + on this topic. + </li> + </ul> + <p> + Information on GNU make, and access to ftp download sites, are + available on the + <a href="http://www.gnu.org/software/make/make.html" target="_blank"> + GNU make web site + </a>. + The latest source to GNU make is available at + <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank"> + ftp.gnu.org/pub/gnu/make/</a>. + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h3><a name="linux">Basic Linux System Setup</a></h3> + <blockquote> + <strong>i586 only:</strong> + The minimum recommended hardware for building the Linux version + is a Pentium class processor or better, at least 256 MB of RAM, and + approximately 1.5 GB of free disk space. + <p> + <strong>X64 only:</strong> + The minimum recommended hardware for building the Linux + version is an AMD Opteron class processor, at least 512 MB of RAM, and + approximately 4 GB of free disk space. + <p> + The build will use the tools contained in + <tt>/bin</tt> and + <tt>/usr/bin</tt> + of a standard installation of the Linux operating environment. + You should ensure that these directories are in your + <tt>PATH</tt>. + <p> + Note that some Linux systems have a habit of pre-populating + your environment variables for you, for example <tt>JAVA_HOME</tt> + might get pre-defined for you to refer to the JDK installed on + your Linux system. + You will need to unset <tt>JAVA_HOME</tt>. + It's a good idea to run <tt>env</tt> and verify the + environment variables you are getting from the default system + settings make sense for building the + OpenJDK. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="linux_checklist">Basic Linux Check List</a></h4> + <blockquote> + <ol> + <li> + Install the + <a href="#bootjdk">Bootstrap JDK</a>, set + <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>. + </li> + <li> + Install the + <a href="#binaryplugs">Binary Plugs</a>, set + <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>. + </li> + <li> + <a href="#importjdk">Optional Import JDK</a>, set + <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>. + </li> + <li> + Install or upgrade the <a href="#freetype">FreeType development + package</a>. + </li> + </ol> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h3><a name="solaris">Basic Solaris System Setup</a></h3> + <blockquote> + The minimum recommended hardware for building the + Solaris SPARC version is an UltraSPARC with 512 MB of RAM. + For building + the Solaris x86 version, a Pentium class processor or better and at + least 512 MB of RAM are recommended. + Approximately 1.4 GB of free disk + space is needed for a 32-bit build. + <p> + If you are building the 64bit version, you should + run the command "isainfo -v" to verify that you have a + 64-bit installation, it should say <tt>sparcv9</tt> or + <tt>amd64</tt>. + An additional 7 GB of free disk space is needed + for a 64-bit build. + <p> + The build uses the tools contained in <tt>/usr/ccs/bin</tt> + and <tt>/usr/bin</tt> of a standard developer or full installation of + the Solaris operating environment. + <p> + Solaris patches specific to the JDK can be downloaded from the + <a href="http://sunsolve.sun.com/show.do?target=patches/JavaSE" target="_blank"> + SunSolve JDK Solaris patches download page</a>. + You should ensure that the latest patch cluster for + your version of the Solaris operating environment has also + been installed. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="solaris_checklist">Basic Solaris Check List</a></h4> + <blockquote> + <ol> + <li> + Install the + <a href="#bootjdk">Bootstrap JDK</a>, set + <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>. + </li> + <li> + Install the + <a href="#binaryplugs">Binary Plugs</a>, set + <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>. + </li> + <li> + <a href="#importjdk">Optional Import JDK</a>, set + <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>. + </li> + <li> + Install the + <a href="#studio">Sun Studio Compilers</a>, set + <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>. + </li> + <li> + Install the + <a href="#cups">CUPS Include files</a>, set + <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>. + </li> + </ol> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h3><a name="windows">Basic Windows System Setup</a></h3> + <blockquote> + <strong>i586 only:</strong> + The minimum recommended hardware for building the 32bit or X86 + Windows version is an Pentium class processor or better, at least + 512 MB of RAM, and approximately 600 MB of free disk space. + <strong> + NOTE: The Windows 2000 build machines need to use the + file system NTFS. + Build machines formatted to FAT32 will not work + because FAT32 doesn't support case-sensitivity in file names. + </strong> + <p> + <strong>X64 only:</strong> + The minimum recommended hardware for building + the Windows X64 version is an AMD Opteron class processor, at least 1 + GB of RAM, and approximately 10 GB of free disk space. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="paths">Windows Paths</a></h4> + <blockquote> <strong>Windows:</strong> - Make sure you start your build inside a bash/sh/ksh shell. - <br> - <b>WARNING:</b> Watch out for make version 3.81, it may - not work due to a lack of support for drive letter paths - like <tt>C:/</tt>. Use a 3.80 version, or find a newer - version that has this problem fixed. - </li> - </ul> - <p> - Information on GNU make, and access to ftp download sites, are - available on the - <a href="http://www.gnu.org/software/make/make.html"> - GNU make web site - </a>. - The latest source to GNU make is available at - <a href="http://ftp.gnu.org/pub/gnu/make/">ftp.gnu.org/pub/gnu/make/</a>. -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h3><a name="linux">Basic Linux System Setup</a></h3> - -<blockquote> - <p> - <strong>i586 only:</strong> - The minimum recommended hardware for building the Linux version - is a Pentium class processor or better, at least 256 MB of RAM, and - approximately 1.5 GB of free disk space. - <p> - <strong>X64 only:</strong> - The minimum recommended hardware for building the Linux - version is an AMD Opteron class processor, at least 512 MB of RAM, and - approximately 4 GB of free disk space. - <p> - The build will use the tools contained in - <tt>/bin</tt> and - <tt>/usr/bin</tt> - of a standard installation of the Linux operating environment. - You should ensure that these directories are in your - <tt>PATH</tt>. - <p> - Note that some Linux systems have a habit of pre-populating - your environment variables for you, for example <tt>JAVA_HOME</tt> - might get pre-defined for you to refer to the JDK installed on - your Linux system. - You will need to unset <tt>JAVA_HOME</tt>. - It's a good idea to run <tt>env</tt> and verify the - environment variables you are getting from the default system - settings make sense for building the - OpenJDK. -</blockquote> - -<!-- ------------------------------------------------------ --> - -<h4><a name="linux_checklist">Basic Linux Check List</a></h4> - -<blockquote> - <ol> - <li> - Install the - <a href="#bootjdk">Bootstrap JDK</a>, set - <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>. - </li> - <li> - Install the - <a href="#binaryplugs">Binary Plugs</a>, set - <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>. - </li> - <li> - Install or upgrade the <a href="#freetype">FreeType development - package</a>. - </li> - </ol> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h3><a name="solaris">Basic Solaris System Setup</a></h3> - -<blockquote> - <p> - The minimum recommended hardware for building the - Solaris SPARC version is an UltraSPARC with 512 MB of RAM. - For building - the Solaris x86 version, a Pentium class processor or better and at - least 128 MB of RAM are recommended. - Approximately 1.4 GB of free disk - space is needed for a 32-bit build. - <p> - If you are building the 64bit version, you should - run the command "isainfo -v" to verify that you have a - 64-bit installation. - An additional 7 GB of free disk space is needed - for a 64-bit build. - <p> - The build uses the tools contained in <tt>/usr/ccs/bin</tt> - and <tt>/usr/bin</tt> of a standard developer or full installation of - the Solaris operating environment. -</blockquote> - -<!-- ------------------------------------------------------ --> - -<h4><a name="solaris_checklist">Basic Solaris Check List</a></h4> - -<blockquote> - <ol> - <li> - Install the - <a href="#bootjdk">Bootstrap JDK</a>, set - <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>. - </li> - <li> - Install the - <a href="#binaryplugs">Binary Plugs</a>, set - <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>. - </li> - <li> - Install the - <a href="#studio">Sun Studio Compilers</a>, set - <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>. - </li> - <li> - Install the - <a href="#cups">CUPS Include files</a>, set - <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>. - </li> - </ol> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h3><a name="windows">Basic Windows System Setup</a></h3> - -<blockquote> - <p> - <strong>i586 only:</strong> - The minimum recommended hardware for building the 32bit or X86 - Windows version is an Pentium class processor or better, at least - 512 MB of RAM, and approximately 600 MB of free disk space. - <strong> - NOTE: The Windows 2000 build machines need to use the - file system NTFS. - Build machines formatted to FAT32 will not work - because FAT32 doesn't support case-sensitivity in file names. - </strong> - <p> - <strong>X64 only:</strong> - The minimum recommended hardware for building - the Windows X64 version is an AMD Opteron class processor, at least 1 - GB of RAM, and approximately 10 GB of free disk space. -</blockquote> - -<!-- ------------------------------------------------------ --> - -<h4><a name="paths">Windows Paths</a></h4> - -<blockquote> - <p> - <strong>Windows:</strong> - Note that GNU make is a historic utility and is based very - heavily on shell scripting, so it does not tolerate the Windows habit - of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames. - Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and - there is always a 'short' pathname without spaces for any path that - contains spaces. - Unfortunately, this short pathname can be somewhat dynamic and the - formula is difficult to explain. - You can use <tt>cygpath</tt> utility to map pathnames with spaces - or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname - (called 'mixed'), e.g. - <tt>cygpath -s -m "<i>path</i>"</tt>. - <p> - The makefiles will try to translate any pathnames supplied - to it into the <tt>C:/</tt> style automatically. - <p> - Note that use of CYGWIN creates a unique problem with regards to - setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows - the <tt>PATH</tt> variable contains directories - separated with the ";" character (Solaris and Linux uses ":"). - With CYGWIN, it uses ":", but that means that paths like "C:/path" - cannot be placed in the CYGWIN version of <tt>PATH</tt> and - instead CYGWIN uses something like <tt>/cygdrive/c/path</tt> - which CYGWIN understands, but only CYGWIN understands. - So be careful with paths on Windows. -</blockquote> - -<!-- ------------------------------------------------------ --> - -<h4><a name="windows_checklist">Basic Windows Check List</a></h4> - -<blockquote> - <ol> - <li> - Install the - <a href="#cygwin">CYGWIN product</a>. - </li> - <li> - Install the - <a href="#bootjdk">Bootstrap JDK</a>, set - <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>. - </li> - <li> - Install the - <a href="#binaryplugs">Binary Plugs</a>, set - <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.. - </li> - <li> - Install the - <a href="#msvc">Microsoft Visual Studio .NET 2003 Professional</a> or the - <a href="#mssdk">Microsoft Platform SDK</a>. - </li> - <li> - Setup all environment variables for compilers - (see <a href="#msvc">compilers</a>). - </li> - <li> - Install - <a href="#dxsdk">Microsoft DirectX SDK</a>. - </li> - </ol> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h3><a name="dependencies">Build Dependencies</a></h3> - -<blockquote> - <p> - Depending on the platform, the - OpenJDK - build process has some basic - dependencies on components not part of the - OpenJDK - sources. - Some of these are specific to a platform, some even specific to - an architecture. - Each dependency will have a set of ALT variables that can be set - to tell the makefiles where to locate the component. - In most cases setting these ALT variables may not be necessary - and the makefiles will find defaults on the system in standard - install locations or through component specific variables. - - <h4><a name="bootjdk">Bootstrap JDK</a></h4> - - <blockquote> - <p> - All - OpenJDK - builds require access to the previously released - JDK 6, this is often called a bootstrap JDK. - The JDK 6 binaries can be downloaded from Sun's - <a href="http://java.sun.com/javase/1.6.0/download.html">JDK 6 download site</a>. - For build performance reasons - is very important that this bootstrap JDK be made available on the - local disk of the machine doing the build. - You should always set - <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt> - to point to the location of - the bootstrap JDK installation, this is the directory pathname - that contains a <tt>bin, lib, and include</tt> - It's also a good idea to also place its <tt>bin</tt> directory - in the <tt>PATH</tt> environment variable, although it's - not required. - <p> - <strong>Solaris:</strong> - Some pre-installed JDK images may be available to you in the - directory <tt>/usr/jdk/instances</tt>. - If you don't set - <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt> - the makefiles will look in that location for a JDK it can use. - </blockquote> - - <h4><a name="binaryplugs">Binary Plugs</a></h4> - - <blockquote> - <p> - Not all of the source code that makes up the JDK is available - under an open-source license. - In order to build an OpenJDK binary from source code, - you must first download and install the appropriate - binary plug bundles from the OpenJDK, go to the - <a href="http://openjdk.java.net">OpenJDK</a> site and select - the "<b>Bundles(7)</b>" link. - During the OpenJDK build process these "binary plugs" - for the encumbered components will be copied into your - resulting OpenJDK binary build image. - These binary plug files are only for the purpose of - building an OpenJDK binary. - Make sure you set - <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt> - to the root of this installation. - </blockquote> - - <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4> - - <blockquote> - <p> - See <a href="http://en.wikipedia.org/wiki/CAcert"> - www.wikipedia.org/wiki/CAcert</a> - for a better understanding of the Certificate Authority (CA). - A certificates file named "cacerts" - represents a system-wide keystore with CA certificates. - In JDK and JRE - binary bundles, the "cacerts" file contains root CA certificates from - several public CAs (e.g., VeriSign, Thawte, and Baltimore). - The source contain a cacerts file - without CA root certificates. - Formal JDK builders will need to secure - permission from each public CA and include the certificates into their - own custom cacerts file. - Failure to provide a populated cacerts file - will result in verification errors of a certificate chain during runtime. - The variable - <tt><a href="#ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt> - can be used to override the default location of the - cacerts file that will get placed in your build. - By default an empty cacerts file is provided and that should be - fine for most JDK developers. - </blockquote> - - <h4><a name="compilers">Compilers</a></h4> - - <blockquote> - - <a name="gcc"> - <strong>Linux gcc/binutils</strong> - </a> - + Note that GNU make is a historic utility and is based very + heavily on shell scripting, so it does not tolerate the Windows habit + of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames. + Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and + there is always a 'short' pathname without spaces for any path that + contains spaces. + Unfortunately, this short pathname can be somewhat dynamic and the + formula is difficult to explain. + You can use <tt>cygpath</tt> utility to map pathnames with spaces + or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname + (called 'mixed'), e.g. + <tt>cygpath -s -m "<i>path</i>"</tt>. + <p> + The makefiles will try to translate any pathnames supplied + to it into the <tt>C:/</tt> style automatically. + <p> + Note that use of CYGWIN creates a unique problem with regards to + setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows + the <tt>PATH</tt> variable contains directories + separated with the ";" character (Solaris and Linux uses ":"). + With CYGWIN, it uses ":", but that means that paths like "C:/path" + cannot be placed in the CYGWIN version of <tt>PATH</tt> and + instead CYGWIN uses something like <tt>/cygdrive/c/path</tt> + which CYGWIN understands, but only CYGWIN understands. + So be careful with paths on Windows. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="windows_checklist">Basic Windows Check List</a></h4> + <blockquote> + <ol> + <li> + Install the + <a href="#cygwin">CYGWIN product</a>. + </li> + <li> + Install the + <a href="#bootjdk">Bootstrap JDK</a>, set + <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>. + </li> + <li> + Install the + <a href="#binaryplugs">Binary Plugs</a>, set + <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.. + </li> + <li> + <a href="#importjdk">Optional Import JDK</a>, set + <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>. + </li> + <li> + Install the + <a href="#msvc">Microsoft Visual Studio .NET 2003 Professional</a> or the + <a href="#mssdk">Microsoft Platform SDK</a>. + </li> + <li> + Setup all environment variables for compilers + (see <a href="#msvc">compilers</a>). + </li> + <li> + Install + <a href="#dxsdk">Microsoft DirectX SDK</a>. + </li> + </ol> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h3><a name="dependencies">Build Dependencies</a></h3> <blockquote> - <p> - The GNU gcc compiler version should be 3.2.2 or newer. - The binutils package should be 2.11.93.0.2-11 or newer. - The compiler used should be the default compiler installed - in <tt>/usr/bin</tt>. - </blockquote> - - <strong><a name="studio">Solaris: Sun Studio</a></strong> - - <blockquote> - <p> - At a minimum, the - <a href="http://developers.sun.com/sunstudio/index.jsp"> - Sun Studio 11 Compilers</a> - (containing version 5.8 of the C and C++ compilers) is required, - with patches from the - <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access"> - SunSolve web site</a>. - <p> - Set - <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> - to point to the location of - the compiler binaries, and place this location in the <tt>PATH</tt>. - <p> - The Sun Studio Express compilers at: - <a href="http://developers.sun.com/sunstudio/downloads/express.jsp"> - Sun Studio Express Download site</a> - are also an option, although these compilers have not - been extensively used yet. - </blockquote> - - <a name="msvc"> - <strong>Windows i586: Microsoft Visual Studio .NET 2003 Professional</strong> - </a> - - <blockquote> - <p> - The 32-bit - OpenJDK - Windows build - requires Microsoft Visual Studio .NET 2003 (VS2003) Professional - Edition compiler. - The compiler and other tools are expected to reside - in the location defined by the variable <tt>VS71COMNTOOLS</tt> which - is set by the Microsoft Visual Studio .NET installer. - <p> - Once the compiler is installed, - it is recommended that you run <tt>VCVARS32.BAT</tt> - to set the compiler environment variables - <tt>MSVCDIR</tt>, - <tt>INCLUDE</tt>, - <tt>LIB</tt>, and - <tt>PATH</tt> - prior to building the - OpenJDK. - The above environment variables <b>MUST</b> be set. - <p> - The Microsoft Visual Studio .NET 2005 (VS2005) compiler - will not work at this time due to the new runtime dll - and the manifest requirements. - </blockquote> - - <a name="mssdk"> - <strong>Windows X64: Microsoft Platform SDK April 2005</strong> - </a> - - <blockquote> - <p> - On <b>X64</b>, - the Microsoft Platform Software - Development Kit (SDK), April 2005 Edition compiler, is required for - building the - OpenJDK - because it contains the C/C++ compiler. - You will need to minimally install the Core SDK and - the MDAC SDK features of this compiler. - <p> - Once the Platform SDK is installed, - it is recommended that you run <tt>SetEnv.Cmd /X64</tt> - to set the compiler environment variables - <tt>MSSDK</tt>, - <tt>MSTOOLS</tt>, - <tt>INCLUDE</tt>, - <tt>LIB</tt>, and - <tt>PATH</tt> - prior to building the - OpenJDK. - The above environment variables <b>MUST</b> be set. - <p> - Note that this compiler may say it's version is a - Microsoft Visual Studio .NET 2005 (VS2005), but be careful, - it will not match the official VS2005 product. - This Platform SDK compiler is only used on X64 builds. + Depending on the platform, the OpenJDK build process has some basic + dependencies on components not part of the OpenJDK sources. + Some of these are specific to a platform, some even specific to + an architecture. + Each dependency will have a set of ALT variables that can be set + to tell the makefiles where to locate the component. + In most cases setting these ALT variables may not be necessary + and the makefiles will find defaults on the system in standard + install locations or through component specific variables. + <!-- ------------------------------------------------------ --> + <h4><a name="bootjdk">Bootstrap JDK</a></h4> + <blockquote> + All OpenJDK builds require access to the previously released + JDK 6, this is often called a bootstrap JDK. + The JDK 6 binaries can be downloaded from Sun's + <a href="http://java.sun.com/javase/1.6.0/download.html" target="_blank">JDK 6 download site</a>. + For build performance reasons + is very important that this bootstrap JDK be made available on the + local disk of the machine doing the build. + You should always set + <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt> + to point to the location of + the bootstrap JDK installation, this is the directory pathname + that contains a <tt>bin, lib, and include</tt> + It's also a good idea to also place its <tt>bin</tt> directory + in the <tt>PATH</tt> environment variable, although it's + not required. + <p> + <strong>Solaris:</strong> + Some pre-installed JDK images may be available to you in the + directory <tt>/usr/jdk/instances</tt>. + If you don't set + <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt> + the makefiles will look in that location for a JDK it can use. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="binaryplugs">Binary Plugs</a></h4> + <blockquote> + Not all of the source code that makes up the JDK is available + under an open-source license. + This is a temporary situation and these binary plugs will be + replaced with fully open source replacements as soon as possible. + So currently, in order to build a complete OpenJDK image, + you must first download and install the appropriate + binary plug bundles for the OpenJDK, go to the + <a href="http://openjdk.java.net" target="_blank">OpenJDK</a> site and select + the "<b>Bundles(7)</b>" link and download the binaryplugs for + your particular platform. + The file downloaded is a jar file that must be extracted by running + the jar file with: + <blockquote> + <pre> + <tt><b>java -jar jdk-7-ea-plug-b<i>nn</i>-<i>os</i>-<i>arch</i>-<i>dd</i>_<i>month</i>_<i>year</i>.jar</b></tt> + </pre> + </blockquote> + A prompt will be issued for acceptance of these binary plug files. + During the OpenJDK build process these "binary plugs" + for the encumbered components will be copied into your + resulting OpenJDK binary build image. + These binary plug files are only for the purpose of + building an OpenJDK binary. + Make sure you set + <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt> + to the root of this installation. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="importjdk">Optional Import JDK</a></h4> + <blockquote> + The <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt> + setting is only needed if you are not building the entire + JDK. For example, if you have built the entire JDK once, and + wanted to avoid repeatedly building the Hotspot VM, you could + set this to the location of the previous JDK install image + and the build will copy the needed files from this import area. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4> + <blockquote> + See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank"> + http://en.wikipedia.org/wiki/Certificate_Authority</a> + for a better understanding of the Certificate Authority (CA). + A certificates file named "cacerts" + represents a system-wide keystore with CA certificates. + In JDK and JRE + binary bundles, the "cacerts" file contains root CA certificates from + several public CAs (e.g., VeriSign, Thawte, and Baltimore). + The source contain a cacerts file + without CA root certificates. + Formal JDK builders will need to secure + permission from each public CA and include the certificates into their + own custom cacerts file. + Failure to provide a populated cacerts file + will result in verification errors of a certificate chain during runtime. + The variable + <tt><a href="#ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt> + can be used to override the default location of the + cacerts file that will get placed in your build. + By default an empty cacerts file is provided and that should be + fine for most JDK developers. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="compilers">Compilers</a></h4> + <blockquote> + <strong><a name="gcc">Linux gcc/binutils</a></strong> + <blockquote> + The GNU gcc compiler version should be 3.2.2 or newer. + The binutils package should be 2.11.93.0.2-11 or newer. + The compiler used should be the default compiler installed + in <tt>/usr/bin</tt>. + <p> + Older Linux systems may require a gcc and bunutils update. + The Redhat Enterprise Advanced Server 2.1 update 2 system + is one of these systems. + RedHat Linux users can obtain this binutils package from + <a href="http://www.redhat.com" + target="_blank">Redhat web site</a>. + You will need to remove the default compiler and binutils + packages and install the required packages + into the default location on the system. + However if you have a new video card driver, like + Geforce 4 it is best to use + the same compiler as the kernel was built with to + build the new video card driver module. + So you should build the modules before making this change. + </blockquote> + <strong><a name="studio">Solaris: Sun Studio</a></strong> + <blockquote> + At a minimum, the + <a href="http://developers.sun.com/sunstudio/index.jsp" target="_blank"> + Sun Studio 11 Compilers</a> + (containing version 5.8 of the C and C++ compilers) is required, + with patches from the + <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access" target="_blank"> + SunSolve web site</a>. + <p> + Set + <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> + to point to the location of + the compiler binaries, and place this location in the <tt>PATH</tt>. + <p> + The Sun Studio Express compilers at: + <a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank"> + Sun Studio Express Download site</a> + are also an option, although these compilers have not + been extensively used yet. + </blockquote> + <strong><a name="msvc">Windows i586: Microsoft Visual Studio .NET 2003 Professional</a></strong> + <blockquote> + The 32-bit OpenJDK Windows build + requires Microsoft Visual Studio .NET 2003 (VS2003) Professional + Edition compiler. + The compiler and other tools are expected to reside + in the location defined by the variable <tt>VS71COMNTOOLS</tt> which + is set by the Microsoft Visual Studio .NET installer. + <p> + Once the compiler is installed, + it is recommended that you run <tt>VCVARS32.BAT</tt> + to set the compiler environment variables + <tt>MSVCDIR</tt>, + <tt>INCLUDE</tt>, + <tt>LIB</tt>, and + <tt>PATH</tt> + prior to building the + OpenJDK. + The above environment variables <b>MUST</b> be set. + <p> + The Microsoft Visual Studio .NET 2005 (VS2005) compiler + will not work at this time due to the new runtime dll + and the manifest requirements. + </blockquote> + <strong><a name="mssdk">Windows X64: Microsoft Platform SDK April 2005</a></strong> + <blockquote> + On <b>X64</b>, the Microsoft Platform Software + Development Kit (SDK), April 2005 Edition compiler, + is required for building the OpenJDK + because it contains the C/C++ compiler. + You will need to minimally install the Core SDK and + the MDAC SDK features of this compiler. + <p> + Once the Platform SDK is installed, + it is recommended that you run <tt>SetEnv.Cmd /X64</tt> + to set the compiler environment variables + <tt>MSSDK</tt>, + <tt>MSTOOLS</tt>, + <tt>INCLUDE</tt>, + <tt>LIB</tt>, and + <tt>PATH</tt> + prior to building the + OpenJDK. + The above environment variables <b>MUST</b> be set. + <p> + Note that this compiler may say it's version is a + Microsoft Visual Studio .NET 2005 (VS2005), but be careful, + it will not match the official VS2005 product. + This Platform SDK compiler is only used on X64 builds. + </blockquote> + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="zip">Zip and Unzip</a></h4> + <blockquote> + Version 2.2 (November 3rd 1997) or newer of the zip utility + and version 5.12 or newer of the unzip utility is needed + to build the JDK. + With Solaris, Linux, and Windows CYGWIN, the zip and unzip + utilities installed on the system should be fine. + Information and the source code for + ZIP.EXE and UNZIP.EXE is available on the + <a href="http://www.info-zip.org" + target="_blank">info-zip web site</a>. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="cups">Common UNIX Printing System (CUPS) Headers (Solaris & Linux)</a></h4> + <blockquote> + <strong>Solaris:</strong> + CUPS header files are required for building the + OpenJDK on Solaris. + The Solaris header files can be obtained by installing + the package <strong>SFWcups</strong> from the Solaris Software + Companion CD/DVD, these often will be installed into + <tt>/opt/sfw/cups</tt>. + <p> + <strong>Linux:</strong> + CUPS header files are required for building the + OpenJDK on Linux. + The Linux header files are usually available from a "cups" + development package, it's recommended that you try and use + the package provided by the particular version of Linux that + you are using. + <p> + The CUPS header files can always be downloaded from + <a href="http://www.cups.org" target="_blank">www.cups.org</a>. + The variable + <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt> + can be used to override the default location of the + CUPS Header files. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="freetype">FreeType 2</a></h4> + <blockquote> + Version 2.3 or newer of FreeType is required for building the OpenJDK. + On Unix systems required files can be available as part of your + distribution (while you still may need to upgrade them). + Note that you need development version of package that + includes both FreeType library and header files. + <p> + You can always download latest FreeType version from the + <a href="http://www.freetype.org" target="_blank">FreeType website</a>. + <p> + Makefiles will try to pick FreeType from /usr/lib and /usr/include. + In case it is installed elsewhere you will need to set environment + variables + <tt><a href="#ALT_FREETYPE_LIB_PATH">ALT_FREETYPE_LIB_PATH</a></tt> + and + <tt><a href="#ALT_FREETYPE_HEADERS_PATH">ALT_FREETYPE_HEADERS_PATH</a></tt> + to refer to place where library and header files are installed. + </blockquote> + <!-- ------------------------------------------------------ --> + <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4> + <blockquote> + <strong>Linux only:</strong> + Version 0.9.1 or newer of the ALSA files are + required for building the OpenJDK on Linux. + These Linux files are usually available from an "alsa" + of "libasound" + development package, it's highly recommended that you try and use + the package provided by the particular version of Linux that + you are using. + The makefiles will check this emit a sanity error if it is + missing or the wrong version. + <p> + In particular, older Linux systems will likely not have the + right version of ALSA installed, for example + Redhat AS 2.1 U2 and SuSE 8.1 do not include a sufficiently + recent ALSA distribution. + On rpm-based systems, you can see if ALSA is installed by + running this command: + <pre> + <tt>rpm -qa | grep alsa</tt> + </pre> + Both <tt>alsa</tt> and <tt>alsa-devel</tt> packages are needed. + <p> + If your distribution does not come with ALSA, and you can't + find ALSA packages built for your particular system, + you can try to install the pre-built ALSA rpm packages from + <a href="http://www.freshrpms.net/" target="_blank"> + <tt>www.freshrpms.net</tt></a>. + Note that installing a newer ALSA could + break sound output if an older version of ALSA was previously + installed on the system, but it will enable JDK compilation. + <blockquote> + Installation: execute as root<br> + [i586]: <code>rpm -Uv --force alsa-lib-devel-0.9.1-rh61.i386.rpm</code><br> + [x64]: <code>rpm -Uv --force alsa-lib-devel-0.9.8-amd64.x86_64.rpm</code><br> + Uninstallation:<br> + [i586]: <code>rpm -ev alsa-lib-devel-0.9.1-rh61</code><br> + [x64]:<code>rpm -ev alsa-lib-devel-0.9.8-amd64</code><br> + Make sure that you do not link to the static library + (<tt>libasound.a</tt>), + by verifying that the dynamic library (<tt>libasound.so</tt>) is + correctly installed in <tt>/usr/lib</tt>. + </blockquote> + As a last resort you can go to the + <a href="http://www.alsa-project.org" target="_blank"> + Advanced Linux Sound Architecture Site</a> and build it from + source. + <blockquote> + Download driver and library + source tarballs from + <a href="http://www.alsa-project.org" target="_blank">ALSA's homepage</a>. + As root, execute the following + commands (you may need to adapt the version number): + <pre> + <tt> + $ tar xjf alsa-driver-0.9.1.tar.bz2 + $ cd alsa-driver-0.9.1 + $ ./configure + $ make install + $ cd .. + $ tar xjf alsa-lib-0.9.1.tar.bz2 + $ cd alsa-lib-0.9.1 + $ ./configure + $ make install + </tt> + </pre> + Should one of the above steps fail, refer to the documentation on + ALSA's home page. + </blockquote> + Note that this is a minimum install that enables + building the JDK platform. To actually use ALSA sound drivers, more + steps are necessary as outlined in the documentation on ALSA's homepage. + <p> + ALSA can be uninstalled by executing <tt>make uninstall</tt> first in + the <tt>alsa-lib-0.9.1</tt> directory and then in + <tt>alsa-driver-0.9.1</tt>. + </blockquote> + There are no ALT* variables to change the assumed locations of ALSA, + the makefiles will expect to find the ALSA include files and library at: + <tt>/usr/include/alsa</tt> and <tt>/usr/lib/libasound.so</tt>. </blockquote> - - </blockquote> - - <h4><a name="cups">Common UNIX Printing System (CUPS) Headers (Solaris & Linux)</a></h4> - - <blockquote> - <p> - <strong>Solaris:</strong> - CUPS header files are required for building the - OpenJDK on Solaris. - The Solaris header files can be obtained by installing - the package <strong>SFWcups</strong> from the Solaris Software - Companion CD/DVD, these often will be installed into - <tt>/opt/sfw/cups</tt>. - <p> - <strong>Linux:</strong> - CUPS header files are required for building the - OpenJDK on Linux. - The Linux header files are usually available from a "cups" - development package, it's recommended that you try and use - the package provided by the particular version of Linux that - you are using. - <p> - The CUPS header files can always be downloaded from - <a href="http://www.cups.org">www.cups.org</a>. - The variable - <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt> - can be used to override the default location of the - CUPS Header files. - </blockquote> - - <h4><a name="freetype">FreeType 2</a></h4> - - <blockquote> - <p> - Version 2.3 or newer of FreeType is required for building the OpenJDK. - On Unix systems required files can be available as part of your - distribution (while you still may need to upgrade them). - Note that you need development version of package that - includes both FreeType library and header files. - </p> - <p> - You can always download latest FreeType version from the - <a href="http://www.freetype.org">FreeType website</a>. - </p> - <p> - Makefiles will try to pick FreeType from /usr/lib and /usr/include. - In case it is installed elsewhere you will need to set environment - variables - <tt><a href="#ALT_FREETYPE_LIB_PATH">ALT_FREETYPE_LIB_PATH</a></tt> - and - <tt><a href="#ALT_FREETYPE_HEADERS_PATH">ALT_FREETYPE_HEADERS_PATH</a></tt> - to refer to place where library and header files are installed. - </p> - </blockquote> - - <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4> - - <blockquote> - <p> - <strong>Linux only:</strong> - Version 0.9.1 or newer of the ALSA files are - required for building the - OpenJDK on Linux. - These Linux files are usually available from an "alsa" - of "libasound" - development package, it's recommended that you try and use - the package provided by the particular version of Linux that - you are using. - The makefiles will check this emit a sanity error if it is - missing or the wrong version. - As a last resort you can go to the - <a href="http://www.alsa-project.org" target="_blank"> - Advanced Linux Sound Architecture Site</a>. - </blockquote> - - <h4>Windows Specific Dependencies</h4> - - <blockquote> - - <strong>Unix Command Tools (<a name="cygwin">CYGWIN</a>)</strong> - - <blockquote> - <p> - The - OpenJDK - requires access to a set of unix command tools - on Windows which can be supplied by - <a href="http://www.cygwin.com">CYGWIN</a>. - <p> - The - OpenJDK - build - requires CYGWIN version 1.5.12 or newer. - Information about CYGWIN can - be obtained from the CYGWIN website at - <a href="http://www.cygwin.com">www.cygwin.com</a>. - <p> - By default CYGWIN doesn't install all the tools required for building - the OpenJDK. - Along with the default installation, you need to install - the following tools. + <!-- ------------------------------------------------------ --> + <h4>Windows Specific Dependencies</h4> + <blockquote> + <strong>Unix Command Tools (<a name="cygwin">CYGWIN</a>)</strong> + <blockquote> + The OpenJDK requires access to a set of unix command tools + on Windows which can be supplied by + <a href="http://www.cygwin.com" target="_blank">CYGWIN</a>. + <p> + The OpenJDK build requires CYGWIN version 1.5.12 or newer. + Information about CYGWIN can + be obtained from the CYGWIN website at + <a href="http://www.cygwin.com" target="_blank">www.cygwin.com</a>. + <p> + By default CYGWIN doesn't install all the tools required for building + the OpenJDK. + Along with the default installation, you need to install + the following tools. + <blockquote> + <table border="1"> + <thead> + <tr> + <td>Binary Name</td> + <td>Package</td> + <td>Description</td> + </tr> + </thead> + <tbody> + <tr> + <td>ar.exe</td> + <td>Devel</td> + <td>binutils: The GNU assembler, linker and binary + utilities</td> + </tr> + <tr> + <td>make.exe</td> + <td>Devel</td> + <td>make: The GNU version of the 'make' utility</td> + </tr> + <tr> + <td>m4.exe</td> + <td>Interpreters</td> + <td>m4: GNU implementation of the traditional Unix macro + processor</td> + </tr> + <tr> + <td>cpio.exe</td> + <td>Utils</td> + <td>cpio: A program to manage archives of files</td> + </tr> + <tr> + <td>awk.exe</td> + <td>Utils</td> + <td>awk: Pattern-directed scanning and processing language</td> + </tr> + <tr> + <td>file.exe</td> + <td>Utils</td> + <td>file: Determines file type using 'magic' numbers</td> + </tr> + <tr> + <td>zip.exe</td> + <td>Utils</td> + <td>zip: Package and compress (archive) files</td> + </tr> + <tr> + <td>unzip.exe</td> + <td>Utils</td> + <td>unzip: Extract compressed files in a ZIP archive</td> + </tr> + <tr> + <td>free.exe</td> + <td>Utils</td> + <td>free: Display amount of free and used memory in the system</td> + </tr> + </tbody> + </table> + </blockquote> + <p> + Note that the CYGWIN software can conflict with other non-CYGWIN + software on your Windows system. + CYGWIN provides a + <a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for + known issues and problems, of particular interest is the + section on + <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank"> + BLODA (applications that interfere with CYGWIN)</a>. + </blockquote> + <strong><a name="dxsdk">Microsoft DirectX 9.0 SDK header files and libraries</a></strong> <blockquote> - <table border="1"> - <thead> - <tr> - <td>Binary Name</td> - <td>Package</td> - <td>Description</td> - </tr> - </thead> - <tbody> - <tr> - <td>ar.exe</td> - <td>Devel</td> - <td>binutils: The GNU assembler, linker and binary - utilities</td> - </tr> - <tr> - <td>make.exe</td> - <td>Devel</td> - <td>make: The GNU version of the 'make' utility</td> - </tr> - <tr> - <td>m4.exe</td> - <td>Interpreters</td> - <td>m4: GNU implementation of the traditional Unix macro - processor</td> - </tr> - <tr> - <td>cpio.exe</td> - <td>Utils</td> - <td>cpio: A program to manage archives of files</td> - </tr> - <tr> - <td>file.exe</td> - <td>Utils</td> - <td>file: Determines file type using 'magic' numbers</td> - </tr> - </tbody> - </table> + Microsoft DirectX 9.0 SDK (Summer 2004) + headers are required for building + OpenJDK. + This SDK can be downloaded from + <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FD044A42-9912-42A3-9A9E-D857199F888E&displaylang=en" target="_blank"> + Microsoft DirectX 9.0 SDK (Summer 2004)</a>. + If the link above becomes obsolete, the SDK can be found from + <a href="http://download.microsoft.com" target="_blank">the Microsoft Download Site</a> + (search with "DirectX 9.0 SDK Update Summer 2004"). + The location of this SDK can be set with + <tt><a href="#ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> + but it's normally found via the DirectX environment variable + <tt>DXSDK_DIR</tt>. + </blockquote> + <strong><a name="msvcrt"><tt>MSVCRT.DLL</tt></a></strong> + <blockquote> + <strong>i586 only:</strong> + The OpenJDK 32bit build requires access to + <tt>MSVCRT.DLL</tt> version 6.00.8337.0 or newer. + If the <tt>MSVCRT.DLL</tt> is not installed in + the system32 directory set the + <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a> + variable to the location. + <p> + <strong>X64 only:</strong> + The OpenJDK 64bit build requires access to + <tt>MSVCRT.DLL</tt> version 7.0.3790.0 or newer, which is + usually supplied by the + <a href="#mssdk">Platform SDK</a>. + If it is not available from the Platform SDK, + set the + <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a> + variable to the location. + </blockquote> + <strong><tt><a name="msvcr71">MSVCR71.DLL</a></tt></strong> + <blockquote> + <strong>i586 only:</strong> + The + OpenJDK + build requires access to + MSVCR71.DLL version 7.10.3052.4 or newer which should be + supplied by the + <a href="#msvc">Visual Studio product</a> + If the <tt>MSVCR71.DLL</tt> is not available from the + Visual Studio product + set the + <a href="#ALT_MSVCR71_DLL_PATH"><tt>ALT_MSVCR71_DLL_PATH</tt></a> + variable to the location. </blockquote> </blockquote> - - <a name="dxsdk"> - <strong>Microsoft DirectX 9.0 SDK header files and libraries</strong> - </a> - + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="creating">Creating the Build</a></h2> <blockquote> - <p> - Microsoft DirectX 9.0 SDK (Summer 2004) - headers are required for building - OpenJDK. - This SDK can be downloaded from - <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FD044A42-9912-42A3-9A9E-D857199F888E&displaylang=en"> - Microsoft DirectX 9.0 SDK (Summer 2004)</a>. - If the link above becomes obsolete, the SDK can be found from - <a href="http://download.microsoft.com">the Microsoft Download Site</a> - (search with "DirectX 9.0 SDK Update Summer 2004"). - The location of this SDK can be set with - <tt><a href="#ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> - but it's normally found via the DirectX environment variable - <tt>DXSDK_DIR</tt>. - </blockquote> - - <a name="msvcrt"> - <strong><tt>MSVCRT.DLL</tt></strong> - </a> - - <blockquote> + Once a machine is setup to build the OpenJDK, + the steps to create the build are fairly simple. + The various ALT settings can either be made into variables + or can be supplied on the + <a href="#gmake"><tt><i>gmake</i></tt></a> + command. + <ol> + <li>Use the sanity rule to double check all the ALT settings: + <blockquote> + <tt> + <i>gmake</i> + sanity + [ARCH_DATA_MODEL=<i>32 or 64</i>] + [other "ALT_" overrides] + </tt> + </blockquote> + </li> + <li>Start the build with the command: + <blockquote> + <tt> + <i>gmake</i> + [ARCH_DATA_MODEL=<i>32 or 64</i>] + [ALT_OUTPUTDIR=<i>output_directory</i>] + [other "ALT_" overrides] + </tt> + </blockquote> + </li> + </ol> <p> - <strong>i586 only:</strong> - The - OpenJDK - 32bit build requires - access to <tt>MSVCRT.DLL</tt> - version 6.00.8337.0 or newer. - If the <tt>MSVCRT.DLL</tt> is not installed in - the system32 directory set the - <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a> - variable to the location. - <p> - <strong>X64 only:</strong> - The OpenJDK 64bit build requires access to - <tt>MSVCRT.DLL</tt> version 7.0.3790.0 or newer, which is - usually supplied by the - <a href="#mssdk">Platform SDK</a>. - If it is not available from the Platform SDK, - set the - <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a> - variable to the location. + <strong>Solaris:</strong> + Note that ARCH_DATA_MODEL is really only needed on Solaris to + indicate you want to built the 64-bit version. + And before the Solaris 64-bit binaries can be used, they + must be merged with the binaries from a separate 32-bit build. + The merged binaries may then be used in either 32-bit or 64-bit mode, with + the selection occurring at runtime + with the <tt>-d32</tt> or <tt>-d64</tt> options. </blockquote> - - <a name="msvcr71"> - <strong><tt>MSVCR71.DLL</tt></strong> - </a> - + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="testing">Testing the Build</a></h2> <blockquote> + When the build is completed, you should see the generated + binaries and associated files in the <tt>j2sdk-image</tt> + directory in the output directory. + The default output directory is + <tt>build/<i>platform</i></tt>, + where <tt><i>platform</i></tt> is one of + <tt><ul> + <li>solaris-sparc</li> + <li>solaris-sparcv9</li> + <li>solaris-i586</li> + <li>solaris-amd64</li> + <li>linux-i586</li> + <li>linux-amd64</li> + <li>windows-i586</li> + <li>windows-amd64</li> + </ul></tt> + In particular, the + <tt>build/<i>platform</i>/j2sdk-image/bin</tt> + directory should contain executables for the + OpenJDK tools and utilities. <p> - <strong>i586 only:</strong> - The - OpenJDK - build requires access to - MSVCR71.DLL version 7.10.3052.4 or newer which should be - supplied by the - <a href="#msvc">Visual Studio product</a> - If the <tt>MSVCR71.DLL</tt> is not available from the - Visual Studio product - set the - <a href="#ALT_MSVCR71_DLL_PATH"><tt>ALT_MSVCR71_DLL_PATH</tt></a> - variable to the location. + You can test that the build completed properly by using the build + to run the various demos that you will find in the + <tt>build/<i>platform</i>/j2sdk-image/demo</tt> + directory. + <p> + The provided regression tests can be run with the <tt>jtreg</tt> + utility from + <a href="http://openjdk.java.net/jtreg/" target="_blank">the jtreg site</a>. </blockquote> - - </blockquote> - - -</blockquote> - - -<hr noshade="noshade" size="3"> - -<h2><a name="creating">Creating the Build</a></h2> - -<blockquote> - <p> - Once a machine is setup to build the - OpenJDK, - the steps to create the - build are fairly simple. - The various ALT settings can either be made into variables - or can be supplied on the - <a href="#gmake"><tt><i>gmake</i></tt></a> - command. - <p> - <ol> - <li>Use the sanity rule to double check all the ALT settings: - <blockquote> - <tt> - <i>gmake</i> - sanity - [ARCH_DATA_MODEL=<i>32 or 64</i>] - [other "ALT_" overrides] - </tt> - </blockquote> - </li> - <li>Start the build with the command: - <blockquote> - <tt> - <i>gmake</i> - [ARCH_DATA_MODEL=<i>32 or 64</i>] - [ALT_OUTPUTDIR=<i>output_directory</i>] - [other "ALT_" overrides] - </tt> - </blockquote> - </li> - </ol> - <p> - <strong>Solaris:</strong> - Note that ARCH_DATA_MODEL is really only needed on Solaris to - indicate you want to built the 64-bit version. - And before the Solaris 64-bit binaries can be used, they - must be merged with the binaries from a separate 32-bit build. - The merged binaries may then be used in either 32-bit or 64-bit mode, with - the selection occurring at runtime - with the <tt>-d32</tt> or <tt>-d64</tt> options. -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="testing">Testing the Build</a></h2> - -<blockquote> - <p> - When the build is completed, you should see the generated - binaries and associated files in the <tt>j2sdk-image</tt> - directory in the output directory. - The default output directory is - <tt>build/<i>platform</i></tt>, - where <tt><i>platform</i></tt> is one of - <tt><ul> - <li>solaris-sparc</li> - <li>solaris-sparcv9</li> - <li>solaris-i586</li> - <li>solaris-amd64</li> - <li>linux-i586</li> - <li>linux-amd64</li> - <li>windows-i586</li> - <li>windows-amd64</li> - </ul></tt> - In particular, the - <tt>build/<i>platform</i>/j2sdk-image/bin</tt> - directory should contain executables for the - OpenJDK - tools and utilities. - <p> - You can test that the build completed properly by using the build - to run the various demos that you will find in the - <tt>build/<i>platform</i>/j2sdk-image/demo</tt> - directory. - <p> - The provided regression tests can be run with the <tt>jtreg</tt> - utility from - <a href="http://openjdk.java.net/jtreg/">the jtreg site</a>. -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="variables">Environment/Make Variables</a></h2> - -<p> -Some of the -environment or make variables (just called <b>variables</b> in this -document) that can impact the build are: - -<blockquote> - - <dl> - - <dt><a name="path"><tt>PATH</tt></a> </dt> - <dd>Typically you want to set the <tt>PATH</tt> to include: - <ul> - <li>The location of the GNU make binary</li> - <li>The location of the JDK 6 <tt>java</tt> - (see <a href="#bootjdk">Bootstrap JDK</a>)</li> - <li>The location of the C/C++ compilers - (see <a href="#compilers"><tt>compilers</tt></a>)</li> - <li>The location or locations for the Unix command utilities - (e.g. <tt>/usr/bin</tt>)</li> - </ul> - </dd> - - <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt> - <dd>The <tt>ARCH_DATA_MODEL</tt> variable - is used to specify whether the build is to generate 32-bit or 64-bit - binaries. - The Solaris build supports either 32-bit or 64-bit builds, but - Windows and Linux will support only one, depending on the specific - OS being used. - Normally, setting this variable is only necessary on Solaris. - Set <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries, - or to <tt>64</tt> for generating 64-bit binaries. - </dd> - - <dt><a name="ALT_BOOTDIR"><tt>ALT_BOOTDIR</tt></a></dt> - <dd> - The location of the bootstrap JDK installation. - See <a href="#bootjdk">Bootstrap JDK</a> for more information. - You should always install your own local Bootstrap JDK and - always set <tt>ALT_BOOTDIR</tt> explicitly. - </dd> - - <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></a> </dt> - <dd> - An override for specifying the (absolute) path of where the - build output is to go. - The default output directory will be build/<i>platform</i>. - </dd> - - <dt><a name="ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> </dt> - <dd> - The location of the C/C++ compiler. - The default varies depending on the platform. - </dd> - - <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt> - <dd> - The location of the <a href="#cacerts">cacerts</a> file. - The default will refer to - <tt>jdk/src/share/lib/security/cacerts</tt>. - </dd> - - <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt> - <dd> - The location of the binary plugs installation. - See <a href="#binaryplugs">Binary Plugs</a> for more information. - You should always have a local copy of a - recent Binary Plugs install image - and set this variable to that location. - </dd> - - <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></a> </dt> - <dd> - The location of the CUPS header files. - See <a href="#cups">CUPS information</a> for more information. - If this path does not exist the fallback path is - <tt>/usr/include</tt>. - </dd> - - - <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></a></dt> - <dd> - The location of the FreeType shared library. - See <a href="#freetype">FreeType information</a> for details. - </dd> - - <dt><a name="ALT_FREETYPE_HEADERS_PATH"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt> - <dd> - The location of the FreeType header files. - See <a href="#freetype">FreeType information</a> for details. - </dd> - - <dt><strong>Windows specific:</strong></dt> - <dd> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="variables">Environment/Make Variables</a></h2> + <p> + Some of the + environment or make variables (just called <b>variables</b> in this + document) that can impact the build are: + <blockquote> <dl> - <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt> + <dt><a name="path"><tt>PATH</tt></a> </dt> + <dd>Typically you want to set the <tt>PATH</tt> to include: + <ul> + <li>The location of the GNU make binary</li> + <li>The location of the Bootstrap JDK <tt>java</tt> + (see <a href="#bootjdk">Bootstrap JDK</a>)</li> + <li>The location of the C/C++ compilers + (see <a href="#compilers"><tt>compilers</tt></a>)</li> + <li>The location or locations for the Unix command utilities + (e.g. <tt>/usr/bin</tt>)</li> + </ul> + </dd> + <dt><tt>MILESTONE</tt> </dt> + <dd> + The milestone name for the build (<i>e.g.</i>"beta"). + The default value is "internal". + </dd> + <dt><tt>BUILD_NUMBER</tt> </dt> + <dd> + The build number for the build (<i>e.g.</i> "b27"). + The default value is "b00". + </dd> + <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt> + <dd>The <tt>ARCH_DATA_MODEL</tt> variable + is used to specify whether the build is to generate 32-bit or 64-bit + binaries. + The Solaris build supports either 32-bit or 64-bit builds, but + Windows and Linux will support only one, depending on the specific + OS being used. + Normally, setting this variable is only necessary on Solaris. + Set <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries, + or to <tt>64</tt> for generating 64-bit binaries. + </dd> + <dt><a name="ALT_BOOTDIR"><tt>ALT_BOOTDIR</tt></a></dt> + <dd> + The location of the bootstrap JDK installation. + See <a href="#bootjdk">Bootstrap JDK</a> for more information. + You should always install your own local Bootstrap JDK and + always set <tt>ALT_BOOTDIR</tt> explicitly. + </dd> + <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt> <dd> - The location of the Microsoft Visual Studio .NET 2003 - tools 'bin' directory. - The default is usually derived from - <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>. + The location of the binary plugs installation. + See <a href="#binaryplugs">Binary Plugs</a> for more information. + You should always have a local copy of a + recent Binary Plugs install image + and set this variable to that location. + </dd> + <dt><a name="ALT_JDK_IMPORT_PATH"><tt>ALT_JDK_IMPORT_PATH</tt></a></dt> + <dd> + The location of a previously built JDK installation. + See <a href="#importjdk">Optional Import JDK</a> for more information. + </dd> + <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></a> </dt> + <dd> + An override for specifying the (absolute) path of where the + build output is to go. + The default output directory will be build/<i>platform</i>. + </dd> + <dt><a name="ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> </dt> + <dd> + The location of the C/C++ compiler. + The default varies depending on the platform. </dd> - - <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt> + <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt> + <dd> + The location of the <a href="#cacerts">cacerts</a> file. + The default will refer to + <tt>jdk/src/share/lib/security/cacerts</tt>. + </dd> + <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></a> </dt> + <dd> + The location of the CUPS header files. + See <a href="#cups">CUPS information</a> for more information. + If this path does not exist the fallback path is + <tt>/usr/include</tt>. + </dd> + <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></a></dt> + <dd> + The location of the FreeType shared library. + See <a href="#freetype">FreeType information</a> for details. + </dd> + <dt><a name="ALT_FREETYPE_HEADERS_PATH"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt> + <dd> + The location of the FreeType header files. + See <a href="#freetype">FreeType information</a> for details. + </dd> + <dt><a name="ALT_JDK_DEVTOOLS_PATH"><tt>ALT_JDK_DEVTOOLS_PATH</tt></a></dt> + <dd> + The default root location of the devtools. + The default value is + <tt>$(ALT_SLASH_JAVA)/devtools</tt>. + </dd> + <dt><tt><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></tt> </dt> <dd> - The location of the - <a href="#dxsdk">Microsoft DirectX 9 SDK</a>. - The default will be to try and use the DirectX environment - variable <tt>DXSDK_DIR</tt>, - failing that, look in <tt>C:/DXSDK</tt>. + The location of tools like the + <a href="#zip"><tt>zip</tt> and <tt>unzip</tt></a> + binaries, but might also contain the GNU make utility + (<tt><i>gmake</i></tt>). + So this area is a bit of a grab bag, especially on Windows. + The default value depends on the platform and + Unix Commands being used. + On Linux the default will be + <tt>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</tt>, + on Solaris + <tt>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</tt>, + on Windows with MKS + <tt>%SYSTEMDRIVE%/UTILS</tt>, + and on Windows with CYGWIN + <tt>/usr/bin</tt>. </dd> - - <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt> + <dt><a name="ALT_UNIXCOMMAND_PATH"><tt>ALT_UNIXCOMMAND_PATH</tt></a> </dt> + <dd> + An override for specifying where the + Unix command set are located. + The default location varies depending on the platform, + <tt>"%SYSTEMDRIVE%/MKSNT"</tt> or + <tt>$(ROOTDIR)</tt> on Windows with MKS, otherwise it's + <tt>"/bin"</tt> or <tt>/usr/bin</tt>. + </dd> + <dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt> + <dd> + <strong>Solaris only:</strong> + An override for specifying where the Unix CCS + command set are located. + The default location is <tt>/usr/ccs/bin</tt> + </dd> + <dt><a name="ALT_USRBIN_PATH"><tt>ALT_USRBIN_PATH</tt></a></dt> + <dd> + An override for specifying where the + Unix <tt>/usr/bin</tt> commands are located. You usually do not need + to set this variable: the default location is <tt>/usr/bin</tt>) + </dd> + <dt><a name="ALT_SLASHJAVA"><tt>ALT_SLASHJAVA</tt></a></dt> + <dd> + The default root location for many of the ALT path locations + of the following ALT variables. + The default value is + <tt>"/java"</tt> on Solaris and Linux, + <tt>"J:"</tt> on Windows. + </dd> + <dt><a name="ALT_BUILD_JDK_IMPORT_PATH"><tt>ALT_BUILD_JDK_IMPORT_PATH</tt></a></dt> <dd> - The location of the - <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. + These are useful in managing builds on multiple platforms. + The default network location for all of the import JDK images + for all platforms. + If <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt> + is not set, this directory will be used and should contain + the following directories: + <tt>solaris-sparc</tt>, + <tt>solaris-i586</tt>, + <tt>solaris-sparcv9</tt>, + <tt>solaris-amd64</tt>, + <tt>linux-i586</tt>, + <tt>linux-amd64</tt>, + <tt>windows-i586</tt>, + and + <tt>windows-amd64</tt>. + Where each of these directories contain the import JDK image + for that platform. </dd> - - <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt> + <dt><a name="ALT_BUILD_BINARY_PLUGS_PATH"><tt>ALT_BUILD_BINARY_PLUGS_PATH</tt></a></dt> + <dd> + These are useful in managing builds on multiple platforms. + The default network location for all of the binary plug images + for all platforms. + If <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt> + is not set, this directory will be used and should contain + the following directories: + <tt>solaris-sparc</tt>, + <tt>solaris-i586</tt>, + <tt>solaris-sparcv9</tt>, + <tt>solaris-amd64</tt>, + <tt>linux-i586</tt>, + <tt>linux-amd64</tt>, + <tt>windows-i586</tt>, + and + <tt>windows-amd64</tt>. + Where each of these directories contain the binary plugs image + for that platform. + </dd> + <dt><strong>Windows specific:</strong></dt> <dd> - <strong>i586 only:</strong> - The location of the - <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>. + <dl> + <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt> + <dd> + The location of the Microsoft Visual Studio .NET 2003 + tools 'bin' directory. + The default is usually derived from + <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>. + </dd> + <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt> + <dd> + The location of the + <a href="#dxsdk">Microsoft DirectX 9 SDK</a>. + The default will be to try and use the DirectX environment + variable <tt>DXSDK_DIR</tt>, + failing that, look in <tt>C:/DXSDK</tt>. + </dd> + <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt> + <dd> + The location of the + <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. + </dd> + <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt> + <dd> + <strong>i586 only:</strong> + The location of the + <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>. + </dd> + </dl> </dd> </dl> - </dd> - - </dl> -</blockquote> - -<!-- ------------------------------------------------------ --> -<hr noshade="noshade" size="3"> - -<h2><a name="troubleshooting">Troubleshooting</a></h2> - -<blockquote> - <p> - A build can fail for any number of reasons. - Most failures - are a result of trying to build in an environment in which all the - pre-build requirements have not been met. - The first step in - troubleshooting a build failure is to recheck that you have satisfied - all the pre-build requirements for your platform. - Look for the check list of the platform you are building on in the - <a href="#contents">Table of Contents</a>. - - <p> - You can validate your build environment by using the <tt>sanity</tt> - target. - Any errors listed - will stop the build from starting, and any warnings may result in - a flawed product build. - We strongly encourage you to evaluate every - sanity check warning and fix it if required, before you proceed - further with your build. - - <p> - Some of the more common problems with builds are briefly described - below, with suggestions for remedies. - - <ul> - <li> - <b>Slow Builds:</b> - <blockquote> - <p> - If your build machine seems to be overloaded from too many - simultaneous C++ compiles, try setting the <tt>HOTSPOT_BUILD_JOBS</tt> - variable to <tt>1</tt> (if you're using a multiple CPU - machine, setting it to more than the the number of CPUs is probably - not a good idea). - <p> - Creating the javadocs can be very slow, if you are running - javadoc, consider skipping that step. - <p> - Faster hardware and more RAM always helps too. - The VM build tends to be CPU intensive (many C++ compiles), - and the rest of the JDK will often be disk intensive. - <p> - Faster compiles are possible using a tool called - <a href="http://ccache.samba.org/">ccache</a>. - </blockquote> - </li> - <li> - <b>File time issues:</b> - <blockquote> - <p> - If you see warnings that refer to file time stamps, e.g. - <blockquote> - <i>Warning message:</i><tt> File `xxx' has modification time in - the future.</tt> - <br> - <i>Warning message:</i> <tt> Clock skew detected. Your build may - be incomplete.</tt> - </blockquote> - <p> - These warnings can occur when the clock on the build machine is out of - sync with the timestamps on the source files. Other errors, apparently - unrelated but in fact caused by the clock skew, can occur along with - the clock skew warnings. These secondary errors may tend to obscure the - fact that the true root cause of the problem is an out-of-sync clock. - For example, an out-of-sync clock has been known to cause an old - version of javac to be used to compile some files, resulting in errors - when the pre-1.4 compiler ran across the new <tt>assert</tt> keyword - in the 1.4 source code. - <p> - If you see these warnings, reset the clock on the build - machine, run "<tt><i>gmake</i> clobber</tt>" or delete the directory - containing the build output, and restart the build from the beginning. - </blockquote> - </li> - <li> - <b>Error message: <tt>Trouble writing out table to disk</tt></b> - <blockquote> - <p> - Increase the amount of swap space on your build machine. - </blockquote> - </li> - <li> - <b>Error Message: <tt>libstdc++ not found:</tt></b> - <blockquote> - This is caused by a missing libstdc++.a library. - This is installed as part of a specific package - (e.g. libstdc++.so.devel.386). - By default some 64bit Linux versions (e.g. Fedora) - only install the 64bit version of the libstdc++ package. - Various parts of the JDK build require a static - link of the C++ runtime libraries to allow for maximum - portability of the built images. - </blockquote> - </li> - <li> - <b>Error Message: <tt>cannot restore segment prot after reloc</tt></b> - <blockquote> - This is probably an issue with SELinux (See - <a href="http://en.wikipedia.org/wiki/SELinux">http://en.wikipedia.org/wiki/SELinux</a>). - Parts of the VM is built without the <tt>-fPIC</tt> for - performance reasons. - <p> - To completely disable SELinux: - <ol><tt> - - <li>$ su root</li> - <li># system-config-securitylevel</li> - <li>In the window that appears, select the SELinux tab</li> - <li>Disable SELinux</li> - </ol></tt> - <p> - Alternatively, instead of completely disabling it you could - disable just this one check. - <ol><tt> - <li>Select System->Administration->SELinux Management</li> - <li>In the SELinux Management Tool which appears, - select "Boolean" from the menu on the left</li> - <li>Expand the "Memory Protection" group</li> - <li>Check the first item, labeled - "Allow all unconfined executables to use libraries requiring text relocation ..."</li> - </ol></tt> - </blockquote> - </li> - </ul> -</blockquote> - -<hr noshade="noshade" size="3"> + </blockquote> + <!-- ------------------------------------------------------ --> + <hr> + <h2><a name="troubleshooting">Troubleshooting</a></h2> + <blockquote> + A build can fail for any number of reasons. + Most failures + are a result of trying to build in an environment in which all the + pre-build requirements have not been met. + The first step in + troubleshooting a build failure is to recheck that you have satisfied + all the pre-build requirements for your platform. + Look for the check list of the platform you are building on in the + <a href="#contents">Table of Contents</a>. + <p> + You can validate your build environment by using the <tt>sanity</tt> + target. + Any errors listed + will stop the build from starting, and any warnings may result in + a flawed product build. + We strongly encourage you to evaluate every + sanity check warning and fix it if required, before you proceed + further with your build. + <p> + Some of the more common problems with builds are briefly described + below, with suggestions for remedies. + <ul> + <li> + <b>Slow Builds:</b> + <blockquote> + If your build machine seems to be overloaded from too many + simultaneous C++ compiles, try setting the <tt>HOTSPOT_BUILD_JOBS</tt> + variable to <tt>1</tt> (if you're using a multiple CPU + machine, setting it to more than the the number of CPUs is probably + not a good idea). + <p> + Creating the javadocs can be very slow, if you are running + javadoc, consider skipping that step. + <p> + Faster hardware and more RAM always helps too. + The VM build tends to be CPU intensive (many C++ compiles), + and the rest of the JDK will often be disk intensive. + <p> + Faster compiles are possible using a tool called + <a href="http://ccache.samba.org/" target="_blank">ccache</a>. + </blockquote> + </li> + <li> + <b>File time issues:</b> + <blockquote> + If you see warnings that refer to file time stamps, e.g. + <blockquote> + <i>Warning message:</i><tt> File `xxx' has modification time in + the future.</tt> + <br> + <i>Warning message:</i> <tt> Clock skew detected. Your build may + be incomplete.</tt> + </blockquote> + These warnings can occur when the clock on the build machine is out of + sync with the timestamps on the source files. Other errors, apparently + unrelated but in fact caused by the clock skew, can occur along with + the clock skew warnings. These secondary errors may tend to obscure the + fact that the true root cause of the problem is an out-of-sync clock. + For example, an out-of-sync clock has been known to cause an old + version of javac to be used to compile some files, resulting in errors + when the pre-1.4 compiler ran across the new <tt>assert</tt> keyword + in the 1.4 source code. + <p> + If you see these warnings, reset the clock on the build + machine, run "<tt><i>gmake</i> clobber</tt>" or delete the directory + containing the build output, and restart the build from the beginning. + </blockquote> + </li> + <li> + <b>Error message: <tt>Trouble writing out table to disk</tt></b> + <blockquote> + Increase the amount of swap space on your build machine. + </blockquote> + </li> + <li> + <b>Error Message: <tt>libstdc++ not found:</tt></b> + <blockquote> + This is caused by a missing libstdc++.a library. + This is installed as part of a specific package + (e.g. libstdc++.so.devel.386). + By default some 64bit Linux versions (e.g. Fedora) + only install the 64bit version of the libstdc++ package. + Various parts of the JDK build require a static + link of the C++ runtime libraries to allow for maximum + portability of the built images. + </blockquote> + </li> + <li> + <b>Error Message: <tt>cannot restore segment prot after reloc</tt></b> + <blockquote> + This is probably an issue with SELinux (See + <a href="http://en.wikipedia.org/wiki/SELinux" target="_blank"> + http://en.wikipedia.org/wiki/SELinux</a>). + Parts of the VM is built without the <tt>-fPIC</tt> for + performance reasons. + <p> + To completely disable SELinux: + <tt> + <ol> + <li>$ su root</li> + <li># system-config-securitylevel</li> + <li>In the window that appears, select the SELinux tab</li> + <li>Disable SELinux</li> + </ol> + </tt> + <p> + Alternatively, instead of completely disabling it you could + disable just this one check. + <tt> + <ol> + <li>Select System->Administration->SELinux Management</li> + <li>In the SELinux Management Tool which appears, + select "Boolean" from the menu on the left</li> + <li>Expand the "Memory Protection" group</li> + <li>Check the first item, labeled + "Allow all unconfined executables to use libraries requiring text relocation ..."</li> + </ol> + </tt> + </blockquote> + </li> + <li> + <b>Windows Error Message: <tt>*** fatal error - couldn't allocate heap, ... </tt></b> + <blockquote> + The CYGWIN software can conflict with other non-CYGWIN + software. See the CYGWIN FAQ section on + <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank"> + BLODA (applications that interfere with CYGWIN)</a>. + </blockquote> + </li> + <li> + <b>Windows Error Message: <tt>*** multiple target patterns. Stop.</tt></b> + <blockquote> + The CYGWIN make version 3.81 may not like the Windows <tt>C:/</tt> + style paths, it may not like the ':' character in the path + when used in a makefile target definition. + See the <a href="#gmake"><tt><i>gmake</i></tt></a> section. + </blockquote> + </li> + </ul> + </blockquote> + <hr> + </body> +</html>
--- a/corba/.hgtags Thu Apr 24 12:12:16 2008 -0700 +++ b/corba/.hgtags Wed Jul 05 16:36:48 2017 +0200 @@ -1,2 +1,3 @@ 55540e827aef970ecc010b7e06b912d991c8e3ce jdk7-b24 5e61d5df62586474414d1058e9186441aa908f51 jdk7-b25 +0043eb3d4e628f049ff80a8c223b5657136085e7 jdk7-b26
--- a/hotspot/.hgignore Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/.hgignore Wed Jul 05 16:36:48 2017 +0200 @@ -1,170 +1,4 @@ -^build/solaris/solaris_sparc_compiler1/ -^build/solaris/solaris_sparc_compiler2/ -^build/solaris/solaris_sparc_core/ -^build/solaris/solaris_sparc_kernel/ -^build/solaris/solaris_sparc_docs/ -^build/solaris/jdk-solaris-sparc/ -^build/solaris/export-solaris-sparc/ -^build/solaris/solaris_sparcv9_compiler1/ -^build/solaris/solaris_sparcv9_compiler2/ -^build/solaris/solaris_sparcv9_core/ -^build/solaris/solaris_sparcv9_kernel/ -^build/solaris/solaris_sparcv9_docs/ -^build/solaris/jdk-solaris-sparcv9/ -^build/solaris/export-solaris-sparcv9/ -^build/solaris/solaris_sparc32_compiler1/ -^build/solaris/solaris_sparc32_compiler2/ -^build/solaris/solaris_sparc32_core/ -^build/solaris/solaris_sparc32_kernel/ -^build/solaris/solaris_sparc32_docs/ -^build/solaris/jdk-solaris-sparc32/ -^build/solaris/export-solaris-sparc32/ -^build/solaris/solaris_sparc64_compiler1/ -^build/solaris/solaris_sparc64_compiler2/ -^build/solaris/solaris_sparc64_core/ -^build/solaris/solaris_sparc64_kernel/ -^build/solaris/solaris_sparc64_docs/ -^build/solaris/jdk-solaris-sparc64/ -^build/solaris/export-solaris-sparc64/ -^build/solaris/solaris_i486_compiler1/ -^build/solaris/solaris_i486_compiler2/ -^build/solaris/solaris_i486_core/ -^build/solaris/solaris_i486_kernel/ -^build/solaris/solaris_i486_docs/ -^build/solaris/jdk-solaris-i486/ -^build/solaris/export-solaris-i486/ -^build/solaris/solaris_i386_compiler1/ -^build/solaris/solaris_i386_compiler2/ -^build/solaris/solaris_i386_core/ -^build/solaris/solaris_i386_kernel/ -^build/solaris/solaris_i386_docs/ -^build/solaris/jdk-solaris-i386/ -^build/solaris/export-solaris-i386/ -^build/solaris/solaris_amd64_compiler1/ -^build/solaris/solaris_amd64_compiler2/ -^build/solaris/solaris_amd64_core/ -^build/solaris/solaris_amd64_kernel/ -^build/solaris/solaris_amd64_docs/ -^build/solaris/jdk-solaris-amd64/ -^build/solaris/export-solaris-amd64/ -^build/solaris/solaris_x64_compiler1/ -^build/solaris/solaris_x64_compiler2/ -^build/solaris/solaris_x64_core/ -^build/solaris/solaris_x64_kernel/ -^build/solaris/solaris_x64_docs/ -^build/solaris/jdk-solaris-x64/ -^build/solaris/export-solaris-x64/ -^build/windows/windows_sparc_compiler1/ -^build/windows/windows_sparc_compiler2/ -^build/windows/windows_sparc_core/ -^build/windows/windows_sparc_kernel/ -^build/windows/windows_sparc_docs/ -^build/windows/jdk-windows-sparc/ -^build/windows/export-windows-sparc/ -^build/windows/windows_sparcv9_compiler1/ -^build/windows/windows_sparcv9_compiler2/ -^build/windows/windows_sparcv9_core/ -^build/windows/windows_sparcv9_kernel/ -^build/windows/windows_sparcv9_docs/ -^build/windows/jdk-windows-sparcv9/ -^build/windows/export-windows-sparcv9/ -^build/windows/windows_sparc32_compiler1/ -^build/windows/windows_sparc32_compiler2/ -^build/windows/windows_sparc32_core/ -^build/windows/windows_sparc32_kernel/ -^build/windows/windows_sparc32_docs/ -^build/windows/jdk-windows-sparc32/ -^build/windows/export-windows-sparc32/ -^build/windows/windows_sparc64_compiler1/ -^build/windows/windows_sparc64_compiler2/ -^build/windows/windows_sparc64_core/ -^build/windows/windows_sparc64_kernel/ -^build/windows/windows_sparc64_docs/ -^build/windows/jdk-windows-sparc64/ -^build/windows/export-windows-sparc64/ -^build/windows/windows_i486_compiler1/ -^build/windows/windows_i486_compiler2/ -^build/windows/windows_i486_core/ -^build/windows/windows_i486_kernel/ -^build/windows/windows_i486_docs/ -^build/windows/jdk-windows-i486/ -^build/windows/export-windows-i486/ -^build/windows/windows_i386_compiler1/ -^build/windows/windows_i386_compiler2/ -^build/windows/windows_i386_core/ -^build/windows/windows_i386_kernel/ -^build/windows/windows_i386_docs/ -^build/windows/jdk-windows-i386/ -^build/windows/export-windows-i386/ -^build/windows/windows_amd64_compiler1/ -^build/windows/windows_amd64_compiler2/ -^build/windows/windows_amd64_core/ -^build/windows/windows_amd64_kernel/ -^build/windows/windows_amd64_docs/ -^build/windows/jdk-windows-amd64/ -^build/windows/export-windows-amd64/ -^build/windows/windows_x64_compiler1/ -^build/windows/windows_x64_compiler2/ -^build/windows/windows_x64_core/ -^build/windows/windows_x64_kernel/ -^build/windows/windows_x64_docs/ -^build/windows/jdk-windows-x64/ -^build/windows/export-windows-x64/ -^build/linux/linux_sparc_compiler1/ -^build/linux/linux_sparc_compiler2/ -^build/linux/linux_sparc_core/ -^build/linux/linux_sparc_kernel/ -^build/linux/linux_sparc_docs/ -^build/linux/jdk-linux-sparc/ -^build/linux/export-linux-sparc/ -^build/linux/linux_sparcv9_compiler1/ -^build/linux/linux_sparcv9_compiler2/ -^build/linux/linux_sparcv9_core/ -^build/linux/linux_sparcv9_kernel/ -^build/linux/linux_sparcv9_docs/ -^build/linux/jdk-linux-sparcv9/ -^build/linux/export-linux-sparcv9/ -^build/linux/linux_sparc32_compiler1/ -^build/linux/linux_sparc32_compiler2/ -^build/linux/linux_sparc32_core/ -^build/linux/linux_sparc32_kernel/ -^build/linux/linux_sparc32_docs/ -^build/linux/jdk-linux-sparc32/ -^build/linux/export-linux-sparc32/ -^build/linux/linux_sparc64_compiler1/ -^build/linux/linux_sparc64_compiler2/ -^build/linux/linux_sparc64_core/ -^build/linux/linux_sparc64_kernel/ -^build/linux/linux_sparc64_docs/ -^build/linux/jdk-linux-sparc64/ -^build/linux/export-linux-sparc64/ -^build/linux/linux_i486_compiler1/ -^build/linux/linux_i486_compiler2/ -^build/linux/linux_i486_core/ -^build/linux/linux_i486_kernel/ -^build/linux/linux_i486_docs/ -^build/linux/jdk-linux-i486/ -^build/linux/export-linux-i486/ -^build/linux/linux_i386_compiler1/ -^build/linux/linux_i386_compiler2/ -^build/linux/linux_i386_core/ -^build/linux/linux_i386_kernel/ -^build/linux/linux_i386_docs/ -^build/linux/jdk-linux-i386/ -^build/linux/export-linux-i386/ -^build/linux/linux_amd64_compiler1/ -^build/linux/linux_amd64_compiler2/ -^build/linux/linux_amd64_core/ -^build/linux/linux_amd64_kernel/ -^build/linux/linux_amd64_docs/ -^build/linux/jdk-linux-amd64/ -^build/linux/export-linux-amd64/ -^build/linux/linux_x64_compiler1/ -^build/linux/linux_x64_compiler2/ -^build/linux/linux_x64_core/ -^build/linux/linux_x64_kernel/ -^build/linux/linux_x64_docs/ -^build/linux/jdk-linux-x64/ -^build/linux/export-linux-x64/ +^build/ ^dist/ ^nbproject/private/ +^src/share/tools/hsdis/bin/
--- a/hotspot/.hgtags Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/.hgtags Wed Jul 05 16:36:48 2017 +0200 @@ -1,2 +1,3 @@ a61af66fc99eb5ec9d50c05b0c599757b1289ceb jdk7-b24 7836be3e92d0a4f9ee7566f602c91f5609534e66 jdk7-b25 +ad0b851458ff9d1d490ed2d79bb84f75a9fdb753 jdk7-b26
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java Wed Jul 05 16:36:48 2017 +0200 @@ -885,7 +885,12 @@ out.println("found at " + addr); } } - + public void visitCompOopAddress(Address addr) { + Address val = addr.getCompOopAddressAt(0); + if (AddressOps.equal(val, value)) { + out.println("found at " + addr); + } + } public void epilogue() { } };
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java Wed Jul 05 16:36:48 2017 +0200 @@ -1011,8 +1011,21 @@ Assert.that(addr.andWithMask(VM.getVM().getAddressSize() - 1) == null, "Address " + addr + "should have been aligned"); } + OopHandle handle = addr.getOopHandleAt(0); + addAnnotation(addr, handle); + } + + public void visitCompOopAddress(Address addr) { + if (Assert.ASSERTS_ENABLED) { + Assert.that(addr.andWithMask(VM.getVM().getAddressSize() - 1) == null, + "Address " + addr + "should have been aligned"); + } + OopHandle handle = addr.getCompOopHandleAt(0); + addAnnotation(addr, handle); + } + + public void addAnnotation(Address addr, OopHandle handle) { // Check contents - OopHandle handle = addr.getOopHandleAt(0); String anno = "null oop"; if (handle != null) { // Find location
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotTypeDataBase.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotTypeDataBase.java Wed Jul 05 16:36:48 2017 +0200 @@ -306,6 +306,8 @@ entryAddr = entryAddr.addOffsetTo(intConstantEntryArrayStride); } while (nameAddr != null); + String symbol = "heapOopSize"; // global int constant and value is initialized at runtime. + addIntConstant(symbol, (int)lookupInProcess(symbol).getCIntegerAt(0, 4, false)); } private void readVMLongConstants() {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/OopMapSet.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/OopMapSet.java Wed Jul 05 16:36:48 2017 +0200 @@ -68,7 +68,8 @@ public void visitValueLocation(Address valueAddr) { } - public void visitDeadLocation(Address deadAddr) { + public void visitNarrowOopLocation(Address narrowOopAddr) { + addressVisitor.visitCompOopAddress(narrowOopAddr); } } @@ -197,9 +198,9 @@ } } - // We want dead, value and oop oop_types + // We want narow oop, value and oop oop_types OopMapValue.OopTypes[] values = new OopMapValue.OopTypes[] { - OopMapValue.OopTypes.OOP_VALUE, OopMapValue.OopTypes.VALUE_VALUE, OopMapValue.OopTypes.DEAD_VALUE + OopMapValue.OopTypes.OOP_VALUE, OopMapValue.OopTypes.VALUE_VALUE, OopMapValue.OopTypes.NARROWOOP_VALUE }; { @@ -214,8 +215,8 @@ visitor.visitOopLocation(loc); } else if (omv.getType() == OopMapValue.OopTypes.VALUE_VALUE) { visitor.visitValueLocation(loc); - } else if (omv.getType() == OopMapValue.OopTypes.DEAD_VALUE) { - visitor.visitDeadLocation(loc); + } else if (omv.getType() == OopMapValue.OopTypes.NARROWOOP_VALUE) { + visitor.visitNarrowOopLocation(loc); } } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/OopMapValue.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/OopMapValue.java Wed Jul 05 16:36:48 2017 +0200 @@ -50,7 +50,7 @@ static int UNUSED_VALUE; static int OOP_VALUE; static int VALUE_VALUE; - static int DEAD_VALUE; + static int NARROWOOP_VALUE; static int CALLEE_SAVED_VALUE; static int DERIVED_OOP_VALUE; @@ -74,7 +74,7 @@ UNUSED_VALUE = db.lookupIntConstant("OopMapValue::unused_value").intValue(); OOP_VALUE = db.lookupIntConstant("OopMapValue::oop_value").intValue(); VALUE_VALUE = db.lookupIntConstant("OopMapValue::value_value").intValue(); - DEAD_VALUE = db.lookupIntConstant("OopMapValue::dead_value").intValue(); + NARROWOOP_VALUE = db.lookupIntConstant("OopMapValue::narrowoop_value").intValue(); CALLEE_SAVED_VALUE = db.lookupIntConstant("OopMapValue::callee_saved_value").intValue(); DERIVED_OOP_VALUE = db.lookupIntConstant("OopMapValue::derived_oop_value").intValue(); } @@ -83,7 +83,7 @@ public static final OopTypes UNUSED_VALUE = new OopTypes() { int getValue() { return OopMapValue.UNUSED_VALUE; }}; public static final OopTypes OOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.OOP_VALUE; }}; public static final OopTypes VALUE_VALUE = new OopTypes() { int getValue() { return OopMapValue.VALUE_VALUE; }}; - public static final OopTypes DEAD_VALUE = new OopTypes() { int getValue() { return OopMapValue.DEAD_VALUE; }}; + public static final OopTypes NARROWOOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.NARROWOOP_VALUE; }}; public static final OopTypes CALLEE_SAVED_VALUE = new OopTypes() { int getValue() { return OopMapValue.CALLEE_SAVED_VALUE; }}; public static final OopTypes DERIVED_OOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.DERIVED_OOP_VALUE; }}; @@ -106,7 +106,7 @@ // Querying public boolean isOop() { return (getValue() & TYPE_MASK_IN_PLACE) == OOP_VALUE; } public boolean isValue() { return (getValue() & TYPE_MASK_IN_PLACE) == VALUE_VALUE; } - public boolean isDead() { return (getValue() & TYPE_MASK_IN_PLACE) == DEAD_VALUE; } + public boolean isNarrowOop() { return (getValue() & TYPE_MASK_IN_PLACE) == NARROWOOP_VALUE; } public boolean isCalleeSaved() { return (getValue() & TYPE_MASK_IN_PLACE) == CALLEE_SAVED_VALUE; } public boolean isDerivedOop() { return (getValue() & TYPE_MASK_IN_PLACE) == DERIVED_OOP_VALUE; } @@ -118,7 +118,7 @@ if (which == UNUSED_VALUE) return OopTypes.UNUSED_VALUE; else if (which == OOP_VALUE) return OopTypes.OOP_VALUE; else if (which == VALUE_VALUE) return OopTypes.VALUE_VALUE; - else if (which == DEAD_VALUE) return OopTypes.DEAD_VALUE; + else if (which == NARROWOOP_VALUE) return OopTypes.NARROWOOP_VALUE; else if (which == CALLEE_SAVED_VALUE) return OopTypes.CALLEE_SAVED_VALUE; else if (which == DERIVED_OOP_VALUE) return OopTypes.DERIVED_OOP_VALUE; else throw new InternalError("unknown which " + which + " (TYPE_MASK_IN_PLACE = " + TYPE_MASK_IN_PLACE + ")");
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/OopMapVisitor.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/OopMapVisitor.java Wed Jul 05 16:36:48 2017 +0200 @@ -32,5 +32,5 @@ public void visitOopLocation(Address oopAddr); public void visitDerivedOopLocation(Address baseOopAddr, Address derivedOopAddr); public void visitValueLocation(Address valueAddr); - public void visitDeadLocation(Address deadAddr); + public void visitNarrowOopLocation(Address narrowOopAddr); }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/Address.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/Address.java Wed Jul 05 16:36:48 2017 +0200 @@ -87,6 +87,8 @@ throws UnmappedAddressException, UnalignedAddressException; /** This returns null if the address at the given offset is NULL. */ public Address getAddressAt (long offset) throws UnmappedAddressException, UnalignedAddressException; + /** Returns the decoded address at the given offset */ + public Address getCompOopAddressAt (long offset) throws UnmappedAddressException, UnalignedAddressException; // // Java-related routines @@ -103,6 +105,8 @@ /** This returns null if the address at the given offset is NULL. */ public OopHandle getOopHandleAt (long offset) throws UnmappedAddressException, UnalignedAddressException, NotInHeapException; + public OopHandle getCompOopHandleAt (long offset) + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException; // // C/C++-related mutators. These throw UnmappedAddressException if
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/Debugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/Debugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -118,6 +118,9 @@ public long getJIntSize(); public long getJLongSize(); public long getJShortSize(); + public long getHeapBase(); + public long getHeapOopSize(); + public long getLogMinObjAlignmentInBytes(); public ReadResult readBytesFromProcess(long address, long numBytes) throws DebuggerException;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/DebuggerBase.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/DebuggerBase.java Wed Jul 05 16:36:48 2017 +0200 @@ -37,6 +37,7 @@ DbxDebugger interfaces. </P> */ public abstract class DebuggerBase implements Debugger { + // May be set lazily, but must be set before calling any of the read // routines below protected MachineDescription machDesc; @@ -52,6 +53,11 @@ protected long jlongSize; protected long jshortSize; protected boolean javaPrimitiveTypesConfigured; + // heap data. + protected long oopSize; + protected long heapOopSize; + protected long heapBase; // heap base for compressed oops. + protected long logMinObjAlignmentInBytes; // Used to decode compressed oops. // Should be initialized if desired by calling initCache() private PageCache cache; @@ -153,6 +159,12 @@ javaPrimitiveTypesConfigured = true; } + public void putHeapConst(long heapBase, long heapOopSize, long logMinObjAlignmentInBytes) { + this.heapBase = heapBase; + this.heapOopSize = heapOopSize; + this.logMinObjAlignmentInBytes = logMinObjAlignmentInBytes; + } + /** May be called by subclasses if desired to initialize the page cache but may not be overridden */ protected final void initCache(long pageSize, long maxNumPages) { @@ -442,6 +454,16 @@ return readCInteger(address, machDesc.getAddressSize(), true); } + protected long readCompOopAddressValue(long address) + throws UnmappedAddressException, UnalignedAddressException { + long value = readCInteger(address, getHeapOopSize(), true); + if (value != 0) { + // See oop.inline.hpp decode_heap_oop + value = (long)(heapBase + (long)(value << logMinObjAlignmentInBytes)); + } + return value; + } + protected void writeAddressValue(long address, long value) throws UnmappedAddressException, UnalignedAddressException { writeCInteger(address, machDesc.getAddressSize(), value); @@ -518,4 +540,15 @@ public long getJShortSize() { return jshortSize; } + + public long getHeapOopSize() { + return heapOopSize; + } + + public long getHeapBase() { + return heapBase; + } + public long getLogMinObjAlignmentInBytes() { + return logMinObjAlignmentInBytes; + } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/JVMDebugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/JVMDebugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -42,4 +42,5 @@ long jintSize, long jlongSize, long jshortSize); + public void putHeapConst(long heapBase, long heapOopSize, long logMinObjAlignment); }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescription.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescription.java Wed Jul 05 16:36:48 2017 +0200 @@ -35,13 +35,6 @@ able to traverse arrays of pointers or oops. */ public long getAddressSize(); - /** Returns the size of an address in bytes. Currently needed to be - able to traverse arrays of pointers or oops. (FIXME: since we're - already reading the Java primitive types' sizes from the remote - VM, it would be nice to remove this routine, using a similar - mechanism to how the TypeDataBase deals with primitive types.) */ - public long getOopSize(); - /** Returns the maximum value of the C integer type with the given size in bytes and signedness. Throws IllegalArgumentException if the size in bytes is not legal for a C type (or can not be
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionAMD64.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionAMD64.java Wed Jul 05 16:36:48 2017 +0200 @@ -29,10 +29,6 @@ return 8; } - public long getOopSize() { - return 8; - } - public boolean isLP64() { return true; }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIA64.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIA64.java Wed Jul 05 16:36:48 2017 +0200 @@ -29,10 +29,6 @@ return 8; } - public long getOopSize() { - return 8; - } - public boolean isLP64() { return true; }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIntelX86.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIntelX86.java Wed Jul 05 16:36:48 2017 +0200 @@ -29,10 +29,6 @@ return 4; } - public long getOopSize() { - return 4; - } - public boolean isBigEndian() { return false; }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionSPARC32Bit.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionSPARC32Bit.java Wed Jul 05 16:36:48 2017 +0200 @@ -29,10 +29,6 @@ return 4; } - public long getOopSize() { - return 4; - } - public boolean isBigEndian() { return true; }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionSPARC64Bit.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionSPARC64Bit.java Wed Jul 05 16:36:48 2017 +0200 @@ -29,9 +29,6 @@ return 8; } - public long getOopSize() { - return 8; - } public boolean isBigEndian() { return true;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dbx/DbxAddress.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dbx/DbxAddress.java Wed Jul 05 16:36:48 2017 +0200 @@ -71,6 +71,9 @@ public Address getAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { return debugger.readAddress(addr + offset); } + public Address getCompOopAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { + return debugger.readCompOopAddress(addr + offset); + } // // Java-related routines @@ -113,6 +116,11 @@ return debugger.readOopHandle(addr + offset); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return debugger.readCompOopHandle(addr + offset); + } + // Mutators -- not implemented for now (FIXME) public void setCIntegerAt(long offset, long numBytes, long value) { throw new DebuggerException("Unimplemented");
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dbx/DbxDebugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dbx/DbxDebugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -43,7 +43,9 @@ public long readCInteger(long address, long numBytes, boolean isUnsigned) throws DebuggerException; public DbxAddress readAddress(long address) throws DebuggerException; + public DbxAddress readCompOopAddress(long address) throws DebuggerException; public DbxOopHandle readOopHandle(long address) throws DebuggerException; + public DbxOopHandle readCompOopHandle(long address) throws DebuggerException; public long[] getThreadIntegerRegisterSet(int tid) throws DebuggerException; public Address newAddress(long value) throws DebuggerException;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dbx/DbxDebuggerLocal.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dbx/DbxDebuggerLocal.java Wed Jul 05 16:36:48 2017 +0200 @@ -460,12 +460,23 @@ return (value == 0 ? null : new DbxAddress(this, value)); } + public DbxAddress readCompOopAddress(long address) + throws UnmappedAddressException, UnalignedAddressException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new DbxAddress(this, value)); + } + /** From the DbxDebugger interface */ public DbxOopHandle readOopHandle(long address) throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { long value = readAddressValue(address); return (value == 0 ? null : new DbxOopHandle(this, value)); } + public DbxOopHandle readCompOopHandle(long address) + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new DbxOopHandle(this, value)); + } //-------------------------------------------------------------------------------- // Thread context access. Can not be package private, but should
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dummy/DummyAddress.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/dummy/DummyAddress.java Wed Jul 05 16:36:48 2017 +0200 @@ -76,6 +76,10 @@ return new DummyAddress(debugger, badLong); } + public Address getCompOopAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { + return new DummyAddress(debugger, badLong); + } + // // Java-related routines // @@ -116,6 +120,10 @@ throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { return new DummyOopHandle(debugger, badLong); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return new DummyOopHandle(debugger, badLong); + } // Mutators -- not implemented public void setCIntegerAt(long offset, long numBytes, long value) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxAddress.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxAddress.java Wed Jul 05 16:36:48 2017 +0200 @@ -74,6 +74,11 @@ return debugger.readAddress(addr + offset); } + public Address getCompOopAddressAt(long offset) + throws UnalignedAddressException, UnmappedAddressException { + return debugger.readCompOopAddress(addr + offset); + } + // // Java-related routines // @@ -115,6 +120,11 @@ return debugger.readOopHandle(addr + offset); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return debugger.readCompOopHandle(addr + offset); + } + // Mutators -- not implemented for now (FIXME) public void setCIntegerAt(long offset, long numBytes, long value) { throw new DebuggerException("Unimplemented");
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxDebugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxDebugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -45,7 +45,9 @@ public long readCInteger(long address, long numBytes, boolean isUnsigned) throws DebuggerException; public LinuxAddress readAddress(long address) throws DebuggerException; + public LinuxAddress readCompOopAddress(long address) throws DebuggerException; public LinuxOopHandle readOopHandle(long address) throws DebuggerException; + public LinuxOopHandle readCompOopHandle(long address) throws DebuggerException; public long[] getThreadIntegerRegisterSet(int lwp_id) throws DebuggerException; public long getAddressValue(Address addr) throws DebuggerException; public Address newAddress(long value) throws DebuggerException;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxDebuggerLocal.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxDebuggerLocal.java Wed Jul 05 16:36:48 2017 +0200 @@ -423,6 +423,11 @@ long value = readAddressValue(address); return (value == 0 ? null : new LinuxAddress(this, value)); } + public LinuxAddress readCompOopAddress(long address) + throws UnmappedAddressException, UnalignedAddressException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new LinuxAddress(this, value)); + } /** From the LinuxDebugger interface */ public LinuxOopHandle readOopHandle(long address) @@ -431,6 +436,12 @@ long value = readAddressValue(address); return (value == 0 ? null : new LinuxOopHandle(this, value)); } + public LinuxOopHandle readCompOopHandle(long address) + throws UnmappedAddressException, UnalignedAddressException, + NotInHeapException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new LinuxOopHandle(this, value)); + } //---------------------------------------------------------------------- // Thread context access
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcAddress.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcAddress.java Wed Jul 05 16:36:48 2017 +0200 @@ -72,6 +72,10 @@ return debugger.readAddress(addr + offset); } + public Address getCompOopAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { + return debugger.readCompOopAddress(addr + offset); + } + // // Java-related routines // @@ -112,6 +116,10 @@ throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { return debugger.readOopHandle(addr + offset); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return debugger.readCompOopHandle(addr + offset); + } // Mutators -- not implemented for now (FIXME) public void setCIntegerAt(long offset, long numBytes, long value) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -46,7 +46,9 @@ public long readCInteger(long address, long numBytes, boolean isUnsigned) throws DebuggerException; public ProcAddress readAddress(long address) throws DebuggerException; + public ProcAddress readCompOopAddress(long address) throws DebuggerException; public ProcOopHandle readOopHandle(long address) throws DebuggerException; + public ProcOopHandle readCompOopHandle(long address) throws DebuggerException; public long[] getThreadIntegerRegisterSet(int tid) throws DebuggerException; public long getAddressValue(Address addr) throws DebuggerException; public Address newAddress(long value) throws DebuggerException;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java Wed Jul 05 16:36:48 2017 +0200 @@ -53,8 +53,6 @@ */ public class ProcDebuggerLocal extends DebuggerBase implements ProcDebugger { - - protected static final int cacheSize = 16 * 1024 * 1024; // 16 MB //------------------------------------------------------------------------ @@ -337,10 +335,21 @@ return (value == 0 ? null : new ProcAddress(this, value)); } + public ProcAddress readCompOopAddress(long address) + throws UnmappedAddressException, UnalignedAddressException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new ProcAddress(this, value)); + } + /** From the ProcDebugger interface */ public ProcOopHandle readOopHandle(long address) throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { - long value = readAddressValue(address); + long value = readAddressValue(address); + return (value == 0 ? null : new ProcOopHandle(this, value)); + } + + public ProcOopHandle readCompOopHandle(long address) { + long value = readCompOopAddressValue(address); return (value == 0 ? null : new ProcOopHandle(this, value)); }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteAddress.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteAddress.java Wed Jul 05 16:36:48 2017 +0200 @@ -71,6 +71,9 @@ public Address getAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { return debugger.readAddress(addr + offset); } + public Address getCompOopAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { + return debugger.readCompOopAddress(addr + offset); + } // // Java-related routines @@ -112,6 +115,10 @@ throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { return debugger.readOopHandle(addr + offset); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return debugger.readCompOopHandle(addr + offset); + } // Mutators -- not implemented for now (FIXME) public void setCIntegerAt(long offset, long numBytes, long value) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -65,6 +65,9 @@ public long getJIntSize() throws RemoteException; public long getJLongSize() throws RemoteException; public long getJShortSize() throws RemoteException; + public long getHeapBase() throws RemoteException; + public long getHeapOopSize() throws RemoteException; + public long getLogMinObjAlignmentInBytes() throws RemoteException; public boolean areThreadsEqual(long addrOrId1, boolean isAddress1, long addrOrId2, boolean isAddress2) throws RemoteException; public int getThreadHashCode(long addrOrId, boolean isAddress) throws RemoteException;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java Wed Jul 05 16:36:48 2017 +0200 @@ -85,6 +85,9 @@ jlongSize = remoteDebugger.getJLongSize(); jshortSize = remoteDebugger.getJShortSize(); javaPrimitiveTypesConfigured = true; + heapBase = remoteDebugger.getHeapBase(); + heapOopSize = remoteDebugger.getHeapOopSize(); + logMinObjAlignmentInBytes = remoteDebugger.getLogMinObjAlignmentInBytes(); } catch (RemoteException e) { throw new DebuggerException(e); @@ -298,12 +301,24 @@ return (value == 0 ? null : new RemoteAddress(this, value)); } + RemoteAddress readCompOopAddress(long address) + throws UnmappedAddressException, UnalignedAddressException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new RemoteAddress(this, value)); + } + RemoteOopHandle readOopHandle(long address) throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { long value = readAddressValue(address); return (value == 0 ? null : new RemoteOopHandle(this, value)); } + RemoteOopHandle readCompOopHandle(long address) + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new RemoteOopHandle(this, value)); + } + boolean areThreadsEqual(Address addr1, Address addr2) { try { return remoteDebugger.areThreadsEqual(getAddressValue(addr1), true,
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerServer.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerServer.java Wed Jul 05 16:36:48 2017 +0200 @@ -114,6 +114,17 @@ return debugger.getJShortSize(); } + public long getHeapBase() throws RemoteException { + return debugger.getHeapBase(); + } + + public long getHeapOopSize() throws RemoteException { + return debugger.getHeapOopSize(); + } + + public long getLogMinObjAlignmentInBytes() throws RemoteException { + return debugger.getLogMinObjAlignmentInBytes(); + } public boolean areThreadsEqual(long addrOrId1, boolean isAddress1, long addrOrId2, boolean isAddress2) throws RemoteException { ThreadProxy t1 = getThreadProxy(addrOrId1, isAddress1);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/win32/Win32Address.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/win32/Win32Address.java Wed Jul 05 16:36:48 2017 +0200 @@ -72,6 +72,10 @@ return debugger.readAddress(addr + offset); } + public Address getCompOopAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { + return debugger.readCompOopAddress(addr + offset); + } + // // Java-related routines // @@ -112,6 +116,10 @@ throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { return debugger.readOopHandle(addr + offset); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return debugger.readCompOopHandle(addr + offset); + } // // C/C++-related mutators
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/win32/Win32Debugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/win32/Win32Debugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -45,7 +45,9 @@ public long readCInteger(long address, long numBytes, boolean isUnsigned) throws DebuggerException; public Win32Address readAddress(long address) throws DebuggerException; + public Win32Address readCompOopAddress(long address) throws DebuggerException; public Win32OopHandle readOopHandle(long address) throws DebuggerException; + public Win32OopHandle readCompOopHandle(long address) throws DebuggerException; public void writeJBoolean(long address, boolean value) throws DebuggerException; public void writeJByte(long address, byte value) throws DebuggerException; public void writeJChar(long address, char value) throws DebuggerException;
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/win32/Win32DebuggerLocal.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/win32/Win32DebuggerLocal.java Wed Jul 05 16:36:48 2017 +0200 @@ -306,12 +306,22 @@ return (Win32Address) newAddress(readAddressValue(address)); } + public Win32Address readCompOopAddress(long address) + throws UnmappedAddressException, UnalignedAddressException { + return (Win32Address) newAddress(readCompOopAddressValue(address)); + } + /** From the Win32Debugger interface */ public Win32OopHandle readOopHandle(long address) throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { long value = readAddressValue(address); return (value == 0 ? null : new Win32OopHandle(this, value)); } + public Win32OopHandle readCompOopHandle(long address) + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new Win32OopHandle(this, value)); + } /** From the Win32Debugger interface */ public void writeAddress(long address, Win32Address value) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgAddress.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgAddress.java Wed Jul 05 16:36:48 2017 +0200 @@ -72,6 +72,10 @@ return debugger.readAddress(addr + offset); } + public Address getCompOopAddressAt(long offset) throws UnalignedAddressException, UnmappedAddressException { + return debugger.readCompOopAddress(addr + offset); + } + // // Java-related routines // @@ -113,6 +117,10 @@ return debugger.readOopHandle(addr + offset); } + public OopHandle getCompOopHandleAt(long offset) + throws UnalignedAddressException, UnmappedAddressException, NotInHeapException { + return debugger.readCompOopHandle(addr + offset); + } // // C/C++-related mutators //
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebugger.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebugger.java Wed Jul 05 16:36:48 2017 +0200 @@ -45,7 +45,9 @@ public long readCInteger(long address, long numBytes, boolean isUnsigned) throws DebuggerException; public WindbgAddress readAddress(long address) throws DebuggerException; + public WindbgAddress readCompOopAddress(long address) throws DebuggerException; public WindbgOopHandle readOopHandle(long address) throws DebuggerException; + public WindbgOopHandle readCompOopHandle(long address) throws DebuggerException; // The returned array of register contents is guaranteed to be in // the same order as in the DbxDebugger for Solaris/x86 or amd64; that is,
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebuggerLocal.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebuggerLocal.java Wed Jul 05 16:36:48 2017 +0200 @@ -39,6 +39,7 @@ import sun.jvm.hotspot.debugger.cdbg.basic.BasicDebugEvent; import sun.jvm.hotspot.utilities.*; import sun.jvm.hotspot.utilities.memo.*; +import sun.jvm.hotspot.runtime.*; /** <P> An implementation of the JVMDebugger interface which talks to windbg and symbol table management is done in Java. </P> @@ -315,12 +316,22 @@ return (WindbgAddress) newAddress(readAddressValue(address)); } + public WindbgAddress readCompOopAddress(long address) + throws UnmappedAddressException, UnalignedAddressException { + return (WindbgAddress) newAddress(readCompOopAddressValue(address)); + } + /** From the WindbgDebugger interface */ public WindbgOopHandle readOopHandle(long address) throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { long value = readAddressValue(address); return (value == 0 ? null : new WindbgOopHandle(this, value)); } + public WindbgOopHandle readCompOopHandle(long address) + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { + long value = readCompOopAddressValue(address); + return (value == 0 ? null : new WindbgOopHandle(this, value)); + } /** From the WindbgDebugger interface */ public int getAddressSize() {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java Wed Jul 05 16:36:48 2017 +0200 @@ -63,12 +63,22 @@ javaSystemLoaderField = type.getOopField("_java_system_loader"); nofBuckets = db.lookupIntConstant("SystemDictionary::_nof_buckets").intValue(); - objectKlassField = type.getOopField("_object_klass"); - classLoaderKlassField = type.getOopField("_classloader_klass"); - stringKlassField = type.getOopField("_string_klass"); - systemKlassField = type.getOopField("_system_klass"); - threadKlassField = type.getOopField("_thread_klass"); - threadGroupKlassField = type.getOopField("_threadGroup_klass"); + objectKlassField = type.getOopField(WK_KLASS("object_klass")); + classLoaderKlassField = type.getOopField(WK_KLASS("classloader_klass")); + stringKlassField = type.getOopField(WK_KLASS("string_klass")); + systemKlassField = type.getOopField(WK_KLASS("system_klass")); + threadKlassField = type.getOopField(WK_KLASS("thread_klass")); + threadGroupKlassField = type.getOopField(WK_KLASS("threadGroup_klass")); + } + + // This WK functions must follow the definitions in systemDictionary.hpp: + private static String WK_KLASS(String name) { + //#define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] + return ("_well_known_klasses[SystemDictionary::"+WK_KLASS_ENUM_NAME(name)+"]"); + } + private static String WK_KLASS_ENUM_NAME(String kname) { + //#define WK_KLASS_ENUM_NAME(kname) kname##_knum + return (kname+"_knum"); } public Dictionary dictionary() {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java Wed Jul 05 16:36:48 2017 +0200 @@ -53,6 +53,8 @@ // system obj array klass object private static sun.jvm.hotspot.types.OopField systemObjArrayKlassObjField; + private static AddressField heapBaseField; + static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -83,6 +85,8 @@ doubleArrayKlassObjField = type.getOopField("_doubleArrayKlassObj"); systemObjArrayKlassObjField = type.getOopField("_systemObjArrayKlassObj"); + + heapBaseField = type.getAddressField("_heap_base"); } public Universe() { @@ -96,6 +100,14 @@ } } + public static long getHeapBase() { + if (heapBaseField.getValue() == null) { + return 0; + } else { + return heapBaseField.getValue().minus(null); + } + } + /** Returns "TRUE" iff "p" points into the allocated area of the heap. */ public boolean isIn(Address p) { return heap().isIn(p);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Array.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Array.java Wed Jul 05 16:36:48 2017 +0200 @@ -47,18 +47,52 @@ private static void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("arrayOopDesc"); - length = new CIntField(type.getCIntegerField("_length"), 0); - headerSize = type.getSize(); + typeSize = (int)type.getSize(); } // Size of the arrayOopDesc - private static long headerSize; + private static long headerSize=0; + private static long lengthOffsetInBytes=0; + private static long typeSize; + + private static long headerSizeInBytes() { + if (headerSize != 0) { + return headerSize; + } + if (VM.getVM().isCompressedOopsEnabled()) { + headerSize = typeSize; + } else { + headerSize = VM.getVM().alignUp(typeSize + VM.getVM().getIntSize(), + VM.getVM().getHeapWordSize()); + } + return headerSize; + } - // Fields - private static CIntField length; + private static long headerSize(BasicType type) { + if (Universe.elementTypeShouldBeAligned(type)) { + return alignObjectSize(headerSizeInBytes())/VM.getVM().getHeapWordSize(); + } else { + return headerSizeInBytes()/VM.getVM().getHeapWordSize(); + } + } + + private long lengthOffsetInBytes() { + if (lengthOffsetInBytes != 0) { + return lengthOffsetInBytes; + } + if (VM.getVM().isCompressedOopsEnabled()) { + lengthOffsetInBytes = typeSize - VM.getVM().getIntSize(); + } else { + lengthOffsetInBytes = typeSize; + } + return lengthOffsetInBytes; + } // Accessors for declared fields - public long getLength() { return length.getValue(this); } + public long getLength() { + boolean isUnsigned = true; + return this.getHandle().getCIntegerAt(lengthOffsetInBytes(), VM.getVM().getIntSize(), isUnsigned); + } public long getObjectSize() { ArrayKlass klass = (ArrayKlass) getKlass(); @@ -72,20 +106,12 @@ } public static long baseOffsetInBytes(BasicType type) { - if (Universe.elementTypeShouldBeAligned(type)) { - return (VM.getVM().isLP64()) ? alignObjectSize(headerSize) - : VM.getVM().alignUp(headerSize, 8); - } else { - return headerSize; - } + return headerSize(type) * VM.getVM().getHeapWordSize(); } public boolean isArray() { return true; } public void iterateFields(OopVisitor visitor, boolean doVMFields) { super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doCInt(length, true); - } } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java Wed Jul 05 16:36:48 2017 +0200 @@ -31,10 +31,10 @@ import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; -// A ConstantPool is an array containing class constants +// A ConstantPool is an oop containing class constants // as described in the class file -public class ConstantPool extends Array implements ClassConstants { +public class ConstantPool extends Oop implements ClassConstants { // Used for debugging this code private static final boolean DEBUG = false; @@ -55,8 +55,9 @@ tags = new OopField(type.getOopField("_tags"), 0); cache = new OopField(type.getOopField("_cache"), 0); poolHolder = new OopField(type.getOopField("_pool_holder"), 0); + length = new CIntField(type.getCIntegerField("_length"), 0); headerSize = type.getSize(); - elementSize = db.getOopSize(); + elementSize = 0; } ConstantPool(OopHandle handle, ObjectHeap heap) { @@ -68,7 +69,7 @@ private static OopField tags; private static OopField cache; private static OopField poolHolder; - + private static CIntField length; // number of elements in oop private static long headerSize; private static long elementSize; @@ -76,12 +77,22 @@ public TypeArray getTags() { return (TypeArray) tags.getValue(this); } public ConstantPoolCache getCache() { return (ConstantPoolCache) cache.getValue(this); } public Klass getPoolHolder() { return (Klass) poolHolder.getValue(this); } + public int getLength() { return (int)length.getValue(this); } + + private long getElementSize() { + if (elementSize !=0 ) { + return elementSize; + } else { + elementSize = VM.getVM().getOopSize(); + } + return elementSize; + } private long indexOffset(long index) { if (Assert.ASSERTS_ENABLED) { - Assert.that(index > 0 && index < getLength(), "invalid cp index"); + Assert.that(index > 0 && index < getLength(), "invalid cp index " + index + " " + getLength()); } - return (index * elementSize) + headerSize; + return (index * getElementSize()) + headerSize; } public ConstantTag getTagAt(long index) { @@ -464,7 +475,7 @@ } public long getObjectSize() { - return alignObjectSize(headerSize + (getLength() * elementSize)); + return alignObjectSize(headerSize + (getLength() * getElementSize())); } //----------------------------------------------------------------------
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java Wed Jul 05 16:36:48 2017 +0200 @@ -31,10 +31,10 @@ import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; -// A ConstantPool is an array containing class constants -// as described in the class file - -public class ConstantPoolCache extends Array { +// ConstantPoolCache : A constant pool cache (constantPoolCacheOopDesc). +// See cpCacheOop.hpp for details about this class. +// +public class ConstantPoolCache extends Oop { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -47,9 +47,9 @@ Type type = db.lookupType("constantPoolCacheOopDesc"); constants = new OopField(type.getOopField("_constant_pool"), 0); baseOffset = type.getSize(); - Type elType = db.lookupType("ConstantPoolCacheEntry"); elementSize = elType.getSize(); + length = new CIntField(type.getCIntegerField("_length"), 0); } ConstantPoolCache(OopHandle handle, ObjectHeap heap) { @@ -62,6 +62,8 @@ private static long baseOffset; private static long elementSize; + private static CIntField length; + public ConstantPool getConstants() { return (ConstantPool) constants.getValue(this); } @@ -87,6 +89,10 @@ tty.print("ConstantPoolCache for " + getConstants().getPoolHolder().getName().asString()); } + public int getLength() { + return (int) length.getValue(this); + } + public void iterateFields(OopVisitor visitor, boolean doVMFields) { super.iterateFields(visitor, doVMFields); if (doVMFields) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheKlass.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheKlass.java Wed Jul 05 16:36:48 2017 +0200 @@ -32,7 +32,7 @@ // A ConstantPoolCacheKlass is the klass of a ConstantPoolCache -public class ConstantPoolCacheKlass extends ArrayKlass { +public class ConstantPoolCacheKlass extends Klass { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -43,13 +43,20 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("constantPoolCacheKlass"); + headerSize = type.getSize() + Oop.getHeaderSize(); } ConstantPoolCacheKlass(OopHandle handle, ObjectHeap heap) { super(handle, heap); } + public long getObjectSize() { return alignObjectSize(headerSize); } + public void printValueOn(PrintStream tty) { tty.print("ConstantPoolCacheKlass"); } + + private static long headerSize; } + +
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolKlass.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolKlass.java Wed Jul 05 16:36:48 2017 +0200 @@ -32,7 +32,7 @@ // A ConstantPoolKlass is the klass of a ConstantPool -public class ConstantPoolKlass extends ArrayKlass { +public class ConstantPoolKlass extends Klass { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -43,13 +43,19 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("constantPoolKlass"); + headerSize = type.getSize() + Oop.getHeaderSize(); } ConstantPoolKlass(OopHandle handle, ObjectHeap heap) { super(handle, heap); } + public long getObjectSize() { return alignObjectSize(headerSize); } + public void printValueOn(PrintStream tty) { tty.print("ConstantPoolKlass"); } -}; + + private static long headerSize; +} +
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/DefaultOopVisitor.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/DefaultOopVisitor.java Wed Jul 05 16:36:48 2017 +0200 @@ -46,6 +46,7 @@ // Callback methods for each field type in an object public void doOop(OopField field, boolean isVMField) {} + public void doOop(NarrowOopField field, boolean isVMField) {} public void doByte(ByteField field, boolean isVMField) {} public void doChar(CharField field, boolean isVMField) {} public void doBoolean(BooleanField field, boolean isVMField) {}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java Wed Jul 05 16:36:48 2017 +0200 @@ -40,15 +40,26 @@ } }); } + private static long typeSize; private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("instanceOopDesc"); + typeSize = type.getSize(); } Instance(OopHandle handle, ObjectHeap heap) { super(handle, heap); } + // Returns header size in bytes. + public static long getHeaderSize() { + if (VM.getVM().isCompressedOopsEnabled()) { + return typeSize - VM.getVM().getIntSize(); + } else { + return typeSize; + } + } + public boolean isInstance() { return true; } public void iterateFields(OopVisitor visitor, boolean doVMFields) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Wed Jul 05 16:36:48 2017 +0200 @@ -467,7 +467,6 @@ for (int index = 0; index < length; index += NEXT_OFFSET) { short accessFlags = fields.getShortAt(index + ACCESS_FLAGS_OFFSET); short signatureIndex = fields.getShortAt(index + SIGNATURE_INDEX_OFFSET); - FieldType type = new FieldType((Symbol) getConstants().getObjAt(signatureIndex)); AccessFlags access = new AccessFlags(accessFlags); if (access.isStatic()) { @@ -790,7 +789,11 @@ short signatureIndex = fields.getShortAt(index + SIGNATURE_INDEX_OFFSET); FieldType type = new FieldType((Symbol) getConstants().getObjAt(signatureIndex)); if (type.isOop()) { - return new OopField(this, index); + if (VM.getVM().isCompressedOopsEnabled()) { + return new NarrowOopField(this, index); + } else { + return new OopField(this, index); + } } if (type.isByte()) { return new ByteField(this, index);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java Wed Jul 05 16:36:48 2017 +0200 @@ -171,8 +171,7 @@ } public long getObjectSize() { - System.out.println("should not reach here"); - return 0; + throw new RuntimeException("should not reach here"); } /** Array class with specific rank */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/NarrowOopField.java Wed Jul 05 16:36:48 2017 +0200 @@ -0,0 +1,55 @@ +/* + * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +package sun.jvm.hotspot.oops; + +import sun.jvm.hotspot.debugger.*; + +// The class for an oop field simply provides access to the value. +public class NarrowOopField extends OopField { + public NarrowOopField(FieldIdentifier id, long offset, boolean isVMField) { + super(id, offset, isVMField); + } + + public NarrowOopField(sun.jvm.hotspot.types.OopField vmField, long startOffset) { + super(new NamedFieldIdentifier(vmField.getName()), vmField.getOffset() + startOffset, true); + } + + public NarrowOopField(InstanceKlass holder, int fieldArrayIndex) { + super(holder, fieldArrayIndex); + } + + public Oop getValue(Oop obj) { + return obj.getHeap().newOop(getValueAsOopHandle(obj)); + } + + /** Debugging support */ + public OopHandle getValueAsOopHandle(Oop obj) { + return obj.getHandle().getCompOopHandleAt(getOffset()); + } + + public void setValue(Oop obj) throws MutationException { + // Fix this: setOopAt is missing in Address + } +}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjArray.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjArray.java Wed Jul 05 16:36:48 2017 +0200 @@ -43,7 +43,7 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("objArrayOopDesc"); - elementSize = db.getOopSize(); + elementSize = VM.getVM().getHeapOopSize(); } ObjArray(OopHandle handle, ObjectHeap heap) { @@ -54,9 +54,17 @@ private static long elementSize; - public Oop getObjAt(long index) { + public OopHandle getOopHandleAt(long index) { long offset = baseOffsetInBytes(BasicType.T_OBJECT) + (index * elementSize); - return getHeap().newOop(getHandle().getOopHandleAt(offset)); + if (VM.getVM().isCompressedOopsEnabled()) { + return getHandle().getCompOopHandleAt(offset); + } else { + return getHandle().getOopHandleAt(offset); + } + } + + public Oop getObjAt(long index) { + return getHeap().newOop(getOopHandleAt(index)); } public void printValueOn(PrintStream tty) { @@ -69,7 +77,13 @@ long baseOffset = baseOffsetInBytes(BasicType.T_OBJECT); for (int index = 0; index < length; index++) { long offset = baseOffset + (index * elementSize); - visitor.doOop(new OopField(new IndexableFieldIdentifier(index), offset, false), false); + OopField field; + if (VM.getVM().isCompressedOopsEnabled()) { + field = new NarrowOopField(new IndexableFieldIdentifier(index), offset, false); + } else { + field = new OopField(new IndexableFieldIdentifier(index), offset, false); + } + visitor.doOop(field, false); } } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Wed Jul 05 16:36:48 2017 +0200 @@ -41,6 +41,12 @@ public class ObjectHeap { + private static final boolean DEBUG; + + static { + DEBUG = System.getProperty("sun.jvm.hotspot.oops.ObjectHeap.DEBUG") != null; + } + private OopHandle symbolKlassHandle; private OopHandle methodKlassHandle; private OopHandle constMethodKlassHandle; @@ -152,7 +158,7 @@ public ObjectHeap(TypeDataBase db) throws WrongTypeException { // Get commonly used sizes of basic types - oopSize = db.getOopSize(); + oopSize = VM.getVM().getOopSize(); byteSize = db.getJByteType().getSize(); charSize = db.getJCharType().getSize(); booleanSize = db.getJBooleanType().getSize(); @@ -440,12 +446,16 @@ try { // Traverses the space from bottom to top OopHandle handle = bottom.addOffsetToAsOopHandle(0); + while (handle.lessThan(top)) { Oop obj = null; try { obj = newOop(handle); } catch (UnknownOopException exp) { + if (DEBUG) { + throw new RuntimeException(" UnknownOopException " + exp); + } } if (obj == null) { //Find the object size using Printezis bits and skip over
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogram.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogram.java Wed Jul 05 16:36:48 2017 +0200 @@ -64,8 +64,17 @@ List list = getElements(); ObjectHistogramElement.titleOn(tty); Iterator iterator = list.listIterator(); + int num=0; + int totalCount=0; + int totalSize=0; while (iterator.hasNext()) { - ((ObjectHistogramElement) iterator.next()).printOn(tty); + ObjectHistogramElement el = (ObjectHistogramElement) iterator.next(); + num++; + totalCount+=el.getCount(); + totalSize+=el.getSize(); + tty.print(num + ":" + "\t\t"); + el.printOn(tty); } + tty.println("Total : " + "\t" + totalCount + "\t" + totalSize); } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogramElement.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogramElement.java Wed Jul 05 16:36:48 2017 +0200 @@ -110,12 +110,12 @@ public static void titleOn(PrintStream tty) { tty.println("Object Histogram:"); tty.println(); - tty.println("Size" + "\t" + "Count" + "\t" + "Class description"); - tty.println("-------------------------------------------------------"); + tty.println("num " + "\t" + " #instances" + "\t" + "#bytes" + "\t" + "Class description"); + tty.println("--------------------------------------------------------------------------"); } public void printOn(PrintStream tty) { - tty.print(size + "\t" + count + "\t"); + tty.print(count + "\t" + size + "\t"); tty.print(getDescription()); tty.println(); }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Wed Jul 05 16:36:48 2017 +0200 @@ -47,7 +47,8 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("oopDesc"); mark = new CIntField(type.getCIntegerField("_mark"), 0); - klass = new OopField(type.getOopField("_klass"), 0); + klass = new OopField(type.getOopField("_metadata._klass"), 0); + compressedKlass = new NarrowOopField(type.getOopField("_metadata._compressed_klass"), 0); headerSize = type.getSize(); } @@ -67,10 +68,11 @@ public OopHandle getHandle() { return handle; } private static long headerSize; - public static long getHeaderSize() { return headerSize; } + public static long getHeaderSize() { return headerSize; } // Header size in bytes. private static CIntField mark; private static OopField klass; + private static NarrowOopField compressedKlass; public boolean isShared() { return CompactingPermGenGen.isShared(handle); @@ -86,7 +88,13 @@ // Accessors for declared fields public Mark getMark() { return new Mark(getHandle()); } - public Klass getKlass() { return (Klass) klass.getValue(this); } + public Klass getKlass() { + if (VM.getVM().isCompressedOopsEnabled()) { + return (Klass) compressedKlass.getValue(this); + } else { + return (Klass) klass.getValue(this); + } + } public boolean isA(Klass k) { return getKlass().isSubtypeOf(k); @@ -120,7 +128,7 @@ // Align the object size. public static long alignObjectSize(long size) { - return VM.getVM().alignUp(size, VM.getVM().getMinObjAlignmentInBytes()); + return VM.getVM().alignUp(size, VM.getVM().getMinObjAlignment()); } // All vm's align longs, so pad out certain offsets. @@ -163,7 +171,11 @@ void iterateFields(OopVisitor visitor, boolean doVMFields) { if (doVMFields) { visitor.doCInt(mark, true); - visitor.doOop(klass, true); + if (VM.getVM().isCompressedOopsEnabled()) { + visitor.doOop(compressedKlass, true); + } else { + visitor.doOop(klass, true); + } } } @@ -219,6 +231,10 @@ if (handle == null) { return null; } - return handle.getOopHandleAt(klass.getOffset()); + if (VM.getVM().isCompressedOopsEnabled()) { + return handle.getCompOopHandleAt(compressedKlass.getOffset()); + } else { + return handle.getOopHandleAt(klass.getOffset()); + } } };
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopPrinter.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopPrinter.java Wed Jul 05 16:36:48 2017 +0200 @@ -57,6 +57,13 @@ Oop.printOopValueOn(field.getValue(getObj()), tty); tty.println(); } + + public void doOop(NarrowOopField field, boolean isVMField) { + printField(field); + Oop.printOopValueOn(field.getValue(getObj()), tty); + tty.println(); + } + public void doChar(CharField field, boolean isVMField) { printField(field); char c = field.getValue(getObj());
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Wed Jul 05 16:36:48 2017 +0200 @@ -281,8 +281,11 @@ } catch (RuntimeException re) { // ignore, currently java_lang_Class::hc_klass_offset is zero } - - hcKlassField = new OopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true); + if (VM.getVM().isCompressedOopsEnabled()) { + hcKlassField = new NarrowOopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true); + } else { + hcKlassField = new OopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true); + } } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopVisitor.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopVisitor.java Wed Jul 05 16:36:48 2017 +0200 @@ -41,6 +41,7 @@ // Callback methods for each field type in an object public void doOop(OopField field, boolean isVMField); + public void doOop(NarrowOopField field, boolean isVMField); public void doByte(ByteField field, boolean isVMField); public void doChar(CharField field, boolean isVMField); public void doBoolean(BooleanField field, boolean isVMField);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/AddressVisitor.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/AddressVisitor.java Wed Jul 05 16:36:48 2017 +0200 @@ -31,4 +31,5 @@ public interface AddressVisitor { public void visitAddress(Address addr); + public void visitCompOopAddress(Address addr); }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Frame.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Frame.java Wed Jul 05 16:36:48 2017 +0200 @@ -534,7 +534,8 @@ public void visitValueLocation(Address valueAddr) { } - public void visitDeadLocation(Address deadAddr) { + public void visitNarrowOopLocation(Address compOopAddr) { + addressVisitor.visitCompOopAddress(compOopAddr); } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Wed Jul 05 16:36:48 2017 +0200 @@ -36,6 +36,7 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; +import sun.jvm.hotspot.runtime.*; /** <P> This class encapsulates the global state of the VM; the universe, object heap, interpreter, etc. It is a Singleton and @@ -93,6 +94,10 @@ private boolean isLP64; private int bytesPerLong; private int minObjAlignmentInBytes; + private int logMinObjAlignmentInBytes; + private int heapWordSize; + private int heapOopSize; + private int oopSize; /** This is only present in a non-core build */ private CodeCache codeCache; /** This is only present in a C1 build */ @@ -117,6 +122,7 @@ private static Type uintxType; private static CIntegerType boolType; private Boolean sharingEnabled; + private Boolean compressedOopsEnabled; // command line flags supplied to VM - see struct Flag in globals.hpp public static final class Flag { @@ -308,6 +314,11 @@ } bytesPerLong = db.lookupIntConstant("BytesPerLong").intValue(); minObjAlignmentInBytes = db.lookupIntConstant("MinObjAlignmentInBytes").intValue(); + // minObjAlignment = db.lookupIntConstant("MinObjAlignment").intValue(); + logMinObjAlignmentInBytes = db.lookupIntConstant("LogMinObjAlignmentInBytes").intValue(); + heapWordSize = db.lookupIntConstant("HeapWordSize").intValue(); + oopSize = db.lookupIntConstant("oopSize").intValue(); + heapOopSize = db.lookupIntConstant("heapOopSize").intValue(); intxType = db.lookupType("intx"); uintxType = db.lookupType("uintx"); @@ -331,6 +342,8 @@ throw new RuntimeException("Attempt to initialize VM twice"); } soleInstance = new VM(db, debugger, debugger.getMachineDescription().isBigEndian()); + debugger.putHeapConst(Universe.getHeapBase(), soleInstance.getHeapOopSize(), + soleInstance.logMinObjAlignmentInBytes); for (Iterator iter = vmInitializedObservers.iterator(); iter.hasNext(); ) { ((Observer) iter.next()).update(null, null); } @@ -440,13 +453,17 @@ } public long getOopSize() { - return db.getOopSize(); + return oopSize; } public long getLogAddressSize() { return logAddressSize; } + public long getIntSize() { + return db.getJIntType().getSize(); + } + /** NOTE: this offset is in BYTES in this system! */ public long getStackBias() { return stackBias; @@ -467,10 +484,24 @@ } /** Get minimum object alignment in bytes. */ + public int getMinObjAlignment() { + return minObjAlignmentInBytes; + } + public int getMinObjAlignmentInBytes() { return minObjAlignmentInBytes; } + public int getLogMinObjAlignmentInBytes() { + return logMinObjAlignmentInBytes; + } + public int getHeapWordSize() { + return heapWordSize; + } + + public int getHeapOopSize() { + return heapOopSize; + } /** Utility routine for getting data structure alignment correct */ public long alignUp(long size, long alignment) { return (size + alignment - 1) & ~(alignment - 1); @@ -701,6 +732,14 @@ return sharingEnabled.booleanValue(); } + public boolean isCompressedOopsEnabled() { + if (compressedOopsEnabled == null) { + Flag flag = getCommandLineFlag("UseCompressedOops"); + compressedOopsEnabled = (flag == null) ? Boolean.FALSE: + (flag.getBool()? Boolean.TRUE: Boolean.FALSE); + } + return compressedOopsEnabled.booleanValue(); + } // returns null, if not available. public Flag[] getCommandLineFlags() {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/Field.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/Field.java Wed Jul 05 16:36:48 2017 +0200 @@ -109,6 +109,8 @@ public Address getAddress (Address addr) throws UnmappedAddressException, UnalignedAddressException, WrongTypeException; public OopHandle getOopHandle(Address addr) throws UnmappedAddressException, UnalignedAddressException, WrongTypeException, NotInHeapException; + public OopHandle getNarrowOopHandle(Address addr) + throws UnmappedAddressException, UnalignedAddressException, WrongTypeException, NotInHeapException; /** <P> These accessors require that the field be static; otherwise, a WrongTypeException will be thrown. Note that type checking is @@ -138,4 +140,6 @@ public Address getAddress () throws UnmappedAddressException, UnalignedAddressException; public OopHandle getOopHandle() throws UnmappedAddressException, UnalignedAddressException, NotInHeapException; + public OopHandle getNarrowOopHandle() + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/NarrowOopField.java Wed Jul 05 16:36:48 2017 +0200 @@ -0,0 +1,41 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +package sun.jvm.hotspot.types; + +import sun.jvm.hotspot.debugger.*; + +/** A specialization of Field which represents a field containing an + narrow oop value and which adds typechecked getValue() routines returning + OopHandles. */ + +public interface NarrowOopField extends OopField { + /** The field must be nonstatic and the type of the field must be an + oop type, or a WrongTypeException will be thrown. */ + public OopHandle getValue(Address addr) throws UnmappedAddressException, UnalignedAddressException, WrongTypeException; + + /** The field must be static and the type of the field must be an + oop type, or a WrongTypeException will be thrown. */ + public OopHandle getValue() throws UnmappedAddressException, UnalignedAddressException, WrongTypeException; +}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/Type.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/Type.java Wed Jul 05 16:36:48 2017 +0200 @@ -122,5 +122,6 @@ public JShortField getJShortField (String fieldName) throws WrongTypeException; public CIntegerField getCIntegerField (String fieldName) throws WrongTypeException; public OopField getOopField (String fieldName) throws WrongTypeException; + public NarrowOopField getNarrowOopField (String fieldName) throws WrongTypeException; public AddressField getAddressField (String fieldName); }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicField.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicField.java Wed Jul 05 16:36:48 2017 +0200 @@ -43,6 +43,19 @@ /** Used for static fields only */ private Address staticFieldAddress; + // Copy constructor to create NarrowOopField from OopField. + public BasicField(Field fld) { + BasicField field = (BasicField)fld; + + this.db = field.db; + this.containingType = field.containingType; + this.name = field.name; + this.type = field.type; + this.size = field.size; + this.isStatic = field.isStatic; + this.offset = field.offset; + this.staticFieldAddress = field.staticFieldAddress; + } /** offsetInBytes is ignored if the field is static; staticFieldAddress is used only if the field is static. */ public BasicField(BasicTypeDataBase db, Type containingType, String name, Type type, @@ -161,6 +174,13 @@ } return addr.getOopHandleAt(offset); } + public OopHandle getNarrowOopHandle(Address addr) + throws UnmappedAddressException, UnalignedAddressException, WrongTypeException, NotInHeapException { + if (isStatic) { + throw new WrongTypeException(); + } + return addr.getCompOopHandleAt(offset); + } //-------------------------------------------------------------------------------- // Dereferencing operations for static fields @@ -234,4 +254,11 @@ } return staticFieldAddress.getOopHandleAt(0); } + public OopHandle getNarrowOopHandle() + throws UnmappedAddressException, UnalignedAddressException, WrongTypeException, NotInHeapException { + if (!isStatic) { + throw new WrongTypeException(); + } + return staticFieldAddress.getCompOopHandleAt(0); + } }
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicFieldWrapper.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicFieldWrapper.java Wed Jul 05 16:36:48 2017 +0200 @@ -95,6 +95,10 @@ throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { return field.getOopHandle(addr); } + public OopHandle getNarrowOopHandle(Address addr) + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { + return field.getNarrowOopHandle(addr); + } public boolean getJBoolean () throws UnmappedAddressException, UnalignedAddressException, WrongTypeException { return field.getJBoolean(); @@ -130,4 +134,8 @@ throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { return field.getOopHandle(); } + public OopHandle getNarrowOopHandle() + throws UnmappedAddressException, UnalignedAddressException, NotInHeapException { + return field.getNarrowOopHandle(); + } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicNarrowOopField.java Wed Jul 05 16:36:48 2017 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +package sun.jvm.hotspot.types.basic; + +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.types.*; + +/** A specialization of BasicField which represents a field containing + an oop value and which adds typechecked getValue() routines + returning OopHandles. */ + +public class BasicNarrowOopField extends BasicOopField implements NarrowOopField { + + private static final boolean DEBUG = false; + + public BasicNarrowOopField (OopField oopf) { + super(oopf); + } + + public BasicNarrowOopField(BasicTypeDataBase db, Type containingType, String name, Type type, + boolean isStatic, long offset, Address staticFieldAddress) { + super(db, containingType, name, type, isStatic, offset, staticFieldAddress); + + if (DEBUG) { + System.out.println(" name " + name + " type " + type + " isStatic " + isStatic + " offset " + offset + " static addr " + staticFieldAddress); + } + if (!type.isOopType()) { + throw new WrongTypeException("Type of a BasicOopField must be an oop type"); + } + } + + /** The field must be nonstatic and the type of the field must be a + Java oop, or a WrongTypeException will be thrown. */ + public OopHandle getValue(Address addr) throws UnmappedAddressException, UnalignedAddressException, WrongTypeException { + return getNarrowOopHandle(addr); + } + + /** The field must be static and the type of the field must be a + Java oop, or a WrongTypeException will be thrown. */ + public OopHandle getValue() throws UnmappedAddressException, UnalignedAddressException, WrongTypeException { + return getNarrowOopHandle(); + } +}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicOopField.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicOopField.java Wed Jul 05 16:36:48 2017 +0200 @@ -32,6 +32,12 @@ returning OopHandles. */ public class BasicOopField extends BasicField implements OopField { + + + public BasicOopField(OopField oopf) { + super(oopf); + } + public BasicOopField(BasicTypeDataBase db, Type containingType, String name, Type type, boolean isStatic, long offset, Address staticFieldAddress) { super(db, containingType, name, type, isStatic, offset, staticFieldAddress);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicType.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicType.java Wed Jul 05 16:36:48 2017 +0200 @@ -273,6 +273,10 @@ return (OopField) field; } + public NarrowOopField getNarrowOopField(String fieldName) throws WrongTypeException { + return (NarrowOopField) new BasicNarrowOopField(getOopField(fieldName)); + } + public AddressField getAddressField(String fieldName) { // This type can not be inferred (for now), so provide a wrapper Field field = getField(fieldName); @@ -287,7 +291,7 @@ name was already present in this class. */ public void addField(Field field) { if (nameToFieldMap.get(field.getName()) != null) { - throw new RuntimeException("field of name \"" + field.getName() + "\" already present"); + throw new RuntimeException("field of name \"" + field.getName() + "\" already present in type " + this); } nameToFieldMap.put(field.getName(), field);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicTypeDataBase.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/types/basic/BasicTypeDataBase.java Wed Jul 05 16:36:48 2017 +0200 @@ -27,6 +27,7 @@ import java.util.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.runtime.VM; /** <P> This is a basic implementation of the TypeDataBase interface. It allows an external type database builder to add types to be @@ -146,7 +147,7 @@ } public long getOopSize() { - return machDesc.getOopSize(); + return VM.getVM().getOopSize(); } public boolean addressTypeIsEqualToType(Address addr, Type type) {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/FindInHeapPanel.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/FindInHeapPanel.java Wed Jul 05 16:36:48 2017 +0200 @@ -92,7 +92,17 @@ iterated += addressSize; updateProgressBar(); } + public void visitCompOopAddress(Address addr) { + if (error) return; + Address val = addr.getCompOopAddressAt(0); + if (AddressOps.equal(val, value)) { + error = reportResult(addr); + } + iterated += addressSize; + updateProgressBar(); + + } public void epilogue() { iterated = 0; updateProgressBar();
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java Wed Jul 05 16:36:48 2017 +0200 @@ -1077,8 +1077,8 @@ oms = new OopMapStream(map, OopMapValue.OopTypes.VALUE_VALUE); buf.append(omvIterator.iterate(oms, "Value:", false)); - oms = new OopMapStream(map, OopMapValue.OopTypes.DEAD_VALUE); - buf.append(omvIterator.iterate(oms, "Dead:", false)); + oms = new OopMapStream(map, OopMapValue.OopTypes.NARROWOOP_VALUE); + buf.append(omvIterator.iterate(oms, "Oop:", false)); oms = new OopMapStream(map, OopMapValue.OopTypes.CALLEE_SAVED_VALUE); buf.append(omvIterator.iterate(oms, "Callee saved:", true));
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java Wed Jul 05 16:36:48 2017 +0200 @@ -156,6 +156,9 @@ throw new RuntimeException(exp); } } + public void visitCompOopAddress(Address handleAddr) { + throw new RuntimeException("Should not reach here. JNIHandles are not compressed"); + } }); } catch (RuntimeException re) { handleRuntimeException(re);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Wed Jul 05 16:36:48 2017 +0200 @@ -574,6 +574,10 @@ throw new RuntimeException(exp); } } + public void visitCompOopAddress(Address handleAddr) { + throw new RuntimeException( + " Should not reach here. JNIHandles are not compressed \n"); + } }); } catch (RuntimeException re) { handleRuntimeException(re); @@ -601,8 +605,7 @@ writeObjectID(array.getKlass().getJavaMirror()); final int length = (int) array.getLength(); for (int index = 0; index < length; index++) { - long offset = OBJECT_BASE_OFFSET + index * OBJ_ID_SIZE; - OopHandle handle = array.getHandle().getOopHandleAt(offset); + OopHandle handle = array.getOopHandleAt(index); writeObjectID(getAddressValue(handle)); } } @@ -803,8 +806,13 @@ break; case JVM_SIGNATURE_CLASS: case JVM_SIGNATURE_ARRAY: { - OopHandle handle = ((OopField)field).getValueAsOopHandle(oop); - writeObjectID(getAddressValue(handle)); + if (VM.getVM().isCompressedOopsEnabled()) { + OopHandle handle = ((NarrowOopField)field).getValueAsOopHandle(oop); + writeObjectID(getAddressValue(handle)); + } else { + OopHandle handle = ((OopField)field).getValueAsOopHandle(oop); + writeObjectID(getAddressValue(handle)); + } break; } default:
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java Thu Apr 24 12:12:16 2008 -0700 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java Wed Jul 05 16:36:48 2017 +0200 @@ -282,6 +282,15 @@ markAndTraverse(next); } + public void visitCompOopAddress(Address addr) { + Oop next = heap.newOop(addr.getCompOopHandleAt(0)); + LivenessPathElement lp = new LivenessPathElement(null, + new NamedFieldIdentifier(baseRootDescription + + " @ " + addr));