--- a/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,4 @@
f1478a6d25fddd311a84dcbfac50824cc1858bdd jdk8-b75
f407160c280d1c5b00d314c535441ac26f195fee jdk8-b76
d17eb2e13e362085e866d46235314c50cc4661cc jdk8-b77
+6d3dcd34b5b962ea1ef9eed0dafdee9e812401bc jdk8-b78
--- a/.hgtags-top-repo Tue Feb 26 09:25:44 2013 -0800
+++ b/.hgtags-top-repo Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,5 @@
2a713921952cbd77a1e699626976cb6cdfe3e57e jdk8-b75
278af9fc67e7eba2884936b49ec07345f423aabb jdk8-b76
3933eebc659d58c597aa8cb4b3e58f2250ce3e1a jdk8-b77
+fd1a5574cf68af24bfd52decc37ac6361afb278a jdk8-b78
+91d35211e74464dca5edf9b66ab01d0d0d8cded7 jdk8-b79
--- a/README Tue Feb 26 09:25:44 2013 -0800
+++ b/README Tue Mar 05 11:46:02 2013 -0800
@@ -1,45 +1,40 @@
README:
This file should be located at the top of the OpenJDK Mercurial root
- repository. This root repository will include a "make" directory,
- and a Makefile for building the entire OpenJDK.
- A full OpenJDK repository set (forest) should also include the following
- 6 nested repositories:
+ repository. A full OpenJDK repository set (forest) should also include
+ the following 6 nested repositories:
"jdk", "hotspot", "langtools", "corba", "jaxws" and "jaxp".
- There are also several source downloads for the jax* repositories that
- will be needed.
- This one root repository can be obtained with something like:
-
+ The root repository can be obtained with something like:
hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8
- To make sure you have all the nested repositories, you can run the
- get_source.sh script located in the same respository as this file:
-
+ You can run the get_source.sh script located in the root repository to get
+ the other needed repositories:
cd openjdk8 && sh ./get_source.sh
People unfamiliar with Mercurial should read the first few chapters of
the Mercurial book: http://hgbook.red-bean.com/read/
- See http://openjdk.java.net/ for more information about the OpenJDK.
+ See http://openjdk.java.net/ for more information about OpenJDK.
Simple Build Instructions:
0. Get the necessary system software/packages installed on your system, see
- http://hg.openjdk.java.net/jdk8/build/raw-file/tip/README-builds.html
+ http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html
- 1. If you don't have a jdk6 installed, download and install a JDK 6 from
+ 1. If you don't have a jdk7u7 or newer jdk, download and install it from
http://java.sun.com/javase/downloads/index.jsp
- Set the environment variable ALT_BOOTDIR to the location of JDK 6.
+ Add the /bin directory of this installation to your PATH environment
+ variable.
- 2. Check the sanity of doing a build with your current system:
- make sanity
- See README-builds.html if you run into problems.
+ 2. Configure the build:
+ bash ./configure
- 3. Do a complete build of the OpenJDK:
+ 3. Build the OpenJDK:
make all
- The resulting JDK image should be found in build/*/j2sdk-image
+ The resulting JDK image should be found in build/*/images/j2sdk-image
where make is GNU make 3.81 or newer, /usr/bin/make on Linux usually
-is 3.81 or newer.
+is 3.81 or newer. Note that on Solaris, GNU make is called "gmake".
-Complete details are available in README-builds.html.
+Complete details are available in the file:
+ http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html
--- a/README-builds.html Tue Feb 26 09:25:44 2013 -0800
+++ b/README-builds.html Tue Mar 05 11:46:02 2013 -0800
@@ -3,14 +3,15 @@
<head>
<title>OpenJDK Build README</title>
</head>
- <body style="background-color:lightcyan">
+ <body style="background-color:aquamarine">
+
<!-- ====================================================== -->
<table width="100%">
<tr>
<td align="center">
<img alt="OpenJDK"
src="http://openjdk.java.net/images/openjdk.png"
- width=256 />
+ width=256>
</td>
</tr>
<tr>
@@ -19,109 +20,116 @@
</td>
</tr>
</table>
- <!-- ------------------------------------------------------ -->
+
+ <!-- ====================================================== -->
<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.
+ 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.
+
+ <!-- ====================================================== -->
+ <h3>!!!!!!!!!!!!!!! THIS IS A MAJOR RE-WRITE of this document. !!!!!!!!!!!!!</h3>
+ <blockquote>
+ Some Headlines:
+ <ul>
+ <li>
+ The build is now a "<code>configure && make</code>" style build
+ </li>
+ <li>
+ Any GNU make 3.81 or newer should work
+ </li>
+ <li>
+ The build should scale, i.e. more processors should
+ cause the build to be done in less wall-clock time
+ </li>
+ <li>
+ Nested or recursive make invocations have been significantly
+ reduced, as has the total fork/exec or spawning
+ of sub processes during the build
+ </li>
+ <li>
+ Windows MKS usage is no longer supported
+ </li>
+ <li>
+ Windows Visual Studio <code>vsvars*.bat</code> and
+ <code>vcvars*.bat</code> files are run automatically
+ </li>
+ <li>
+ Ant is no longer used when building the OpenJDK
+ </li>
+ <li>
+ Use of ALT_* environment variables for configuring the
+ build is no longer supported
+ </li>
+ </ul>
+ </blockquote>
</blockquote>
- <!-- ------------------------------------------------------ -->
+
+ <!-- ====================================================== -->
<hr>
<h2><a name="contents">Contents</a></h2>
<blockquote>
<ul>
<li><a href="#introduction">Introduction</a></li>
+
<li><a href="#hg">Use of Mercurial</a>
<ul>
<li><a href="#get_source">Getting the Source</a></li>
+ <li><a href="#repositories">Repositories</a></li>
</ul>
</li>
- <li><a href="#MBE">Minimum Build Environments</a></li>
- <li><a href="#SDBE">Specific Developer Build Environments</a>
+
+ <li><a href="#building">Building</a>
<ul>
- <li><a href="#fedora">Fedora Linux</a> </li>
- <li><a href="#centos">CentOS Linux</a> </li>
- <li><a href="#debian">Debian GNU/Linux</a></li>
- <li><a href="#ubuntu">Ubuntu Linux</a> </li>
- <li><a href="#opensuse">OpenSUSE</a></li>
- <li><a href="#mandriva">Mandriva</a></li>
- <li><a href="#opensolaris">OpenSolaris</a></li>
- </ul>
- </li>
- <li><a href="#directories">Source Directory Structure</a>
- <ul>
- <li><a href="#drops">Managing the Source Drops</a></li>
+ <li><a href="#setup">System Setup</a>
+ <ul>
+ <li><a href="#linux">Linux</a></li>
+ <li><a href="#solaris">Solaris</a></li>
+ <li><a href="#macosx">Mac OS X</a></li>
+ <li><a href="#windows">Windows</a></li>
+ </ul>
+ </li>
+ <li><a href="#configure">Configure</a></li>
+ <li><a href="#make">Make</a></li>
</ul>
</li>
- <li><a href="#building">Build Information</a>
+ <li><a href="#testing">Testing</a></li>
+ </ul>
+ <hr>
+ <ul>
+ <li><a href="#hints">Appendix A: Hints and Tips</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="#macosx">Basic Mac OS X System Setup</a></li>
- <li><a href="#dependencies">Build Dependencies</a>
- <ul>
- <li><a href="#bootjdk">Bootstrap JDK</a> </li>
- <li><a href="#importjdk">Optional Import JDK</a> </li>
- <li><a href="#ant">Ant 1.7.1</a> </li>
- <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
- <li><a href="#compilers">Compilers</a>
- <ul>
- <li><a href="#msvc32">Microsoft Visual Studio Professional/Express for 32 bit</a> </li>
- <li><a href="#msvc64">Microsoft Visual Studio Professional for 64 bit</a> </li>
- <li><a href="#mssdk64">Microsoft Windows SDK for 64 bit</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>
- <li><a href="#xrender">XRender 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>) <strong>or</strong></li>
- <li>Minimalist GNU for Windows (<a href="#msys">MinGW/MSYS</a>)</li>
- <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li>
- </ul>
- </li>
- </ul>
- </li>
+ <li><a href="#faq">FAQ</a></li>
+ <li><a href="#performance">Build Performance Tips</a></li>
+ <li><a href="#troubleshooting">Troubleshooting</a></li>
</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>
- <li><a href="#newbuild">The New Build</a></li>
+ <li><a href="#gmake">Appendix B: GNU Make Information</a></li>
+ <li><a href="#buildenvironments">Appendix C: Build Environments</a></li>
+
+ <!-- Leave out
+ <li><a href="#mapping">Appendix D: Mapping Old Builds to the New Builds</a></li>
+ -->
+
</ul>
</blockquote>
- <!-- ------------------------------------------------------ -->
+ <!-- ====================================================== -->
<hr>
<h2><a name="hg">Use of Mercurial</a></h2>
<blockquote>
The OpenJDK sources are maintained with the revision control system
<a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
If you are new to Mercurial, please see the
- <a href="http://mercurial.selenic.com/wiki/BeginnersGuides">Beginner Guides</a>
- or refer to the <a href="http://hgbook.red-bean.com/">Mercurial Book</a>.
+ <a href="http://mercurial.selenic.com/wiki/BeginnersGuides">
+ Beginner Guides</a>
+ or refer to the <a href="http://hgbook.red-bean.com/">
+ Mercurial Book</a>.
The first few chapters of the book provide an excellent overview of
Mercurial, what it is and how it works.
<br>
@@ -130,578 +138,1631 @@
Developer Guide: Installing and Configuring Mercurial</a>
section for more information.
- <!-- ------------------------------------------------------ -->
<h3><a name="get_source">Getting the Source</a></h3>
<blockquote>
To get the entire set of OpenJDK Mercurial repositories
- use the script <code>get_source.sh</code> located in the root repository:
+ use the script <code>get_source.sh</code> located in the
+ root repository:
<blockquote>
- <tt>
- hg clone http://hg.openjdk.java.net/jdk8/jdk8 <i>YourOpenJDK</i>
- <br>cd <i>YourOpenJDK</i>
- <br>sh ./get_source.sh
- </tt>
+ <code>
+ hg clone http://hg.openjdk.java.net/jdk8/jdk8
+ <i>YourOpenJDK</i>
+ <br>
+ cd <i>YourOpenJDK</i>
+ <br>
+ bash ./get_source.sh
+ </code>
+ </blockquote>
+ Once you have all the repositories, keep in mind that each
+ repository is it's own independent repository.
+ You can also re-run <code>./get_source.sh</code> anytime to
+ pull over all the latest changesets in all the repositories.
+ This set of nested repositories has been given the term
+ "forest" and there are various ways to apply the same
+ <code>hg</code> command to each of the repositories.
+ For example, the script <code>make/scripts/hgforest.sh</code>
+ can be used to repeat the same <code>hg</code>
+ command on every repository, e.g.
+ <blockquote>
+ <code>
+ cd <i>YourOpenJDK</i>
+ <br>
+ bash ./make/scripts/hgforest.sh status
+ </code>
</blockquote>
- Once you have all the repositories, the
- script <tt>make/scripts/hgforest.sh</tt>
- can be used to repeat the same <tt>hg</tt>
- command on every repository in the forest, e.g.
- <blockquote>
- <tt>
- cd <i>YourOpenJDK</i>
- <br>sh ./make/scripts/hgforest.sh pull -u
- </tt>
- </blockquote>
+ </blockquote>
+
+ <h3><a name="repositories">Repositories</a></h3>
+ <blockquote>
+ <p>The set of repositories and what they contain:</p>
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Repository</th>
+ <th>Contains</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ . (root)
+ </td>
+ <td>
+ common configure and makefile logic
+ </td>
+ </tr>
+ <tr>
+ <td>
+ hotspot
+ </td>
+ <td>
+ source code and make files for building
+ the OpenJDK Hotspot Virtual Machine
+ </td>
+ </tr>
+ <tr>
+ <td>
+ langtools
+ </td>
+ <td>
+ source code for the OpenJDK javac and language tools
+ </td>
+ </tr>
+ <tr>
+ <td>
+ jdk
+ </td>
+ <td>
+ source code and make files for building
+ the OpenJDK runtime libraries and misc files
+ </td>
+ </tr>
+ <tr>
+ <td>
+ jaxp
+ </td>
+ <td>
+ source code for the OpenJDK JAXP functionality
+ </td>
+ </tr>
+ <tr>
+ <td>
+ jaxws
+ </td>
+ <td>
+ source code for the OpenJDK JAX-WS functionality
+ </td>
+ </tr>
+ <tr>
+ <td>
+ corba
+ </td>
+ <td>
+ source code for the OpenJDK Corba functionality
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+
+ <h3><a name="guidelines">Repository Source Guidelines</a></h3>
+ <blockquote>
+ There are some very basic guidelines:
+ <ul>
+ <li>
+ Use of whitespace in source files
+ (.java, .c, .h, .cpp, and .hpp files)
+ is restricted.
+ No TABs, no trailing whitespace on lines, and files
+ should not terminate in more than one blank line.
+ </li>
+ <li>
+ Files with execute permissions should not be added
+ to the source repositories.
+ </li>
+ <li>
+ All generated files need to be kept isolated from
+ the files
+ maintained or managed by the source control system.
+ The standard area for generated files is the top level
+ <code>build/</code> directory.
+ </li>
+ <li>
+ The default build process should be to build the product
+ and nothing else, in one form, e.g. a product (optimized),
+ debug (non-optimized, -g plus assert logic), or
+ fastdebug (optimized, -g plus assert logic).
+ </li>
+ <li>
+ The <tt>.hgignore</tt> file in each repository
+ must exist and should
+ include <tt>^build/</tt>, <tt>^dist/</tt> and
+ optionally any
+ <tt>nbproject/private</tt> directories.
+ <strong>It should NEVER</strong> include
+ anything in the
+ <tt>src/</tt> or <tt>test/</tt>
+ or any managed directory area of a repository.
+ </li>
+ <li>
+ Directory names and file names should never contain
+ blanks or
+ non-printing characters.
+ </li>
+ <li>
+ Generated source or binary files should NEVER be added to
+ the repository (that includes <tt>javah</tt> output).
+ There are some exceptions to this rule, in particular
+ with some of the generated configure scripts.
+ </li>
+ <li>
+ Files not needed for typical building
+ or testing of the repository
+ should not be added to the repository.
+ </li>
+ </ul>
</blockquote>
</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 this
- specific release of 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>C/C++ Compiler</th>
- <th>BOOT JDK</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Linux X86 (32-bit)</td>
- <td>Fedora 9</td>
- <td>gcc 4.3 </td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Linux X64 (64-bit)</td>
- <td>Fedora 9</td>
- <td>gcc 4.3 </td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Solaris SPARC (32-bit)</td>
- <td>Solaris 10 Update 6</td>
- <td>Sun Studio 12 Update 1 + patches</td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Solaris SPARCV9 (64-bit)</td>
- <td>Solaris 10 Update 6</td>
- <td>Sun Studio 12 Update 1 + patches</td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Solaris X86 (32-bit)</td>
- <td>Solaris 10 Update 6</td>
- <td>Sun Studio 12 Update 1 + patches</td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Solaris X64 (64-bit)</td>
- <td>Solaris 10 Update 6</td>
- <td>Sun Studio 12 Update 1 + patches</td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Windows X86 (32-bit)</td>
- <td>Windows XP</td>
- <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Windows X64 (64-bit)</td>
- <td>Windows Server 2003 - Enterprise x64 Edition</td>
- <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
- <td>JDK 6u18</td>
- </tr>
- <tr>
- <td>Mac OS X X64 (64-bit)</td>
- <td>Mac OS X 10.7.3 "Lion"</td>
- <td>XCode 4.1 or later</td>
- <td>Java for OS X Lion Update 1</td>
- </tr>
- </tbody>
- </table>
- <p>
- These same sources do indeed build on many more systems than the
- above older generation systems, again the above is just a minimum.
- <p>
- Compilation problems with newer or different C/C++ compilers is a
- common problem.
- Similarly, compilation problems related to changes to the
- <tt>/usr/include</tt> or system header files is also a
- common problem with newer or unreleased OS versions.
- Please report these types of problems as bugs so that they
- can be dealt with accordingly.
- </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>
+ <h2><a name="building">Building</a></h2>
<blockquote>
- <h4>Fedora 9</h4>
- <p>
- <blockquote>
- After installing <a href="http://fedoraproject.org">Fedora</a> 9
- you need to install several build dependencies. The simplest
- way to do it is to execute the following commands as user
- <tt>root</tt>:
- <p/>
- <code>yum-builddep java-1.6.0-openjdk</code>
- <p/>
- <code>yum install gcc gcc-c++</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
-
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
- </blockquote>
- <h4>Fedora 10</h4>
- <p>
+ The very first step in building the OpenJDK is making sure the
+ system itself has everything it needs to do OpenJDK builds.
+ Once a system is setup, it generally doesn't need to be done again.
+ <br>
+ Building the OpenJDK is now done with running a
+ <a href="#configure"><code>configure</code></a>
+ script which will try and find and verify you have everything
+ you need, followed by running
+ <a href="#gmake"><code>make</code></a>, e.g.
<blockquote>
- After installing <a href="http://fedoraproject.org">Fedora</a> 10
- you need to install several build dependencies. The simplest
- way to do it is to execute the following commands as user
- <tt>root</tt>:
- <p/>
- <code>yum-builddep java-1.6.0-openjdk</code>
- <p/>
- <code>yum install gcc gcc-c++</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
-
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
- </blockquote>
- <h4>Fedora 11</h4>
- <p>
- <blockquote>
- After installing <a href="http://fedoraproject.org">Fedora</a> 11
- you need to install several build dependencies. The simplest
- way to do it is to execute the following commands as user
- <tt>root</tt>:
- <p/>
- <code>yum-builddep java-1.6.0-openjdk</code>
- <p/>
- <code>yum install gcc gcc-c++</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
-
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
+ <b>
+ <code>
+ bash ./configure<br>
+ make all
+ </code>
+ </b>
</blockquote>
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <h3><a name="centos">CentOS 5.5</a></h3>
- <blockquote>
- After installing
- <a href="http://www.centos.org/">CentOS 5.5</a>
- you need to make sure you have
- the following Development bundles installed:
+ Where possible the <code>configure</code> script will attempt to located the
+ various components in the default locations or via component
+ specific variable settings.
+ When the normal defaults fail or components cannot be found,
+ additional <code>configure</code> options may be necessary to help <code>configure</code>
+ find the necessary tools for the build, or you may need to
+ re-visit the setup of your system due to missing software
+ packages.
+ <br>
+ <strong>NOTE:</strong> The <code>configure</code> script
+ file does not have
+ execute permissions and will need to be explicitly run with
+ <code>bash</code>,
+ see the <a href="#guidelines">source guidelines</a>.
+
+ <!-- ====================================================== -->
+ <hr>
+ <h3><a name="setup">System Setup</a></h3>
<blockquote>
+ Before even attempting to use a system to build the OpenJDK
+ there are some very basic system setups needed.
+ For all systems:
<ul>
- <li>Development Libraries</li>
- <li>Development Tools</li>
- <li>Java Development</li>
- <li>X Software Development (Including XFree86-devel)</li>
+ <li>
+ Be sure the GNU make utility is version 3.81 or newer,
+ e.g. run "<code>make -version</code>"
+ </li>
+ <li>
+ Install a
+ <a name="bootjdk">Bootstrap JDK</a>
+ <br>
+ All OpenJDK builds require access to a previously released
+ JDK, this is often called a bootstrap JDK.
+ Currently, for this JDK release we require
+ JDK 7 Update 7 or newer.
+ The JDK 7 binaries can be downloaded from Oracle's
+ <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"
+ target="_blank">JDK 7 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 add its <code>bin</code> directory
+ to the <code>PATH</code> environment variable.
+ If <code>configure</code> has any issues finding this JDK, you may
+ need to use the <code>configure</code> option
+ <code>--with-boot-jdk</code>.
+ </li>
+ <li>
+ Insure that GNU make, the Bootstrap JDK,
+ and the compilers are all
+ in your PATH environment variable
+ </li>
</ul>
- </blockquote>
- <p>
- Plus the following packages:
- <blockquote>
- <ul>
- <li>cups devel: Cups Development Package</li>
- <li>alsa devel: Alsa Development Package</li>
- <li>ant: Ant Package</li>
- <li>Xi devel: libXi.so Development Package</li>
- </ul>
+ And for specific systems:
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Linux</th>
+ <th>Solaris</th>
+ <th>Windows</th>
+ <th>Mac OS X</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ Install all the software development
+ packages needed including
+ <a href="#alsa">alsa</a>,
+ <a href="#freetype">freetype</a>,
+ <a href="#cups">cups</a>, and
+ <a href="#xrender">xrender</a>.
+ <br>
+ See
+ <a href="#SDBE">specific system packages</a>.
+ </td>
+ <td>
+ Install all the software development
+ packages needed including
+ <a href="#studio">Studio Compilers</a>,
+ <a href="#freetype">freetype</a>,
+ <a href="#cups">cups</a>, and
+ <a href="#xrender">xrender</a>.
+ <br>
+ See
+ <a href="#SDBE">specific system packages</a>.
+ </td>
+ <td>
+ <ul>
+ <li>
+ Install one of
+ <a href="#cygwin">CYGWIN</a> or
+ <a href="#msys">MinGW/MSYS</a>
+ </li>
+ <li>
+ Install
+ <a href="#vs2010">Visual Studio 2010</a>
+ </li>
+ <li>
+ Install the
+ <a href="#dxsdk">Microsoft DirectX SDK</a>
+ </li>
+ </ul>
+ </td>
+ <td>
+ Install
+ <a href="https://developer.apple.com/xcode/">XCode 4.5.2</a>
+ and also install the "Command line tools" found under the
+ preferences pane "Downloads"
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h4><a name="linux">Linux</a></h4>
+ <blockquote>
+ With Linux, try and favor the system packages over
+ building your own
+ or getting packages from other areas.
+ Most Linux builds should be possible with the system's
+ available packages.
+ <br>
+ Note that some Linux systems have a habit of pre-populating
+ your environment variables for you, for example <code>JAVA_HOME</code>
+ might get pre-defined for you to refer to the JDK installed on
+ your Linux system.
+ You will need to unset <code>JAVA_HOME</code>.
+ It's a good idea to run <code>env</code> and verify the
+ environment variables you are getting from the default system
+ settings make sense for building the OpenJDK.
+
+ </blockquote>
+
+ <h4><a name="solaris">Solaris</a></h4>
+ <blockquote>
+ <h5><a name="studio">Studio Compilers</a></h5>
+ <blockquote>
+ At a minimum, the
+ <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
+ Studio 12 Update 1 Compilers</a>
+ (containing version 5.10 of the C and C++ compilers) is required,
+ including specific patches.
+ <p>
+ The Solaris SPARC patch list is:
+ <ul>
+ <li>
+ 118683-05: SunOS 5.10: Patch for profiling libraries and assembler
+ </li>
+ <li>
+ 119963-21: SunOS 5.10: Shared library patch for C++
+ </li>
+ <li>
+ 120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
+ </li>
+ <li>
+ 128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
+ </li>
+ <li>
+ 141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
+ </li>
+ <li>
+ 141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
+ </li>
+ <li>
+ 142371-01: Sun Studio 12.1 Update 1: Patch for dbx
+ </li>
+ <li>
+ 143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
+ </li>
+ <li>
+ 143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
+ </li>
+ <li>
+ 142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
+ </li>
+ </ul>
+ <p>
+ The Solaris X86 patch list is:
+ <ul>
+ <li>
+ 119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
+ </li>
+ <li>
+ 119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
+ </li>
+ <li>
+ 120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
+ </li>
+ <li>
+ 141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
+ </li>
+ <li>
+ 128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
+ </li>
+ <li>
+ 142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
+ </li>
+ <li>
+ 142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
+ </li>
+ </ul>
+ <p>
+ Place the <code>bin</code> directory in <code>PATH</code>.
+ <p>
+ The Oracle Solaris Studio Express compilers at:
+ <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index-jsp-142582.html" target="_blank">
+ Oracle Solaris Studio Express Download site</a>
+ are also an option, although these compilers have not
+ been extensively used yet.
+ </blockquote>
+
+ </blockquote> <!-- Solaris -->
+
+ <h4><a name="windows">Windows</a></h4>
+ <blockquote>
+
+ <h5><a name="toolkit">Windows Unix Toolkit</a></h5>
+ <blockquote>
+ Building on Windows requires a Unix-like environment, notably a
+ Unix-like shell.
+ There are several such environments available of which
+ <a href="http://www.cygwin.com/">Cygwin</a> and
+ <a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are
+ currently supported for
+ the OpenJDK build. One of the differences of these
+ systems from standard Windows tools is the way
+ they handle Windows path names, particularly path names which contain
+ spaces, backslashes as path separators and possibly drive letters.
+ Depending
+ on the use case and the specifics of each environment these path
+ problems can
+ be solved by a combination of quoting whole paths, translating
+ backslashes to
+ forward slashes, escaping backslashes with additional backslashes and
+ translating the path names to their
+ <a href="http://en.wikipedia.org/wiki/8.3_filename">
+ "8.3" version</a>.
+
+ <h6><a name="cygwin">CYGWIN</a></h6>
+ <blockquote>
+ CYGWIN is an open source, Linux-like environment which tries to emulate
+ a complete POSIX layer on Windows. It tries to be smart about path names
+ and can usually handle all kinds of paths if they are correctly quoted
+ or escaped although internally it maps drive letters <code><drive>:</code>
+ to a virtual directory <code>/cygdrive/<drive></code>.
+ <p>
+ You can always use the <code>cygpath</code> utility to map pathnames with spaces
+ or the backslash character into the <code>C:/</code> style of pathname
+ (called 'mixed'), e.g. <code>cygpath -s -m "<i>path</i>"</code>.
+ </p>
+ <p>
+ Note that the use of CYGWIN creates a unique problem with regards to
+ setting <a href="#path"><code>PATH</code></a>. Normally on Windows
+ the <code>PATH</code> variable contains directories
+ separated with the ";" character (Solaris and Linux use ":").
+ With CYGWIN, it uses ":", but that means that paths like "C:/path"
+ cannot be placed in the CYGWIN version of <code>PATH</code> and
+ instead CYGWIN uses something like <code>/cygdrive/c/path</code>
+ which CYGWIN understands, but only CYGWIN understands.
+ </p>
+ <p>
+ The OpenJDK build requires CYGWIN version 1.7.16 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>
+ <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>Category</td>
+ <td>Package</td>
+ <td>Description</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>ar.exe</td>
+ <td>Devel</td>
+ <td>binutils</td>
+ <td>
+ The GNU assembler, linker and binary utilities
+ </td>
+ </tr>
+ <tr>
+ <td>make.exe</td>
+ <td>Devel</td>
+ <td>make</td>
+ <td>
+ The GNU version of the 'make' utility built for CYGWIN
+ </td>
+ </tr>
+ <tr>
+ <td>m4.exe</td>
+ <td>Interpreters</td>
+ <td>m4</td>
+ <td>
+ GNU implementation of the traditional Unix macro
+ processor
+ </td>
+ </tr>
+ <tr>
+ <td>cpio.exe</td>
+ <td>Utils</td>
+ <td>cpio</td>
+ <td>
+ A program to manage archives of files
+ </td>
+ </tr>
+ <tr>
+ <td>gawk.exe</td>
+ <td>Utils</td>
+ <td>awk</td>
+ <td>
+ Pattern-directed scanning and processing language
+ </td>
+ </tr>
+ <tr>
+ <td>file.exe</td>
+ <td>Utils</td>
+ <td>file</td>
+ <td>
+ Determines file type using 'magic' numbers
+ </td>
+ </tr>
+ <tr>
+ <td>zip.exe</td>
+ <td>Archive</td>
+ <td>zip</td>
+ <td>
+ Package and compress (archive) files
+ </td>
+ </tr>
+ <tr>
+ <td>unzip.exe</td>
+ <td>Archive</td>
+ <td>unzip</td>
+ <td>
+ Extract compressed files in a ZIP archive
+ </td>
+ </tr>
+ <tr>
+ <td>free.exe</td>
+ <td>System</td>
+ <td>procps</td>
+ <td>
+ Display amount of free and used memory in the system
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+ 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>
+
+ <h6><a name="msys">MinGW/MSYS</a></h6>
+ <blockquote>
+ MinGW ("Minimalist GNU for Windows") is a collection of free Windows
+ specific header files and import libraries combined with GNU toolsets that
+ allow one to produce native Windows programs that do not rely on any
+ 3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
+ applications and programs which rely on traditional UNIX tools to
+ be present. Among others this includes tools like <code>bash</code>
+ and <code>make</code>.
+ See <a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>
+ for more information.
+ <p>
+ Like Cygwin, MinGW/MSYS can handle different types of path formats. They
+ are internally converted to paths with forward slashes and drive letters
+ <code><drive>:</code> replaced by a virtual
+ directory <code>/<drive></code>. Additionally, MSYS automatically
+ detects binaries compiled for the MSYS environment and feeds them with the
+ internal, Unix-style path names. If native Windows applications are called
+ from within MSYS programs their path arguments are automatically converted
+ back to Windows style path names with drive letters and backslashes as
+ path separators. This may cause problems for Windows applications which
+ use forward slashes as parameter separator (e.g. <code>cl /nologo /I</code>)
+ because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
+ replace such parameters by drive letters</a>.
+ </p>
+ <p>
+ In addition to the tools which will be installed
+ by default, you have
+ to manually install the
+ <code>msys-zip</code> and
+ <code>msys-unzip</code> packages.
+ This can be easily done with the MinGW command line installer:
+ <blockquote>
+ <code>mingw-get.exe install msys-zip</code>
+ <br>
+ <code>mingw-get.exe install msys-unzip</code>
+ </blockquote>
+ </blockquote>
+
+ </blockquote>
+
+ <h5><a name="vs2010">Visual Studio 2010 Compilers</a></h5>
+ <blockquote>
+ <p>
+ The 32-bit and 64-bit OpenJDK Windows build requires
+ Microsoft Visual Studio C++ 2010 (VS2010) Professional
+ Edition or Express compiler.
+ The compiler and other tools are expected to reside
+ in the location defined by the variable
+ <code>VS100COMNTOOLS</code> which
+ is set by the Microsoft Visual Studio installer.
+ </p>
+ <p>
+ Only the C++ part of VS2010 is needed.
+ Try to let the installation go to the default
+ install directory.
+ Always reboot your system after installing VS2010.
+ The system environment variable VS100COMNTOOLS
+ should be
+ set in your environment.
+ </p>
+ <p>
+ Make sure that TMP and TEMP are also set
+ in the environment
+ and refer to Windows paths that exist,
+ like <code>C:\temp</code>,
+ not <code>/tmp</code>, not <code>/cygdrive/c/temp</code>,
+ and not <code>C:/temp</code>.
+ <code>C:\temp</code> is just an example,
+ it is assumed that this area is
+ private to the user, so by default
+ after installs you should
+ see a unique user path in these variables.
+ </p>
+ </blockquote>
+
+
+ </blockquote> <!-- Windows -->
+
+ <h4><a name="macosx">Mac OS X</a></h4>
+ <blockquote>
+ Make sure you get the right XCode version.
+ </blockquote> <!-- Mac OS X -->
+
</blockquote>
- <p>
- The freetype 2.3 packages don't seem to be available,
- but the freetype 2.3 sources can be downloaded, built,
- and installed easily enough from
- <a href="http://downloads.sourceforge.net/freetype">
- the freetype site</a>.
- Build and install with something like:
+
+ <!-- ====================================================== -->
+ <hr>
+ <h3><a name="configure">Configure</a></h3>
<blockquote>
- <tt>./configure && make && sudo -u root make install</tt>
+ The basic invocation of the <code>configure</code> script
+ looks like:
+ <blockquote>
+ <b><code>bash ./configure [<i>options</i>]</code></b>
+ </blockquote>
+ This will create an output directory containing the
+ "configuration" and setup an area for the build result.
+ This directory typically looks like:
+ <blockquote>
+ <b><code>build/linux-x64-normal-server-release</code></b>
+ </blockquote>
+ <code>configure</code> will try to figure out what system you are running on
+ and where all necessary build components are.
+ If you have all prerequisites for building installed,
+ it should find everything.
+ If it fails to detect any component automatically,
+ it will exit and inform you about the problem.
+ When this happens, read more below in
+ <a href="#configureoptions">the <code>configure</code> options</a>.
+ <p>
+ Some examples:
+ </p>
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Description</th>
+ <th>Configure Command Line</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Windows 32bit build with freetype specified</td>
+ <td>
+ <code>bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32</code>
+ </td>
+ </tr>
+ <tr>
+ <td>Debug 64bit Build</td>
+ <td>
+ <code>bash ./configure --enable-debug --with-target-bits=64</code>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- ====================================================== -->
+ <h4><a name="configureoptions">Configure Options</a></h4>
+ <blockquote>
+ Complete details on all the OpenJDK <code>configure</code> options can
+ be seen with:
+ <blockquote>
+ <b><code>bash ./configure --help=short</code></b>
+ </blockquote>
+ Use <code>-help</code> to see all the <code>configure</code> options
+ available.
+
+ You can generate any number of different configurations,
+ e.g. debug, release, 32, 64, etc.
+
+ Some of the more commonly used <code>configure</code> options are:
+
+ <table border="1">
+ <thead>
+ <tr>
+ <th width="300">OpenJDK Configure Option</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><b><code>--enable-debug</code></b></td>
+ <td>
+ set the debug level to fastdebug (this is a shorthand for
+ <code>--with-debug-level=fastdebug</code>)
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-alsa=</code></b><i>path</i></td>
+ <td>
+ select the location of the
+ <a name="alsa">Advanced Linux Sound Architecture (ALSA)</a>
+ <br>
+ 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,
+ and it's highly recommended that you try and use
+ the package provided by the particular version of Linux that
+ you are using.
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-boot-jdk=</code></b><i>path</i></td>
+ <td>
+ select the <a href="#bootjdk">Bootstrap JDK</a>
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-boot-jdk-jvmargs=</code></b>"<i>args</i>"</td>
+ <td>
+ provide the JVM options to be used to run the
+ <a href="#bootjdk">Bootstrap JDK</a>
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-cacerts=</code></b><i>path</i></td>
+ <td>
+ select the path to the cacerts file.
+ <br>
+ 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.
+ By default an empty cacerts file is provided and that should be
+ fine for most JDK developers.
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-cups=</code></b><i>path</i></td>
+ <td>
+ select the CUPS install location
+ <br>
+ The
+ <a name="cups">Common UNIX Printing System (CUPS) Headers</a>
+ are required for building the
+ OpenJDK on Solaris and Linux.
+ 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 the
+ directory <code>/opt/sfw/cups</code>.
+ <br>
+ The CUPS header files can always be downloaded from
+ <a href="http://www.cups.org" target="_blank">www.cups.org</a>.
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-cups-include=</code></b><i>path</i></td>
+ <td>
+ select the CUPS include directory location
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-debug-level=</code></b><i>level</i></td>
+ <td>
+ select the debug information level of release,
+ fastdebug, or slowdebug
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-dev-kit=</code></b><i>path</i></td>
+ <td>
+ select location of the compiler install or
+ developer install location
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-dxsdk=</code></b><i>path</i></td>
+ <td>
+ select location of the Windows Direct X SDK install
+ <br>
+ The <a name="dxsdk">Microsoft DirectX 9.0 SDK</a>
+ header files and libraries
+ from the Summer 2004 edition
+ 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").
+ Installation usually will set the environment variable
+ <code>DXSDK_DIR</code> to it's install location.
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-freetype=</code></b><i>path</i></td>
+ <td>
+ select the freetype files to use.
+ <br>
+ Expecting the
+ <a name="freetype">freetype</a> libraries under
+ <code>lib/</code> and the
+ headers under <code>include/</code>.
+ <br>
+ Version 2.3 or newer of FreeType is required.
+ 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 the FreeType library and header files.
+ <br>
+ You can always download latest FreeType version from the
+ <a href="http://www.freetype.org" target="_blank">FreeType website</a>.
+ <br>
+ Building the freetype 2 libraries from scratch is also possible,
+ however on Windows refer to the
+ <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
+ Windows FreeType DLL build instructions</a>.
+ <br>
+ Note that by default FreeType is built with byte code hinting
+ support disabled due to licensing restrictions.
+ In this case, text appearance and metrics are expected to
+ differ from Sun's official JDK build.
+ See
+ <a href="http://freetype.sourceforge.net/freetype2/index.html">
+ the SourceForge FreeType2 Home Page
+ </a>
+ for more information.
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-import-hotspot=</code></b><i>path</i></td>
+ <td>
+ select the location to find hotspot
+ binaries from a previous build to avoid building
+ hotspot
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-target-bits=</code></b><i>arg</i></td>
+ <td>
+ select 32 or 64 bit build
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-jvm-variants=</code></b><i>variants</i></td>
+ <td>
+ select the JVM variants to build from, comma
+ separated list that can include:
+ server, client, kernel, zero and zeroshark
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-memory-size=</code></b><i>size</i></td>
+ <td>
+ select the RAM size that GNU make will think
+ this system has
+ </td>
+ </tr>
+ <tr>
+ <td><a name="msvcrNN"><b><code>--with-msvcr-dll=</code></b><i>path</i></a></td>
+ <td>
+ select the <code>msvcr100.dll</code>
+ file to include in the
+ Windows builds (C/C++ runtime library for
+ Visual Studio).
+ <br>
+ This is usually picked up automatically
+ from the redist
+ directories of Visual Studio 2010.
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-num-cores=</code></b><i>cores</i></td>
+ <td>
+ select the number of cores to use (processor
+ count or CPU count)
+ </td>
+ </tr>
+ <tr>
+ <td><b><code>--with-x=</code></b><i>path</i></td>
+ <td>
+ select the location of the X11 and xrender files.
+ <br>
+ The
+ <a name="xrender">XRender Extension Headers</a>
+ are required for building the
+ OpenJDK on Solaris and Linux.
+ <br>
+ The Linux header files are usually available from a "Xrender"
+ development package, it's recommended that you try and use
+ the package provided by the particular distribution of Linux that
+ you are using.
+ <br>
+ The Solaris XRender header files is
+ included with the other X11 header files
+ in the package <strong>SFWxwinc</strong>
+ on new enough versions of
+ Solaris and will be installed in
+ <code>/usr/X11/include/X11/extensions/Xrender.h</code> or
+ <code>/usr/openwin/share/include/X11/extensions/Xrender.h</code>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+
</blockquote>
- <p>
- Mercurial packages could not be found easily, but a Google
- search should find ones, and they usually include Python if
- it's needed.
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <h3><a name="debian">Debian</a></h3>
- <blockquote>
- <h4>Debian 5.0 (Lenny)</h4>
- <p>
+
+ <!-- ====================================================== -->
+ <hr>
+ <h3><a name="make">Make</a></h3>
<blockquote>
- After installing <a href="http://debian.org">Debian</a> 5
- you need to install several build dependencies.
- The simplest way to install the build dependencies is to
- execute the following commands as user <tt>root</tt>:
- <p/>
- <code>aptitude build-dep openjdk-6</code>
- <p/>
- <code>aptitude install openjdk-6-jdk libmotif-dev</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
+ The basic invocation of the <code>make</code> utility
+ looks like:
+ <blockquote>
+ <b><code>make all</code></b>
+ </blockquote>
+ This will start the build to the output directory containing the
+ "configuration" that was created by the <code>configure</code>
+ script. Run <code>make help</code> for more information on
+ the available targets.
+ <br>
+ There are some of the make targets that
+ are of general interest:
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Make Target</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><i>empty</i></td>
+ <td>build everything but no images</td>
+ </tr>
+ <tr>
+ <td><b><code>all</code></b></td>
+ <td>build everything including images</td>
+ </tr>
+ <tr>
+ <td><b><code>all-conf</code></b></td>
+ <td>build all configurations</td>
+ </tr>
+ <tr>
+ <td><b><code>images</code></b></td>
+ <td>create complete j2sdk and j2re images</td>
+ </tr>
+ <tr>
+ <td><b><code>install</code></b></td>
+ <td>install the generated images locally,
+ typically in <code>/usr/local</code></td>
+ </tr>
+ <tr>
+ <td><b><code>clean</code></b></td>
+ <td>remove all files generated by make,
+ but not those generated by <code>configure</code></td>
+ </tr>
+ <tr>
+ <td><b><code>dist-clean</code></b></td>
+ <td>remove all files generated by both
+ and <code>configure</code> (basically killing the configuration)</td>
+ </tr>
+ <tr>
+ <td><b><code>help</code></b></td>
+ <td>give some help on using <code>make</code>,
+ including some interesting make targets</td>
+ </tr>
+ </tbody>
+ </table>
</blockquote>
</blockquote>
+
<!-- ====================================================== -->
- <h3><a name="ubuntu">Ubuntu</a></h3>
- <blockquote>
- <h4>Ubuntu 8.04</h4>
- <p>
- <blockquote>
- After installing <a href="http://ubuntu.org">Ubuntu</a> 8.04
- you need to install several build dependencies.
- <p/>
- First, you need to enable the universe repository in the
- Software Sources application and reload the repository
- information. The Software Sources application is available
- under the System/Administration menu.
- <p/>
- The simplest way to install the build dependencies is to
- execute the following commands:
- <p/>
- <code>sudo aptitude build-dep openjdk-6</code>
- <p/>
- <code>sudo aptitude install openjdk-6-jdk</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
- </blockquote>
- <h4>Ubuntu 8.10</h4>
- <p>
- <blockquote>
- After installing <a href="http://ubuntu.org">Ubuntu</a> 8.10
- you need to install several build dependencies. The simplest
- way to do it is to execute the following commands:
- <p/>
- <code>sudo aptitude build-dep openjdk-6</code>
- <p/>
- <code>sudo aptitude install openjdk-6-jdk</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
- </blockquote>
- <h4>Ubuntu 9.04</h4>
- <p>
- <blockquote>
- After installing <a href="http://ubuntu.org">Ubuntu</a> 9.04
- you need to install several build dependencies. The simplest
- way to do it is to execute the following commands:
- <p/>
- <code>sudo aptitude build-dep openjdk-6</code>
- <p/>
- <code>sudo aptitude install openjdk-6-jdk</code>
- <p/>
- In addition, it's necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
- </blockquote>
- </blockquote>
- <!-- ====================================================== -->
- <h3><a name="opensuse">OpenSUSE</a></h3>
+ <hr>
+ <h2><a name="testing">Testing</a></h2>
<blockquote>
- <h4>OpenSUSE 11.1</h4>
- <p>
- <blockquote>
- After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1
- you need to install several build dependencies.
- The simplest way to install the build dependencies is to
- execute the following commands:
- <p/>
- <code>sudo zypper source-install -d java-1_6_0-openjdk</code>
- <p/>
- <code>sudo zypper install make</code>
- <p/>
- In addition, it is necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
- <p/>
- Finally, you need to unset the <code>JAVA_HOME</code> environment variable:
- <p/>
- <code>export -n JAVA_HOME</code>
- </blockquote>
- </blockquote>
- <!-- ====================================================== -->
- <h3><a name="mandriva">Mandriva</a></h3>
- <blockquote>
- <h4>Mandriva Linux One 2009 Spring</h4>
- <p>
+ When the build is completed, you should see the generated
+ binaries and associated files in the <code>j2sdk-image</code>
+ directory in the output directory.
+ In particular, the
+ <code>build/<i>*</i>/images/j2sdk-image/bin</code>
+ directory should contain executables for the
+ OpenJDK tools and utilities for that configuration.
+ The testing tool <code>jtreg</code> will be needed
+ and can be found at:
+ <a href="http://openjdk.java.net/jtreg/" target="_blank">
+ the jtreg site</a>.
+ The provided regression tests in the repositories
+ can be run with the command:
<blockquote>
- After installing <a href="http://mandriva.org">Mandriva</a> Linux One 2009 Spring
- you need to install several build dependencies.
- The simplest way to install the build dependencies is to
- execute the following commands as user <tt>root</tt>:
- <p/>
- <code>urpmi java-1.6.0-openjdk-devel ant make gcc gcc-c++ freetype-devel zip unzip libcups2-devel libxrender1-devel libalsa2-devel libstc++-static-devel libxtst6-devel libxi-devel</code>
- <p/>
- In addition, it is necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
- </blockquote>
- </blockquote>
- <!-- ====================================================== -->
- <h3><a name="opensolaris">OpenSolaris</a></h3>
- <blockquote>
- <h4>OpenSolaris 2009.06</h4>
- <p>
- <blockquote>
- After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06
- you need to install several build dependencies.
- The simplest way to install the build dependencies is to
- execute the following commands:
- <p/>
- <code>pfexec pkg install SUNWgmake SUNWj6dev SUNWant sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
- <p/>
- In addition, it is necessary to set a few environment variables for the build:
- <p/>
- <code>export LANG=C ALT_COMPILER_PATH=/opt/SunStudioExpress/bin/ ALT_CUPS_HEADERS_PATH=/usr/include/</code>
- <p/>
- Finally, you need to make sure that the build process can find the Sun Studio compilers:
- <p/>
- <code>export PATH=$PATH:/opt/SunStudioExpress/bin/</code>
+ <code><b>cd test && make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all</b></code>
</blockquote>
</blockquote>
- <!-- ------------------------------------------------------ -->
+
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+ <!-- ====================================================== -->
+
+ <!-- ====================================================== -->
<hr>
- <h2><a name="directories">Source Directory Structure</a></h2>
+ <h2><a name="hints">Appendix A: Hints and Tips</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.
+
+ <h3><a name="faq">FAQ</a></h3>
+ <blockquote>
- <h3><a name="drops">Managing the Source Drops</a></h3>
- <blockquote>
+ <p>
+ <b>Q:</b> The <code>configure</code> file looks horrible!
+ How are you going to edit it?
+ <br>
+ <b>A:</b> The <code>configure</code> file is generated (think
+ "compiled") by the autoconf tools. The source code is
+ in <code>configure.ac</code> various .m4 files in common/autoconf,
+ which are
+ much more readable.
+ </p>
+
<p>
- The repositories <tt>jaxp</tt> and <tt>jaxws</tt> actually
- do not contain the sources for JAXP or JAX-WS.
- These products have their own open source procedures at their
- <a href="http://jaxp.java.net/">JAXP</a> and
- <a href="http://jax-ws.java.net/">JAX-WS</a> home pages.
- The OpenJDK project does need access to these sources to build
- a complete JDK image because JAXP and JAX-WS are part of the JDK.
- The current process for delivery of the JAXP and JAX-WS sources
- involves so called "source drop bundles" downloaded from a public
- website.
- There are many reasons for this current mechanism, and it is
- understood that this is not ideal for the open source community.
- It is possible this process could change in the future.
+ <b>Q:</b>
+ Why is the <code>configure</code> file checked in,
+ if it is generated?
<br>
- <b>NOTE:</b> The <a href="http://download.java.net/openjdk/jdk8/">
- Complete OpenJDK Source Bundles</a> <u>will</u> contain the JAXP and
- JAX-WS sources.
+ <b>A:</b>
+ If it was not generated, every user would need to have the autoconf
+ tools installed, and re-generate the <code>configure</code> file
+ as the first step.
+ Our goal is to minimize the work needed to be done by the user
+ to start building OpenJDK, and to minimize
+ the number of external dependencies required.
</p>
- <h4><a name="dropcreation">Creation of New Source Drop Bundles</a></h4>
+ <p>
+ <b>Q:</b>
+ Do you require a specific version of autoconf for regenerating
+ <code>configure</code>?
+ <br>
+ <b>A:</b>
+ Currently, no, but this will likely be the case when things have
+ settled down a bit more. (The reason for this is to avoid
+ large spurious changes in <code>configure</code>
+ in commits that made small changes to <code>configure.ac</code>).
+ </p>
+
+ <p>
+ <b>Q:</b>
+ What are the files in <code>common/makefiles/support/*</code> for?
+ They look like gibberish.
+ <br>
+ <b>A:</b>
+ They are a somewhat ugly hack to compensate for command line length
+ limitations on certain platforms (Windows, Solaris).
+ Due to a combination of limitations in make and the shell,
+ command lines containing too many files will not work properly.
+ These
+ helper files are part of an elaborate hack that will compress the
+ command line in the makefile and then uncompress it safely.
+ We're
+ not proud of it, but it does fix the problem.
+ If you have any better suggestions, we're all ears! :-)
+ </p>
+
+ <p>
+ <b>Q:</b>
+ I want to see the output of the commands that make runs,
+ like in the old build. How do I do that?
+ <br>
+ <b>A:</b>
+ You specify the <code>LOG</code> variable to make. There are
+ several log levels:
+ </p>
<blockquote>
- <ol>
+ <ul>
<li>
- The JAXP or JAX-WS team prepares a new zip bundle,
- places a copy in a public download area on java.net,
- sends us a link and a list of CRs (Change Request Numbers).
- The older download bundles should not be deleted.
- It is the responsibility of the JAXP and JAX-WS team to
- place the proper GPL legal notices on the sources
- and do any filtering or java re-packaging for the
- OpenJDK instances of these classes.
+ <b><code>warn</code></b> — Default and very quiet.
</li>
<li>
- The OpenJDK team copies this new bundle into shared
- area (e.g. <tt>/java/devtools/share/jdk8-drops</tt>).
- Older bundles are never deleted so we retain the history.
+ <b><code>info</code></b> — Shows more progress information
+ than warn.
</li>
<li>
- The OpenJDK team edits the ant property file
- <tt>jaxp/jaxp.properties</tt> or
- <tt>jaxws/jaxws.properties</tt> to update the
- base URL, the zip bundle name, and the MD5 checksum
- of the zip bundle
- (on Solaris: <tt>sum -c md5 <i>bundlename</i></tt>)
+ <b><code>debug</code></b> — Echos all command lines and
+ prints all macro calls for compilation definitions.
</li>
<li>
- OpenJDK team reviews and commits those changes with the
- given CRs.
+ <b><code>trace</code></b> — Echos all $(shell) command
+ lines as well.
</li>
- </ol>
+ </ul>
</blockquote>
- <h4><a name="dropusage">Using Source Drop Bundles</a></h4>
+ <p>
+ <b>Q:</b>
+ When do I have to re-run <code>configure</code>?
+ <br>
+ <b>A:</b>
+ Normally you will run <code>configure</code> only once for creating a
+ configuration.
+ You need to re-run configuration only if you want to change any
+ configuration options,
+ or if you pull down changes to the <code>configure</code> script.
+ </p>
+
+ <p>
+ <b>Q:</b>
+ I have added a new source file. Do I need to modify the makefiles?
+ <br>
+ <b>A:</b>
+ Normally, no. If you want to create e.g. a new native
+ library,
+ you will need to modify the makefiles. But for normal file
+ additions or removals, no changes are needed. There are certan
+ exceptions for some native libraries where the source files are spread
+ over many directories which also contain courses for other
+ libraries. In these cases it was simply easier to create include lists
+ rather thane excludes.
+ </p>
+
+ <p>
+ <b>Q:</b>
+ When I run <code>configure --help</code>, I see many strange options,
+ like <code>--dvidir</code>. What is this?
+ <br>
+ <b>A:</b>
+ Configure provides a slew of options by default, to all projects
+ that use autoconf. Most of them are not used in OpenJDK,
+ so you can safely ignore them. To list only OpenJDK specific features,
+ use <code>configure --help=short</code> instead.
+ </p>
+
+ <p>
+ <b>Q:</b>
+ <code>configure</code> provides OpenJDK-specific features such as
+ <code>--enable-jigsaw</code> or <code>--with-builddeps-server</code>
+ that are not described in this document. What about those?
+ <br>
+ <b>A:</b>
+ Try them out if you like! But be aware that most of these are
+ experimental features.
+ Many of them don't do anything at all at the moment; the option
+ is just a placeholder. Other depends on
+ pieces of code or infrastructure that is currently
+ not ready for prime time.
+ </p>
+
+ <p>
+ <b>Q:</b>
+ How will you make sure you don't break anything?
+ <br>
+ <b>A:</b>
+ We have a script that compares the result of the new build system
+ with the result of the old. For most part, we aim for (and achieve)
+ byte-by-byte identical output. There are however technical issues
+ with e.g. native binaries, which might differ in a byte-by-byte
+ comparison, even
+ when building twice with the old build system.
+ For these, we compare relevant aspects
+ (e.g. the symbol table and file size).
+ Note that we still don't have 100%
+ equivalence, but we're close.
+ </p>
+
+ <p>
+ <b>Q:</b>
+ I noticed this thing X in the build that looks very broken by design.
+ Why don't you fix it?
+ <br>
+ <b>A:</b>
+ Our goal is to produce a build output that is as close as
+ technically possible to the old build output.
+ If things were weird in the old build,
+ they will be weird in the new build.
+ Often, things were weird before due to obscurity,
+ but in the new build system the weird stuff comes up to the surface.
+ The plan is to attack these things at a later stage,
+ after the new build system is established.
+ </p>
+
+ <p>
+ <b>Q:</b>
+ The code in the new build system is not that well-structured.
+ Will you fix this?
+ <br>
+ <b>A:</b>
+ Yes! The new build system has grown bit by bit as we converted
+ the old system. When all of the old build system is converted,
+ we can take a step back and clean up the structure of the new build
+ system. Some of this we plan to do before replacing the old build
+ system and some will need to wait until after.
+ </p>
+
+ <p>
+ <b>Q:</b> What is @GenerateNativeHeaders?
+ <br>
+ <b>A:</b>
+ To speed up compilation, we added a flag to javac which makes it
+ do the job of javah as well, as a by-product; that is, generating
+ native .h header files. These files are only generated
+ if a class contains native methods. However, sometimes
+ a class contains no native method,
+ but still contains constants that native code needs to use.
+ The new GenerateNativeHeaders annotation tells javac to
+ force generation of a
+ header file in these cases. (We don't want to generate
+ native headers for all classes that contains constants
+ but no native methods, since
+ that would slow down the compilation process needlessly.)
+ </p>
+
+ <p>
+ <b>Q:</b>
+ Is anything able to use the results of the new build's default make target?
+ <br>
+ <b>A:</b>
+ Yes, this is the minimal (or roughly minimal)
+ set of compiled output needed for a developer to actually
+ execute the newly built JDK. The idea is that in an incremental
+ development fashion, when doing a normal make,
+ you should only spend time recompiling what's changed
+ (making it purely incremental) and only do the work that's
+ needed to actually run and test your code.
+ The packaging stuff that is part of the <code>images</code>
+ target is not needed for a normal developer who wants to
+ test his new code. Even if it's quite fast, it's still unnecessary.
+ We're targeting sub-second incremental rebuilds! ;-)
+ (Or, well, at least single-digit seconds...)
+ </p>
+
+ <p>
+ <b>Q:</b>
+ I usually set a specific environment variable when building,
+ but I can't find the equivalent in the new build.
+ What should I do?
+ <br>
+ <b>A:</b>
+ It might very well be that we have missed to add support for
+ an option that was actually used from outside the build system.
+ Email us and we will
+ add support for it!
+ </p>
+
+ </blockquote>
+
+ <h3><a name="performance">Build Performance Tips</a></h3>
+ <blockquote>
+
+ <p>Building OpenJDK requires a lot of horsepower.
+ Some of the build tools can be adjusted to utilize more or less
+ of resources such as
+ parallel threads and memory.
+ The <code>configure</code> script analyzes your system and selects reasonable
+ values for such options based on your hardware.
+ If you encounter resource problems, such as out of memory conditions,
+ you can modify the detected values with:</p>
+
+ <ul>
+ <li>
+ <b><code>--with-num-cores</code></b>
+ —
+ number of cores in the build system,
+ e.g. <code>--with-num-cores=8</code>
+ </li>
+ <li>
+ <b><code>--with-memory-size</code></b>
+ — memory (in MB) available in the build system,
+ e.g. <code>--with-memory-size=1024</code>
+ </li>
+ </ul>
+
+ <p>It might also be necessary to specify the JVM arguments passed
+ to the Bootstrap JDK, using e.g.
+ <code>--with-boot-jdk-jvmargs="-Xmx8G -enableassertions"</code>.
+ Doing this will override the default JVM arguments
+ passed to the Bootstrap JDK.</p>
+
+
+ <p>One of the top goals of the new build system is to improve the
+ build performance and decrease the time needed to build. This will
+ soon also apply to the java compilation when the Smart Javac wrapper
+ is making its way into jdk8. It can be tried in the build-infra
+ repository already. You are likely to find that the new build system
+ is faster than the old one even without this feature.</p>
+
+ <p>At the end of a successful execution of <code>configure</code>,
+ you will get a performance summary,
+ indicating how well the build will perform. Here you will
+ also get performance hints.
+ If you want to build fast, pay attention to those!</p>
+
+ <h4>Building with ccache</h4>
+
+ <p>A simple way to radically speed up compilation of native code
+ (typically hotspot and native libraries in JDK) is to install
+ ccache. This will cache and reuse prior compilation results, if the
+ source code is unchanged. However, ccache versions prior to 3.1.4
+ does not work correctly with the precompiled headers used in
+ OpenJDK. So if your platform supports ccache at 3.1.4 or later, we
+ highly recommend installing it. This is currently only supported on
+ linux.</p>
+
+ <h4>Building on local disk</h4>
+
+ <p>If you are using network shares, e.g. via NFS, for your source code,
+ make sure the build directory is situated on local disk.
+ The performance
+ penalty is extremely high for building on a network share,
+ close to unusable.</p>
+
+ <h4>Building only one JVM</h4>
+
+ <p>The old build builds multiple JVMs on 32-bit systems (client and
+ server; and on Windows kernel as well). In the new build we have
+ changed this default to only build server when it's available. This
+ improves build times for those not interested in multiple JVMs. To
+ mimic the old behavior on platforms that support it,
+ use <code>--with-jvm-variants=client,server</code>.</p>
+
+ <h4>Selecting the number of cores to build on</h4>
+
+ <p>By default, <code>configure</code> will analyze your machine and run the make
+ process in parallel with as many threads as you have cores. This
+ behavior can be overridden, either "permanently" (on a <code>configure</code>
+ basis) using <code>--with-num-cores=N</code> or for a single build
+ only (on a make basis), using <code>make JOBS=N</code>.</p>
+
+ <p>If you want to make a slower build just this time, to save some CPU
+ power for other processes, you can run
+ e.g. <code>make JOBS=2</code>. This will force the makefiles
+ to only run 2 parallel processes, or even <code>make JOBS=1</code>
+ which will disable parallelism.</p>
+
+ <p>If you want to have it the other way round, namely having slow
+ builds default and override with fast if you're
+ impatient, you should call <code>configure</code> with
+ <code>--with-num-cores=2</code>, making 2 the default.
+ If you want to run with more
+ cores, run <code>make JOBS=8</code></p>
+
+ </blockquote>
+
+ <h3><a name="troubleshooting">Troubleshooting</a></h3>
+ <blockquote>
+
+ <h4>Solving build problems</h4>
+
<blockquote>
- <p>
- The ant scripts that build <tt>jaxp</tt> and <tt>jaxws</tt>
- will attempt to locate these zip bundles from the directory
- in the environment variable
- <tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt>.
- The checksums protect from getting the wrong, corrupted, or
- improperly modified sources.
- Once the sources are made available, the population will not
- happen again unless a <tt>make clobber</tt> is requested
- or the <tt>jaxp/drop/</tt> or <tt>jaxws/drop/</tt>
- directory is explicitly deleted.
- <br>
- <b>NOTE:</b> The default Makefile and ant script behavior
- is to NOT download these bundles from the public http site.
- In general, doing downloads
- during the build process is not advised, it creates too much
- unpredictability in the build process.
- However, you can use <tt>make ALLOW_DOWNLOADS=true</tt> to
- tell the ant script that the download of the zip bundle is
- acceptable.
- </p>
- <p>
- The recommended procedure for keeping a cache of these
- source bundles would be to download them once, place them
- in a directory outside the repositories, and then set
- <tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> to refer
- to that directory.
- These drop bundles do change occasionally, so the newer
- bundles may need to be added to this area from time to time.
- </p>
+ If the build fails (and it's not due to a compilation error in
+ a source file you've changed), the first thing you should do
+ is to re-run the build with more verbosity.
+ Do this by adding <code>LOG=debug</code> to your make command line.
+ <br>
+ The build log (with both stdout and stderr intermingled,
+ basically the same as you see on your console) can be found as
+ <code>build.log</code> in your build directory.
+ <br>
+ You can ask for help on build problems with the new build system
+ on either the
+ <a href="http://mail.openjdk.java.net/mailman/listinfo/build-dev">
+ build-dev</a>
+ or the
+ <a href="http://mail.openjdk.java.net/mailman/listinfo/build-infra-dev">
+ build-infra-dev</a>
+ mailing lists. Please include the relevant parts
+ of the build log.
+ <br>
+ 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.
+ Scanning the <code>configure</code> log is a good first step, making
+ sure that what it found makes sense for your system.
+ Look for strange error messages or any difficulties that
+ <code>configure</code> had in finding things.
+ <br>
+ Some of the more common problems with builds are briefly
+ described
+ below, with suggestions for remedies.
+ <ul>
+ <li>
+ <b>Corrupted Bundles on Windows:</b>
+ <blockquote>
+ Some virus scanning software has been known to
+ corrupt the
+ downloading of zip bundles.
+ It may be necessary to disable the 'on access' or
+ 'real time'
+ virus scanning features to prevent this corruption.
+ This type of "real time" virus scanning can also
+ slow down the
+ build process significantly.
+ Temporarily disabling the feature, or excluding the build
+ output directory may be necessary to get correct and
+ faster builds.
+ </blockquote>
+ </li>
+ <li>
+ <b>Slow Builds:</b>
+ <blockquote>
+ If your build machine seems to be overloaded from too many
+ simultaneous C++ compiles, try setting the
+ <code>JOBS=1</code> on the <code>make</code> command line.
+ Then try increasing the count slowly to an acceptable
+ level for your system. Also:
+ <blockquote>
+ Creating the javadocs can be very slow,
+ if you are running
+ javadoc, consider skipping that step.
+ <br>
+ Faster CPUs, more RAM, and a faster DISK usually helps.
+ The VM build tends to be CPU intensive
+ (many C++ compiles),
+ and the rest of the JDK will often be disk intensive.
+ <br>
+ Faster compiles are possible using a tool called
+ <a href="http://ccache.samba.org/" target="_blank">ccache</a>.
+ </blockquote>
+ </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><code>
+ File `xxx' has modification time in
+ the future.</code>
+ <br>
+ <i>Warning message:</i> <code> Clock skew detected.
+ Your build may
+ be incomplete.</code>
+ </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.
+ <p>
+ If you see these warnings, reset the clock on the
+ build
+ machine, run "<code><i>gmake</i> clobber</code>"
+ or delete the directory
+ containing the build output, and restart the
+ build from the beginning.
+ </blockquote>
+ </li>
+ <li>
+ <b>Error message:
+ <code>Trouble writing out table to disk</code></b>
+ <blockquote>
+ Increase the amount of swap space on your build machine.
+ This could be caused by overloading the system and
+ it may be necessary to use:
+ <blockquote>
+ <code>make JOBS=1</code>
+ </blockquote>
+ to reduce the load on the system.
+ </blockquote>
+ </li>
+ <li>
+ <b>Error Message:
+ <code>libstdc++ not found:</code></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 64-bit Linux versions (e.g. Fedora)
+ only install the 64-bit 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>Linux Error Message:
+ <code>cannot restore segment prot after reloc</code></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 <code>-fPIC</code> for
+ performance reasons.
+ <p>
+ To completely disable SELinux:
+ <ol>
+ <li><code>$ su root</code></li>
+ <li><code># system-config-securitylevel</code></li>
+ <li><code>In the window that appears, select the SELinux tab</code></li>
+ <li><code>Disable SELinux</code></li>
+ </ol>
+ <p>
+ Alternatively, instead of completely disabling it you could
+ disable just this one check.
+ <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>
+ </blockquote>
+ </li>
+ <li>
+ <b>Windows Error Messages:</b>
+ <br>
+ <code>*** fatal error - couldn't allocate heap, ... </code>
+ <br>
+ <code>rm fails with "Directory not empty"</code>
+ <br>
+ <code>unzip fails with "cannot create ... Permission denied"</code>
+ <br>
+ <code>unzip fails with "cannot create ... Error 50"</code>
+ <br>
+ <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: <code>spawn failed</code></b>
+ <blockquote>
+ Try rebooting the system, or there could be some kind of
+ issue with the disk or disk partition being used.
+ Sometimes it comes with a "Permission Denied" message.
+ </blockquote>
+ </li>
+ </ul>
</blockquote>
- </blockquote>
- </blockquote>
- <!-- ------------------------------------------------------ -->
+
+ </blockquote> <!-- Troubleshooting -->
+
+ </blockquote> <!-- Appendix A -->
+
+ <!-- ====================================================== -->
<hr>
- <h2><a name="building">Build Information</a></h2>
+ <h2><a name="gmake">Appendix B: GNU make</a></h2>
<blockquote>
- Building the OpenJDK
- is done with a <a href="#gmake">GNU <tt>make</tt></a> command line
- and various
- environment or make variable settings that direct the makefile 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
- <a href="#gmake"><tt>make</tt></a> sanity && <a href="#gmake"><tt>make</tt></a>
- </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>).
+ GNU version of the utility command <code>make</code>
+ (usually called <code>gmake</code> on Solaris).
A few notes about using GNU make:
<ul>
<li>
You need GNU make version 3.81 or newer.
- </li>
- <li>
- Place the location of the GNU make binary in the <tt>PATH</tt>.
+ If the GNU make utility on your systems is not
+ 3.81 or newer,
+ see <a href="#buildgmake">"Building GNU make"</a>.
</li>
<li>
- <strong>Linux:</strong>
- The <tt>/usr/bin/make</tt> should be 3.81 or newer
- and should work fine for you.
- If this version is not 3.81 or newer,
- see the <a href="#buildgmake">"Building GNU make"</a> section.
+ Place the location of the GNU make binary in the
+ <code>PATH</code>.
</li>
<li>
<strong>Solaris:</strong>
- Do NOT use <tt>/usr/bin/make</tt> on Solaris.
+ Do NOT use <code>/usr/bin/make</code> on Solaris.
If your Solaris system has the software
- from the Solaris Companion CD installed,
- you should try and use <tt>gmake</tt>
- which will be located in either the <tt>/opt/sfw/bin</tt> or
- <tt>/usr/sfw/bin</tt> directory.
- In more recent versions of Solaris GNU make might be found
- at <tt>/usr/bin/gmake</tt>.<br>
- <b>NOTE:</b> It is very likely that this <tt>gmake</tt>
- could be 3.80, you need 3.81, in which case,
- see the <a href="#buildgmake">"Building GNU make"</a> section.
+ from the Solaris Developer Companion CD installed,
+ you should try and use <code>gmake</code>
+ which will be located in either the
+ <code>/usr/bin</code>, <code>/opt/sfw/bin</code> or
+ <code>/usr/sfw/bin</code> directory.
</li>
<li>
<strong>Windows:</strong>
- Make sure you start your build inside a bash/sh/ksh shell and are
- using a <tt>make.exe</tt> utility built for that environment.<br/>
- <strong>MKS</strong> builds need a native Windows version of GNU make
- (see <a href="#buildgmake">Building GNU make</a>).<br/>
- <strong>Cygwin</strong> builds need
- a make version which was specially compiled for the Cygwin environment
- (see <a href="#buildgmake">Building GNU make</a>). <strong>WARNING:</strong>
- the OpenJDK build with the make utility provided by Cygwin will <strong>not</strong>
- work because it does not support drive letters in paths. Make sure that
- your version of make will be found before the Cygwins default make by
- setting an appropriate <tt>PATH</tt> environment variable or by removing
- Cygwin's make after you built your own make version.<br/>
- <strong>MinGW/MSYS</strong> builds can use the default make which
- comes with the environment.
+ Make sure you start your build inside a bash shell.
+ </li>
+ <li>
+ <strong>Mac OS X:</strong>
+ The XCode "command line tools" must be installed on your Mac.
</li>
</ul>
<p>
@@ -714,1539 +1775,728 @@
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
ftp.gnu.org/pub/gnu/make/</a>.
</p>
- <!-- ------------------------------------------------------ -->
- <h4><a name="buildgmake">Building GNU make</a></h4>
+
+ <h3><a name="buildgmake">Building GNU make</a></h3>
<blockquote>
- First step is to get the GNU make 3.81 (or newer) source from
+ First step is to get the GNU make 3.81 or newer source from
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
ftp.gnu.org/pub/gnu/make/</a>.
- Building is a little different depending on the OS and unix toolset
- on Windows:
- <ul>
- <li>
- <strong>Linux:</strong>
- <tt>./configure && make</tt>
- </li>
- <li>
- <strong>Solaris:</strong>
- <tt>./configure && gmake CC=gcc</tt>
- </li>
- <li>
- <strong>Windows for CYGWIN:</strong><br/>
- <tt>./configure</tt><br/>
- Add the line <tt>#define HAVE_CYGWIN_SHELL 1</tt> to the end of <tt>config.h</tt><br/>
- <tt>make</tt><br/>
- <br/>
- This should produce <tt>make.exe</tt> in the current directory.
- </li>
- <li>
- <strong>Windows for MKS:</strong><br/>
- Edit <tt>config.h.W32</tt> and uncomment the line <tt>#define HAVE_MKS_SHELL 1</tt><br/>
- Set the environment for your native compiler (e.g. by calling:<br/>
- <tt>"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /Release /xp /x64)</tt>
- <tt>nmake -f NMakefile.win32</tt>
- <br/>
- This should produce <tt>WinDebug/make.exe</tt> and <tt>WinRel/make.exe</tt>
- <br/>
- If you get the error: <tt>NMAKE : fatal error U1045: spawn failed : Permission denied</tt>
- you have to set the <tt>Read & execute</tt> permission for the file <tt>subproc.bat</tt>.
- </li>
- </ul>
- </blockquote>
- </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>
- <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>
- <li>
- Install
- <a href="#ant">Ant 1.7.1 or newer</a>,
- make sure it is in your PATH.
- </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 64-bit 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>
- <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>
- <li>
- Install the <a href="#xrender">XRender Include files</a>.
- </li>
- <li>
- Install
- <a href="#ant">Ant 1.7.1 or newer</a>,
- make sure it is in your PATH.
- </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 32-bit 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 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>
- Note that GNU make, the shell and other Unix-tools required during the build
- do 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 <tt>\</tt>, and
- there is always a short <a href="http://en.wikipedia.org/wiki/8.3_filename">
- "8.3" pathname</a> without spaces for any path that contains spaces.
- Unfortunately, this short pathname is somewhat dynamic (i.e. dependant on the
- other files and directories inside a given directory) and can not be
- algorithmicly calculated by only looking at a specific path name.
- <p>
- The makefiles will try to translate any pathnames supplied
- to it into the <tt>C:/</tt> style automatically.
- </p>
- <p>
- Special care has to be taken if native Windows applications
- like <tt>nmake</tt> or <tt>cl</tt> are called with file arguments processed
- by Unix-tools like <tt>make</tt> or <tt>sh</tt>!
- </p>
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <h4><a name="paths">Windows build environments</a></h4>
- <blockquote>
- Building on Windows requires a Unix-like environment, notably a Unix-like shell.
- There are several such environments available of which
- <a href="http://www.mkssoftware.com/products/tk/ds_tkdev.asp">MKS</a>,
- <a href="http://www.cygwin.com/">Cygwin</a> and
- <a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are currently supported for
- the OpenJDK build. One of the differences of these three systems is the way
- they handle Windows path names, particularly path names which contain
- spaces, backslashes as path separators and possibly drive letters. Depending
- on the use case and the specifics of each environment these path problems can
- be solved by a combination of quoting whole paths, translating backslashes to
- forward slashes, escaping backslashes with additional backslashes and
- translating the path names to their <a href="http://en.wikipedia.org/wiki/8.3_filename">
- "8.3" version</a>.
- <p>
- As of this writing (MKS ver. 9.4, Cygwin ver. 1.7.9, MinGW/MSYS 1.0.17),
- MKS builds are known to be the fastest Windows builds while MingGW/MSYS
- builds are slightly slower (about 10%) than MKS builds and Cygwin builds
- require nearly twice the time (about 180%) of MKS builds (e.g. on a
- DualCore i7 notebook with 8GB of RAM, HDD and 64-bit Windows 7 operating system
- the complete OpenJDK 8 product build takes about 49min with MKS, 54min with
- MinGW/MSYS and 88min with Cygwin).
- </p>
- <p>
- Mixing tools from the different Unix emulation environments is not a good
- idea and will probably not work!
- </p>
- <p>
- <strong>MKS:</strong> is a commercial product which includes
- all the Unix utilities which are required to build the OpenJDK except GNU
- make. In pre-OpenJDK times it was the only supported build environment on
- Windows. The MKS tools support Windows paths with drive letters and
- forward slashes as path separator. Paths in environment variables like (for
- example) <tt>PATH</tt> are separated by semicolon '<tt>;</tt>'.
- </p>
- <p>
- Recent versions of MKS provide the <tt>dosname</tt> utility to convert paths
- with spaces to short (8.3) path names,e .g.
- <tt>dosname -s "<i>path</i>"</tt>.
- </p>
- <p>
- If you are using the MKS environment, you need a native Windows version
- of Gnu make <a href="#buildgmake">which you can easily build yourself</a>.
- </p>
- <p>
- <strong>Cygwin:</strong>
- is an open source, Linux-like environment which tries to emulate
- a complete POSIX layer on Windows. It tries to be smart about path names
- and can usually handle all kinds of paths if they are correctly quoted
- or escaped although internally it maps drive letters <tt><drive>:</tt>
- to a virtual directory <tt>/cygdrive/<drive></tt>.
- </p>
- <p>
- You can always use the <tt>cygpath</tt> utility to map pathnames with spaces
- or the backslash character into the <tt>C:/</tt> style of pathname
- (called 'mixed'), e.g. <tt>cygpath -s -m "<i>path</i>"</tt>.
- </p>
- <p>
- Note that the 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 use ":").
- 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.
- </p>
- <p>
- If you are using the Cygwin environment, you need to
- <a href="#buildgmake">compile your own version</a>
- of GNU make because the default Cygwin make can not handle drive letters in paths.
- </p>
- <p>
- <strong>MinGW/MSYS:</strong>
- MinGW ("Minimalist GNU for Windows") is a collection of free Windows
- specific header files and import libraries combined with GNU toolsets that
- allow one to produce native Windows programs that do not rely on any
- 3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
- applications and programs which rely on traditional UNIX tools to
- be present. Among others this includes tools like <tt>bash</tt> and <tt>make</tt>.
- </p>
- <p>
- Like Cygwin, MinGW/MSYS can handle different types of path formats. They
- are internally converted to paths with forward slashes and drive letters
- <tt><drive>:</tt> replaced by a virtual
- directory <tt>/<drive></tt>. Additionally, MSYS automatically
- detects binaries compiled for the MSYS environment and feeds them with the
- internal, Unix-style path names. If native Windows applications are called
- from within MSYS programs their path arguments are automatically converted
- back to Windows style path names with drive letters and backslashes as
- path separators. This may cause problems for Windows applications which
- use forward slashes as parameter separator (e.g. <tt>cl /nologo /I</tt>)
- because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
- replace such parameters by drive letters</a>.
- </p>
- <p>
- If you are using the MinGW/MSYS system you can use the default make
- version supplied by the environment.
- </p>
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <h4><a name="windows_checklist">Basic Windows Check List</a></h4>
- <blockquote>
- <ol>
- <li>
- Install one of the
- <a href="#cygwin">CYGWIN</a>, <a href="#msys">MinGW/MSYS</a> or
- <a href="http://www.mkssoftware.com/products/tk/ds_tkdev.asp">MKS</a> environments.
- </li>
- <li>
- Install the
- <a href="#bootjdk">Bootstrap JDK</a>, set
- <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</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="#msvc32">Microsoft Visual Studio Compilers</a>).
- </li>
- <li>
- Setup all environment variables for compilers
- (see <a href="#msvc32">compilers</a>).
- </li>
- <li>
- Install
- <a href="#dxsdk">Microsoft DirectX SDK</a>.
- </li>
- <li>
- Install
- <a href="#ant">Ant 1.7.1 or newer</a>,
- make sure it is in your PATH and set
- <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
- </li>
- </ol>
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <hr>
- <h3><a name="macosx">Basic Mac OS X System Setup</a></h3>
- <blockquote>
- <strong>X64 only:</strong>
- The minimum recommended hardware for building
- the Mac OS X version is any 64-bit capable Intel processor, at least 2
- GB of RAM, and approximately 3 GB of free disk space. You should also
- have OS X Lion 10.7.3 installed.
- </blockquote>
- <!-- ------------------------------------------------------ -->
-
- <h4><a name="macosx_checklist">Basic Mac OS X Check List</a></h4>
- <blockquote>
- <ol>
- <li>
- Install <a href="https://developer.apple.com/xcode/">XCode 4.1</a> or newer.
- If you install XCode 4.3 or newer, make sure you also install
- "Command line tools" found under the preferences pane "Downloads".
- </li>
- <li>
- Install <a href="http://support.apple.com/kb/dl1421" target="_blank">"Java for OS X Lion Update 1"</a>,
- set <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a> to <code>`/usr/libexec/java_home -v 1.6`</code></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>
- </ol>
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <hr>
- <h3><a name="dependencies">Build Dependencies</a></h3>
- <blockquote>
- 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/downloads/index.jsp"
- 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="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="ant">Ant</a></h4>
- <blockquote>
- All OpenJDK builds require access to least Ant 1.7.1.
- The Ant tool is available from the
- <a href="http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip" target="_blank">
- Ant 1.7.1 archive download site</a>.
- You should always make sure <tt>ant</tt> is in your PATH, and
- on Windows you may also need to set
- <tt><a href="#ANT_HOME">ANT_HOME</a></tt>
- to point to the location of
- the Ant installation, this is the directory pathname
- that contains a <tt>bin and lib</tt>.
- <br>
- <b>WARNING:</b> Ant versions used from IDE tools like NetBeans
- or installed via system packages may not operate the same
- as the one obtained from the Ant download bundles.
- These system and IDE installers sometimes choose to change
- the ant installation enough to cause differences.
- </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>
+ Building is a little different depending on the OS but is
+ basically done with:
<blockquote>
- The GNU gcc compiler version should be 4.3 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>
- At a minimum, the
- <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
- Sun Studio 12 Update 1 Compilers</a>
- (containing version 5.10 of the C and C++ compilers) is required,
- including specific patches.
- <p>
- The Solaris SPARC patch list is:
- <ul>
- <li>
- 118683-05: SunOS 5.10: Patch for profiling libraries and assembler
- </li>
- <li>
- 119963-21: SunOS 5.10: Shared library patch for C++
- </li>
- <li>
- 120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
- </li>
- <li>
- 128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
- </li>
- <li>
- 141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
- </li>
- <li>
- 141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
- </li>
- <li>
- 142371-01: Sun Studio 12.1 Update 1: Patch for dbx
- </li>
- <li>
- 143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
- </li>
- <li>
- 143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
- </li>
- <li>
- 142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
- </li>
- </ul>
- <p>
- The Solaris X86 patch list is:
- <ul>
- <li>
- 119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
- </li>
- <li>
- 119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
- </li>
- <li>
- 120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
- </li>
- <li>
- 141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
- </li>
- <li>
- 128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
- </li>
- <li>
- 142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
- </li>
- <li>
- 142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
- </li>
- </ul>
- <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 Oracle Solaris Studio Express compilers at:
- <a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank">
- Oracle Solaris Studio Express Download site</a>
- are also an option, although these compilers have not
- been extensively used yet.
- </blockquote>
- <strong><a name="msvc32">Windows i586: Microsoft Visual Studio 2010 Compilers</a></strong>
- <blockquote>
- <p>
- <b>BEGIN WARNING</b>: JDK 7 has transitioned to
- use the newest VS2010 Microsoft compilers.
- No other compilers are known to build the entire JDK,
- including non-open portions.
- Visual Studio 2010 Express compilers are now able to build all the
- open source repositories, but this is 32 bit only. To build 64 bit
- Windows binaries use the the 7.1 Windows SDK.
- <b>END WARNING.</b>
- <p>
- The 32-bit OpenJDK Windows build requires
- Microsoft Visual Studio C++ 2010 (VS2010) Professional
- Edition or Express compiler.
- The compiler and other tools are expected to reside
- in the location defined by the variable
- <tt>VS100COMNTOOLS</tt> which
- is set by the Microsoft Visual Studio installer.
- <p>
- Once the compiler is installed,
- it is recommended that you run <tt>VCVARS32.BAT</tt>
- to set the compiler environment variables
- <tt>INCLUDE</tt>,
- <tt>LIB</tt>, and
- <tt>PATH</tt>
- prior to building the
- OpenJDK.
- The above environment variables <b>MUST</b> be set.
- This compiler also contains the Windows SDK v 7.0a,
- which is an update to the Windows 7 SDK.
- <p>
- <b>WARNING:</b> Make sure you check out the
- <a href="#cygwin">CYGWIN link.exe WARNING</a>.
- The path <tt>/usr/bin</tt> must be after the path to the
- Visual Studio product.
- </blockquote>
- <strong><a name="msvc64">Windows x64: Microsoft Visual Studio 2010 Professional Compiler</a></strong>
- <blockquote>
- For <b>X64</b>, the set up is much the same as 32 bit
- except that you run <tt>amd64\VCVARS64.BAT</tt>
- to set the compiler environment variables.
- Previously 64 bit builds had to use the 64 bit compiler in
- an unbundled Windows SDK but this is no longer necessary if
- you have VS2010 Professional.
- </blockquote>
- <strong><a name="mssdk64">Windows x64: Microsoft Windows 7.1 SDK 64 bit compilers.</a></strong>
- For a free alternative for 64 bit builds, use the 7.1 SDK.
- Microsoft say that to set up your paths for this run
- <pre>
- c:\Program Files\Microsoft SDKs\Windows\v7.1\bin\setenv.cmd /x64.
- </pre>
- What was tested is just directly setting up LIB, INCLUDE,
- PATH and based on the installation directories using the
- DOS short name appropriate for the system, (you will
- need to set them for yours, not just blindly copy this) eg :
- <pre>
- set VSINSTALLDIR=c:\PROGRA~2\MICROS~1.0
- set WindowsSdkDir=c:\PROGRA~1\MICROS~1\Windows\v7.1
- set PATH=%VSINSTALLDIR%\vc\bin\amd64;%VSINSTALLDIR%\Common7\IDE;%WindowsSdkDir%\bin;%PATH%
- set INCLUDE=%VSINSTALLDIR%\vc\include;%WindowsSdkDir%\include
- set LIB=%VSINSTALLDIR%\vc\lib\amd64;%WindowsSdkDir%\lib\x64
- </pre>
- <strong><a name="llvmgcc">OS X Lion 10.7.3: LLVM GCC</a></strong>
- <blockquote>
- LLVM GCC is bundled with XCode. The version should be at least 4.2.1.
+ <code>bash ./configure</code>
+ <br>
+ <code>make</code>
</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="xrender">XRender Extension Headers (Solaris & Linux)</a></h4>
- <blockquote>
- <p>
- <strong>Solaris:</strong>
- XRender header files are required for building the
- OpenJDK on Solaris.
- The XRender header file is included with the other X11 header files
- in the package <strong>SFWxwinc</strong> on new enough versions of
- Solaris and will be installed in
- <tt>/usr/X11/include/X11/extensions/Xrender.h</tt> or
- <tt>/usr/openwin/share/include/X11/extensions/Xrender.h</tt>
- </p><p>
- <strong>Linux:</strong>
- XRender header files are required for building the
- OpenJDK on Linux.
- The Linux header files are usually available from a "Xrender"
- development package, it's recommended that you try and use
- the package provided by the particular distribution of Linux that
- you are using.
- </p>
- </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.
- <p>
- Building the freetype 2 libraries from scratch is also possible,
- however on Windows refer to the
- <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
- Windows FreeType DLL build instructions</a>.
- <p>
- Note that by default FreeType is built with byte code hinting
- support disabled due to licensing restrictions.
- In this case, text appearance and metrics are expected to
- differ from Sun's official JDK build.
- See
- <a href="http://freetype.sourceforge.net/freetype2/index.html">
- the SourceForge FreeType2 Home Page
- </a>
- for more information.
- </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>
- <!-- ------------------------------------------------------ -->
- <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>Category</td>
- <td>Package</td>
- <td>Description</td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>ar.exe</td>
- <td>Devel</td>
- <td>binutils</td>
- <td>The GNU assembler, linker and binary
- utilities</td>
- </tr>
- <tr>
- <td>make.exe</td>
- <td>Devel</td>
- <td>make</td>
- <td>The GNU version of the 'make' utility built for CYGWIN.<br>
- <b>NOTE</b>: the Cygwin make can not be used to build the
- OpenJDK. You only need it to build your own version of make
- (see <a href="#gmake">the GNU make section</a>)</td>
- </tr>
- <tr>
- <td>m4.exe</td>
- <td>Interpreters</td>
- <td>m4</td>
- <td>GNU implementation of the traditional Unix macro
- processor</td>
- </tr>
- <tr>
- <td>cpio.exe</td>
- <td>Utils</td>
- <td>cpio</td>
- <td>A program to manage archives of files</td>
- </tr>
- <tr>
- <td>gawk.exe</td>
- <td>Utils</td>
- <td>awk</td>
- <td>Pattern-directed scanning and processing language</td>
- </tr>
- <tr>
- <td>file.exe</td>
- <td>Utils</td>
- <td>file</td>
- <td>Determines file type using 'magic' numbers</td>
- </tr>
- <tr>
- <td>zip.exe</td>
- <td>Archive</td>
- <td>zip</td>
- <td>Package and compress (archive) files</td>
- </tr>
- <tr>
- <td>unzip.exe</td>
- <td>Archive</td>
- <td>unzip</td>
- <td>Extract compressed files in a ZIP archive</td>
- </tr>
- <tr>
- <td>free.exe</td>
- <td>System</td>
- <td>procps</td>
- <td>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>.
- <p>
- <b>WARNING:</b>
- Be very careful with <b><tt>link.exe</tt></b>, it will conflict
- with the Visual Studio version. You need the Visual Studio
- version of <tt>link.exe</tt>, not the CYGWIN one.
- So it's important that the Visual Studio paths in PATH preceed
- the CYGWIN path <tt>/usr/bin</tt>.
- </blockquote>
- <strong> Minimalist GNU for Windows (<a name="msys">MinGW/MSYS</a>)</strong>
- <blockquote>
- Alternatively, the set of unix command tools for the OpenJDK build on
- Windows can be supplied by
- <a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>.
- <p>
- In addition to the tools which will be installed by default, you have
- to manually install the <tt>msys-zip</tt> and <tt>msys-unzip</tt> packages.
- This can be easily done with the MinGW command line installer:<br/>
- <tt><br/>
- mingw-get.exe install msys-zip<br/>
- mingw-get.exe install msys-unzip<br/>
- </tt>
- </p>
- </blockquote>
- <strong><a name="dxsdk">Microsoft DirectX 9.0 SDK header files and libraries</a></strong>
- <blockquote>
- 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="msvcrNN"><tt>MSVCR100.DLL</tt></a></strong>
- <blockquote>
- The OpenJDK build requires access to a redistributable
- <tt>MSVCR100.DLL</tt>.
- This is usually picked up automatically from the redist
- directories of Visual Studio 2010.
- If this cannot be found set the
- <a href="#ALT_MSVCRNN_DLL_PATH"><tt>ALT_MSVCRNN_DLL_PATH</tt></a>
- variable to the location of this file.
- <p>
- </blockquote>
- </blockquote>
- <!-- ------------------------------------------------------ -->
+
+ </blockquote> <!-- Appendix B -->
+
+ <!-- ====================================================== -->
<hr>
- <h2><a name="creating">Creating the Build</a></h2>
- <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>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>
- <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
- <blockquote>
- <ul>
- <li><tt>solaris-sparc</tt></li>
- <li><tt>solaris-sparcv9</tt></li>
- <li><tt>solaris-i586</tt></li>
- <li><tt>solaris-amd64</tt></li>
- <li><tt>linux-i586</tt></li>
- <li><tt>linux-amd64</tt></li>
- <li><tt>windows-i586</tt></li>
- <li><tt>windows-amd64</tt></li>
- </ul>
- </blockquote>
- 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/" target="_blank">the jtreg site</a>.
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <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:
+ <h2><a name="buildenvironments">Appendix C: Build Environments</a></h2>
<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 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_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_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 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>,
- and on Windows with CYGWIN
- <tt>/usr/bin</tt>.
- </dd>
- <dt><tt><a name="ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> </dt>
- <dd>
- The location of any source drop bundles
- (see <a href="#drops">Managing the Source Drops</a>).
- The default will be
- <tt>$(ALT_JDK_DEVTOOLS_PATH)/share/jdk8-drops</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_SLASH_JAVA"><tt>ALT_SLASH_JAVA</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>
- 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><a name="ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a></dt>
- <dd>
- The top-level directory of the libraries and include files for the platform's
- graphical programming environment. The default location is platform specific.
- For example, on Linux it defaults to <tt>/usr/X11R6/</tt>.
- </dd>
- <dt><strong>Windows specific:</strong></dt>
- <dd>
- <dl>
- <dt><a name="ALT_WINDOWSSDKDIR"><tt>ALT_WINDOWSSDKDIR</tt></a> </dt>
- <dd>
- The location of the
- Microsoft Windows SDK where some tools will be
- located.
- The default is whatever WINDOWSSDKDIR is set to
- (or WindowsSdkDir) or the path
- <br>
- <tt>c:\Program Files\Microsoft SDKs\Windows\v7.0a</tt>
- </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_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></tt> </dt>
- <dd>
- The location of the
- <a href="#msvcrNN"><tt>MSVCR100.DLL</tt></a>.
- </dd>
- </dl>
- </dd>
- <dt><strong>Cross-Compilation Support:</strong></dt>
- <dd>
- <dl>
- <dt><a name="CROSS_COMPILE_ARCH"><tt>CROSS_COMPILE_ARCH</tt></a> </dt>
- <dd>
- Set to the target architecture of a cross-compilation build. If set, this
- variable is used to signify that we are cross-compiling. The expectation
- is that <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> is set
- to point to the cross-compiler and that any cross-compilation specific flags
- are passed using <a href="#EXTRA_CFLAGS"><tt>EXTRA_CFLAGS</tt></a>.
- The <a href="#ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a> variable should
- also be set to point to the graphical header files (e.g. X11) provided with
- the cross-compiler.
- When cross-compiling we skip execution of any demos etc that may be built, and
- also skip binary-file verification.
- </dd>
- <dt><tt><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></tt> </dt>
- <dd>
- Used to pass cross-compilation options to the cross-compiler.
- These are added to the <tt>CFLAGS</tt> and <tt>CXXFLAGS</tt> variables.
- </dd>
- <dt><tt><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></tt> </dt>
- <dd>
- Used primarily for cross-compilation builds (and always set in that case)
- this variable indicates that tools from the boot JDK should be used during
- the build process, not the tools (<tt>javac</tt>, <tt>javah</tt>, <tt>jar</tt>)
- just built (which can't execute on the build host).
- </dd>
- <dt><tt><a name="HOST_CC">HOST_CC</a></tt> </dt>
- <dd>
- The location of the C compiler to generate programs to run on the build host.
- Some parts of the build generate programs that are then compiled and executed
- to produce other parts of the build. Normally the primary C compiler is used
- to do this, but when cross-compiling that would be the cross-compiler and the
- resulting program could not be executed.
- On Linux this defaults to <tt>/usr/bin/gcc</tt>; on other platforms it must be
- set explicitly.
- </dd>
- </dl>
- <dt><strong>Specialized Build Options:</strong></dt>
- <dd>
- Some build variables exist to support specialized build environments and/or specialized
- build products. Their use is only supported in those contexts:
- <dl>
- <dt><tt><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></tt> </dt>
- <dd>
- Indicates this build will only contain the Hotspot client VM. In addition to
- controlling the Hotspot build target, it ensures that we don't try to copy
- any server VM files/directories, and defines a default <tt>jvm.cfg</tt> file
- suitable for a client-only environment. Using this in a 64-bit build will
- generate a sanity warning as 64-bit client builds are not directly supported.
- </dd>
- <dt><tt><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</tt> </dt>
- <dd>
- Used when the build environment has no graphical capabilities at all. This
- excludes building anything that requires graphical libraries to be available.
- </dd>
- <dt><tt><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</tt> </dt>
- <dd>
- Used to indicate this is a build of the Oracle Java SE Embedded product.
- This will enable the directives included in the SE-Embedded specific build
- files.
- </dd>
- <dt><tt><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></tt> </dt>
- <dd>
- If set to false, disables the use of mmap by the zip utility. Otherwise,
- mmap will be used.
- </dd>
- <dt><tt><a name="COMPRESS_JARS"></a>COMPRESS_JARS</tt> </dt>
- <dd>
- If set to true, causes certain jar files that would otherwise be built without
- compression, to use compression.
- </dd>
- </dl>
- </dd>
- </dl>
- </blockquote>
- <!-- ------------------------------------------------------ -->
+
+ <h3><a name="MBE">Minimum Build Environments</a></h3>
+ <blockquote>
+ This file often describes specific requirements for what we
+ call the
+ "minimum build environments" (MBE) for this
+ specific release of the JDK.
+ What is listed below is what the Oracle Release
+ Engineering Team will use to build the Oracle JDK product.
+ Building with the MBE will hopefully generate the most compatible
+ bits that install on, and run correctly on, the most variations
+ of the same base OS and hardware architecture.
+ In some cases, these represent what is often called the
+ least common denominator, but each Operating System has different
+ aspects to it.
+ <p>
+ In all cases, the Bootstrap JDK version minimum is critical,
+ we cannot guarantee builds will work with older Bootstrap JDK's.
+ Also in all cases, more RAM and more processors is better,
+ the minimums listed below are simply recommendations.
+ <p>
+ With Solaris and Mac OS X, the version listed below is the
+ oldest release we can guarantee builds and works, and the
+ specific version of the compilers used could be critical.
+ <p>
+ With Windows the critical aspect is the Visual Studio compiler
+ used, which due to it's runtime, generally dictates what Windows
+ systems can do the builds and where the resulting bits can
+ be used.<br>
+ <b>NOTE: We expect a change here off these older Windows OS releases
+ and to a 'less older' one, probably Windows 2008R2 X64.</b>
+ <p>
+ With Linux, it was just a matter of picking a
+ stable distribution that is a good representative for Linux
+ in general.<br>
+ <b>NOTE: We expect a change here from Fedora 9 to something else,
+ but it has not been completely determined yet, possibly
+ Ubuntu 12.04 X64, unbiased community feedback would be welcome on
+ what a good choice would be here.</b>
+ <p>
+ It is understood that most developers will NOT be using these
+ specific versions, and in fact creating these specific versions
+ may be difficult due to the age of some of this software.
+ It is expected that developers are more often using the more
+ recent releases and distributions of these operating systems.
+ <p>
+ Compilation problems with newer or different C/C++ compilers is a
+ common problem.
+ Similarly, compilation problems related to changes to the
+ <code>/usr/include</code> or system header files is also a
+ common problem with older, newer, or unreleased OS versions.
+ Please report these types of problems as bugs so that they
+ can be dealt with accordingly.
+ </p>
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Base OS and Architecture</th>
+ <th>OS</th>
+ <th>C/C++ Compiler</th>
+ <th>Bootstrap JDK</th>
+ <th>Processors</th>
+ <th>RAM Minimum</th>
+ <th>DISK Needs</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Linux X86 (32-bit) and X64 (64-bit)</td>
+ <td>Fedora 9</td>
+ <td>gcc 4.3 </td>
+ <td>JDK 7u7</td>
+ <td>2 or more</td>
+ <td>1 GB</td>
+ <td>6 GB</td>
+ </tr>
+ <tr>
+ <td>Solaris SPARC (32-bit) and SPARCV9 (64-bit)</td>
+ <td>Solaris 10 Update 6</td>
+ <td>Studio 12 Update 1 + patches</td>
+ <td>JDK 7u7</td>
+ <td>4 or more</td>
+ <td>4 GB</td>
+ <td>8 GB</td>
+ </tr>
+ <tr>
+ <td>Solaris X86 (32-bit) and X64 (64-bit)</td>
+ <td>Solaris 10 Update 6</td>
+ <td>Studio 12 Update 1 + patches</td>
+ <td>JDK 7u7</td>
+ <td>4 or more</td>
+ <td>4 GB</td>
+ <td>8 GB</td>
+ </tr>
+ <tr>
+ <td>Windows X86 (32-bit)</td>
+ <td>Windows XP</td>
+ <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
+ <td>JDK 7u7</td>
+ <td>2 or more</td>
+ <td>2 GB</td>
+ <td>6 GB</td>
+ </tr>
+ <tr>
+ <td>Windows X64 (64-bit)</td>
+ <td>Windows Server 2003 - Enterprise x64 Edition</td>
+ <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
+ <td>JDK 7u7</td>
+ <td>2 or more</td>
+ <td>2 GB</td>
+ <td>6 GB</td>
+ </tr>
+ <tr>
+ <td>Mac OS X X64 (64-bit)</td>
+ <td>Mac OS X 10.7 "Lion"</td>
+ <td>XCode 4.5.2 or newer</td>
+ <td>JDK 7u7</td>
+ <td>2 or more</td>
+ <td>4 GB</td>
+ <td>6 GB</td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+
+ <!-- ====================================================== -->
+ <hr>
+ <h3><a name="SDBE">Specific Developer Build Environments</a></h3>
+ <blockquote>
+ We won't be listing all the possible environments, but
+ we will try to provide what information we have available to us.
+ <p>
+ <strong>NOTE: The community can help out by updating
+ this part of the document.
+ </strong>
+
+ <h4><a name="fedora">Fedora</a></h4>
+ <blockquote>
+ After installing the latest
+ <a href="http://fedoraproject.org">Fedora</a>
+ you need to install several build dependencies.
+ The simplest way to do it is to execute the
+ following commands as user <code>root</code>:
+ <blockquote>
+ <code>yum-builddep java-1.7.0-openjdk</code>
+ <br>
+ <code>yum install gcc gcc-c++</code>
+ </blockquote>
+ <p>
+ In addition, it's necessary to set a few environment
+ variables for the build:
+ <blockquote>
+ <code>export LANG=C</code>
+ <br>
+ <code>export PATH="/usr/lib/jvm/java-openjdk/bin:${PATH}"</code>
+ </blockquote>
+ </blockquote>
+
+
+ <h4><a name="centos">CentOS 5.5</a></h4>
+ <blockquote>
+ After installing
+ <a href="http://www.centos.org/">CentOS 5.5</a>
+ you need to make sure you have
+ the following Development bundles installed:
+ <blockquote>
+ <ul>
+ <li>Development Libraries</li>
+ <li>Development Tools</li>
+ <li>Java Development</li>
+ <li>X Software Development (Including XFree86-devel)</li>
+ </ul>
+ </blockquote>
+ <p>
+ Plus the following packages:
+ <blockquote>
+ <ul>
+ <li>cups devel: Cups Development Package</li>
+ <li>alsa devel: Alsa Development Package</li>
+ <li>Xi devel: libXi.so Development Package</li>
+ </ul>
+ </blockquote>
+ <p>
+ The freetype 2.3 packages don't seem to be available,
+ but the freetype 2.3 sources can be downloaded, built,
+ and installed easily enough from
+ <a href="http://downloads.sourceforge.net/freetype">
+ the freetype site</a>.
+ Build and install with something like:
+ <blockquote>
+ <code>bash ./configure</code>
+ <br>
+ <code>make</code>
+ <br>
+ <code>sudo -u root make install</code>
+ </blockquote>
+ <p>
+ Mercurial packages could not be found easily, but a Google
+ search should find ones, and they usually include Python if
+ it's needed.
+ </blockquote>
+
+ <h4><a name="debian">Debian 5.0 (Lenny)</a></h4>
+ <blockquote>
+ After installing <a href="http://debian.org">Debian</a> 5
+ you need to install several build dependencies.
+ The simplest way to install the build dependencies is to
+ execute the following commands as user <code>root</code>:
+ <blockquote>
+ <code>aptitude build-dep openjdk-7</code>
+ <br>
+ <code>aptitude install openjdk-7-jdk libmotif-dev</code>
+ </blockquote>
+ <p>
+ In addition, it's necessary to set a few environment
+ variables for the build:
+ <blockquote>
+ <code>export LANG=C</code>
+ <br>
+ <code>export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"</code>
+ </blockquote>
+ </blockquote>
+
+ <h4><a name="ubuntu">Ubuntu 12.04</a></h4>
+ <blockquote>
+ After installing <a href="http://ubuntu.org">Ubuntu</a> 12.04
+ you need to install several build dependencies. The simplest
+ way to do it is to execute the following commands:
+ <blockquote>
+ <code>sudo aptitude build-dep openjdk-7</code>
+ <br>
+ <code>sudo aptitude install openjdk-7-jdk</code>
+ </blockquote>
+ <p>
+ In addition, it's necessary to set a few environment
+ variables for the build:
+ <blockquote>
+ <code>export LANG=C</code>
+ <br>
+ <code>export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"</code>
+ </blockquote>
+ </blockquote>
+
+ <h4><a name="opensuse">OpenSUSE 11.1</a></h4>
+ <blockquote>
+ After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1
+ you need to install several build dependencies.
+ The simplest way to install the build dependencies is to
+ execute the following commands:
+ <blockquote>
+ <code>sudo zypper source-install -d java-1_7_0-openjdk</code>
+ <br>
+ <code>sudo zypper install make</code>
+ </blockquote>
+ <p>
+ In addition, it is necessary to set a few environment
+ variables for the build:
+ <blockquote>
+ <code>export LANG=C</code>
+ <br>
+ <code>export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:$[PATH}"</code>
+ </blockquote>
+ <p>
+ Finally, you need to unset the <code>JAVA_HOME</code>
+ environment variable:
+ <blockquote>
+ <code>export -n JAVA_HOME</code>
+ </blockquote>
+ </blockquote>
+
+ <h4><a name="mandriva">Mandriva Linux One 2009 Spring</a></h4>
+ <blockquote>
+ After installing <a href="http://mandriva.org">Mandriva</a>
+ Linux One 2009 Spring
+ you need to install several build dependencies.
+ The simplest way to install the build dependencies is to
+ execute the following commands as user <code>root</code>:
+ <blockquote>
+ <code>urpmi java-1.7.0-openjdk-devel make gcc gcc-c++
+ freetype-devel zip unzip libcups2-devel libxrender1-devel
+ libalsa2-devel libstc++-static-devel libxtst6-devel
+ libxi-devel</code>
+ </blockquote>
+ <p>
+ In addition, it is necessary to set a few environment
+ variables for the build:
+ <blockquote>
+ <code>export LANG=C</code>
+ <br>
+ <code>export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:${PATH}"</code>
+ </blockquote>
+ </blockquote>
+
+ <h4><a name="opensolaris">OpenSolaris 2009.06</a></h4>
+ <blockquote>
+ After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06
+ you need to install several build dependencies.
+ The simplest way to install the build dependencies is to
+ execute the following commands:
+ <blockquote>
+ <code>pfexec pkg install SUNWgmake SUNWj7dev
+ sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl
+ SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
+ </blockquote>
+ <p>
+ In addition, it is necessary to set a few environment
+ variables for the build:
+ <blockquote>
+ <code>export LANG=C</code>
+ <br>
+ <code>export PATH="/opt/SunStudioExpress/bin:${PATH}"</code>
+ </blockquote>
+ </blockquote>
+
+ </blockquote>
+
+ </blockquote> <!-- Appendix C -->
+
+ <!-- ====================================================== -->
+
+ <!-- Leave out Appendix D --
+
+<hr>
+<h2><a name="mapping">Appendix D: Mapping Old to New</a></h2>
+<blockquote>
+ <p>This table will help you convert some idioms of the old build
+ system to the new build system.</p>
+ <table summary="Cheat sheet for converting from old to new build system">
+ <tr valign="top">
+ <th>In the old build system, you used to...</th>
+ <th>In the new build system, you should ...</th>
+ </tr>
+ <tr valign="top">
+ <td>run <code>make sanity</code></td>
+ <td>run <code>bash ./configure</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_OUTPUTDIR=build/my-special-output</code></td>
+ <td>before building the first time:
+ <br>
+ <code>cd build/my-special-output</code>
+ <br>
+ <code>bash ../../configure</code>
+ <br>
+ to build:
+ <br>
+ <code>cd build/my-special-output</code>
+ <br>
+ <code>make</code>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_BOOTDIR=/opt/java/jdk7</code></td>
+ <td>run <code>configure --with-boot-jdk=/opt/java/jdk7</code></td>
+ </tr>
+ <tr valign="top">
+ <td>run <code>make ARCH_DATA_MODEL=32</code></td>
+ <td>run <code>configure --with-target-bits=32</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>BUILD_CLIENT_ONLY=true</code></td>
+ <td>run <code>configure --with-jvm-variants=client</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_FREETYPE_LIB_PATH=/opt/freetype/lib</code>
+ and <code>ALT_FREETYPE_HEADERS_PATH=/opt/freetype/include</code></td>
+ <td>run <code>configure --with-freetype=/opt/freetype</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_CUPS_HEADERS_PATH=/opt/cups/include</code></td>
+ <td>run <code>configure --with-cups=/opt/cups</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_OPENWIN_HOME=/opt/X11R6</code></td>
+ <td>run <code>configure --with-x=/opt/X11R6</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_MSVCRNN_DLL_PATH=c:/vc_redist</code></td>
+ <td>run <code>configure --with-msvcr100dll=/cygdrive/c/vc_redist</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_COMPILER_PATH=/opt/my-gcc/bin/gcc</code></td>
+ <td>run <code>CC=/opt/my-gcc/bin/gcc configure</code>
+ or <code>CXX=/opt/my-gcc/bin/g++ configure</code>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>BUILD_HEADLESS_ONLY=true</code></td>
+ <td>run <code>configure --disable-headful</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_DEVTOOLS_PATH=/opt/mytools</code></td>
+ <td>just run <code>configure</code>,
+ your tools should be detected automatically.
+ If you have an unusual configuration,
+ add the tools directory to your <code>PATH</code>.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_DROPS_DIR=/home/user/dropdir</code></td>
+ <td>source drops are not used anymore</td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>USE_ONLY_BOOTDIR_TOOLS=true</code></td>
+ <td>not needed, <code>configure</code> should always do the Right Thing automatically</td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>ALT_JDK_IMPORT_PATH=/opt/java/import-jdk</code>
+ or <code>ALT_BUILD_JDK_IMPORT_PATH=/opt/java/import-jdk</code>
+ </td>
+ <td>Importing JDKs is no longer possible,
+ but hotspot can be imported using
+ <code>--with-import-hotspot</code>.
+ Documentation on how to achieve a
+ similar solution will come soon!
+ </td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>EXTRA_CFLAGS=-Xfoo</code></td>
+ <td>run <code>CFLAGS=-Xfoo configure</code></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>CROSS_COMPILE_ARCH=i586</code></td>
+ <td>see <a href="#sec7.3"> section 7.3, Cross-compilation</a></td>
+ </tr>
+ <tr valign="top">
+ <td>set <code>SKIP_BOOT_CYCLE=false</code></td>
+ <td>Run <code>make bootcycle-images</code>.</td>
+ </tr>
+ </table>
+
+ <h3><a name="variables">Environment/Make Variables</a></h3>
+ <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"><code>PATH</code></a> </dt>
+ <dd>Typically you want to set the <code>PATH</code> to include:
+ <ul>
+ <li>The location of the GNU make binary</li>
+ <li>The location of the Bootstrap JDK <code>java</code>
+ (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
+ <li>The location of the C/C++ compilers
+ (see <a href="#compilers"><code>compilers</code></a>)</li>
+ <li>The location or locations for the Unix command utilities
+ (e.g. <code>/usr/bin</code>)</li>
+ </ul>
+ </dd>
+ <dt><code>MILESTONE</code> </dt>
+ <dd>
+ The milestone name for the build (<i>e.g.</i>"beta").
+ The default value is "internal".
+ </dd>
+ <dt><code>BUILD_NUMBER</code> </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"><code>ARCH_DATA_MODEL</code></a></dt>
+ <dd>The <code>ARCH_DATA_MODEL</code> 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 <code>ARCH_DATA_MODEL</code> to <code>32</code> for generating 32-bit binaries,
+ or to <code>64</code> for generating 64-bit binaries.
+ </dd>
+ <dt><a name="ALT_BOOTDIR"><code>ALT_BOOTDIR</code></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 <code>ALT_BOOTDIR</code> explicitly.
+ </dd>
+ <dt><a name="ALT_OUTPUTDIR"><code>ALT_OUTPUTDIR</code></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"><code>ALT_COMPILER_PATH</code></a> </dt>
+ <dd>
+ The location of the C/C++ compiler.
+ The default varies depending on the platform.
+ </dd>
+ <dt><code><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></code></dt>
+ <dd>
+ The location of the <a href="#cacerts">cacerts</a> file.
+ The default will refer to
+ <code>jdk/src/share/lib/security/cacerts</code>.
+ </dd>
+ <dt><a name="ALT_CUPS_HEADERS_PATH"><code>ALT_CUPS_HEADERS_PATH</code></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
+ <code>/usr/include</code>.
+ </dd>
+ <dt><a name="ALT_FREETYPE_LIB_PATH"><code>ALT_FREETYPE_LIB_PATH</code></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"><code>ALT_FREETYPE_HEADERS_PATH</code></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"><code>ALT_JDK_DEVTOOLS_PATH</code></a></dt>
+ <dd>
+ The default root location of the devtools.
+ The default value is
+ <code>$(ALT_SLASH_JAVA)/devtools</code>.
+ </dd>
+ <dt><code><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></code> </dt>
+ <dd>
+ The location of tools like the
+ <a href="#zip"><code>zip</code> and <code>unzip</code></a>
+ binaries, but might also contain the GNU make utility
+ (<code><i>gmake</i></code>).
+ 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
+ <code>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</code>,
+ on Solaris
+ <code>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</code>,
+ and on Windows with CYGWIN
+ <code>/usr/bin</code>.
+ </dd>
+ <dt><a name="ALT_UNIXCCS_PATH"><code>ALT_UNIXCCS_PATH</code></a></dt>
+ <dd>
+ <strong>Solaris only:</strong>
+ An override for specifying where the Unix CCS
+ command set are located.
+ The default location is <code>/usr/ccs/bin</code>
+ </dd>
+ <dt><a name="ALT_SLASH_JAVA"><code>ALT_SLASH_JAVA</code></a></dt>
+ <dd>
+ The default root location for many of the ALT path locations
+ of the following ALT variables.
+ The default value is
+ <code>"/java"</code> on Solaris and Linux,
+ <code>"J:"</code> on Windows.
+ </dd>
+
+ <dt><a name="ALT_OPENWIN_HOME"><code>ALT_OPENWIN_HOME</code></a></dt>
+ <dd>
+ The top-level directory of the libraries and include files
+ for the platform's
+ graphical programming environment.
+ The default location is platform specific.
+ For example, on Linux it defaults to <code>/usr/X11R6/</code>.
+ </dd>
+ <dt><strong>Windows specific:</strong></dt>
+ <dd>
+ <dl>
+ <dt><a name="ALT_WINDOWSSDKDIR"><code>ALT_WINDOWSSDKDIR</code></a> </dt>
+ <dd>
+ The location of the
+ Microsoft Windows SDK where some tools will be
+ located.
+ The default is whatever WINDOWSSDKDIR is set to
+ (or WindowsSdkDir) or the path
+ <br>
+ <code>c:\Program Files\Microsoft SDKs\Windows\v7.0a</code>
+ </dd>
+ <dt><code><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></code> </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 <code>DXSDK_DIR</code>,
+ failing that, look in <code>C:/DXSDK</code>.
+ </dd>
+ <dt><code><a name="ALT_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></code> </dt>
+ <dd>
+ The location of the
+ <a href="#msvcrNN"><code>MSVCR100.DLL</code></a>.
+ </dd>
+ </dl>
+ </dd>
+ <dt><strong>Cross-Compilation Support:</strong></dt>
+ <dd>
+ <dl>
+ <dt><a name="CROSS_COMPILE_ARCH"><code>CROSS_COMPILE_ARCH</code></a> </dt>
+ <dd>
+ Set to the target architecture of a
+ cross-compilation build. If set, this
+ variable is used to signify that we are
+ cross-compiling. The expectation
+ is that
+ <a href="#ALT_COMPILER_PATH"><code>ALT_COMPILER_PATH</code></a>
+ is set
+ to point to the cross-compiler and that any
+ cross-compilation specific flags
+ are passed using
+ <a href="#EXTRA_CFLAGS"><code>EXTRA_CFLAGS</code></a>.
+ The <a href="#ALT_OPENWIN_HOME"><code>ALT_OPENWIN_HOME</code></a>
+ variable should
+ also be set to point to the graphical header files
+ (e.g. X11) provided with
+ the cross-compiler.
+ When cross-compiling we skip execution of any demos
+ etc that may be built, and
+ also skip binary-file verification.
+ </dd>
+ <dt><code><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></code> </dt>
+ <dd>
+ Used to pass cross-compilation options to the
+ cross-compiler.
+ These are added to the <code>CFLAGS</code>
+ and <code>CXXFLAGS</code> variables.
+ </dd>
+ <dt><code><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></code> </dt>
+ <dd>
+ Used primarily for cross-compilation builds
+ (and always set in that case)
+ this variable indicates that tools from the
+ boot JDK should be used during
+ the build process, not the tools
+ (<code>javac</code>, <code>javah</code>, <code>jar</code>)
+ just built (which can't execute on the build host).
+ </dd>
+ <dt><code><a name="HOST_CC">HOST_CC</a></code> </dt>
+ <dd>
+ The location of the C compiler to generate programs
+ to run on the build host.
+ Some parts of the build generate programs that are
+ then compiled and executed
+ to produce other parts of the build. Normally the
+ primary C compiler is used
+ to do this, but when cross-compiling that would be
+ the cross-compiler and the
+ resulting program could not be executed.
+ On Linux this defaults to <code>/usr/bin/gcc</code>;
+ on other platforms it must be
+ set explicitly.
+ </dd>
+ </dl>
+ <dt><strong>Specialized Build Options:</strong></dt>
+ <dd>
+ Some build variables exist to support specialized build
+ environments and/or specialized
+ build products. Their use is only supported in those contexts:
+ <dl>
+ <dt><code><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></code> </dt>
+ <dd>
+ Indicates this build will only contain the
+ Hotspot client VM. In addition to
+ controlling the Hotspot build target,
+ it ensures that we don't try to copy
+ any server VM files/directories,
+ and defines a default <code>jvm.cfg</code> file
+ suitable for a client-only environment.
+ Using this in a 64-bit build will
+ generate a sanity warning as 64-bit client
+ builds are not directly supported.
+ </dd>
+ <dt><code><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</code> </dt>
+ <dd>
+ Used when the build environment has no graphical
+ capabilities at all. This
+ excludes building anything that requires graphical
+ libraries to be available.
+ </dd>
+ <dt><code><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</code> </dt>
+ <dd>
+ Used to indicate this is a build of the Oracle
+ Java SE Embedded product.
+ This will enable the directives included in the
+ SE-Embedded specific build
+ files.
+ </dd>
+ <dt><code><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></code> </dt>
+ <dd>
+ If set to false, disables the use of mmap by the
+ zip utility. Otherwise,
+ mmap will be used.
+ </dd>
+ <dt><code><a name="COMPRESS_JARS"></a>COMPRESS_JARS</code> </dt>
+ <dd>
+ If set to true, causes certain jar files that
+ would otherwise be built without
+ compression, to use compression.
+ </dd>
+ </dl>
+ </dd>
+ </dl>
+ </blockquote>
+
+</blockquote> <!-- Appendix D -->
+
+ <!-- ====================================================== -->
<hr>
- <h2><a name="hints">Hints and Tips</a></h2>
- <blockquote>
- You don't have to use all these hints and tips, and in fact people do actually
- build with systems that contradict these, but they might prove to be
- helpful to some.
- <ul>
- <li>
- If <tt>make sanity</tt> does not work, find out why, fix that
- before going any further. Or at least understand what the
- complaints are from it.
- </li>
- <li>
- JDK: Keep in mind that you are building a JDK, but you need
- a JDK (BOOTDIR JDK) to build this JDK.
- </li>
- <li>
- Ant: The ant utility is a java application and besides having
- ant available to you, it's important that ant finds the right
- java to run with. Make sure you can type <tt>ant -version</tt>
- and get clean results with no error messages.
- </li>
- <li>
- Linux: Try and favor the system packages over building your own
- or getting packages from other areas.
- Most Linux builds should be possible with the system's
- available packages.
- </li>
- <li>
- Solaris: Typically you will need to get compilers on your systems
- and occasionally GNU make 3.81 if a gmake binary is not available.
- The gmake binary might not be 3.81, be careful.
- </li>
- <li>
- Windows VS2010:
- <ul>
- <li>
- Only the C++ part of VS2010 is needed.
- Try to let the installation go to the default install directory.
- Always reboot your system after installing VS2010.
- The system environment variable VS100COMNTOOLS should be
- set in your environment.
- </li>
- <li>
- Make sure that TMP and TEMP are also set in the environment
- and refer to Windows paths that exist, like <tt>C:\temp</tt>,
- not <tt>/tmp</tt>, not <tt>/cygdrive/c/temp</tt>, and not <tt>C:/temp</tt>.
- <tt>C:\temp</tt> is just an example, it is assumed that this area is
- private to the user, so by default after installs you should
- see a unique user path in these variables.
- </li>
- <li>
- You need to use vsvars32.bat or vsvars64.bat to get the
- PATH, INCLUDE, LIB, LIBPATH, and WINDOWSSDKDIR
- variables set in your shell environment.
- These bat files are not easy to use from a shell environment.
- However, there is a script placed in the root jdk8 repository called
- vsvars.sh that can help, it should only be done once in a shell
- that will be doing the build, e.g.<br>
- <tt>sh ./make/scripts/vsvars.sh -v10 > settings<br>
- eval `cat settings`</tt><br>
- Or just <tt>eval `sh ./make/scripts/vsvars.sh -v10`</tt>.
- </li>
- </ul>
- </li>
- <li>
- Windows: PATH order is critical, see the
- <a href="#paths">paths</a> section for more information.
- </li>
- <li>
- Windows 64bit builds: Use ARCH_DATA_MODEL=64.
- </li>
- </ul>
- </blockquote>
- <!-- ------------------------------------------------------ -->
+ <p>End of OpenJDK README-builds.html document.<br>Please come again!
<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>Corrupted Bundles on Windows:</b>
- <blockquote>
- Some virus scanning software has been known to corrupt the
- downloading of zip bundles.
- It may be necessary to disable the 'on access' or 'real time'
- virus scanning features to prevent this corruption.
- This type of "real time" virus scanning can also slow down the
- build process significantly.
- Temporarily disabling the feature, or excluding the build
- output directory may be necessary to get correct and faster builds.
- </blockquote>
- </li>
- <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 64-bit Linux versions (e.g. Fedora)
- only install the 64-bit 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:
- <ol>
- <li><tt>$ su root</tt></li>
- <li><tt># system-config-securitylevel</tt></li>
- <li><tt>In the window that appears, select the SELinux tab</tt></li>
- <li><tt>Disable SELinux</tt></li>
- </ol>
- <p>
- Alternatively, instead of completely disabling it you could
- disable just this one check.
- <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>
- </blockquote>
- </li>
- <li>
- <b>Windows Error Messages:</b><br>
- <tt>*** fatal error - couldn't allocate heap, ... </tt><br>
- <tt>rm fails with "Directory not empty"</tt><br>
- <tt>unzip fails with "cannot create ... Permission denied"</tt><br>
- <tt>unzip fails with "cannot create ... Error 50"</tt><br>
- <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>spawn failed</tt></b>
- <blockquote>
- Try rebooting the system, or there could be some kind of
- issue with the disk or disk partition being used.
- Sometimes it comes with a "Permission Denied" message.
- </blockquote>
- </li>
- </ul>
- </blockquote>
- <!-- ------------------------------------------------------ -->
- <hr>
- <h2><a name="newbuild">The New Build</a></h2>
- <blockquote>
- The <a href="http://openjdk.java.net/projects/build-infra/">
- Build Infrastructure project</a> is working on a new
- build. For information on how to try it out, please see the
- <a href="http://openjdk.java.net/projects/build-infra/guide.html">
- Build Infra User Guide</a>
- </blockquote>
- <hr>
+
</body>
</html>
--- a/common/autoconf/generated-configure.sh Tue Feb 26 09:25:44 2013 -0800
+++ b/common/autoconf/generated-configure.sh Tue Mar 05 11:46:02 2013 -0800
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for OpenJDK jdk8.
+# Generated by GNU Autoconf 2.67 for OpenJDK jdk8.
#
# Report bugs to <build-dev@openjdk.java.net>.
#
@@ -91,7 +91,6 @@
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -217,18 +216,11 @@
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
- # Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
export CONFIG_SHELL
- case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
- esac
- exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
fi
if test x$as_have_required = xno; then :
@@ -649,7 +641,7 @@
CXXFLAGS_JDKLIB
CFLAGS_JDKEXE
CFLAGS_JDKLIB
-MACOSX_REQUIRED_VERSION
+MACOSX_VERSION_MIN
PACKAGE_PATH
LEGACY_EXTRA_LDFLAGS
LEGACY_EXTRA_CXXFLAGS
@@ -1443,7 +1435,7 @@
$as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
$as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
esac
@@ -1868,7 +1860,7 @@
if $ac_init_version; then
cat <<\_ACEOF
OpenJDK configure jdk8
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.67
Copyright (C) 2010 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
@@ -1914,7 +1906,7 @@
ac_retval=1
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_c_try_compile
@@ -1952,7 +1944,7 @@
ac_retval=1
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_compile
@@ -1990,7 +1982,7 @@
ac_retval=1
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_objc_try_compile
@@ -2027,7 +2019,7 @@
ac_retval=1
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_c_try_cpp
@@ -2064,7 +2056,7 @@
ac_retval=1
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_cpp
@@ -2077,10 +2069,10 @@
ac_fn_cxx_check_header_mongrel ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
+ if eval "test \"\${$3+set}\"" = set; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
+if eval "test \"\${$3+set}\"" = set; then :
$as_echo_n "(cached) " >&6
fi
eval ac_res=\$$3
@@ -2147,7 +2139,7 @@
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
+if eval "test \"\${$3+set}\"" = set; then :
$as_echo_n "(cached) " >&6
else
eval "$3=\$ac_header_compiler"
@@ -2156,7 +2148,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
} # ac_fn_cxx_check_header_mongrel
@@ -2197,7 +2189,7 @@
ac_retval=$ac_status
fi
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_run
@@ -2211,7 +2203,7 @@
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
+if eval "test \"\${$3+set}\"" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2229,7 +2221,7 @@
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
} # ac_fn_cxx_check_header_compile
@@ -2406,7 +2398,7 @@
rm -f conftest.val
fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_cxx_compute_int
@@ -2452,7 +2444,7 @@
# interfere with the next link command; also delete a directory that is
# left behind by Apple's compiler. We do this before executing the actions.
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_link
@@ -2465,7 +2457,7 @@
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
+if eval "test \"\${$3+set}\"" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2520,7 +2512,7 @@
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
} # ac_fn_cxx_check_func
@@ -2533,7 +2525,7 @@
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
+if eval "test \"\${$3+set}\"" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2551,7 +2543,7 @@
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
} # ac_fn_c_check_header_compile
cat >config.log <<_ACEOF
@@ -2559,7 +2551,7 @@
running configure, to aid debugging if configure makes a mistake.
It was created by OpenJDK $as_me jdk8, which was
-generated by GNU Autoconf 2.68. Invocation command line was
+generated by GNU Autoconf 2.67. Invocation command line was
$ $0 $@
@@ -2817,7 +2809,7 @@
|| { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
done
@@ -3771,7 +3763,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_BASENAME+:} false; then :
+if test "${ac_cv_path_BASENAME+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $BASENAME in
@@ -3830,7 +3822,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_BASH+:} false; then :
+if test "${ac_cv_path_BASH+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $BASH in
@@ -3889,7 +3881,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CAT+:} false; then :
+if test "${ac_cv_path_CAT+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CAT in
@@ -3948,7 +3940,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CHMOD+:} false; then :
+if test "${ac_cv_path_CHMOD+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CHMOD in
@@ -4007,7 +3999,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CMP+:} false; then :
+if test "${ac_cv_path_CMP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CMP in
@@ -4066,7 +4058,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_COMM+:} false; then :
+if test "${ac_cv_path_COMM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $COMM in
@@ -4125,7 +4117,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CP+:} false; then :
+if test "${ac_cv_path_CP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CP in
@@ -4184,7 +4176,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CPIO+:} false; then :
+if test "${ac_cv_path_CPIO+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CPIO in
@@ -4243,7 +4235,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CUT+:} false; then :
+if test "${ac_cv_path_CUT+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CUT in
@@ -4302,7 +4294,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DATE+:} false; then :
+if test "${ac_cv_path_DATE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $DATE in
@@ -4361,7 +4353,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DIFF+:} false; then :
+if test "${ac_cv_path_DIFF+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $DIFF in
@@ -4420,7 +4412,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DIRNAME+:} false; then :
+if test "${ac_cv_path_DIRNAME+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $DIRNAME in
@@ -4479,7 +4471,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ECHO+:} false; then :
+if test "${ac_cv_path_ECHO+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $ECHO in
@@ -4538,7 +4530,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_EXPR+:} false; then :
+if test "${ac_cv_path_EXPR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $EXPR in
@@ -4597,7 +4589,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_FILE+:} false; then :
+if test "${ac_cv_path_FILE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $FILE in
@@ -4656,7 +4648,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_FIND+:} false; then :
+if test "${ac_cv_path_FIND+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $FIND in
@@ -4715,7 +4707,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_HEAD+:} false; then :
+if test "${ac_cv_path_HEAD+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $HEAD in
@@ -4774,7 +4766,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LN+:} false; then :
+if test "${ac_cv_path_LN+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $LN in
@@ -4833,7 +4825,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LS+:} false; then :
+if test "${ac_cv_path_LS+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $LS in
@@ -4892,7 +4884,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MKDIR+:} false; then :
+if test "${ac_cv_path_MKDIR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $MKDIR in
@@ -4951,7 +4943,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MKTEMP+:} false; then :
+if test "${ac_cv_path_MKTEMP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $MKTEMP in
@@ -5010,7 +5002,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MV+:} false; then :
+if test "${ac_cv_path_MV+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $MV in
@@ -5069,7 +5061,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PRINTF+:} false; then :
+if test "${ac_cv_path_PRINTF+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $PRINTF in
@@ -5128,7 +5120,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_THEPWDCMD+:} false; then :
+if test "${ac_cv_path_THEPWDCMD+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $THEPWDCMD in
@@ -5187,7 +5179,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_RM+:} false; then :
+if test "${ac_cv_path_RM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $RM in
@@ -5246,7 +5238,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SH+:} false; then :
+if test "${ac_cv_path_SH+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $SH in
@@ -5305,7 +5297,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SORT+:} false; then :
+if test "${ac_cv_path_SORT+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $SORT in
@@ -5364,7 +5356,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TAIL+:} false; then :
+if test "${ac_cv_path_TAIL+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TAIL in
@@ -5423,7 +5415,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TAR+:} false; then :
+if test "${ac_cv_path_TAR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TAR in
@@ -5482,7 +5474,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TEE+:} false; then :
+if test "${ac_cv_path_TEE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TEE in
@@ -5541,7 +5533,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TOUCH+:} false; then :
+if test "${ac_cv_path_TOUCH+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TOUCH in
@@ -5600,7 +5592,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TR+:} false; then :
+if test "${ac_cv_path_TR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TR in
@@ -5659,7 +5651,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_UNAME+:} false; then :
+if test "${ac_cv_path_UNAME+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $UNAME in
@@ -5718,7 +5710,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_UNIQ+:} false; then :
+if test "${ac_cv_path_UNIQ+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $UNIQ in
@@ -5777,7 +5769,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_WC+:} false; then :
+if test "${ac_cv_path_WC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $WC in
@@ -5836,7 +5828,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_WHICH+:} false; then :
+if test "${ac_cv_path_WHICH+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $WHICH in
@@ -5895,7 +5887,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_XARGS+:} false; then :
+if test "${ac_cv_path_XARGS+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $XARGS in
@@ -5955,7 +5947,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
+if test "${ac_cv_prog_AWK+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$AWK"; then
@@ -6005,7 +5997,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
+if test "${ac_cv_path_GREP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -z "$GREP"; then
@@ -6080,7 +6072,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
+if test "${ac_cv_path_EGREP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -6159,7 +6151,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; then :
+if test "${ac_cv_path_FGREP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -6238,7 +6230,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
+if test "${ac_cv_path_SED+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -6324,7 +6316,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_NAWK+:} false; then :
+if test "${ac_cv_path_NAWK+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $NAWK in
@@ -6384,7 +6376,7 @@
set dummy cygpath; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CYGPATH+:} false; then :
+if test "${ac_cv_path_CYGPATH+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CYGPATH in
@@ -6424,7 +6416,7 @@
set dummy readlink; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_READLINK+:} false; then :
+if test "${ac_cv_path_READLINK+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $READLINK in
@@ -6464,7 +6456,7 @@
set dummy df; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DF+:} false; then :
+if test "${ac_cv_path_DF+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $DF in
@@ -6504,7 +6496,7 @@
set dummy SetFile; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SETFILE+:} false; then :
+if test "${ac_cv_path_SETFILE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $SETFILE in
@@ -6550,7 +6542,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
+if test "${ac_cv_build+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_build_alias=$build_alias
@@ -6566,7 +6558,7 @@
$as_echo "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
esac
build=$ac_cv_build
ac_save_IFS=$IFS; IFS='-'
@@ -6584,7 +6576,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
+if test "${ac_cv_host+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test "x$host_alias" = x; then
@@ -6599,7 +6591,7 @@
$as_echo "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
esac
host=$ac_cv_host
ac_save_IFS=$IFS; IFS='-'
@@ -6617,7 +6609,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
+if test "${ac_cv_target+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test "x$target_alias" = x; then
@@ -6632,7 +6624,7 @@
$as_echo "$ac_cv_target" >&6; }
case $ac_cv_target in
*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;;
esac
target=$ac_cv_target
ac_save_IFS=$IFS; IFS='-'
@@ -8098,7 +8090,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PKGHANDLER+:} false; then :
+if test "${ac_cv_prog_PKGHANDLER+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$PKGHANDLER"; then
@@ -8463,7 +8455,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CHECK_GMAKE+:} false; then :
+if test "${ac_cv_path_CHECK_GMAKE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CHECK_GMAKE in
@@ -8817,7 +8809,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CHECK_MAKE+:} false; then :
+if test "${ac_cv_path_CHECK_MAKE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CHECK_MAKE in
@@ -9176,7 +9168,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CHECK_TOOLSDIR_GMAKE+:} false; then :
+if test "${ac_cv_path_CHECK_TOOLSDIR_GMAKE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CHECK_TOOLSDIR_GMAKE in
@@ -9529,7 +9521,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CHECK_TOOLSDIR_MAKE+:} false; then :
+if test "${ac_cv_path_CHECK_TOOLSDIR_MAKE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CHECK_TOOLSDIR_MAKE in
@@ -9925,7 +9917,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_UNZIP+:} false; then :
+if test "${ac_cv_path_UNZIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $UNZIP in
@@ -9984,7 +9976,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ZIP+:} false; then :
+if test "${ac_cv_path_ZIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $ZIP in
@@ -10043,7 +10035,7 @@
set dummy ldd; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LDD+:} false; then :
+if test "${ac_cv_path_LDD+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $LDD in
@@ -10089,7 +10081,7 @@
set dummy otool; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_OTOOL+:} false; then :
+if test "${ac_cv_path_OTOOL+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $OTOOL in
@@ -10134,7 +10126,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_READELF+:} false; then :
+if test "${ac_cv_path_READELF+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $READELF in
@@ -10177,7 +10169,7 @@
set dummy hg; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_HG+:} false; then :
+if test "${ac_cv_path_HG+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $HG in
@@ -10217,7 +10209,7 @@
set dummy stat; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_STAT+:} false; then :
+if test "${ac_cv_path_STAT+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $STAT in
@@ -10257,7 +10249,7 @@
set dummy time; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TIME+:} false; then :
+if test "${ac_cv_path_TIME+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TIME in
@@ -10302,7 +10294,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_COMM+:} false; then :
+if test "${ac_cv_path_COMM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $COMM in
@@ -10366,7 +10358,7 @@
set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $PKG_CONFIG in
@@ -10409,7 +10401,7 @@
set dummy pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $ac_pt_PKG_CONFIG in
@@ -10582,7 +10574,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_BDEPS_UNZIP+:} false; then :
+if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$BDEPS_UNZIP"; then
@@ -10628,7 +10620,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_BDEPS_FTP+:} false; then :
+if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$BDEPS_FTP"; then
@@ -11895,7 +11887,7 @@
set dummy javac; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_JAVAC_CHECK+:} false; then :
+if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $JAVAC_CHECK in
@@ -11935,7 +11927,7 @@
set dummy java; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_JAVA_CHECK+:} false; then :
+if test "${ac_cv_path_JAVA_CHECK+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $JAVA_CHECK in
@@ -16009,7 +16001,7 @@
set dummy link; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CYGWIN_LINK+:} false; then :
+if test "${ac_cv_path_CYGWIN_LINK+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CYGWIN_LINK in
@@ -16998,7 +16990,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_BUILD_CC+:} false; then :
+if test "${ac_cv_path_BUILD_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $BUILD_CC in
@@ -17309,7 +17301,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_BUILD_CXX+:} false; then :
+if test "${ac_cv_path_BUILD_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $BUILD_CXX in
@@ -17618,7 +17610,7 @@
set dummy ld; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_BUILD_LD+:} false; then :
+if test "${ac_cv_path_BUILD_LD+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $BUILD_LD in
@@ -18130,7 +18122,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TOOLS_DIR_CC+:} false; then :
+if test "${ac_cv_path_TOOLS_DIR_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TOOLS_DIR_CC in
@@ -18182,7 +18174,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_POTENTIAL_CC+:} false; then :
+if test "${ac_cv_path_POTENTIAL_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $POTENTIAL_CC in
@@ -18595,7 +18587,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PROPER_COMPILER_CC+:} false; then :
+if test "${ac_cv_prog_PROPER_COMPILER_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$PROPER_COMPILER_CC"; then
@@ -18639,7 +18631,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_PROPER_COMPILER_CC+:} false; then :
+if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_PROPER_COMPILER_CC"; then
@@ -19089,7 +19081,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if test "${ac_cv_prog_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
@@ -19133,7 +19125,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
@@ -19186,7 +19178,7 @@
test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -19301,7 +19293,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -19344,7 +19336,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
rm -f conftest conftest$ac_cv_exeext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -19403,7 +19395,7 @@
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
fi
fi
@@ -19414,7 +19406,7 @@
ac_clean_files=$ac_clean_files_save
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
+if test "${ac_cv_objext+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19455,7 +19447,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
@@ -19465,7 +19457,7 @@
ac_objext=$OBJEXT
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19502,7 +19494,7 @@
ac_save_CFLAGS=$CFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
+if test "${ac_cv_prog_cc_g+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_save_c_werror_flag=$ac_c_werror_flag
@@ -19580,7 +19572,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_cv_prog_cc_c89=no
@@ -19699,7 +19691,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_TOOLS_DIR_CXX+:} false; then :
+if test "${ac_cv_path_TOOLS_DIR_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $TOOLS_DIR_CXX in
@@ -19751,7 +19743,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_POTENTIAL_CXX+:} false; then :
+if test "${ac_cv_path_POTENTIAL_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $POTENTIAL_CXX in
@@ -20164,7 +20156,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PROPER_COMPILER_CXX+:} false; then :
+if test "${ac_cv_prog_PROPER_COMPILER_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$PROPER_COMPILER_CXX"; then
@@ -20208,7 +20200,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_PROPER_COMPILER_CXX+:} false; then :
+if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_PROPER_COMPILER_CXX"; then
@@ -20662,7 +20654,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
+if test "${ac_cv_prog_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CXX"; then
@@ -20706,7 +20698,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CXX"; then
@@ -20784,7 +20776,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20821,7 +20813,7 @@
ac_save_CXXFLAGS=$CXXFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -20919,7 +20911,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJC+:} false; then :
+if test "${ac_cv_prog_OBJC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OBJC"; then
@@ -20963,7 +20955,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJC+:} false; then :
+if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_OBJC"; then
@@ -21039,7 +21031,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5
$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; }
-if ${ac_cv_objc_compiler_gnu+:} false; then :
+if test "${ac_cv_objc_compiler_gnu+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21076,7 +21068,7 @@
ac_save_OBJCFLAGS=$OBJCFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5
$as_echo_n "checking whether $OBJC accepts -g... " >&6; }
-if ${ac_cv_prog_objc_g+:} false; then :
+if test "${ac_cv_prog_objc_g+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_save_objc_werror_flag=$ac_objc_werror_flag
@@ -21452,7 +21444,7 @@
set dummy ${ac_tool_prefix}ar; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
+if test "${ac_cv_prog_AR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$AR"; then
@@ -21492,7 +21484,7 @@
set dummy ar; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_AR"; then
@@ -21834,7 +21826,7 @@
set dummy link; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINLD+:} false; then :
+if test "${ac_cv_prog_WINLD+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$WINLD"; then
@@ -22173,7 +22165,7 @@
set dummy mt; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MT+:} false; then :
+if test "${ac_cv_prog_MT+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$MT"; then
@@ -22494,7 +22486,7 @@
set dummy rc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RC+:} false; then :
+if test "${ac_cv_prog_RC+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$RC"; then
@@ -22885,7 +22877,7 @@
set dummy lib; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINAR+:} false; then :
+if test "${ac_cv_prog_WINAR+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$WINAR"; then
@@ -23191,7 +23183,7 @@
set dummy dumpbin; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; then :
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$DUMPBIN"; then
@@ -23510,7 +23502,7 @@
CPP=
fi
if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
+ if test "${ac_cv_prog_CPP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
# Double quotes because CPP needs to be expanded
@@ -23626,7 +23618,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
ac_ext=cpp
@@ -23910,7 +23902,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
if test -z "$CXXCPP"; then
- if ${ac_cv_prog_CXXCPP+:} false; then :
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
# Double quotes because CXXCPP needs to be expanded
@@ -24026,7 +24018,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
ac_ext=cpp
@@ -24328,7 +24320,7 @@
set dummy as; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_AS+:} false; then :
+if test "${ac_cv_path_AS+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $AS in
@@ -24642,7 +24634,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_NM+:} false; then :
+if test "${ac_cv_path_NM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $NM in
@@ -24951,7 +24943,7 @@
set dummy strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_STRIP+:} false; then :
+if test "${ac_cv_path_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $STRIP in
@@ -25257,7 +25249,7 @@
set dummy mcs; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MCS+:} false; then :
+if test "${ac_cv_path_MCS+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $MCS in
@@ -25565,7 +25557,7 @@
set dummy ${ac_tool_prefix}nm; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NM+:} false; then :
+if test "${ac_cv_prog_NM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$NM"; then
@@ -25605,7 +25597,7 @@
set dummy nm; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NM+:} false; then :
+if test "${ac_cv_prog_ac_ct_NM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_NM"; then
@@ -25923,7 +25915,7 @@
set dummy ${ac_tool_prefix}strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
+if test "${ac_cv_prog_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$STRIP"; then
@@ -25963,7 +25955,7 @@
set dummy strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
@@ -26288,7 +26280,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJCOPY+:} false; then :
+if test "${ac_cv_prog_OBJCOPY+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OBJCOPY"; then
@@ -26332,7 +26324,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then :
+if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_OBJCOPY"; then
@@ -26659,7 +26651,7 @@
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OBJDUMP"; then
@@ -26703,7 +26695,7 @@
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_OBJDUMP"; then
@@ -27027,7 +27019,7 @@
set dummy lipo; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LIPO+:} false; then :
+if test "${ac_cv_path_LIPO+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $LIPO in
@@ -27342,7 +27334,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
+if test "${ac_cv_header_stdc+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -27518,7 +27510,7 @@
for ac_header in stdio.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdio_h" = xyes; then :
+if test "x$ac_cv_header_stdio_h" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_STDIO_H 1
_ACEOF
@@ -27547,7 +27539,7 @@
# This bug is HP SR number 8606223364.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5
$as_echo_n "checking size of int *... " >&6; }
-if ${ac_cv_sizeof_int_p+:} false; then :
+if test "${ac_cv_sizeof_int_p+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then :
@@ -27557,7 +27549,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (int *)
-See \`config.log' for more details" "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5 ; }
else
ac_cv_sizeof_int_p=0
fi
@@ -27604,7 +27596,7 @@
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
+if test "${ac_cv_c_bigendian+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_cv_c_bigendian=unknown
@@ -28258,10 +28250,17 @@
fi
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE"
- # Adding these macros will make it an error to link to mac APIs newer than OS version 10.7
- MACOSX_REQUIRED_VERSION=1070
-
- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(MACOSX_REQUIRED_VERSION) -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(MACOSX_REQUIRED_VERSION)"
+ # Setting these parameters makes it an error to link to macosx APIs that are
+ # newer than the given OS version and makes the linked binaries compatible even
+ # if built on a newer version of the OS.
+ # The expected format is X.Y.Z
+ MACOSX_VERSION_MIN=10.7.0
+
+ # The macro takes the version with no dots, ex: 1070
+ # Let the flags variables get resolved in make for easier override on make
+ # command line.
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
+ LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
fi
if test "x$OPENJDK_TARGET_OS" = xbsd; then
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE"
@@ -28608,8 +28607,8 @@
have_x=disabled
else
case $x_includes,$x_libraries in #(
- *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
- *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
+ *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #(
+ *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
$as_echo_n "(cached) " >&6
else
# One or both of the vars are not set, and there is no cached value.
@@ -28886,7 +28885,7 @@
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -28920,14 +28919,14 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
fi
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -28961,7 +28960,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
fi
@@ -28980,14 +28979,14 @@
# The functions gethostbyname, getservbyname, and inet_addr are
# in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
fi
if test $ac_cv_func_gethostbyname = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -29021,14 +29020,14 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
fi
if test $ac_cv_lib_nsl_gethostbyname = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -29062,7 +29061,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
fi
@@ -29077,14 +29076,14 @@
# must be given before -lnsl if both are needed. We assume that
# if connect needs -lnsl, so does gethostbyname.
ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
+if test "x$ac_cv_func_connect" = x""yes; then :
fi
if test $ac_cv_func_connect = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
$as_echo_n "checking for connect in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_connect+:} false; then :
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -29118,7 +29117,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
$as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = xyes; then :
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
fi
@@ -29126,14 +29125,14 @@
# Guillermo Gomez says -lposix is necessary on A/UX.
ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove"
-if test "x$ac_cv_func_remove" = xyes; then :
+if test "x$ac_cv_func_remove" = x""yes; then :
fi
if test $ac_cv_func_remove = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
$as_echo_n "checking for remove in -lposix... " >&6; }
-if ${ac_cv_lib_posix_remove+:} false; then :
+if test "${ac_cv_lib_posix_remove+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -29167,7 +29166,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
$as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = xyes; then :
+if test "x$ac_cv_lib_posix_remove" = x""yes; then :
X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
fi
@@ -29175,14 +29174,14 @@
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
-if test "x$ac_cv_func_shmat" = xyes; then :
+if test "x$ac_cv_func_shmat" = x""yes; then :
fi
if test $ac_cv_func_shmat = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
$as_echo_n "checking for shmat in -lipc... " >&6; }
-if ${ac_cv_lib_ipc_shmat+:} false; then :
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -29216,7 +29215,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
fi
@@ -29234,7 +29233,7 @@
# John Interrante, Karl Berry
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -29268,7 +29267,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
fi
@@ -30281,7 +30280,7 @@
LDFLAGS="$FREETYPE2_LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FT_Init_FreeType in -lfreetype" >&5
$as_echo_n "checking for FT_Init_FreeType in -lfreetype... " >&6; }
-if ${ac_cv_lib_freetype_FT_Init_FreeType+:} false; then :
+if test "${ac_cv_lib_freetype_FT_Init_FreeType+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -30315,7 +30314,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_freetype_FT_Init_FreeType" >&5
$as_echo "$ac_cv_lib_freetype_FT_Init_FreeType" >&6; }
-if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = xyes; then :
+if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = x""yes; then :
FREETYPE2_FOUND=true
else
as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5
@@ -30603,7 +30602,7 @@
for ac_header in alsa/asoundlib.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_alsa_asoundlib_h" = xyes; then :
+if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_ALSA_ASOUNDLIB_H 1
_ACEOF
@@ -30662,7 +30661,7 @@
USE_EXTERNAL_LIBJPEG=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5
$as_echo_n "checking for main in -ljpeg... " >&6; }
-if ${ac_cv_lib_jpeg_main+:} false; then :
+if test "${ac_cv_lib_jpeg_main+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -30690,7 +30689,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5
$as_echo "$ac_cv_lib_jpeg_main" >&6; }
-if test "x$ac_cv_lib_jpeg_main" = xyes; then :
+if test "x$ac_cv_lib_jpeg_main" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBJPEG 1
_ACEOF
@@ -30714,7 +30713,7 @@
USE_EXTERNAL_LIBJPEG=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5
$as_echo_n "checking for main in -lgif... " >&6; }
-if ${ac_cv_lib_gif_main+:} false; then :
+if test "${ac_cv_lib_gif_main+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -30742,7 +30741,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5
$as_echo "$ac_cv_lib_gif_main" >&6; }
-if test "x$ac_cv_lib_gif_main" = xyes; then :
+if test "x$ac_cv_lib_gif_main" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBGIF 1
_ACEOF
@@ -30772,7 +30771,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5
$as_echo_n "checking for compress in -lz... " >&6; }
-if ${ac_cv_lib_z_compress+:} false; then :
+if test "${ac_cv_lib_z_compress+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -30806,7 +30805,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5
$as_echo "$ac_cv_lib_z_compress" >&6; }
-if test "x$ac_cv_lib_z_compress" = xyes; then :
+if test "x$ac_cv_lib_z_compress" = x""yes; then :
ZLIB_FOUND=yes
else
ZLIB_FOUND=no
@@ -30899,7 +30898,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
$as_echo_n "checking for cos in -lm... " >&6; }
-if ${ac_cv_lib_m_cos+:} false; then :
+if test "${ac_cv_lib_m_cos+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -30933,7 +30932,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
$as_echo "$ac_cv_lib_m_cos" >&6; }
-if test "x$ac_cv_lib_m_cos" = xyes; then :
+if test "x$ac_cv_lib_m_cos" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBM 1
_ACEOF
@@ -30957,7 +30956,7 @@
LIBS=""
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -30991,7 +30990,7 @@
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBDL 1
_ACEOF
@@ -31635,7 +31634,7 @@
set dummy ccache; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_CCACHE+:} false; then :
+if test "${ac_cv_path_CCACHE+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $CCACHE in
@@ -31896,21 +31895,10 @@
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
+ test "x$cache_file" != "x/dev/null" &&
{ $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
+ cat confcache >$cache_file
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -31942,7 +31930,7 @@
-: "${CONFIG_STATUS=./config.status}"
+: ${CONFIG_STATUS=./config.status}
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -32043,7 +32031,6 @@
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -32351,7 +32338,7 @@
# values after options handling.
ac_log="
This file was extended by OpenJDK $as_me jdk8, which was
-generated by GNU Autoconf 2.68. Invocation command line was
+generated by GNU Autoconf 2.67. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -32414,7 +32401,7 @@
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
OpenJDK config.status jdk8
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.67,
with options \\"\$ac_cs_config\\"
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -32543,7 +32530,7 @@
"$OUTPUT_ROOT/spec.sh") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" ;;
"$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;;
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
esac
done
@@ -32565,10 +32552,9 @@
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- tmp= ac_tmp=
+ tmp=
trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
' 0
trap 'as_fn_exit 1' 1 2 13 15
}
@@ -32576,13 +32562,12 @@
{
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
+ test -n "$tmp" && test -d "$tmp"
} ||
{
tmp=./conf$$-$RANDOM
(umask 077 && mkdir "$tmp")
} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
@@ -32604,7 +32589,7 @@
ac_cs_awk_cr=$ac_cr
fi
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
_ACEOF
@@ -32632,7 +32617,7 @@
rm -f conf$$subs.sh
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
_ACEOF
sed -n '
h
@@ -32680,7 +32665,7 @@
rm -f conf$$subs.awk
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
for (key in S) S_is_set[key] = 1
FS = ""
@@ -32712,7 +32697,7 @@
sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
else
cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
|| as_fn_error $? "could not setup config files machinery" "$LINENO" 5
_ACEOF
@@ -32746,7 +32731,7 @@
# No need to generate them if there are no CONFIG_HEADERS.
# This happens for instance with `./config.status Makefile'.
if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+cat >"$tmp/defines.awk" <<\_ACAWK ||
BEGIN {
_ACEOF
@@ -32758,8 +32743,8 @@
# handling of long lines.
ac_delim='%!_!# '
for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
break
elif $ac_last_try; then
as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -32860,7 +32845,7 @@
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
@@ -32879,7 +32864,7 @@
for ac_f
do
case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
+ -) ac_f="$tmp/stdin";;
*) # Look for the file first in the build tree, then in the source tree
# (if the path is not absolute). The absolute path cannot be DOS-style,
# because $ac_f cannot contain `:'.
@@ -32888,7 +32873,7 @@
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
esac
case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
@@ -32914,8 +32899,8 @@
esac
case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac
@@ -33040,22 +33025,21 @@
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
$ac_datarootdir_hack
"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
- rm -f "$ac_tmp/stdin"
+ rm -f "$tmp/stdin"
case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
esac \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
;;
@@ -33066,20 +33050,20 @@
if test x"$ac_file" != x-; then
{
$as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
$as_echo "$as_me: $ac_file is unchanged" >&6;}
else
rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
+ mv "$tmp/config.h" "$ac_file" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
fi
else
$as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
|| as_fn_error $? "could not create -" "$LINENO" 5
fi
;;
--- a/common/autoconf/spec.gmk.in Tue Feb 26 09:25:44 2013 -0800
+++ b/common/autoconf/spec.gmk.in Tue Mar 05 11:46:02 2013 -0800
@@ -286,7 +286,7 @@
OPENWIN_HOME:=@OPENWIN_HOME@
# The lowest required version of macosx to enforce compatiblity for
-MACOSX_REQUIRED_VERSION=@MACOSX_REQUIRED_VERSION@
+MACOSX_VERSION_MIN=@MACOSX_VERSION_MIN@
# There are two types: CC or CL
# CC is gcc and others behaving reasonably similar.
--- a/common/autoconf/toolchain.m4 Tue Feb 26 09:25:44 2013 -0800
+++ b/common/autoconf/toolchain.m4 Tue Mar 05 11:46:02 2013 -0800
@@ -876,10 +876,17 @@
fi
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE"
- # Adding these macros will make it an error to link to mac APIs newer than OS version 10.7
- MACOSX_REQUIRED_VERSION=1070
- AC_SUBST(MACOSX_REQUIRED_VERSION)
- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(MACOSX_REQUIRED_VERSION) -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(MACOSX_REQUIRED_VERSION)"
+ # Setting these parameters makes it an error to link to macosx APIs that are
+ # newer than the given OS version and makes the linked binaries compatible even
+ # if built on a newer version of the OS.
+ # The expected format is X.Y.Z
+ MACOSX_VERSION_MIN=10.7.0
+ AC_SUBST(MACOSX_VERSION_MIN)
+ # The macro takes the version with no dots, ex: 1070
+ # Let the flags variables get resolved in make for easier override on make
+ # command line.
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
+ LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
fi
if test "x$OPENJDK_TARGET_OS" = xbsd; then
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE"
--- a/corba/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/corba/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,4 @@
d4e68ce17795601017ac2f952baad7272942c36e jdk8-b75
58be6ca3c0603882a1ec478724e337aac85e0da0 jdk8-b76
35684a40c5845782324dbcc9ac8969528020ff61 jdk8-b77
+27d6368ae8ba570c31c2f0e696d39c99fa2f4538 jdk8-b78
--- a/hotspot/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -316,3 +316,5 @@
412d722168bc23f8e6d98995202728678561417f hs25-b18
cdb46031e7184d37301288f5719121a63c7054b5 jdk8-b77
9f19f4a7d48a4ebe7f616b6068971ea5f8b075fa hs25-b19
+d5e12e7d2f719144d84903d9151455661c47b476 jdk8-b78
+555ec35a250783110aa070dbc8a8603f6cabe41f hs25-b20
--- a/hotspot/agent/src/os/bsd/MacosxDebuggerLocal.m Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/bsd/MacosxDebuggerLocal.m Tue Mar 05 11:46:02 2013 -0800
@@ -38,6 +38,8 @@
#import <dlfcn.h>
#import <limits.h>
#import <errno.h>
+#import <sys/types.h>
+#import <sys/ptrace.h>
jboolean debug = JNI_FALSE;
@@ -430,6 +432,73 @@
return (jint) usable_tid;
}
+
+static bool ptrace_continue(pid_t pid, int signal) {
+ // pass the signal to the process so we don't swallow it
+ int res;
+ if ((res = ptrace(PT_CONTINUE, pid, (caddr_t)1, signal)) < 0) {
+ fprintf(stderr, "attach: ptrace(PT_CONTINUE, %d) failed with %d\n", pid, res);
+ return false;
+ }
+ return true;
+}
+
+// waits until the ATTACH has stopped the process
+// by signal SIGSTOP
+static bool ptrace_waitpid(pid_t pid) {
+ int ret;
+ int status;
+ while (true) {
+ // Wait for debuggee to stop.
+ ret = waitpid(pid, &status, 0);
+ if (ret >= 0) {
+ if (WIFSTOPPED(status)) {
+ // Any signal will stop the thread, make sure it is SIGSTOP. Otherwise SIGSTOP
+ // will still be pending and delivered when the process is DETACHED and the process
+ // will go to sleep.
+ if (WSTOPSIG(status) == SIGSTOP) {
+ // Debuggee stopped by SIGSTOP.
+ return true;
+ }
+ if (!ptrace_continue(pid, WSTOPSIG(status))) {
+ fprintf(stderr, "attach: Failed to correctly attach to VM. VM might HANG! [PTRACE_CONT failed, stopped by %d]\n", WSTOPSIG(status));
+ return false;
+ }
+ } else {
+ fprintf(stderr, "attach: waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
+ return false;
+ }
+ } else {
+ switch (errno) {
+ case EINTR:
+ continue;
+ break;
+ case ECHILD:
+ fprintf(stderr, "attach: waitpid() failed. Child process pid (%d) does not exist \n", pid);
+ break;
+ case EINVAL:
+ fprintf(stderr, "attach: waitpid() failed. Invalid options argument.\n");
+ break;
+ default:
+ fprintf(stderr, "attach: waitpid() failed. Unexpected error %d\n",errno);
+ break;
+ }
+ return false;
+ }
+ }
+}
+
+// attach to a process/thread specified by "pid"
+static bool ptrace_attach(pid_t pid) {
+ int res;
+ if ((res = ptrace(PT_ATTACH, pid, 0, 0)) < 0) {
+ fprintf(stderr, "ptrace(PT_ATTACH, %d) failed with %d\n", pid, res);
+ return false;
+ } else {
+ return ptrace_waitpid(pid);
+ }
+}
+
/*
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
* Method: attach0
@@ -445,7 +514,8 @@
else
debug = JNI_FALSE;
if (debug) printf("attach0 called for jpid=%d\n", (int)jpid);
-
+
+ // get the task from the pid
kern_return_t result;
task_t gTask = 0;
result = task_for_pid(mach_task_self(), jpid, &gTask);
@@ -455,6 +525,13 @@
}
putTask(env, this_obj, gTask);
+ // use ptrace to stop the process
+ // on os x, ptrace only needs to be called on the process, not the individual threads
+ if (ptrace_attach(jpid) != true) {
+ mach_port_deallocate(mach_task_self(), gTask);
+ THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the process");
+ }
+
id symbolicator = nil;
id jrsSymbolicator = objc_lookUpClass("JRSSymbolicator");
if (jrsSymbolicator != nil) {
@@ -486,6 +563,21 @@
if (debug) printf("detach0 called\n");
task_t gTask = getTask(env, this_obj);
+
+ // detach from the ptraced process causing it to resume execution
+ int pid;
+ kern_return_t k_res;
+ k_res = pid_for_task(gTask, &pid);
+ if (k_res != KERN_SUCCESS) {
+ fprintf(stderr, "detach: pid_for_task(%d) failed (%d)\n", pid, k_res);
+ }
+ else {
+ int res = ptrace(PT_DETACH, pid, 0, 0);
+ if (res < 0) {
+ fprintf(stderr, "detach: ptrace(PT_DETACH, %d) failed (%d)\n", pid, res);
+ }
+ }
+
mach_port_deallocate(mach_task_self(), gTask);
id symbolicator = getSymbolicator(env, this_obj);
if (symbolicator != nil) {
--- a/hotspot/agent/src/os/bsd/libproc_impl.c Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/bsd/libproc_impl.c Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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
@@ -91,6 +91,14 @@
}
}
+void print_error(const char* format,...) {
+ va_list alist;
+ va_start(alist, format);
+ fputs("ERROR: ", stderr);
+ vfprintf(stderr, format, alist);
+ va_end(alist);
+}
+
bool is_debug() {
return _libsaproc_debug;
}
--- a/hotspot/agent/src/os/bsd/libproc_impl.h Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/bsd/libproc_impl.h Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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
@@ -107,6 +107,7 @@
int pathmap_open(const char* name);
void print_debug(const char* format,...);
+void print_error(const char* format,...);
bool is_debug();
typedef bool (*thread_info_callback)(struct ps_prochandle* ph, pthread_t pid, lwpid_t lwpid);
--- a/hotspot/agent/src/os/bsd/ps_proc.c Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/bsd/ps_proc.c Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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
@@ -129,42 +129,66 @@
return (errno == 0)? true: false;
}
+static bool ptrace_continue(pid_t pid, int signal) {
+ // pass the signal to the process so we don't swallow it
+ if (ptrace(PTRACE_CONT, pid, NULL, signal) < 0) {
+ print_debug("ptrace(PTRACE_CONT, ..) failed for %d\n", pid);
+ return false;
+ }
+ return true;
+}
+
+// waits until the ATTACH has stopped the process
+// by signal SIGSTOP
+static bool ptrace_waitpid(pid_t pid) {
+ int ret;
+ int status;
+ do {
+ // Wait for debuggee to stop.
+ ret = waitpid(pid, &status, 0);
+ if (ret >= 0) {
+ if (WIFSTOPPED(status)) {
+ // Any signal will stop the thread, make sure it is SIGSTOP. Otherwise SIGSTOP
+ // will still be pending and delivered when the process is DETACHED and the process
+ // will go to sleep.
+ if (WSTOPSIG(status) == SIGSTOP) {
+ // Debuggee stopped by SIGSTOP.
+ return true;
+ }
+ if (!ptrace_continue(pid, WSTOPSIG(status))) {
+ print_error("Failed to correctly attach to VM. VM might HANG! [PTRACE_CONT failed, stopped by %d]\n", WSTOPSIG(status));
+ return false;
+ }
+ } else {
+ print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
+ return false;
+ }
+ } else {
+ switch (errno) {
+ case EINTR:
+ continue;
+ break;
+ case ECHILD:
+ print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
+ break;
+ case EINVAL:
+ print_debug("waitpid() failed. Invalid options argument.\n");
+ break;
+ default:
+ print_debug("waitpid() failed. Unexpected error %d\n",errno);
+ }
+ return false;
+ }
+ } while(true);
+}
+
// attach to a process/thread specified by "pid"
static bool ptrace_attach(pid_t pid) {
if (ptrace(PT_ATTACH, pid, NULL, 0) < 0) {
print_debug("ptrace(PTRACE_ATTACH, ..) failed for %d\n", pid);
return false;
} else {
- int ret;
- int status;
- do {
- // Wait for debuggee to stop.
- ret = waitpid(pid, &status, 0);
- if (ret >= 0) {
- if (WIFSTOPPED(status)) {
- // Debuggee stopped.
- return true;
- } else {
- print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
- return false;
- }
- } else {
- switch (errno) {
- case EINTR:
- continue;
- break;
- case ECHILD:
- print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
- break;
- case EINVAL:
- print_debug("waitpid() failed. Invalid options argument.\n");
- break;
- default:
- print_debug("waitpid() failed. Unexpected error %d\n",errno);
- }
- return false;
- }
- } while(true);
+ return ptrace_waitpid(pid);
}
}
--- a/hotspot/agent/src/os/linux/libproc_impl.c Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/linux/libproc_impl.c Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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
@@ -92,6 +92,14 @@
}
}
+void print_error(const char* format,...) {
+ va_list alist;
+ va_start(alist, format);
+ fputs("ERROR: ", stderr);
+ vfprintf(stderr, format, alist);
+ va_end(alist);
+}
+
bool is_debug() {
return _libsaproc_debug;
}
--- a/hotspot/agent/src/os/linux/libproc_impl.h Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/linux/libproc_impl.h Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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
@@ -105,6 +105,7 @@
int pathmap_open(const char* name);
void print_debug(const char* format,...);
+void print_error(const char* format,...);
bool is_debug();
typedef bool (*thread_info_callback)(struct ps_prochandle* ph, pthread_t pid, lwpid_t lwpid);
--- a/hotspot/agent/src/os/linux/ps_proc.c Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/os/linux/ps_proc.c Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <signal.h>
#include <errno.h>
#include <sys/ptrace.h>
#include "libproc_impl.h"
@@ -142,46 +143,71 @@
}
+static bool ptrace_continue(pid_t pid, int signal) {
+ // pass the signal to the process so we don't swallow it
+ if (ptrace(PTRACE_CONT, pid, NULL, signal) < 0) {
+ print_debug("ptrace(PTRACE_CONT, ..) failed for %d\n", pid);
+ return false;
+ }
+ return true;
+}
+
+// waits until the ATTACH has stopped the process
+// by signal SIGSTOP
+static bool ptrace_waitpid(pid_t pid) {
+ int ret;
+ int status;
+ while (true) {
+ // Wait for debuggee to stop.
+ ret = waitpid(pid, &status, 0);
+ if (ret == -1 && errno == ECHILD) {
+ // try cloned process.
+ ret = waitpid(pid, &status, __WALL);
+ }
+ if (ret >= 0) {
+ if (WIFSTOPPED(status)) {
+ // Any signal will stop the thread, make sure it is SIGSTOP. Otherwise SIGSTOP
+ // will still be pending and delivered when the process is DETACHED and the process
+ // will go to sleep.
+ if (WSTOPSIG(status) == SIGSTOP) {
+ // Debuggee stopped by SIGSTOP.
+ return true;
+ }
+ if (!ptrace_continue(pid, WSTOPSIG(status))) {
+ print_error("Failed to correctly attach to VM. VM might HANG! [PTRACE_CONT failed, stopped by %d]\n", WSTOPSIG(status));
+ return false;
+ }
+ } else {
+ print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
+ return false;
+ }
+ } else {
+ switch (errno) {
+ case EINTR:
+ continue;
+ break;
+ case ECHILD:
+ print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
+ break;
+ case EINVAL:
+ print_debug("waitpid() failed. Invalid options argument.\n");
+ break;
+ default:
+ print_debug("waitpid() failed. Unexpected error %d\n",errno);
+ break;
+ }
+ return false;
+ }
+ }
+}
+
// attach to a process/thread specified by "pid"
static bool ptrace_attach(pid_t pid) {
if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) < 0) {
print_debug("ptrace(PTRACE_ATTACH, ..) failed for %d\n", pid);
return false;
} else {
- int ret;
- int status;
- do {
- // Wait for debuggee to stop.
- ret = waitpid(pid, &status, 0);
- if (ret == -1 && errno == ECHILD) {
- // try cloned process.
- ret = waitpid(pid, &status, __WALL);
- }
- if (ret >= 0) {
- if (WIFSTOPPED(status)) {
- // Debuggee stopped.
- return true;
- } else {
- print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
- return false;
- }
- } else {
- switch (errno) {
- case EINTR:
- continue;
- break;
- case ECHILD:
- print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
- break;
- case EINVAL:
- print_debug("waitpid() failed. Invalid options argument.\n");
- break;
- default:
- print_debug("waitpid() failed. Unexpected error %d\n",errno);
- }
- return false;
- }
- } while(true);
+ return ptrace_waitpid(pid);
}
}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSCollector.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSCollector.java Tue Mar 05 11:46:02 2013 -0800
@@ -61,15 +61,13 @@
CMSBitMap markBitMap = markBitMap();
long addressSize = VM.getVM().getAddressSize();
if ( markBitMap.isMarked(addr) && markBitMap.isMarked(addr.addOffsetTo(1*addressSize)) ) {
- System.err.println("Printezis bits are set...");
Address nextOneAddr = markBitMap.getNextMarkedWordAddress(addr.addOffsetTo(2*addressSize));
//return size in bytes
long size = (nextOneAddr.addOffsetTo(1*addressSize)).minus(addr);
return size;
} else {
- //missing Printezis marks
- System.err.println("Missing Printszis marks...");
- return -1;
+ //missing Printezis marks
+ return -1;
}
}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java Tue Mar 05 11:46:02 2013 -0800
@@ -191,7 +191,6 @@
//Find the object size using Printezis bits and skip over
long size = collector().blockSizeUsingPrintezisBits(cur);
if (size == -1) {
- System.err.println("Printezis bits not set...");
break;
}
cur = cur.addOffsetTo(adjustObjectSizeInBytes(size));
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/MethodData.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/MethodData.java Tue Mar 05 11:46:02 2013 -0800
@@ -184,7 +184,6 @@
if (trapReasonName[index] == null) {
throw new InternalError("missing reason for " + index);
}
- System.out.println(trapReasonName[index]);
}
}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Tue Mar 05 11:46:02 2013 -0800
@@ -335,7 +335,6 @@
}
if (obj == null) {
//Find the object size using Printezis bits and skip over
- System.err.println("Finding object size using Printezis bits and skipping over...");
long size = 0;
if ( (cmsSpaceOld != null) && cmsSpaceOld.contains(handle) ){
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Tue Mar 05 11:46:02 2013 -0800
@@ -90,10 +90,6 @@
/** Flags indicating whether we are attached to a core, C1, or C2 build */
private boolean usingClientCompiler;
private boolean usingServerCompiler;
- /** Flag indicating whether UseTLAB is turned on */
- private boolean useTLAB;
- /** Flag indicating whether invokedynamic support is on */
- private boolean enableInvokeDynamic;
/** alignment constants */
private boolean isLP64;
private int bytesPerLong;
@@ -326,9 +322,6 @@
}
}
- useTLAB = (db.lookupIntConstant("UseTLAB").intValue() != 0);
- enableInvokeDynamic = (db.lookupIntConstant("EnableInvokeDynamic").intValue() != 0);
-
if (debugger != null) {
isLP64 = debugger.getMachineDescription().isLP64();
}
@@ -579,15 +572,6 @@
}
}
- /** Indicates whether Thread-Local Allocation Buffers are used */
- public boolean getUseTLAB() {
- return useTLAB;
- }
-
- public boolean getEnableInvokeDynamic() {
- return enableInvokeDynamic;
- }
-
public TypeDataBase getTypeDataBase() {
return db;
}
@@ -822,6 +806,12 @@
return objectAlignmentInBytes;
}
+ /** Indicates whether Thread-Local Allocation Buffers are used */
+ public boolean getUseTLAB() {
+ Flag flag = getCommandLineFlag("UseTLAB");
+ return (flag == null) ? false: flag.getBool();
+ }
+
// returns null, if not available.
public Flag[] getCommandLineFlags() {
if (commandLineFlags == null) {
--- a/hotspot/make/bsd/makefiles/vm.make Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/make/bsd/makefiles/vm.make Tue Mar 05 11:46:02 2013 -0800
@@ -94,7 +94,12 @@
# This is VERY important! The version define must only be supplied to vm_version.o
# If not, ccache will not re-use the cache at all, since the version string might contain
# a time and date.
-vm_version.o: CXXFLAGS += ${JRE_VERSION}
+CXXFLAGS/vm_version.o += ${JRE_VERSION}
+
+CXXFLAGS/BYFILE = $(CXXFLAGS/$@)
+
+# File specific flags
+CXXFLAGS += $(CXXFLAGS/BYFILE)
ifdef DEFAULT_LIBPATH
CXXFLAGS += -DDEFAULT_LIBPATH="\"$(DEFAULT_LIBPATH)\""
--- a/hotspot/make/excludeSrc.make Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/make/excludeSrc.make Tue Mar 05 11:46:02 2013 -0800
@@ -78,7 +78,7 @@
Src_Files_EXCLUDE += \
cmsAdaptiveSizePolicy.cpp cmsCollectorPolicy.cpp \
- cmsGCAdaptivePolicyCounters.cpp cmsLockVerifier.cpp cmsPermGen.cpp compactibleFreeListSpace.cpp \
+ cmsGCAdaptivePolicyCounters.cpp cmsLockVerifier.cpp compactibleFreeListSpace.cpp \
concurrentMarkSweepGeneration.cpp concurrentMarkSweepThread.cpp \
freeChunk.cpp adaptiveFreeList.cpp promotionInfo.cpp vmCMSOperations.cpp collectionSetChooser.cpp \
concurrentG1Refine.cpp concurrentG1RefineThread.cpp concurrentMark.cpp concurrentMarkThread.cpp \
@@ -91,11 +91,11 @@
gcTaskManager.cpp gcTaskThread.cpp objectStartArray.cpp parallelScavengeHeap.cpp parMarkBitMap.cpp \
pcTasks.cpp psAdaptiveSizePolicy.cpp psCompactionManager.cpp psGCAdaptivePolicyCounters.cpp \
psGenerationCounters.cpp psMarkSweep.cpp psMarkSweepDecorator.cpp psOldGen.cpp psParallelCompact.cpp \
- psPermGen.cpp psPromotionLAB.cpp psPromotionManager.cpp psScavenge.cpp psTasks.cpp psVirtualspace.cpp \
+ psPromotionLAB.cpp psPromotionManager.cpp psScavenge.cpp psTasks.cpp psVirtualspace.cpp \
psYoungGen.cpp vmPSOperations.cpp asParNewGeneration.cpp parCardTableModRefBS.cpp \
parGCAllocBuffer.cpp parNewGeneration.cpp mutableSpace.cpp gSpaceCounters.cpp allocationStats.cpp \
spaceCounters.cpp gcAdaptivePolicyCounters.cpp mutableNUMASpace.cpp immutableSpace.cpp \
- immutableSpace.cpp g1MemoryPool.cpp psMemoryPool.cpp yieldWorkingGroup.cpp g1Log.cpp
+ immutableSpace.cpp g1MemoryPool.cpp psMemoryPool.cpp yieldingWorkGroup.cpp g1Log.cpp
endif
ifeq ($(INCLUDE_NMT), false)
--- a/hotspot/make/hotspot_version Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/make/hotspot_version Tue Mar 05 11:46:02 2013 -0800
@@ -35,7 +35,7 @@
HS_MAJOR_VER=25
HS_MINOR_VER=0
-HS_BUILD_NUMBER=19
+HS_BUILD_NUMBER=20
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
--- a/hotspot/make/linux/makefiles/vm.make Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/make/linux/makefiles/vm.make Tue Mar 05 11:46:02 2013 -0800
@@ -100,7 +100,13 @@
# This is VERY important! The version define must only be supplied to vm_version.o
# If not, ccache will not re-use the cache at all, since the version string might contain
# a time and date.
-vm_version.o: CXXFLAGS += ${JRE_VERSION}
+CXXFLAGS/vm_version.o += ${JRE_VERSION}
+
+CXXFLAGS/BYFILE = $(CXXFLAGS/$@)
+
+# File specific flags
+CXXFLAGS += $(CXXFLAGS/BYFILE)
+
ifndef JAVASE_EMBEDDED
ifneq (${ARCH},arm)
--- a/hotspot/make/solaris/makefiles/vm.make Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/make/solaris/makefiles/vm.make Tue Mar 05 11:46:02 2013 -0800
@@ -88,7 +88,13 @@
# This is VERY important! The version define must only be supplied to vm_version.o
# If not, ccache will not re-use the cache at all, since the version string might contain
# a time and date.
-vm_version.o: CXXFLAGS += ${JRE_VERSION}
+CXXFLAGS/vm_version.o += ${JRE_VERSION}
+
+CXXFLAGS/BYFILE = $(CXXFLAGS/$@)
+
+# File specific flags
+CXXFLAGS += $(CXXFLAGS/BYFILE)
+
# CFLAGS_WARN holds compiler options to suppress/enable warnings.
CFLAGS += $(CFLAGS_WARN)
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -2887,7 +2887,9 @@
void signalHandler(int sig, siginfo_t* info, void* uc) {
assert(info != NULL && uc != NULL, "it must be old kernel");
+ int orig_errno = errno; // Preserve errno value over signal handler.
JVM_handle_bsd_signal(sig, info, uc, true);
+ errno = orig_errno;
}
--- a/hotspot/src/os/linux/vm/os_linux.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -3653,7 +3653,9 @@
void signalHandler(int sig, siginfo_t* info, void* uc) {
assert(info != NULL && uc != NULL, "it must be old kernel");
+ int orig_errno = errno; // Preserve errno value over signal handler.
JVM_handle_linux_signal(sig, info, uc, true);
+ errno = orig_errno;
}
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -1865,7 +1865,7 @@
// Die immediately, no exit hook, no abort hook, no cleanup.
void os::die() {
- _exit(-1);
+ ::abort(); // dump core (for debugging)
}
// unused
@@ -4317,7 +4317,9 @@
void signalHandler(int sig, siginfo_t* info, void* ucVoid) {
+ int orig_errno = errno; // Preserve errno value over signal handler.
JVM_handle_solaris_signal(sig, info, ucVoid, true);
+ errno = orig_errno;
}
/* Do not delete - if guarantee is ever removed, a signal handler (even empty)
--- a/hotspot/src/os/windows/vm/os_windows.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/os/windows/vm/os_windows.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -1940,7 +1940,7 @@
// a counter for each possible signal value, including signal_thread exit signal
static volatile jint pending_signals[NSIG+1] = { 0 };
-static HANDLE sig_sem;
+static HANDLE sig_sem = NULL;
void os::signal_init_pd() {
// Initialize signal structures
@@ -1970,10 +1970,11 @@
void os::signal_notify(int signal_number) {
BOOL ret;
-
- Atomic::inc(&pending_signals[signal_number]);
- ret = ::ReleaseSemaphore(sig_sem, 1, NULL);
- assert(ret != 0, "ReleaseSemaphore() failed");
+ if (sig_sem != NULL) {
+ Atomic::inc(&pending_signals[signal_number]);
+ ret = ::ReleaseSemaphore(sig_sem, 1, NULL);
+ assert(ret != 0, "ReleaseSemaphore() failed");
+ }
}
static int check_pending_signals(bool wait_for_signal) {
--- a/hotspot/src/share/vm/c1/c1_LIR.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIR.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -814,7 +814,7 @@
// only visit register parameters
int n = opJavaCall->_arguments->length();
- for (int i = 0; i < n; i++) {
+ for (int i = opJavaCall->_receiver->is_valid() ? 1 : 0; i < n; i++) {
if (!opJavaCall->_arguments->at(i)->is_pointer()) {
do_input(*opJavaCall->_arguments->adr_at(i));
}
--- a/hotspot/src/share/vm/classfile/verifier.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/classfile/verifier.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. 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
@@ -61,7 +61,8 @@
# include "bytes_ppc.hpp"
#endif
-#define NOFAILOVER_MAJOR_VERSION 51
+#define NOFAILOVER_MAJOR_VERSION 51
+#define STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION 52
// Access to external entry for VerifyClassCodes - old byte code verifier
@@ -2317,6 +2318,11 @@
types = (1 << JVM_CONSTANT_InterfaceMethodref) |
(1 << JVM_CONSTANT_Methodref);
break;
+ case Bytecodes::_invokestatic:
+ types = (_klass->major_version() < STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION) ?
+ (1 << JVM_CONSTANT_Methodref) :
+ ((1 << JVM_CONSTANT_InterfaceMethodref) | (1 << JVM_CONSTANT_Methodref));
+ break;
default:
types = 1 << JVM_CONSTANT_Methodref;
}
--- a/hotspot/src/share/vm/memory/collectorPolicy.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -168,11 +168,11 @@
void GenCollectorPolicy::initialize_size_policy(size_t init_eden_size,
size_t init_promo_size,
size_t init_survivor_size) {
- const double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
+ const double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0;
_size_policy = new AdaptiveSizePolicy(init_eden_size,
init_promo_size,
init_survivor_size,
- max_gc_minor_pause_sec,
+ max_gc_pause_sec,
GCTimeRatio);
}
--- a/hotspot/src/share/vm/oops/method.hpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/oops/method.hpp Tue Mar 05 11:46:02 2013 -0800
@@ -456,6 +456,8 @@
void print_codes_on(int from, int to, outputStream* st) const PRODUCT_RETURN;
// method parameters
+ bool has_method_parameters() const
+ { return constMethod()->has_method_parameters(); }
int method_parameters_length() const
{ return constMethod()->method_parameters_length(); }
MethodParametersElement* method_parameters_start() const
--- a/hotspot/src/share/vm/opto/library_call.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/opto/library_call.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -1481,10 +1481,10 @@
Node* arg = round_double_node(argument(0));
Node* n;
switch (id) {
- case vmIntrinsics::_dabs: n = new (C) AbsDNode( arg); break;
- case vmIntrinsics::_dsqrt: n = new (C) SqrtDNode(0, arg); break;
- case vmIntrinsics::_dlog: n = new (C) LogDNode( arg); break;
- case vmIntrinsics::_dlog10: n = new (C) Log10DNode( arg); break;
+ case vmIntrinsics::_dabs: n = new (C) AbsDNode( arg); break;
+ case vmIntrinsics::_dsqrt: n = new (C) SqrtDNode(C, control(), arg); break;
+ case vmIntrinsics::_dlog: n = new (C) LogDNode(C, control(), arg); break;
+ case vmIntrinsics::_dlog10: n = new (C) Log10DNode(C, control(), arg); break;
default: fatal_unexpected_iid(id); break;
}
set_result(_gvn.transform(n));
@@ -1499,9 +1499,9 @@
Node* n = NULL;
switch (id) {
- case vmIntrinsics::_dsin: n = new (C) SinDNode(arg); break;
- case vmIntrinsics::_dcos: n = new (C) CosDNode(arg); break;
- case vmIntrinsics::_dtan: n = new (C) TanDNode(arg); break;
+ case vmIntrinsics::_dsin: n = new (C) SinDNode(C, control(), arg); break;
+ case vmIntrinsics::_dcos: n = new (C) CosDNode(C, control(), arg); break;
+ case vmIntrinsics::_dtan: n = new (C) TanDNode(C, control(), arg); break;
default: fatal_unexpected_iid(id); break;
}
n = _gvn.transform(n);
--- a/hotspot/src/share/vm/opto/subnode.hpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/opto/subnode.hpp Tue Mar 05 11:46:02 2013 -0800
@@ -399,7 +399,10 @@
// Cosinus of a double
class CosDNode : public Node {
public:
- CosDNode( Node *in1 ) : Node(0, in1) {}
+ CosDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
+ init_flags(Flag_is_expensive);
+ C->add_expensive_node(this);
+ }
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
@@ -410,7 +413,10 @@
// Sinus of a double
class SinDNode : public Node {
public:
- SinDNode( Node *in1 ) : Node(0, in1) {}
+ SinDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
+ init_flags(Flag_is_expensive);
+ C->add_expensive_node(this);
+ }
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
@@ -422,7 +428,10 @@
// tangens of a double
class TanDNode : public Node {
public:
- TanDNode(Node *in1 ) : Node(0, in1) {}
+ TanDNode(Compile* C, Node *c,Node *in1) : Node(c, in1) {
+ init_flags(Flag_is_expensive);
+ C->add_expensive_node(this);
+ }
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
@@ -445,7 +454,10 @@
// square root a double
class SqrtDNode : public Node {
public:
- SqrtDNode(Node *c, Node *in1 ) : Node(c, in1) {}
+ SqrtDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
+ init_flags(Flag_is_expensive);
+ C->add_expensive_node(this);
+ }
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
@@ -470,7 +482,10 @@
// Log_e of a double
class LogDNode : public Node {
public:
- LogDNode( Node *in1 ) : Node(0, in1) {}
+ LogDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
+ init_flags(Flag_is_expensive);
+ C->add_expensive_node(this);
+ }
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
@@ -481,7 +496,10 @@
// Log_10 of a double
class Log10DNode : public Node {
public:
- Log10DNode( Node *in1 ) : Node(0, in1) {}
+ Log10DNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
+ init_flags(Flag_is_expensive);
+ C->add_expensive_node(this);
+ }
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
--- a/hotspot/src/share/vm/opto/superword.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/opto/superword.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -143,7 +143,8 @@
// Ready the block
- construct_bb();
+ if (!construct_bb())
+ return; // Exit if no interesting nodes or complex graph.
dependence_graph();
@@ -615,6 +616,7 @@
if (n == stop) break;
preds.push(n);
prev = n;
+ assert(n->is_Mem(), err_msg_res("unexpected node %s", n->Name()));
n = n->in(MemNode::Memory);
}
}
@@ -1578,7 +1580,7 @@
//------------------------------construct_bb---------------------------
// Construct reverse postorder list of block members
-void SuperWord::construct_bb() {
+bool SuperWord::construct_bb() {
Node* entry = bb();
assert(_stk.length() == 0, "stk is empty");
@@ -1596,6 +1598,12 @@
Node *n = lpt()->_body.at(i);
set_bb_idx(n, i); // Create a temporary map
if (in_bb(n)) {
+ if (n->is_LoadStore() || n->is_MergeMem() ||
+ (n->is_Proj() && !n->as_Proj()->is_CFG())) {
+ // Bailout if the loop has LoadStore, MergeMem or data Proj
+ // nodes. Superword optimization does not work with them.
+ return false;
+ }
bb_ct++;
if (!n->is_CFG()) {
bool found = false;
@@ -1620,6 +1628,10 @@
if (in_bb(n) && (n->is_Phi() && n->bottom_type() == Type::MEMORY)) {
Node* n_tail = n->in(LoopNode::LoopBackControl);
if (n_tail != n->in(LoopNode::EntryControl)) {
+ if (!n_tail->is_Mem()) {
+ assert(n_tail->is_Mem(), err_msg_res("unexpected node for memory slice: %s", n_tail->Name()));
+ return false; // Bailout
+ }
_mem_slice_head.push(n);
_mem_slice_tail.push(n_tail);
}
@@ -1695,6 +1707,7 @@
}
#endif
assert(rpo_idx == -1 && bb_ct == _block.length(), "all block members found");
+ return (_mem_slice_head.length() > 0) || (_data_entry.length() > 0);
}
//------------------------------initialize_bb---------------------------
--- a/hotspot/src/share/vm/opto/superword.hpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/opto/superword.hpp Tue Mar 05 11:46:02 2013 -0800
@@ -380,7 +380,7 @@
// Is use->in(u_idx) a vector use?
bool is_vector_use(Node* use, int u_idx);
// Construct reverse postorder list of block members
- void construct_bb();
+ bool construct_bb();
// Initialize per node info
void initialize_bb();
// Insert n into block after pos
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -1558,6 +1558,18 @@
} break;
}
} // end for each bytecode
+
+ // We also need to rewrite the parameter name indexes, if there is
+ // method parameter data present
+ if(method->has_method_parameters()) {
+ const int len = method->method_parameters_length();
+ MethodParametersElement* elem = method->method_parameters_start();
+
+ for (int i = 0; i < len; i++) {
+ const u2 cp_index = elem[i].name_cp_index;
+ elem[i].name_cp_index = find_new_index(cp_index);
+ }
+ }
} // end rewrite_cp_refs_in_method()
--- a/hotspot/src/share/vm/runtime/arguments.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -1738,16 +1738,6 @@
return false;
}
-static void force_serial_gc() {
- FLAG_SET_DEFAULT(UseSerialGC, true);
- FLAG_SET_DEFAULT(UseParNewGC, false);
- FLAG_SET_DEFAULT(UseConcMarkSweepGC, false);
- FLAG_SET_DEFAULT(CMSIncrementalMode, false); // special CMS suboption
- FLAG_SET_DEFAULT(UseParallelGC, false);
- FLAG_SET_DEFAULT(UseParallelOldGC, false);
- FLAG_SET_DEFAULT(UseG1GC, false);
-}
-
static bool verify_serial_gc_flags() {
return (UseSerialGC &&
!(UseParNewGC || (UseConcMarkSweepGC || CMSIncrementalMode) || UseG1GC ||
@@ -2498,7 +2488,12 @@
}
// Out of the box management support
if (match_option(option, "-Dcom.sun.management", &tail)) {
+#if INCLUDE_MANAGEMENT
FLAG_SET_CMDLINE(bool, ManagementServer, true);
+#else
+ vm_exit_during_initialization(
+ "-Dcom.sun.management is not supported in this VM.", NULL);
+#endif
}
// -Xint
} else if (match_option(option, "-Xint", &tail)) {
@@ -2844,6 +2839,11 @@
// away and will cause VM initialization failures!
warning("-XX:+UseVMInterruptibleIO is obsolete and will be removed in a future release.");
FLAG_SET_CMDLINE(bool, UseVMInterruptibleIO, true);
+#if !INCLUDE_MANAGEMENT
+ } else if (match_option(option, "-XX:+ManagementServer", &tail)) {
+ vm_exit_during_initialization(
+ "ManagementServer is not supported in this VM.", NULL);
+#endif // INCLUDE_MANAGEMENT
} else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx
// Skip -XX:Flags= since that case has already been handled
if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) {
@@ -3072,6 +3072,27 @@
} \
} while(0)
+
+#define UNSUPPORTED_GC_OPTION(gc) \
+do { \
+ if (gc) { \
+ if (FLAG_IS_CMDLINE(gc)) { \
+ warning(#gc " is not supported in this VM. Using Serial GC."); \
+ } \
+ FLAG_SET_DEFAULT(gc, false); \
+ } \
+} while(0)
+
+static void force_serial_gc() {
+ FLAG_SET_DEFAULT(UseSerialGC, true);
+ FLAG_SET_DEFAULT(CMSIncrementalMode, false); // special CMS suboption
+ UNSUPPORTED_GC_OPTION(UseG1GC);
+ UNSUPPORTED_GC_OPTION(UseParallelGC);
+ UNSUPPORTED_GC_OPTION(UseParallelOldGC);
+ UNSUPPORTED_GC_OPTION(UseConcMarkSweepGC);
+ UNSUPPORTED_GC_OPTION(UseParNewGC);
+}
+
// Parse entry point called from JNI_CreateJavaVM
jint Arguments::parse(const JavaVMInitArgs* args) {
@@ -3187,28 +3208,15 @@
hotspotrc, hotspotrc);
}
-#if (defined JAVASE_EMBEDDED || defined ARM)
- UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
-#endif
-
#ifdef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD.
UNSUPPORTED_OPTION(UseLargePages, "-XX:+UseLargePages");
#endif
-#if !INCLUDE_ALL_GCS
- if (UseParallelGC) {
- warning("Parallel GC is not supported in this VM. Using Serial GC.");
- }
- if (UseParallelOldGC) {
- warning("Parallel Old GC is not supported in this VM. Using Serial GC.");
- }
- if (UseConcMarkSweepGC) {
- warning("Concurrent Mark Sweep GC is not supported in this VM. Using Serial GC.");
- }
- if (UseParNewGC) {
- warning("Par New GC is not supported in this VM. Using Serial GC.");
- }
-#endif // INCLUDE_ALL_GCS
+#if INCLUDE_ALL_GCS
+ #if (defined JAVASE_EMBEDDED || defined ARM)
+ UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
+ #endif
+#endif
#ifndef PRODUCT
if (TraceBytecodesAt != 0) {
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -2109,8 +2109,6 @@
/* Useful globals */ \
/******************/ \
\
- declare_constant(UseTLAB) \
- declare_constant(EnableInvokeDynamic) \
\
/**************/ \
/* Stack bias */ \
--- a/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp Tue Mar 05 11:46:02 2013 -0800
@@ -24,9 +24,7 @@
#include "precompiled.hpp"
#include "utilities/macros.hpp"
-#if INCLUDE_ALL_GCS
#include "utilities/yieldingWorkgroup.hpp"
-#endif // INCLUDE_ALL_GCS
// Forward declaration of classes declared here.
--- a/hotspot/test/TEST.ROOT Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/test/TEST.ROOT Tue Mar 05 11:46:02 2013 -0800
@@ -28,4 +28,4 @@
# DO NOT EDIT without first contacting hotspot-regtest@sun.com
# The list of keywords supported in this test suite
-keys=cte_test jcmd nmt regression
+keys=cte_test jcmd nmt regression gc
--- a/hotspot/test/compiler/5091921/Test6850611.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/test/compiler/5091921/Test6850611.java Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. 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
@@ -27,7 +27,7 @@
* @bug 6850611
* @summary int / long arithmetic seems to be broken in 1.6.0_14 HotSpot Server VM (Win XP)
*
- * @run main Test6850611
+ * @run main/timeout=480 Test6850611
*/
public class Test6850611 {
--- a/hotspot/test/compiler/5091921/Test6890943.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/test/compiler/5091921/Test6890943.java Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. 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
@@ -27,7 +27,7 @@
* @bug 6890943
* @summary JVM mysteriously gives wrong result on 64-bit 1.6 VMs in hotspot mode.
*
- * @run shell Test6890943.sh
+ * @run shell/timeout=240 Test6890943.sh
*/
import java.util.*;
import java.io.*;
--- a/hotspot/test/compiler/5091921/Test6890943.sh Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/test/compiler/5091921/Test6890943.sh Tue Mar 05 11:46:02 2013 -0800
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, Oracle and/or its affiliates. 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
@@ -52,7 +52,10 @@
${TESTJAVA}/bin/javac -d . Test6890943.java
-${TESTJAVA}/bin/java -XX:-PrintVMOptions ${TESTVMOPTS} Test6890943 < input6890943.txt > test.out 2>&1
+${TESTJAVA}/bin/java -XX:-PrintVMOptions -XX:+IgnoreUnrecognizedVMOptions ${TESTVMOPTS} Test6890943 < input6890943.txt > pretest.out 2>&1
+
+# This test sometimes tickles an unrelated performance warning that interferes with diff.
+grep -v 'warning: Performance bug: SystemDictionary' pretest.out > test.out
diff output6890943.txt test.out
--- a/hotspot/test/compiler/5091921/Test6905845.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/test/compiler/5091921/Test6905845.java Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. 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
@@ -27,7 +27,7 @@
* @bug 6905845
* @summary Server VM improperly optimizing away loop.
*
- * @run main Test6905845
+ * @run main/timeout=480 Test6905845
*/
public class Test6905845 {
--- a/hotspot/test/compiler/5091921/Test6992759.java Tue Feb 26 09:25:44 2013 -0800
+++ b/hotspot/test/compiler/5091921/Test6992759.java Tue Mar 05 11:46:02 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. 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
@@ -27,7 +27,7 @@
* @bug 6992759
* @summary Bad code generated for integer <= comparison, fails for Integer.MAX_VALUE
*
- * @run main Test6992759
+ * @run main/timeout=240 Test6992759
*/
public class Test6992759 {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/8004867/TestIntAtomicCAS.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,969 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8004867
+ * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
+ *
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntAtomicCAS
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntAtomicCAS
+ */
+
+import java.util.concurrent.atomic.AtomicIntegerArray;
+
+public class TestIntAtomicCAS {
+ private static final int ARRLEN = 97;
+ private static final int ITERS = 11000;
+ private static final int OFFSET = 3;
+ private static final int SCALE = 2;
+ private static final int ALIGN_OFF = 8;
+ private static final int UNALIGN_OFF = 5;
+
+ public static void main(String args[]) {
+ System.out.println("Testing Integer array atomic CAS operations");
+ int errn = test(false);
+ if (errn > 0) {
+ System.err.println("FAILED: " + errn + " errors");
+ System.exit(97);
+ }
+ System.out.println("PASSED");
+ }
+
+ static int test(boolean test_only) {
+ AtomicIntegerArray a1 = new AtomicIntegerArray(ARRLEN);
+ AtomicIntegerArray a2 = new AtomicIntegerArray(ARRLEN);
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ System.out.println("Warmup");
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ test_vi(a2, 123, -1);
+ test_cp(a1, a2);
+ test_2ci(a1, a2);
+ test_2vi(a1, a2, 123, 103);
+ test_ci_neg(a1, 123);
+ test_vi_neg(a2, 123, 103);
+ test_cp_neg(a1, a2);
+ test_2ci_neg(a1, a2);
+ test_2vi_neg(a1, a2, 123, 103);
+ test_ci_oppos(a1, 123);
+ test_vi_oppos(a2, 123, 103);
+ test_cp_oppos(a1, a2);
+ test_2ci_oppos(a1, a2);
+ test_2vi_oppos(a1, a2, 123, 103);
+ test_ci_off(a1, 123);
+ test_vi_off(a2, 123, 103);
+ test_cp_off(a1, a2);
+ test_2ci_off(a1, a2);
+ test_2vi_off(a1, a2, 123, 103);
+ test_ci_inv(a1, OFFSET, 123);
+ test_vi_inv(a2, 123, OFFSET, 103);
+ test_cp_inv(a1, a2, OFFSET);
+ test_2ci_inv(a1, a2, OFFSET);
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ test_ci_scl(a1, 123);
+ test_vi_scl(a2, 123, 103);
+ test_cp_scl(a1, a2);
+ test_2ci_scl(a1, a2);
+ test_2vi_scl(a1, a2, 123, 103);
+ test_cp_alndst(a1, a2);
+ test_cp_alnsrc(a1, a2);
+ test_2ci_aln(a1, a2);
+ test_2vi_aln(a1, a2, 123, 103);
+ test_cp_unalndst(a1, a2);
+ test_cp_unalnsrc(a1, a2);
+ test_2ci_unaln(a1, a2);
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ // Test and verify results
+ System.out.println("Verification");
+ int errn = 0;
+ {
+ test_ci(a1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci: a1", i, a1.get(i), -123);
+ }
+ test_vi(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi: a2", i, a2.get(i), 123);
+ }
+ test_cp(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp: a1", i, a1.get(i), 123);
+ }
+ test_2ci(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci: a2", i, a2.get(i), -103);
+ }
+ test_2vi(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi: a2", i, a2.get(i), 103);
+ }
+ // Reset for negative stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_neg(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_neg: a1", i, a1.get(i), -123);
+ }
+ test_vi_neg(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_neg: a2", i, a2.get(i), 123);
+ }
+ test_cp_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_neg: a1", i, a1.get(i), 123);
+ }
+ test_2ci_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_neg: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_neg: a2", i, a2.get(i), -103);
+ }
+ test_2vi_neg(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_neg: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_neg: a2", i, a2.get(i), 103);
+ }
+ // Reset for opposite stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_oppos(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_oppos: a1", i, a1.get(i), -123);
+ }
+ test_vi_oppos(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_oppos: a2", i, a2.get(i), 123);
+ }
+ test_cp_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_oppos: a1", i, a1.get(i), 123);
+ }
+ test_2ci_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_oppos: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_oppos: a2", i, a2.get(i), -103);
+ }
+ test_2vi_oppos(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_oppos: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_oppos: a2", i, a2.get(i), 103);
+ }
+ // Reset for indexing with offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_off(a1, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_off: a1", i, a1.get(i), -123);
+ }
+ test_vi_off(a2, 123, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_off: a2", i, a2.get(i), 123);
+ }
+ test_cp_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_off: a1", i, a1.get(i), 123);
+ }
+ test_2ci_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_off: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_off: a2", i, a2.get(i), -103);
+ }
+ test_2vi_off(a1, a2, 123, 103);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_off: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_off: a2", i, a2.get(i), 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_off: a1", i, a1.get(i), -1);
+ errn += verify("test_2vi_off: a2", i, a2.get(i), -1);
+ }
+ // Reset for indexing with invariant offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_inv(a1, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_inv: a1", i, a1.get(i), -123);
+ }
+ test_vi_inv(a2, 123, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_inv: a2", i, a2.get(i), 123);
+ }
+ test_cp_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_inv: a1", i, a1.get(i), 123);
+ }
+ test_2ci_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_inv: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_inv: a2", i, a2.get(i), -103);
+ }
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_inv: a2", i, a2.get(i), 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1.get(i), -1);
+ errn += verify("test_2vi_inv: a2", i, a2.get(i), -1);
+ }
+ // Reset for indexing with scale
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_scl(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : -123;
+ errn += verify("test_ci_scl: a1", i, a1.get(i), val);
+ }
+ test_vi_scl(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_vi_scl: a2", i, a2.get(i), val);
+ }
+ test_cp_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_cp_scl: a1", i, a1.get(i), val);
+ }
+ test_2ci_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a1", i, a1.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a1", i*SCALE, a1.get(i*SCALE), -123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a2", i, a2.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a2", i*SCALE, a2.get(i*SCALE), -103);
+ }
+ }
+ test_2vi_scl(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a1", i, a1.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a1", i*SCALE, a1.get(i*SCALE), 123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a2", i, a2.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a2", i*SCALE, a2.get(i*SCALE), 103);
+ }
+ }
+ // Reset for 2 arrays with relative aligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_vi(a2, 123, -1);
+ test_cp_alndst(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.set(i, 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_alnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1.get(i), -123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2ci_aln(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2.get(i), -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2.get(i), -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2vi_aln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1.get(i), -1);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2.get(i), 103);
+ }
+
+ // Reset for 2 arrays with relative unaligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_vi(a2, 123, -1);
+ test_cp_unalndst(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1.get(i), 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_unalnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), -123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2ci_unaln(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2.get(i), -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2.get(i), -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2vi_unaln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1.get(i), -1);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2.get(i), 103);
+ }
+
+ // Reset for aligned overlap initialization
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.set(i, i);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_cp_alndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alndst_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.set((i+ALIGN_OFF), -1);
+ }
+ test_cp_alnsrc(a1, a1);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2ci_aln(a1, a1);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2vi_aln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 103);
+ }
+
+ // Reset for unaligned overlap initialization
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1.set(i, i);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_cp_unalndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalndst_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1.set((i+UNALIGN_OFF), -1);
+ }
+ test_cp_unalnsrc(a1, a1);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2ci_unaln(a1, a1);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2vi_unaln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 103);
+ }
+
+ }
+
+ if (errn > 0 || test_only)
+ return errn;
+
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ System.out.println("Time");
+ long start, end;
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi(a2, 123, -1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_neg(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_neg(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_neg(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_neg: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_oppos(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_oppos(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_oppos(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_oppos: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_off(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_off(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_off(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_off: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_inv(a1, OFFSET, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_inv(a2, 123, OFFSET, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_inv: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_scl(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_scl(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_scl(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_scl: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_aln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_aln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_aln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_aln: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_unaln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_unaln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_unaln: " + (end - start));
+
+ return errn;
+ }
+
+ static void test_ci(AtomicIntegerArray a) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet(i, -1, -123);
+ }
+ }
+ static void test_vi(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet(i, old, b);
+ }
+ }
+ static void test_cp(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet(i, -123, b.get(i));
+ }
+ }
+ static void test_2ci(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet(i, 123, -123);
+ b.compareAndSet(i, 123, -103);
+ }
+ }
+ static void test_2vi(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet(i, -123, c);
+ b.compareAndSet(i, -103, d);
+ }
+ }
+ static void test_ci_neg(AtomicIntegerArray a, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.compareAndSet(i, old, -123);
+ }
+ }
+ static void test_vi_neg(AtomicIntegerArray a, int b, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.compareAndSet(i, old, b);
+ }
+ }
+ static void test_cp_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.compareAndSet(i, -123, b.get(i));
+ }
+ }
+ static void test_2ci_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.compareAndSet(i, 123, -123);
+ b.compareAndSet(i, 123, -103);
+ }
+ }
+ static void test_2vi_neg(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.compareAndSet(i, -123, c);
+ b.compareAndSet(i, -103, d);
+ }
+ }
+ static void test_ci_oppos(AtomicIntegerArray a, int old) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet((limit-i), old, -123);
+ }
+ }
+ static void test_vi_oppos(AtomicIntegerArray a, int b, int old) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ a.compareAndSet((limit-i), old, b);
+ }
+ }
+ static void test_cp_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet(i, -123, b.get(limit-i));
+ }
+ }
+ static void test_2ci_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.compareAndSet((limit-i), 123, -123);
+ b.compareAndSet(i, 123, -103);
+ }
+ }
+ static void test_2vi_oppos(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ a.compareAndSet(i, -123, c);
+ b.compareAndSet((limit-i), -103, d);
+ }
+ }
+ static void test_ci_off(AtomicIntegerArray a, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.compareAndSet((i+OFFSET), old, -123);
+ }
+ }
+ static void test_vi_off(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.compareAndSet((i+OFFSET), old, b);
+ }
+ }
+ static void test_cp_off(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.compareAndSet((i+OFFSET), -123, b.get(i+OFFSET));
+ }
+ }
+ static void test_2ci_off(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.compareAndSet((i+OFFSET), 123, -123);
+ b.compareAndSet((i+OFFSET), 123, -103);
+ }
+ }
+ static void test_2vi_off(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.compareAndSet((i+OFFSET), -123, c);
+ b.compareAndSet((i+OFFSET), -103, d);
+ }
+ }
+ static void test_ci_inv(AtomicIntegerArray a, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.compareAndSet((i+k), old, -123);
+ }
+ }
+ static void test_vi_inv(AtomicIntegerArray a, int b, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.compareAndSet((i+k), old, b);
+ }
+ }
+ static void test_cp_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.compareAndSet((i+k), -123, b.get(i+k));
+ }
+ }
+ static void test_2ci_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.compareAndSet((i+k), 123, -123);
+ b.compareAndSet((i+k), 123, -103);
+ }
+ }
+ static void test_2vi_inv(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.compareAndSet((i+k), -123, c);
+ b.compareAndSet((i+k), -103, d);
+ }
+ }
+ static void test_ci_scl(AtomicIntegerArray a, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.compareAndSet((i*SCALE), old, -123);
+ }
+ }
+ static void test_vi_scl(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.compareAndSet((i*SCALE), old, b);
+ }
+ }
+ static void test_cp_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.compareAndSet((i*SCALE), -123, b.get(i*SCALE));
+ }
+ }
+ static void test_2ci_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.compareAndSet((i*SCALE), 123, -123);
+ b.compareAndSet((i*SCALE), 123, -103);
+ }
+ }
+ static void test_2vi_scl(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.compareAndSet((i*SCALE), -123, c);
+ b.compareAndSet((i*SCALE), -103, d);
+ }
+ }
+ static void test_cp_alndst(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.compareAndSet((i+ALIGN_OFF), -1, b.get(i));
+ }
+ }
+ static void test_cp_alnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.getAndSet(i, b.get(i+ALIGN_OFF));
+ }
+ }
+ static void test_2ci_aln(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.compareAndSet((i+ALIGN_OFF), -1, -123);
+ b.getAndSet(i, -103);
+ }
+ }
+ static void test_2vi_aln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.getAndSet(i, c);
+ b.getAndSet((i+ALIGN_OFF), d);
+ }
+ }
+ static void test_cp_unalndst(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.compareAndSet((i+UNALIGN_OFF), -1, b.get(i));
+ }
+ }
+ static void test_cp_unalnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.getAndSet(i, b.get(i+UNALIGN_OFF));
+ }
+ }
+ static void test_2ci_unaln(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.compareAndSet((i+UNALIGN_OFF), -1, -123);
+ b.getAndSet(i, -103);
+ }
+ }
+ static void test_2vi_unaln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.getAndSet(i, c);
+ b.getAndSet((i+UNALIGN_OFF), d);
+ }
+ }
+
+ static int verify(String text, int i, int elem, int val) {
+ if (elem != val) {
+ System.err.println(text + "[" + i + "] = " + elem + " != " + val);
+ return 1;
+ }
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/8004867/TestIntAtomicOrdered.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,969 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8004867
+ * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
+ *
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntAtomicOrdered
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntAtomicOrdered
+ */
+
+import java.util.concurrent.atomic.AtomicIntegerArray;
+
+public class TestIntAtomicOrdered {
+ private static final int ARRLEN = 97;
+ private static final int ITERS = 11000;
+ private static final int OFFSET = 3;
+ private static final int SCALE = 2;
+ private static final int ALIGN_OFF = 8;
+ private static final int UNALIGN_OFF = 5;
+
+ public static void main(String args[]) {
+ System.out.println("Testing Integer array atomic ordered operations");
+ int errn = test(false);
+ if (errn > 0) {
+ System.err.println("FAILED: " + errn + " errors");
+ System.exit(97);
+ }
+ System.out.println("PASSED");
+ }
+
+ static int test(boolean test_only) {
+ AtomicIntegerArray a1 = new AtomicIntegerArray(ARRLEN);
+ AtomicIntegerArray a2 = new AtomicIntegerArray(ARRLEN);
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ System.out.println("Warmup");
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ test_vi(a2, 123, -1);
+ test_cp(a1, a2);
+ test_2ci(a1, a2);
+ test_2vi(a1, a2, 123, 103);
+ test_ci_neg(a1, 123);
+ test_vi_neg(a2, 123, 103);
+ test_cp_neg(a1, a2);
+ test_2ci_neg(a1, a2);
+ test_2vi_neg(a1, a2, 123, 103);
+ test_ci_oppos(a1, 123);
+ test_vi_oppos(a2, 123, 103);
+ test_cp_oppos(a1, a2);
+ test_2ci_oppos(a1, a2);
+ test_2vi_oppos(a1, a2, 123, 103);
+ test_ci_off(a1, 123);
+ test_vi_off(a2, 123, 103);
+ test_cp_off(a1, a2);
+ test_2ci_off(a1, a2);
+ test_2vi_off(a1, a2, 123, 103);
+ test_ci_inv(a1, OFFSET, 123);
+ test_vi_inv(a2, 123, OFFSET, 103);
+ test_cp_inv(a1, a2, OFFSET);
+ test_2ci_inv(a1, a2, OFFSET);
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ test_ci_scl(a1, 123);
+ test_vi_scl(a2, 123, 103);
+ test_cp_scl(a1, a2);
+ test_2ci_scl(a1, a2);
+ test_2vi_scl(a1, a2, 123, 103);
+ test_cp_alndst(a1, a2);
+ test_cp_alnsrc(a1, a2);
+ test_2ci_aln(a1, a2);
+ test_2vi_aln(a1, a2, 123, 103);
+ test_cp_unalndst(a1, a2);
+ test_cp_unalnsrc(a1, a2);
+ test_2ci_unaln(a1, a2);
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ // Test and verify results
+ System.out.println("Verification");
+ int errn = 0;
+ {
+ test_ci(a1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci: a1", i, a1.get(i), -123);
+ }
+ test_vi(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi: a2", i, a2.get(i), 123);
+ }
+ test_cp(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp: a1", i, a1.get(i), 123);
+ }
+ test_2ci(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci: a2", i, a2.get(i), -103);
+ }
+ test_2vi(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi: a2", i, a2.get(i), 103);
+ }
+ // Reset for negative stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_ci_neg(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_neg: a1", i, a1.get(i), -123);
+ }
+ test_vi_neg(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_neg: a2", i, a2.get(i), 123);
+ }
+ test_cp_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_neg: a1", i, a1.get(i), 123);
+ }
+ test_2ci_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_neg: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_neg: a2", i, a2.get(i), -103);
+ }
+ test_2vi_neg(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_neg: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_neg: a2", i, a2.get(i), 103);
+ }
+ // Reset for opposite stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_ci_oppos(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_oppos: a1", i, a1.get(i), -123);
+ }
+ test_vi_oppos(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_oppos: a2", i, a2.get(i), 123);
+ }
+ test_cp_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_oppos: a1", i, a1.get(i), 123);
+ }
+ test_2ci_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_oppos: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_oppos: a2", i, a2.get(i), -103);
+ }
+ test_2vi_oppos(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_oppos: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_oppos: a2", i, a2.get(i), 103);
+ }
+ // Reset for indexing with offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_ci_off(a1, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_off: a1", i, a1.get(i), -123);
+ }
+ test_vi_off(a2, 123, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_off: a2", i, a2.get(i), 123);
+ }
+ test_cp_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_off: a1", i, a1.get(i), 123);
+ }
+ test_2ci_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_off: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_off: a2", i, a2.get(i), -103);
+ }
+ test_2vi_off(a1, a2, 123, 103);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_off: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_off: a2", i, a2.get(i), 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_off: a1", i, a1.get(i), -1);
+ errn += verify("test_2vi_off: a2", i, a2.get(i), -1);
+ }
+ // Reset for indexing with invariant offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_ci_inv(a1, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_inv: a1", i, a1.get(i), -123);
+ }
+ test_vi_inv(a2, 123, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_inv: a2", i, a2.get(i), 123);
+ }
+ test_cp_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_inv: a1", i, a1.get(i), 123);
+ }
+ test_2ci_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_inv: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_inv: a2", i, a2.get(i), -103);
+ }
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_inv: a2", i, a2.get(i), 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1.get(i), -1);
+ errn += verify("test_2vi_inv: a2", i, a2.get(i), -1);
+ }
+ // Reset for indexing with scale
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_ci_scl(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : -123;
+ errn += verify("test_ci_scl: a1", i, a1.get(i), val);
+ }
+ test_vi_scl(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_vi_scl: a2", i, a2.get(i), val);
+ }
+ test_cp_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_cp_scl: a1", i, a1.get(i), val);
+ }
+ test_2ci_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a1", i, a1.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a1", i*SCALE, a1.get(i*SCALE), -123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a2", i, a2.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a2", i*SCALE, a2.get(i*SCALE), -103);
+ }
+ }
+ test_2vi_scl(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a1", i, a1.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a1", i*SCALE, a1.get(i*SCALE), 123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a2", i, a2.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a2", i*SCALE, a2.get(i*SCALE), 103);
+ }
+ }
+ // Reset for 2 arrays with relative aligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_vi(a2, 123, -1);
+ test_cp_alndst(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.lazySet(i, 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_alnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1.get(i), -123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_2ci_aln(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2.get(i), -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2.get(i), -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_2vi_aln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1.get(i), -1);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2.get(i), 103);
+ }
+
+ // Reset for 2 arrays with relative unaligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_vi(a2, 123, -1);
+ test_cp_unalndst(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1.get(i), 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_unalnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), -123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_2ci_unaln(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2.get(i), -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2.get(i), -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ test_2vi_unaln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1.get(i), -1);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2.get(i), 103);
+ }
+
+ // Reset for aligned overlap initialization
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.lazySet(i, i);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ }
+ test_cp_alndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alndst_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.lazySet((i+ALIGN_OFF), -1);
+ }
+ test_cp_alnsrc(a1, a1);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ }
+ test_2ci_aln(a1, a1);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ }
+ test_2vi_aln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 103);
+ }
+
+ // Reset for unaligned overlap initialization
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1.lazySet(i, i);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ }
+ test_cp_unalndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalndst_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1.lazySet((i+UNALIGN_OFF), -1);
+ }
+ test_cp_unalnsrc(a1, a1);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ }
+ test_2ci_unaln(a1, a1);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ }
+ test_2vi_unaln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 103);
+ }
+
+ }
+
+ if (errn > 0 || test_only)
+ return errn;
+
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.lazySet(i, -1);
+ a2.lazySet(i, -1);
+ }
+ System.out.println("Time");
+ long start, end;
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi(a2, 123, -1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_neg(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_neg(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_neg(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_neg: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_oppos(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_oppos(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_oppos(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_oppos: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_off(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_off(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_off(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_off: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_inv(a1, OFFSET, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_inv(a2, 123, OFFSET, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_inv: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_scl(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_scl(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_scl(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_scl: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_aln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_aln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_aln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_aln: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_unaln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_unaln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_unaln: " + (end - start));
+
+ return errn;
+ }
+
+ static void test_ci(AtomicIntegerArray a) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet(i, -123);
+ }
+ }
+ static void test_vi(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet(i, b);
+ }
+ }
+ static void test_cp(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet(i, b.get(i));
+ }
+ }
+ static void test_2ci(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet(i, -123);
+ b.lazySet(i, -103);
+ }
+ }
+ static void test_2vi(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet(i, c);
+ b.lazySet(i, d);
+ }
+ }
+ static void test_ci_neg(AtomicIntegerArray a, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.lazySet(i,-123);
+ }
+ }
+ static void test_vi_neg(AtomicIntegerArray a, int b, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.lazySet(i, b);
+ }
+ }
+ static void test_cp_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.lazySet(i, b.get(i));
+ }
+ }
+ static void test_2ci_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.lazySet(i, -123);
+ b.lazySet(i, -103);
+ }
+ }
+ static void test_2vi_neg(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.lazySet(i, c);
+ b.lazySet(i, d);
+ }
+ }
+ static void test_ci_oppos(AtomicIntegerArray a, int old) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet((limit-i), -123);
+ }
+ }
+ static void test_vi_oppos(AtomicIntegerArray a, int b, int old) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ a.lazySet((limit-i), b);
+ }
+ }
+ static void test_cp_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet(i, b.get(limit-i));
+ }
+ }
+ static void test_2ci_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.lazySet((limit-i), -123);
+ b.lazySet(i, -103);
+ }
+ }
+ static void test_2vi_oppos(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ a.lazySet(i, c);
+ b.lazySet((limit-i), d);
+ }
+ }
+ static void test_ci_off(AtomicIntegerArray a, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.lazySet((i+OFFSET), -123);
+ }
+ }
+ static void test_vi_off(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.lazySet((i+OFFSET), b);
+ }
+ }
+ static void test_cp_off(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.lazySet((i+OFFSET), b.get(i+OFFSET));
+ }
+ }
+ static void test_2ci_off(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.lazySet((i+OFFSET), -123);
+ b.lazySet((i+OFFSET), -103);
+ }
+ }
+ static void test_2vi_off(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.lazySet((i+OFFSET), c);
+ b.lazySet((i+OFFSET), d);
+ }
+ }
+ static void test_ci_inv(AtomicIntegerArray a, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.lazySet((i+k),-123);
+ }
+ }
+ static void test_vi_inv(AtomicIntegerArray a, int b, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.lazySet((i+k), b);
+ }
+ }
+ static void test_cp_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.lazySet((i+k), b.get(i+k));
+ }
+ }
+ static void test_2ci_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.lazySet((i+k), -123);
+ b.lazySet((i+k), -103);
+ }
+ }
+ static void test_2vi_inv(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.lazySet((i+k), c);
+ b.lazySet((i+k), d);
+ }
+ }
+ static void test_ci_scl(AtomicIntegerArray a, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.lazySet((i*SCALE), -123);
+ }
+ }
+ static void test_vi_scl(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.lazySet((i*SCALE), b);
+ }
+ }
+ static void test_cp_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.lazySet((i*SCALE), b.get(i*SCALE));
+ }
+ }
+ static void test_2ci_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.lazySet((i*SCALE), -123);
+ b.lazySet((i*SCALE), -103);
+ }
+ }
+ static void test_2vi_scl(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.lazySet((i*SCALE), c);
+ b.lazySet((i*SCALE), d);
+ }
+ }
+ static void test_cp_alndst(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.lazySet((i+ALIGN_OFF), b.get(i));
+ }
+ }
+ static void test_cp_alnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.lazySet(i, b.get(i+ALIGN_OFF));
+ }
+ }
+ static void test_2ci_aln(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.lazySet((i+ALIGN_OFF), -123);
+ b.lazySet(i, -103);
+ }
+ }
+ static void test_2vi_aln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.lazySet(i, c);
+ b.lazySet((i+ALIGN_OFF), d);
+ }
+ }
+ static void test_cp_unalndst(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.lazySet((i+UNALIGN_OFF), b.get(i));
+ }
+ }
+ static void test_cp_unalnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.lazySet(i, b.get(i+UNALIGN_OFF));
+ }
+ }
+ static void test_2ci_unaln(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.lazySet((i+UNALIGN_OFF), -123);
+ b.lazySet(i, -103);
+ }
+ }
+ static void test_2vi_unaln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.lazySet(i, c);
+ b.lazySet((i+UNALIGN_OFF), d);
+ }
+ }
+
+ static int verify(String text, int i, int elem, int val) {
+ if (elem != val) {
+ System.err.println(text + "[" + i + "] = " + elem + " != " + val);
+ return 1;
+ }
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/8004867/TestIntAtomicVolatile.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,969 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8004867
+ * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
+ *
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntAtomicVolatile
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntAtomicVolatile
+ */
+
+import java.util.concurrent.atomic.AtomicIntegerArray;
+
+public class TestIntAtomicVolatile {
+ private static final int ARRLEN = 97;
+ private static final int ITERS = 11000;
+ private static final int OFFSET = 3;
+ private static final int SCALE = 2;
+ private static final int ALIGN_OFF = 8;
+ private static final int UNALIGN_OFF = 5;
+
+ public static void main(String args[]) {
+ System.out.println("Testing Integer array atomic volatile operations");
+ int errn = test(false);
+ if (errn > 0) {
+ System.err.println("FAILED: " + errn + " errors");
+ System.exit(97);
+ }
+ System.out.println("PASSED");
+ }
+
+ static int test(boolean test_only) {
+ AtomicIntegerArray a1 = new AtomicIntegerArray(ARRLEN);
+ AtomicIntegerArray a2 = new AtomicIntegerArray(ARRLEN);
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ System.out.println("Warmup");
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ test_vi(a2, 123, -1);
+ test_cp(a1, a2);
+ test_2ci(a1, a2);
+ test_2vi(a1, a2, 123, 103);
+ test_ci_neg(a1, 123);
+ test_vi_neg(a2, 123, 103);
+ test_cp_neg(a1, a2);
+ test_2ci_neg(a1, a2);
+ test_2vi_neg(a1, a2, 123, 103);
+ test_ci_oppos(a1, 123);
+ test_vi_oppos(a2, 123, 103);
+ test_cp_oppos(a1, a2);
+ test_2ci_oppos(a1, a2);
+ test_2vi_oppos(a1, a2, 123, 103);
+ test_ci_off(a1, 123);
+ test_vi_off(a2, 123, 103);
+ test_cp_off(a1, a2);
+ test_2ci_off(a1, a2);
+ test_2vi_off(a1, a2, 123, 103);
+ test_ci_inv(a1, OFFSET, 123);
+ test_vi_inv(a2, 123, OFFSET, 103);
+ test_cp_inv(a1, a2, OFFSET);
+ test_2ci_inv(a1, a2, OFFSET);
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ test_ci_scl(a1, 123);
+ test_vi_scl(a2, 123, 103);
+ test_cp_scl(a1, a2);
+ test_2ci_scl(a1, a2);
+ test_2vi_scl(a1, a2, 123, 103);
+ test_cp_alndst(a1, a2);
+ test_cp_alnsrc(a1, a2);
+ test_2ci_aln(a1, a2);
+ test_2vi_aln(a1, a2, 123, 103);
+ test_cp_unalndst(a1, a2);
+ test_cp_unalnsrc(a1, a2);
+ test_2ci_unaln(a1, a2);
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ // Test and verify results
+ System.out.println("Verification");
+ int errn = 0;
+ {
+ test_ci(a1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci: a1", i, a1.get(i), -123);
+ }
+ test_vi(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi: a2", i, a2.get(i), 123);
+ }
+ test_cp(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp: a1", i, a1.get(i), 123);
+ }
+ test_2ci(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci: a2", i, a2.get(i), -103);
+ }
+ test_2vi(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi: a2", i, a2.get(i), 103);
+ }
+ // Reset for negative stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_neg(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_neg: a1", i, a1.get(i), -123);
+ }
+ test_vi_neg(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_neg: a2", i, a2.get(i), 123);
+ }
+ test_cp_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_neg: a1", i, a1.get(i), 123);
+ }
+ test_2ci_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_neg: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_neg: a2", i, a2.get(i), -103);
+ }
+ test_2vi_neg(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_neg: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_neg: a2", i, a2.get(i), 103);
+ }
+ // Reset for opposite stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_oppos(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_oppos: a1", i, a1.get(i), -123);
+ }
+ test_vi_oppos(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_oppos: a2", i, a2.get(i), 123);
+ }
+ test_cp_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_oppos: a1", i, a1.get(i), 123);
+ }
+ test_2ci_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_oppos: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_oppos: a2", i, a2.get(i), -103);
+ }
+ test_2vi_oppos(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_oppos: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_oppos: a2", i, a2.get(i), 103);
+ }
+ // Reset for indexing with offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_off(a1, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_off: a1", i, a1.get(i), -123);
+ }
+ test_vi_off(a2, 123, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_off: a2", i, a2.get(i), 123);
+ }
+ test_cp_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_off: a1", i, a1.get(i), 123);
+ }
+ test_2ci_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_off: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_off: a2", i, a2.get(i), -103);
+ }
+ test_2vi_off(a1, a2, 123, 103);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_off: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_off: a2", i, a2.get(i), 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_off: a1", i, a1.get(i), -1);
+ errn += verify("test_2vi_off: a2", i, a2.get(i), -1);
+ }
+ // Reset for indexing with invariant offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_inv(a1, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_inv: a1", i, a1.get(i), -123);
+ }
+ test_vi_inv(a2, 123, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_inv: a2", i, a2.get(i), 123);
+ }
+ test_cp_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_inv: a1", i, a1.get(i), 123);
+ }
+ test_2ci_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_inv: a1", i, a1.get(i), -123);
+ errn += verify("test_2ci_inv: a2", i, a2.get(i), -103);
+ }
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1.get(i), 123);
+ errn += verify("test_2vi_inv: a2", i, a2.get(i), 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1.get(i), -1);
+ errn += verify("test_2vi_inv: a2", i, a2.get(i), -1);
+ }
+ // Reset for indexing with scale
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_ci_scl(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : -123;
+ errn += verify("test_ci_scl: a1", i, a1.get(i), val);
+ }
+ test_vi_scl(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_vi_scl: a2", i, a2.get(i), val);
+ }
+ test_cp_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_cp_scl: a1", i, a1.get(i), val);
+ }
+ test_2ci_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a1", i, a1.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a1", i*SCALE, a1.get(i*SCALE), -123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a2", i, a2.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a2", i*SCALE, a2.get(i*SCALE), -103);
+ }
+ }
+ test_2vi_scl(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a1", i, a1.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a1", i*SCALE, a1.get(i*SCALE), 123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a2", i, a2.get(i), -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a2", i*SCALE, a2.get(i*SCALE), 103);
+ }
+ }
+ // Reset for 2 arrays with relative aligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_vi(a2, 123, -1);
+ test_cp_alndst(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.set(i, 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_alnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1.get(i), -123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2ci_aln(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2.get(i), -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2.get(i), -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2vi_aln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1.get(i), -1);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2.get(i), 103);
+ }
+
+ // Reset for 2 arrays with relative unaligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_vi(a2, 123, -1);
+ test_cp_unalndst(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1.get(i), 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_unalnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), -123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2ci_unaln(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2.get(i), -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2.get(i), -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ test_2vi_unaln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1.get(i), -1);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2.get(i), 103);
+ }
+
+ // Reset for aligned overlap initialization
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.set(i, i);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_cp_alndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alndst_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1.set((i+ALIGN_OFF), -1);
+ }
+ test_cp_alnsrc(a1, a1);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2ci_aln(a1, a1);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2vi_aln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 103);
+ }
+
+ // Reset for unaligned overlap initialization
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1.set(i, i);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_cp_unalndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalndst_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1.set((i+UNALIGN_OFF), -1);
+ }
+ test_cp_unalnsrc(a1, a1);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2ci_unaln(a1, a1);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ }
+ test_2vi_unaln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 103);
+ }
+
+ }
+
+ if (errn > 0 || test_only)
+ return errn;
+
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1.set(i, -1);
+ a2.set(i, -1);
+ }
+ System.out.println("Time");
+ long start, end;
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi(a2, 123, -1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_neg(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_neg(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_neg(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_neg: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_oppos(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_oppos(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_oppos(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_oppos: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_off(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_off(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_off(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_off: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_inv(a1, OFFSET, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_inv(a2, 123, OFFSET, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_inv: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_scl(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_scl(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_scl(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_scl: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_aln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_aln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_aln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_aln: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_unaln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_unaln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_unaln: " + (end - start));
+
+ return errn;
+ }
+
+ static void test_ci(AtomicIntegerArray a) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set(i, -123);
+ }
+ }
+ static void test_vi(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set(i, b);
+ }
+ }
+ static void test_cp(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set(i, b.get(i));
+ }
+ }
+ static void test_2ci(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set(i, -123);
+ b.set(i, -103);
+ }
+ }
+ static void test_2vi(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set(i, c);
+ b.set(i, d);
+ }
+ }
+ static void test_ci_neg(AtomicIntegerArray a, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.set(i,-123);
+ }
+ }
+ static void test_vi_neg(AtomicIntegerArray a, int b, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.set(i, b);
+ }
+ }
+ static void test_cp_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.set(i, b.get(i));
+ }
+ }
+ static void test_2ci_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.set(i, -123);
+ b.set(i, -103);
+ }
+ }
+ static void test_2vi_neg(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ a.set(i, c);
+ b.set(i, d);
+ }
+ }
+ static void test_ci_oppos(AtomicIntegerArray a, int old) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set((limit-i), -123);
+ }
+ }
+ static void test_vi_oppos(AtomicIntegerArray a, int b, int old) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ a.set((limit-i), b);
+ }
+ }
+ static void test_cp_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set(i, b.get(limit-i));
+ }
+ }
+ static void test_2ci_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ a.set((limit-i), -123);
+ b.set(i, -103);
+ }
+ }
+ static void test_2vi_oppos(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ a.set(i, c);
+ b.set((limit-i), d);
+ }
+ }
+ static void test_ci_off(AtomicIntegerArray a, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.set((i+OFFSET), -123);
+ }
+ }
+ static void test_vi_off(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.set((i+OFFSET), b);
+ }
+ }
+ static void test_cp_off(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.set((i+OFFSET), b.get(i+OFFSET));
+ }
+ }
+ static void test_2ci_off(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.set((i+OFFSET), -123);
+ b.set((i+OFFSET), -103);
+ }
+ }
+ static void test_2vi_off(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ a.set((i+OFFSET), c);
+ b.set((i+OFFSET), d);
+ }
+ }
+ static void test_ci_inv(AtomicIntegerArray a, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.set((i+k),-123);
+ }
+ }
+ static void test_vi_inv(AtomicIntegerArray a, int b, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.set((i+k), b);
+ }
+ }
+ static void test_cp_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.set((i+k), b.get(i+k));
+ }
+ }
+ static void test_2ci_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.set((i+k), -123);
+ b.set((i+k), -103);
+ }
+ }
+ static void test_2vi_inv(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ a.set((i+k), c);
+ b.set((i+k), d);
+ }
+ }
+ static void test_ci_scl(AtomicIntegerArray a, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.set((i*SCALE), -123);
+ }
+ }
+ static void test_vi_scl(AtomicIntegerArray a, int b, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.set((i*SCALE), b);
+ }
+ }
+ static void test_cp_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.set((i*SCALE), b.get(i*SCALE));
+ }
+ }
+ static void test_2ci_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.set((i*SCALE), -123);
+ b.set((i*SCALE), -103);
+ }
+ }
+ static void test_2vi_scl(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ a.set((i*SCALE), c);
+ b.set((i*SCALE), d);
+ }
+ }
+ static void test_cp_alndst(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.set((i+ALIGN_OFF), b.get(i));
+ }
+ }
+ static void test_cp_alnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.set(i, b.get(i+ALIGN_OFF));
+ }
+ }
+ static void test_2ci_aln(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.set((i+ALIGN_OFF), -123);
+ b.set(i, -103);
+ }
+ }
+ static void test_2vi_aln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ a.set(i, c);
+ b.set((i+ALIGN_OFF), d);
+ }
+ }
+ static void test_cp_unalndst(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.set((i+UNALIGN_OFF), b.get(i));
+ }
+ }
+ static void test_cp_unalnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.set(i, b.get(i+UNALIGN_OFF));
+ }
+ }
+ static void test_2ci_unaln(AtomicIntegerArray a, AtomicIntegerArray b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.set((i+UNALIGN_OFF), -123);
+ b.set(i, -103);
+ }
+ }
+ static void test_2vi_unaln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ a.set(i, c);
+ b.set((i+UNALIGN_OFF), d);
+ }
+ }
+
+ static int verify(String text, int i, int elem, int val) {
+ if (elem != val) {
+ System.err.println(text + "[" + i + "] = " + elem + " != " + val);
+ return 1;
+ }
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/8004867/TestIntUnsafeCAS.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,998 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8004867
+ * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
+ *
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntUnsafeCAS
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntUnsafeCAS
+ */
+
+import sun.misc.Unsafe;
+import java.lang.reflect.*;
+
+public class TestIntUnsafeCAS {
+ private static final int ARRLEN = 97;
+ private static final int ITERS = 11000;
+ private static final int OFFSET = 3;
+ private static final int SCALE = 2;
+ private static final int ALIGN_OFF = 8;
+ private static final int UNALIGN_OFF = 5;
+
+ private static final Unsafe unsafe;
+ private static final int BASE;
+ static {
+ try {
+ Class c = TestIntUnsafeCAS.class.getClassLoader().loadClass("sun.misc.Unsafe");
+ Field f = c.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ unsafe = (Unsafe)f.get(c);
+ BASE = unsafe.arrayBaseOffset(int[].class);
+ } catch (Exception e) {
+ InternalError err = new InternalError();
+ err.initCause(e);
+ throw err;
+ }
+ }
+
+ public static void main(String args[]) {
+ System.out.println("Testing Integer array unsafe CAS operations");
+ int errn = test(false);
+ if (errn > 0) {
+ System.err.println("FAILED: " + errn + " errors");
+ System.exit(97);
+ }
+ System.out.println("PASSED");
+ }
+
+ static int test(boolean test_only) {
+ int[] a1 = new int[ARRLEN];
+ int[] a2 = new int[ARRLEN];
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ System.out.println("Warmup");
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ test_vi(a2, 123, -1);
+ test_cp(a1, a2);
+ test_2ci(a1, a2);
+ test_2vi(a1, a2, 123, 103);
+ test_ci_neg(a1, 123);
+ test_vi_neg(a2, 123, 103);
+ test_cp_neg(a1, a2);
+ test_2ci_neg(a1, a2);
+ test_2vi_neg(a1, a2, 123, 103);
+ test_ci_oppos(a1, 123);
+ test_vi_oppos(a2, 123, 103);
+ test_cp_oppos(a1, a2);
+ test_2ci_oppos(a1, a2);
+ test_2vi_oppos(a1, a2, 123, 103);
+ test_ci_off(a1, 123);
+ test_vi_off(a2, 123, 103);
+ test_cp_off(a1, a2);
+ test_2ci_off(a1, a2);
+ test_2vi_off(a1, a2, 123, 103);
+ test_ci_inv(a1, OFFSET, 123);
+ test_vi_inv(a2, 123, OFFSET, 103);
+ test_cp_inv(a1, a2, OFFSET);
+ test_2ci_inv(a1, a2, OFFSET);
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ test_ci_scl(a1, 123);
+ test_vi_scl(a2, 123, 103);
+ test_cp_scl(a1, a2);
+ test_2ci_scl(a1, a2);
+ test_2vi_scl(a1, a2, 123, 103);
+ test_cp_alndst(a1, a2);
+ test_cp_alnsrc(a1, a2);
+ test_2ci_aln(a1, a2);
+ test_2vi_aln(a1, a2, 123, 103);
+ test_cp_unalndst(a1, a2);
+ test_cp_unalnsrc(a1, a2);
+ test_2ci_unaln(a1, a2);
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ // Test and verify results
+ System.out.println("Verification");
+ int errn = 0;
+ {
+ test_ci(a1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci: a1", i, a1[i], -123);
+ }
+ test_vi(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi: a2", i, a2[i], 123);
+ }
+ test_cp(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp: a1", i, a1[i], 123);
+ }
+ test_2ci(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci: a1", i, a1[i], -123);
+ errn += verify("test_2ci: a2", i, a2[i], -103);
+ }
+ test_2vi(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi: a1", i, a1[i], 123);
+ errn += verify("test_2vi: a2", i, a2[i], 103);
+ }
+ // Reset for negative stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_neg(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_neg: a1", i, a1[i], -123);
+ }
+ test_vi_neg(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_neg: a2", i, a2[i], 123);
+ }
+ test_cp_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_neg: a1", i, a1[i], 123);
+ }
+ test_2ci_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_neg: a1", i, a1[i], -123);
+ errn += verify("test_2ci_neg: a2", i, a2[i], -103);
+ }
+ test_2vi_neg(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_neg: a1", i, a1[i], 123);
+ errn += verify("test_2vi_neg: a2", i, a2[i], 103);
+ }
+ // Reset for opposite stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_oppos(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_oppos: a1", i, a1[i], -123);
+ }
+ test_vi_oppos(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_oppos: a2", i, a2[i], 123);
+ }
+ test_cp_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_oppos: a1", i, a1[i], 123);
+ }
+ test_2ci_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_oppos: a1", i, a1[i], -123);
+ errn += verify("test_2ci_oppos: a2", i, a2[i], -103);
+ }
+ test_2vi_oppos(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_oppos: a1", i, a1[i], 123);
+ errn += verify("test_2vi_oppos: a2", i, a2[i], 103);
+ }
+ // Reset for indexing with offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_off(a1, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_off: a1", i, a1[i], -123);
+ }
+ test_vi_off(a2, 123, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_off: a2", i, a2[i], 123);
+ }
+ test_cp_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_off: a1", i, a1[i], 123);
+ }
+ test_2ci_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_off: a1", i, a1[i], -123);
+ errn += verify("test_2ci_off: a2", i, a2[i], -103);
+ }
+ test_2vi_off(a1, a2, 123, 103);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_off: a1", i, a1[i], 123);
+ errn += verify("test_2vi_off: a2", i, a2[i], 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_off: a1", i, a1[i], -1);
+ errn += verify("test_2vi_off: a2", i, a2[i], -1);
+ }
+ // Reset for indexing with invariant offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_inv(a1, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_inv: a1", i, a1[i], -123);
+ }
+ test_vi_inv(a2, 123, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_inv: a2", i, a2[i], 123);
+ }
+ test_cp_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_inv: a1", i, a1[i], 123);
+ }
+ test_2ci_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_inv: a1", i, a1[i], -123);
+ errn += verify("test_2ci_inv: a2", i, a2[i], -103);
+ }
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1[i], 123);
+ errn += verify("test_2vi_inv: a2", i, a2[i], 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1[i], -1);
+ errn += verify("test_2vi_inv: a2", i, a2[i], -1);
+ }
+ // Reset for indexing with scale
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_scl(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : -123;
+ errn += verify("test_ci_scl: a1", i, a1[i], val);
+ }
+ test_vi_scl(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_vi_scl: a2", i, a2[i], val);
+ }
+ test_cp_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_cp_scl: a1", i, a1[i], val);
+ }
+ test_2ci_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a1", i, a1[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a1", i*SCALE, a1[i*SCALE], -123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a2", i, a2[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a2", i*SCALE, a2[i*SCALE], -103);
+ }
+ }
+ test_2vi_scl(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a1", i, a1[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a1", i*SCALE, a1[i*SCALE], 123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a2", i, a2[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a2", i*SCALE, a2[i*SCALE], 103);
+ }
+ }
+ // Reset for 2 arrays with relative aligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_vi(a2, 123, -1);
+ test_cp_alndst(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i] = 123;
+ }
+ test_vi(a2, -123, 123);
+ test_cp_alnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1[i], -123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2ci_aln(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2[i], -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2[i], -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2vi_aln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1[i], -1);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2[i], 103);
+ }
+
+ // Reset for 2 arrays with relative unaligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_vi(a2, 123, -1);
+ test_cp_unalndst(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1[i], 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_unalnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1[i], -123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2ci_unaln(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2[i], -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2[i], -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2vi_unaln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1[i], -1);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2[i], 103);
+ }
+
+ // Reset for aligned overlap initialization
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i] = i;
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_cp_alndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i+ALIGN_OFF] = -1;
+ }
+ test_cp_alnsrc(a1, a1);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2ci_aln(a1, a1);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1[i], -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2vi_aln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1[i], 103);
+ }
+
+ // Reset for unaligned overlap initialization
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1[i] = i;
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_cp_unalndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1[i+UNALIGN_OFF] = -1;
+ }
+ test_cp_unalnsrc(a1, a1);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2ci_unaln(a1, a1);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2vi_unaln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], 103);
+ }
+
+ }
+
+ if (errn > 0 || test_only)
+ return errn;
+
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ System.out.println("Time");
+ long start, end;
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi(a2, 123, -1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_neg(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_neg(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_neg(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_neg: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_oppos(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_oppos(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_oppos(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_oppos: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_off(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_off(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_off(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_off: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_inv(a1, OFFSET, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_inv(a2, 123, OFFSET, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_inv: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_scl(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_scl(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_scl(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_scl: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_aln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_aln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_aln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_aln: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_unaln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_unaln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_unaln: " + (end - start));
+
+ return errn;
+ }
+
+ private final static long byte_offset(int i) {
+ return ((long)i << 2) + BASE;
+ }
+
+ static void test_ci(int[] a) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -1, -123);
+ }
+ }
+ static void test_vi(int[] a, int b, int old) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, b);
+ }
+ }
+ static void test_cp(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -123, b[i]);
+ }
+ }
+ static void test_2ci(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), 123, -123);
+ unsafe.compareAndSwapInt(b, byte_offset(i), 123, -103);
+ }
+ }
+ static void test_2vi(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -123, c);
+ unsafe.compareAndSwapInt(b, byte_offset(i), -103, d);
+ }
+ }
+ static void test_ci_neg(int[] a, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, -123);
+ }
+ }
+ static void test_vi_neg(int[] a, int b, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, b);
+ }
+ }
+ static void test_cp_neg(int[] a, int[] b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -123, b[i]);
+ }
+ }
+ static void test_2ci_neg(int[] a, int[] b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), 123, -123);
+ unsafe.compareAndSwapInt(b, byte_offset(i), 123, -103);
+ }
+ }
+ static void test_2vi_neg(int[] a, int[] b, int c, int d) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -123, c);
+ unsafe.compareAndSwapInt(b, byte_offset(i), -103, d);
+ }
+ }
+ static void test_ci_oppos(int[] a, int old) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(limit-i), old, -123);
+ }
+ }
+ static void test_vi_oppos(int[] a, int b, int old) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(limit-i), old, b);
+ }
+ }
+ static void test_cp_oppos(int[] a, int[] b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -123, b[limit-i]);
+ }
+ }
+ static void test_2ci_oppos(int[] a, int[] b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(limit-i), 123, -123);
+ unsafe.compareAndSwapInt(b, byte_offset(i), 123, -103);
+ }
+ }
+ static void test_2vi_oppos(int[] a, int[] b, int c, int d) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i), -123, c);
+ unsafe.compareAndSwapInt(b, byte_offset(limit-i), -103, d);
+ }
+ }
+ static void test_ci_off(int[] a, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+OFFSET), old, -123);
+ }
+ }
+ static void test_vi_off(int[] a, int b, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+OFFSET), old, b);
+ }
+ }
+ static void test_cp_off(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+OFFSET), -123, b[i+OFFSET]);
+ }
+ }
+ static void test_2ci_off(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+OFFSET), 123, -123);
+ unsafe.compareAndSwapInt(b, byte_offset(i+OFFSET), 123, -103);
+ }
+ }
+ static void test_2vi_off(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+OFFSET), -123, c);
+ unsafe.compareAndSwapInt(b, byte_offset(i+OFFSET), -103, d);
+ }
+ }
+ static void test_ci_inv(int[] a, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+k), old, -123);
+ }
+ }
+ static void test_vi_inv(int[] a, int b, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+k), old, b);
+ }
+ }
+ static void test_cp_inv(int[] a, int[] b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+k), -123, b[i+k]);
+ }
+ }
+ static void test_2ci_inv(int[] a, int[] b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+k), 123, -123);
+ unsafe.compareAndSwapInt(b, byte_offset(i+k), 123, -103);
+ }
+ }
+ static void test_2vi_inv(int[] a, int[] b, int c, int d, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+k), -123, c);
+ unsafe.compareAndSwapInt(b, byte_offset(i+k), -103, d);
+ }
+ }
+ static void test_ci_scl(int[] a, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i*SCALE), old, -123);
+ }
+ }
+ static void test_vi_scl(int[] a, int b, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i*SCALE), old, b);
+ }
+ }
+ static void test_cp_scl(int[] a, int[] b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i*SCALE), -123, b[i*SCALE]);
+ }
+ }
+ static void test_2ci_scl(int[] a, int[] b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i*SCALE), 123, -123);
+ unsafe.compareAndSwapInt(b, byte_offset(i*SCALE), 123, -103);
+ }
+ }
+ static void test_2vi_scl(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i*SCALE), -123, c);
+ unsafe.compareAndSwapInt(b, byte_offset(i*SCALE), -103, d);
+ }
+ }
+ static void test_cp_alndst(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+ALIGN_OFF), -1, b[i]);
+ }
+ }
+ static void test_cp_alnsrc(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ int old = unsafe.getIntVolatile(a, byte_offset(i));
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, b[i+ALIGN_OFF]);
+ }
+ }
+ static void test_2ci_aln(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+ALIGN_OFF), -1, -123);
+ int old = unsafe.getIntVolatile(b, byte_offset(i));
+ unsafe.compareAndSwapInt(b, byte_offset(i), old, -103);
+ }
+ }
+ static void test_2vi_aln(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ int old = unsafe.getIntVolatile(a, byte_offset(i));
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, c);
+ old = unsafe.getIntVolatile(b, byte_offset(i+ALIGN_OFF));
+ unsafe.compareAndSwapInt(b, byte_offset(i+ALIGN_OFF), old, d);
+ }
+ }
+ static void test_cp_unalndst(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+UNALIGN_OFF), -1, b[i]);
+ }
+ }
+ static void test_cp_unalnsrc(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ int old = unsafe.getIntVolatile(a, byte_offset(i));
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, b[i+UNALIGN_OFF]);
+ }
+ }
+ static void test_2ci_unaln(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.compareAndSwapInt(a, byte_offset(i+UNALIGN_OFF), -1, -123);
+ int old = unsafe.getIntVolatile(b, byte_offset(i));
+ unsafe.compareAndSwapInt(b, byte_offset(i), old, -103);
+ }
+ }
+ static void test_2vi_unaln(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ int old = unsafe.getIntVolatile(a, byte_offset(i));
+ unsafe.compareAndSwapInt(a, byte_offset(i), old, c);
+ old = unsafe.getIntVolatile(b, byte_offset(i+UNALIGN_OFF));
+ unsafe.compareAndSwapInt(b, byte_offset(i+UNALIGN_OFF), old, d);
+ }
+ }
+
+ static int verify(String text, int i, int elem, int val) {
+ if (elem != val) {
+ System.err.println(text + "[" + i + "] = " + elem + " != " + val);
+ return 1;
+ }
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/8004867/TestIntUnsafeOrdered.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,990 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8004867
+ * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
+ *
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntUnsafeOrdered
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntUnsafeOrdered
+ */
+
+import sun.misc.Unsafe;
+import java.lang.reflect.*;
+
+public class TestIntUnsafeOrdered {
+ private static final int ARRLEN = 97;
+ private static final int ITERS = 11000;
+ private static final int OFFSET = 3;
+ private static final int SCALE = 2;
+ private static final int ALIGN_OFF = 8;
+ private static final int UNALIGN_OFF = 5;
+
+ private static final Unsafe unsafe;
+ private static final int BASE;
+ static {
+ try {
+ Class c = TestIntUnsafeOrdered.class.getClassLoader().loadClass("sun.misc.Unsafe");
+ Field f = c.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ unsafe = (Unsafe)f.get(c);
+ BASE = unsafe.arrayBaseOffset(int[].class);
+ } catch (Exception e) {
+ InternalError err = new InternalError();
+ err.initCause(e);
+ throw err;
+ }
+ }
+
+ public static void main(String args[]) {
+ System.out.println("Testing Integer array unsafe ordered operations");
+ int errn = test(false);
+ if (errn > 0) {
+ System.err.println("FAILED: " + errn + " errors");
+ System.exit(97);
+ }
+ System.out.println("PASSED");
+ }
+
+ static int test(boolean test_only) {
+ int[] a1 = new int[ARRLEN];
+ int[] a2 = new int[ARRLEN];
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ System.out.println("Warmup");
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ test_vi(a2, 123, -1);
+ test_cp(a1, a2);
+ test_2ci(a1, a2);
+ test_2vi(a1, a2, 123, 103);
+ test_ci_neg(a1, 123);
+ test_vi_neg(a2, 123, 103);
+ test_cp_neg(a1, a2);
+ test_2ci_neg(a1, a2);
+ test_2vi_neg(a1, a2, 123, 103);
+ test_ci_oppos(a1, 123);
+ test_vi_oppos(a2, 123, 103);
+ test_cp_oppos(a1, a2);
+ test_2ci_oppos(a1, a2);
+ test_2vi_oppos(a1, a2, 123, 103);
+ test_ci_off(a1, 123);
+ test_vi_off(a2, 123, 103);
+ test_cp_off(a1, a2);
+ test_2ci_off(a1, a2);
+ test_2vi_off(a1, a2, 123, 103);
+ test_ci_inv(a1, OFFSET, 123);
+ test_vi_inv(a2, 123, OFFSET, 103);
+ test_cp_inv(a1, a2, OFFSET);
+ test_2ci_inv(a1, a2, OFFSET);
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ test_ci_scl(a1, 123);
+ test_vi_scl(a2, 123, 103);
+ test_cp_scl(a1, a2);
+ test_2ci_scl(a1, a2);
+ test_2vi_scl(a1, a2, 123, 103);
+ test_cp_alndst(a1, a2);
+ test_cp_alnsrc(a1, a2);
+ test_2ci_aln(a1, a2);
+ test_2vi_aln(a1, a2, 123, 103);
+ test_cp_unalndst(a1, a2);
+ test_cp_unalnsrc(a1, a2);
+ test_2ci_unaln(a1, a2);
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ // Test and verify results
+ System.out.println("Verification");
+ int errn = 0;
+ {
+ test_ci(a1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci: a1", i, a1[i], -123);
+ }
+ test_vi(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi: a2", i, a2[i], 123);
+ }
+ test_cp(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp: a1", i, a1[i], 123);
+ }
+ test_2ci(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci: a1", i, a1[i], -123);
+ errn += verify("test_2ci: a2", i, a2[i], -103);
+ }
+ test_2vi(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi: a1", i, a1[i], 123);
+ errn += verify("test_2vi: a2", i, a2[i], 103);
+ }
+ // Reset for negative stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_neg(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_neg: a1", i, a1[i], -123);
+ }
+ test_vi_neg(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_neg: a2", i, a2[i], 123);
+ }
+ test_cp_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_neg: a1", i, a1[i], 123);
+ }
+ test_2ci_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_neg: a1", i, a1[i], -123);
+ errn += verify("test_2ci_neg: a2", i, a2[i], -103);
+ }
+ test_2vi_neg(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_neg: a1", i, a1[i], 123);
+ errn += verify("test_2vi_neg: a2", i, a2[i], 103);
+ }
+ // Reset for opposite stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_oppos(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_oppos: a1", i, a1[i], -123);
+ }
+ test_vi_oppos(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_oppos: a2", i, a2[i], 123);
+ }
+ test_cp_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_oppos: a1", i, a1[i], 123);
+ }
+ test_2ci_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_oppos: a1", i, a1[i], -123);
+ errn += verify("test_2ci_oppos: a2", i, a2[i], -103);
+ }
+ test_2vi_oppos(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_oppos: a1", i, a1[i], 123);
+ errn += verify("test_2vi_oppos: a2", i, a2[i], 103);
+ }
+ // Reset for indexing with offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_off(a1, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_off: a1", i, a1[i], -123);
+ }
+ test_vi_off(a2, 123, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_off: a2", i, a2[i], 123);
+ }
+ test_cp_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_off: a1", i, a1[i], 123);
+ }
+ test_2ci_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_off: a1", i, a1[i], -123);
+ errn += verify("test_2ci_off: a2", i, a2[i], -103);
+ }
+ test_2vi_off(a1, a2, 123, 103);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_off: a1", i, a1[i], 123);
+ errn += verify("test_2vi_off: a2", i, a2[i], 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_off: a1", i, a1[i], -1);
+ errn += verify("test_2vi_off: a2", i, a2[i], -1);
+ }
+ // Reset for indexing with invariant offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_inv(a1, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_inv: a1", i, a1[i], -123);
+ }
+ test_vi_inv(a2, 123, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_inv: a2", i, a2[i], 123);
+ }
+ test_cp_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_inv: a1", i, a1[i], 123);
+ }
+ test_2ci_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_inv: a1", i, a1[i], -123);
+ errn += verify("test_2ci_inv: a2", i, a2[i], -103);
+ }
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1[i], 123);
+ errn += verify("test_2vi_inv: a2", i, a2[i], 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1[i], -1);
+ errn += verify("test_2vi_inv: a2", i, a2[i], -1);
+ }
+ // Reset for indexing with scale
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_scl(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : -123;
+ errn += verify("test_ci_scl: a1", i, a1[i], val);
+ }
+ test_vi_scl(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_vi_scl: a2", i, a2[i], val);
+ }
+ test_cp_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_cp_scl: a1", i, a1[i], val);
+ }
+ test_2ci_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a1", i, a1[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a1", i*SCALE, a1[i*SCALE], -123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a2", i, a2[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a2", i*SCALE, a2[i*SCALE], -103);
+ }
+ }
+ test_2vi_scl(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a1", i, a1[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a1", i*SCALE, a1[i*SCALE], 123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a2", i, a2[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a2", i*SCALE, a2[i*SCALE], 103);
+ }
+ }
+ // Reset for 2 arrays with relative aligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_vi(a2, 123, -1);
+ test_cp_alndst(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i] = 123;
+ }
+ test_vi(a2, -123, 123);
+ test_cp_alnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1[i], -123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2ci_aln(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2[i], -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2[i], -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2vi_aln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1[i], -1);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2[i], 103);
+ }
+
+ // Reset for 2 arrays with relative unaligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_vi(a2, 123, -1);
+ test_cp_unalndst(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1[i], 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_unalnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1[i], -123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2ci_unaln(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2[i], -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2[i], -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2vi_unaln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1[i], -1);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2[i], 103);
+ }
+
+ // Reset for aligned overlap initialization
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i] = i;
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_cp_alndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i+ALIGN_OFF] = -1;
+ }
+ test_cp_alnsrc(a1, a1);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2ci_aln(a1, a1);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1[i], -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2vi_aln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1[i], 103);
+ }
+
+ // Reset for unaligned overlap initialization
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1[i] = i;
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_cp_unalndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1[i+UNALIGN_OFF] = -1;
+ }
+ test_cp_unalnsrc(a1, a1);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2ci_unaln(a1, a1);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2vi_unaln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], 103);
+ }
+
+ }
+
+ if (errn > 0 || test_only)
+ return errn;
+
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ System.out.println("Time");
+ long start, end;
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi(a2, 123, -1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_neg(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_neg(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_neg(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_neg: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_oppos(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_oppos(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_oppos(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_oppos: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_off(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_off(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_off(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_off: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_inv(a1, OFFSET, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_inv(a2, 123, OFFSET, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_inv: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_scl(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_scl(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_scl(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_scl: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_aln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_aln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_aln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_aln: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_unaln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_unaln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_unaln: " + (end - start));
+
+ return errn;
+ }
+
+ private final static long byte_offset(int i) {
+ return ((long)i << 2) + BASE;
+ }
+
+ static void test_ci(int[] a) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), -123);
+ }
+ }
+ static void test_vi(int[] a, int b, int old) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b);
+ }
+ }
+ static void test_cp(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b[i]);
+ }
+ }
+ static void test_2ci(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), -123);
+ unsafe.putOrderedInt(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), c);
+ unsafe.putOrderedInt(b, byte_offset(i), d);
+ }
+ }
+ static void test_ci_neg(int[] a, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), -123);
+ }
+ }
+ static void test_vi_neg(int[] a, int b, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b);
+ }
+ }
+ static void test_cp_neg(int[] a, int[] b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b[i]);
+ }
+ }
+ static void test_2ci_neg(int[] a, int[] b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), -123);
+ unsafe.putOrderedInt(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_neg(int[] a, int[] b, int c, int d) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), c);
+ unsafe.putOrderedInt(b, byte_offset(i), d);
+ }
+ }
+ static void test_ci_oppos(int[] a, int old) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(limit-i), -123);
+ }
+ }
+ static void test_vi_oppos(int[] a, int b, int old) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(limit-i), b);
+ }
+ }
+ static void test_cp_oppos(int[] a, int[] b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b[limit-i]);
+ }
+ }
+ static void test_2ci_oppos(int[] a, int[] b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(limit-i), -123);
+ unsafe.putOrderedInt(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_oppos(int[] a, int[] b, int c, int d) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), c);
+ unsafe.putOrderedInt(b, byte_offset(limit-i), d);
+ }
+ }
+ static void test_ci_off(int[] a, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+OFFSET), -123);
+ }
+ }
+ static void test_vi_off(int[] a, int b, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+OFFSET), b);
+ }
+ }
+ static void test_cp_off(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+OFFSET), b[i+OFFSET]);
+ }
+ }
+ static void test_2ci_off(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+OFFSET), -123);
+ unsafe.putOrderedInt(b, byte_offset(i+OFFSET), -103);
+ }
+ }
+ static void test_2vi_off(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+OFFSET), c);
+ unsafe.putOrderedInt(b, byte_offset(i+OFFSET), d);
+ }
+ }
+ static void test_ci_inv(int[] a, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+k), -123);
+ }
+ }
+ static void test_vi_inv(int[] a, int b, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+k), b);
+ }
+ }
+ static void test_cp_inv(int[] a, int[] b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+k), b[i+k]);
+ }
+ }
+ static void test_2ci_inv(int[] a, int[] b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+k), -123);
+ unsafe.putOrderedInt(b, byte_offset(i+k), -103);
+ }
+ }
+ static void test_2vi_inv(int[] a, int[] b, int c, int d, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+k), c);
+ unsafe.putOrderedInt(b, byte_offset(i+k), d);
+ }
+ }
+ static void test_ci_scl(int[] a, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i*SCALE), -123);
+ }
+ }
+ static void test_vi_scl(int[] a, int b, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i*SCALE), b);
+ }
+ }
+ static void test_cp_scl(int[] a, int[] b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i*SCALE), b[i*SCALE]);
+ }
+ }
+ static void test_2ci_scl(int[] a, int[] b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i*SCALE), -123);
+ unsafe.putOrderedInt(b, byte_offset(i*SCALE), -103);
+ }
+ }
+ static void test_2vi_scl(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i*SCALE), c);
+ unsafe.putOrderedInt(b, byte_offset(i*SCALE), d);
+ }
+ }
+ static void test_cp_alndst(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+ALIGN_OFF), b[i]);
+ }
+ }
+ static void test_cp_alnsrc(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b[i+ALIGN_OFF]);
+ }
+ }
+ static void test_2ci_aln(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+ALIGN_OFF), -123);
+ unsafe.putOrderedInt(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_aln(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), c);
+ unsafe.putOrderedInt(b, byte_offset(i+ALIGN_OFF), d);
+ }
+ }
+ static void test_cp_unalndst(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+UNALIGN_OFF), b[i]);
+ }
+ }
+ static void test_cp_unalnsrc(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), b[i+UNALIGN_OFF]);
+ }
+ }
+ static void test_2ci_unaln(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i+UNALIGN_OFF), -123);
+ unsafe.putOrderedInt(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_unaln(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putOrderedInt(a, byte_offset(i), c);
+ unsafe.putOrderedInt(b, byte_offset(i+UNALIGN_OFF), d);
+ }
+ }
+
+ static int verify(String text, int i, int elem, int val) {
+ if (elem != val) {
+ System.err.println(text + "[" + i + "] = " + elem + " != " + val);
+ return 1;
+ }
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/8004867/TestIntUnsafeVolatile.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,990 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8004867
+ * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
+ *
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntUnsafeVolatile
+ * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntUnsafeVolatile
+ */
+
+import sun.misc.Unsafe;
+import java.lang.reflect.*;
+
+public class TestIntUnsafeVolatile {
+ private static final int ARRLEN = 97;
+ private static final int ITERS = 11000;
+ private static final int OFFSET = 3;
+ private static final int SCALE = 2;
+ private static final int ALIGN_OFF = 8;
+ private static final int UNALIGN_OFF = 5;
+
+ private static final Unsafe unsafe;
+ private static final int BASE;
+ static {
+ try {
+ Class c = TestIntUnsafeVolatile.class.getClassLoader().loadClass("sun.misc.Unsafe");
+ Field f = c.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ unsafe = (Unsafe)f.get(c);
+ BASE = unsafe.arrayBaseOffset(int[].class);
+ } catch (Exception e) {
+ InternalError err = new InternalError();
+ err.initCause(e);
+ throw err;
+ }
+ }
+
+ public static void main(String args[]) {
+ System.out.println("Testing Integer array unsafe volatile operations");
+ int errn = test(false);
+ if (errn > 0) {
+ System.err.println("FAILED: " + errn + " errors");
+ System.exit(97);
+ }
+ System.out.println("PASSED");
+ }
+
+ static int test(boolean test_only) {
+ int[] a1 = new int[ARRLEN];
+ int[] a2 = new int[ARRLEN];
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ System.out.println("Warmup");
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ test_vi(a2, 123, -1);
+ test_cp(a1, a2);
+ test_2ci(a1, a2);
+ test_2vi(a1, a2, 123, 103);
+ test_ci_neg(a1, 123);
+ test_vi_neg(a2, 123, 103);
+ test_cp_neg(a1, a2);
+ test_2ci_neg(a1, a2);
+ test_2vi_neg(a1, a2, 123, 103);
+ test_ci_oppos(a1, 123);
+ test_vi_oppos(a2, 123, 103);
+ test_cp_oppos(a1, a2);
+ test_2ci_oppos(a1, a2);
+ test_2vi_oppos(a1, a2, 123, 103);
+ test_ci_off(a1, 123);
+ test_vi_off(a2, 123, 103);
+ test_cp_off(a1, a2);
+ test_2ci_off(a1, a2);
+ test_2vi_off(a1, a2, 123, 103);
+ test_ci_inv(a1, OFFSET, 123);
+ test_vi_inv(a2, 123, OFFSET, 103);
+ test_cp_inv(a1, a2, OFFSET);
+ test_2ci_inv(a1, a2, OFFSET);
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ test_ci_scl(a1, 123);
+ test_vi_scl(a2, 123, 103);
+ test_cp_scl(a1, a2);
+ test_2ci_scl(a1, a2);
+ test_2vi_scl(a1, a2, 123, 103);
+ test_cp_alndst(a1, a2);
+ test_cp_alnsrc(a1, a2);
+ test_2ci_aln(a1, a2);
+ test_2vi_aln(a1, a2, 123, 103);
+ test_cp_unalndst(a1, a2);
+ test_cp_unalnsrc(a1, a2);
+ test_2ci_unaln(a1, a2);
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ // Test and verify results
+ System.out.println("Verification");
+ int errn = 0;
+ {
+ test_ci(a1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci: a1", i, a1[i], -123);
+ }
+ test_vi(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi: a2", i, a2[i], 123);
+ }
+ test_cp(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp: a1", i, a1[i], 123);
+ }
+ test_2ci(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci: a1", i, a1[i], -123);
+ errn += verify("test_2ci: a2", i, a2[i], -103);
+ }
+ test_2vi(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi: a1", i, a1[i], 123);
+ errn += verify("test_2vi: a2", i, a2[i], 103);
+ }
+ // Reset for negative stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_neg(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_neg: a1", i, a1[i], -123);
+ }
+ test_vi_neg(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_neg: a2", i, a2[i], 123);
+ }
+ test_cp_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_neg: a1", i, a1[i], 123);
+ }
+ test_2ci_neg(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_neg: a1", i, a1[i], -123);
+ errn += verify("test_2ci_neg: a2", i, a2[i], -103);
+ }
+ test_2vi_neg(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_neg: a1", i, a1[i], 123);
+ errn += verify("test_2vi_neg: a2", i, a2[i], 103);
+ }
+ // Reset for opposite stride
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_oppos(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_ci_oppos: a1", i, a1[i], -123);
+ }
+ test_vi_oppos(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_vi_oppos: a2", i, a2[i], 123);
+ }
+ test_cp_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_cp_oppos: a1", i, a1[i], 123);
+ }
+ test_2ci_oppos(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2ci_oppos: a1", i, a1[i], -123);
+ errn += verify("test_2ci_oppos: a2", i, a2[i], -103);
+ }
+ test_2vi_oppos(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ errn += verify("test_2vi_oppos: a1", i, a1[i], 123);
+ errn += verify("test_2vi_oppos: a2", i, a2[i], 103);
+ }
+ // Reset for indexing with offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_off(a1, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_off: a1", i, a1[i], -123);
+ }
+ test_vi_off(a2, 123, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_off: a2", i, a2[i], 123);
+ }
+ test_cp_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_off: a1", i, a1[i], 123);
+ }
+ test_2ci_off(a1, a2);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_off: a1", i, a1[i], -123);
+ errn += verify("test_2ci_off: a2", i, a2[i], -103);
+ }
+ test_2vi_off(a1, a2, 123, 103);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_off: a1", i, a1[i], 123);
+ errn += verify("test_2vi_off: a2", i, a2[i], 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_off: a1", i, a1[i], -1);
+ errn += verify("test_2vi_off: a2", i, a2[i], -1);
+ }
+ // Reset for indexing with invariant offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_inv(a1, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_ci_inv: a1", i, a1[i], -123);
+ }
+ test_vi_inv(a2, 123, OFFSET, -1);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_vi_inv: a2", i, a2[i], 123);
+ }
+ test_cp_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_cp_inv: a1", i, a1[i], 123);
+ }
+ test_2ci_inv(a1, a2, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2ci_inv: a1", i, a1[i], -123);
+ errn += verify("test_2ci_inv: a2", i, a2[i], -103);
+ }
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ for (int i=OFFSET; i<ARRLEN; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1[i], 123);
+ errn += verify("test_2vi_inv: a2", i, a2[i], 103);
+ }
+ for (int i=0; i<OFFSET; i++) {
+ errn += verify("test_2vi_inv: a1", i, a1[i], -1);
+ errn += verify("test_2vi_inv: a2", i, a2[i], -1);
+ }
+ // Reset for indexing with scale
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_ci_scl(a1, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : -123;
+ errn += verify("test_ci_scl: a1", i, a1[i], val);
+ }
+ test_vi_scl(a2, 123, -1);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_vi_scl: a2", i, a2[i], val);
+ }
+ test_cp_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ int val = (i%SCALE != 0) ? -1 : 123;
+ errn += verify("test_cp_scl: a1", i, a1[i], val);
+ }
+ test_2ci_scl(a1, a2);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a1", i, a1[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a1", i*SCALE, a1[i*SCALE], -123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2ci_scl: a2", i, a2[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2ci_scl: a2", i*SCALE, a2[i*SCALE], -103);
+ }
+ }
+ test_2vi_scl(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN; i++) {
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a1", i, a1[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a1", i*SCALE, a1[i*SCALE], 123);
+ }
+ if (i%SCALE != 0) {
+ errn += verify("test_2vi_scl: a2", i, a2[i], -1);
+ } else if (i*SCALE < ARRLEN) {
+ errn += verify("test_2vi_scl: a2", i*SCALE, a2[i*SCALE], 103);
+ }
+ }
+ // Reset for 2 arrays with relative aligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_vi(a2, 123, -1);
+ test_cp_alndst(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alndst: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i] = 123;
+ }
+ test_vi(a2, -123, 123);
+ test_cp_alnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1[i], -123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_alnsrc: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2ci_aln(a1, a2);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2[i], -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln: a2", i, a2[i], -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2vi_aln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a1", i, a1[i], -1);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln: a2", i, a2[i], 103);
+ }
+
+ // Reset for 2 arrays with relative unaligned offset
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_vi(a2, 123, -1);
+ test_cp_unalndst(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalndst: a1", i, a1[i], 123);
+ }
+ test_vi(a2, -123, 123);
+ test_cp_unalnsrc(a1, a2);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1[i], -123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_cp_unalnsrc: a1", i, a1[i], 123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2ci_unaln(a1, a2);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2[i], -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln: a2", i, a2[i], -1);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ test_2vi_unaln(a1, a2, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a1", i, a1[i], -1);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln: a2", i, a2[i], 103);
+ }
+
+ // Reset for aligned overlap initialization
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i] = i;
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_cp_alndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ALIGN_OFF; i++) {
+ a1[i+ALIGN_OFF] = -1;
+ }
+ test_cp_alnsrc(a1, a1);
+ for (int i=0; i<ALIGN_OFF; i++) {
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], -1);
+ }
+ for (int i=ALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%ALIGN_OFF;
+ errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2ci_aln(a1, a1);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1[i], -103);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_aln_overlap: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2vi_aln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_aln_overlap: a1", i, a1[i], 103);
+ }
+
+ // Reset for unaligned overlap initialization
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1[i] = i;
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_cp_unalndst(a1, a1);
+ for (int i=0; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ a1[i+UNALIGN_OFF] = -1;
+ }
+ test_cp_unalnsrc(a1, a1);
+ for (int i=0; i<UNALIGN_OFF; i++) {
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], -1);
+ }
+ for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
+ int v = i%UNALIGN_OFF;
+ errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2ci_unaln(a1, a1);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], -103);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], -123);
+ }
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ }
+ test_2vi_unaln(a1, a1, 123, 103);
+ for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], 123);
+ }
+ for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
+ errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], 103);
+ }
+
+ }
+
+ if (errn > 0 || test_only)
+ return errn;
+
+ // Initialize
+ for (int i=0; i<ARRLEN; i++) {
+ a1[i] = -1;
+ a2[i] = -1;
+ }
+ System.out.println("Time");
+ long start, end;
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci(a1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi(a2, 123, -1);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_neg(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_neg(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_neg(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_neg: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_neg(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_neg: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_oppos(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_oppos(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_oppos(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_oppos: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_oppos(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_oppos: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_off(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_off(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_off(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_off: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_off(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_off: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_inv(a1, OFFSET, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_inv(a2, 123, OFFSET, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_inv(a1, a2, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_inv: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_inv(a1, a2, 123, 103, OFFSET);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_inv: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_ci_scl(a1, 123);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_vi_scl(a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_vi_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_scl(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_scl: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_scl(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_scl: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_alnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_alnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_aln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_aln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_aln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_aln: " + (end - start));
+
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalndst(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalndst: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_cp_unalnsrc(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_cp_unalnsrc: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2ci_unaln(a1, a2);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2ci_unaln: " + (end - start));
+ start = System.currentTimeMillis();
+ for (int i=0; i<ITERS; i++) {
+ test_2vi_unaln(a1, a2, 123, 103);
+ }
+ end = System.currentTimeMillis();
+ System.out.println("test_2vi_unaln: " + (end - start));
+
+ return errn;
+ }
+
+ private final static long byte_offset(int i) {
+ return ((long)i << 2) + BASE;
+ }
+
+ static void test_ci(int[] a) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), -123);
+ }
+ }
+ static void test_vi(int[] a, int b, int old) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b);
+ }
+ }
+ static void test_cp(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b[i]);
+ }
+ }
+ static void test_2ci(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), -123);
+ unsafe.putIntVolatile(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), c);
+ unsafe.putIntVolatile(b, byte_offset(i), d);
+ }
+ }
+ static void test_ci_neg(int[] a, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), -123);
+ }
+ }
+ static void test_vi_neg(int[] a, int b, int old) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b);
+ }
+ }
+ static void test_cp_neg(int[] a, int[] b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b[i]);
+ }
+ }
+ static void test_2ci_neg(int[] a, int[] b) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), -123);
+ unsafe.putIntVolatile(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_neg(int[] a, int[] b, int c, int d) {
+ for (int i = ARRLEN-1; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), c);
+ unsafe.putIntVolatile(b, byte_offset(i), d);
+ }
+ }
+ static void test_ci_oppos(int[] a, int old) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(limit-i), -123);
+ }
+ }
+ static void test_vi_oppos(int[] a, int b, int old) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(limit-i), b);
+ }
+ }
+ static void test_cp_oppos(int[] a, int[] b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b[limit-i]);
+ }
+ }
+ static void test_2ci_oppos(int[] a, int[] b) {
+ int limit = ARRLEN-1;
+ for (int i = 0; i < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(limit-i), -123);
+ unsafe.putIntVolatile(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_oppos(int[] a, int[] b, int c, int d) {
+ int limit = ARRLEN-1;
+ for (int i = limit; i >= 0; i-=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), c);
+ unsafe.putIntVolatile(b, byte_offset(limit-i), d);
+ }
+ }
+ static void test_ci_off(int[] a, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+OFFSET), -123);
+ }
+ }
+ static void test_vi_off(int[] a, int b, int old) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+OFFSET), b);
+ }
+ }
+ static void test_cp_off(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+OFFSET), b[i+OFFSET]);
+ }
+ }
+ static void test_2ci_off(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+OFFSET), -123);
+ unsafe.putIntVolatile(b, byte_offset(i+OFFSET), -103);
+ }
+ }
+ static void test_2vi_off(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+OFFSET), c);
+ unsafe.putIntVolatile(b, byte_offset(i+OFFSET), d);
+ }
+ }
+ static void test_ci_inv(int[] a, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+k), -123);
+ }
+ }
+ static void test_vi_inv(int[] a, int b, int k, int old) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+k), b);
+ }
+ }
+ static void test_cp_inv(int[] a, int[] b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+k), b[i+k]);
+ }
+ }
+ static void test_2ci_inv(int[] a, int[] b, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+k), -123);
+ unsafe.putIntVolatile(b, byte_offset(i+k), -103);
+ }
+ }
+ static void test_2vi_inv(int[] a, int[] b, int c, int d, int k) {
+ for (int i = 0; i < ARRLEN-k; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+k), c);
+ unsafe.putIntVolatile(b, byte_offset(i+k), d);
+ }
+ }
+ static void test_ci_scl(int[] a, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i*SCALE), -123);
+ }
+ }
+ static void test_vi_scl(int[] a, int b, int old) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i*SCALE), b);
+ }
+ }
+ static void test_cp_scl(int[] a, int[] b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i*SCALE), b[i*SCALE]);
+ }
+ }
+ static void test_2ci_scl(int[] a, int[] b) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i*SCALE), -123);
+ unsafe.putIntVolatile(b, byte_offset(i*SCALE), -103);
+ }
+ }
+ static void test_2vi_scl(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i*SCALE < ARRLEN; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i*SCALE), c);
+ unsafe.putIntVolatile(b, byte_offset(i*SCALE), d);
+ }
+ }
+ static void test_cp_alndst(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+ALIGN_OFF), b[i]);
+ }
+ }
+ static void test_cp_alnsrc(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b[i+ALIGN_OFF]);
+ }
+ }
+ static void test_2ci_aln(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+ALIGN_OFF), -123);
+ unsafe.putIntVolatile(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_aln(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), c);
+ unsafe.putIntVolatile(b, byte_offset(i+ALIGN_OFF), d);
+ }
+ }
+ static void test_cp_unalndst(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+UNALIGN_OFF), b[i]);
+ }
+ }
+ static void test_cp_unalnsrc(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), b[i+UNALIGN_OFF]);
+ }
+ }
+ static void test_2ci_unaln(int[] a, int[] b) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i+UNALIGN_OFF), -123);
+ unsafe.putIntVolatile(b, byte_offset(i), -103);
+ }
+ }
+ static void test_2vi_unaln(int[] a, int[] b, int c, int d) {
+ for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
+ unsafe.putIntVolatile(a, byte_offset(i), c);
+ unsafe.putIntVolatile(b, byte_offset(i+UNALIGN_OFF), d);
+ }
+ }
+
+ static int verify(String text, int i, int elem, int val) {
+ if (elem != val) {
+ System.err.println(text + "[" + i + "] = " + elem + " != " + val);
+ return 1;
+ }
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/8000311/Test8000311.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test Test8000311
+ * @key gc
+ * @bug 8000311
+ * @summary G1: ParallelGCThreads==0 broken
+ * @run main/othervm -XX:+UseG1GC -XX:ParallelGCThreads=0 -XX:+ResizePLAB -XX:+ExplicitGCInvokesConcurrent Test8000311
+ * @author filipp.zhinkin@oracle.com
+ */
+
+import java.util.*;
+
+public class Test8000311 {
+ public static void main(String args[]) {
+ for(int i = 0; i<100; i++) {
+ byte[] garbage = new byte[1000];
+ System.gc();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/TestG1ZeroPGCTJcmdThreadPrint.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test TestG1ZeroPGCTJcmdThreadPrint
+ * @key gc
+ * @bug 8005875
+ * @summary Use jcmd to generate a thread dump of a Java program being run with PGCT=0 to verify 8005875
+ * @library /testlibrary
+ * @run main/othervm -XX:+UseG1GC -XX:ParallelGCThreads=0 -XX:+IgnoreUnrecognizedVMOptions TestG1ZeroPGCTJcmdThreadPrint
+ */
+
+import com.oracle.java.testlibrary.*;
+
+public class TestG1ZeroPGCTJcmdThreadPrint {
+ public static void main(String args[]) throws Exception {
+
+ // Grab the pid from the current java process
+ String pid = Integer.toString(ProcessTools.getProcessId());
+
+ // Create a ProcessBuilder
+ ProcessBuilder pb = new ProcessBuilder();
+
+ // Run jcmd <pid> Thread.print
+ pb.command(JDKToolFinder.getJDKTool("jcmd"), pid, "Thread.print");
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ // There shouldn't be a work gang for concurrent marking.
+ output.shouldNotContain("G1 Parallel Marking Threads");
+
+ // Make sure we didn't crash
+ output.shouldHaveExitValue(0);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestCMS.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestCMS
+* @key gc
+* @bug 8006398
+* @summary Test that CMS does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestCMS {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseConcMarkSweepGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestCMSIncrementalMode.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestCMSIncrementalMode
+* @key gc
+* @bug 8006398
+* @summary Test that the deprecated CMSIncrementalMode print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+public class TestCMSIncrementalMode {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseConcMarkSweepGC", "-XX:+CMSIncrementalMode", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("warning: Using incremental CMS is deprecated and will likely be removed in a future release");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestCMSNoIncrementalMode.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestCMSNoIncrementalMode
+* @key gc
+* @bug 8006398
+* @summary Test that CMS with incremental mode turned off does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+public class TestCMSNoIncrementalMode {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseConcMarkSweepGC", "-XX:-CMSIncrementalMode", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestDefNewCMS.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestDefNewCMS
+* @key gc
+* @bug 8006398
+* @summary Test that the deprecated DefNew+CMS combination print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+public class TestDefNewCMS {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:-UseParNewGC", "-XX:+UseConcMarkSweepGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestG1.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestG1
+* @key gc
+* @bug 8006398
+* @summary Test that the G1 collector does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+public class TestG1 {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestIncGC.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestIncGC
+* @key gc
+* @bug 8006398
+* @summary Test that the deprecated -Xincgc print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestIncGC {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xincgc", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("warning: Using incremental CMS is deprecated and will likely be removed in a future release");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestParNewCMS.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestParNewCMS
+* @key gc
+* @bug 8006398
+* @summary Test that the combination ParNew+CMS does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestParNewCMS {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParNewGC", "-XX:+UseConcMarkSweepGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestParNewSerialOld.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestParNewSerialOld
+* @key gc
+* @bug 8006398
+* @summary Test that the deprecated ParNew+SerialOld combination print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestParNewSerialOld {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParNewGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("warning: Using the ParNew young collector with the Serial old collector is deprecated and will likely be removed in a future release");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestParallelGC.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestParallelGC
+* @key gc
+* @bug 8006398
+* @summary Test that ParallelGC does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestParallelGC {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParallelGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestParallelScavengeSerialOld.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestParallelScavengeSerialOld
+* @key gc
+* @bug 8006398
+* @summary Test that the ParallelScavenge+SerialOld combination does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestParallelScavengeSerialOld {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParallelGC", "-XX:-UseParallelOldGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/startup_warnings/TestSerialGC.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+* or visit www.oracle.com if you need additional information or have any
+* questions.
+*/
+
+/*
+* @test TestSerialGC
+* @key gc
+* @bug 8006398
+* @summary Test that SerialGC does not print a warning message
+* @library /testlibrary
+*/
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class TestSerialGC {
+
+ public static void main(String args[]) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseSerialGC", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("warning");
+ output.shouldNotContain("error");
+ output.shouldHaveExitValue(0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/8007736/TestStaticIF.java Tue Mar 05 11:46:02 2013 -0800
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8007736
+ * @summary Test static interface method.
+ * @run main/othervm -Xverify:all TestStaticIF
+ */
+
+public class TestStaticIF implements StaticMethodInInterface {
+
+ public static void main(String[] args) {
+ System.out.printf("main: %s%n", StaticMethodInInterface.get());
+ }
+}
+
+interface StaticMethodInInterface {
+
+ public static String get() {
+ return "Hello from StaticMethodInInterface.get()";
+ }
+}
--- a/jaxp/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/jaxp/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,4 @@
ff0b73a6b3f6cea644d37d56d746a37743419fa7 jdk8-b75
0c08593944d0cd30645f6e1e4946c51ff2b10c8c jdk8-b76
573e789c187a69a3ae00bffd26eb35c0f4a60636 jdk8-b77
+00958c5a7070bd578aa8b70773cb3f204a9c1be1 jdk8-b78
--- a/jaxws/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/jaxws/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,4 @@
966bf9f3c41a59ff5d86ff4275291c52f329f984 jdk8-b75
c4853f3f0e89ac60aa5b517f5f224f0f60e08577 jdk8-b76
64dfba1bad16433f609f17a42c3c5990367c5c0b jdk8-b77
+391de4c992d1960a09cdd340362ff936bac69323 jdk8-b78
--- a/jdk/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/jdk/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,4 @@
4a67fdb752b7d6329d9be9c28d3f9d6cf7eb9a3c jdk8-b75
3a263052866137b645ab86498a43693ff5c19e69 jdk8-b76
b2fc8e31cecc35b76188e821d4c5dc0e0b74ac24 jdk8-b77
+00b7535d743f83eda763c10b3c9ea19ba4b67f55 jdk8-b78
--- a/jdk/make/sun/lwawt/FILES_export_macosx.gmk Tue Feb 26 09:25:44 2013 -0800
+++ b/jdk/make/sun/lwawt/FILES_export_macosx.gmk Tue Mar 05 11:46:02 2013 -0800
@@ -122,7 +122,6 @@
sun/lwawt/macosx/CTextPipe.java \
sun/lwawt/macosx/CDesktopPeer.java \
sun/java2d/CRenderer.java \
- sun/lwawt/macosx/EventDispatchAccess.java \
sun/lwawt/macosx/NSPrintInfo.java \
sun/lwawt/macosx/CAccessibility.java \
sun/lwawt/macosx/CAccessible.java \
--- a/langtools/.hgtags Tue Feb 26 09:25:44 2013 -0800
+++ b/langtools/.hgtags Tue Mar 05 11:46:02 2013 -0800
@@ -199,3 +199,4 @@
c2e11e2ec4a3682513e566849e5562f31ded8c65 jdk8-b75
e81839b3233792415daaab051698edc6067f1a16 jdk8-b76
89c66415168925dffe492356ff893ff248bb5603 jdk8-b77
+af8417e590f4e76e0dfed09e71239fb102ef0d43 jdk8-b78