This commit is contained in:
J. Duke 2017-07-05 23:33:00 +02:00
commit 360e24d6ba
253 changed files with 3095 additions and 3523 deletions

View File

@ -420,6 +420,7 @@ ba5b16c9c6d80632b61959a33d424b1c3398ce62 jdk-9+166
03fe61bb7670644cf6e46b5cfafb6b27c0e0157e jdk-10+6
b25838a28195f4b6dab34668411eedd2d366a16c jdk-9+169
4d163ec59d989a9261ed7f848bc6303f90869af5 jdk-9+170
aa3c97810d7c484c93a2fd75d3c76ff574deb6d8 jdk-10+7
df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8
b94be69cbb1d2943b886bf2d458745756df146e4 jdk-10+9
4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171

View File

@ -651,7 +651,7 @@ MKDIR:=@MKDIR@
MV:=@MV@
NAWK:=@NAWK@
NICE:=@NICE@
PANDOC:=@PANDOC@
PANDOC:=@FIXPATH@ @PANDOC@
PATCH:=@PATCH@
PRINTF:=@PRINTF@
RM:=@RM@

View File

@ -1,21 +1,23 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>OpenJDK Build README</title>
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
<link rel="stylesheet" href="../../jdk/make/data/docs-resources/specs/resources/jdk-default.css">
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<div id="header">
<header>
<h1 class="title">OpenJDK Build README</h1>
</div>
<div class="figure">
<img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" />
<p class="caption">OpenJDK</p>
</div>
</header>
<figure>
<img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" /><figcaption>OpenJDK</figcaption>
</figure>
<hr />
<h2 id="introduction">Introduction</h2>
<p>This README file contains build instructions for the <a href="http://openjdk.java.net">OpenJDK</a>. Building the source code for the OpenJDK requires a certain degree of technical expertise.</p>
@ -149,50 +151,50 @@
<table>
<thead>
<tr class="header">
<th align="left">Package</th>
<th align="left">Version</th>
<th style="text-align: left;">Package</th>
<th style="text-align: left;">Version</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">developer/solarisstudio-124/backend</td>
<td align="left">12.4-1.0.6.0</td>
<td style="text-align: left;">developer/solarisstudio-124/backend</td>
<td style="text-align: left;">12.4-1.0.6.0</td>
</tr>
<tr class="even">
<td align="left">developer/solarisstudio-124/c++</td>
<td align="left">12.4-1.0.10.0</td>
<td style="text-align: left;">developer/solarisstudio-124/c++</td>
<td style="text-align: left;">12.4-1.0.10.0</td>
</tr>
<tr class="odd">
<td align="left">developer/solarisstudio-124/cc</td>
<td align="left">12.4-1.0.4.0</td>
<td style="text-align: left;">developer/solarisstudio-124/cc</td>
<td style="text-align: left;">12.4-1.0.4.0</td>
</tr>
<tr class="even">
<td align="left">developer/solarisstudio-124/library/c++-libs</td>
<td align="left">12.4-1.0.10.0</td>
<td style="text-align: left;">developer/solarisstudio-124/library/c++-libs</td>
<td style="text-align: left;">12.4-1.0.10.0</td>
</tr>
<tr class="odd">
<td align="left">developer/solarisstudio-124/library/math-libs</td>
<td align="left">12.4-1.0.0.1</td>
<td style="text-align: left;">developer/solarisstudio-124/library/math-libs</td>
<td style="text-align: left;">12.4-1.0.0.1</td>
</tr>
<tr class="even">
<td align="left">developer/solarisstudio-124/library/studio-gccrt</td>
<td align="left">12.4-1.0.0.1</td>
<td style="text-align: left;">developer/solarisstudio-124/library/studio-gccrt</td>
<td style="text-align: left;">12.4-1.0.0.1</td>
</tr>
<tr class="odd">
<td align="left">developer/solarisstudio-124/studio-common</td>
<td align="left">12.4-1.0.0.1</td>
<td style="text-align: left;">developer/solarisstudio-124/studio-common</td>
<td style="text-align: left;">12.4-1.0.0.1</td>
</tr>
<tr class="even">
<td align="left">developer/solarisstudio-124/studio-ja</td>
<td align="left">12.4-1.0.0.1</td>
<td style="text-align: left;">developer/solarisstudio-124/studio-ja</td>
<td style="text-align: left;">12.4-1.0.0.1</td>
</tr>
<tr class="odd">
<td align="left">developer/solarisstudio-124/studio-legal</td>
<td align="left">12.4-1.0.0.1</td>
<td style="text-align: left;">developer/solarisstudio-124/studio-legal</td>
<td style="text-align: left;">12.4-1.0.0.1</td>
</tr>
<tr class="even">
<td align="left">developer/solarisstudio-124/studio-zhCN</td>
<td align="left">12.4-1.0.0.1</td>
<td style="text-align: left;">developer/solarisstudio-124/studio-zhCN</td>
<td style="text-align: left;">12.4-1.0.0.1</td>
</tr>
</tbody>
</table>
@ -211,66 +213,66 @@
<table>
<thead>
<tr class="header">
<th align="left">Binary Name</th>
<th align="left">Category</th>
<th align="left">Package</th>
<th align="left">Description</th>
<th style="text-align: left;">Binary Name</th>
<th style="text-align: left;">Category</th>
<th style="text-align: left;">Package</th>
<th style="text-align: left;">Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">ar.exe</td>
<td align="left">Devel</td>
<td align="left">binutils</td>
<td align="left">The GNU assembler, linker and binary utilities</td>
<td style="text-align: left;">ar.exe</td>
<td style="text-align: left;">Devel</td>
<td style="text-align: left;">binutils</td>
<td style="text-align: left;">The GNU assembler, linker and binary utilities</td>
</tr>
<tr class="even">
<td align="left">make.exe</td>
<td align="left">Devel</td>
<td align="left">make</td>
<td align="left">The GNU version of the 'make' utility built for CYGWIN</td>
<td style="text-align: left;">make.exe</td>
<td style="text-align: left;">Devel</td>
<td style="text-align: left;">make</td>
<td style="text-align: left;">The GNU version of the 'make' utility built for CYGWIN</td>
</tr>
<tr class="odd">
<td align="left">m4.exe</td>
<td align="left">Interpreters</td>
<td align="left">m4</td>
<td align="left">GNU implementation of the traditional Unix macro processor</td>
<td style="text-align: left;">m4.exe</td>
<td style="text-align: left;">Interpreters</td>
<td style="text-align: left;">m4</td>
<td style="text-align: left;">GNU implementation of the traditional Unix macro processor</td>
</tr>
<tr class="even">
<td align="left">cpio.exe</td>
<td align="left">Utils</td>
<td align="left">cpio</td>
<td align="left">A program to manage archives of files</td>
<td style="text-align: left;">cpio.exe</td>
<td style="text-align: left;">Utils</td>
<td style="text-align: left;">cpio</td>
<td style="text-align: left;">A program to manage archives of files</td>
</tr>
<tr class="odd">
<td align="left">gawk.exe</td>
<td align="left">Utils</td>
<td align="left">awk</td>
<td align="left">Pattern-directed scanning and processing language</td>
<td style="text-align: left;">gawk.exe</td>
<td style="text-align: left;">Utils</td>
<td style="text-align: left;">awk</td>
<td style="text-align: left;">Pattern-directed scanning and processing language</td>
</tr>
<tr class="even">
<td align="left">file.exe</td>
<td align="left">Utils</td>
<td align="left">file</td>
<td align="left">Determines file type using 'magic' numbers</td>
<td style="text-align: left;">file.exe</td>
<td style="text-align: left;">Utils</td>
<td style="text-align: left;">file</td>
<td style="text-align: left;">Determines file type using 'magic' numbers</td>
</tr>
<tr class="odd">
<td align="left">zip.exe</td>
<td align="left">Archive</td>
<td align="left">zip</td>
<td align="left">Package and compress (archive) files</td>
<td style="text-align: left;">zip.exe</td>
<td style="text-align: left;">Archive</td>
<td style="text-align: left;">zip</td>
<td style="text-align: left;">Package and compress (archive) files</td>
</tr>
<tr class="even">
<td align="left">unzip.exe</td>
<td align="left">Archive</td>
<td align="left">unzip</td>
<td align="left">Extract compressed files in a ZIP archive</td>
<td style="text-align: left;">unzip.exe</td>
<td style="text-align: left;">Archive</td>
<td style="text-align: left;">unzip</td>
<td style="text-align: left;">Extract compressed files in a ZIP archive</td>
</tr>
<tr class="odd">
<td align="left">free.exe</td>
<td align="left">System</td>
<td align="left">procps</td>
<td align="left">Display amount of free and used memory in the system</td>
<td style="text-align: left;">free.exe</td>
<td style="text-align: left;">System</td>
<td style="text-align: left;">procps</td>
<td style="text-align: left;">Display amount of free and used memory in the system</td>
</tr>
</tbody>
</table>
@ -561,14 +563,14 @@ This is caused by a missing libstdc++.a library. This is installed as part of a
This is probably an issue with SELinux (See <a href="http://en.wikipedia.org/wiki/SELinux">SELinux on Wikipedia</a>). Parts of the VM is built without the <code>-fPIC</code> for performance reasons.</p></li>
</ul>
<p>To completely disable SELinux:</p>
<ol style="list-style-type: decimal">
<ol type="1">
<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.</p>
<ol style="list-style-type: decimal">
<ol type="1">
<li>Select System-&gt;Administration-&gt;SELinux Management</li>
<li>In the SELinux Management Tool which appears, select &quot;Boolean&quot; from the menu on the left</li>
<li>Expand the &quot;Memory Protection&quot; group</li>
@ -616,62 +618,62 @@ Try rebooting the system, or there could be some kind of issue with the disk or
<table>
<thead>
<tr class="header">
<th align="left">Base OS and Architecture</th>
<th align="left">OS</th>
<th align="left">C/C++ Compiler</th>
<th align="left">Processors</th>
<th align="left">RAM Minimum</th>
<th align="left">DISK Needs</th>
<th style="text-align: left;">Base OS and Architecture</th>
<th style="text-align: left;">OS</th>
<th style="text-align: left;">C/C++ Compiler</th>
<th style="text-align: left;">Processors</th>
<th style="text-align: left;">RAM Minimum</th>
<th style="text-align: left;">DISK Needs</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">Linux X86 (32-bit) and X64 (64-bit)</td>
<td align="left">Oracle Enterprise Linux 6.4</td>
<td align="left">gcc 4.9.2</td>
<td align="left">2 or more</td>
<td align="left">1 GB</td>
<td align="left">6 GB</td>
<td style="text-align: left;">Linux X86 (32-bit) and X64 (64-bit)</td>
<td style="text-align: left;">Oracle Enterprise Linux 6.4</td>
<td style="text-align: left;">gcc 4.9.2</td>
<td style="text-align: left;">2 or more</td>
<td style="text-align: left;">1 GB</td>
<td style="text-align: left;">6 GB</td>
</tr>
<tr class="even">
<td align="left">Solaris SPARCV9 (64-bit)</td>
<td align="left">Solaris 11 Update 1</td>
<td align="left">Studio 12 Update 4 + patches</td>
<td align="left">4 or more</td>
<td align="left">4 GB</td>
<td align="left">8 GB</td>
<td style="text-align: left;">Solaris SPARCV9 (64-bit)</td>
<td style="text-align: left;">Solaris 11 Update 1</td>
<td style="text-align: left;">Studio 12 Update 4 + patches</td>
<td style="text-align: left;">4 or more</td>
<td style="text-align: left;">4 GB</td>
<td style="text-align: left;">8 GB</td>
</tr>
<tr class="odd">
<td align="left">Solaris X64 (64-bit)</td>
<td align="left">Solaris 11 Update 1</td>
<td align="left">Studio 12 Update 4 + patches</td>
<td align="left">4 or more</td>
<td align="left">4 GB</td>
<td align="left">8 GB</td>
<td style="text-align: left;">Solaris X64 (64-bit)</td>
<td style="text-align: left;">Solaris 11 Update 1</td>
<td style="text-align: left;">Studio 12 Update 4 + patches</td>
<td style="text-align: left;">4 or more</td>
<td style="text-align: left;">4 GB</td>
<td style="text-align: left;">8 GB</td>
</tr>
<tr class="even">
<td align="left">Windows X86 (32-bit)</td>
<td align="left">Windows Server 2012 R2 x64</td>
<td align="left">Microsoft Visual Studio C++ 2013 Professional Edition</td>
<td align="left">2 or more</td>
<td align="left">2 GB</td>
<td align="left">6 GB</td>
<td style="text-align: left;">Windows X86 (32-bit)</td>
<td style="text-align: left;">Windows Server 2012 R2 x64</td>
<td style="text-align: left;">Microsoft Visual Studio C++ 2013 Professional Edition</td>
<td style="text-align: left;">2 or more</td>
<td style="text-align: left;">2 GB</td>
<td style="text-align: left;">6 GB</td>
</tr>
<tr class="odd">
<td align="left">Windows X64 (64-bit)</td>
<td align="left">Windows Server 2012 R2 x64</td>
<td align="left">Microsoft Visual Studio C++ 2013 Professional Edition</td>
<td align="left">2 or more</td>
<td align="left">2 GB</td>
<td align="left">6 GB</td>
<td style="text-align: left;">Windows X64 (64-bit)</td>
<td style="text-align: left;">Windows Server 2012 R2 x64</td>
<td style="text-align: left;">Microsoft Visual Studio C++ 2013 Professional Edition</td>
<td style="text-align: left;">2 or more</td>
<td style="text-align: left;">2 GB</td>
<td style="text-align: left;">6 GB</td>
</tr>
<tr class="even">
<td align="left">Mac OS X X64 (64-bit)</td>
<td align="left">Mac OS X 10.9 &quot;Mavericks&quot;</td>
<td align="left">Xcode 6.3 or newer</td>
<td align="left">2 or more</td>
<td align="left">4 GB</td>
<td align="left">6 GB</td>
<td style="text-align: left;">Mac OS X X64 (64-bit)</td>
<td style="text-align: left;">Mac OS X 10.9 &quot;Mavericks&quot;</td>
<td style="text-align: left;">Xcode 6.3 or newer</td>
<td style="text-align: left;">2 or more</td>
<td style="text-align: left;">4 GB</td>
<td style="text-align: left;">6 GB</td>
</tr>
</tbody>
</table>

View File

@ -1,19 +1,22 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>Testing OpenJDK</title>
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
<link rel="stylesheet" href="../../jdk/make/data/docs-resources/specs/resources/jdk-default.css">
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
<style type="text/css">pre, code, tt { color: #1d6ae5; }</style>
</head>
<body>
<div id="header">
<header>
<h1 class="title">Testing OpenJDK</h1>
</div>
<div id="TOC">
</header>
<nav id="TOC">
<ul>
<li><a href="#using-the-run-test-framework">Using the run-test framework</a></li>
<li><a href="#test-selection">Test selection</a><ul>
@ -26,16 +29,18 @@
<li><a href="#gtest-keywords">Gtest keywords</a></li>
</ul></li>
</ul>
</div>
</nav>
<h2 id="using-the-run-test-framework">Using the run-test framework</h2>
<p>This new way of running tests is developer-centric. It assumes that you have built a jdk locally and want to test it. Running common test targets is simple, and more complex ad-hoc combination of tests is possible. The user interface is forgiving, and clearly report errors it cannot resolve.</p>
<p>The main target &quot;run-test&quot; uses the jdk-image as the tested product. There is also an alternate target &quot;exploded-run-test&quot; that uses the exploded image instead. Not all tests will run successfully on the exploded image, but using this target can greatly improve rebuild times for certain workflows.</p>
<p>Some example command-lines:</p>
<pre><code>$ make run-test-tier1
$ make run-test-jdk_lang JTREG=&quot;JOBS=8&quot;
$ make run-test TEST=jdk_lang
$ make run-test-only TEST=&quot;gtest:LogTagSet gtest:LogTagSetDescriptions&quot; GTEST=&quot;REPEAT=-1&quot;
$ make run-test TEST=&quot;hotspot/test:hotspot_gc&quot; JTREG=&quot;JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug&quot;
$ make run-test TEST=&quot;jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java&quot;</code></pre>
$ make run-test TEST=&quot;jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java&quot;
$ make exploded-run-test TEST=hotspot_tier1</code></pre>
<h2 id="test-selection">Test selection</h2>
<p>All functionality is available using the run-test make target. In this use case, the test or tests to be executed is controlled using the <code>TEST</code> variable. To speed up subsequent test runs with no source code changes, run-test-only can be used instead, which do not depend on the source and test image build.</p>
<p>For some common top-level tests, direct make targets have been generated. This includes all JTreg test groups, the hotspot gtest, and custom tests (if present). This means that <code>make run-test-tier1</code> is equivalent to <code>make run-test TEST=&quot;tier1&quot;</code>, but the latter is more tab-completion friendly. For more complex test runs, the <code>run-test TEST=&quot;x&quot;</code> solution needs to be used.</p>

View File

@ -7,6 +7,11 @@ built a jdk locally and want to test it. Running common test targets is simple,
and more complex ad-hoc combination of tests is possible. The user interface is
forgiving, and clearly report errors it cannot resolve.
The main target "run-test" uses the jdk-image as the tested product. There is
also an alternate target "exploded-run-test" that uses the exploded image
instead. Not all tests will run successfully on the exploded image, but using
this target can greatly improve rebuild times for certain workflows.
Some example command-lines:
$ make run-test-tier1
@ -15,6 +20,7 @@ Some example command-lines:
$ make run-test-only TEST="gtest:LogTagSet gtest:LogTagSetDescriptions" GTEST="REPEAT=-1"
$ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug"
$ make run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java"
$ make exploded-run-test TEST=hotspot_tier1
## Test selection

View File

@ -422,3 +422,5 @@ b2218d41edef02ee8f94bb438f885b2ba79bfa08 jdk-9+169
8a4ab3b0ab9a86df73d9a1e337134f2dbe006725 jdk-9+170
aed5a4edc8275c1c50195503756ff92bfe0197f5 jdk-10+7
648b0a00824eb29e71936bc3258d309a25e3b8c0 jdk-10+8
54c6621f7b34cc6ce6c0882d047f61fe0962c257 jdk-10+9
c62e5964cfcf144d8f72e9ba69757897785349a9 jdk-9+171

View File

@ -582,3 +582,5 @@ fbb9c802649585d19f6d7e81b4a519d44806225a jdk-9+168
38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170
9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7
f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8
233647e3d3800e76d7612014b745b37a88098f63 jdk-10+9
d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171

View File

@ -303,9 +303,9 @@ class HotSpotProject(mx.NativeProject):
out.close('link')
out.open('link')
out.element('name', data='generated')
out.element('name', data='gensrc')
out.element('type', data='2')
generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'generated')
generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'gensrc')
out.element('locationURI', data=mx.get_eclipse_project_rel_locationURI(generated, eclProjectDir))
out.close('link')
@ -620,18 +620,12 @@ _jvmci_bootclasspath_prepends = []
def _get_hotspot_build_dir(jvmVariant=None, debugLevel=None):
"""
Gets the directory in which a particular HotSpot configuration is built
(e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/bsd_amd64_compiler2)
(e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/variant-<variant>)
"""
if jvmVariant is None:
jvmVariant = _vm.jvmVariant
os = mx.get_os()
if os == 'darwin':
os = 'bsd'
arch = mx.get_arch()
buildname = {'client': 'compiler1', 'server': 'compiler2'}.get(jvmVariant, jvmVariant)
name = '{}_{}_{}'.format(os, arch, buildname)
name = 'variant-{}'.format(jvmVariant)
return join(_get_jdk_build_dir(debugLevel=debugLevel), 'hotspot', name)
class JVMCI9JDKConfig(mx.JDKConfig):

View File

@ -4134,28 +4134,33 @@ void MacroAssembler::vabsss(XMMRegister dst, XMMRegister nds, XMMRegister src, A
if ((dst_enc < 16) && (nds_enc < 16)) {
vandps(dst, nds, negate_field, vector_len);
} else if ((src_enc < 16) && (dst_enc < 16)) {
movss(src, nds);
evmovdqul(src, nds, Assembler::AVX_512bit);
vandps(dst, src, negate_field, vector_len);
} else if (src_enc < 16) {
movss(src, nds);
evmovdqul(src, nds, Assembler::AVX_512bit);
vandps(src, src, negate_field, vector_len);
movss(dst, src);
evmovdqul(dst, src, Assembler::AVX_512bit);
} else if (dst_enc < 16) {
movdqu(src, xmm0);
movss(xmm0, nds);
evmovdqul(src, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, nds, Assembler::AVX_512bit);
vandps(dst, xmm0, negate_field, vector_len);
movdqu(xmm0, src);
} else if (nds_enc < 16) {
movdqu(src, xmm0);
vandps(xmm0, nds, negate_field, vector_len);
movss(dst, xmm0);
movdqu(xmm0, src);
evmovdqul(xmm0, src, Assembler::AVX_512bit);
} else {
movdqu(src, xmm0);
movss(xmm0, nds);
vandps(xmm0, xmm0, negate_field, vector_len);
movss(dst, xmm0);
movdqu(xmm0, src);
if (src_enc != dst_enc) {
evmovdqul(src, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, nds, Assembler::AVX_512bit);
vandps(xmm0, xmm0, negate_field, vector_len);
evmovdqul(dst, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, src, Assembler::AVX_512bit);
} else {
subptr(rsp, 64);
evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, nds, Assembler::AVX_512bit);
vandps(xmm0, xmm0, negate_field, vector_len);
evmovdqul(dst, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
addptr(rsp, 64);
}
}
}
@ -4166,28 +4171,33 @@ void MacroAssembler::vabssd(XMMRegister dst, XMMRegister nds, XMMRegister src, A
if ((dst_enc < 16) && (nds_enc < 16)) {
vandpd(dst, nds, negate_field, vector_len);
} else if ((src_enc < 16) && (dst_enc < 16)) {
movsd(src, nds);
evmovdqul(src, nds, Assembler::AVX_512bit);
vandpd(dst, src, negate_field, vector_len);
} else if (src_enc < 16) {
movsd(src, nds);
evmovdqul(src, nds, Assembler::AVX_512bit);
vandpd(src, src, negate_field, vector_len);
movsd(dst, src);
evmovdqul(dst, src, Assembler::AVX_512bit);
} else if (dst_enc < 16) {
movdqu(src, xmm0);
movsd(xmm0, nds);
evmovdqul(src, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, nds, Assembler::AVX_512bit);
vandpd(dst, xmm0, negate_field, vector_len);
movdqu(xmm0, src);
} else if (nds_enc < 16) {
movdqu(src, xmm0);
vandpd(xmm0, nds, negate_field, vector_len);
movsd(dst, xmm0);
movdqu(xmm0, src);
evmovdqul(xmm0, src, Assembler::AVX_512bit);
} else {
movdqu(src, xmm0);
movsd(xmm0, nds);
vandpd(xmm0, xmm0, negate_field, vector_len);
movsd(dst, xmm0);
movdqu(xmm0, src);
if (src_enc != dst_enc) {
evmovdqul(src, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, nds, Assembler::AVX_512bit);
vandpd(xmm0, xmm0, negate_field, vector_len);
evmovdqul(dst, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, src, Assembler::AVX_512bit);
} else {
subptr(rsp, 64);
evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, nds, Assembler::AVX_512bit);
vandpd(xmm0, xmm0, negate_field, vector_len);
evmovdqul(dst, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
addptr(rsp, 64);
}
}
}
@ -4934,6 +4944,24 @@ void MacroAssembler::punpcklbw(XMMRegister dst, XMMRegister src) {
}
}
void MacroAssembler::pshufd(XMMRegister dst, Address src, int mode) {
if (VM_Version::supports_avx512vl()) {
Assembler::pshufd(dst, src, mode);
} else {
int dst_enc = dst->encoding();
if (dst_enc < 16) {
Assembler::pshufd(dst, src, mode);
} else {
subptr(rsp, 64);
evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
Assembler::pshufd(xmm0, src, mode);
evmovdqul(dst, xmm0, Assembler::AVX_512bit);
evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
addptr(rsp, 64);
}
}
}
// This instruction exists within macros, ergo we cannot control its input
// when emitted through those patterns.
void MacroAssembler::pshuflw(XMMRegister dst, XMMRegister src, int mode) {

View File

@ -1232,6 +1232,9 @@ public:
void punpcklbw(XMMRegister dst, XMMRegister src);
void punpcklbw(XMMRegister dst, Address src) { Assembler::punpcklbw(dst, src); }
void pshufd(XMMRegister dst, Address src, int mode);
void pshufd(XMMRegister dst, XMMRegister src, int mode) { Assembler::pshufd(dst, src, mode); }
void pshuflw(XMMRegister dst, XMMRegister src, int mode);
void pshuflw(XMMRegister dst, Address src, int mode) { Assembler::pshuflw(dst, src, mode); }

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2017, 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
@ -23,6 +23,12 @@
* questions.
*/
/**
* Defines the implementation of the HotSpot Serviceability Agent.
*
* @moduleGraph
* @since 9
*/
module jdk.hotspot.agent {
requires java.datatransfer;
requires java.desktop;

View File

@ -407,8 +407,12 @@ void ConstMethod::print_on(outputStream* st) const {
ResourceMark rm;
assert(is_constMethod(), "must be constMethod");
st->print_cr("%s", internal_name());
st->print(" - method: " INTPTR_FORMAT " ", p2i((address)method()));
method()->print_value_on(st); st->cr();
Method* m = method();
st->print(" - method: " INTPTR_FORMAT " ", p2i((address)m));
if (m != NULL) {
m->print_value_on(st);
}
st->cr();
if (has_stackmap_table()) {
st->print(" - stackmap data: ");
stackmap_data()->print_value_on(st);
@ -421,7 +425,12 @@ void ConstMethod::print_on(outputStream* st) const {
void ConstMethod::print_value_on(outputStream* st) const {
assert(is_constMethod(), "must be constMethod");
st->print(" const part of method " );
method()->print_value_on(st);
Method* m = method();
if (m != NULL) {
m->print_value_on(st);
} else {
st->print("NULL");
}
}
#if INCLUDE_SERVICES
@ -461,7 +470,7 @@ void ConstMethod::verify_on(outputStream* st) {
// Verification can occur during oop construction before the method or
// other fields have been initialized.
guarantee(method()->is_method(), "should be method");
guarantee(method() != NULL && method()->is_method(), "should be method");
address m_end = (address)((intptr_t) this + size());
address compressed_table_start = code_end();

View File

@ -1000,7 +1000,7 @@ Node *Matcher::xform( Node *n, int max_stack ) {
if (C->failing()) return NULL;
if (m == NULL) { Matcher::soft_match_failure(); return NULL; }
} else { // Nothing the matcher cares about
if( n->is_Proj() && n->in(0)->is_Multi()) { // Projections?
if (n->is_Proj() && n->in(0) != NULL && n->in(0)->is_Multi()) { // Projections?
// Convert to machine-dependent projection
m = n->in(0)->as_Multi()->match( n->as_Proj(), this );
#ifdef ASSERT
@ -1645,6 +1645,7 @@ MachNode *Matcher::ReduceInst( State *s, int rule, Node *&mem ) {
// Build the object to represent this state & prepare for recursive calls
MachNode *mach = s->MachNodeGenerator(rule);
guarantee(mach != NULL, "Missing MachNode");
mach->_opnds[0] = s->MachOperGenerator(_reduceOp[rule]);
assert( mach->_opnds[0] != NULL, "Missing result operand" );
Node *leaf = s->_leaf;

View File

@ -1123,6 +1123,9 @@ Node* LoadNode::Identity(PhaseGVN* phase) {
// Use _idx of address base (could be Phi node) for boxed values.
intptr_t ignore = 0;
Node* base = AddPNode::Ideal_base_and_offset(in(Address), phase, ignore);
if (base == NULL) {
return this;
}
this_iid = base->_idx;
}
const Type* this_type = bottom_type();
@ -3947,9 +3950,10 @@ Node* InitializeNode::complete_stores(Node* rawctl, Node* rawmem, Node* rawptr,
// if it is the last unused 4 bytes of an instance, forget about it
intptr_t size_limit = phase->find_intptr_t_con(size_in_bytes, max_jint);
if (zeroes_done + BytesPerLong >= size_limit) {
assert(allocation() != NULL, "");
if (allocation()->Opcode() == Op_Allocate) {
Node* klass_node = allocation()->in(AllocateNode::KlassNode);
AllocateNode* alloc = allocation();
assert(alloc != NULL, "must be present");
if (alloc != NULL && alloc->Opcode() == Op_Allocate) {
Node* klass_node = alloc->in(AllocateNode::KlassNode);
ciKlass* k = phase->type(klass_node)->is_klassptr()->klass();
if (zeroes_done == k->layout_helper())
zeroes_done = size_limit;

View File

@ -64,14 +64,14 @@ gc/g1/logging/TestG1LoggingFailure.java 8169634 generic-all
runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all
# This test is disabled since it will stress NMT and timeout during normal testing
runtime/NMT/MallocStressTest.java 8166548 generic-all
runtime/SharedArchiveFile/BootAppendTests.java 8150683 generic-all
runtime/SharedArchiveFile/BootAppendTests.java 8179103 generic-all
runtime/SharedArchiveFile/DefaultUseWithClient.java 8154204 generic-all
#############################################################################
# :hotspot_serviceability
serviceability/jdwp/AllModulesCommandTest.java 8168478 generic-all
serviceability/jdwp/AllModulesCommandTest.java 8170541 generic-all
serviceability/sa/sadebugd/SADebugDTest.java 8163805 generic-all
serviceability/jvmti/ModuleAwareAgents/ClassFileLoadHook/MAAClassFileLoadHook.java 8173936 generic-all

View File

@ -23,7 +23,7 @@
package compiler.codecache.stress;
import jdk.test.lib.wrappers.TimeLimitedRunner;
import jdk.test.lib.TimeLimitedRunner;
import jdk.test.lib.Utils;
public class CodeCacheStressRunner {

View File

@ -25,7 +25,7 @@ package compiler.codecache.stress;
import jdk.test.lib.Asserts;
import jdk.test.lib.ByteCodeLoader;
import jdk.test.lib.wrappers.InfiniteLoop;
import jdk.test.lib.InfiniteLoop;
import jdk.test.lib.Utils;
import sun.hotspot.WhiteBox;

View File

@ -29,7 +29,7 @@ import compiler.compilercontrol.share.method.MethodDescriptor;
import compiler.compilercontrol.share.pool.PoolHelper;
import compiler.compilercontrol.share.scenario.Executor;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.wrappers.TimeLimitedRunner;
import jdk.test.lib.TimeLimitedRunner;
import jdk.test.lib.Utils;
import java.util.ArrayList;

View File

@ -44,7 +44,7 @@
package compiler.whitebox;
import jdk.test.lib.Asserts;
import jdk.test.lib.wrappers.InfiniteLoop;
import jdk.test.lib.InfiniteLoop;
import sun.hotspot.WhiteBox;
import sun.hotspot.code.BlobType;

View File

@ -32,7 +32,6 @@ import static jdk.test.lib.Asserts.assertTrue;
* @test
* @summary Tests the modules-related JDWP commands
* @library /test/lib
* @ignore 8170541
* @modules jdk.jdwp.agent
* @modules java.base/jdk.internal.misc
* @compile AllModulesCommandTestDebuggee.java

View File

@ -422,3 +422,5 @@ e78da9db6299b3fcba49300d52e2359e82fdd218 jdk-9+168
ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170
cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7
f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8
b9409a7daa6c793dd631e52fe6ef79d08a3b337a jdk-10+9
29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171

View File

@ -116,11 +116,11 @@ caption {
margin-bottom:10px;
}
tr:nth-child(even) {
tr:nth-child(even), tr:nth-child(even) th[scope=row] {
background: #DDD;
}
tr:nth-child(odd) {
tr:nth-child(odd), tr:nth-child(odd) th[scope=row] {
background: #FFF;
}

View File

@ -31,18 +31,23 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.module.ModuleDescriptor;
import java.lang.module.ModuleFinder;
import java.lang.module.ModuleReference;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.function.Predicate;
import java.util.stream.Stream;
import static java.util.stream.Collectors.*;
/**
* Build tool to generate the docs bundle index page.
@ -104,59 +109,33 @@ public class GenDocsBundlePage {
}
private static final String HEADER_TITLE = "@HEADER_TITLE@";
final Path outputfile;
final String title;
final Map<String, String> moduleGroups;
final Map<String, Set<ModuleDescriptor>> moduleGroups = new HashMap<>();
GenDocsBundlePage(String title, Path outputfile) throws IOException
{
this.outputfile = outputfile;
this.title = title;
this.moduleGroups = moduleGroups();
}
static Map<String, String> moduleGroups() throws IOException {
// read module groups
ModuleFinder finder = ModuleFinder.ofSystem();
Map<String, String> groups = new HashMap<>();
try (InputStream in = GenDocsBundlePage.class.getResourceAsStream(MODULE_GROUPS_PROPS)) {
Properties props = new Properties();
props.load(in);
for (String key: props.stringPropertyNames()) {
Set<String> mods = Stream.of(props.getProperty(key).split("\\s+"))
.filter(mn -> finder.find(mn).isPresent())
.map(String::trim)
.collect(Collectors.toSet());
Set<ModuleDescriptor> mods =
Stream.of(props.getProperty(key).split("\\s+"))
.map(String::trim)
.flatMap(mn -> finder.find(mn).stream())
.map(ModuleReference::descriptor)
.collect(toSet());
// divide into 3 columns: Java SE, JDK, JavaFX
StringBuilder sb = new StringBuilder();
sb.append(mods.stream()
.filter(mn -> mn.startsWith("java."))
.sorted()
.map(GenDocsBundlePage::toHRef)
.collect(Collectors.joining("\n")));
sb.append("</td>\n<td>")
.append(mods.stream()
.filter(mn -> mn.startsWith("jdk."))
.sorted()
.map(GenDocsBundlePage::toHRef)
.collect(Collectors.joining("\n")));
sb.append("</td>\n<td>");
if (mods.stream().anyMatch(mn -> mn.startsWith("javafx."))) {
sb.append(mods.stream()
.filter(mn -> mn.startsWith("javafx."))
.sorted()
.map(GenDocsBundlePage::toHRef)
.collect(Collectors.joining("\n")));
}
String name = "@" + key.toUpperCase(Locale.ENGLISH) + "@";
groups.put(name, sb.toString());
}
moduleGroups.put(name, mods);
};
}
return groups;
}
static String toHRef(String mn) {
return String.format("<a href=\"api/%s-summary.html\">%s</a><br>", mn, mn);
}
void run(BufferedReader reader) throws IOException {
@ -174,13 +153,95 @@ public class GenDocsBundlePage {
if (line.contains(HEADER_TITLE)) {
line = line.replace(HEADER_TITLE, title);
}
if (line.contains("@")) {
for (Map.Entry<String,String> e: moduleGroups.entrySet()) {
if (line.contains(e.getKey())) {
line = line.replace(e.getKey(), e.getValue());
}
int i = line.indexOf('@');
int j = line.indexOf('@', i+1);
if (i >= 0 && i < j) {
String name = line.substring(i, j+1);
if (moduleGroups.containsKey(name)) {
line = line.replace(name, formatModuleGroup(name));
}
}
return line;
}
String toHRef(ModuleDescriptor md) {
String mn = md.name();
String formattedName;
if (hasExportedAPIs(md)) {
// has exported APIs
formattedName = mn;
} else if (!md.provides().isEmpty()) {
// a provider
formattedName = "<i>" + mn + "</i>";
} else {
// a tool
formattedName = "<i>" + mn + "</i>";
}
return String.format("<a href=\"api/%s-summary.html\">%s</a>",
mn, formattedName);
}
String formatModuleGroup(String groupName) {
StringBuilder sb = new StringBuilder();
// organize in Java SE, JDK, JavaFX, JCP groups
Set<ModuleDescriptor> modules = moduleGroups.get(groupName);
Arrays.stream(ModuleGroup.values())
.forEach(g -> {
Set<ModuleDescriptor> mods = modules.stream()
.filter(md -> g.predicate.test(md.name()))
.collect(toSet());
if (!mods.isEmpty()) {
sb.append("<div class=" + g.cssClass + ">\n");
// modules with exported API
mods.stream()
.filter(this::hasExportedAPIs)
.sorted(Comparator.comparing(ModuleDescriptor::name))
.map(this::toHRef)
.forEach(m -> sb.append(m).append("\n"));
// tools and providers
mods.stream()
.filter(md -> !hasExportedAPIs(md))
.sorted(Comparator.comparing(ModuleDescriptor::name))
.map(this::toHRef)
.forEach(m -> sb.append(m).append("\n"));
sb.append("</div>");
}
});
return sb.toString();
}
private boolean hasExportedAPIs(ModuleDescriptor md) {
if (md.exports().stream().anyMatch(e -> !e.isQualified())) {
return true;
}
// this should check if any indirect exports
// checking requires transitive would be sufficient for JDK modules
if (md.requires().stream()
.map(ModuleDescriptor.Requires::modifiers)
.anyMatch(mods -> mods.contains(ModuleDescriptor.Requires.Modifier.TRANSITIVE))) {
return true;
}
return false;
}
private static final Set<String> NON_JAVA_SE_MODULES =
Set.of("java.jnlp", "java.smartcardio");
/**
* CSS class names are defined in docs-bundle-page.html
*/
enum ModuleGroup {
JAVA_SE("javase", mn -> mn.startsWith("java.") && !NON_JAVA_SE_MODULES.contains(mn)),
JDK("jdk", mn -> mn.startsWith("jdk.")),
JAVAFX("javafx", mn -> mn.startsWith("javafx.")),
NON_JAVA_SE("jcp", NON_JAVA_SE_MODULES::contains);
final String cssClass;
final Predicate<String> predicate;
ModuleGroup(String cssClass, Predicate<String> predicate) {
this.cssClass = cssClass;
this.predicate = predicate;
}
}
}

View File

@ -26,121 +26,146 @@ questions.
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html;" charset="utf-8">
<style type="text/css">
table {
border-collapse: collapse;
}
table {
border: 1px solid black;
}
th ,td {
border: 0px solid black;
}
thead th {
background-color: #DDD;
}
tbody > tr:nth-child(even) {
background-color: #EEE
}
tbody > tr:nth-child(odd) {
background-color: #FFF
}
th, td {
font-family: sans-serif; /* could eventually be DejaVu */
font-size: small;
padding: 5px 10px;
vertical-align:top;
}
td a {
text-decoration: none;
}
tr th {
text-align:left;
}
caption {
font-size: smaller;
font-weight: bold;
}
</style>
<title>@HEADER_TITLE@</title>
<meta http-equiv="content-type" content="text/html;" charset="utf-8">
<link rel="stylesheet" href="resources/jdk-default.css" type="text/css" />
<style type="text/css">
table a { text-decoration: none }
table { border: none }
th, td { border: 2px solid white; }
thead th { background-color: #DDD }
tbody th { background-color: #EEE }
table div.javase, ul.key span.javase { background-color: #C6E7F3 }
table div.jdk, ul.key span.jdk { background-color: #ECE1C5 }
table div.javafx, ul.key span.javafx { background-color: #ECEDCC }
table div.jcp, ul.key span.jcp { background-color: #E9E9E9 }
td div { padding: 3px 5px; color: blue }
table tbody td div a { padding: 0 .5em; margin: 0: 1em; }
table tbody td div a:link { color: black }
table tbody td div a:visited { color: black }
table tbody td div a[href]:hover { color: black; text-decoration: underline }
td { padding: 0 }
table tbody td div a { padding: 0 .5em; margin: 0: 1em }
.key { font-size: smaller; }
ul.key li { display:inline-block; padding: 0 1em }
ul.key span {
border: 1px solid black;
font-family: DejaVu Sans Mono, monospace;
}
ul.key span:before { content: " " }
ul.key span:after { content: " " }
caption {
text-align: center;
}
tr:nth-child(even), tr:nth-child(even) th[scope=row] {
background-color: #EEE;
}
tr:nth-child(odd), tr:nth-child(odd) th[scope=row] {
background-color: #EEE;
}
</style>
</head>
<body>
<h1>@HEADER_TITLE@</h1>
<ul>
<li><a href="api/index.html">JDK API Specification</a></li>
<li>Java Language Specification</li>
<li>Java Virtual Machine Specification</li>
<li><a href="https://docs.oracle.com/javase/specs/">
Java Language and Virtual Machine Specifications</a></li>
<li><a href="https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=tools_reference_overview">
Tools Reference</a></li>
</ul>
<table>
<caption>Modules</caption>
<caption style="display:none">JDK Modules</caption>
<thead>
<tr>
<th scope="col">Group</th>
<th scope="col">Java SE</th>
<th scope="col">JDK</th>
<th scope="col">JavaFX</th>
<th scope="col">Modules</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Foundation</th>
<td>@CORE_MODULES@</td>
<td>@JAVA_BASE@</td>
</tr>
<tr>
<th scope="row">Security</th>
<td>@SECURITY_MODULES@</td>
</tr>
<tr>
<th scope="row">Instrumentation and<br>Management</th>
<td>@INSTRUMENT_MGMT_MODULES@</td>
</tr>
<tr>
<th scope="row">Integration</th>
<th scope="row">Integration</th>
<td>@INTEGRATION_MODULES@</td>
</tr>
<tr>
<th scope="row">User Interface</th>
<td>@UI_TOOLKITS_MODULES@</td>
<td>@UI_MODULES@</td>
</tr>
<tr>
<th scope="row">Compiler and Scripting</th>
<td>@COMPILER_SCRIPTING_MODULES@</td>
<th scope="row">Compilation</th>
<td>@COMPILER_MODULES@</td>
</tr>
<tr>
<th scope="row">Debugging</th>
<td>@DEBUG_MODULES@</td>
<th scope="row">Scripting</th>
<td>@SCRIPTING_MODULES@</td>
</tr>
<tr>
<th scope="row">Tools and Tool APIs</th>
<td>@TOOL_MODULES@</td>
<th scope="row">Security</th>
<td>@SECURITY_MODULES@</td>
</tr>
<tr>
<th scope="row">Incubating Features</th>
<th scope="row">Management</th>
<td>@MANAGEMENT_MODULES@</td>
</tr>
<tr>
<th scope="row">Instrumentation</th>
<td>@INSTRUMENT_MODULES@</td>
</tr>
<tr>
<th scope="row">Serviceability</th>
<td>@SVC_MODULES@</td>
</tr>
<tr>
<th scope="row">Packaging</th>
<td>@PACKAGING_MODULES@</td>
</tr>
<tr>
<th scope="row">Incubator</th>
<td>@INCUBATOR_MODULES@</td>
</tr>
<tr>
<th scope="row">Non-Java SE</th>
<td>@OTHER_MODULES@</td>
</tr>
<tr>
<th scope="row">Java EE</th>
<td>@JAVA_EE_MODULES@</td>
</tr>
<tr>
<th scope="row"></th>
<th scope="row">Outside Java SE</th>
<th scope="row">JDK</th>
<th scope="row">JavaFX</th>
</tr>
<tr>
<th scope="row">Others</th>
<td>@OTHER_MODULES@</td>
<th scope="row">Aggregator</th>
<td>@AGGREGATOR_MODULES@</td>
</tr>
</tbody>
</table>
<p class="key">Key:
<ul class="key">
<li><span class="javase">&nbsp;</span>&nbsp; Java SE
<li><span class="jdk">&nbsp;</span>&nbsp; JDK
<li><span class="javafx">&nbsp;</span>&nbsp; JavaFX
<li><span class="jcp">&nbsp;</span>&nbsp; Non-Java SE
<li><i>italic</i> No Exported API (e.g. a tool or provider)</li>
</ul>
<p>
<hr/>
<a href="legal/cpyr.html">Copyright</a>&copy; 1993, 2017, Oracle and/or its affiliates. All rights reserved.</p>
<hr>
<a href="legal/cpyr.html">Copyright</a> &copy 1993, 2017, Oracle and/or its affiliates. All rights reserved.</p>
</body>
</html>

View File

@ -1,13 +1,8 @@
# Module Grouping for the docs bundle page
#
core_modules=\
java.base \
jdk.charsets \
jdk.localedata \
jdk.net \
jdk.sctp \
jdk.zipfs
java_base=\
java.base
java_ee_modules=\
java.activation \
@ -17,6 +12,10 @@ java.xml.bind \
java.xml.ws \
java.xml.ws.annotation
aggregator_modules=\
java.se \
java.se.ee
security_modules=\
java.security.jgss \
java.security.sasl \
@ -26,18 +25,22 @@ jdk.security.jgss \
jdk.crypto.cryptoki \
jdk.crypto.ec \
jdk.crypto.mscapi \
jdk.crypto.ucrypto
jdk.crypto.ucrypto \
jdk.policytool
instrument_mgmt_modules=\
java.instrument \
instrument_modules=\
java.instrument
management_modules=\
java.management \
java.management.rmi \
jdk.jfr \
jdk.management \
jdk.management.agent \
jdk.management.cmm \
jdk.management.jfr \
jdk.management.resource \
jdk.snmp \
jdk.jconsole
integration_modules=\
java.logging \
@ -47,11 +50,18 @@ java.rmi \
java.sql \
java.sql.rowset \
java.xml \
jdk.charsets \
jdk.localedata \
jdk.net \
jdk.sctp \
jdk.jsobject \
jdk.httpserver \
jdk.naming.dns \
jdk.naming.rmi
jdk.naming.rmi \
jdk.xml.dom \
jdk.zipfs
ui_toolkits_modules=\
ui_modules=\
java.datatransfer \
java.desktop \
javafx.base \
@ -63,39 +73,40 @@ javafx.swing \
javafx.web \
jdk.accessibility
other_modules=\
java.jnlp \
java.smartcardio \
jdk.jsobject \
jdk.xml.dom
debug_modules=\
jdk.jdi \
jdk.jdwp.agent
tool_modules=\
svc_modules=\
jdk.jfr \
jdk.attach \
jdk.editpad \
jdk.jartool \
jdk.javadoc \
jdk.jcmd \
jdk.jconsole \
jdk.jdeps \
jdk.jlink \
jdk.jshell \
jdk.jdi \
jdk.jdwp.agent \
jdk.jstatd \
jdk.hotspot.agent
packaging_modules=\
jdk.jartool \
jdk.jlink \
jdk.pack \
jdk.policytool \
jdk.packager.services \
jdk.packager.services
compiler_modules=\
java.compiler \
jdk.compiler \
jdk.javadoc \
jdk.jdeps \
jdk.editpad \
jdk.jshell \
jdk.rmic
compiler_scripting_modules=\
java.compiler \
scripting_modules=\
java.scripting \
jdk.compiler \
jdk.dynalink \
jdk.scripting.nashorn \
jdk.scripting.nashorn.shell
other_modules=\
java.jnlp \
java.smartcardio
incubator_modules=\
jdk.incubator.httpclient

View File

@ -56,7 +56,7 @@ public class ExtLink implements Taglet {
static final String TAG_NAME = "extLink";
static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=";
static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&amp;id=";
static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?<name>\\w+)(\\s+)(?<desc>.*)");

View File

@ -421,10 +421,8 @@ int NET_ReadV(int s, const struct iovec * vector, int count) {
}
int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
struct sockaddr *from, int *fromlen) {
socklen_t socklen = *fromlen;
BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) );
*fromlen = socklen;
struct sockaddr *from, socklen_t *fromlen) {
BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) );
}
int NET_Send(int s, void *msg, int len, unsigned int flags) {
@ -440,10 +438,8 @@ int NET_SendTo(int s, const void *msg, int len, unsigned int
BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) );
}
int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
socklen_t socklen = *addrlen;
BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) );
*addrlen = socklen;
int NET_Accept(int s, struct sockaddr *addr, socklen_t *addrlen) {
BLOCKING_IO_RETURN_INT( s, accept(s, addr, addrlen) );
}
int NET_Connect(int s, struct sockaddr *addr, int addrlen) {

View File

@ -923,6 +923,12 @@ public class File
* java.nio.file.Files#readAttributes(Path,Class,LinkOption[])
* Files.readAttributes} method may be used.
*
* @apiNote
* While the unit of time of the return value is milliseconds,
* the granularity of the value depends on the underlying
* file system and may be larger. For example, some
* file systems use time stamps in units of seconds.
*
* @return A <code>long</code> value representing the time the file was
* last modified, measured in milliseconds since the epoch
* (00:00:00 GMT, January 1, 1970), or <code>0L</code> if the

View File

@ -137,6 +137,7 @@ import sun.security.jca.*;
* <li>{@code AES/CBC/PKCS5Padding} (128)</li>
* <li>{@code AES/ECB/NoPadding} (128)</li>
* <li>{@code AES/ECB/PKCS5Padding} (128)</li>
* <li>{@code AES/GCM/NoPadding} (128)</li>
* <li>{@code DES/CBC/NoPadding} (56)</li>
* <li>{@code DES/CBC/PKCS5Padding} (56)</li>
* <li>{@code DES/ECB/NoPadding} (56)</li>

View File

@ -363,10 +363,6 @@ public final class LauncherHelper {
static void initHelpMessage(String progname) {
outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.header",
(progname == null) ? "java" : progname ));
outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel",
32));
outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel",
64));
}
/**

View File

@ -34,7 +34,6 @@ java.launcher.opt.header = Usage: {0} [options] <mainclass> [args...]\n\
\ <module>/<mainclass> are passed as the arguments to main class.\n\n\
\ where options include:\n\n
java.launcher.opt.datamodel =\ -d{0}\t Deprecated, will be removed in a future release\n
java.launcher.opt.vmselect =\ {0}\t to select the "{1}" VM\n
java.launcher.opt.hotspot =\ {0}\t is a synonym for the "{1}" VM [deprecated]\n

View File

@ -456,6 +456,11 @@ jboolean JLI_AddArgsFromEnvVar(JLI_List args, const char *var_name) {
env++;
}
// Trailing space
if (*env == '\0') {
break;
}
arg = p;
while (*env != '\0' && !isspace(*env)) {
if (*env == '"' || *env == '\'') {

View File

@ -36,7 +36,7 @@
#define JNI_ERROR "Error: A JNI error has occurred, please check your installation and try again"
#define JNI_ERROR1 "Error: can't find JNI interfaces in: %s"
#define ARG_INFO_ENVVAR "NOTE: Picked up the following options via %s:\n %s"
#define ARG_INFO_ENVVAR "NOTE: Picked up %s: %s"
#define ARG_WARN "Warning: %s option is no longer supported."
#define ARG_ERROR1 "Error: %s requires class path specification"

View File

@ -229,12 +229,15 @@ Java_java_io_UnixFileSystem_getLastModifiedTime(JNIEnv *env, jobject this,
WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
struct stat64 sb;
if (stat64(path, &sb) == 0) {
#ifndef MACOSX
rv = (jlong)sb.st_mtim.tv_sec * 1000;
rv += (jlong)sb.st_mtim.tv_nsec / 1000000;
#else
#if defined(_AIX)
rv = (jlong)sb.st_mtime * 1000;
rv += (jlong)sb.st_mtime_n / 1000000;
#elif defined(MACOSX)
rv = (jlong)sb.st_mtimespec.tv_sec * 1000;
rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
#else
rv = (jlong)sb.st_mtim.tv_sec * 1000;
rv += (jlong)sb.st_mtim.tv_nsec / 1000000;
#endif
}
} END_PLATFORM_STRING(env, path);
@ -419,14 +422,16 @@ Java_java_io_UnixFileSystem_setLastModifiedTime(JNIEnv *env, jobject this,
struct timeval tv[2];
/* Preserve access time */
#ifndef MACOSX
tv[0].tv_sec = sb.st_atim.tv_sec;
tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
#else
#if defined(_AIX)
tv[0].tv_sec = sb.st_atime;
tv[0].tv_usec = sb.st_atime_n / 1000;
#elif defined(MACOSX)
tv[0].tv_sec = sb.st_atimespec.tv_sec;
tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
#else
tv[0].tv_sec = sb.st_atim.tv_sec;
tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
#endif
/* Change last-modified time */
tv[1].tv_sec = time / 1000;
tv[1].tv_usec = (time % 1000) * 1000;

View File

@ -160,7 +160,7 @@ class KrbAsRep extends KrbKdcRep {
creds = new Credentials(
rep.ticket,
req.reqBody.cname,
rep.ticket.sname,
enc_part.sname,
enc_part.key,
enc_part.flags,
enc_part.authtime,

View File

@ -88,7 +88,7 @@ public class KrbTgsRep extends KrbKdcRep {
this.creds = new Credentials(rep.ticket,
rep.cname,
rep.ticket.sname,
enc_part.sname,
enc_part.key,
enc_part.flags,
enc_part.authtime,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -189,11 +189,6 @@ class AsyncSSLConnection extends HttpConnection
throw new UnsupportedOperationException("Not supported.");
}
@Override
protected int readImpl(ByteBuffer buffer) throws IOException {
throw new UnsupportedOperationException("Not supported.");
}
@Override
CompletableFuture<Void> whenReceivingResponse() {
throw new UnsupportedOperationException("Not supported.");

View File

@ -33,7 +33,6 @@ import java.net.SocketPermission;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLPermission;
import java.nio.ByteBuffer;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedAction;
@ -76,9 +75,6 @@ final class Exchange<T> {
boolean upgrading; // to HTTP/2
final PushGroup<?,T> pushGroup;
// buffer for receiving response headers
private volatile ByteBuffer rxBuffer;
Exchange(HttpRequestImpl request, MultiExchange<?,T> multi) {
this.request = request;
this.upgrading = false;
@ -121,17 +117,6 @@ final class Exchange<T> {
return client;
}
ByteBuffer getBuffer() {
if(rxBuffer == null) {
synchronized (this) {
if(rxBuffer == null) {
rxBuffer = Utils.getExchangeBuffer();
}
}
}
return rxBuffer;
}
public Response response() throws IOException, InterruptedException {
return responseImpl(null);
}

View File

@ -55,7 +55,7 @@ class Http1Exchange<T> extends ExchangeImpl<T> {
final HttpConnection connection;
final HttpClientImpl client;
final Executor executor;
final ByteBuffer buffer; // used for receiving
volatile ByteBuffer buffer; // used for receiving
@Override
public String toString() {
@ -74,7 +74,7 @@ class Http1Exchange<T> extends ExchangeImpl<T> {
this.client = exchange.client();
this.executor = exchange.executor();
this.operations = new LinkedList<>();
this.buffer = exchange.getBuffer();
this.buffer = Utils.EMPTY_BYTEBUFFER;
if (connection != null) {
this.connection = connection;
} else {
@ -157,7 +157,9 @@ class Http1Exchange<T> extends ExchangeImpl<T> {
try {
response = new Http1Response<>(connection, this);
response.readHeaders();
return response.response();
Response r = response.response();
buffer = response.getBuffer();
return r;
} catch (Throwable t) {
connection.close();
throw t;
@ -213,7 +215,9 @@ class Http1Exchange<T> extends ExchangeImpl<T> {
return MinimalFuture.supply( () -> {
response = new Http1Response<>(connection, Http1Exchange.this);
response.readHeaders();
return response.response();
Response r = response.response();
buffer = response.getBuffer();
return r;
}, executor);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -44,7 +44,7 @@ class Http1Response<T> {
private final HttpConnection connection;
private ResponseHeaders headers;
private int responseCode;
private final ByteBuffer buffer; // same buffer used for reading status line and headers
private ByteBuffer buffer;
private final Http1Exchange<T> exchange;
private final boolean redirecting; // redirecting
private boolean return2Cache; // return connection to cache when finished
@ -96,6 +96,10 @@ class Http1Response<T> {
return finished;
}
ByteBuffer getBuffer() {
return buffer;
}
int fixupContentLen(int clen) {
if (request.method().equalsIgnoreCase("HEAD")) {
return 0;
@ -194,12 +198,15 @@ class Http1Response<T> {
static final char CR = '\r';
static final char LF = '\n';
private int getBuffer() throws IOException {
private int obtainBuffer() throws IOException {
int n = buffer.remaining();
if (n == 0) {
buffer.clear();
return connection.read(buffer);
buffer = connection.read();
if (buffer == null) {
return -1;
}
n = buffer.remaining();
}
return n;
}
@ -207,18 +214,17 @@ class Http1Response<T> {
String readStatusLine() throws IOException {
boolean cr = false;
StringBuilder statusLine = new StringBuilder(128);
ByteBuffer b = buffer;
while (getBuffer() != -1) {
byte[] buf = b.array();
int offset = b.position();
int len = b.limit() - offset;
while ((obtainBuffer()) != -1) {
byte[] buf = buffer.array();
int offset = buffer.position();
int len = buffer.limit() - offset;
for (int i = 0; i < len; i++) {
char c = (char) buf[i+offset];
if (cr) {
if (c == LF) {
b.position(i + 1 + offset);
buffer.position(i + 1 + offset);
return statusLine.toString();
} else {
throw new IOException("invalid status line");
@ -231,7 +237,7 @@ class Http1Response<T> {
}
}
// unlikely, but possible, that multiple reads required
b.position(b.limit());
buffer.position(buffer.limit());
}
return null;
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -323,12 +323,9 @@ abstract class HttpConnection implements Closeable {
}
}
final int read(ByteBuffer buffer) throws IOException {
return readImpl(buffer);
}
final ByteBuffer read() throws IOException {
return readImpl();
ByteBuffer b = readImpl();
return b;
}
/*
@ -337,9 +334,6 @@ abstract class HttpConnection implements Closeable {
*/
protected abstract ByteBuffer readImpl() throws IOException;
/** Reads as much as possible into given buffer and returns amount read. */
protected abstract int readImpl(ByteBuffer buffer) throws IOException;
@Override
public String toString() {
return "HttpConnection: " + channel().toString();

View File

@ -311,8 +311,7 @@ class PlainHttpConnection extends HttpConnection implements AsyncConnection {
}
}
@Override
protected int readImpl(ByteBuffer buf) throws IOException {
private int readImpl(ByteBuffer buf) throws IOException {
int mark = buf.position();
int n;
// FIXME: this hack works in conjunction with the corresponding change

View File

@ -156,11 +156,6 @@ class PlainTunnelingConnection extends HttpConnection {
return delegate.readImpl();
}
@Override
protected int readImpl(ByteBuffer buffer) throws IOException {
return delegate.readImpl(buffer);
}
@Override
boolean isSecure() {
return false;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -148,11 +148,7 @@ class ResponseContent {
// make sure we have at least 1 byte to look at
private void getHunk() throws IOException {
if (chunkbuf == null || !chunkbuf.hasRemaining()) {
if (chunkbuf == null) {
chunkbuf = Utils.getBuffer();
}
chunkbuf.clear();
connection.read(chunkbuf);
chunkbuf = connection.read();
}
}
@ -256,7 +252,6 @@ class ResponseContent {
private void pushBodyFixed(ByteBuffer b) throws IOException {
int remaining = contentLength;
//lastBufferUsed = b;
while (b.hasRemaining() && remaining > 0) {
ByteBuffer buffer = Utils.getBuffer();
int amount = Math.min(b.remaining(), remaining);
@ -265,22 +260,14 @@ class ResponseContent {
buffer.flip();
dataConsumer.accept(Optional.of(buffer));
}
//client.returnBuffer(b);
while (remaining > 0) {
ByteBuffer buffer = Utils.getBuffer();
int xx = connection.read(buffer);
if (xx == -1)
ByteBuffer buffer = connection.read();
if (buffer == null)
throw new IOException("connection closed");
int bytesread = buffer.remaining();
// assume for now that pipelining not implemented
if (bytesread > remaining) {
System.err.println("xx = " + xx);
System.err.println("bytesread = " + bytesread);
System.err.println("remaining = " + remaining);
for (int i=0; i<remaining; i++) {
System.err.printf("%x ", buffer.get());
}
throw new IOException("too many bytes read");
}
remaining -= bytesread;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -72,7 +72,7 @@ final class ResponseHeaders implements HttpHeaders {
static final class InputStreamWrapper extends InputStream {
final HttpConnection connection;
final ByteBuffer buffer;
ByteBuffer buffer;
int lastRead = -1; // last byte read from the buffer
int consumed = 0; // number of bytes consumed.
InputStreamWrapper(HttpConnection connection, ByteBuffer buffer) {
@ -83,9 +83,8 @@ final class ResponseHeaders implements HttpHeaders {
@Override
public int read() throws IOException {
if (!buffer.hasRemaining()) {
buffer.clear();
int n = connection.read(buffer);
if (n == -1) {
buffer = connection.read();
if (buffer == null) {
return lastRead = -1;
}
}
@ -97,6 +96,16 @@ final class ResponseHeaders implements HttpHeaders {
}
}
private static void display(Map<String, List<String>> map) {
map.forEach((k,v) -> {
System.out.print (k + ": ");
for (String val : v) {
System.out.print(val + ", ");
}
System.out.println("");
});
}
private Map<String, List<String>> parse(InputStreamWrapper input)
throws IOException
{
@ -114,7 +123,6 @@ final class ResponseHeaders implements HttpHeaders {
// finds is CR. This only happens if there are no headers, and
// only one byte will be consumed from the buffer. In this case
// the next byte MUST be LF
//System.err.println("Last character read is: " + (byte)lastRead);
if (input.read() != LF) {
throw new IOException("Unexpected byte sequence when no headers: "
+ ((int)CR) + " " + input.lastRead

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -162,10 +162,11 @@ class SSLConnection extends HttpConnection {
@Override
protected ByteBuffer readImpl() throws IOException {
ByteBuffer dst = ByteBuffer.allocate(8192);
int n = readImpl(dst);
WrapperResult r = sslDelegate.recvData(ByteBuffer.allocate(8192));
// TODO: check for closure
int n = r.result.bytesProduced();
if (n > 0) {
return dst;
return r.buf;
} else if (n == 0) {
return Utils.EMPTY_BYTEBUFFER;
} else {
@ -173,19 +174,6 @@ class SSLConnection extends HttpConnection {
}
}
@Override
protected int readImpl(ByteBuffer buf) throws IOException {
// TODO: need to ensure that buf is big enough for application data
WrapperResult r = sslDelegate.recvData(buf);
// TODO: check for closure
String s = "Receive) ";
//debugPrint(s, r.buf);
if (r.result.bytesProduced() > 0) {
assert buf == r.buf;
}
return r.result.bytesProduced();
}
@Override
boolean connected() {
return delegate.connected();

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -104,9 +104,7 @@ class SSLDelegate {
}
SSLEngineResult result;
/* if passed in buffer was not big enough then the a reallocated buffer
* is returned here */
ByteBuffer buf;
ByteBuffer buf; // buffer containing result data
}
int app_buf_size;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -164,19 +164,10 @@ class SSLTunnelConnection extends HttpConnection {
@Override
protected ByteBuffer readImpl() throws IOException {
return sslDelegate.recvData(Utils.EMPTY_BYTEBUFFER).buf; // fix this, make the read normal
}
ByteBuffer buf = Utils.getBuffer();
@Override
protected int readImpl(ByteBuffer buf) throws IOException {
WrapperResult r = sslDelegate.recvData(buf);
// TODO: check for closure
String s = "Receive) ";
//debugPrint(s, r.buf);
if (r.result.bytesProduced() > 0) {
assert buf == r.buf;
}
return r.result.bytesProduced();
return r.buf;
}
@Override

View File

@ -258,8 +258,6 @@ tools/jimage/JImageExtractTest.java 8170120 generic-
tools/jimage/JImageListTest.java 8170120 generic-all
tools/jimage/JImageVerifyTest.java 8170120 generic-all
tools/jar/multiRelease/RuntimeTest.java 8173905 generic-all
tools/schemagen/MultiReleaseJarTest.java 8174692 generic-all
tools/wsgen/MultiReleaseJarTest.java 8174692 generic-all

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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,7 +25,7 @@
* @test
* @bug 7130985
* @summary Four helper classes missing in Sun JDK
* @library /lib/testlibrary
* @library /lib/testlibrary /test/lib
* @build jdk.testlibrary.*
* @modules java.corba
* @run main CorbaExceptionsCompileTest
@ -35,12 +35,12 @@ import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.rmi.RemoteException;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CORBA.TypeCodePackage.BadKind;
import org.omg.CORBA.TypeCodePackage.Bounds;
import jdk.testlibrary.FileUtils;
import jdk.test.lib.util.FileUtils;
import jdk.testlibrary.JDKToolLauncher;
public class CorbaExceptionsCompileTest implements CorbaExceptionsTest {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2017, 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
@ -20,20 +20,22 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8048604
* @library ../ /lib/testlibrary
* @library ../ /test/lib
* @summary This test verifies the assertion "There should be no transformation
* on the plaintext/ciphertext in encryption/decryption mechanism" for
* feature "NullCipher".
* on the plaintext/ciphertext in encryption/decryption mechanism" for
* feature "NullCipher".
*/
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NullCipher;
import javax.crypto.ShortBufferException;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class CipherNCFuncTest {
public static void main(String[] args) throws ShortBufferException,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2017, 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
@ -21,22 +21,27 @@
* questions.
*/
/*
* @bug 4413434
* @summary Verify that class loaded outside of application class loader is
* correctly resolved during deserialization when read in by custom
* readObject() method of a bootstrap class (in this case,
* java.util.Vector).
/* @test
* @bug 4138064
* @build SecurityTest
* @run main/othervm/policy=java.policy SecurityTest
*/
import java.io.*;
import java.net.*;
import java.io.File;
public class SecurityTest {
public class Test {
public static void main(String[] args) throws Exception {
ClassLoader ldr =
new URLClassLoader(new URL[]{ new URL("file:cb.jar") });
Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
r.run();
try {
File f = File.createTempFile("foo", null);
} catch (java.security.AccessControlException x) {
throw x;
} catch (SecurityException x) {
if (x.getMessage().equals("Unable to create temporary file")) {
return;
}
throw x;
}
throw new Exception("SecurityException not thrown");
}
}

View File

@ -0,0 +1,2 @@
grant {
};

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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,13 +27,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Random;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
/*
* @test
* @bug 8080835
* @library /lib/testlibrary
* @build jdk.testlibrary.*
* @library /test/lib
* @run main ReadAllBytes
* @summary Basic test for InputStream.readAllBytes
* @key randomness

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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,13 +27,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Random;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
/*
* @test
* @bug 8080835
* @library /lib/testlibrary
* @build jdk.testlibrary.*
* @library /test/lib
* @run main ReadNBytes
* @summary Basic test for InputStream.readNBytes
* @key randomness

View File

@ -1,33 +0,0 @@
#
# Copyright (c) 1998, 2012, 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.
#
#
# @bug 4088176
# @summary Test reading an evolved class serialization into the original class
rm *.class tmp.ser
javac WriteAddedField.java
java ${TESTVMOPTS} WriteAddedField
rm *.class
javac ReadAddedField.java
java ${TESTVMOPTS} ReadAddedField

View File

@ -0,0 +1,107 @@
/*
* Copyright (c) 2017, 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 4087295 4785472
* @library /test/lib
* @build jdk.test.lib.compiler.CompilerUtils
* @build jdk.test.lib.process.ProcessTools
* @build RenamePackageTest
* @run main RenamePackageTest
* @summary Enable resolveClass() to accommodate package renaming.
* This fix enables one to implement a resolveClass method that maps a
* Serialiazable class within a serialization stream to the same class
* in a different package within the JVM runtime. See run shell script
* for instructions on how to run this test.
*/
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import jdk.test.lib.compiler.CompilerUtils;
import jdk.test.lib.process.ProcessTools;
public class RenamePackageTest {
public static void main(String args[]) throws Exception {
setup();
runTestSerialDriver();
runInstallSerialDriver();
runInstallSerialDriver();
runTestSerialDriver();
}
private static final Path SHARE = Paths.get(System.getProperty("test.classes"), "share");
private static final Path OCLASSES = Paths.get(System.getProperty("test.classes"), "oclasses");
private static final Path NCLASSES = Paths.get(System.getProperty("test.classes"), "nclasses");
private static void setup() throws Exception {
boolean b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "extension"),
SHARE);
assertTrue(b);
b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "test"),
OCLASSES,
"-classpath",
SHARE.toString());
assertTrue(b);
b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "install"),
NCLASSES,
"-classpath",
SHARE.toString());
assertTrue(b);
}
private static void runTestSerialDriver() throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
"-classpath",
SHARE.toString()
+ File.pathSeparator
+ OCLASSES.toString(),
"test.SerialDriver", "-s");
Process p = ProcessTools.startProcess("test SerialDriver", pb);
p.waitFor();
assertTrue(p.exitValue() == 0);
}
private static void runInstallSerialDriver() throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
"-classpath",
SHARE.toString()
+ File.pathSeparator
+ NCLASSES.toString(),
"install.SerialDriver", "-d");
Process p = ProcessTools.startProcess("install SerialDriver", pb);
p.waitFor();
assertTrue(p.exitValue() == 0);
}
private static void assertTrue(boolean b) {
if (!b) {
throw new RuntimeException("expected true, get false");
}
}
}

View File

@ -1,105 +0,0 @@
#
# 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
# 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 4087295 4785472
# @summary Enable resolveClass() to accommodate package renaming.
# This fix enables one to implement a resolveClass method that maps a
# Serialiazable class within a serialization stream to the same class
# in a different package within the JVM runtime. See run shell script
# for instructions on how to run this test.
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
OS=`uname -s`
# Need to determine the classpath separator and filepath separator based on the
# operating system.
case "$OS" in
SunOS | Linux | Darwin | AIX )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
* )
echo "Unrecognized system!"
exit 1 ;;
esac
JAVA=${TESTJAVA}/bin/java
JAVAC=${COMPILEJAVA}/bin/javac
MKDIR=mkdir
RDEL="rm -r"
if [ -d ${TESTCLASSES}/oclasses ]
then
${RDEL} ${TESTCLASSES}/oclasses
fi
if [ -d ${TESTCLASSES}/nclasses ]
then
${RDEL} ${TESTCLASSES}/nclasses
fi
if [ -d ${TESTCLASSES}/share ]
then
${RDEL} ${TESTCLASSES}/share
fi
if [ -f ${TESTCLASSES}/stream.ser ]
then
${RDEL} ${TESTCLASSES}/stream.ser
fi
mkdir ${TESTCLASSES}/oclasses
mkdir ${TESTCLASSES}/share
mkdir ${TESTCLASSES}/nclasses
# Build sources
set -e
${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/share \
${TESTSRC}/extension/ExtendedObjectInputStream.java
CLASSPATH=${TESTCLASSES}/share; export CLASSPATH;
${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/oclasses \
${TESTSRC}/test/SerialDriver.java
CLASSPATH=${TESTCLASSES}/share; export CLASSPATH;
${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/nclasses \
${TESTSRC}/install/SerialDriver.java
# Run Case 1. Map test.SerialDriver within stream to install.SerialDriver.
CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
${JAVA} ${TESTVMOPTS} test.SerialDriver -s
CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
${JAVA} ${TESTVMOPTS} install.SerialDriver -d
rm stream.ser
# Run Case 2. Map install.SerialDriver within stream to test.SerialDriver.
CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
${JAVA} ${TESTVMOPTS} install.SerialDriver -s
CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
${JAVA} ${TESTVMOPTS} test.SerialDriver -d

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -26,8 +26,7 @@
* @bug 8071474
* @summary Better failure atomicity for default read object.
* @modules jdk.compiler
* @library /lib/testlibrary
* @build jdk.testlibrary.FileUtils
* @library /test/lib
* @compile FailureAtomicity.java SerialRef.java
* @run main failureAtomicity.FailureAtomicity
*/
@ -59,7 +58,7 @@ import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.StandardLocation;
import javax.tools.ToolProvider;
import jdk.testlibrary.FileUtils;
import jdk.test.lib.util.FileUtils;
@SuppressWarnings("unchecked")
public class FailureAtomicity {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -22,19 +22,31 @@
*/
/*
* @test
* @bug 4897937
* @run main MaskSyntheticModifierTest
* @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
* modifiers of fields and methods does not affect default
* serialVersionUID calculation.
*/
import java.io.ObjectStreamClass;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class MaskSyntheticModifierTest {
public static void main(String[] args) throws Exception {
setup();
public class Test {
public static void main(String[] args) {
long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID();
if (suid != 8027844768744011556L) {
throw new Error("incorrect serialVersionUID: " + suid);
}
}
private static void setup() throws Exception {
Files.copy(Paths.get(System.getProperty("test.src"), "Foo.class"),
Paths.get("Foo.class"), StandardCopyOption.REPLACE_EXISTING);
}
}

View File

@ -1,49 +0,0 @@
#
# 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
# 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 4897937
# @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
# modifiers of fields and methods does not affect default
# serialVersionUID calculation.
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
if [ "${TESTSRC}" = "" ]
then
TESTSRC="."
fi
set -ex
cp ${TESTSRC}/Foo.class .
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
${TESTJAVA}/bin/java ${TESTVMOPTS} Test
rm -f *.class

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2017, 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
@ -22,41 +22,59 @@
*/
/*
* @test
* @bug 4765255
* @library /lib/testlibrary
* @build JarUtils A B C D PackageAccessTest
* @run main PackageAccessTest
* @summary Verify proper functioning of package equality checks used to
* determine accessibility of superclass constructor and inherited
* writeReplace/readResolve methods.
*/
import java.io.*;
import java.net.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamClass;
import java.io.InvalidClassException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Test {
public class PackageAccessTest {
static Class bcl;
static Class dcl;
public static void main(String[] args) throws Exception {
ClassLoader ldr =
setup();
try (URLClassLoader ldr =
new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
Test.class.getClassLoader());
bcl = Class.forName("B", true, ldr);
dcl = Class.forName("D", true, ldr);
PackageAccessTest.class.getClassLoader())) {
bcl = Class.forName("B", true, ldr);
dcl = Class.forName("D", true, ldr);
Object b = bcl.newInstance();
try {
swizzle(b);
throw new Error("expected InvalidClassException for class B");
} catch (InvalidClassException e) {
System.out.println("caught " + e);
e.printStackTrace();
}
if (A.packagePrivateConstructorInvoked) {
throw new Error("package private constructor of A invoked");
}
Object b = bcl.newInstance();
try {
swizzle(b);
throw new Error("expected InvalidClassException for class B");
} catch (InvalidClassException e) {
System.out.println("caught " + e);
e.printStackTrace();
}
if (A.packagePrivateConstructorInvoked) {
throw new Error("package private constructor of A invoked");
}
Object d = dcl.newInstance();
swizzle(d);
Object d = dcl.newInstance();
swizzle(d);
}
}
static void swizzle(Object obj) throws Exception {
@ -68,6 +86,14 @@ public class Test {
new ByteArrayInputStream(bout.toByteArray());
new TestObjectInputStream(bin).readObject();
}
static void setup() throws Exception {
Path classes = Paths.get(System.getProperty("test.classes", ""));
JarUtils.createJarFile(Paths.get("foo.jar"), classes,
classes.resolve("B.class"), classes.resolve("D.class"));
Files.delete(classes.resolve("B.class"));
Files.delete(classes.resolve("D.class"));
}
}
class TestObjectInputStream extends ObjectInputStream {
@ -80,9 +106,9 @@ class TestObjectInputStream extends ObjectInputStream {
{
String n = desc.getName();
if (n.equals("B")) {
return Test.bcl;
return PackageAccessTest.bcl;
} else if (n.equals("D")) {
return Test.dcl;
return PackageAccessTest.dcl;
} else {
return super.resolveClass(desc);
}

View File

@ -1,54 +0,0 @@
#
# Copyright (c) 2002, 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 4765255
# @summary Verify proper functioning of package equality checks used to
# determine accessibility of superclass constructor and inherited
# writeReplace/readResolve methods.
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
if [ "${TESTSRC}" = "" ]
then
TESTSRC="."
fi
set -ex
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
${TESTSRC}/A.java ${TESTSRC}/B.java ${TESTSRC}/C.java ${TESTSRC}/D.java \
${TESTSRC}/Test.java
${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf foo.jar B.class D.class
rm -f B.class D.class
${TESTJAVA}/bin/java ${TESTVMOPTS} Test
rm -f *.class *.jar

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2017, 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
@ -22,21 +22,30 @@
*/
/*
* @test
* @bug 4413434
* @library /lib/testlibrary
* @build JarUtils SetupJar Boot
* @run driver SetupJar
* @run main/othervm -Xbootclasspath/a:boot.jar ConsTest
* @summary Verify that generated java.lang.reflect implementation classes do
* not interfere with serialization's class resolution mechanism.
*/
import java.io.*;
import java.lang.reflect.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.reflect.Constructor;
public class Test implements Serializable {
public class ConsTest implements Serializable {
public static void main(String[] args) throws Exception {
Constructor cons = Boot.class.getConstructor(
new Class[] { ObjectInputStream.class });
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
oout.writeObject(new Test());
oout.writeObject(new ConsTest());
oout.close();
for (int i = 0; i < 100; i++) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2017, 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
@ -21,13 +21,14 @@
* questions.
*/
package testpackage;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Helper {
public class SetupJar {
private static final int HELPER_VERSION = 8;
public static int getHelperVersion() {
return HELPER_VERSION;
public static void main(String args[]) throws Exception {
Path classes = Paths.get(System.getProperty("test.classes", ""));
JarUtils.createJarFile(Paths.get("boot.jar"), classes,
classes.resolve("Boot.class"));
}
}

View File

@ -1,53 +0,0 @@
#
# Copyright (c) 2001, 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 4413434
# @summary Verify that generated java.lang.reflect implementation classes do
# not interfere with serialization's class resolution mechanism.
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
if [ "${TESTSRC}" = "" ]
then
TESTSRC="."
fi
set -ex
rm -f *.class *.jar
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Boot.java
${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf boot.jar *.class
rm -f *.class
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -classpath boot.jar -d . \
${TESTSRC}/Test.java
${TESTJAVA}/bin/java ${TESTVMOPTS} -Xbootclasspath/a:boot.jar Test
rm -f *.class *.jar

View File

@ -0,0 +1,59 @@
/*
* Copyright (c) 2001, 2017, 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 4413434
* @library /lib/testlibrary
* @build JarUtils Foo
* @run main DeserializeButtonTest
* @summary Verify that class loaded outside of application class loader is
* correctly resolved during deserialization when read in by custom
* readObject() method of a bootstrap class (in this case,
* java.util.Vector).
*/
import java.net.URLClassLoader;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
public class DeserializeButtonTest {
public static void main(String[] args) throws Exception {
setup();
try (URLClassLoader ldr =
new URLClassLoader(new URL[]{ new URL("file:cb.jar") })) {
Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
r.run();
}
}
private static void setup() throws Exception {
Path classes = Paths.get(System.getProperty("test.classes", ""));
JarUtils.createJarFile(Paths.get("cb.jar"),
classes,
classes.resolve("Foo.class"),
classes.resolve("Foo$TestElement.class"));
}
}

View File

@ -1,54 +0,0 @@
#
# Copyright (c) 2001, 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 4413434
# @summary Verify that class loaded outside of application class loader is
# correctly resolved during deserialization when read in by custom
# readObject() method of a bootstrap class (in this case,
# java.util.Vector).
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
if [ "${TESTSRC}" = "" ]
then
TESTSRC="."
fi
set -ex
rm -f *.class *.jar
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Foo.java
${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb.jar *.class
rm -f *.class
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
${TESTJAVA}/bin/java ${TESTVMOPTS} Test
rm -f *.class *.jar

View File

@ -0,0 +1,59 @@
/*
* Copyright (c) 2000, 2017, 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 4035147 4785472
* @library /test/lib
* @build jdk.test.lib.JDKToolLauncher
* @build jdk.test.lib.process.ProcessTools
* @build ClasspathTest
* @run main serialver.ClasspathTest
* @summary Test the use of the -classpath switch in the serialver application.
*/
package serialver;
import java.io.File;
import jdk.test.lib.JDKToolLauncher;
import jdk.test.lib.process.ProcessTools;
public class ClasspathTest implements java.io.Serializable {
int a;
int b;
public static void main(String args[]) throws Exception {
JDKToolLauncher serialver =
JDKToolLauncher.create("serialver")
.addToolArg("-classpath")
.addToolArg(System.getProperty("test.class.path"))
.addToolArg("serialver.ClasspathTest");
Process p = ProcessTools.startProcess("serialver",
new ProcessBuilder(serialver.getCommand()));
p.waitFor();
if (p.exitValue() != 0) {
throw new RuntimeException("error occurs in serialver");
}
}
}

View File

@ -1,64 +0,0 @@
#
# Copyright (c) 2000, 2012, 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 4035147 4785472
# @summary Test the use of the -classpath switch in the serialver application.
# @author Naveen Sanjeeva
#
# @build Test
# @run shell run.sh
# set a few environment variables so that the shell-script can run stand-alone
# in the source directory
if [ "${TESTSRC}" = "" ] ; then
TESTSRC="."
fi
if [ "${TESTCLASSES}" = "" ] ; then
TESTCLASSES="."
fi
if [ "${TESTJAVA}" = "" ] ; then
echo "TESTJAVA not set. Test cannot execute."
echo "FAILED!!!"
exit 1
fi
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
SunOS | Linux | Darwin | AIX )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
* )
echo "Unrecognized system!"
exit 1 ;;
esac
# the test code
echo "Using the classpath .${PS}${TESTCLASSES}"
${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" serialver.Test
exit $?

View File

@ -0,0 +1,63 @@
/*
* Copyright (c) 2000, 2017, 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 4312217 4785473
* @library /test/lib
* @build jdk.test.lib.JDKToolLauncher
* @build jdk.test.lib.process.ProcessTools
* @build NestedTest
* @run main serialver.NestedTest
* @summary To test the use of nested class specification using the '.'
* notation instead of the '$' notation.
*/
package serialver;
import java.io.Serializable;
import jdk.test.lib.JDKToolLauncher;
import jdk.test.lib.process.ProcessTools;
public class NestedTest implements Serializable {
public static class Test1 implements Serializable {
public static class Test2 implements Serializable{
private static final long serialVersionUID = 100L;
}
}
public static void main(String args[]) throws Exception {
JDKToolLauncher serialver =
JDKToolLauncher.create("serialver")
.addToolArg("-classpath")
.addToolArg(System.getProperty("test.class.path"))
.addToolArg("serialver.NestedTest.Test1.Test2");
Process p = ProcessTools.startProcess("serialver",
new ProcessBuilder(serialver.getCommand()));
p.waitFor();
if (p.exitValue() != 0) {
throw new RuntimeException("error occurs in serialver.");
}
}
}

View File

@ -1,64 +0,0 @@
#
# Copyright (c) 2000, 2012, 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 4312217 4785473
# @summary Test the use of the -classpath switch in the serialver application.
# @author Naveen Sanjeeva
#
# @build Test
# @run shell run.sh
# set a few environment variables so that the shell-script can run stand-alone
# in the source directory
if [ "${TESTSRC}" = "" ] ; then
TESTSRC="."
fi
if [ "${TESTCLASSES}" = "" ] ; then
TESTCLASSES="."
fi
if [ "${TESTJAVA}" = "" ] ; then
echo "TESTJAVA not set. Test cannot execute."
echo "FAILED!!!"
exit 1
fi
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
SunOS | Linux | Darwin | AIX )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
* )
echo "Unrecognized system!"
exit 1 ;;
esac
# the test code
echo "Using the classpath .${PS}${TESTCLASSES}"
${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" 'serialver.Test.Test1.Test2'
exit $?

View File

@ -2,7 +2,6 @@ grant {
// "standard" properies that can be read by anyone
permission java.io.FilePermission "-","read,write,execute";
permission java.io.SerializablePermission "enableSubstitution";
permission java.io.SerializablePermission "enableSubclassImplementation";
// Needed to get access to private writeObjectMethod and
// to be able to call it.

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2017, 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
@ -26,23 +26,32 @@
* @bug 4100915
* @summary Verify that [write/read]ObjectOverride methods get called.
* Test verifies that ALL methods to write an object can
* be overridden. Howver, the testing for reading an object
* be overridden. However, the testing for reading an object
* is incomplete. Only test that readObjectOverride is called.
* An entire protocol would need to be implemented and written
* out before being able to test the input side of the API.
*
* Also, would be appropriate that this program verify
* that if SerializablePermission "enableSubclassImplamentation"
* that if SerializablePermission "enableSubclassImplementation"
* is not in the security policy and security is enabled, that
* a security excepiton is thrown when constructing the
* a security exception is thrown when constructing the
* ObjectOutputStream subclass.
*
*
* @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java XObjectInputStream.java XObjectOutputStream.java Test.java
* @run main Test
* @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java
* @compile XObjectInputStream.java XObjectOutputStream.java
* @compile SubclassTest.java
* @run main SubclassTest
* @run main/othervm/policy=Allow.policy SubclassTest -expectSecurityException
*/
import java.io.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamField;
import java.io.Serializable;
/**
* Test if customized readObject and writeObject are called.
@ -111,7 +120,7 @@ class A implements Serializable {
}
};
public class Test {
public class SubclassTest {
public static void main(String argv[])
throws IOException, ClassNotFoundException
{
@ -129,10 +138,11 @@ public class Test {
throw new Error("Assertion failure. " +
"Expected a security exception on previous line.");
} catch (SecurityException e) {
if (expectSecurityException)
if (expectSecurityException) {
System.err.println("Caught expected security exception.");
return;
else
throw e;
}
throw e;
}
os.writeObject(new A());
os.close();

View File

@ -1,30 +0,0 @@
#
# Copyright (c) 1998, 2012, 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.
#
#
# @bug 4100915
mkdir classes
javac -d classes *.java
java ${TESTVMOPTS} -classpath classes -Djava.policy=Allow.policy Test
# ENABLE next line when new method for invoking a main with a SecureClassLoader is known
#java -classpath classes -Djava.policy=NotAllow.policy Test -expectSecurityException

View File

@ -0,0 +1,121 @@
/*
* Copyright (c) 2000, 2017, 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 4325590
* @library /lib/testlibrary
* @build JarUtils A B
* @run main SuperclassDataLossTest
* @summary Verify that superclass data is not lost when incoming superclass
* descriptor is matched with local class that is not a superclass of
* the deserialized instance's class.
*/
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamClass;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.MalformedURLException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
class MixedSuperclassStream extends ObjectInputStream {
private boolean ldr12A;
private URLClassLoader ldr1;
private URLClassLoader ldr2;
MixedSuperclassStream(InputStream in, URLClassLoader ldr1,
URLClassLoader ldr2, boolean ldr1First) throws IOException {
super(in);
this.ldr1 = ldr1;
this.ldr2 = ldr2;
this.ldr12A = ldr12A;
}
protected Class resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
// resolve A's classdesc to class != B's superclass
String name = desc.getName();
if (ldr12A) {
if (name.equals("A")) {
return Class.forName(name, true, ldr1);
} else if (name.equals("B")) {
return Class.forName(name, true, ldr2);
}
} else {
if (name.equals("B")) {
return Class.forName(name, true, ldr1);
} else if (name.equals("A")) {
return Class.forName(name, true, ldr2);
}
}
return super.resolveClass(desc);
}
}
public class SuperclassDataLossTest {
public static void main(String[] args) throws Exception {
try (URLClassLoader ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") });
URLClassLoader ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") })) {
setup();
Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance();
a.run();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
oout.writeObject(a);
oout.close();
test(bout, ldr1, ldr2, true);
test(bout, ldr1, ldr2, false);
}
}
private static void test(ByteArrayOutputStream bout, URLClassLoader ldr1,
URLClassLoader ldr2, boolean ldr12A) throws Exception {
ByteArrayInputStream bin =
new ByteArrayInputStream(bout.toByteArray());
ObjectInputStream oin = new MixedSuperclassStream(bin, ldr1, ldr2, ldr12A);
Runnable a = (Runnable) oin.readObject();
a.run();
}
private static void setup() throws Exception {
Path classes = Paths.get(System.getProperty("test.classes", ""));
JarUtils.createJarFile(Paths.get("cb1.jar"), classes,
classes.resolve("A.class"), classes.resolve("B.class"));
Files.copy(Paths.get("cb1.jar"), Paths.get("cb2.jar"),
StandardCopyOption.REPLACE_EXISTING);
}
}

View File

@ -1,79 +0,0 @@
/*
* Copyright (c) 2000, 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.
*/
/*
* @bug 4325590
* @summary Verify that superclass data is not lost when incoming superclass
* descriptor is matched with local class that is not a superclass of
* the deserialized instance's class.
*/
import java.io.*;
import java.net.*;
class MixedSuperclassStream extends ObjectInputStream {
MixedSuperclassStream(InputStream in) throws IOException { super(in); }
protected Class resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
// resolve A's classdesc to class != B's superclass
String name = desc.getName();
if (name.equals("A")) {
return Class.forName(name, true, Test.ldr1);
} else if (name.equals("B")) {
return Class.forName(name, true, Test.ldr2);
} else {
return super.resolveClass(desc);
}
}
}
public class Test {
static URLClassLoader ldr1, ldr2;
static {
try {
ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") });
ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") });
} catch (MalformedURLException ex) {
throw new Error();
}
}
public static void main(String[] args) throws Exception {
Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance();
a.run();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
oout.writeObject(a);
oout.close();
ByteArrayInputStream bin =
new ByteArrayInputStream(bout.toByteArray());
ObjectInputStream oin = new MixedSuperclassStream(bin);
a = (Runnable) oin.readObject();
a.run();
}
}

View File

@ -1,56 +0,0 @@
#
# Copyright (c) 2000, 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 4325590
# @summary Verify that superclass data is not lost when incoming superclass
# descriptor is matched with local class that is not a superclass of
# the deserialized instance's class.
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
if [ "${TESTSRC}" = "" ]
then
TESTSRC="."
fi
set -ex
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
${TESTSRC}/A.java ${TESTSRC}/B.java
${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb1.jar A.class B.class
cp cb1.jar cb2.jar
rm -f A.class B.class
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
${TESTSRC}/Test.java
${TESTJAVA}/bin/java ${TESTVMOPTS} Test
rm -f *.class *.jar

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2017, 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
@ -22,13 +22,23 @@
*/
/*
* @test
* @bug 4348213
* @build UnnamedPackageSwitchTest pkg.A
* @run main UnnamedPackageSwitchTest
* @summary Verify that deserialization allows an incoming class descriptor
* representing a class in the unnamed package to be resolved to a
* local class with the same name in a named package, and vice-versa.
*/
import java.io.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.io.Serializable;
class A implements Serializable {
private static final long serialVersionUID = 0L;
@ -50,7 +60,7 @@ class TestObjectInputStream extends ObjectInputStream {
}
}
public class Test {
public class UnnamedPackageSwitchTest {
public static void main(String[] args) throws Exception {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);

View File

@ -1,49 +0,0 @@
#
# Copyright (c) 2000, 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 4348213
# @summary Verify that deserialization allows an incoming class descriptor
# representing a class in the unnamed package to be resolved to a
# local class with the same name in a named package, and vice-versa.
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${COMPILEJAVA}" = "" ] ; then
COMPILEJAVA="${TESTJAVA}"
fi
if [ "${TESTSRC}" = "" ]
then
TESTSRC="."
fi
set -ex
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
${TESTSRC}/A.java ${TESTSRC}/Test.java
${TESTJAVA}/bin/java ${TESTVMOPTS} Test

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -29,7 +29,7 @@ import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Stream;
import jdk.testlibrary.FileUtils;
import jdk.test.lib.util.FileUtils;
import static jdk.testlibrary.ProcessTools.*;
import org.testng.annotations.BeforeClass;
@ -40,9 +40,9 @@ import static org.testng.Assert.assertTrue;
* @test
* @bug 8087335
* @summary Tests for Class.forName(Module,String)
* @library /lib/testlibrary
* @library /lib/testlibrary /test/lib
* @modules jdk.compiler
* @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools jdk.testlibrary.FileUtils TestMain TestLayer
* @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools TestMain TestLayer
* @run testng TestDriver
*/

View File

@ -28,7 +28,7 @@
* @run main/othervm Assert
* @summary Test the assertion facility
* @author Mike McCloskey
* @key randomness intermittent
* @key randomness
*/
import package1.*;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.*
* @library /test/lib
* @run main ParseHexFloatingPoint
* @bug 4826774 8078672
* @summary Numerical tests for hexadecimal inputs to parse{Double, Float} (use -Dseed=X to set PRNG seed)
@ -32,7 +31,7 @@
* @key randomness
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class ParseHexFloatingPoint {
private ParseHexFloatingPoint(){}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.*
* @library /test/lib
* @run main BitTwiddle
* @bug 4495754 8078672
* @summary Basic test for int bit twiddling (use -Dseed=X to set PRNG seed)
@ -33,7 +32,7 @@
*/
import java.util.Random;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
import static java.lang.Integer.*;
public class BitTwiddle {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.*
* @library /test/lib
* @run main BitTwiddle
* @bug 4495754 8078672
* @summary Basic test for long bit twiddling (use -Dseed=X to set PRNG seed)
@ -33,7 +32,7 @@
*/
import java.util.Random;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
import static java.lang.Long.*;
public class BitTwiddle {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @run main CubeRootTests
* @bug 4347132 4939441 8078672
* @summary Tests for {Math, StrictMath}.cbrt (use -Dseed=X to set PRNG seed)
@ -32,7 +31,7 @@
* @key randomness
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class CubeRootTests {
private CubeRootTests(){}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @run main HypotTests
* @bug 4851638 4939441 8078672
* @summary Tests for {Math, StrictMath}.hypot (use -Dseed=X to set PRNG seed)
@ -32,7 +31,7 @@
* @key randomness
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class HypotTests {
private HypotTests(){}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @run main IeeeRecommendedTests
* @bug 4860891 4826732 4780454 4939441 4826652 8078672
* @summary Tests for IEEE 754[R] recommended functions and similar methods (use -Dseed=X to set PRNG seed)
@ -32,7 +31,7 @@
* @key randomness
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class IeeeRecommendedTests {
private IeeeRecommendedTests(){}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @run main Log1pTests
* @bug 4851638 4939441 8078672
* @summary Tests for {Math, StrictMath}.log1p (use -Dseed=X to set PRNG seed)
@ -32,7 +31,7 @@
* @key randomness
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class Log1pTests {
private Log1pTests(){}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2017, 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
@ -23,8 +23,7 @@
/*
* @test
* @library /lib/testlibrary/
* @build jdk.testlibrary.*
* @library /test/lib
* @run main MultiplicationTests
* @bug 5100935
* @summary Tests for multiplication methods (use -Dseed=X to set PRNG seed)
@ -32,7 +31,7 @@
*/
import java.math.BigInteger;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
public class MultiplicationTests {
private MultiplicationTests(){}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -31,14 +31,13 @@ import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
/**
* @test
* @bug 8140450
* @summary Stack Walk Test (use -Dseed=X to set PRNG seed)
* @library /lib/testlibrary
* @build jdk.testlibrary.*
* @library /test/lib
* @compile StackRecorderUtil.java
* @run main/othervm StackWalkTest
* @run main/othervm/java.security.policy=stackwalktest.policy StackWalkTest

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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,8 +25,7 @@
* @test
* @bug 4347132 8136799
* @key randomness
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @build Tests
* @build FdlibmTranslit
* @build CubeRootTests
@ -35,7 +34,7 @@
* @author Joseph D. Darcy
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
/**
* The tests in ../Math/CubeRootTests.java test properties that should

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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,8 +25,7 @@
* @test
* @bug 8139688
* @key randomness
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @build Tests
* @build FdlibmTranslit
* @build ExpTests
@ -34,7 +33,7 @@
* @summary Tests specifically for StrictMath.exp
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
/**
* The role of this test is to verify that the FDLIBM exp algorithm is

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, 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
@ -26,8 +26,7 @@
* @bug 4851638
* @key randomness
* @summary Tests for StrictMath.hypot
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @build Tests
* @build FdlibmTranslit
* @build HypotTests
@ -35,7 +34,7 @@
* @author Joseph D. Darcy
*/
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
/**
* The tests in ../Math/HypotTests.java test properties that should

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, 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
@ -23,8 +23,7 @@
/* @test
* @bug 8058779 8054307
* @library /lib/testlibrary/
* @build jdk.testlibrary.RandomFactory
* @library /test/lib
* @run testng LiteralReplace
* @summary Basic tests of String.replace(CharSequence, CharSequence)
* @key randomness
@ -37,7 +36,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Random;
import jdk.testlibrary.RandomFactory;
import jdk.test.lib.RandomFactory;
import org.testng.annotations.Test;
import org.testng.annotations.DataProvider;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2017, 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
@ -21,7 +21,9 @@
* questions.
*/
import com.oracle.testlibrary.jsr292.Helper;
import sun.invoke.util.Wrapper;
import test.java.lang.invoke.lib.Helper;
import java.io.File;
import java.io.Serializable;
import java.lang.invoke.MethodHandle;
@ -31,13 +33,12 @@ import java.lang.invoke.WrongMethodTypeException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import sun.invoke.util.Wrapper;
/*
* @test
* @bug 8060483 8066746
* @key randomness
* @library /lib/testlibrary /lib/testlibrary/jsr292
* @library /lib/testlibrary /java/lang/invoke/common
* @modules java.base/sun.invoke.util
* @summary unit tests for MethodHandles.explicitCastArguments()
* @run main ExplicitCastArgumentsTest
@ -249,21 +250,27 @@ public class ExplicitCastArgumentsTest {
for (Class parent : parents) {
for (int j = 0; j < children.length; j++) {
// Child type to parent type non-null conversion, shoud succeed
testConversion(mode, children[j], parent, childInst[j], childInst[j], false, null);
testConversion(mode, children[j], parent, childInst[j],
childInst[j], false, null);
// Child type to parent type null conversion, shoud succeed
testConversion(mode, children[j], parent, null, null, false, null);
testConversion(mode, children[j], parent, null,
null, false, null);
// Parent type to child type non-null conversion with parent
// type instance, should fail
testConversion(mode, parent, children[j], testSuperObj, null, true, ClassCastException.class);
testConversion(mode, parent, children[j], testSuperObj,
null, true, ClassCastException.class);
// Parent type to child type non-null conversion with child
// type instance, should succeed
testConversion(mode, parent, children[j], childInst[j], childInst[j], false, null);
testConversion(mode, parent, children[j], childInst[j],
childInst[j], false, null);
// Parent type to child type null conversion, should succeed
testConversion(mode, parent, children[j], null, null, false, null);
testConversion(mode, parent, children[j], null,
null, false, null);
}
// Parent type to child type non-null conversion with sibling
// type instance, should fail
testConversion(mode, parent, testSubClass1, testObj02, null, true, ClassCastException.class);
testConversion(mode, parent, testSubClass1, testObj02,
null, true, ClassCastException.class);
}
// Sibling type non-null conversion, should fail
testConversion(mode, testSubClass1,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2017, 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
@ -28,11 +28,15 @@
* @ignore 8078602
* @summary Test verifies that lambda forms are garbage collected
* @author kshefov
* @library /lib/testlibrary/jsr292 /lib/testlibrary
* @library /lib/testlibrary /java/lang/invoke/common
* @build TestMethods
* @build LambdaFormTestCase
* @build LFGarbageCollectedTest
* @run main/othervm -Xmx64m -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+HeapDumpOnOutOfMemoryError -DHEAP_DUMP=false LFGarbageCollectedTest
* @run main/othervm -Xmx64m
* -XX:SoftRefLRUPolicyMSPerMB=0
* -XX:+HeapDumpOnOutOfMemoryError
* -DHEAP_DUMP=false
* LFGarbageCollectedTest
*/
import java.lang.invoke.MethodHandle;

View File

@ -27,7 +27,7 @@
* @key randomness
* @summary Test verifies that lambda forms are cached when run with multiple threads
* @author kshefov
* @library /lib/testlibrary/jsr292 /lib/testlibrary
* @library /lib/testlibrary /java/lang/invoke/common
* @modules java.base/java.lang.invoke:open
* java.base/java.lang.ref:open
* java.management
@ -38,16 +38,16 @@
* @run main/othervm LFMultiThreadCachingTest
*/
import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
import java.lang.invoke.MethodHandle;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
/**
* Multiple threaded lambda forms caching test class.
@ -57,13 +57,16 @@ public final class LFMultiThreadCachingTest extends LFCachingTestCase {
private static final TestMethods.Kind[] KINDS;
static {
EnumSet<TestMethods.Kind> set = EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT));
EnumSet<TestMethods.Kind> set
= EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT));
KINDS = set.toArray(new TestMethods.Kind[set.size()]);
if (KINDS.length < 2) {
throw new Error("TESTBUG: KINDS.length[" + KINDS.length + "] should be at least 2");
throw new Error("TESTBUG: KINDS.length[" + KINDS.length
+ "] should be at least 2");
}
}
private static final int CORES = Math.max(KINDS.length, Runtime.getRuntime().availableProcessors());
private static final int CORES
= Math.max(KINDS.length, Runtime.getRuntime().availableProcessors());
/**
* Constructor a for multiple threaded lambda forms caching test case.
@ -144,6 +147,7 @@ public final class LFMultiThreadCachingTest extends LFCachingTestCase {
* @param args Accepts no arguments.
*/
public static void main(String[] args) {
LambdaFormTestCase.runTests(LFMultiThreadCachingTest::new, EnumSet.allOf(TestMethods.class));
LambdaFormTestCase.runTests(LFMultiThreadCachingTest::new,
EnumSet.allOf(TestMethods.class));
}
}

View File

@ -27,7 +27,7 @@
* @key randomness
* @summary Test verifies that lambda forms are cached when run with single thread
* @author kshefov
* @library /lib/testlibrary/jsr292 /lib/testlibrary
* @library /lib/testlibrary /java/lang/invoke/common
* @modules java.base/java.lang.ref:open
* java.base/java.lang.invoke:open
* java.management
@ -77,6 +77,7 @@ public final class LFSingleThreadCachingTest extends LFCachingTestCase {
* @param args Accepts no arguments.
*/
public static void main(String[] args) {
LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new, EnumSet.allOf(TestMethods.class));
LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new,
EnumSet.allOf(TestMethods.class));
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2017, 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
@ -21,8 +21,11 @@
* questions.
*/
import com.oracle.testlibrary.jsr292.Helper;
import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
import jdk.testlibrary.TimeLimitedRunner;
import jdk.testlibrary.Utils;
import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
import test.java.lang.invoke.lib.Helper;
import java.lang.invoke.MethodHandle;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
@ -32,8 +35,6 @@ import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
import java.util.function.Function;
import jdk.testlibrary.Utils;
import jdk.testlibrary.TimeLimitedRunner;
/**
* Lambda forms caching test case class. Contains all necessary test routines to
@ -44,7 +45,8 @@ import jdk.testlibrary.TimeLimitedRunner;
*/
public abstract class LambdaFormTestCase {
private static final long TIMEOUT = Helper.IS_THOROUGH ? 0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9);
private static final long TIMEOUT = Helper.IS_THOROUGH ?
0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9);
/**
* Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is
@ -92,7 +94,8 @@ public abstract class LambdaFormTestCase {
long failCounter;
boolean passed;
TestRun(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) {
TestRun(Function<TestMethods, LambdaFormTestCase> ctor,
Collection<TestMethods> testMethods) {
this.ctor = ctor;
this.testMethods = testMethods;
long testCaseNum = testMethods.size();
@ -175,10 +178,12 @@ public abstract class LambdaFormTestCase {
* object.
* @param testMethods list of test methods
*/
public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) {
public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor,
Collection<TestMethods> testMethods) {
LambdaFormTestCase.TestRun run
= new LambdaFormTestCase.TestRun(ctor, testMethods);
TimeLimitedRunner runner = new TimeLimitedRunner(TIMEOUT, 4.0d, run::doIteration);
TimeLimitedRunner runner
= new TimeLimitedRunner(TIMEOUT, 4.0d, run::doIteration);
try {
runner.call();
} catch (Exception ex) {

Some files were not shown because too many files have changed in this diff Show More