From 69d205a2786968c360d266093c0ccee6329a97db Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Wed, 10 May 2017 09:02:51 +0200 Subject: [PATCH 01/30] 8178278: Move Standard Algorithm Names document to specs directory Reviewed-by: erikj --- make/Javadoc.gmk | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/make/Javadoc.gmk b/make/Javadoc.gmk index 4d088b86a65..3b961f46511 100644 --- a/make/Javadoc.gmk +++ b/make/Javadoc.gmk @@ -367,13 +367,15 @@ COPY_SPEC_FILTER := %.html %.gif %.jpg %.mib %.css $(foreach m, $(ALL_MODULES), \ $(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \ - $(if $(SPECS_$m), \ - $(eval $(call SetupCopyFiles, COPY_$m, \ - SRC := $(SPECS_$m), \ - FILES := $(filter $(COPY_SPEC_FILTER), $(call CacheFind, $(SPECS_$m))), \ - DEST := $(JAVADOC_OUTPUTDIR)/specs/, \ - )) \ - $(eval JDK_SPECS_TARGETS += $(COPY_$m)) \ + $(foreach d, $(SPECS_$m), \ + $(if $(filter $(COPY_SPEC_FILTER), $(call CacheFind, $d)), \ + $(eval $(call SetupCopyFiles, COPY_$m, \ + SRC := $d, \ + FILES := $(filter $(COPY_SPEC_FILTER), $(call CacheFind, $d)), \ + DEST := $(JAVADOC_OUTPUTDIR)/specs/, \ + )) \ + $(eval JDK_SPECS_TARGETS += $(COPY_$m)) \ + ) \ ) \ ) From d1a39aa352a36224904aa0d2669c065fb392f5e8 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Wed, 10 May 2017 18:27:31 +0200 Subject: [PATCH 02/30] 8179867: JDK9 b167: demos exist in JDK bundles Reviewed-by: ihse --- make/Bundles.gmk | 1 + make/Main.gmk | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/make/Bundles.gmk b/make/Bundles.gmk index 66436381e92..ba35dcbf48e 100644 --- a/make/Bundles.gmk +++ b/make/Bundles.gmk @@ -183,6 +183,7 @@ ifneq ($(filter product-bundles, $(MAKECMDGOALS)), ) $(JDK_SYMBOLS_EXCLUDE_PATTERN) \ $(JDK_EXTRA_EXCLUDES) \ $(SYMBOLS_EXCLUDE_PATTERN) \ + $(JDK_IMAGE_HOMEDIR)/demo/% , \ $(ALL_JDK_FILES) \ ) diff --git a/make/Main.gmk b/make/Main.gmk index cb7c7ec44d4..81131518689 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -277,7 +277,10 @@ ALL_TARGETS += $(HOTSPOT_VARIANT_TARGETS) $(HOTSPOT_VARIANT_GENSRC_TARGETS) \ demos-jdk: +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileDemos.gmk) -ALL_TARGETS += demos-jdk +test-image-demos-jdk: + +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileDemos.gmk images) + +ALL_TARGETS += demos-jdk test-image-demos-jdk ################################################################################ # Jigsaw specific data and analysis targets. @@ -631,6 +634,7 @@ else # jdk libs, even though they don't need to. To avoid warnings, make sure they # aren't built until after libjava and libjvm are available to link to. demos-jdk: java.base-libs exploded-image-optimize + test-image-demos-jdk: demos-jdk # Declare dependency from -java to -gensrc $(foreach m, $(GENSRC_MODULES), $(eval $m-java: $m-gensrc)) @@ -963,7 +967,8 @@ docs-image: docs-jdk # This target builds the test image test-image: prepare-test-image test-image-hotspot-jtreg-native \ - test-image-jdk-jtreg-native test-image-failure-handler test-image-hotspot-gtest + test-image-jdk-jtreg-native test-image-failure-handler test-image-hotspot-gtest \ + test-image-demos-jdk # all-images builds all our deliverables as images. all-images: product-images test-image docs-image From 74f02ffc4632c882ac3b8291928766a35bbbbe51 Mon Sep 17 00:00:00 2001 From: Tim Bell Date: Wed, 10 May 2017 14:55:31 -0700 Subject: [PATCH 03/30] 8180129: Bundles.gmk:181: *** unterminated call to function 'filter-out': missing ')'. Stop Reviewed-by: erikj --- make/Bundles.gmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/Bundles.gmk b/make/Bundles.gmk index ba35dcbf48e..81321550e23 100644 --- a/make/Bundles.gmk +++ b/make/Bundles.gmk @@ -183,7 +183,7 @@ ifneq ($(filter product-bundles, $(MAKECMDGOALS)), ) $(JDK_SYMBOLS_EXCLUDE_PATTERN) \ $(JDK_EXTRA_EXCLUDES) \ $(SYMBOLS_EXCLUDE_PATTERN) \ - $(JDK_IMAGE_HOMEDIR)/demo/% + $(JDK_IMAGE_HOMEDIR)/demo/% \ , \ $(ALL_JDK_FILES) \ ) From 5adcb2d3d78dee73438e3e5eb2dc1f5c2f48d4a4 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Thu, 11 May 2017 08:56:44 +0200 Subject: [PATCH 04/30] 8179105: Respect "include_in_docs" property from imported modules Reviewed-by: mchung, erikj --- make/common/Modules.gmk | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/make/common/Modules.gmk b/make/common/Modules.gmk index b14616ffc21..7477013efd5 100644 --- a/make/common/Modules.gmk +++ b/make/common/Modules.gmk @@ -391,7 +391,10 @@ define ReadSingleImportMetaData else ifeq ($$(classloader), ext) PLATFORM_MODULES += $1 endif - DOCS_MODULES += $1 + ifneq ($$(include_in_docs), false) + # defaults to true if unspecified + DOCS_MODULES += $1 + endif else # Default to include in all JRE_MODULES += $1 From f69b0746773d02f60a9f3ff0ae526eefc6847a63 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Thu, 11 May 2017 09:00:56 +0200 Subject: [PATCH 05/30] 8174848: Remove gpl templates from hotspot/make Reviewed-by: erikj --- hotspot/make/templates/gpl-cp-header | 22 ---------------------- hotspot/make/templates/gpl-header | 20 -------------------- 2 files changed, 42 deletions(-) delete mode 100644 hotspot/make/templates/gpl-cp-header delete mode 100644 hotspot/make/templates/gpl-header diff --git a/hotspot/make/templates/gpl-cp-header b/hotspot/make/templates/gpl-cp-header deleted file mode 100644 index f5b3943c4c9..00000000000 --- a/hotspot/make/templates/gpl-cp-header +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) %YEARS%, 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. Oracle designates this -particular file as subject to the "Classpath" exception as provided -by Oracle in the LICENSE file that accompanied this code. - -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. diff --git a/hotspot/make/templates/gpl-header b/hotspot/make/templates/gpl-header deleted file mode 100644 index 9eadb48b613..00000000000 --- a/hotspot/make/templates/gpl-header +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) %YEARS%, 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. From 116ba945dc498493ee6562ffd64a33380d50f9cb Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Thu, 11 May 2017 14:03:50 -0700 Subject: [PATCH 06/30] 8180037: move jdk.test.lib.InMemoryJavaCompiler to a separate package Reviewed-by: mseledtsov, vlivanov --- hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java | 2 +- hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java | 2 +- hotspot/test/runtime/RedefineTests/ModifyAnonymous.java | 5 ++--- hotspot/test/runtime/Unsafe/DefineClass.java | 4 ++-- hotspot/test/runtime/Unsafe/NestedUnsafe.java | 5 +---- hotspot/test/runtime/defineAnonClass/NestedUnsafe.java | 5 ++--- hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java | 5 ++--- hotspot/test/runtime/getSysPackage/GetSysPkgTest.java | 2 +- hotspot/test/runtime/modules/ModuleStress/ModuleStress.java | 3 +-- .../test/runtime/modules/PatchModule/PatchModule2Dirs.java | 3 +-- hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java | 3 +-- .../runtime/modules/PatchModule/PatchModuleClassList.java | 2 +- .../runtime/modules/PatchModule/PatchModuleJavaBase.java | 2 +- .../test/runtime/modules/PatchModule/PatchModuleTest.java | 2 +- .../test/runtime/modules/PatchModule/PatchModuleTestJar.java | 2 +- .../runtime/modules/PatchModule/PatchModuleTestJarDir.java | 4 ++-- .../test/runtime/modules/PatchModule/PatchModuleTraceCL.java | 3 +-- .../runtime/modules/Visibility/PatchModuleVisibility.java | 2 +- .../test/runtime/modules/Visibility/XbootcpNoVisibility.java | 2 +- .../test/runtime/modules/Visibility/XbootcpVisibility.java | 2 +- 20 files changed, 25 insertions(+), 35 deletions(-) diff --git a/hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java b/hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java index 06be649608d..f648be9f484 100644 --- a/hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java +++ b/hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java @@ -26,7 +26,7 @@ import java.util.List; import java.util.ArrayList; import jdk.test.lib.ByteCodeLoader; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.Platform; import sun.management.ManagementFactoryHelper; diff --git a/hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java b/hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java index 186b235f0de..249993961b2 100644 --- a/hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java +++ b/hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java @@ -31,7 +31,7 @@ * @run main BootstrapRedefine */ -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; diff --git a/hotspot/test/runtime/RedefineTests/ModifyAnonymous.java b/hotspot/test/runtime/RedefineTests/ModifyAnonymous.java index 700a8f04e93..3eeb96e4a0a 100644 --- a/hotspot/test/runtime/RedefineTests/ModifyAnonymous.java +++ b/hotspot/test/runtime/RedefineTests/ModifyAnonymous.java @@ -34,15 +34,14 @@ import java.io.FileNotFoundException; import java.io.PrintWriter; -import java.lang.NoSuchFieldException; -import java.lang.NoSuchMethodException; import java.lang.RuntimeException; import java.lang.instrument.ClassDefinition; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.lang.instrument.Instrumentation; import java.security.ProtectionDomain; -import jdk.test.lib.*; + +import jdk.test.lib.compiler.InMemoryJavaCompiler; public class ModifyAnonymous { diff --git a/hotspot/test/runtime/Unsafe/DefineClass.java b/hotspot/test/runtime/Unsafe/DefineClass.java index 5973f666122..1c48d95b49b 100644 --- a/hotspot/test/runtime/Unsafe/DefineClass.java +++ b/hotspot/test/runtime/Unsafe/DefineClass.java @@ -32,8 +32,8 @@ */ import java.security.ProtectionDomain; -import java.io.InputStream; -import jdk.test.lib.InMemoryJavaCompiler; + +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.internal.misc.Unsafe; import static jdk.test.lib.Asserts.*; diff --git a/hotspot/test/runtime/Unsafe/NestedUnsafe.java b/hotspot/test/runtime/Unsafe/NestedUnsafe.java index a1a995ab636..ec63bf271f6 100644 --- a/hotspot/test/runtime/Unsafe/NestedUnsafe.java +++ b/hotspot/test/runtime/Unsafe/NestedUnsafe.java @@ -31,12 +31,9 @@ * @run main NestedUnsafe */ -import java.security.ProtectionDomain; -import java.io.InputStream; import java.lang.*; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.internal.misc.Unsafe; -import static jdk.test.lib.Asserts.*; // package p; diff --git a/hotspot/test/runtime/defineAnonClass/NestedUnsafe.java b/hotspot/test/runtime/defineAnonClass/NestedUnsafe.java index f4a80a61a59..247a42c4291 100644 --- a/hotspot/test/runtime/defineAnonClass/NestedUnsafe.java +++ b/hotspot/test/runtime/defineAnonClass/NestedUnsafe.java @@ -34,11 +34,10 @@ package p; -import java.security.ProtectionDomain; -import java.io.InputStream; import java.lang.*; -import jdk.test.lib.*; + import jdk.internal.misc.Unsafe; +import jdk.test.lib.compiler.InMemoryJavaCompiler; // Test that an anonymous class in package 'p' cannot define its own anonymous class diff --git a/hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java b/hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java index 0d773a56feb..459b9f704b4 100644 --- a/hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java +++ b/hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java @@ -34,11 +34,10 @@ package p; -import java.security.ProtectionDomain; -import java.io.InputStream; import java.lang.*; -import jdk.test.lib.*; + import jdk.internal.misc.Unsafe; +import jdk.test.lib.compiler.InMemoryJavaCompiler; // Test that an anonymous class that gets put in its host's package cannot define diff --git a/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java b/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java index 6847f26c8f1..75360e2e394 100644 --- a/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java +++ b/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java @@ -33,7 +33,7 @@ import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; diff --git a/hotspot/test/runtime/modules/ModuleStress/ModuleStress.java b/hotspot/test/runtime/modules/ModuleStress/ModuleStress.java index c3906bcfb15..bc6341aa9cb 100644 --- a/hotspot/test/runtime/modules/ModuleStress/ModuleStress.java +++ b/hotspot/test/runtime/modules/ModuleStress/ModuleStress.java @@ -38,8 +38,7 @@ import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.InMemoryJavaCompiler; -import java.io.File; +import jdk.test.lib.compiler.InMemoryJavaCompiler; public class ModuleStress { diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModule2Dirs.java b/hotspot/test/runtime/modules/PatchModule/PatchModule2Dirs.java index 5af477b5c30..4c49e6613ce 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModule2Dirs.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModule2Dirs.java @@ -30,10 +30,9 @@ * @run main PatchModule2Dirs */ -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; -import java.io.File; public class PatchModule2Dirs { diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java index cd9a66e49ab..2ebc75ec2db 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java @@ -31,8 +31,7 @@ * @run main PatchModuleCDS */ -import java.io.File; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleClassList.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleClassList.java index e590e63a3fc..ec9776f20a8 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleClassList.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleClassList.java @@ -33,7 +33,7 @@ import java.nio.file.Files; import java.nio.file.Paths; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleJavaBase.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleJavaBase.java index e43325703e9..e7fe2da1705 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleJavaBase.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleJavaBase.java @@ -31,7 +31,7 @@ * @run main PatchModuleJavaBase */ -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleTest.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleTest.java index a5eb563a230..d58ca4240ef 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTest.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTest.java @@ -31,7 +31,7 @@ * @run main PatchModuleTest */ -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJar.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJar.java index c7775c0c136..5979da68a5c 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJar.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJar.java @@ -31,7 +31,7 @@ * @run main PatchModuleTestJar */ -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJarDir.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJarDir.java index 18cc2597c2b..5c5a12e7c4b 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJarDir.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJarDir.java @@ -32,8 +32,8 @@ */ import java.io.File; -import java.nio.file.Files; -import jdk.test.lib.InMemoryJavaCompiler; + +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/PatchModule/PatchModuleTraceCL.java b/hotspot/test/runtime/modules/PatchModule/PatchModuleTraceCL.java index 7dda4a51d55..d1255d61e68 100644 --- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTraceCL.java +++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTraceCL.java @@ -32,8 +32,7 @@ * @run main PatchModuleTraceCL */ -import java.io.File; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/Visibility/PatchModuleVisibility.java b/hotspot/test/runtime/modules/Visibility/PatchModuleVisibility.java index 95fbce1b125..124fd7a5665 100644 --- a/hotspot/test/runtime/modules/Visibility/PatchModuleVisibility.java +++ b/hotspot/test/runtime/modules/Visibility/PatchModuleVisibility.java @@ -36,7 +36,7 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; diff --git a/hotspot/test/runtime/modules/Visibility/XbootcpNoVisibility.java b/hotspot/test/runtime/modules/Visibility/XbootcpNoVisibility.java index 5f56b2573eb..4ea90f03b2c 100644 --- a/hotspot/test/runtime/modules/Visibility/XbootcpNoVisibility.java +++ b/hotspot/test/runtime/modules/Visibility/XbootcpNoVisibility.java @@ -31,7 +31,7 @@ * @run main/othervm XbootcpNoVisibility */ -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; diff --git a/hotspot/test/runtime/modules/Visibility/XbootcpVisibility.java b/hotspot/test/runtime/modules/Visibility/XbootcpVisibility.java index 1530d8bed13..4b36695c29d 100644 --- a/hotspot/test/runtime/modules/Visibility/XbootcpVisibility.java +++ b/hotspot/test/runtime/modules/Visibility/XbootcpVisibility.java @@ -36,7 +36,7 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; From 8e28d5772d7244815995190b48840816c50d0114 Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Thu, 11 May 2017 14:13:59 -0700 Subject: [PATCH 07/30] 8180004: jdk.test.lib.DynamicVMOption should be moved to jdk.test.lib.management Reviewed-by: mseledtsov, vlivanov --- hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java | 2 +- hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java | 2 +- hotspot/test/gc/parallel/TestDynShrinkHeap.java | 2 +- .../runtime/CommandLine/OptionsValidation/TestJcmdOutput.java | 2 +- .../OptionsValidation/common/optionsvalidation/JVMOption.java | 2 +- .../runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java b/hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java index c6d2b547357..4b7fd30ab41 100644 --- a/hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java +++ b/hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java @@ -24,7 +24,7 @@ import static jdk.test.lib.Asserts.assertEQ; import static jdk.test.lib.Asserts.assertFalse; import static jdk.test.lib.Asserts.assertTrue; -import jdk.test.lib.DynamicVMOption; +import jdk.test.lib.management.DynamicVMOption; /** * @test TestDynMaxHeapFreeRatio diff --git a/hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java b/hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java index e21f066b0a0..09f24e7af35 100644 --- a/hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java +++ b/hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java @@ -38,7 +38,7 @@ import static jdk.test.lib.Asserts.assertEQ; import static jdk.test.lib.Asserts.assertFalse; import static jdk.test.lib.Asserts.assertTrue; -import jdk.test.lib.DynamicVMOption; +import jdk.test.lib.management.DynamicVMOption; public class TestDynMinHeapFreeRatio { diff --git a/hotspot/test/gc/parallel/TestDynShrinkHeap.java b/hotspot/test/gc/parallel/TestDynShrinkHeap.java index f5e78ab7346..78c5946c4b7 100644 --- a/hotspot/test/gc/parallel/TestDynShrinkHeap.java +++ b/hotspot/test/gc/parallel/TestDynShrinkHeap.java @@ -31,7 +31,7 @@ * @library /test/lib / * @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -Xmx1g -verbose:gc TestDynShrinkHeap */ -import jdk.test.lib.DynamicVMOption; +import jdk.test.lib.management.DynamicVMOption; import java.lang.management.ManagementFactory; import java.lang.management.MemoryUsage; import java.util.ArrayList; diff --git a/hotspot/test/runtime/CommandLine/OptionsValidation/TestJcmdOutput.java b/hotspot/test/runtime/CommandLine/OptionsValidation/TestJcmdOutput.java index d15d536b751..1a46eb01877 100644 --- a/hotspot/test/runtime/CommandLine/OptionsValidation/TestJcmdOutput.java +++ b/hotspot/test/runtime/CommandLine/OptionsValidation/TestJcmdOutput.java @@ -34,7 +34,7 @@ */ import jdk.test.lib.Asserts; -import jdk.test.lib.DynamicVMOption; +import jdk.test.lib.management.DynamicVMOption; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.dcmd.PidJcmdExecutor; diff --git a/hotspot/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/JVMOption.java b/hotspot/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/JVMOption.java index b10ac75c56e..dd19e352d32 100644 --- a/hotspot/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/JVMOption.java +++ b/hotspot/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/JVMOption.java @@ -29,7 +29,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; -import jdk.test.lib.DynamicVMOption; +import jdk.test.lib.management.DynamicVMOption; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.dcmd.CommandExecutor; diff --git a/hotspot/test/runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java b/hotspot/test/runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java index 865fb9b8556..b88c50683b2 100644 --- a/hotspot/test/runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java +++ b/hotspot/test/runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java @@ -51,7 +51,7 @@ import java.util.List; import java.util.Properties; import java.util.Set; import jdk.test.lib.Asserts; -import jdk.test.lib.DynamicVMOption; +import jdk.test.lib.management.DynamicVMOption; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; From c775f6f58be85e196a0eb4d7402b7f30515b66fb Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Mon, 15 May 2017 12:20:15 +0200 Subject: [PATCH 08/30] 8180048: Interned string and symbol table leak memory during parallel unlinking Make appending found dead BasicHashtableEntrys to the free list atomic. Reviewed-by: ehelin, shade, coleenp --- .../src/share/vm/classfile/stringTable.cpp | 19 ++++++---- .../src/share/vm/classfile/stringTable.hpp | 8 +++-- .../src/share/vm/classfile/symbolTable.cpp | 35 +++++++++++-------- .../src/share/vm/classfile/symbolTable.hpp | 9 +++-- hotspot/src/share/vm/runtime/vmStructs.cpp | 2 +- hotspot/src/share/vm/utilities/hashtable.cpp | 31 +++++++++++++++- hotspot/src/share/vm/utilities/hashtable.hpp | 22 ++++++++++-- 7 files changed, 97 insertions(+), 29 deletions(-) diff --git a/hotspot/src/share/vm/classfile/stringTable.cpp b/hotspot/src/share/vm/classfile/stringTable.cpp index 05f6fd8be46..731cba8a8a6 100644 --- a/hotspot/src/share/vm/classfile/stringTable.cpp +++ b/hotspot/src/share/vm/classfile/stringTable.cpp @@ -314,7 +314,11 @@ oop StringTable::intern(const char* utf8_string, TRAPS) { } void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) { - buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed); + BucketUnlinkContext context; + buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), &context); + _the_table->bulk_free_entries(&context); + *processed = context._num_processed; + *removed = context._num_removed; } void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) { @@ -323,6 +327,7 @@ void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_aliv assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); const int limit = the_table()->table_size(); + BucketUnlinkContext context; for (;;) { // Grab next set of buckets to scan int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize; @@ -332,8 +337,11 @@ void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_aliv } int end_idx = MIN2(limit, start_idx + ClaimChunkSize); - buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed); + buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, &context); } + _the_table->bulk_free_entries(&context); + *processed = context._num_processed; + *removed = context._num_removed; } void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) { @@ -359,7 +367,7 @@ void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) { } } -void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) { +void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context) { const int limit = the_table()->table_size(); assert(0 <= start_idx && start_idx <= limit, @@ -383,10 +391,9 @@ void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClos p = entry->next_addr(); } else { *p = entry->next(); - the_table()->free_entry(entry); - (*removed)++; + context->free_entry(entry); } - (*processed)++; + context->_num_processed++; entry = *p; } } diff --git a/hotspot/src/share/vm/classfile/stringTable.hpp b/hotspot/src/share/vm/classfile/stringTable.hpp index 2c0afc8bca5..0ef225f1c54 100644 --- a/hotspot/src/share/vm/classfile/stringTable.hpp +++ b/hotspot/src/share/vm/classfile/stringTable.hpp @@ -61,9 +61,13 @@ private: // Apply the give oop closure to the entries to the buckets // in the range [start_idx, end_idx). static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx); + + typedef StringTable::BucketUnlinkContext BucketUnlinkContext; // Unlink or apply the give oop closure to the entries to the buckets - // in the range [start_idx, end_idx). - static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed); + // in the range [start_idx, end_idx). Unlinked bucket entries are collected in the given + // context to be freed later. + // This allows multiple threads to work on the table at once. + static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context); // Hashing algorithm, used as the hash value used by the // StringTable for bucket selection and comparison (stored in the diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index 5121fdbcd64..548be92bcad 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -98,7 +98,7 @@ int SymbolTable::_symbols_removed = 0; int SymbolTable::_symbols_counted = 0; volatile int SymbolTable::_parallel_claimed_idx = 0; -void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed) { +void SymbolTable::buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context) { for (int i = start_idx; i < end_idx; ++i) { HashtableEntry** p = the_table()->bucket_addr(i); HashtableEntry* entry = the_table()->bucket(i); @@ -111,15 +111,14 @@ void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int break; } Symbol* s = entry->literal(); - (*processed)++; + context->_num_processed++; assert(s != NULL, "just checking"); // If reference count is zero, remove. if (s->refcount() == 0) { assert(!entry->is_shared(), "shared entries should be kept live"); delete s; - (*removed)++; *p = entry->next(); - the_table()->free_entry(entry); + context->free_entry(entry); } else { p = entry->next_addr(); } @@ -132,17 +131,20 @@ void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int // Remove unreferenced symbols from the symbol table // This is done late during GC. void SymbolTable::unlink(int* processed, int* removed) { - size_t memory_total = 0; - buckets_unlink(0, the_table()->table_size(), processed, removed); - _symbols_removed += *removed; - _symbols_counted += *processed; + BucketUnlinkContext context; + buckets_unlink(0, the_table()->table_size(), &context); + _the_table->bulk_free_entries(&context); + *processed = context._num_processed; + *removed = context._num_removed; + + _symbols_removed = context._num_removed; + _symbols_counted = context._num_processed; } void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) { const int limit = the_table()->table_size(); - size_t memory_total = 0; - + BucketUnlinkContext context; for (;;) { // Grab next set of buckets to scan int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize; @@ -152,10 +154,15 @@ void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) { } int end_idx = MIN2(limit, start_idx + ClaimChunkSize); - buckets_unlink(start_idx, end_idx, processed, removed); + buckets_unlink(start_idx, end_idx, &context); } - Atomic::add(*processed, &_symbols_counted); - Atomic::add(*removed, &_symbols_removed); + + _the_table->bulk_free_entries(&context); + *processed = context._num_processed; + *removed = context._num_removed; + + Atomic::add(context._num_processed, &_symbols_counted); + Atomic::add(context._num_removed, &_symbols_removed); } // Create a new table and using alternate hash code, populate the new table diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index e45ec753ef1..8e7b1362fff 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -154,8 +154,11 @@ private: static volatile int _parallel_claimed_idx; - // Release any dead symbols - static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed); + typedef SymbolTable::BucketUnlinkContext BucketUnlinkContext; + // Release any dead symbols. Unlinked bucket entries are collected in the given + // context to be freed later. + // This allows multiple threads to work on the table at once. + static void buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context); public: enum { symbol_alloc_batch_size = 8, diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index d5b9e3db03c..0d973ca5ee8 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -673,7 +673,7 @@ typedef CompactHashtable SymbolCompactHashTable; \ nonstatic_field(BasicHashtable, _table_size, int) \ nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ - nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ + volatile_nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ nonstatic_field(BasicHashtable, _first_free_entry, char*) \ nonstatic_field(BasicHashtable, _end_block, char*) \ nonstatic_field(BasicHashtable, _entry_size, int) \ diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index f5d37f45fa9..5fce98e2694 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2016, 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 @@ -173,6 +173,35 @@ template void BasicHashtable::reverse() { } } +template void BasicHashtable::BucketUnlinkContext::free_entry(BasicHashtableEntry* entry) { + entry->set_next(_removed_head); + _removed_head = entry; + if (_removed_tail == NULL) { + _removed_tail = entry; + } + _num_removed++; +} + +template void BasicHashtable::bulk_free_entries(BucketUnlinkContext* context) { + if (context->_num_removed == 0) { + assert(context->_removed_head == NULL && context->_removed_tail == NULL, + "Zero entries in the unlink context, but elements linked from " PTR_FORMAT " to " PTR_FORMAT, + p2i(context->_removed_head), p2i(context->_removed_tail)); + return; + } + + // MT-safe add of the list of BasicHashTableEntrys from the context to the free list. + BasicHashtableEntry* current = _free_list; + while (true) { + context->_removed_tail->set_next(current); + BasicHashtableEntry* old = (BasicHashtableEntry*)Atomic::cmpxchg_ptr(context->_removed_head, &_free_list, current); + if (old == current) { + break; + } + current = old; + } + Atomic::add(-context->_num_removed, &_number_of_entries); +} // Copy the table to the shared space. diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index 51324a18c62..76e8005c260 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -173,11 +173,11 @@ private: // Instance variables int _table_size; HashtableBucket* _buckets; - BasicHashtableEntry* _free_list; + BasicHashtableEntry* volatile _free_list; char* _first_free_entry; char* _end_block; int _entry_size; - int _number_of_entries; + volatile int _number_of_entries; protected: @@ -225,6 +225,24 @@ protected: // Free the buckets in this hashtable void free_buckets(); + // Helper data structure containing context for the bucket entry unlink process, + // storing the unlinked buckets in a linked list. + // Also avoids the need to pass around these four members as parameters everywhere. + struct BucketUnlinkContext { + int _num_processed; + int _num_removed; + // Head and tail pointers for the linked list of removed entries. + BasicHashtableEntry* _removed_head; + BasicHashtableEntry* _removed_tail; + + BucketUnlinkContext() : _num_processed(0), _num_removed(0), _removed_head(NULL), _removed_tail(NULL) { + } + + void free_entry(BasicHashtableEntry* entry); + }; + // Add of bucket entries linked together in the given context to the global free list. This method + // is mt-safe wrt. to other calls of this method. + void bulk_free_entries(BucketUnlinkContext* context); public: int table_size() { return _table_size; } void set_entry(int index, BasicHashtableEntry* entry); From 916cb71538130c0afaf6f60bfdc49cbf5758d42c Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Thu, 11 May 2017 13:11:42 +0100 Subject: [PATCH 09/30] 8179954: AArch64: C1 and C2 volatile accesses are not sequentially consistent Reviewed-by: roland --- .../aarch64/vm/c1_LIRGenerator_aarch64.cpp | 10 ++++ .../cpu/aarch64/vm/templateTable_aarch64.cpp | 54 +++++++++++++++++-- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp index 0c25198c04f..5abe4281aa2 100644 --- a/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp @@ -1347,6 +1347,16 @@ void LIRGenerator::volatile_field_store(LIR_Opr value, LIR_Address* address, void LIRGenerator::volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info) { + // 8179954: We need to make sure that the code generated for + // volatile accesses forms a sequentially-consistent set of + // operations when combined with STLR and LDAR. Without a leading + // membar it's possible for a simple Dekker test to fail if loads + // use LD;DMB but stores use STLR. This can happen if C2 compiles + // the stores in one method and C1 compiles the loads in another. + if (! UseBarriersForVolatile) { + __ membar(); + } + __ volatile_load_mem_reg(address, result, info); } diff --git a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp index 471a94511ad..f0f0f5a6ee5 100644 --- a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp @@ -2389,17 +2389,31 @@ void TemplateTable::getfield_or_static(int byte_no, bool is_static, RewriteContr const Register obj = r4; const Register off = r19; const Register flags = r0; + const Register raw_flags = r6; const Register bc = r4; // uses same reg as obj, so don't mix them resolve_cache_and_index(byte_no, cache, index, sizeof(u2)); jvmti_post_field_access(cache, index, is_static, false); - load_field_cp_cache_entry(obj, cache, index, off, flags, is_static); + load_field_cp_cache_entry(obj, cache, index, off, raw_flags, is_static); if (!is_static) { // obj is on the stack pop_and_check_object(obj); } + // 8179954: We need to make sure that the code generated for + // volatile accesses forms a sequentially-consistent set of + // operations when combined with STLR and LDAR. Without a leading + // membar it's possible for a simple Dekker test to fail if loads + // use LDR;DMB but stores use STLR. This can happen if C2 compiles + // the stores in one method and we interpret the loads in another. + if (! UseBarriersForVolatile) { + Label notVolatile; + __ tbz(raw_flags, ConstantPoolCacheEntry::is_volatile_shift, notVolatile); + __ membar(MacroAssembler::AnyAny); + __ bind(notVolatile); + } + const Address field(obj, off); Label Done, notByte, notBool, notInt, notShort, notChar, @@ -2407,7 +2421,8 @@ void TemplateTable::getfield_or_static(int byte_no, bool is_static, RewriteContr // x86 uses a shift and mask or wings it with a shift plus assert // the mask is not needed. aarch64 just uses bitfield extract - __ ubfxw(flags, flags, ConstantPoolCacheEntry::tos_state_shift, ConstantPoolCacheEntry::tos_state_bits); + __ ubfxw(flags, raw_flags, ConstantPoolCacheEntry::tos_state_shift, + ConstantPoolCacheEntry::tos_state_bits); assert(btos == 0, "change code, btos != 0"); __ cbnz(flags, notByte); @@ -2529,9 +2544,11 @@ void TemplateTable::getfield_or_static(int byte_no, bool is_static, RewriteContr #endif __ bind(Done); - // It's really not worth bothering to check whether this field - // really is volatile in the slow case. + + Label notVolatile; + __ tbz(raw_flags, ConstantPoolCacheEntry::is_volatile_shift, notVolatile); __ membar(MacroAssembler::LoadLoad | MacroAssembler::LoadStore); + __ bind(notVolatile); } @@ -2979,6 +2996,19 @@ void TemplateTable::fast_accessfield(TosState state) __ null_check(r0); const Address field(r0, r1); + // 8179954: We need to make sure that the code generated for + // volatile accesses forms a sequentially-consistent set of + // operations when combined with STLR and LDAR. Without a leading + // membar it's possible for a simple Dekker test to fail if loads + // use LDR;DMB but stores use STLR. This can happen if C2 compiles + // the stores in one method and we interpret the loads in another. + if (! UseBarriersForVolatile) { + Label notVolatile; + __ tbz(r3, ConstantPoolCacheEntry::is_volatile_shift, notVolatile); + __ membar(MacroAssembler::AnyAny); + __ bind(notVolatile); + } + // access field switch (bytecode()) { case Bytecodes::_fast_agetfield: @@ -3027,6 +3057,22 @@ void TemplateTable::fast_xaccess(TosState state) __ get_cache_and_index_at_bcp(r2, r3, 2); __ ldr(r1, Address(r2, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()))); + + // 8179954: We need to make sure that the code generated for + // volatile accesses forms a sequentially-consistent set of + // operations when combined with STLR and LDAR. Without a leading + // membar it's possible for a simple Dekker test to fail if loads + // use LDR;DMB but stores use STLR. This can happen if C2 compiles + // the stores in one method and we interpret the loads in another. + if (! UseBarriersForVolatile) { + Label notVolatile; + __ ldrw(r3, Address(r2, in_bytes(ConstantPoolCache::base_offset() + + ConstantPoolCacheEntry::flags_offset()))); + __ tbz(r3, ConstantPoolCacheEntry::is_volatile_shift, notVolatile); + __ membar(MacroAssembler::AnyAny); + __ bind(notVolatile); + } + // make sure exception is reported in correct bcp range (getfield is // next instruction) __ increment(rbcp); From a98da97e09b6df6949446ed1289d24e38d0f2db4 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Thu, 11 May 2017 18:41:56 +0200 Subject: [PATCH 10/30] 8180083: Adjust Jib and JDL configurations for 9 to support new generation Mach 5 Reviewed-by: tbell, ihse --- common/conf/jib-profiles.js | 154 +++++++++++++++++++++++------------- 1 file changed, 98 insertions(+), 56 deletions(-) diff --git a/common/conf/jib-profiles.js b/common/conf/jib-profiles.js index 8ac3df48218..b6fd25a6fcf 100644 --- a/common/conf/jib-profiles.js +++ b/common/conf/jib-profiles.js @@ -239,11 +239,8 @@ var getJibProfilesCommon = function (input, data) { common.main_profile_base = { dependencies: ["boot_jdk", "gnumake", "jtreg"], default_make_targets: ["product-bundles", "test-bundles"], - configure_args: [ - "--with-version-opt=" + common.build_id, - "--enable-jtreg-failure-handler", - "--with-version-build=" + common.build_number - ] + configure_args: concat(["--enable-jtreg-failure-handler"], + versionArgs(input, common)) }; // Extra settings for debug profiles common.debug_suffix = "-debug"; @@ -269,10 +266,12 @@ var getJibProfilesCommon = function (input, data) { /** * Define common artifacts template for all main profiles - * @param pf - Name of platform in bundle names - * @param demo_ext - Type of extension for demo bundle + * @param o - Object containing data for artifacts */ - common.main_profile_artifacts = function (pf, demo_ext) { + common.main_profile_artifacts = function (o) { + var jdk_subdir = (o.jdk_subdir != null ? o.jdk_subdir : "jdk-" + data.version); + var jre_subdir = (o.jre_subdir != null ? o.jre_subdir : "jre-" + data.version); + var pf = o.platform return { artifacts: { jdk: { @@ -281,7 +280,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jdk-" + data.version, + subdir: jdk_subdir, exploded: "images/jdk" }, jre: { @@ -290,7 +289,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jre-" + data.version + "_" + pf + "_bin.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jre-" + data.version, + subdir: jre_subdir, exploded: "images/jre" }, test: { @@ -307,7 +306,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin-symbols.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jdk-" + data.version, + subdir: jdk_subdir, exploded: "images/jdk" }, jre_symbols: { @@ -316,15 +315,8 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jre-" + data.version + "_" + pf + "_bin-symbols.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jre-" + data.version, + subdir: jre_subdir, exploded: "images/jre" - }, - demo: { - local: "bundles/\\(jdk.*demo." + demo_ext + "\\)", - remote: [ - "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_demo." + demo_ext, - "bundles/" + pf + "/\\1" - ], } } }; @@ -333,9 +325,12 @@ var getJibProfilesCommon = function (input, data) { /** * Define common artifacts template for all debug profiles - * @param pf - Name of platform in bundle names + * @param o - Object containing data for artifacts */ - common.debug_profile_artifacts = function (pf) { + common.debug_profile_artifacts = function (o) { + var jdk_subdir = "jdk-" + data.version + "/fastdebug"; + var jre_subdir = "jre-" + data.version + "/fastdebug"; + var pf = o.platform return { artifacts: { jdk: { @@ -344,7 +339,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin-debug.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jdk-" + data.version, + subdir: jdk_subdir, exploded: "images/jdk" }, jre: { @@ -353,7 +348,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jre-" + data.version + "_" + pf + "_bin-debug.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jre-" + data.version, + subdir: jre_subdir, exploded: "images/jre" }, test: { @@ -370,7 +365,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jdk-" + data.version + "_" + pf + "_bin-debug-symbols.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jdk-" + data.version, + subdir: jdk_subdir, exploded: "images/jdk" }, jre_symbols: { @@ -379,7 +374,7 @@ var getJibProfilesCommon = function (input, data) { "bundles/" + pf + "/jre-" + data.version + "_" + pf + "_bin-debug-symbols.tar.gz", "bundles/" + pf + "/\\1" ], - subdir: "jre-" + data.version, + subdir: jre_subdir, exploded: "images/jre" } } @@ -621,7 +616,7 @@ var getJibProfilesProfiles = function (input, common, data) { var testOnlyProfilesPrebuilt = { "run-test-prebuilt": { src: "src.conf", - dependencies: [ "jtreg", "gnumake", testedProfile + ".jdk", + dependencies: [ "jtreg", "gnumake", "boot_jdk", testedProfile + ".jdk", testedProfile + ".test", "src.full" ], work_dir: input.get("src.full", "install_path") + "/test", @@ -665,61 +660,53 @@ var getJibProfilesProfiles = function (input, common, data) { // // Define artifacts for profiles // - // Macosx bundles are named osx and Windows demo bundles use zip instead of + // Macosx bundles are named osx // tar.gz. var artifactData = { "linux-x64": { platform: "linux-x64", - demo_ext: "tar.gz" }, "linux-x86": { platform: "linux-x86", - demo_ext: "tar.gz" }, "macosx-x64": { platform: "osx-x64", - demo_ext: "tar.gz" + jdk_subdir: "jdk-" + data.version + ".jdk/Contents/Home", + jre_subdir: "jre-" + data.version + ".jre/Contents/Home" }, "solaris-x64": { platform: "solaris-x64", - demo_ext: "tar.gz" }, "solaris-sparcv9": { platform: "solaris-sparcv9", - demo_ext: "tar.gz" }, "windows-x64": { platform: "windows-x64", - demo_ext: "zip" }, "windows-x86": { platform: "windows-x86", - demo_ext: "zip" }, "linux-arm64": { platform: "linux-arm64-vfp-hflt", - demo_ext: "tar.gz" }, "linux-arm-vfp-hflt": { platform: "linux-arm32-vfp-hflt", - demo_ext: "tar.gz" }, "linux-arm-vfp-hflt-dyn": { platform: "linux-arm32-vfp-hflt-dyn", - demo_ext: "tar.gz" } } // Generate common artifacts for all main profiles Object.keys(artifactData).forEach(function (name) { profiles[name] = concatObjects(profiles[name], - common.main_profile_artifacts(artifactData[name].platform, artifactData[name].demo_ext)); + common.main_profile_artifacts(artifactData[name])); }); // Generate common artifacts for all debug profiles Object.keys(artifactData).forEach(function (name) { var debugName = name + common.debug_suffix; profiles[debugName] = concatObjects(profiles[debugName], - common.debug_profile_artifacts(artifactData[name].platform)); + common.debug_profile_artifacts(artifactData[name])); }); // Extra profile specific artifacts @@ -740,7 +727,12 @@ var getJibProfilesProfiles = function (input, common, data) { artifacts: { jdk: { local: "bundles/\\(jdk.*bin.tar.gz\\)", - remote: "bundles/openjdk/GPL/linux-x64/\\1", + remote: [ + "bundles/openjdk/GPL/linux-x64/jdk-" + data.version + + "_linux-x64_bin.tar.gz", + "bundles/openjdk/GPL/linux-x64/\\1" + ], + subdir: "jdk-" + data.version }, jre: { local: "bundles/\\(jre.*bin.tar.gz\\)", @@ -748,20 +740,25 @@ var getJibProfilesProfiles = function (input, common, data) { }, test: { local: "bundles/\\(jdk.*bin-tests.tar.gz\\)", - remote: "bundles/openjdk/GPL/linux-x64/\\1", + remote: [ + "bundles/openjdk/GPL/linux-x64/jdk-" + data.version + + "_linux-x64_bin-tests.tar.gz", + "bundles/openjdk/GPL/linux-x64/\\1" + ] }, jdk_symbols: { local: "bundles/\\(jdk.*bin-symbols.tar.gz\\)", - remote: "bundles/openjdk/GPL/linux-x64/\\1", + remote: [ + "bundles/openjdk/GPL/linux-x64/jdk-" + data.version + + "_linux-x64_bin-symbols.tar.gz", + "bundles/openjdk/GPL/linux-x64/\\1" + ], + subdir: "jdk-" + data.version }, jre_symbols: { local: "bundles/\\(jre.*bin-symbols.tar.gz\\)", remote: "bundles/openjdk/GPL/linux-x64/\\1", }, - demo: { - local: "bundles/\\(jdk.*demo.tar.gz\\)", - remote: "bundles/openjdk/GPL/linux-x64/\\1", - }, doc_api_spec: { local: "bundles/\\(jdk.*doc-api-spec.tar.gz\\)", remote: "bundles/openjdk/GPL/linux-x64/\\1", @@ -773,11 +770,29 @@ var getJibProfilesProfiles = function (input, common, data) { artifacts: { jdk: { local: "bundles/\\(jdk.*bin.tar.gz\\)", - remote: "bundles/openjdk/GPL/profile/linux-x86/\\1", + remote: [ + "bundles/openjdk/GPL/linux-x86/jdk-" + data.version + + "_linux-x86_bin.tar.gz", + "bundles/openjdk/GPL/linux-x86/\\1" + ], + subdir: "jdk-" + data.version }, jdk_symbols: { local: "bundles/\\(jdk.*bin-symbols.tar.gz\\)", - remote: "bundles/openjdk/GPL/profile/linux-x86/\\1", + remote: [ + "bundles/openjdk/GPL/linux-x86/jdk-" + data.version + + "_linux-x86_bin-symbols.tar.gz", + "bundles/openjdk/GPL/linux-x86/\\1" + ], + subdir: "jdk-" + data.version + }, + test: { + local: "bundles/\\(jdk.*bin-tests.tar.gz\\)", + remote: [ + "bundles/openjdk/GPL/linux-x86/jdk-" + data.version + + "_linux-x86_bin-tests.tar.gz", + "bundles/openjdk/GPL/linux-x86/\\1" + ] }, jre: { // This regexp needs to not match the compact* files below @@ -803,7 +818,12 @@ var getJibProfilesProfiles = function (input, common, data) { artifacts: { jdk: { local: "bundles/\\(jdk.*bin.tar.gz\\)", - remote: "bundles/openjdk/GPL/windows-x86/\\1", + remote: [ + "bundles/openjdk/GPL/windows-x86/jdk-" + data.version + + "_windows-x86_bin.tar.gz", + "bundles/openjdk/GPL/windows-x86/\\1" + ], + subdir: "jdk-" + data.version }, jre: { local: "bundles/\\(jre.*bin.tar.gz\\)", @@ -811,19 +831,24 @@ var getJibProfilesProfiles = function (input, common, data) { }, test: { local: "bundles/\\(jdk.*bin-tests.tar.gz\\)", - remote: "bundles/openjdk/GPL/windows-x86/\\1", + remote: [ + "bundles/openjdk/GPL/windows-x86/jdk-" + data.version + + "_windows-x86_bin-tests.tar.gz", + "bundles/openjdk/GPL/windows-x86/\\1" + ] }, jdk_symbols: { local: "bundles/\\(jdk.*bin-symbols.tar.gz\\)", - remote: "bundles/openjdk/GPL/windows-x86/\\1" + remote: [ + "bundles/openjdk/GPL/windows-x86/jdk-" + data.version + + "_windows-x86_bin-symbols.tar.gz", + "bundles/openjdk/GPL/windows-x86/\\1" + ], + subdir: "jdk-" + data.version }, jre_symbols: { local: "bundles/\\(jre.*bin-symbols.tar.gz\\)", remote: "bundles/openjdk/GPL/windows-x86/\\1", - }, - demo: { - local: "bundles/\\(jdk.*demo.zip\\)", - remote: "bundles/openjdk/GPL/windows-x86/\\1", } } }, @@ -1148,12 +1173,29 @@ var getVersion = function (major, minor, security, patch) { + "." + (minor != null ? minor : version_numbers.get("DEFAULT_VERSION_MINOR")) + "." + (security != null ? security : version_numbers.get("DEFAULT_VERSION_SECURITY")) + "." + (patch != null ? patch : version_numbers.get("DEFAULT_VERSION_PATCH")); - while (version.match(".*\.0$")) { + while (version.match(".*\\.0$")) { version = version.substring(0, version.length - 2); } return version; }; +/** + * Constructs the common version configure args based on build type and + * other version inputs + */ +var versionArgs = function(input, common) { + var args = ["--with-version-build=" + common.build_number]; + if (input.build_type == "promoted") { + args = concat(args, + // This needs to be changed when we start building release candidates + "--with-version-pre=ea", + "--without-version-opt"); + } else { + args = concat(args, "--with-version-opt=" + common.build_id); + } + return args; +} + // Properties representation of the common/autoconf/version-numbers file. Lazily // initiated by the function below. var version_numbers; From 25e5108c99ead867effffa50a7c3800adcc418ae Mon Sep 17 00:00:00 2001 From: Igor Ignatyev Date: Thu, 11 May 2017 13:58:05 -0700 Subject: [PATCH 11/30] 8180037: move jdk.test.lib.InMemoryJavaCompiler to a separate package Reviewed-by: mseledtsov, vlivanov --- test/lib/RedefineClassHelper.java | 2 +- .../lib/jdk/test/lib/{ => compiler}/InMemoryJavaCompiler.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename test/lib/jdk/test/lib/{ => compiler}/InMemoryJavaCompiler.java (98%) diff --git a/test/lib/RedefineClassHelper.java b/test/lib/RedefineClassHelper.java index 75768092365..2c236907a7a 100644 --- a/test/lib/RedefineClassHelper.java +++ b/test/lib/RedefineClassHelper.java @@ -23,7 +23,7 @@ import java.io.PrintWriter; import java.lang.instrument.*; -import jdk.test.lib.InMemoryJavaCompiler; +import jdk.test.lib.compiler.InMemoryJavaCompiler; /* * Helper class to write tests that redefine classes. diff --git a/test/lib/jdk/test/lib/InMemoryJavaCompiler.java b/test/lib/jdk/test/lib/compiler/InMemoryJavaCompiler.java similarity index 98% rename from test/lib/jdk/test/lib/InMemoryJavaCompiler.java rename to test/lib/jdk/test/lib/compiler/InMemoryJavaCompiler.java index 4033fcab0ca..e174b320180 100644 --- a/test/lib/jdk/test/lib/InMemoryJavaCompiler.java +++ b/test/lib/jdk/test/lib/compiler/InMemoryJavaCompiler.java @@ -21,7 +21,7 @@ * questions. */ -package jdk.test.lib; +package jdk.test.lib.compiler; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -56,7 +56,7 @@ import javax.tools.ToolProvider; * *
  * {@code
- * import jdk.test.lib.InMemoryJavaCompiler;
+ * import jdk.test.lib.compiler.InMemoryJavaCompiler;
  * import jdk.test.lib.ByteClassLoader;
  *
  * class Example {

From ce8579b6c7802c1c9bd428647e43b892739b8170 Mon Sep 17 00:00:00 2001
From: Igor Ignatyev 
Date: Thu, 11 May 2017 13:58:54 -0700
Subject: [PATCH 12/30] 8180004: jdk.test.lib.DynamicVMOption should be moved
 to jdk.test.lib.management

Reviewed-by: mseledtsov, vlivanov
---
 test/lib/jdk/test/lib/{ => management}/DynamicVMOption.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
 rename test/lib/jdk/test/lib/{ => management}/DynamicVMOption.java (99%)

diff --git a/test/lib/jdk/test/lib/DynamicVMOption.java b/test/lib/jdk/test/lib/management/DynamicVMOption.java
similarity index 99%
rename from test/lib/jdk/test/lib/DynamicVMOption.java
rename to test/lib/jdk/test/lib/management/DynamicVMOption.java
index 17f545e126e..786f1d85b22 100644
--- a/test/lib/jdk/test/lib/DynamicVMOption.java
+++ b/test/lib/jdk/test/lib/management/DynamicVMOption.java
@@ -20,7 +20,8 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-package jdk.test.lib;
+
+package jdk.test.lib.management;
 
 import com.sun.management.HotSpotDiagnosticMXBean;
 import java.lang.management.ManagementFactory;

From a365f54c10d63bcc9390cd77142d2554d138e9f2 Mon Sep 17 00:00:00 2001
From: Magnus Ihse Bursie 
Date: Fri, 12 May 2017 19:09:50 +0200
Subject: [PATCH 13/30] 8175825: Stop including pubs repo

Reviewed-by: erikj
---
 common/autoconf/generated-configure.sh |  2 +-
 common/autoconf/spec.gmk.in            |  5 ++---
 common/bin/hgforest.sh                 |  4 ++--
 common/doc/building.html               |  1 +
 common/doc/testing.html                |  3 +--
 make/{Javadoc.gmk => Docs.gmk}         | 22 +++++++++++-----------
 make/Main.gmk                          | 12 ++++++------
 7 files changed, 24 insertions(+), 25 deletions(-)
 rename make/{Javadoc.gmk => Docs.gmk} (96%)

diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh
index 30d6273dac4..e1d9795c280 100644
--- a/common/autoconf/generated-configure.sh
+++ b/common/autoconf/generated-configure.sh
@@ -5183,7 +5183,7 @@ VS_SDK_PLATFORM_NAME_2013=
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1493884285
+DATE_WHEN_GENERATED=1494608938
 
 ###############################################################################
 #
diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in
index ad113a258cb..247b15070e5 100644
--- a/common/autoconf/spec.gmk.in
+++ b/common/autoconf/spec.gmk.in
@@ -271,9 +271,6 @@ BUNDLES_OUTPUTDIR=$(BUILD_OUTPUT)/bundles
 TESTMAKE_OUTPUTDIR=$(BUILD_OUTPUT)/test-make
 MAKESUPPORT_OUTPUTDIR=$(BUILD_OUTPUT)/make-support
 
-# By default, output javadoc directly into image
-JAVADOC_OUTPUTDIR = $(DOCS_IMAGE_DIR)
-
 # This does not get overridden in a bootcycle build
 CONFIGURESUPPORT_OUTPUTDIR:=@CONFIGURESUPPORT_OUTPUTDIR@
 BUILDJDK_OUTPUTDIR=$(BUILD_OUTPUT)/buildjdk
@@ -818,6 +815,8 @@ INTERIM_IMAGE_DIR := $(SUPPORT_OUTPUTDIR)/interim-image
 # Docs image
 DOCS_IMAGE_SUBDIR := docs
 DOCS_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(DOCS_IMAGE_SUBDIR)
+# Output docs directly into image
+DOCS_OUTPUTDIR := $(DOCS_IMAGE_DIR)
 
 # Macosx bundles directory definitions
 JDK_MACOSX_BUNDLE_SUBDIR=jdk-bundle
diff --git a/common/bin/hgforest.sh b/common/bin/hgforest.sh
index 5d4f8eb7156..b5d6a6c938c 100644
--- a/common/bin/hgforest.sh
+++ b/common/bin/hgforest.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -183,7 +183,7 @@ trap 'nice_exit' EXIT
 
 subrepos="corba jaxp jaxws langtools jdk hotspot nashorn"
 jdk_subrepos_extra="closed jdk/src/closed jdk/make/closed jdk/test/closed hotspot/make/closed hotspot/src/closed hotspot/test/closed"
-subrepos_extra="$jdk_subrepos_extra deploy install sponsors pubs"
+subrepos_extra="$jdk_subrepos_extra deploy install sponsors"
 
 # Only look in specific locations for possible forests (avoids long searches)
 pull_default=""
diff --git a/common/doc/building.html b/common/doc/building.html
index f44bceba174..9a086783f02 100644
--- a/common/doc/building.html
+++ b/common/doc/building.html
@@ -6,6 +6,7 @@
   
   OpenJDK Build README
   
+