changeset 54985:f42d42c1ebdc

Merge
author psadhukhan
date Mon, 18 Feb 2019 10:45:21 +0530
parents 33b96cbd16f3 d230a0406623
children f12e86f1b0d6
files src/hotspot/share/code/relocInfo_ext.cpp src/hotspot/share/code/relocInfo_ext.hpp src/hotspot/share/gc/g1/collectionSetChooser.cpp src/hotspot/share/gc/g1/collectionSetChooser.hpp src/hotspot/share/gc/g1/dirtyCardQueue.cpp src/hotspot/share/gc/g1/dirtyCardQueue.hpp src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/output_html.properties src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/output_text.properties src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/output_unknown.properties src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/output_xml.properties test/hotspot/jtreg/serviceability/dcmd/framework/TEST.properties test/jdk/sun/security/krb5/auto/rcache_usemd5.sh test/jdk/sun/security/krb5/tools/ktarg.sh test/jdk/sun/security/krb5/tools/ktcheck.sh test/jdk/sun/security/krb5/tools/ktmissing.sh test/jdk/sun/security/krb5/tools/ktzero.sh test/jdk/sun/security/pkcs11/fips/CipherTest.java test/jdk/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java test/jdk/sun/security/pkcs11/fips/ImportKeyStore.java test/jdk/sun/security/pkcs11/fips/JSSEClient.java test/jdk/sun/security/pkcs11/fips/JSSEServer.java test/jdk/sun/security/pkcs11/fips/TestTLS12.java test/jdk/sun/security/pkcs11/fips/TrustManagerTest.java test/jdk/sun/security/pkcs11/fips/TrustManagerTest.policy test/jdk/sun/security/pkcs11/fips/cert8.db test/jdk/sun/security/pkcs11/fips/certs/anchor.cer test/jdk/sun/security/pkcs11/fips/certs/ca.cer test/jdk/sun/security/pkcs11/fips/certs/server.cer test/jdk/sun/security/pkcs11/fips/fips.cfg test/jdk/sun/security/pkcs11/fips/key3.db test/jdk/sun/security/pkcs11/fips/keystore test/jdk/sun/security/pkcs11/fips/secmod.db test/jdk/sun/security/pkcs11/fips/truststore
diffstat 473 files changed, 8043 insertions(+), 6938 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Sun Feb 17 15:15:30 2019 -0800
+++ b/.hgtags	Mon Feb 18 10:45:21 2019 +0530
@@ -541,3 +541,5 @@
 b5f05fe4a6f8b3996a000c20078b356d991ca8ec jdk-13+6
 6c377af36a5c4203f16aed8a5e4c2ecc08fcd8bd jdk-12+30
 021917019cda1c0c5853255322274f37693a2431 jdk-13+7
+b5f7bb57de2f797be34f6c75d45c3245ad37ab97 jdk-12+31
+a535ba736cabc6886acdff36de3a096c46e5ddc5 jdk-13+8
--- a/make/Bundles.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/Bundles.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -35,7 +35,7 @@
 # On Windows tar frequently complains that "file changed as we read it" for
 # some random source files. This seems to be cause by anti virus scanners and
 # is most likely safe to ignore. When it happens, tar returns '1'.
-ifeq ($(OPENJDK_BUILD_OS), windows)
+ifeq ($(call isBuildOs, windows), true)
   TAR_IGNORE_EXIT_VALUE := || test "$$$$?" = "1"
 endif
 
@@ -144,7 +144,7 @@
 
 # On Macosx, we bundle up the macosx specific images which already have the
 # correct base directories.
-ifeq ($(OPENJDK_TARGET_OS)-$(DEBUG_LEVEL), macosx-release)
+ifeq ($(call isTargetOs, macosx)+$(DEBUG_LEVEL), true+release)
   JDK_IMAGE_DIR := $(JDK_MACOSX_BUNDLE_DIR)
   JDK_IMAGE_HOMEDIR := $(JDK_MACOSX_CONTENTS_DIR)/Home
   JDK_BUNDLE_SUBDIR :=
@@ -167,7 +167,7 @@
 
   # Create special filter rules when dealing with unzipped .dSYM directories on
   # macosx
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), false)
       JDK_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
           $(call containing, .dSYM/, $(patsubst $(JDK_IMAGE_DIR)/%, %, $(ALL_JDK_FILES))))
--- a/make/CompileDemos.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/CompileDemos.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -234,7 +234,7 @@
 	$(call install-file)
 	$(CHMOD) -f ug+w $@
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
     $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
     $(call CacheFind, $(DEMO_SHARE_SRC)/nbproject))
--- a/make/CompileJavaModules.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/CompileJavaModules.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -51,21 +51,18 @@
 # data files and shouldn't go in the product
 java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java
 
-ifneq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), false)
   java.base_EXCLUDE_FILES += \
       SolarisLoginModule.java \
       SolarisSystem.java \
       #
 endif
 
-ifeq ($(filter $(OPENJDK_TARGET_OS), solaris macosx aix), )
-  #
-  # only solaris, macosx and aix
-  #
+ifeq ($(call isTargetOs, solaris macosx aix), false)
   java.base_EXCLUDE_FILES += sun/nio/fs/PollingWatchService.java
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   java.base_EXCLUDE_FILES += \
       sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
       #
@@ -124,7 +121,7 @@
     .template \
     #
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   # exclude all X11 on Mac.
   java.desktop_EXCLUDES += \
       sun/awt/X11 \
@@ -186,7 +183,7 @@
       sun/awt/X11/XwcTextItem.java
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   java.desktop_EXCLUDES += com/sun/java/swing/plaf/gtk
 endif
 
@@ -194,8 +191,7 @@
   java.desktop_EXCLUDES += sun/applet
 endif
 
-# Used on windows and macosx
-ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
   java.desktop_EXCLUDE_FILES += sun/awt/AWTCharset.java
 endif
 
@@ -374,11 +370,11 @@
     $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SendFailed.java \
     $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/Shutdown.java
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
 endif
 
-ifeq ($(OPENJDK_TARGET_OS),aix)
+ifeq ($(call isTargetOs, aix), true)
   jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
 endif
 
--- a/make/CopyImportModules.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/CopyImportModules.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -38,7 +38,7 @@
 $(eval $(call FillCacheFind, $(LIBS_DIR) $(CMDS_DIR) $(CONF_DIR)))
 
 ifneq ($(LIBS_DIR), )
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     TO_BIN_FILTER := %$(SHARED_LIBRARY_SUFFIX) %.diz %.pdb %.map
 
     $(eval $(call SetupCopyFiles, COPY_LIBS_TO_BIN, \
--- a/make/CreateJmods.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/CreateJmods.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -118,7 +118,7 @@
     endif
   endif
 else # not java.base
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     # Only java.base needs to include the MSVC*_DLLs. Make sure no other module
     # tries to include them (typically imported ones).
     ifneq ($(MSVCR_DLL), )
--- a/make/Images.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/Images.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -144,7 +144,7 @@
       )
 
   ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), true)
-    ifeq ($(OPENJDK_TARGET_OS), macosx)
+    ifeq ($(call isTargetOs, macosx), true)
       DEMO_FILES := $(call not-containing, .dSYM, $(DEMO_FILES))
     else
       DEMO_FILES := $(filter-out %.debuginfo %.pdb %.map, $(DEMO_FILES))
@@ -192,7 +192,7 @@
 ALL_JRE_MODULES := $(sort $(JRE_MODULES), $(foreach m, $(JRE_MODULES), \
     $(call FindTransitiveDepsForModule, $m)))
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBS_TARGET_SUBDIR := bin
 else
   LIBS_TARGET_SUBDIR := lib
@@ -211,7 +211,7 @@
   DEBUGINFO_SUFFIXES := .debuginfo .pdb .map
   # On Macosx, if debug symbols have not been zipped, find all files inside *.dSYM
   # dirs.
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     $(eval $(call FillCacheFind, \
         $(SUPPORT_OUTPUTDIR)/modules_cmds $(SUPPORT_OUTPUTDIR)/modules_libs))
     FindDebuginfoFiles = \
--- a/make/Init.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/Init.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2019, 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
@@ -277,7 +277,7 @@
         else
 	  $(ECHO) "Re-running configure using default settings"
         endif
-	( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" \
+	( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" AUTOCONF="$(AUTOCONF)" \
 	    CUSTOM_ROOT="$(CUSTOM_ROOT)" \
 	    CUSTOM_CONFIG_DIR="$(CUSTOM_CONFIG_DIR)" \
 	    $(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) )
--- a/make/InitSupport.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/InitSupport.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -483,7 +483,7 @@
 	    $(TOUCH) $(SJAVAC_SERVER_DIR)/server.port.stop; true
   endef
 
-  ifeq ($(OPENJDK_BUILD_OS), windows)
+  ifeq ($(call isBuildOs, windows), true)
     # On windows we need to synchronize with the javac server to be able to
     # move or remove the build output directory. Since we have no proper
     # synchronization process, wait for a while and hope it helps. This is only
--- a/make/MacBundles.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/MacBundles.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -30,7 +30,7 @@
 default: bundles
 
 # Only macosx has bundles defined.
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   bundles: jre-bundle jdk-bundle
 
--- a/make/Main.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/Main.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -766,6 +766,8 @@
   $(foreach m, $(GENSRC_MODULES), $(eval $m-libs-compile-commands: $m-gensrc))
   $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs-compile-commands: $m-java))
 
+  $(COMPILE_COMMANDS_TARGETS_HOTSPOT): clean-compile-commands
+  $(COMPILE_COMMANDS_TARGETS_JDK): clean-compile-commands
   compile-commands-hotspot: $(COMPILE_COMMANDS_TARGETS_HOTSPOT)
   compile-commands: $(COMPILE_COMMANDS_TARGETS_HOTSPOT) $(COMPILE_COMMANDS_TARGETS_JDK)
 
@@ -1032,7 +1034,7 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   product-images: mac-jdk-bundle
 endif
 
@@ -1139,6 +1141,9 @@
 clean-docs:
 	$(call CleanDocs)
 
+clean-compile-commands:
+	$(call CleanMakeSupportDir,compile-commands)
+
 $(CLEAN_DIR_TARGETS):
 	$(call CleanDir,$(patsubst clean-%, %, $@))
 
@@ -1181,9 +1186,9 @@
 	)
 	$(ECHO) Cleaned everything, you will have to re-run configure.
 
-ALL_TARGETS += clean clean-docs dist-clean $(CLEAN_DIR_TARGETS) $(CLEAN_SUPPORT_DIR_TARGETS) \
-    $(CLEAN_TEST_TARGETS) $(CLEAN_PHASE_TARGETS) $(CLEAN_MODULE_TARGETS) \
-    $(CLEAN_MODULE_PHASE_TARGETS)
+ALL_TARGETS += clean clean-docs clean-compile-commands dist-clean $(CLEAN_DIR_TARGETS) \
+    $(CLEAN_SUPPORT_DIR_TARGETS) $(CLEAN_TEST_TARGETS) $(CLEAN_PHASE_TARGETS) \
+    $(CLEAN_MODULE_TARGETS) $(CLEAN_MODULE_PHASE_TARGETS)
 
 ################################################################################
 # Declare *-only targets for each normal target
--- a/make/MainSupport.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/MainSupport.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -54,6 +54,13 @@
 	@$(PRINTF) " done\n"
 endef
 
+define CleanMakeSupportDir
+	@$(PRINTF) "Cleaning $(strip $1) make support artifacts ..."
+	@$(PRINTF) "\n" $(LOG_DEBUG)
+	$(RM) -r $(MAKESUPPORT_OUTPUTDIR)/$(strip $1)
+	@$(PRINTF) " done\n"
+endef
+
 define CleanTest
 	@$(PRINTF) "Cleaning test $(strip $1) ..."
 	@$(PRINTF) "\n" $(LOG_DEBUG)
--- a/make/ModuleWrapper.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/ModuleWrapper.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -42,7 +42,7 @@
 include $(MAKEFILE_PREFIX)-$(MODULE).gmk
 
 # Setup copy rules from the modules directories to the jdk image directory.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   TO_BIN_FILTER := %$(SHARED_LIBRARY_SUFFIX) %.diz %.pdb %.map
 
   $(eval $(call SetupCopyFiles, COPY_LIBS_TO_BIN, \
--- a/make/RunTests.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/RunTests.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -61,7 +61,7 @@
 endef
 
 # Setup _NT_SYMBOL_PATH on Windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   ifndef _NT_SYMBOL_PATH
     # Can't use PathList here as it adds quotes around the value.
     _NT_SYMBOL_PATH := \
@@ -224,7 +224,7 @@
 
 ifeq ($(TEST_JOBS), 0)
   CORES_DIVIDER := 2
-  ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+  ifeq ($(call isTargetCpuArch, sparc), true)
     # For smaller SPARC machines we see reasonable scaling of throughput up to
     # cpus/4 without affecting test reliability. On the bigger machines, cpus/4
     # causes intermittent timeouts.
@@ -808,7 +808,7 @@
   $1_JTREG_MAX_RAM_PERCENTAGE := $$(shell $$(EXPR) 25 / $$($1_JTREG_JOBS))
 
   # SPARC is in general slower per core so need to scale up timeouts a bit.
-  ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+  ifeq ($(call isTargetCpuArch, sparc), true)
     JTREG_TIMEOUT_FACTOR ?= 8
   else
     JTREG_TIMEOUT_FACTOR ?= 4
@@ -835,7 +835,7 @@
   $1_JTREG_BASIC_OPTIONS += -e:JDK8_HOME=$$(BOOT_JDK)
   # If running on Windows, propagate the _NT_SYMBOL_PATH to enable
   # symbol lookup in hserr files
-  ifeq ($$(OPENJDK_TARGET_OS), windows)
+  ifeq ($$(call isTargetOs, windows), true)
     $1_JTREG_BASIC_OPTIONS += -e:_NT_SYMBOL_PATH
   endif
 
--- a/make/TestImage.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/TestImage.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -30,7 +30,7 @@
 
 ############################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   FIXPATH_COPY := $(TEST_IMAGE_DIR)/bin/fixpath.exe
 
   $(FIXPATH_COPY): $(firstword $(FIXPATH))
--- a/make/ZipSecurity.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/ZipSecurity.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -70,7 +70,7 @@
 #
 # Windows specific binary security packages.
 #
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # sec-windows-bin.zip is used by builds where the corresponding sources are not available
   $(eval $(call SetupZipArchive,BUILD_SEC_WINDOWS_BIN_ZIP, \
       SRC := $(JDK_OUTPUTDIR), \
@@ -80,7 +80,7 @@
   TARGETS += $(IMAGES_OUTPUTDIR)/sec-windows-bin.zip
 
   # JGSS files contain the native Kerberos library
-  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+  ifeq ($(call isTargetCpu, x86_64), true)
     JGSS_ZIP_NAME = jgss-windows-x64-bin.zip
   else
     JGSS_ZIP_NAME = jgss-windows-i586-bin.zip
--- a/make/autoconf/basics.m4	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/autoconf/basics.m4	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2019, 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
@@ -406,6 +406,8 @@
 [
   # Save the original command line. This is passed to us by the wrapper configure script.
   AC_SUBST(CONFIGURE_COMMAND_LINE)
+  # AUTOCONF might be set in the environment by the user. Preserve for "make reconfigure".
+  AC_SUBST(AUTOCONF)
   # Save the path variable before it gets changed
   ORIGINAL_PATH="$PATH"
   AC_SUBST(ORIGINAL_PATH)
--- a/make/autoconf/spec.gmk.in	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/autoconf/spec.gmk.in	Mon Feb 18 10:45:21 2019 +0530
@@ -36,6 +36,9 @@
 # A self-referential reference to this file.
 SPEC:=@SPEC@
 
+# Path to autoconf if overriden by the user, to be used by "make reconfigure"
+AUTOCONF := @AUTOCONF@
+
 # SPACE and COMMA are defined in MakeBase.gmk, but they are also used in
 # some definitions here, and are needed if MakeBase.gmk is not included before
 # this file.
--- a/make/common/MakeBase.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/common/MakeBase.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -258,7 +258,7 @@
 ################################################################################
 # All install-file and related macros automatically call DecodeSpace when needed.
 
-ifeq ($(OPENJDK_TARGET_OS),solaris)
+ifeq ($(call isTargetOs, solaris), true)
   # On Solaris, if the target is a symlink and exists, cp won't overwrite.
   # Cp has to operate in recursive mode to allow for -P flag, to preserve soft links. If the
   # name of the target file differs from the source file, rename after copy.
@@ -284,7 +284,7 @@
 	  $(CP) -f '$(call DecodeSpace, $<)' '$(call DecodeSpace, $@)'; \
 	fi
   endef
-else ifeq ($(OPENJDK_TARGET_OS),macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   # On mac, extended attributes sometimes creep into the source files, which may later
   # cause the creation of ._* files which confuses testing. Clear these with xattr if
   # set. Some files get their write permissions removed after being copied to the
@@ -418,7 +418,7 @@
 # unchanged.
 # This is normally not needed since we use the FIXPATH prefix for command lines,
 # but might be needed in certain circumstances.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   FixPath = \
       $(shell $(CYGPATH) -m $1)
 else
--- a/make/common/Modules.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/common/Modules.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -117,11 +117,11 @@
     jdk.zipfs \
     #
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   PLATFORM_MODULES += jdk.crypto.mscapi
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   PLATFORM_MODULES += jdk.crypto.ucrypto
 endif
 
--- a/make/common/NativeCompilation.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/common/NativeCompilation.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -175,9 +175,9 @@
 )
 endef
 
-ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
+ifeq ($(call isBuildOsEnv, windows.cygwin), true)
   UNIX_PATH_PREFIX := /cygdrive
-else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys)
+else ifeq ($(call isBuildOsEnv, windows.msys), true)
   UNIX_PATH_PREFIX :=
 endif
 
@@ -770,7 +770,7 @@
 	$(TOUCH) $$@
 
   # On windows we need to create a resource file
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     ifneq ($$($1_VERSIONINFO_RESOURCE), )
       $1_RES := $$($1_OBJECT_DIR)/$$($1_BASENAME).res
       $1_RES_DEP := $$($1_RES).d
@@ -808,7 +808,7 @@
 
   ifneq ($(DISABLE_MAPFILES), true)
     $1_REAL_MAPFILE := $$($1_MAPFILE)
-    ifneq ($(OPENJDK_TARGET_OS), windows)
+    ifeq ($(call isTargetOs, windows), false)
       ifneq ($$($1_REORDER), )
         $1_REAL_MAPFILE := $$($1_OBJECT_DIR)/mapfile
 
@@ -845,13 +845,13 @@
       # Only copy debug symbols for dynamic libraries and programs.
       ifneq ($$($1_TYPE), STATIC_LIBRARY)
         # Generate debuginfo files.
-        ifeq ($(OPENJDK_TARGET_OS), windows)
+        ifeq ($(call isTargetOs, windows), true)
           $1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb" \
               "-map:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).map"
           $1_DEBUGINFO_FILES := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb \
               $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).map
 
-        else ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), )
+        else ifeq ($(call isTargetOs, linux solaris), true)
           $1_DEBUGINFO_FILES := $$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).debuginfo
           # Setup the command line creating debuginfo files, to be run after linking.
           # It cannot be run separately since it updates the original target file
@@ -860,13 +860,13 @@
               $(CD) $$($1_OUTPUT_DIR) && \
                   $$($1_OBJCOPY) --add-gnu-debuglink=$$($1_DEBUGINFO_FILES) $$($1_TARGET)
 
-        else ifeq ($(OPENJDK_TARGET_OS), macosx)
+        else ifeq ($(call isTargetOs, macosx), true)
           $1_DEBUGINFO_FILES := \
               $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \
               $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME)
           $1_CREATE_DEBUGINFO_CMDS := \
               $(DSYMUTIL) --out $$($1_OUTPUT_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET)
-        endif # OPENJDK_TARGET_OS
+        endif
 
         # Since the link rule creates more than one file that we want to track,
         # we have to use some tricks to get make to cooperate. To properly
@@ -952,7 +952,7 @@
       endif
     endif
 
-    ifeq ($(OPENJDK_TARGET_OS), windows)
+    ifeq ($(call isTargetOs, windows), true)
       ifeq ($$($1_EMBED_MANIFEST), true)
         $1_EXTRA_LDFLAGS += -manifest:embed
       endif
@@ -1032,7 +1032,7 @@
                 # Keep as much as possible on one execution line for best performance
                 # on Windows
 		$$(call LogInfo, Linking $$($1_BASENAME))
-                ifeq ($(OPENJDK_TARGET_OS), windows)
+                ifeq ($(call isTargetOs, windows), true)
 		  $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
 		      $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \
 		          $(LD_OUT_OPTION)$$($1_TARGET) $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \
@@ -1050,7 +1050,7 @@
 		  $$($1_CREATE_DEBUGINFO_CMDS)
 		  $$($1_STRIP_CMD)
                 endif
-                ifeq ($(OPENJDK_TARGET_OS), windows)
+                ifeq ($(call isTargetOs, windows), true)
                   ifneq ($$($1_MANIFEST), )
 		    $$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1
                   endif
--- a/make/common/Utils.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/common/Utils.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -181,6 +181,23 @@
   )
 
 ################################################################################
+# Boolean operators.
+
+# Return the word "true" if all the boolean words given as argument is "true",
+# and returns "false" otherwise. Boolean words must be "true" or "false". It is
+# an error to supply a non-boolean word. An empty string is considered "true".
+And = \
+  $(strip $(if $(filter-out true false, $1), $(error Non-boolean values: $1)) \
+  $(if $(strip $(filter-out true, $1)), false, true))
+
+# Return the word "false" if all the boolean words given as argument is "false",
+# and returns "true" otherwise. Boolean words must be "true" or "false". It is
+# an error to supply a non-boolean word.  An empty string is considered "false".
+Or = \
+  $(strip $(if $(filter-out true false, $1), $(error Non-boolean values: $1)) \
+  $(if $(strip $(filter-out false, $1)), true, false))
+
+################################################################################
 # Parse a multiple-keyword variable, like FOO="KEYWORD1=val1;KEYWORD2=val2;..."
 # These will be converted into a series of variables like FOO_KEYWORD1=val1,
 # FOO_KEYWORD2=val2, etc. Unknown keywords will cause an error.
@@ -269,6 +286,50 @@
     $(if $(filter $1, $(JVM_VARIANTS)), true, false))
 
 ################################################################################
+# Check if our build or target conforms to certain restrictions. This set of
+# functions all work in similar ways, testing the property that the name
+# implies, so e.g. isTargetCpu test the CPU of the target system.
+#
+# $1 - A property, or a space separated list of properties to test for.
+#
+# Returns true if the actual property matches one of the properties in the list,
+# and false otherwise.
+#
+# Examples: $(call isTargetOs, linux solaris) will return true when executed
+# on either linux or solaris, and false otherwise.
+# $(call isBuildCpuArch, x86) will return true iff the build CPU Arch is x86.
+
+isTargetOs = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_OS), $1), true, false))
+
+isTargetOsType = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_OS_TYPE), $1), true, false))
+
+isTargetCpu = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_CPU), $1), true, false))
+
+isTargetCpuArch = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_CPU_ARCH), $1), true, false))
+
+isTargetCpuBits = \
+  $(strip $(if $(filter $(OPENJDK_TARGET_CPU_BITS), $1), true, false))
+
+isBuildOs = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_OS), $1), true, false))
+
+isBuildOsType = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_OS_TYPE), $1), true, false))
+
+isBuildOsEnv = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_OS_ENV), $1), true, false))
+
+isBuildCpu = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_CPU), $1), true, false))
+
+isBuildCpuArch = \
+  $(strip $(if $(filter $(OPENJDK_BUILD_CPU_ARCH), $1), true, false))
+
+################################################################################
 # Converts a space separated list to a comma separated list.
 #
 # Replacing double-comma with a single comma is to workaround the issue with
--- a/make/conf/jib-profiles.js	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/conf/jib-profiles.js	Mon Feb 18 10:45:21 2019 +0530
@@ -944,11 +944,17 @@
         },
 
         jcov: {
-            server: "jpg",
-            product: "jcov",
-            version: "3.0",
-            build_number: "b07",
-            file: "bundles/jcov-3_0.zip",
+            // Until an official build of JCov is available, use custom
+            // build to support classfile version 57.
+            // See CODETOOLS-7902358 for more info.
+            // server: "jpg",
+            // product: "jcov",
+            // version: "3.0",
+            // build_number: "b07",
+            // file: "bundles/jcov-3_0.zip",
+            organization: common.organization,
+            revision: "3.0-57-support+1.0",
+            ext: "zip",
             environment_name: "JCOV_HOME",
         },
 
--- a/make/copy/Copy-java.base.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/copy/Copy-java.base.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -31,7 +31,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
 
   TZMAPPINGS_SRC := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/conf
 
@@ -44,7 +44,7 @@
 
 ################################################################################
 # Copy the microsoft runtime libraries on windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   # Chmod to avoid permission issues if bundles are unpacked on unix platforms.
   define copy-and-chmod
@@ -81,7 +81,7 @@
 ################################################################################
 # In jvm.cfg, the first listed KNOWN variant is the default. On most build
 # configurations, that is the server variant.
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), windows-x86)
+ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86)), true)
   DEFAULT_CFG_VARIANT ?= client
 endif
 DEFAULT_CFG_VARIANT ?= server
@@ -143,7 +143,7 @@
 DEF_POLICY_SRC_LIST := $(DEF_POLICY_SRC)
 DEF_POLICY_SRC_LIST += $(CUSTOM_POLICY_SRC_LIST)
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), windows solaris), )
+ifeq ($(call isTargetOs, windows solaris), true)
   DEF_POLICY_SRC_LIST += $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/lib/security/default.policy
 endif
 
@@ -183,7 +183,7 @@
 
 TARGETS += $(COPY_NET_PROPERTIES)
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   $(eval $(call SetupCopyFiles, COPY_SDP_CONF, \
       FILES := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template, \
       DEST := $(CONF_DST_DIR)/sdp, \
--- a/make/copy/Copy-jdk.crypto.cryptoki.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/copy/Copy-jdk.crypto.cryptoki.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   SUNPKCS11_CFG_SRC := \
       $(TOPDIR)/src/jdk.crypto.cryptoki/solaris/conf/security/sunpkcs11-solaris.cfg
--- a/make/copy/Copy-jdk.crypto.ucrypto.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/copy/Copy-jdk.crypto.ucrypto.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   UCRYPTO_CFG_SRC := $(TOPDIR)/src/jdk.crypto.ucrypto/solaris/conf/security/ucrypto-solaris.cfg
   UCRYPTO_CFG_DST := $(CONF_DST_DIR)/security/ucrypto-solaris.cfg
--- a/make/data/symbols/README	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/data/symbols/README	Mon Feb 18 10:45:21 2019 +0530
@@ -1,3 +1,3 @@
 This directory contains history data for -release.
 
-Please see $LANGTOOLS_DIR/make/src/classes/build/tools/symbolgenerator/CreateSymbols.java for main usage.
+Please see $JDK_TOP_DIR/make/scripts/generate-symbol-data.sh for main usage.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.base-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,636 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name java.base
+header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/acl,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider target linux-amd64 flags 8000
+
+class name java/io/FileInputStream
+-method name finalize descriptor ()V
+
+class name java/io/FileOutputStream
+-method name finalize descriptor ()V
+
+class name java/io/InputStream
+method name skipNBytes descriptor (J)V thrownTypes java/io/IOException flags 1
+
+class name java/lang/Character$UnicodeBlock
+field name GEORGIAN_EXTENDED descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name HANIFI_ROHINGYA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name OLD_SOGDIAN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name SOGDIAN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name DOGRA descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name GUNJALA_GONDI descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MAKASAR descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MEDEFAIDRIN descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name MAYAN_NUMERALS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name INDIC_SIYAQ_NUMBERS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+field name CHESS_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock; flags 19
+
+class name java/lang/Character$UnicodeScript
+field name HANIFI_ROHINGYA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name OLD_SOGDIAN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name SOGDIAN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name DOGRA descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name GUNJALA_GONDI descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name MAKASAR descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+field name MEDEFAIDRIN descriptor Ljava/lang/Character$UnicodeScript; flags 4019
+
+class name java/lang/Class
+header extends java/lang/Object implements java/io/Serializable,java/lang/reflect/GenericDeclaration,java/lang/reflect/Type,java/lang/reflect/AnnotatedElement,java/lang/invoke/TypeDescriptor$OfField,java/lang/constant/Constable flags 31 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/invoke/TypeDescriptor$OfField<Ljava/lang/Class<*>;>;Ljava/lang/constant/Constable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name componentType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name arrayType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>;
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/ClassDesc;>;
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/ClassNotFoundException
+header extends java/lang/ReflectiveOperationException flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/lang/Double
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Double;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Double;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Double; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Enum
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/Comparable,java/io/Serializable nestMembers java/lang/Enum$EnumDesc flags 421 signature <E:Ljava/lang/Enum<TE;>;>Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/Comparable<TE;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 11 signature ()Ljava/util/Optional<Ljava/lang/Enum$EnumDesc<TE;>;>;
+
+class name java/lang/Enum$EnumDesc
+header extends java/lang/constant/DynamicConstantDesc nestHost java/lang/Enum flags 31 signature <E:Ljava/lang/Enum<TE;>;>Ljava/lang/constant/DynamicConstantDesc<TE;>;
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name of descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc; flags 9 signature <E:Ljava/lang/Enum<TE;>;>(Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc<TE;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Enum; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)TE;
+method name toString descriptor ()Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/ExceptionInInitializerError
+header extends java/lang/LinkageError flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/lang/Float
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Float;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Float;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Float; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Integer
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Integer;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Integer;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Integer; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/Long
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Long;>;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/Long;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Long; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/String
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable,java/lang/CharSequence,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/String;>;Ljava/lang/CharSequence;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+method name indent descriptor (I)Ljava/lang/String; flags 1
+method name transform descriptor (Ljava/util/function/Function;)Ljava/lang/Object; flags 1 signature <R:Ljava/lang/Object;>(Ljava/util/function/Function<-Ljava/lang/String;+TR;>;)TR;
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/String;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/System
+header extends java/lang/Object nestMembers java/lang/System$LoggerFinder,java/lang/System$Logger,java/lang/System$Logger$Level flags 31
+innerclass innerClass java/lang/System$LoggerFinder outerClass java/lang/System innerClassName LoggerFinder flags 409
+innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/constant/ClassDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField<Ljava/lang/constant/ClassDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name of descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name of descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name ofDescriptor descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9
+method name arrayType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name arrayType descriptor (I)Ljava/lang/constant/ClassDesc; flags 1
+method name nested descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 1
+method name nested descriptor (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 81
+method name isArray descriptor ()Z flags 1
+method name isPrimitive descriptor ()Z flags 1
+method name isClassOrInterface descriptor ()Z flags 1
+method name componentType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name packageName descriptor ()Ljava/lang/String; flags 1
+method name displayName descriptor ()Ljava/lang/String; flags 1
+method name descriptorString descriptor ()Ljava/lang/String; flags 401
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/constant/Constable
+header extends java/lang/Object flags 601
+method name describeConstable descriptor ()Ljava/util/Optional; flags 401 signature ()Ljava/util/Optional<+Ljava/lang/constant/ConstantDesc;>;
+
+class name java/lang/constant/ConstantDesc
+header extends java/lang/Object flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 401
+
+class name java/lang/constant/ConstantDescs
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+field name DEFAULT_NAME descriptor Ljava/lang/String; constantValue _ flags 19
+field name CD_Object descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_String descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Class descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Number descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Integer descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Long descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Float descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Double descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Short descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Byte descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Character descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Boolean descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Void descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Throwable descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Exception descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Enum descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_VarHandle descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandles descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandles_Lookup descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandle descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodType descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_CallSite descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Collection descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_List descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Set descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_Map descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ConstantDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ClassDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_EnumDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodTypeDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DirectMethodHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_VarHandleDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_MethodHandleDesc_Kind descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DynamicConstantDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_DynamicCallSiteDesc descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_ConstantBootstraps descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name BSM_PRIMITIVE_CLASS descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_ENUM_CONSTANT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_NULL_CONSTANT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_FIELD descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_STATIC_FIELD descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_VARHANDLE_ARRAY descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name BSM_INVOKE descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19
+field name CD_int descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_long descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_float descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_double descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_short descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_byte descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_char descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_boolean descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name CD_void descriptor Ljava/lang/constant/ClassDesc; flags 19
+field name NULL descriptor Ljava/lang/constant/ConstantDesc; flags 19
+method name ofCallsiteBootstrap descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+method name ofConstantBootstrap descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+
+class name java/lang/constant/DirectMethodHandleDesc
+header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind flags 601
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name kind descriptor ()Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 401
+method name refKind descriptor ()I flags 401
+method name isOwnerInterface descriptor ()Z flags 401
+method name owner descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name methodName descriptor ()Ljava/lang/String; flags 401
+method name lookupDescriptor descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/constant/DirectMethodHandleDesc$Kind
+header extends java/lang/Enum nestHost java/lang/constant/DirectMethodHandleDesc flags 4031 signature Ljava/lang/Enum<Ljava/lang/constant/DirectMethodHandleDesc$Kind;>;
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+field name STATIC descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_STATIC descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name VIRTUAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_VIRTUAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name SPECIAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name INTERFACE_SPECIAL descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name CONSTRUCTOR descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name GETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name SETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name STATIC_GETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name STATIC_SETTER descriptor Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 4019
+field name refKind descriptor I flags 11
+field name isInterface descriptor Z flags 11
+method name values descriptor ()[Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (I)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+method name valueOf descriptor (IZ)Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 9
+
+class name java/lang/constant/DynamicCallSiteDesc
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 89
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 9
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 9
+method name withArgs descriptor ([Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 81
+method name withNameAndType descriptor (Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DynamicCallSiteDesc; flags 1
+method name invocationName descriptor ()Ljava/lang/String; flags 1
+method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 1
+method name bootstrapMethod descriptor ()Ljava/lang/constant/MethodHandleDesc; flags 1
+method name bootstrapArgs descriptor ()[Ljava/lang/constant/ConstantDesc; flags 1
+method name resolveCallSiteDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/CallSite; thrownTypes java/lang/Throwable flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 11
+method name hashCode descriptor ()I flags 11
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/lang/constant/DynamicConstantDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 421 signature <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerClassName EnumDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+method name <init> descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)V flags 84
+method name ofCanonical descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/ConstantDesc; flags 9 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/ConstantDesc;
+method name ofNamed descriptor (Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 89 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 89 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;[Ljava/lang/constant/ConstantDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc;)Ljava/lang/constant/DynamicConstantDesc; flags 9 signature <T:Ljava/lang/Object;>(Ljava/lang/constant/DirectMethodHandleDesc;)Ljava/lang/constant/DynamicConstantDesc<TT;>;
+method name constantName descriptor ()Ljava/lang/String; flags 1
+method name constantType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name bootstrapMethod descriptor ()Ljava/lang/constant/DirectMethodHandleDesc; flags 1
+method name bootstrapArgs descriptor ()[Ljava/lang/constant/ConstantDesc; flags 1
+method name bootstrapArgsList descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/constant/ConstantDesc;>;
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)TT;
+method name equals descriptor (Ljava/lang/Object;)Z flags 11
+method name hashCode descriptor ()I flags 11
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/lang/constant/MethodHandleDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 601
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name of descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofMethod descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofField descriptor (Ljava/lang/constant/DirectMethodHandleDesc$Kind;Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 9
+method name ofConstructor descriptor (Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/DirectMethodHandleDesc; flags 89
+method name asType descriptor (Ljava/lang/constant/MethodTypeDesc;)Ljava/lang/constant/MethodHandleDesc; flags 1
+method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 401
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+
+class name java/lang/constant/MethodTypeDesc
+header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/constant/ClassDesc;Ljava/lang/constant/MethodTypeDesc;>;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name ofDescriptor descriptor (Ljava/lang/String;)Ljava/lang/constant/MethodTypeDesc; flags 9
+method name of descriptor (Ljava/lang/constant/ClassDesc;[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 89
+method name returnType descriptor ()Ljava/lang/constant/ClassDesc; flags 401
+method name parameterCount descriptor ()I flags 401
+method name parameterType descriptor (I)Ljava/lang/constant/ClassDesc; flags 401
+method name parameterList descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<Ljava/lang/constant/ClassDesc;>;
+method name parameterArray descriptor ()[Ljava/lang/constant/ClassDesc; flags 401
+method name changeReturnType descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name changeParameterType descriptor (ILjava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name dropParameterTypes descriptor (II)Ljava/lang/constant/MethodTypeDesc; flags 401
+method name insertParameterTypes descriptor (I[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 481
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name displayDescriptor descriptor ()Ljava/lang/String; flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 401
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/invoke/MethodHandle
+header extends java/lang/Object implements java/lang/constant/Constable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/MethodHandleDesc;>;
+
+class name java/lang/invoke/MethodHandleProxies
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/MethodType
+header extends java/lang/Object implements java/lang/constant/Constable,java/lang/invoke/TypeDescriptor$OfMethod,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/lang/constant/Constable;Ljava/lang/invoke/TypeDescriptor$OfMethod<Ljava/lang/Class<*>;Ljava/lang/invoke/MethodType;>;Ljava/io/Serializable;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name descriptorString descriptor ()Ljava/lang/String; flags 1
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/constant/MethodTypeDesc;>;
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041
+
+class name java/lang/invoke/TypeDescriptor
+header extends java/lang/Object nestMembers java/lang/invoke/TypeDescriptor$OfMethod,java/lang/invoke/TypeDescriptor$OfField flags 601
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name descriptorString descriptor ()Ljava/lang/String; flags 401
+
+class name java/lang/invoke/TypeDescriptor$OfField
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+method name isArray descriptor ()Z flags 401
+method name isPrimitive descriptor ()Z flags 401
+method name componentType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+method name arrayType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+
+class name java/lang/invoke/TypeDescriptor$OfMethod
+header extends java/lang/Object implements java/lang/invoke/TypeDescriptor nestHost java/lang/invoke/TypeDescriptor flags 601 signature <F::Ljava/lang/invoke/TypeDescriptor$OfField<TF;>;M::Ljava/lang/invoke/TypeDescriptor$OfMethod<TF;TM;>;>Ljava/lang/Object;Ljava/lang/invoke/TypeDescriptor;
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609
+innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609
+method name parameterCount descriptor ()I flags 401
+method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature (I)TF;
+method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()TF;
+method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 401 signature ()[TF;
+method name parameterList descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<TF;>;
+method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (TF;)TM;
+method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (ITF;)TM;
+method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 401 signature (II)TM;
+method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 481 signature (I[TF;)TM;
+
+class name java/lang/invoke/VarHandle
+header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode flags 421
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019
+method name toString descriptor ()Ljava/lang/String; flags 11
+method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljava/lang/invoke/VarHandle$VarHandleDesc;>;
+
+class name java/lang/invoke/VarHandle$VarHandleDesc
+header extends java/lang/constant/DynamicConstantDesc nestHost java/lang/invoke/VarHandle flags 31 signature Ljava/lang/constant/DynamicConstantDesc<Ljava/lang/invoke/VarHandle;>;
+innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name ofField descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name ofStaticField descriptor (Ljava/lang/constant/ClassDesc;Ljava/lang/String;Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name ofArray descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/invoke/VarHandle$VarHandleDesc; flags 9
+method name varType descriptor ()Ljava/lang/constant/ClassDesc; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/VarHandle; thrownTypes java/lang/ReflectiveOperationException flags 1
+method name toString descriptor ()Ljava/lang/String; flags 1
+method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041
+
+class name java/lang/module/ModuleDescriptor
+header extends java/lang/Object implements java/lang/Comparable nestMembers java/lang/module/ModuleDescriptor$Builder,java/lang/module/ModuleDescriptor$Version,java/lang/module/ModuleDescriptor$Provides,java/lang/module/ModuleDescriptor$Opens,java/lang/module/ModuleDescriptor$Opens$Modifier,java/lang/module/ModuleDescriptor$Exports,java/lang/module/ModuleDescriptor$Exports$Modifier,java/lang/module/ModuleDescriptor$Requires,java/lang/module/ModuleDescriptor$Requires$Modifier,java/lang/module/ModuleDescriptor$Modifier flags 21 signature Ljava/lang/Object;Ljava/lang/Comparable<Ljava/lang/module/ModuleDescriptor;>;
+innerclass innerClass java/lang/module/ModuleDescriptor$Builder outerClass java/lang/module/ModuleDescriptor innerClassName Builder flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Provides outerClass java/lang/module/ModuleDescriptor innerClassName Provides flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens outerClass java/lang/module/ModuleDescriptor innerClassName Opens flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports outerClass java/lang/module/ModuleDescriptor innerClassName Exports flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires outerClass java/lang/module/ModuleDescriptor innerClassName Requires flags 19
+innerclass innerClass java/lang/module/ModuleDescriptor$Modifier outerClass java/lang/module/ModuleDescriptor innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Opens$Modifier outerClass java/lang/module/ModuleDescriptor$Opens innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Exports$Modifier outerClass java/lang/module/ModuleDescriptor$Exports innerClassName Modifier flags 4019
+innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerClass java/lang/module/ModuleDescriptor$Requires innerClassName Modifier flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/Executable
+header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/UndeclaredThrowableException
+header extends java/lang/RuntimeException flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/net/SecureCacheResponse
+method name getSSLSession descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljavax/net/ssl/SSLSession;>;
+
+class name java/net/ServerSocket
+method name <init> descriptor (Ljava/net/SocketImpl;)V flags 4
+
+class name java/nio/file/Files
+method name mismatch descriptor (Ljava/nio/file/Path;Ljava/nio/file/Path;)J thrownTypes java/io/IOException flags 9
+
+class name java/security/AccessController
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;
+-method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;)Ljava/lang/Object; flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;Ljava/security/AccessControlContext;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name doPrivileged descriptor (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; thrownTypes java/security/PrivilegedActionException flags 9 signature <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;Ljava/security/AccessControlContext;)TT; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+
+class name java/security/Key
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 6603384152749567654 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/PrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 6034044314589513430 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/PrivilegedActionException
+header extends java/lang/Exception flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409
+-method name getCause descriptor ()Ljava/lang/Throwable;
+
+class name java/security/Provider
+-method name getService descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+-method name putService descriptor (Ljava/security/Provider$Service;)V
+-method name removeService descriptor (Ljava/security/Provider$Service;)V
+method name getService descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; flags 1
+method name putService descriptor (Ljava/security/Provider$Service;)V flags 4
+method name removeService descriptor (Ljava/security/Provider$Service;)V flags 4
+
+class name java/security/PublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 7187392471159151072 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/DSAPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 7776497482533790279 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/DSAPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 1234526332779022332 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/ECPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -7896394956925609184 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/ECPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -3314988629879632826 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAMultiPrimePrivateCrtKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 618058533534628008 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPrivateCrtKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -5682214253527700368 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 5187144804936595022 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/interfaces/RSAPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -8727434096241101194 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/security/spec/PSSParameterSpec
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/text/CompactNumberFormat
+header extends java/text/NumberFormat flags 31
+innerclass innerClass java/text/Format$Field outerClass java/text/Format innerClassName Field flags 9
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+method name <init> descriptor (Ljava/lang/String;Ljava/text/DecimalFormatSymbols;[Ljava/lang/String;)V flags 1
+method name format descriptor (Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 11
+method name format descriptor (DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 1
+method name format descriptor (JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer; flags 1
+method name formatToCharacterIterator descriptor (Ljava/lang/Object;)Ljava/text/AttributedCharacterIterator; flags 1
+method name parse descriptor (Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number; flags 1
+method name setMaximumIntegerDigits descriptor (I)V flags 1
+method name setMinimumIntegerDigits descriptor (I)V flags 1
+method name setMinimumFractionDigits descriptor (I)V flags 1
+method name setMaximumFractionDigits descriptor (I)V flags 1
+method name getRoundingMode descriptor ()Ljava/math/RoundingMode; flags 1
+method name setRoundingMode descriptor (Ljava/math/RoundingMode;)V flags 1
+method name getGroupingSize descriptor ()I flags 1
+method name setGroupingSize descriptor (I)V flags 1
+method name isGroupingUsed descriptor ()Z flags 1
+method name setGroupingUsed descriptor (Z)V flags 1
+method name isParseIntegerOnly descriptor ()Z flags 1
+method name setParseIntegerOnly descriptor (Z)V flags 1
+method name isParseBigDecimal descriptor ()Z flags 1
+method name setParseBigDecimal descriptor (Z)V flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 1
+method name hashCode descriptor ()I flags 1
+method name clone descriptor ()Ljava/text/CompactNumberFormat; flags 1
+method name clone descriptor ()Ljava/lang/Object; flags 1041
+
+class name java/text/NumberFormat
+header extends java/text/Format nestMembers java/text/NumberFormat$Style,java/text/NumberFormat$Field flags 421
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+method name getCompactNumberInstance descriptor ()Ljava/text/NumberFormat; flags 9
+method name getCompactNumberInstance descriptor (Ljava/util/Locale;Ljava/text/NumberFormat$Style;)Ljava/text/NumberFormat; flags 9
+
+class name java/text/NumberFormat$Field
+field name PREFIX descriptor Ljava/text/NumberFormat$Field; flags 19
+field name SUFFIX descriptor Ljava/text/NumberFormat$Field; flags 19
+
+class name java/text/NumberFormat$Style
+header extends java/lang/Enum nestHost java/text/NumberFormat flags 4031 signature Ljava/lang/Enum<Ljava/text/NumberFormat$Style;>;
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+field name SHORT descriptor Ljava/text/NumberFormat$Style; flags 4019
+field name LONG descriptor Ljava/text/NumberFormat$Style; flags 4019
+method name values descriptor ()[Ljava/text/NumberFormat$Style; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Ljava/text/NumberFormat$Style; flags 9
+
+class name java/text/spi/NumberFormatProvider
+header extends java/util/spi/LocaleServiceProvider flags 421
+innerclass innerClass java/text/NumberFormat$Style outerClass java/text/NumberFormat innerClassName Style flags 4019
+method name getCompactNumberInstance descriptor (Ljava/util/Locale;Ljava/text/NumberFormat$Style;)Ljava/text/NumberFormat; flags 1
+
+class name java/util/concurrent/CompletableFuture
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1041
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1041
+
+class name java/util/concurrent/CompletionStage
+header extends java/lang/Object flags 601 signature <T:Ljava/lang/Object;>Ljava/lang/Object;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+TT;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyCompose descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;)Ljava/util/concurrent/CompletionStage<TT;>;
+method name exceptionallyComposeAsync descriptor (Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage; flags 1 signature (Ljava/util/function/Function<Ljava/lang/Throwable;+Ljava/util/concurrent/CompletionStage<TT;>;>;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage<TT;>;
+
+class name java/util/jar/JarFile
+header extends java/util/zip/ZipFile flags 21
+innerclass innerClass java/lang/Runtime$Version outerClass java/lang/Runtime innerClassName Version flags 19
+innerclass innerClass java/util/jar/Attributes$Name outerClass java/util/jar/Attributes innerClassName Name flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/Collectors
+method name teeing descriptor (Ljava/util/stream/Collector;Ljava/util/stream/Collector;Ljava/util/function/BiFunction;)Ljava/util/stream/Collector; flags 9 signature <T:Ljava/lang/Object;R1:Ljava/lang/Object;R2:Ljava/lang/Object;R:Ljava/lang/Object;>(Ljava/util/stream/Collector<-TT;*TR1;>;Ljava/util/stream/Collector<-TT;*TR2;>;Ljava/util/function/BiFunction<-TR1;-TR2;TR;>;)Ljava/util/stream/Collector<TT;*TR;>;
+
+class name java/util/zip/Deflater
+-method name finalize descriptor ()V
+
+class name java/util/zip/Inflater
+-method name finalize descriptor ()V
+
+class name java/util/zip/ZipFile
+-method name finalize descriptor ()V
+
+class name javax/crypto/Cipher
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name javax/crypto/SecretKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -4795878709595146952 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/DHPrivateKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 2211791113380396553 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/DHPublicKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -6628103563352519193 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/crypto/interfaces/PBEKey
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -1430015993304333921 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/net/ssl/HttpsURLConnection
+method name getSSLSession descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional<Ljavax/net/ssl/SSLSession;>;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.compiler-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,106 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/lang/model/SourceVersion
+field name RELEASE_12 descriptor Ljavax/lang/model/SourceVersion; flags 4019
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor9
+header extends javax/lang/model/util/AbstractAnnotationValueVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/AbstractElementVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractElementVisitor9
+header extends javax/lang/model/util/AbstractElementVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/AbstractTypeVisitor7
+-method name <init> descriptor ()V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/AbstractTypeVisitor9
+header extends javax/lang/model/util/AbstractTypeVisitor8 flags 421 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/AbstractTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/ElementKindVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/ElementKindVisitor9
+header extends javax/lang/model/util/ElementKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/ElementScanner7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/ElementScanner9
+header extends javax/lang/model/util/ElementScanner8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/ElementScanner8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor9
+header extends javax/lang/model/util/SimpleAnnotationValueVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleAnnotationValueVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleElementVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleElementVisitor9
+header extends javax/lang/model/util/SimpleElementVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleElementVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/SimpleTypeVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/SimpleTypeVisitor9
+header extends javax/lang/model/util/SimpleTypeVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/SimpleTypeVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
+class name javax/lang/model/util/TypeKindVisitor7
+-method name <init> descriptor ()V
+-method name <init> descriptor (Ljava/lang/Object;)V
+method name <init> descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+method name <init> descriptor (Ljava/lang/Object;)V flags 4 deprecated true signature (TR;)V runtimeAnnotations @Ljava/lang/Deprecated;(since="12")
+
+class name javax/lang/model/util/TypeKindVisitor9
+header extends javax/lang/model/util/TypeKindVisitor8 flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljavax/lang/model/util/TypeKindVisitor8<TR;TP;>; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_12;)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.desktop-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/swing/border/TitledBorder
+header extends javax/swing/border/AbstractBorder flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9
+innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/filechooser/FileSystemView
+method name getChooserShortcutPanelFiles descriptor ()[Ljava/io/File; flags 11
+
+class name javax/swing/text/html/StyleSheet$ListPainter
+header extends java/lang/Object implements java/io/Serializable nestHost javax/swing/text/html/StyleSheet flags 21
+innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9
+innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9
+innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19
+innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.naming-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+module name java.naming
+header exports javax/naming,javax/naming/directory,javax/naming/event,javax/naming/ldap,javax/naming/spi,javax/naming/ldap/spi requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.security.sasl\u0020;flags\u0020;0 uses javax/naming/ldap/StartTlsResponse,javax/naming/spi/InitialContextFactory,javax/naming/ldap/spi/LdapDnsProvider provides interface\u0020;java/security/Provider\u0020;impls\u0020;sun/security/provider/certpath/ldap/JdkLDAP target linux-amd64 flags 8000
+
+class name javax/naming/Name
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -3617482732056931635 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/naming/directory/Attribute
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 8707690322213556804 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name javax/naming/ldap/spi/LdapDnsProvider
+header extends java/lang/Object flags 421
+method name <init> descriptor ()V flags 4
+method name lookupEndpoints descriptor (Ljava/lang/String;Ljava/util/Map;)Ljava/util/Optional; thrownTypes javax/naming/NamingException flags 401 signature (Ljava/lang/String;Ljava/util/Map<**>;)Ljava/util/Optional<Ljavax/naming/ldap/spi/LdapDnsProviderResult;>;
+
+class name javax/naming/ldap/spi/LdapDnsProviderResult
+header extends java/lang/Object flags 31
+method name <init> descriptor (Ljava/lang/String;Ljava/util/List;)V flags 1 signature (Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;)V
+method name getDomainName descriptor ()Ljava/lang/String; flags 1
+method name getEndpoints descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/String;>;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.rmi-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/rmi/server/RemoteRef
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue 3632638527362204081 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
+class name java/rmi/server/ServerRef
+-field name serialVersionUID descriptor J
+field name serialVersionUID descriptor J constantValue -4557750989390278438 flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/java.xml-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/xml/stream/XMLInputFactory
+method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
+-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.compiler-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name com/sun/source/doctree/DocTree$Kind
+field name SYSTEM_PROPERTY descriptor Lcom/sun/source/doctree/DocTree$Kind; flags 4019
+
+class name com/sun/source/doctree/DocTreeVisitor
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/doctree/SystemPropertyTree
+header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601
+method name getPropertyName descriptor ()Ljavax/lang/model/element/Name; flags 401
+
+class name com/sun/source/tree/BreakTree
+method name getValue descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/CaseTree
+header extends java/lang/Object implements com/sun/source/tree/Tree nestMembers com/sun/source/tree/CaseTree$CaseKind flags 601
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+method name getExpressions descriptor ()Ljava/util/List; flags 401 deprecated true signature ()Ljava/util/List<+Lcom/sun/source/tree/ExpressionTree;>; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getBody descriptor ()Lcom/sun/source/tree/Tree; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getCaseKind descriptor ()Lcom/sun/source/tree/CaseTree$CaseKind; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/CaseTree$CaseKind
+header extends java/lang/Enum nestHost com/sun/source/tree/CaseTree flags 4031 deprecated true signature Ljava/lang/Enum<Lcom/sun/source/tree/CaseTree$CaseKind;>; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+field name STATEMENT descriptor Lcom/sun/source/tree/CaseTree$CaseKind; flags 4019
+field name RULE descriptor Lcom/sun/source/tree/CaseTree$CaseKind; flags 4019
+method name values descriptor ()[Lcom/sun/source/tree/CaseTree$CaseKind; flags 9
+method name valueOf descriptor (Ljava/lang/String;)Lcom/sun/source/tree/CaseTree$CaseKind; flags 9
+
+class name com/sun/source/tree/SwitchExpressionTree
+header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+method name getExpression descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401
+method name getCases descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/CaseTree;>;
+
+class name com/sun/source/tree/Tree$Kind
+field name SWITCH_EXPRESSION descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/tree/TreeVisitor
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/util/DocTreeFactory
+method name newSystemPropertyTree descriptor (Ljavax/lang/model/element/Name;)Lcom/sun/source/doctree/SystemPropertyTree; flags 401
+
+class name com/sun/source/util/DocTreeScanner
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/util/SimpleDocTreeVisitor
+method name visitSystemProperty descriptor (Lcom/sun/source/doctree/SystemPropertyTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SystemPropertyTree;TP;)TR;
+
+class name com/sun/source/util/SimpleTreeVisitor
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
+class name com/sun/source/util/TreeScanner
+header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature <R:Ljava/lang/Object;P:Ljava/lang/Object;>Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor<TR;TP;>;
+innerclass innerClass com/sun/source/tree/CaseTree$CaseKind outerClass com/sun/source/tree/CaseTree innerClassName CaseKind flags 4019
+method name visitSwitchExpression descriptor (Lcom/sun/source/tree/SwitchExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 deprecated true signature (Lcom/sun/source/tree/SwitchExpressionTree;TP;)TR; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="12")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jfr-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name jdk/jfr/Event
+header extends jdk/internal/event/Event flags 421 runtimeAnnotations @Ljdk/jfr/Enabled;(value=Ztrue)@Ljdk/jfr/StackTrace;(value=Ztrue)@Ljdk/jfr/Registered;(value=Ztrue)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.jsobject-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name netscape/javascript/JSObject
+-method name getWindow descriptor (Ljava/applet/Applet;)Lnetscape/javascript/JSObject;
+method name getWindow descriptor (Ljava/applet/Applet;)Lnetscape/javascript/JSObject; thrownTypes netscape/javascript/JSException flags 9 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/data/symbols/jdk.unsupported-C.sym.txt	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2019, 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.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name sun/reflect/ReflectionFactory
+header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation;
+-method name newInstanceForSerialization descriptor (Ljava/lang/reflect/Constructor;[Ljava/security/ProtectionDomain;)Ljava/lang/Object;
+
--- a/make/data/symbols/symbols	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/data/symbols/symbols	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2019, 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,9 +29,10 @@
 #command used to generate this file:
 #build.tools.symbolgenerator.CreateSymbols build-description-incremental symbols include.list
 #
-generate platforms 7:8:9:A:B
+generate platforms 7:8:9:A:B:C
 platform version 8 files java.activation-8.sym.txt:java.base-8.sym.txt:java.compiler-8.sym.txt:java.corba-8.sym.txt:java.datatransfer-8.sym.txt:java.desktop-8.sym.txt:java.instrument-8.sym.txt:java.logging-8.sym.txt:java.management-8.sym.txt:java.management.rmi-8.sym.txt:java.naming-8.sym.txt:java.prefs-8.sym.txt:java.rmi-8.sym.txt:java.scripting-8.sym.txt:java.security.jgss-8.sym.txt:java.security.sasl-8.sym.txt:java.sql-8.sym.txt:java.sql.rowset-8.sym.txt:java.transaction-8.sym.txt:java.xml-8.sym.txt:java.xml.bind-8.sym.txt:java.xml.crypto-8.sym.txt:java.xml.ws-8.sym.txt:java.xml.ws.annotation-8.sym.txt:jdk.httpserver-8.sym.txt:jdk.management-8.sym.txt:jdk.scripting.nashorn-8.sym.txt:jdk.sctp-8.sym.txt:jdk.security.auth-8.sym.txt:jdk.security.jgss-8.sym.txt
 platform version 7 base 8 files java.base-7.sym.txt:java.compiler-7.sym.txt:java.datatransfer-7.sym.txt:java.desktop-7.sym.txt:java.logging-7.sym.txt:java.management-7.sym.txt:java.naming-7.sym.txt:java.prefs-7.sym.txt:java.rmi-7.sym.txt:java.scripting-7.sym.txt:java.security.jgss-7.sym.txt:java.security.sasl-7.sym.txt:java.sql-7.sym.txt:java.sql.rowset-7.sym.txt:java.xml-7.sym.txt:java.xml.bind-7.sym.txt:java.xml.ws.annotation-7.sym.txt:jdk.httpserver-7.sym.txt:jdk.management-7.sym.txt:jdk.scripting.nashorn-7.sym.txt:jdk.sctp-7.sym.txt:jdk.security.auth-7.sym.txt:jdk.security.jgss-7.sym.txt
 platform version 9 base 8 files java.activation-9.sym.txt:java.base-9.sym.txt:java.compiler-9.sym.txt:java.corba-9.sym.txt:java.datatransfer-9.sym.txt:java.desktop-9.sym.txt:java.instrument-9.sym.txt:java.logging-9.sym.txt:java.management-9.sym.txt:java.management.rmi-9.sym.txt:java.naming-9.sym.txt:java.prefs-9.sym.txt:java.rmi-9.sym.txt:java.scripting-9.sym.txt:java.se-9.sym.txt:java.se.ee-9.sym.txt:java.security.jgss-9.sym.txt:java.security.sasl-9.sym.txt:java.smartcardio-9.sym.txt:java.sql-9.sym.txt:java.sql.rowset-9.sym.txt:java.transaction-9.sym.txt:java.xml-9.sym.txt:java.xml.bind-9.sym.txt:java.xml.crypto-9.sym.txt:java.xml.ws-9.sym.txt:java.xml.ws.annotation-9.sym.txt:jdk.accessibility-9.sym.txt:jdk.attach-9.sym.txt:jdk.charsets-9.sym.txt:jdk.compiler-9.sym.txt:jdk.crypto.cryptoki-9.sym.txt:jdk.crypto.ec-9.sym.txt:jdk.dynalink-9.sym.txt:jdk.editpad-9.sym.txt:jdk.hotspot.agent-9.sym.txt:jdk.httpserver-9.sym.txt:jdk.incubator.httpclient-9.sym.txt:jdk.jartool-9.sym.txt:jdk.javadoc-9.sym.txt:jdk.jcmd-9.sym.txt:jdk.jconsole-9.sym.txt:jdk.jdeps-9.sym.txt:jdk.jdi-9.sym.txt:jdk.jdwp.agent-9.sym.txt:jdk.jlink-9.sym.txt:jdk.jshell-9.sym.txt:jdk.jsobject-9.sym.txt:jdk.jstatd-9.sym.txt:jdk.localedata-9.sym.txt:jdk.management-9.sym.txt:jdk.management.agent-9.sym.txt:jdk.naming.dns-9.sym.txt:jdk.naming.rmi-9.sym.txt:jdk.net-9.sym.txt:jdk.pack-9.sym.txt:jdk.policytool-9.sym.txt:jdk.rmic-9.sym.txt:jdk.scripting.nashorn-9.sym.txt:jdk.sctp-9.sym.txt:jdk.security.auth-9.sym.txt:jdk.security.jgss-9.sym.txt:jdk.unsupported-9.sym.txt:jdk.xml.dom-9.sym.txt:jdk.zipfs-9.sym.txt
 platform version A base 9 files java.activation-A.sym.txt:java.base-A.sym.txt:java.compiler-A.sym.txt:java.corba-A.sym.txt:java.datatransfer-A.sym.txt:java.desktop-A.sym.txt:java.instrument-A.sym.txt:java.logging-A.sym.txt:java.management-A.sym.txt:java.management.rmi-A.sym.txt:java.naming-A.sym.txt:java.prefs-A.sym.txt:java.rmi-A.sym.txt:java.scripting-A.sym.txt:java.se-A.sym.txt:java.se.ee-A.sym.txt:java.security.jgss-A.sym.txt:java.security.sasl-A.sym.txt:java.smartcardio-A.sym.txt:java.sql-A.sym.txt:java.sql.rowset-A.sym.txt:java.transaction-A.sym.txt:java.xml-A.sym.txt:java.xml.bind-A.sym.txt:java.xml.crypto-A.sym.txt:java.xml.ws-A.sym.txt:java.xml.ws.annotation-A.sym.txt:jdk.accessibility-A.sym.txt:jdk.attach-A.sym.txt:jdk.charsets-A.sym.txt:jdk.compiler-A.sym.txt:jdk.crypto.cryptoki-A.sym.txt:jdk.crypto.ec-A.sym.txt:jdk.dynalink-A.sym.txt:jdk.editpad-A.sym.txt:jdk.hotspot.agent-A.sym.txt:jdk.httpserver-A.sym.txt:jdk.incubator.httpclient-A.sym.txt:jdk.jartool-A.sym.txt:jdk.javadoc-A.sym.txt:jdk.jcmd-A.sym.txt:jdk.jconsole-A.sym.txt:jdk.jdeps-A.sym.txt:jdk.jdi-A.sym.txt:jdk.jdwp.agent-A.sym.txt:jdk.jlink-A.sym.txt:jdk.jshell-A.sym.txt:jdk.jsobject-A.sym.txt:jdk.jstatd-A.sym.txt:jdk.localedata-A.sym.txt:jdk.management-A.sym.txt:jdk.management.agent-A.sym.txt:jdk.naming.dns-A.sym.txt:jdk.naming.rmi-A.sym.txt:jdk.net-A.sym.txt:jdk.pack-A.sym.txt:jdk.policytool-A.sym.txt:jdk.rmic-A.sym.txt:jdk.scripting.nashorn-A.sym.txt:jdk.sctp-A.sym.txt:jdk.security.auth-A.sym.txt:jdk.security.jgss-A.sym.txt:jdk.unsupported-A.sym.txt:jdk.xml.dom-A.sym.txt:jdk.zipfs-A.sym.txt
 platform version B base A files java.activation-B.sym.txt:java.base-B.sym.txt:java.compiler-B.sym.txt:java.corba-B.sym.txt:java.datatransfer-B.sym.txt:java.desktop-B.sym.txt:java.instrument-B.sym.txt:java.logging-B.sym.txt:java.management-B.sym.txt:java.management.rmi-B.sym.txt:java.naming-B.sym.txt:java.net.http-B.sym.txt:java.prefs-B.sym.txt:java.rmi-B.sym.txt:java.scripting-B.sym.txt:java.se-B.sym.txt:java.se.ee-B.sym.txt:java.security.jgss-B.sym.txt:java.security.sasl-B.sym.txt:java.smartcardio-B.sym.txt:java.sql-B.sym.txt:java.sql.rowset-B.sym.txt:java.transaction-B.sym.txt:java.transaction.xa-B.sym.txt:java.xml-B.sym.txt:java.xml.bind-B.sym.txt:java.xml.crypto-B.sym.txt:java.xml.ws-B.sym.txt:java.xml.ws.annotation-B.sym.txt:jdk.accessibility-B.sym.txt:jdk.attach-B.sym.txt:jdk.charsets-B.sym.txt:jdk.compiler-B.sym.txt:jdk.crypto.cryptoki-B.sym.txt:jdk.crypto.ec-B.sym.txt:jdk.dynalink-B.sym.txt:jdk.editpad-B.sym.txt:jdk.hotspot.agent-B.sym.txt:jdk.httpserver-B.sym.txt:jdk.incubator.httpclient-B.sym.txt:jdk.jartool-B.sym.txt:jdk.javadoc-B.sym.txt:jdk.jcmd-B.sym.txt:jdk.jconsole-B.sym.txt:jdk.jdeps-B.sym.txt:jdk.jdi-B.sym.txt:jdk.jdwp.agent-B.sym.txt:jdk.jfr-B.sym.txt:jdk.jlink-B.sym.txt:jdk.jshell-B.sym.txt:jdk.jsobject-B.sym.txt:jdk.jstatd-B.sym.txt:jdk.localedata-B.sym.txt:jdk.management-B.sym.txt:jdk.management.agent-B.sym.txt:jdk.management.jfr-B.sym.txt:jdk.naming.dns-B.sym.txt:jdk.naming.rmi-B.sym.txt:jdk.net-B.sym.txt:jdk.pack-B.sym.txt:jdk.rmic-B.sym.txt:jdk.scripting.nashorn-B.sym.txt:jdk.sctp-B.sym.txt:jdk.security.auth-B.sym.txt:jdk.security.jgss-B.sym.txt:jdk.unsupported-B.sym.txt:jdk.xml.dom-B.sym.txt:jdk.zipfs-B.sym.txt
+platform version C base B files java.base-C.sym.txt:java.compiler-C.sym.txt:java.desktop-C.sym.txt:java.naming-C.sym.txt:java.rmi-C.sym.txt:java.xml-C.sym.txt:jdk.compiler-C.sym.txt:jdk.jfr-C.sym.txt:jdk.jsobject-C.sym.txt:jdk.unsupported-C.sym.txt
--- a/make/gensrc/Gensrc-java.desktop.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/gensrc/Gensrc-java.desktop.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -28,11 +28,11 @@
 # Hook to include the corresponding custom file, if present.
 $(eval $(call IncludeCustomExtension, gensrc/Gensrc-java.desktop.gmk))
 
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
   include GensrcIcons.gmk
 endif
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), linux solaris aix), )
+ifeq ($(call isTargetOs, linux solaris aix), true)
   include GensrcX11Wrappers.gmk
 endif
 
@@ -52,21 +52,21 @@
     $(TOPDIR)/src/java.desktop/share/classes/sun/print/resources \
     #
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   PROP_SRC_DIRS += \
       $(TOPDIR)/src/java.desktop/macosx/classes/com/apple/laf/resources \
       $(TOPDIR)/src/java.desktop/macosx/classes/sun/awt/resources \
       #
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   PROP_SRC_DIRS += \
       $(TOPDIR)/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/resources \
       $(TOPDIR)/src/java.desktop/windows/classes/sun/awt/windows \
       #
 endif
 
-ifeq ($(filter $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
   PROP_SRC_DIRS += $(TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/resources
 endif
 
--- a/make/gensrc/Gensrc-jdk.hotspot.agent.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/gensrc/Gensrc-jdk.hotspot.agent.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -42,7 +42,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   MIG_OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent
   MACH_EXC_HEADER := $(MIG_OUTPUT_DIR)/mach_exc.h
   MACH_EXC_USER := $(MIG_OUTPUT_DIR)/mach_excUser.c
--- a/make/gensrc/GensrcIcons.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/gensrc/GensrcIcons.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -108,7 +108,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   GENSRC_OSX_ICONS_DST := $(SUPPORT_OUTPUTDIR)/headers/java.desktop
   GENSRC_OSX_ICONS := $(GENSRC_OSX_ICONS_DST)/AWTIconData.h
--- a/make/gensrc/GensrcMisc.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/gensrc/GensrcMisc.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -89,7 +89,7 @@
 
 ################################################################################
 
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
 
   GENSRC_UC_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/fs/UnixConstants.java
 
@@ -103,7 +103,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   GENSRC_SC_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/fs/SolarisConstants.java
 
--- a/make/hotspot/CopyToExplodedJdk.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/CopyToExplodedJdk.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -25,7 +25,7 @@
 
 # Copy all built libraries into exploded jdk
 LIB_TARGETS := $(filter $(LIB_OUTPUTDIR)/%, $(TARGETS))
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupCopyFiles, COPY_LIBS_BIN, \
       SRC := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base, \
       DEST := $(JDK_OUTPUTDIR)/bin, \
--- a/make/hotspot/gensrc/GensrcAdlc.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/gensrc/GensrcAdlc.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -34,16 +34,16 @@
 
   # Flags depending on the build platform/tool chain
   # NOTE: No optimization or debug flags set here
-  ifeq ($(OPENJDK_BUILD_OS), linux)
+  ifeq ($(call isBuildOs, linux), true)
     ADLC_CFLAGS := -fno-exceptions -DLINUX
-  else ifeq ($(OPENJDK_BUILD_OS), solaris)
+  else ifeq ($(call isBuildOs, solaris), true)
     ADLC_LDFLAGS := -m64
     ADLC_CFLAGS := -m64
     ADLC_CFLAGS_WARNINGS := +w
-  else ifeq ($(OPENJDK_BUILD_OS), aix)
+  else ifeq ($(call isBuildOs, aix), true)
     ADLC_LDFLAGS := -q64
     ADLC_CFLAGS := -qnortti -qeh -q64 -DAIX
-  else ifeq ($(OPENJDK_BUILD_OS), windows)
+  else ifeq ($(call isBuildOs, windows), true)
     ADLC_LDFLAGS := -nologo
     ADLC_CFLAGS := -nologo -EHsc
     # NOTE: The old build also have -D_CRT_SECURE_NO_DEPRECATE but it doesn't
@@ -87,17 +87,17 @@
   ADLCFLAGS += -q -T
 
   # ADLC flags depending on target OS
-  ifeq ($(OPENJDK_TARGET_OS), linux)
+  ifeq ($(call isTargetOs, linux), true)
     ADLCFLAGS += -DLINUX=1 -D_GNU_SOURCE=1
-  else ifeq ($(OPENJDK_TARGET_OS), solaris)
+  else ifeq ($(call isTargetOs, solaris), true)
     ADLCFLAGS += -DSOLARIS=1 -DSPARC_WORKS=1
-  else ifeq ($(OPENJDK_TARGET_OS), aix)
+  else ifeq ($(call isTargetOs, aix), true)
     ADLCFLAGS += -DAIX=1
-  else ifeq ($(OPENJDK_TARGET_OS), macosx)
+  else ifeq ($(call isTargetOs, macosx), true)
     ADLCFLAGS += -D_ALLBSD_SOURCE=1 -D_GNU_SOURCE=1
   endif
 
-  ifneq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), false)
     # NOTE: Windows adlc flags was different in the old build. Is this really
     # correct?
 
@@ -109,7 +109,7 @@
 
   # This generates checks in the generated C++ files that _LP64 is correctly
   # (un)defined when compiling them.
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+  ifeq ($(call isTargetCpuBits, 64), true)
     ADLCFLAGS += -D_LP64=1
   else
     ADLCFLAGS += -U_LP64
--- a/make/hotspot/gensrc/GensrcDtrace.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/gensrc/GensrcDtrace.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -28,12 +28,12 @@
 
 ifeq ($(call check-jvm-feature, dtrace), true)
 
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
     DTRACE_FLAGS := -64
     DTRACE_CPP_FLAGS := -D_LP64
-  else ifeq ($(OPENJDK_TARGET_OS), macosx)
+  else ifeq ($(call isTargetOs, macosx), true)
     DTRACE_CPP_FLAGS := -D_LP64 -x c
-  else ifeq ($(OPENJDK_TARGET_OS), linux)
+  else ifeq ($(call isTargetOs, linux), true)
     DTRACE_CPP_FLAGS := -x c
   endif
 
@@ -54,7 +54,7 @@
   TARGETS += $(patsubst $(DTRACE_SOURCE_DIR)/%.d, \
       $(DTRACE_GENSRC_DIR)/%.h, $(wildcard $(DTRACE_SOURCE_DIR)/*.d))
 
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
     ############################################################################
     # First we need to generate the dtraceGenOffsets tool. When run, this will
     # produce two header files and a C++ file. Note that generateJvmOffsets.cpp
--- a/make/hotspot/ide/CreateVSProject.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/ide/CreateVSProject.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -31,7 +31,7 @@
 include JavaCompilation.gmk
 include SetupJavaCompilers.gmk
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # The next part is a bit hacky. We include the CompileJvm.gmk to be
   # able to extact flags, but we do not wish to execute the rules.
 
@@ -46,12 +46,12 @@
 
   # Helper macro to convert a unix path to a Windows path, suitable for
   # inclusion in a command line.
-  ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
+  ifeq ($(call isBuildOsEnv, windows.cygwin), true)
     FixPath = \
         $(strip $(subst \,\\,$(shell $(CYGPATH) -w $1)))
     FixLinuxExecutable = \
         $(call FixPath, $1)
-  else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.wsl)
+  else ifeq ($(call isBuildOsEnv, windows.wsl), true)
     FixPath = \
         $(strip $(subst \,\\,$(shell $(WSLPATH) -w $1)))
     FixLinuxExecutable = \
--- a/make/hotspot/lib/CompileDtraceLibraries.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/CompileDtraceLibraries.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -24,7 +24,7 @@
 #
 
 ifeq ($(call check-jvm-feature, dtrace), true)
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
     JNI_INCLUDE_FLAGS := \
         -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
         -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
--- a/make/hotspot/lib/CompileGtest.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/CompileGtest.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -31,7 +31,7 @@
 
 # On Windows, there are no internal debug symbols so must set copying to true
 # to get any at all.
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   GTEST_COPY_DEBUG_SYMBOLS := true
 else
   GTEST_COPY_DEBUG_SYMBOLS := false
@@ -39,7 +39,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   GTEST_JVM_MAPFILE := $(JVM_MAPFILE)
 else
   GTEST_JVM_MAPFILE := $(JVM_OUTPUTDIR)/gtest/mapfile
--- a/make/hotspot/lib/CompileJvm.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/CompileJvm.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -56,9 +56,9 @@
 JVM_EXCLUDES += adlc
 
 # Needed by vm_version.cpp
-ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ifeq ($(call isTargetCpu, x86_64), true)
   OPENJDK_TARGET_CPU_VM_VERSION := amd64
-else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+else ifeq ($(call isTargetCpu, sparcv9), true)
   OPENJDK_TARGET_CPU_VM_VERSION := sparc
 else
   OPENJDK_TARGET_CPU_VM_VERSION := $(OPENJDK_TARGET_CPU)
@@ -107,10 +107,10 @@
 
 # ARM source selection
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-arm)
+ifeq ($(call And, $(call isTargetOs, linux) $(call isTargetCpu, arm)), true)
   JVM_EXCLUDE_PATTERNS += arm_64
 
-else ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-aarch64)
+else ifeq ($(call And, $(call isTargetOs, linux) $(call isTargetCpu, aarch64)), true)
   # For 64-bit arm builds, we use the 64 bit hotspot/src/cpu/arm
   # hotspot sources if HOTSPOT_TARGET_CPU_ARCH is set to arm.
   # Exclude the aarch64 and 32 bit arm files for this build.
@@ -119,21 +119,21 @@
   endif
 endif
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), linux macosx windows), )
+ifeq ($(call isTargetOs, linux macosx windows), true)
   JVM_PRECOMPILED_HEADER := $(TOPDIR)/src/hotspot/share/precompiled/precompiled.hpp
 endif
 
-ifeq ($(OPENJDK_TARGET_CPU), x86)
+ifeq ($(call isTargetCpu, x86), true)
   JVM_EXCLUDE_PATTERNS += x86_64
-else ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+else ifeq ($(call isTargetCpu, x86_64), true)
   JVM_EXCLUDE_PATTERNS += x86_32
 endif
 
 # Inline assembly for solaris
-ifeq ($(OPENJDK_TARGET_OS), solaris)
-  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+ifeq ($(call isTargetOs, solaris), true)
+  ifeq ($(call isTargetCpu, x86_64), true)
     JVM_CFLAGS += $(TOPDIR)/src/hotspot/os_cpu/solaris_x86/solaris_x86_64.il
-  else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+  else ifeq ($(call isTargetCpu, sparcv9), true)
     JVM_CFLAGS += $(TOPDIR)/src/hotspot/os_cpu/solaris_sparc/solaris_sparc.il
   endif
   # Exclude warnings in devstudio 12.6
@@ -143,7 +143,7 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), false)
     # NOTE: In the old build, we weirdly enough set -g/-g0 always, regardless
     # of if debug symbols were needed. Without it, compilation fails on
@@ -152,8 +152,8 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ifeq ($(call isTargetOs, windows), true)
+  ifeq ($(call isTargetCpuBits, 64), true)
     RC_DESC := 64-Bit$(SPACE)
   endif
   JVM_RCFLAGS += -D"HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(RC_DESC)$(JVM_VARIANT) VM"
@@ -209,7 +209,7 @@
     $(BUILD_LIBJVM_TARGET_DEPS))
 
 ifneq ($(GENERATE_COMPILE_COMMANDS_ONLY), true)
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     # It doesn't matter which jvm.lib file gets exported, but we need
     # to pick just one.
     ifeq ($(JVM_VARIANT), $(JVM_VARIANT_MAIN))
--- a/make/hotspot/lib/JvmDtraceObjects.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/JvmDtraceObjects.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -24,7 +24,7 @@
 #
 
 ifeq ($(call check-jvm-feature, dtrace), true)
-  ifeq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), true)
 
     ############################################################################
     # Integrate with libjvm. Here we generate two object files which are
@@ -131,7 +131,7 @@
 	    > $(DTRACE_SUPPORT_DIR)/$(@F).d))
 	$(call ExecuteWithLog, $@, $(DTRACE) $(DTRACE_FLAGS) -o $@ \
 	    -s $(DTRACE_SUPPORT_DIR)/$(@F).d)
-        ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
+        ifeq ($(call isTargetCpuArch, sparc), true)
 	  $(call ExecuteWithLog, $@.elfedit, $(ELFEDIT) $(call GetElfeditCommands) $@)
         endif
 
--- a/make/hotspot/lib/JvmFeatures.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/JvmFeatures.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -47,14 +47,14 @@
 ifeq ($(call check-jvm-feature, zero), true)
   JVM_CFLAGS_FEATURES += -DZERO -DCC_INTERP -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS)
   JVM_LIBS_FEATURES += $(LIBFFI_LIBS)
-  ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
+  ifeq ($(call isTargetCpu, sparcv9), true)
     BUILD_LIBJVM_EXTRA_FILES := $(TOPDIR)/src/hotspot/cpu/sparc/memset_with_concurrent_readers_sparc.cpp
   endif
 endif
 
 ifeq ($(call check-jvm-feature, minimal), true)
   JVM_CFLAGS_FEATURES += -DMINIMAL_JVM -DVMTYPE=\"Minimal\"
-  ifeq ($(OPENJDK_TARGET_OS), linux)
+  ifeq ($(call isTargetOs, linux), true)
     # Override the default -g with a more liberal strip policy for the minimal JVM
     JVM_STRIPFLAGS := --strip-unneeded
   endif
--- a/make/hotspot/lib/JvmFlags.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/JvmFlags.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -74,7 +74,7 @@
   endif
 else ifeq ($(DEBUG_LEVEL), fastdebug)
   JVM_CFLAGS_DEBUGLEVEL := -DASSERT
-  ifeq ($(filter $(OPENJDK_TARGET_OS), windows aix), )
+  ifeq ($(call isTargetOs, windows aix), false)
     # NOTE: Old build did not define CHECK_UNHANDLED_OOPS on Windows and AIX.
     JVM_CFLAGS_DEBUGLEVEL += -DCHECK_UNHANDLED_OOPS
   endif
--- a/make/hotspot/lib/JvmMapfile.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/JvmMapfile.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -28,13 +28,13 @@
 ################################################################################
 # Combine a list of static symbols
 
-ifneq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), windows-x86_64)
+ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86_64)), false)
   # On Windows x86_64, we should not have any symbols at all, since that
   # results in duplicate warnings from the linker (JDK-8043491).
   SYMBOLS_SRC += $(TOPDIR)/make/hotspot/symbols/symbols-shared
 endif
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
   SYMBOLS_SRC += $(TOPDIR)/make/hotspot/symbols/symbols-unix
 endif
 
@@ -48,7 +48,7 @@
   endif
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   ifeq ($(call check-jvm-feature, dtrace), true)
     # Additional mapfiles that are only used when dtrace is enabled
     ifeq ($(call check-jvm-feature, compiler2), true)
@@ -64,7 +64,7 @@
 # Create a dynamic list of symbols from the built object files. This is highly
 # platform dependent.
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   DUMP_SYMBOLS_CMD := $(NM) --defined-only *.o
   ifneq ($(FILTER_SYMBOLS_PATTERN), )
     FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
@@ -76,7 +76,7 @@
         if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
       }'
 
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
   DUMP_SYMBOLS_CMD := $(NM) -p *.o
   ifneq ($(FILTER_SYMBOLS_PATTERN), )
     FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
@@ -90,7 +90,7 @@
         if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
       }'
 
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   # nm on macosx prints out "warning: nm: no name list" to stderr for
   # files without symbols. Hide this, even at the expense of hiding real errors.
   DUMP_SYMBOLS_CMD := $(NM) -Uj *.o 2> /dev/null
@@ -107,7 +107,7 @@
 # The script below might be what was intended, but it failes to link with tons
 # of 'cannot export hidden symbol vtable for X'.
 #  '{ if ($$1 ~ /^__ZTV/ || $$1 ~ /^_gHotSpotVM/) print substr($$1, 2) }'
-else ifeq ($(OPENJDK_TARGET_OS), aix)
+else ifeq ($(call isTargetOs, aix), true)
   # NOTE: The old build had the solution below. This should to be fixed in
   # configure instead.
 
@@ -123,7 +123,7 @@
         if ($$3 ~ /^SharedArchivePath__9Arguments$$/) print $$3; \
        }'
 
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   DUMP_SYMBOLS_CMD := $(DUMPBIN) -symbols *.obj
   FILTER_SYMBOLS_AWK_SCRIPT := \
       '{ \
@@ -153,12 +153,12 @@
 ################################################################################
 # Finally convert the symbol list into a platform-specific mapfile
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   # On macosx, we need to add a leading underscore
   define create-mapfile-work
 	  $(AWK) '{ if ($$0 ~ ".") { print "  _" $$0 } }'  < $^ > $@.tmp
   endef
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   # On windows, add an 'EXPORTS' header
   define create-mapfile-work
 	  $(ECHO) "EXPORTS" > $@.tmp
--- a/make/hotspot/lib/JvmOverrideFiles.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/lib/JvmOverrideFiles.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -51,7 +51,7 @@
   LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NORM)
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   BUILD_LIBJVM_ostream.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64
   BUILD_LIBJVM_logFileOutput.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64
 
@@ -65,7 +65,7 @@
 	#
   endif
 
-  ifeq ($(OPENJDK_TARGET_CPU), x86)
+  ifeq ($(call isTargetCpu, x86), true)
     # Performance measurements show that by compiling GC related code, we could
     # significantly reduce the GC pause time on 32 bit Linux/Unix platforms by
     # compiling without the PIC flag (-fPIC on linux).
@@ -83,7 +83,7 @@
     $(foreach s, $(NONPIC_SRC), $(eval BUILD_LIBJVM_$(notdir $s)_CXXFLAGS := -fno-PIC))
   endif
 
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
   ifneq ($(DEBUG_LEVEL), slowdebug)
     # dev studio 12.6 workaround
     BUILD_LIBJVM_arguments.cpp_OPTIMIZATION := LOW
@@ -97,7 +97,7 @@
     BUILD_LIBJVM_jni.cpp_CXXFLAGS := -Qoption ube -O~yz
     BUILD_LIBJVM_stubGenerator_$(HOTSPOT_TARGET_CPU).cpp_CXXFLAGS := -xspace
 
-    ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+    ifeq ($(call isTargetCpu, x86_64), true)
       # Temporary until SS10 C++ compiler is fixed
       BUILD_LIBJVM_generateOptoStub.cpp_CXXFLAGS := -xO2
       # Temporary util SS12u1 C++ compiler is fixed
@@ -118,7 +118,7 @@
     BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS := +d
     BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS := +d
 
-    ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86)
+    ifeq ($(call isTargetCpuArch, x86), true)
       # ube explodes on x86
       BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS += -xO1
       BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS += -xO1
@@ -129,7 +129,7 @@
   # Workaround for jvmciCompilerToVM.cpp long compilation time
   BUILD_LIBJVM_jvmciCompilerToVMInit.cpp_OPTIMIZATION := NONE
 
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   # The copied fdlibm routines in these files must not be optimized
   BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG)
   BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG)
@@ -160,7 +160,7 @@
         #
   endif
 
-else ifeq ($(OPENJDK_TARGET_OS), aix)
+else ifeq ($(call isTargetOs, aix), true)
   BUILD_LIBJVM_synchronizer.cpp_CXXFLAGS := -qnoinline
   BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE)
   # Disable aggressive optimizations for functions in sharedRuntimeTrig.cpp
@@ -185,7 +185,7 @@
   # Disable ELF decoder on AIX (AIX uses XCOFF).
   JVM_EXCLUDE_PATTERNS += elf
 
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   JVM_PRECOMPILED_HEADER_EXCLUDE := \
       bytecodeInterpreter.cpp \
       bytecodeInterpreterWithChecks.cpp \
--- a/make/hotspot/test/GtestImage.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/hotspot/test/GtestImage.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -37,7 +37,7 @@
   $(eval TARGETS += $$(COPY_GTEST_$v)) \
 )
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(foreach v, $(JVM_VARIANTS), \
     $(eval $(call SetupCopyFiles, COPY_GTEST_MSVCR_$v, \
         DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
@@ -54,7 +54,7 @@
   )
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   $(foreach v, $(JVM_VARIANTS), \
     $(eval $(call SetupCopyFiles, COPY_GTEST_STLPORT_$v, \
         DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
--- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java	Mon Feb 18 10:45:21 2019 +0530
@@ -1786,9 +1786,13 @@
             if (existing.equals(headerDesc)) {
                 headerDesc = existing;
                 existed = true;
-            } else {
-                //check if the only difference between the 7 and 8 version is the Profile annotation
-                //if so, copy it to the pre-8 version, so save space
+            }
+        }
+
+        if (!existed) {
+            //check if the only difference between the 7 and 8 version is the Profile annotation
+            //if so, copy it to the pre-8 version, so save space
+            for (ClassHeaderDescription existing : clazzDesc.header) {
                 List<AnnotationDescription> annots = existing.classAnnotations;
 
                 if (annots != null) {
@@ -2610,6 +2614,40 @@
                                                req.requires_flags,
                                                ver);
             }
+
+            @Override
+            public int hashCode() {
+                int hash = 7;
+                hash = 53 * hash + Objects.hashCode(this.moduleName);
+                hash = 53 * hash + this.flags;
+                hash = 53 * hash + Objects.hashCode(this.version);
+                return hash;
+            }
+
+            @Override
+            public boolean equals(Object obj) {
+                if (this == obj) {
+                    return true;
+                }
+                if (obj == null) {
+                    return false;
+                }
+                if (getClass() != obj.getClass()) {
+                    return false;
+                }
+                final RequiresDescription other = (RequiresDescription) obj;
+                if (this.flags != other.flags) {
+                    return false;
+                }
+                if (!Objects.equals(this.moduleName, other.moduleName)) {
+                    return false;
+                }
+                if (!Objects.equals(this.version, other.version)) {
+                    return false;
+                }
+                return true;
+            }
+
         }
 
         static class ProvidesDescription {
@@ -2645,6 +2683,35 @@
                               .collect(Collectors.toList());
                 return new ProvidesDescription(api, impls);
             }
+
+            @Override
+            public int hashCode() {
+                int hash = 5;
+                hash = 53 * hash + Objects.hashCode(this.interfaceName);
+                hash = 53 * hash + Objects.hashCode(this.implNames);
+                return hash;
+            }
+
+            @Override
+            public boolean equals(Object obj) {
+                if (this == obj) {
+                    return true;
+                }
+                if (obj == null) {
+                    return false;
+                }
+                if (getClass() != obj.getClass()) {
+                    return false;
+                }
+                final ProvidesDescription other = (ProvidesDescription) obj;
+                if (!Objects.equals(this.interfaceName, other.interfaceName)) {
+                    return false;
+                }
+                if (!Objects.equals(this.implNames, other.implNames)) {
+                    return false;
+                }
+                return true;
+            }
         }
     }
 
@@ -2806,7 +2873,7 @@
             if (!Objects.equals(this.nestHost, other.nestHost)) {
                 return false;
             }
-            if (!Objects.equals(this.nestMembers, other.nestMembers)) {
+            if (!listEquals(this.nestMembers, other.nestMembers)) {
                 return false;
             }
             return true;
--- a/make/launcher/Launcher-java.base.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/launcher/Launcher-java.base.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -51,7 +51,7 @@
 
 TARGETS += $(SUPPORT_OUTPUTDIR)/modules_cmds/java.base/java$(EXE_SUFFIX)
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupBuildLauncher, javaw, \
       CFLAGS := -DJAVAW -DEXPAND_CLASSPATH_WILDCARDS -DENABLE_ARG_FILES, \
       EXTRA_RC_FLAGS := $(JAVA_RC_FLAGS), \
@@ -65,7 +65,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   $(eval $(call SetupJdkExecutable, BUILD_JEXEC, \
       NAME := jexec, \
       SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \
@@ -84,7 +84,7 @@
 
 ################################################################################
 
-ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix linux), )
+ifeq ($(call isTargetOs, macosx solaris aix linux), true)
   $(eval $(call SetupJdkExecutable, BUILD_JSPAWNHELPER, \
       NAME := jspawnhelper, \
       SRC := $(TOPDIR)/src/$(MODULE)/unix/native/jspawnhelper, \
--- a/make/launcher/Launcher-java.security.jgss.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/launcher/Launcher-java.security.jgss.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -25,7 +25,7 @@
 
 include LauncherCommon.gmk
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupBuildLauncher, kinit, \
       MAIN_CLASS := sun.security.krb5.internal.tools.Kinit, \
   ))
--- a/make/launcher/Launcher-jdk.accessibility.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/launcher/Launcher-jdk.accessibility.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -28,7 +28,7 @@
 ################################################################################
 # jabswitch
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   JABSWITCH_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/jabswitch
   ACCESSBRIDGE_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/common
@@ -98,7 +98,7 @@
 
   endef
 
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+  ifeq ($(call isTargetCpuBits, 32), true)
     $(eval $(call SetupInspector,-32,32))
     $(eval $(call SetupWalker,-32,32))
     $(eval $(call SetupInspector,,LEGACY))
--- a/make/launcher/Launcher-jdk.pack.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/launcher/Launcher-jdk.pack.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -45,7 +45,7 @@
   CXXFLAGS_JDKEXE += -fvisibility=hidden
   LDFLAGS_JDKEXE += -Wl,--exclude-libs,ALL
 else ifeq ($(TOOLCHAIN_TYPE), clang)
-  ifneq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), false)
     CXXFLAGS_JDKEXE += -fvisibility=hidden
   endif
 else ifeq ($(TOOLCHAIN_TYPE), solstudio)
--- a/make/launcher/LauncherCommon.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/launcher/LauncherCommon.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -105,7 +105,7 @@
       $$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_LAUNCHER_CLASS), "$$a"$(COMMA) )) }'
   $1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     ifeq ($$($1_MACOSX_SIGNED), true)
       $1_PLIST_FILE := Info-privileged.plist
         $1_CODESIGN := true
@@ -179,11 +179,11 @@
   $1 += $$(BUILD_LAUNCHER_$1)
   TARGETS += $$($1)
 
-  ifeq ($(OPENJDK_TARGET_OS), aix)
+  ifeq ($(call isTargetOs, aix), true)
     $$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, jli_static)
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     $$(BUILD_LAUNCHER_$1): $(call FindStaticLib, java.base, java, /libjava) \
         $$($1_WINDOWS_JLI_LIB)
   endif
@@ -194,7 +194,7 @@
 # relationship between executables and man pages (even if this is not always
 # the case), so piggyback man page generation on the launcher compilation.
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
   # Only build manpages on unix systems.
   # We assume all our man pages should reside in section 1.
 
--- a/make/lib/Awt2dLibraries.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Awt2dLibraries.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -43,7 +43,7 @@
 
 BUILD_LIBMLIB_CFLAGS := -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES -DMLIB_NO_LIBSUNMATH
 
-ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+ifeq ($(call isTargetCpuBits, 64), true)
   BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT
 endif
 
@@ -68,7 +68,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), true)
 
   # libmlib_image_v is basically built from mlib_image sources, with some additions
   # and some exclusions.
@@ -80,7 +80,7 @@
   LIBMLIB_IMAGE_V_CFLAGS := -xarch=sparcvis -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \
       $(TOPDIR)/src/$(MODULE)/unix/native/libmlib_image/vis_$(OPENJDK_TARGET_CPU_BITS).il
 
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+  ifeq ($(call isTargetCpuBits, 64), true)
     LIBMLIB_IMAGE_V_CFLAGS += -DMLIB_OS64BIT
   endif
 
@@ -127,11 +127,11 @@
     $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
     #
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), true)
   LIBAWT_EXTRA_SRC += $(TOPDIR)/src/$(MODULE)/share/native/common/awt/medialib
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBAWT_EXTRA_SRC += \
       $(TOPDIR)/src/$(MODULE)/share/native/common/awt/utility \
       $(TOPDIR)/src/$(MODULE)/share/native/common/font \
@@ -140,22 +140,22 @@
       #
 endif
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx aix), )
+ifeq ($(call isTargetOs, solaris linux macosx aix), true)
   LIBAWT_EXFILES += awt_Font.c CUPSfuncs.c fontpath.c X11Color.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   LIBAWT_EXFILES += initIDs.c awt/image/cvutils/img_colors.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBAWT_EXFILES += \
       java2d/d3d/D3DShaderGen.c \
       awt/image/cvutils/img_colors.c \
       #
 endif
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
   LIBAWT_EXFILES += java2d/loops/MapAccelFunc.c
 else
   LIBAWT_EXCLUDES += \
@@ -182,20 +182,20 @@
 
 LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES $(X_CFLAGS)
 
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpu, sparcv9)), true)
   LIBAWT_CFLAGS += -xarch=sparcvis -DMLIB_ADD_SUFF \
       $(TOPDIR)/src/$(MODULE)/unix/native/libmlib_image/vis_$(OPENJDK_TARGET_CPU_BITS).il
 
   LIBAWT_ASFLAGS = -P -xarch=v9a
 endif
 
-ifneq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), false)
   LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBAWT_CFLAGS += -EHsc -DUNICODE -D_UNICODE
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
+  ifeq ($(call isTargetCpuBits, 64), true)
     LIBAWT_CFLAGS += -DMLIB_OS64BIT
   endif
 
@@ -203,7 +203,7 @@
   LIBAWT_VERSIONINFO_RESOURCE := $(TOPDIR)/src/$(MODULE)/windows/native/libawt/windows/awt.rc
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   # FIXME: This is probably not what we want to do, but keep it now for compatibility.
   LIBAWT_CFLAGS += $(EXPORT_ALL_SYMBOLS)
 endif
@@ -263,7 +263,7 @@
 
 $(BUILD_LIBAWT): $(call FindLib, java.base, java)
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   $(BUILD_LIBAWT): $(BUILD_LIBMLIB_IMAGE)
 endif
 
@@ -271,7 +271,7 @@
 
 ################################################################################
 
-ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx), )
+ifeq ($(call isTargetOs, windows macosx), false)
   ifeq ($(ENABLE_HEADLESS_ONLY), false)
 
     LIBAWT_XAWT_EXTRA_SRC := \
@@ -297,11 +297,11 @@
         $(FONTCONFIG_CFLAGS) \
         $(CUPS_CFLAGS)
 
-    ifeq ($(OPENJDK_TARGET_OS), solaris)
+    ifeq ($(call isTargetOs, solaris), true)
       LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15
     endif
 
-    ifeq ($(OPENJDK_TARGET_OS), linux)
+    ifeq ($(call isTargetOs, linux), true)
       ifeq ($(DISABLE_XRENDER), true)
         LIBAWT_XAWT_CFLAGS += -DDISABLE_XRENDER_BY_DEFAULT=true
       endif
@@ -309,7 +309,7 @@
 
     LIBAWT_XAWT_LIBS := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm
 
-    ifeq ($(OPENJDK_TARGET_OS), linux)
+    ifeq ($(call isTargetOs, linux), true)
       LIBAWT_XAWT_LIBS += -lpthread
     endif
 
@@ -443,7 +443,7 @@
 ################################################################################
 
 # Mac and Windows only use the native AWT lib, do not build libawt_headless
-ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
+ifeq ($(call isTargetOs, windows macosx), false)
 
   LIBAWT_HEADLESS_EXTRA_SRC := \
       common/font \
@@ -504,7 +504,7 @@
 
   # For use by libfontmanager:
   LIBFREETYPE_CFLAGS := -I$(BUILD_LIBFREETYPE_HEADER_DIRS)
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     LIBFREETYPE_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfreetype/freetype.lib
   else
     LIBFREETYPE_LIBS := -lfreetype
@@ -534,20 +534,20 @@
 
 HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
 
-ifneq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), false)
   HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
                       -DHAVE_SYSCONF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H
 endif
-ifneq (, $(findstring $(OPENJDK_TARGET_OS), linux macosx))
+ifeq ($(call isTargetOs, linux macosx), true)
   HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
 endif
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   HARFBUZZ_CFLAGS += -DHAVE_SOLARIS_ATOMIC_OPS
 endif
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
 endif
-ifneq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), false)
   LIBFONTMANAGER_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
 endif
 # hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
@@ -572,11 +572,11 @@
 
 LIBFONTMANAGER_OPTIMIZATION := HIGH
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
       X11TextRenderer.c
   LIBFONTMANAGER_OPTIMIZATION := HIGHEST
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
       X11TextRenderer.c \
       fontpath.c \
@@ -640,7 +640,7 @@
 
 $(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   $(BUILD_LIBFONTMANAGER): $(call FindLib, $(MODULE), awt_lwawt)
 endif
 
@@ -652,7 +652,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   LIBJAWT_CFLAGS := -EHsc -DUNICODE -D_UNICODE
 
@@ -667,7 +667,7 @@
       java.base:libjava \
       #
 
-  ifeq ($(OPENJDK_TARGET_CPU), x86)
+  ifeq ($(call isTargetCpu, x86), true)
     KERNEL32_LIB := kernel32.lib
   endif
 
@@ -692,25 +692,25 @@
 
   TARGETS += $(COPY_JAWT_LIB)
 
-else # OPENJDK_TARGET_OS not windows
+else # not windows
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     # libjawt on macosx do not use the unix code
     LIBJAWT_EXCLUDE_SRC_PATTERNS := unix
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     JAWT_LIBS := -lawt_lwawt
   else
     JAWT_LIBS :=
-    ifneq ($(OPENJDK_TARGET_OS), solaris)
+    ifeq ($(call isTargetOs, solaris), false)
       JAWT_LIBS += -lawt
     endif
     ifeq ($(ENABLE_HEADLESS_ONLY), false)
       JAWT_LIBS += -lawt_xawt
     else
       JAWT_LIBS += -lawt_headless
-      ifeq ($(OPENJDK_TARGET_OS), linux)
+      ifeq ($(call isTargetOs, linux), true)
         JAWT_CFLAGS += -DHEADLESS
       endif
     endif
@@ -742,11 +742,11 @@
     $(BUILD_LIBJAWT): $(call FindLib, $(MODULE), awt_headless)
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
    $(BUILD_LIBJAWT): $(call FindLib, $(MODULE), awt_lwawt)
   endif
 
-endif # OPENJDK_TARGET_OS
+endif
 
 TARGETS += $(BUILD_LIBJAWT)
 
@@ -784,20 +784,20 @@
     LIBSPLASHSCREEN_EXTRA_SRC += java.base:libzip/zlib
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     # libsplashscreen on macosx do not use the unix code
     LIBSPLASHSCREEN_EXCLUDE_SRC_PATTERNS := unix
   endif
 
   LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE -DPNG_ARM_NEON_OPT=0
 
-  ifeq ($(OPENJDK_TARGET_OS), linux)
-    ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc)
+  ifeq ($(call isTargetOs, linux), true)
+    ifeq ($(call isTargetCpuArch, ppc), true)
       LIBSPLASHSCREEN_CFLAGS += -DPNG_POWERPC_VSX_OPT=0
     endif
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX
 
     BUILD_LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS := -x objective-c -O0
@@ -808,7 +808,7 @@
     BUILD_LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS := -x objective-c -O0
     BUILD_LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS := -O0
 
-  else ifeq ($(OPENJDK_TARGET_OS), windows)
+  else ifeq ($(call isTargetOs, windows), true)
     LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32
   else
     LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 $(X_CFLAGS)
@@ -816,14 +816,14 @@
 
   LIBSPLASHSCREEN_LIBS :=
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     LIBSPLASHSCREEN_LIBS += \
         $(LIBM) -lpthread -liconv -losxapp \
         -framework ApplicationServices \
         -framework Foundation \
         -framework Cocoa \
         -framework JavaNativeFoundation
-  else ifeq ($(OPENJDK_TARGET_OS), windows)
+  else ifeq ($(call isTargetOs, windows), true)
     LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib
   else
     LIBSPLASHSCREEN_LIBS += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread -ldl
@@ -863,7 +863,7 @@
 
   TARGETS += $(BUILD_LIBSPLASHSCREEN)
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     $(BUILD_LIBSPLASHSCREEN): $(call FindLib, $(MODULE), osxapp)
   endif
 
@@ -871,7 +871,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   LIBAWT_LWAWT_EXTRA_SRC := \
       $(TOPDIR)/src/$(MODULE)/unix/native/common/awt \
@@ -941,7 +941,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBOSXUI, \
       NAME := osxui, \
--- a/make/lib/CoreLibraries.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/CoreLibraries.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -35,7 +35,7 @@
 
 BUILD_LIBFDLIBM_OPTIMIZATION := NONE
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
   BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
 endif
 
@@ -68,7 +68,7 @@
 ##########################################################################################
 
 LIBVERIFY_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
     LIBVERIFY_OPTIMIZATION := LOW
   endif
@@ -92,7 +92,7 @@
 
 LIBJAVA_CFLAGS := -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"'
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c
   BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c
 endif
@@ -181,11 +181,11 @@
 
 ##########################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   LIBJLI_EXCLUDE_FILES += java_md_solinux.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # Supply the name of the C runtime lib.
   LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
   ifneq ($(MSVCP_DLL), )
@@ -233,7 +233,7 @@
 
 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli)
 
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
   # AIX also requires a static libjli because the compiler doesn't support '-rpath'
   $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
       NAME := jli_static, \
--- a/make/lib/Lib-java.base.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-java.base.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -99,7 +99,7 @@
 ################################################################################
 # Create the macosx security library
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   # JavaNativeFoundation framework not supported in static builds
   ifneq ($(STATIC_BUILD), true)
 
@@ -130,7 +130,7 @@
 ################################################################################
 # Create the jsig library
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
   ifeq ($(STATIC_BUILD), false)
     $(eval $(call SetupJdkLibrary, BUILD_LIBJSIG, \
         NAME := jsig, \
@@ -205,7 +205,7 @@
 ################################################################################
 # Copy tzmappings file for Windows
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   $(eval $(call SetupCopyFiles, COPY_TZMAPPINGS, \
       FILES := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/windows/conf/tzmappings, \
       DEST := $(call FindLibDirForModule, $(MODULE)), \
--- a/make/lib/Lib-java.desktop.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-java.desktop.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -39,7 +39,7 @@
 ################################################################################
 # Create the libjsound library
 
-ifneq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), false)
 
   LIBJSOUND_CFLAGS := \
       $(ALSA_CFLAGS) \
@@ -48,14 +48,14 @@
       -DUSE_DAUDIO=TRUE \
       #
 
-  ifneq ($(OPENJDK_TARGET_OS), solaris)
+  ifeq ($(call isTargetOs, solaris), false)
     LIBJSOUND_CFLAGS += \
         -DUSE_PLATFORM_MIDI_OUT=TRUE \
         -DUSE_PLATFORM_MIDI_IN=TRUE \
         #
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     LIBJSOUND_TOOLCHAIN := TOOLCHAIN_LINK_CXX
   endif
 
@@ -87,7 +87,7 @@
 ################################################################################
 # Create the macosx specific osxapp and osx libraries
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBOSXAPP, \
       NAME := osxapp, \
@@ -142,4 +142,3 @@
   $(BUILD_LIBOSX): $(call FindLib, java.base, java)
 
 endif
-
--- a/make/lib/Lib-java.instrument.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-java.instrument.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -30,7 +30,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # equivalent of strcasecmp is stricmp on Windows
   LIBINSTRUMENT_CFLAGS := -Dstrcasecmp=stricmp
   WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
@@ -62,7 +62,7 @@
         $(WINDOWS_JLI_LIB), \
 ))
 
-ifeq ($(OPENJDK_TARGET_OS), aix)
+ifeq ($(call isTargetOs, aix), true)
   $(BUILD_LIBINSTRUMENT): $(call FindStaticLib, java.base, jli_static)
 else
   $(BUILD_LIBINSTRUMENT): $(call FindLib, java.base, jli)
--- a/make/lib/Lib-java.management.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-java.management.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -31,7 +31,7 @@
 ################################################################################
 
 LIBMANAGEMENT_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
     LIBMANAGEMENT_OPTIMIZATION := LOW
   endif
@@ -57,4 +57,3 @@
 
 # Include custom extension post hook
 $(eval $(call IncludeCustomExtension, lib/Lib-java.management-post.gmk))
-
--- a/make/lib/Lib-java.prefs.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-java.prefs.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -28,7 +28,7 @@
 ################################################################################
 
 # libprefs on macosx do not use the unix code
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   LIBPREFS_EXCLUDE_SRC_PATTERNS := unix
 endif
 
--- a/make/lib/Lib-java.security.jgss.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-java.security.jgss.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -44,7 +44,7 @@
 
 ifneq ($(BUILD_CRYPTO), false)
 
-  ifeq ($(OPENJDK_TARGET_OS), windows)
+  ifeq ($(call isTargetOs, windows), true)
     $(eval $(call SetupJdkLibrary, BUILD_LIBW2K_LSA_AUTH, \
         NAME := w2k_lsa_auth, \
         OPTIMIZATION := LOW, \
@@ -59,7 +59,7 @@
     TARGETS += $(BUILD_LIBW2K_LSA_AUTH)
   endif
 
-  ifeq ($(OPENJDK_TARGET_OS), macosx)
+  ifeq ($(call isTargetOs, macosx), true)
     # libosxkrb5 needs to call deprecated krb5 APIs so that java
     # can use the native credentials cache.
     $(eval $(call SetupJdkLibrary, BUILD_LIBOSXKRB5, \
--- a/make/lib/Lib-jdk.accessibility.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.accessibility.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   ROOT_SRCDIR := $(TOPDIR)/src/jdk.accessibility/windows/native
 
@@ -100,7 +100,7 @@
 
   endef
 
-  ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+  ifeq ($(call isTargetCpuBits, 32), true)
     $(eval $(call SetupAccessBridgeSysInfo))
     $(eval $(call SetupJavaDLL,-32,32))
     $(eval $(call SetupJavaDLL,,LEGACY))
--- a/make/lib/Lib-jdk.attach.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.attach.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
   # a binary that is compatible with windows versions older than 7/2008R2.
   # See MSDN documentation for GetProcessMemoryInfo for more information.
--- a/make/lib/Lib-jdk.crypto.mscapi.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.crypto.mscapi.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBSUNMSCAPI, \
       NAME := sunmscapi, \
--- a/make/lib/Lib-jdk.crypto.ucrypto.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.crypto.ucrypto.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBJ2UCRYPTO, \
       NAME := j2ucrypto, \
--- a/make/lib/Lib-jdk.hotspot.agent.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.hotspot.agent.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -29,19 +29,19 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
   SA_CFLAGS := -D_FILE_OFFSET_BITS=64
 
-else ifeq ($(OPENJDK_TARGET_OS), solaris)
+else ifeq ($(call isTargetOs, solaris), true)
   SA_LDFLAGS := -mt
 
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
+else ifeq ($(call isTargetOs, macosx), true)
   SA_CFLAGS := -Damd64 -D_GNU_SOURCE -mno-omit-leaf-frame-pointer \
       -mstack-alignment=16 -fPIC
   LIBSA_EXTRA_SRC := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent
-else ifeq ($(OPENJDK_TARGET_OS), windows)
+else ifeq ($(call isTargetOs, windows), true)
   SA_CFLAGS := -D_WINDOWS -D_DEBUG -D_CONSOLE -D_MBCS -EHsc
-  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+  ifeq ($(call isTargetCpu, x86_64), true)
     SA_CXXFLAGS := -DWIN64
   else
     # Only add /RTC1 flag for debug builds as it's
--- a/make/lib/Lib-jdk.internal.le.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.internal.le.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBLE, \
       NAME := le, \
@@ -39,6 +39,6 @@
 
   TARGETS += $(BUILD_LIBLE)
 
-endif # OPENJDK_TARGET_OS
+endif
 
 ################################################################################
--- a/make/lib/Lib-jdk.jdi.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.jdi.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBDT_SHMEM, \
       NAME := dt_shmem, \
@@ -42,6 +42,6 @@
 
   TARGETS += $(BUILD_LIBDT_SHMEM)
 
-endif # OPENJDK_TARGET_OS
+endif
 
 ################################################################################
--- a/make/lib/Lib-jdk.management.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.management.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -30,7 +30,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   # In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
   # a binary that is compatible with windows versions older than 7/2008R2.
   # See MSDN documentation for GetProcessMemoryInfo for more information.
@@ -38,7 +38,7 @@
 endif
 
 LIBMANAGEMENT_EXT_OPTIMIZATION := HIGH
-ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
+ifeq ($(call isTargetOs, solaris linux), true)
   ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
     LIBMANAGEMENT_EXT_OPTIMIZATION := LOW
   endif
@@ -65,4 +65,3 @@
 
 # Include custom extension post hook
 $(eval $(call IncludeCustomExtension, lib/Lib-jdk.management-post.gmk))
-
--- a/make/lib/Lib-jdk.net.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.net.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,7 +27,7 @@
 
 ################################################################################
 
-ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx), )
+ifeq ($(call isTargetOs, solaris linux macosx), true)
 
   $(eval $(call SetupJdkLibrary, BUILD_LIBEXTNET, \
       NAME := extnet, \
--- a/make/lib/Lib-jdk.sctp.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/lib/Lib-jdk.sctp.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -27,9 +27,9 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
+ifeq ($(call isTargetOsType, unix), true)
 
-  ifeq ($(filter $(OPENJDK_TARGET_OS), macosx aix), )
+  ifeq ($(call isTargetOs, macosx aix), false)
     $(eval $(call SetupJdkLibrary, BUILD_LIBSCTP, \
         NAME := sctp, \
         OPTIMIZATION := LOW, \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/scripts/generate-symbol-data.sh	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright (c) 2019, 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.
+#
+
+# This script allows to easily generate (add or update) "--release N" data for JDK N + 1.
+# N must be 11 or greater. This script works on Linux. To create new data, or update existing
+# data, it is necessary to:
+# - download a binary build of OpenJDK N for Linux, API of which will be recorded. It is strongly recommended
+#   to use an official build, not a custom build, to avoid any chance of including unofficial changes.
+#   The binary build should never be a build newer than the GA for JDK N. Install the build. The installation
+#   directory will be denoted as "${JDK_N_INSTALL}" in the further text.
+# - have a checkout the JDK to which the data should be added (or in which the data should be updated).
+#   The checkout directory will be denoted as "${JDK_CHECKOUT}" in the further text.
+#   The checkout must not have any local changes that could interfere with the new data. In particular,
+#   there must be absolutely no changed, new or removed files under the ${JDK_CHECKOUT}/make/data/symbols
+#   directory.
+# - open a terminal program and run these commands:
+#     cd "${JDK_CHECKOUT}"/make/data/symbols
+#     bash ../../scripts/generate-symbol-data.sh "${JDK_N_INSTALL}"
+# - this command will generate or update data for "--release N" into the ${JDK_CHECKOUT}/make/data/symbols
+#   directory, updating all registration necessary. If the goal was to update the data, and there are no
+#   new or changed files in the ${JDK_CHECKOUT}/make/data/symbols directory after running this script,
+#   there were no relevant changes and no further action is necessary. Note that version for N > 9 are encoded
+#   using capital letters, i.e. A represents version 10, B represents 11, and so on. The version numbers are in
+#   the names of the files in the ${JDK_CHECKOUT}/make/data/symbols directory, as well as in
+#   the ${JDK_CHECKOUT}/make/data/symbols/symbols file.
+# - if there are any changed/new files in the ${JDK_CHECKOUT}/make/data/symbols directory after running this script,
+#   then all the changes in this directory, including any new files, need to be sent for review and eventually pushed.
+#   The commit message should specify which binary build was installed in the ${JDK_N_INSTALL} directory and also
+#   include the SCM state that was used to build it, which can be found in ${JDK_N_INSTALL}/release,
+#   in property "SOURCE".
+
+if [ "$1x" = "x" ] ; then
+    echo "Must provide the target JDK as a parameter:" >&2
+    echo "$0 <target-jdk>" >&2
+    exit 1
+fi;
+
+if [ ! -f symbols ] ; then
+    echo "Must run inside the make/data/symbols directory" >&2
+    exit 1
+fi;
+
+if [ "`hg status .`x" != "x" ] ; then
+    echo "The make/data/symbols directory contains local changes!" >&2
+    exit 1
+fi;
+
+$1/bin/java --add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
+            --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
+            --add-exports jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
+            --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
+            --add-modules jdk.jdeps \
+            ../../../make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java \
+            build-description-incremental symbols include.list
--- a/make/test/BuildFailureHandler.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/test/BuildFailureHandler.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -61,7 +61,7 @@
 
 ################################################################################
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
 
   $(eval $(call SetupNativeCompilation, BUILD_LIBTIMEOUT_HANDLER, \
         NAME := timeoutHandler, \
@@ -99,7 +99,7 @@
 #
 RUN_DIR := $(FH_SUPPORT)/test
 # Add the dir of the dll to the path on windows
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   export PATH := $(PATH);$(FH_SUPPORT)
 endif
 
--- a/make/test/JtregNativeHotspot.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/test/JtregNativeHotspot.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -140,7 +140,7 @@
     -I$(VM_TESTBASE_DIR)/nsk/share/jni
 
 NO_FRAMEPOINTER_CFLAGS :=
-ifeq ($(OPENJDK_TARGET_OS),linux)
+ifeq ($(call isTargetOs, linux), true)
    NO_FRAMEPOINTER_CFLAGS := -fomit-frame-pointer
 endif
 
@@ -849,11 +849,11 @@
 ################################################################################
 
 # Platform specific setup
-ifneq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
+ifeq ($(call And, $(call isTargetOs, solaris) $(call isTargetCpuArch, sparc)), false)
   BUILD_HOTSPOT_JTREG_EXCLUDE += liboverflow.c exeThreadSignalMask.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), linux)
+ifeq ($(call isTargetOs, linux), true)
     BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rw := -z noexecstack
     BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack
     BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libstepBreakPopReturn := -lpthread
@@ -870,11 +870,11 @@
 
 BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
 
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifeq ($(call isTargetOs, solaris), true)
     BUILD_HOTSPOT_JTREG_EXCLUDE += libterminatedThread.c
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
     BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
     BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c
 
--- a/make/test/JtregNativeJdk.gmk	Sun Feb 17 15:15:30 2019 -0800
+++ b/make/test/JtregNativeJdk.gmk	Mon Feb 18 10:45:21 2019 +0530
@@ -54,7 +54,7 @@
     -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli
 
 # Platform specific setup
-ifeq ($(OPENJDK_TARGET_OS), windows)
+ifeq ($(call isTargetOs, windows), true)
   BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c
 
   WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
@@ -64,15 +64,15 @@
 else
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
-  ifeq ($(OPENJDK_TARGET_OS), linux)
+  ifeq ($(call isTargetOs, linux), true)
     BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
-  else ifeq ($(OPENJDK_TARGET_OS), solaris)
+  else ifeq ($(call isTargetOs, solaris), true)
     BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lsocket -lnsl
   endif
   BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
+ifeq ($(call isTargetOs, macosx), true)
   BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC
   BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
       -framework Cocoa -framework JavaNativeFoundation
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -425,54 +425,56 @@
 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
                                                 bool acquire, bool release, bool weak, bool is_cae,
                                                 Register result) {
-
-  Register tmp = rscratch2;
+  Register tmp1 = rscratch1;
+  Register tmp2 = rscratch2;
   bool is_narrow = UseCompressedOops;
   Assembler::operand_size size = is_narrow ? Assembler::word : Assembler::xword;
 
-  assert_different_registers(addr, expected, new_val, result, tmp);
+  assert_different_registers(addr, expected, new_val, tmp1, tmp2);
 
   Label retry, done, fail;
 
   // CAS, using LL/SC pair.
   __ bind(retry);
-  __ load_exclusive(result, addr, size, acquire);
+  __ load_exclusive(tmp1, addr, size, acquire);
   if (is_narrow) {
-    __ cmpw(result, expected);
+    __ cmpw(tmp1, expected);
   } else {
-    __ cmp(result, expected);
+    __ cmp(tmp1, expected);
   }
   __ br(Assembler::NE, fail);
-  __ store_exclusive(tmp, new_val, addr, size, release);
+  __ store_exclusive(tmp2, new_val, addr, size, release);
   if (weak) {
-    __ cmpw(tmp, 0u); // If the store fails, return NE to our caller
+    __ cmpw(tmp2, 0u); // If the store fails, return NE to our caller
   } else {
-    __ cbnzw(tmp, retry);
+    __ cbnzw(tmp2, retry);
   }
   __ b(done);
 
  __  bind(fail);
-  // Check if rb(expected)==rb(result)
+  // Check if rb(expected)==rb(tmp1)
   // Shuffle registers so that we have memory value ready for next expected.
-  __ mov(tmp, expected);
-  __ mov(expected, result);
+  __ mov(tmp2, expected);
+  __ mov(expected, tmp1);
   if (is_narrow) {
-    __ decode_heap_oop(result, result);
-    __ decode_heap_oop(tmp, tmp);
+    __ decode_heap_oop(tmp1, tmp1);
+    __ decode_heap_oop(tmp2, tmp2);
   }
-  read_barrier_impl(masm, result);
-  read_barrier_impl(masm, tmp);
-  __ cmp(result, tmp);
+  read_barrier_impl(masm, tmp1);
+  read_barrier_impl(masm, tmp2);
+  __ cmp(tmp1, tmp2);
   // Retry with expected now being the value we just loaded from addr.
   __ br(Assembler::EQ, retry);
   if (is_cae && is_narrow) {
     // For cmp-and-exchange and narrow oops, we need to restore
     // the compressed old-value. We moved it to 'expected' a few lines up.
-    __ mov(result, expected);
+    __ mov(tmp1, expected);
   }
   __ bind(done);
 
-  if (!is_cae) {
+  if (is_cae) {
+    __ mov(result, tmp1);
+  } else {
     __ cset(result, Assembler::EQ);
   }
 }
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -2167,6 +2167,14 @@
   hlt(0);
 }
 
+void MacroAssembler::warn(const char* msg) {
+  pusha();
+  mov(c_rarg0, (address)msg);
+  mov(lr, CAST_FROM_FN_PTR(address, warning));
+  blrt(lr, 1, 0, MacroAssembler::ret_type_void);
+  popa();
+}
+
 void MacroAssembler::unimplemented(const char* what) {
   const char* buf = NULL;
   {
--- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1687,7 +1687,7 @@
 
 
   // Helper for generating a dynamic type check.
-  // Smashes rscratch1.
+  // Smashes rscratch1, rscratch2.
   void generate_type_check(Register sub_klass,
                            Register super_check_offset,
                            Register super_klass,
@@ -1979,6 +1979,10 @@
     const Register dst_pos    = c_rarg3;  // destination position
     const Register length     = c_rarg4;
 
+
+    // Registers used as temps
+    const Register dst_klass  = c_rarg5;
+
     __ align(CodeEntryAlignment);
 
     StubCodeMark mark(this, "StubRoutines", name);
@@ -2184,8 +2188,7 @@
       arraycopy_range_checks(src, src_pos, dst, dst_pos, scratch_length,
                              r18, L_failed);
 
-      const Register rscratch2_dst_klass = rscratch2;
-      __ load_klass(rscratch2_dst_klass, dst); // reload
+      __ load_klass(dst_klass, dst); // reload
 
       // Marshal the base address arguments now, freeing registers.
       __ lea(from, Address(src, src_pos, Address::lsl(LogBytesPerHeapOop)));
@@ -2195,24 +2198,25 @@
       __ movw(count, length);           // length (reloaded)
       Register sco_temp = c_rarg3;      // this register is free now
       assert_different_registers(from, to, count, sco_temp,
-                                 rscratch2_dst_klass, scratch_src_klass);
+                                 dst_klass, scratch_src_klass);
       // assert_clean_int(count, sco_temp);
 
       // Generate the type check.
       const int sco_offset = in_bytes(Klass::super_check_offset_offset());
-      __ ldrw(sco_temp, Address(rscratch2_dst_klass, sco_offset));
-      // assert_clean_int(sco_temp, r18);
-      generate_type_check(scratch_src_klass, sco_temp, rscratch2_dst_klass, L_plain_copy);
+      __ ldrw(sco_temp, Address(dst_klass, sco_offset));
+
+      // Smashes rscratch1, rscratch2
+      generate_type_check(scratch_src_klass, sco_temp, dst_klass, L_plain_copy);
 
       // Fetch destination element klass from the ObjArrayKlass header.
       int ek_offset = in_bytes(ObjArrayKlass::element_klass_offset());
-      __ ldr(rscratch2_dst_klass, Address(rscratch2_dst_klass, ek_offset));
-      __ ldrw(sco_temp, Address(rscratch2_dst_klass, sco_offset));
+      __ ldr(dst_klass, Address(dst_klass, ek_offset));
+      __ ldrw(sco_temp, Address(dst_klass, sco_offset));
 
       // the checkcast_copy loop needs two extra arguments:
       assert(c_rarg3 == sco_temp, "#3 already in place");
       // Set up arguments for checkcast_copy_entry.
-      __ mov(c_rarg4, rscratch2_dst_klass);  // dst.klass.element_klass
+      __ mov(c_rarg4, dst_klass);  // dst.klass.element_klass
       __ b(RuntimeAddress(checkcast_copy_entry));
     }
 
--- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2014, Red Hat Inc. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -3230,7 +3230,6 @@
     // since the parameter_size includes it.
     __ push(r19);
     __ mov(r19, index);
-    assert(ConstantPoolCacheEntry::_indy_resolved_references_appendix_offset == 0, "appendix expected at index+0");
     __ load_resolved_reference_at_index(index, r19);
     __ pop(r19);
     __ push(index);  // push appendix (MethodType, CallSite, etc.)
--- a/src/hotspot/cpu/arm/arm.ad	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/arm.ad	Mon Feb 18 10:45:21 2019 +0530
@@ -352,7 +352,7 @@
   // If this does safepoint polling, then do it here
   if (do_polling() && ra_->C->is_method_compilation()) {
     // mov_slow here is usually one or two instruction
-    __ mov_address(Rtemp, (address)os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+    __ mov_address(Rtemp, (address)os::get_polling_page());
     __ relocate(relocInfo::poll_return_type);
     __ ldr(Rtemp, Address(Rtemp));
   }
--- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2019, 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
@@ -309,7 +309,7 @@
   __ remove_frame(initial_frame_size_in_bytes());
 
   // mov_slow here is usually one or two instruction
-  __ mov_address(Rtemp, os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+  __ mov_address(Rtemp, os::get_polling_page());
   __ relocate(relocInfo::poll_return_type);
   __ ldr(Rtemp, Address(Rtemp));
   __ ret();
@@ -317,7 +317,7 @@
 
 
 int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
-  __ mov_address(Rtemp, os::get_polling_page(), symbolic_Relocation::polling_page_reference);
+  __ mov_address(Rtemp, os::get_polling_page());
   if (info != NULL) {
     add_debug_info_for_branch(info);
   }
--- a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -218,7 +218,7 @@
   const Register card_addr = tmp1;
   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
 
-  __ mov_address(tmp2, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+  __ mov_address(tmp2, (address)ct->byte_map_base());
   __ add(card_addr, tmp2, AsmOperand(store_addr, lsr, CardTable::card_shift));
 
   __ ldrb(tmp2, Address(card_addr));
--- a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -167,7 +167,7 @@
 
   bool load_const = VM_Version::supports_movw();
   if (load_const) {
-    __ mov_address(top_addr, (address)Universe::heap()->top_addr(), symbolic_Relocation::eden_top_reference);
+    __ mov_address(top_addr, (address)Universe::heap()->top_addr());
   } else {
     __ ldr(top_addr, Address(Rthread, JavaThread::heap_top_addr_offset()));
   }
--- a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -61,7 +61,7 @@
   __ sub(count, count, addr); // nb of cards
 
   // warning: Rthread has not been preserved
-  __ mov_address(tmp, (address) ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+  __ mov_address(tmp, (address) ct->byte_map_base());
   __ add(addr,tmp, addr);
 
   Register zero = __ zero_register(tmp);
@@ -119,7 +119,7 @@
      Possible cause is a cache miss (card table base address resides in a
      rarely accessed area of thread descriptor).
   */
-  __ mov_address(card_table_base, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference);
+  __ mov_address(card_table_base, (address)ct->byte_map_base());
 }
 
 // The 2nd part of the store check.
--- a/src/hotspot/cpu/arm/macroAssembler_arm.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/macroAssembler_arm.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -26,7 +26,6 @@
 #define CPU_ARM_MACROASSEMBLER_ARM_HPP
 
 #include "code/relocInfo.hpp"
-#include "code/relocInfo_ext.hpp"
 
 class BiasedLockingCounters;
 
@@ -513,15 +512,13 @@
     }
   }
 
-  // Runtime address that may vary from one execution to another. The
-  // symbolic_reference describes what the address is, allowing
-  // the address to be resolved in a different execution context.
+  // Runtime address that may vary from one execution to another.
   // Warning: do not implement as a PC relative address.
-  void mov_address(Register rd, address addr, symbolic_Relocation::symbolic_reference t) {
+  void mov_address(Register rd, address addr) {
     mov_address(rd, addr, RelocationHolder::none);
   }
 
-  // rspec can be RelocationHolder::none (for ignored symbolic_Relocation).
+  // rspec can be RelocationHolder::none (for ignored symbolic Relocation).
   // In that case, the address is absolute and the generated code need
   // not be relocable.
   void mov_address(Register rd, address addr, RelocationHolder const& rspec) {
--- a/src/hotspot/cpu/arm/stubGenerator_arm.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/stubGenerator_arm.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -820,9 +820,9 @@
     // Note: oop_mask and oop_bits must be updated if the code is saved/reused
     const address oop_mask = (address) Universe::verify_oop_mask();
     const address oop_bits = (address) Universe::verify_oop_bits();
-    __ mov_address(tmp1, oop_mask, symbolic_Relocation::oop_mask_reference);
+    __ mov_address(tmp1, oop_mask);
     __ andr(tmp2, oop, tmp1);
-    __ mov_address(tmp1, oop_bits, symbolic_Relocation::oop_bits_reference);
+    __ mov_address(tmp1, oop_bits);
     __ cmp(tmp2, tmp1);
     __ b(error, ne);
 
--- a/src/hotspot/cpu/arm/templateTable_arm.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/arm/templateTable_arm.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2019, 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
@@ -3645,7 +3645,6 @@
     Label L_no_push;
     __ tbz(flags, ConstantPoolCacheEntry::has_appendix_shift, L_no_push);
     __ mov(temp, index);
-    assert(ConstantPoolCacheEntry::_indy_resolved_references_appendix_offset == 0, "appendix expected at index+0");
     __ load_resolved_reference_at_index(index, temp);
     __ verify_oop(index);
     __ push_ptr(index);  // push appendix (MethodType, CallSite, etc.)
--- a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -29,6 +29,7 @@
 #include "gc/g1/g1BarrierSetAssembler.hpp"
 #include "gc/g1/g1BarrierSetRuntime.hpp"
 #include "gc/g1/g1CardTable.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1SATBMarkQueueSet.hpp"
 #include "gc/g1/g1ThreadLocalData.hpp"
 #include "gc/g1/heapRegion.hpp"
@@ -512,7 +513,7 @@
 
   __ bind(restart);
 
-  // Get the index into the update buffer. DirtyCardQueue::_index is
+  // Get the index into the update buffer. G1DirtyCardQueue::_index is
   // a size_t so ld_ptr is appropriate here.
   __ ld(tmp2, dirty_card_q_index_byte_offset, R16_thread);
 
@@ -539,7 +540,7 @@
   __ mflr(R0);
   __ std(R0, _abi(lr), R1_SP);
   __ push_frame_reg_args(nbytes_save, R0); // dummy frame for C call
-  __ call_VM_leaf(CAST_FROM_FN_PTR(address, DirtyCardQueueSet::handle_zero_index_for_thread), R16_thread);
+  __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1DirtyCardQueueSet::handle_zero_index_for_thread), R16_thread);
   __ pop_frame();
   __ ld(R0, _abi(lr), R1_SP);
   __ mtlr(R0);
--- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -30,6 +30,7 @@
 #include "gc/g1/g1BarrierSet.hpp"
 #include "gc/g1/g1BarrierSetAssembler.hpp"
 #include "gc/g1/g1BarrierSetRuntime.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1SATBMarkQueueSet.hpp"
 #include "gc/g1/g1ThreadLocalData.hpp"
 #include "gc/g1/heapRegion.hpp"
@@ -587,7 +588,7 @@
 
   __ bind(restart);
 
-  // Get the index into the update buffer. DirtyCardQueue::_index is
+  // Get the index into the update buffer. G1DirtyCardQueue::_index is
   // a size_t so z_ltg is appropriate here.
   __ z_ltg(idx, Address(Z_thread, dirty_card_q_index_byte_offset));
 
@@ -607,7 +608,7 @@
   __ bind(refill);
   save_volatile_registers(sasm);
   __ z_lgr(idx, addr_card); // Save addr_card, tmp3 must be non-volatile.
-  __ call_VM_leaf(CAST_FROM_FN_PTR(address, DirtyCardQueueSet::handle_zero_index_for_thread),
+  __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1DirtyCardQueueSet::handle_zero_index_for_thread),
                                    Z_thread);
   __ z_lgr(addr_card, idx);
   restore_volatile_registers(sasm); // Restore addr_card.
--- a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 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,6 +28,7 @@
 #include "gc/g1/g1BarrierSetAssembler.hpp"
 #include "gc/g1/g1BarrierSetRuntime.hpp"
 #include "gc/g1/g1CardTable.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1SATBMarkQueueSet.hpp"
 #include "gc/g1/g1ThreadLocalData.hpp"
 #include "gc/g1/heapRegion.hpp"
@@ -315,7 +316,7 @@
   int dirty_card_q_buf_byte_offset = in_bytes(G1ThreadLocalData::dirty_card_queue_buffer_offset());
   __ bind(restart);
 
-  // Load the index into the update buffer. DirtyCardQueue::_index is
+  // Load the index into the update buffer. G1DirtyCardQueue::_index is
   // a size_t so ld_ptr is appropriate here.
   __ ld_ptr(G2_thread, dirty_card_q_index_byte_offset, L0);
 
@@ -333,7 +334,7 @@
   __ bind(refill);
   address handle_zero =
     CAST_FROM_FN_PTR(address,
-                     &DirtyCardQueueSet::handle_zero_index_for_thread);
+                     &G1DirtyCardQueueSet::handle_zero_index_for_thread);
   // This should be rare enough that we can afford to save all the
   // scratch registers that the calling context might be using.
   __ mov(G1_scratch, L3);
@@ -673,7 +674,7 @@
 
   __ bind(restart);
 
-  // Get the index into the update buffer. DirtyCardQueue::_index is
+  // Get the index into the update buffer. G1DirtyCardQueue::_index is
   // a size_t so ld_ptr is appropriate here.
   __ ld_ptr(G2_thread, dirty_card_q_index_byte_offset, tmp3);
 
@@ -694,7 +695,7 @@
 
   __ call_VM_leaf(L7_thread_cache,
                   CAST_FROM_FN_PTR(address,
-                                   DirtyCardQueueSet::handle_zero_index_for_thread),
+                                   G1DirtyCardQueueSet::handle_zero_index_for_thread),
                   G2_thread);
 
   __ restore_live_registers(true);
--- a/src/hotspot/cpu/sparc/templateTable_sparc.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/sparc/templateTable_sparc.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -2992,7 +2992,6 @@
     // Push the appendix as a trailing parameter.
     // This must be done before we get the receiver,
     // since the parameter_size includes it.
-    assert(ConstantPoolCacheEntry::_indy_resolved_references_appendix_offset == 0, "appendix expected at index+0");
     __ load_resolved_reference_at_index(temp, index, /*tmp*/recv);
     __ verify_oop(temp);
     __ push_ptr(temp);  // push appendix (MethodType, CallSite, etc.)
--- a/src/hotspot/cpu/x86/templateTable_x86.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/cpu/x86/templateTable_x86.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -3643,7 +3643,6 @@
     // since the parameter_size includes it.
     __ push(rbx);
     __ mov(rbx, index);
-    assert(ConstantPoolCacheEntry::_indy_resolved_references_appendix_offset == 0, "appendix expected at index+0");
     __ load_resolved_reference_at_index(index, rbx);
     __ pop(rbx);
     __ push(index);  // push appendix (MethodType, CallSite, etc.)
--- a/src/hotspot/os/aix/porting_aix.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/os/aix/porting_aix.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013 SAP SE. All rights reserved.
+ * Copyright (c) 2012, 2019 SAP SE. 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
@@ -34,7 +34,15 @@
 #include "utilities/align.hpp"
 #include "utilities/debug.hpp"
 
+// distinguish old xlc and xlclang++, where
+// <ibmdemangle.h> is suggested but not found in GA release (might come with a fix)
+#if defined(__clang__)
+#define DISABLE_DEMANGLE
+// #include <ibmdemangle.h>
+#else
 #include <demangle.h>
+#endif
+
 #include <sys/debug.h>
 #include <pthread.h>
 #include <ucontext.h>
@@ -237,6 +245,7 @@
       p_name[i] = '\0';
 
       // If it is a C++ name, try and demangle it using the Demangle interface (see demangle.h).
+#ifndef DISABLE_DEMANGLE
       if (demangle) {
         char* rest;
         Name* const name = Demangle(p_name, rest);
@@ -249,6 +258,7 @@
           delete name;
         }
       }
+#endif
     } else {
       strncpy(p_name, "<nameless function>", namelen-1);
       p_name[namelen-1] = '\0';
--- a/src/hotspot/os/windows/os_windows.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/os/windows/os_windows.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -125,6 +125,11 @@
   #define __CPU__ i486
 #endif
 
+#if INCLUDE_AOT
+PVOID  topLevelVectoredExceptionHandler = NULL;
+LONG WINAPI topLevelVectoredExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo);
+#endif
+
 // save DLL module handle, used by GetModuleFileName
 
 HINSTANCE vm_lib_handle;
@@ -143,6 +148,12 @@
     if (ForceTimeHighResolution) {
       timeEndPeriod(1L);
     }
+#if INCLUDE_AOT
+    if (topLevelVectoredExceptionHandler != NULL) {
+      RemoveVectoredExceptionHandler(topLevelVectoredExceptionHandler);
+      topLevelVectoredExceptionHandler = NULL;
+    }
+#endif
     break;
   default:
     break;
@@ -2325,6 +2336,25 @@
   return true;
 }
 
+#if INCLUDE_AOT
+LONG WINAPI topLevelVectoredExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
+  PEXCEPTION_RECORD exceptionRecord = exceptionInfo->ExceptionRecord;
+  address addr = (address) exceptionRecord->ExceptionInformation[1];
+  address pc = (address) exceptionInfo->ContextRecord->Rip;
+
+  // Handle the case where we get an implicit exception in AOT generated
+  // code.  AOT DLL's loaded are not registered for structured exceptions.
+  // If the exception occurred in the codeCache or AOT code, pass control
+  // to our normal exception handler.
+  CodeBlob* cb = CodeCache::find_blob(pc);
+  if (cb != NULL) {
+    return topLevelExceptionFilter(exceptionInfo);
+  }
+
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+#endif
+
 //-----------------------------------------------------------------------------
 LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
   if (InterceptOSException) return EXCEPTION_CONTINUE_SEARCH;
@@ -4080,6 +4110,16 @@
 
   // Setup Windows Exceptions
 
+#if INCLUDE_AOT
+  // If AOT is enabled we need to install a vectored exception handler
+  // in order to forward implicit exceptions from code in AOT
+  // generated DLLs.  This is necessary since these DLLs are not
+  // registered for structured exceptions like codecache methods are.
+  if (UseAOT) {
+    topLevelVectoredExceptionHandler = AddVectoredExceptionHandler( 1, topLevelVectoredExceptionFilter);
+  }
+#endif
+
   // for debugging float code generation bugs
   if (ForceFloatExceptions) {
 #ifndef  _WIN64
--- a/src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -43,7 +43,7 @@
 }
 
 inline void Prefetch::write(void *loc, intx interval) {
-#if !defined(USE_XLC_PREFETCH_WRITE_BUILTIN)
+#if !defined(USE_XLC_BUILTINS)
   __asm__ __volatile__ (
     "   dcbtst 0, %0       \n"
     :
--- a/src/hotspot/share/aot/aotCodeHeap.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/aot/aotCodeHeap.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -707,7 +707,9 @@
     for (int i = 0; i < methods_cnt; ++i) {
       int code_id = indexes[i];
       AOTCompiledMethod* aot = _code_to_aot[code_id]._aot;
-      aot->mark_for_deoptimization(false);
+      if (aot != NULL) {
+        aot->mark_for_deoptimization(false);
+      }
     }
   }
 }
--- a/src/hotspot/share/c1/c1_Decorators.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/c1/c1_Decorators.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -34,5 +34,7 @@
 // Use the C1_MASK_BOOLEAN decorator for boolean accesses where the value
 // needs to be masked.
 const DecoratorSet C1_MASK_BOOLEAN   = DECORATOR_LAST << 2;
+// Use the C1_UNSAFE_ACCESS decorator to mark unsafe accesses.
+const DecoratorSet C1_UNSAFE_ACCESS  = DECORATOR_LAST << 3;
 
 #endif // SHARE_C1_C1_DECORATORS_HPP
--- a/src/hotspot/share/c1/c1_LIRGenerator.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/c1/c1_LIRGenerator.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -2161,7 +2161,7 @@
   off.load_item();
   src.load_item();
 
-  DecoratorSet decorators = IN_HEAP;
+  DecoratorSet decorators = IN_HEAP | C1_UNSAFE_ACCESS;
 
   if (x->is_volatile()) {
     decorators |= MO_SEQ_CST;
@@ -2195,7 +2195,7 @@
 
   set_no_result(x);
 
-  DecoratorSet decorators = IN_HEAP;
+  DecoratorSet decorators = IN_HEAP | C1_UNSAFE_ACCESS;
   if (type == T_ARRAY || type == T_OBJECT) {
     decorators |= ON_UNKNOWN_OOP_REF;
   }
@@ -2211,7 +2211,7 @@
   LIRItem off(x->offset(), this);
   LIRItem value(x->value(), this);
 
-  DecoratorSet decorators = IN_HEAP | MO_SEQ_CST;
+  DecoratorSet decorators = IN_HEAP | C1_UNSAFE_ACCESS | MO_SEQ_CST;
 
   if (type == T_ARRAY || type == T_OBJECT) {
     decorators |= ON_UNKNOWN_OOP_REF;
--- a/src/hotspot/share/ci/ciInstanceKlass.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/ci/ciInstanceKlass.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -669,11 +669,21 @@
           _out->print_cr(INT64_FORMAT, *(int64_t*)&d);
           break;
         }
-        case T_ARRAY: {
+        case T_ARRAY:  // fall-through
+        case T_OBJECT: {
           oop value =  mirror->obj_field_acquire(fd->offset());
           if (value == NULL) {
             _out->print_cr("null");
-          } else {
+          } else if (value->is_instance()) {
+            assert(fd->field_type() == T_OBJECT, "");
+            if (value->is_a(SystemDictionary::String_klass())) {
+              const char* ascii_value = java_lang_String::as_quoted_ascii(value);
+              _out->print("\"%s\"", (ascii_value != NULL) ? ascii_value : "");
+            } else {
+              const char* klass_name  = value->klass()->name()->as_quoted_ascii();
+              _out->print_cr("%s", klass_name);
+            }
+          } else if (value->is_array()) {
             typeArrayOop ta = (typeArrayOop)value;
             _out->print("%d", ta->length());
             if (value->is_objArray()) {
@@ -682,21 +692,6 @@
               _out->print(" %s", klass_name);
             }
             _out->cr();
-          }
-          break;
-        }
-        case T_OBJECT: {
-          oop value =  mirror->obj_field_acquire(fd->offset());
-          if (value == NULL) {
-            _out->print_cr("null");
-          } else if (value->is_instance()) {
-            if (value->is_a(SystemDictionary::String_klass())) {
-              const char* ascii_value = java_lang_String::as_quoted_ascii(value);
-              _out->print("\"%s\"", (ascii_value != NULL) ? ascii_value : "");
-            } else {
-              const char* klass_name  = value->klass()->name()->as_quoted_ascii();
-              _out->print_cr("%s", klass_name);
-            }
           } else {
             ShouldNotReachHere();
           }
--- a/src/hotspot/share/ci/ciStreams.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/ci/ciStreams.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -334,15 +334,91 @@
   ciMethod* m = env->get_method_by_index(cpool, get_method_index(), cur_bc(), _holder);
   will_link = m->is_loaded();
 
-  // Use the MethodType stored in the CP cache to create a signature
+  // Use the signature stored in the CP cache to create a signature
   // with correct types (in respect to class loaders).
-  if (has_method_type()) {
-    ciSymbol*     sig_sym     = env->get_symbol(cpool->symbol_at(get_method_signature_index(cpool)));
-    ciKlass*      pool_holder = env->get_klass(cpool->pool_holder());
-    ciMethodType* method_type = get_method_type();
-    ciSignature* declared_signature = new (env->arena()) ciSignature(pool_holder, sig_sym, method_type);
-    (*declared_signature_result) = declared_signature;
+  //
+  // In classic Java (before Java 7) there is never the slightest
+  // difference between the signature at the call site and that of the
+  // method.  Such a difference would have been a type error in the
+  // JVM.
+  //
+  // Now there are a few circumstances where the signature of a call
+  // site (which controls the outgoing stacked arguments) can differ
+  // from the signature of the method (which controls the receipt of
+  // those arguments at the method entry point).
+  //
+  // A. The signatures can differ if the callee is a static method and
+  // the caller thinks it is calling a non-static method (VH.get).
+  // This requires the method signature to have an explicit leading
+  // argument for the implicit 'this', not present at the call site.
+  //
+  // B. The call site can have less specific parameter types than the
+  // method, allowing loosely-typed code to handle strongly-typed
+  // methods.  This happens with linkToStatic and related linker
+  // commands.  Obviously the loosely-typed code has to ensure that
+  // the strongly typed method's invariants are respected, and this is
+  // done by issuing dynamic casts.
+  //
+  // C. The call site can have more specific parameter types than the
+  // method, allowing loosely-typed methods to handle strongly-typed
+  // requests.
+  //
+  // D. There are corresponding effects with return values, such as
+  // boolean method returning an int to an int-receiving call site,
+  // even though the method thought it returned just a boolean.
+  //
+  // E. The calling sequence at a particular call site may add an
+  // "appendix" argument not mentioned in the call site signature.  It
+  // is expected by the method signature, though, and this adds to the
+  // method's arity, even after 'this' parameter effects (A) are
+  // discounted.  Appendixes are used by invokehandle and
+  // invokedynamic instructions.
+  //
+  // F. A linker method (linkToStatic, etc.) can also take an extra
+  // argument, a MemberName which routes the call to a concrete
+  // strongly-typed method.  In this case the linker method may also
+  // differ in any of the ways A-D.  The eventual method will ignore
+  // the presence of the extra argument.
+  //
+  // None of these changes to calling sequences requires an argument
+  // to be moved or reformatted in any way.  This works because all
+  // references look alike to the JVM, as do all primitives (except
+  // float/long/double).  Another required property of the JVM is
+  // that, if a trailing argument is added or dropped, the placement
+  // of other arguments does not change.  This allows cases E and F to
+  // work smoothly, against without any moving or reformatting,
+  // despite the arity change.
+  //
+  if (has_local_signature()) {
+    Symbol* local_signature = cpool->symbol_at(get_method_signature_index(cpool));
+    ciSymbol* sig_sym  = env->get_symbol(local_signature);
+    ciKlass* pool_holder = env->get_klass(cpool->pool_holder());
+    ciSignature* call_site_sig = new (env->arena()) ciSignature(pool_holder, cpool, sig_sym);
+    // Examples of how the call site signature can differ from the method's own signature:
+    //
+    //  meth = static jboolean java.lang.invoke.VarHandleGuards.guard_LII_Z(jobject, jobject, jint, jint, jobject)
+    //  msig = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;IILjava/lang/invoke/VarHandle$AccessDescriptor;)Z
+    //  call = (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;II)Z
+    //
+    //  meth = static jobject java.lang.invoke.LambdaForm$MH/0x0000000800066840.linkToTargetMethod(jobject, jobject)
+    //  msig = (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+    //  call = (Ljava/lang/String;)Ljava/util/function/Predicate;
+    //
+    (*declared_signature_result) = call_site_sig;
+
   } else {
+    // We can just use the method's own signature.  It may differ from the call site, but not by much.
+    //
+    // Examples of how the call site signature can differ from the method's signature:
+    //
+    // meth = static final native jint java.lang.invoke.MethodHandle.linkToStatic(jobject, jobject, jint, jint, jobject)
+    // msig = (Ljava/lang/Object;Ljava/lang/Object;IILjava/lang/invoke/MemberName;)I
+    // call = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;IILjava/lang/invoke/MemberName;)Z
+    //
+    // meth = final native jint java.lang.invoke.MethodHandle.invokeBasic(jobject, jobject, jint, jint)
+    // msig = (Ljava/lang/Object;Ljava/lang/Object;II)I
+    // call = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;II)Z
+    //
     (*declared_signature_result) = m->signature();
   }
   return m;
@@ -372,27 +448,14 @@
 }
 
 // ------------------------------------------------------------------
-// ciBytecodeStream::has_method_type
+// ciBytecodeStream::has_local_signature
 //
-// Returns true if there is a MethodType argument stored in the
-// constant pool cache at the current bci.
-bool ciBytecodeStream::has_method_type() {
+// Returns true if the method stored in the constant
+// pool cache at the current bci has a local signature.
+bool ciBytecodeStream::has_local_signature() {
   GUARDED_VM_ENTRY(
     constantPoolHandle cpool(_method->get_Method()->constants());
-    return ConstantPool::has_method_type_at_if_loaded(cpool, get_method_index());
-  )
-}
-
-// ------------------------------------------------------------------
-// ciBytecodeStream::get_method_type
-//
-// Return the MethodType stored in the constant pool cache at
-// the current bci.
-ciMethodType* ciBytecodeStream::get_method_type() {
-  GUARDED_VM_ENTRY(
-    constantPoolHandle cpool(_method->get_Method()->constants());
-    oop method_type_oop = ConstantPool::method_type_at_if_loaded(cpool, get_method_index());
-    return CURRENT_ENV->get_object(method_type_oop)->as_method_type();
+    return ConstantPool::has_local_signature_at_if_loaded(cpool, get_method_index());
   )
 }
 
--- a/src/hotspot/share/ci/ciStreams.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/ci/ciStreams.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -245,8 +245,7 @@
   ciMethod*     get_method(bool& will_link, ciSignature* *declared_signature_result);
   bool          has_appendix();
   ciObject*     get_appendix();
-  bool          has_method_type();
-  ciMethodType* get_method_type();
+  bool          has_local_signature();
   ciKlass*      get_declared_method_holder();
   int           get_method_holder_index();
   int           get_method_signature_index(const constantPoolHandle& cpool);
--- a/src/hotspot/share/classfile/classFileParser.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -564,7 +564,7 @@
       }
       case JVM_CONSTANT_Dynamic: {
         const int name_and_type_ref_index =
-          cp->invoke_dynamic_name_and_type_ref_index_at(index);
+          cp->bootstrap_name_and_type_ref_index_at(index);
 
         check_property(valid_cp_range(name_and_type_ref_index, length) &&
           cp->tag_at(name_and_type_ref_index).is_name_and_type(),
@@ -579,7 +579,7 @@
       }
       case JVM_CONSTANT_InvokeDynamic: {
         const int name_and_type_ref_index =
-          cp->invoke_dynamic_name_and_type_ref_index_at(index);
+          cp->bootstrap_name_and_type_ref_index_at(index);
 
         check_property(valid_cp_range(name_and_type_ref_index, length) &&
           cp->tag_at(name_and_type_ref_index).is_name_and_type(),
@@ -4991,42 +4991,43 @@
 bool ClassFileParser::verify_unqualified_name(const char* name,
                                               unsigned int length,
                                               int type) {
-  for (const char* p = name; p != name + length;) {
-    jchar ch = *p;
-    if (ch < 128) {
-      if (ch == '.' || ch == ';' || ch == '[' ) {
-        return false;   // do not permit '.', ';', or '['
-      }
-      if (ch == '/') {
+  for (const char* p = name; p != name + length; p++) {
+    switch(*p) {
+      case '.':
+      case ';':
+      case '[':
+        // do not permit '.', ';', or '['
+        return false;
+      case '/':
         // check for '//' or leading or trailing '/' which are not legal
         // unqualified name must not be empty
         if (type == ClassFileParser::LegalClass) {
           if (p == name || p+1 >= name+length || *(p+1) == '/') {
-           return false;
+            return false;
           }
         } else {
           return false;   // do not permit '/' unless it's class name
         }
-      }
-      if (type == ClassFileParser::LegalMethod && (ch == '<' || ch == '>')) {
-        return false;   // do not permit '<' or '>' in method names
-      }
-      p++;
-    } else {
-      char* tmp_p = UTF8::next(p, &ch);
-      p = tmp_p;
+        break;
+      case '<':
+      case '>':
+        // do not permit '<' or '>' in method names
+        if (type == ClassFileParser::LegalMethod) {
+          return false;
+        }
     }
   }
   return true;
 }
 
-// Take pointer to a string. Skip over the longest part of the string that could
+// Take pointer to a UTF8 byte string (not NUL-terminated).
+// Skip over the longest part of the string that could
 // be taken as a fieldname. Allow '/' if slash_ok is true.
 // Return a pointer to just past the fieldname.
 // Return NULL if no fieldname at all was found, or in the case of slash_ok
 // being true, we saw consecutive slashes (meaning we were looking for a
 // qualified path but found something that was badly-formed).
-static const char* skip_over_field_name(const char* name,
+static const char* skip_over_field_name(const char* const name,
                                         bool slash_ok,
                                         unsigned int length) {
   const char* p;
@@ -5062,29 +5063,12 @@
       // Check if ch is Java identifier start or is Java identifier part
       // 4672820: call java.lang.Character methods directly without generating separate tables.
       EXCEPTION_MARK;
-
       // return value
       JavaValue result(T_BOOLEAN);
-      // Set up the arguments to isJavaIdentifierStart and isJavaIdentifierPart
+      // Set up the arguments to isJavaIdentifierStart or isJavaIdentifierPart
       JavaCallArguments args;
       args.push_int(unicode_ch);
 
-      // public static boolean isJavaIdentifierStart(char ch);
-      JavaCalls::call_static(&result,
-        SystemDictionary::Character_klass(),
-        vmSymbols::isJavaIdentifierStart_name(),
-        vmSymbols::int_bool_signature(),
-        &args,
-        THREAD);
-
-      if (HAS_PENDING_EXCEPTION) {
-        CLEAR_PENDING_EXCEPTION;
-        return 0;
-      }
-      if (result.get_jboolean()) {
-        continue;
-      }
-
       if (not_first_ch) {
         // public static boolean isJavaIdentifierPart(char ch);
         JavaCalls::call_static(&result,
@@ -5093,15 +5077,21 @@
           vmSymbols::int_bool_signature(),
           &args,
           THREAD);
-
-        if (HAS_PENDING_EXCEPTION) {
-          CLEAR_PENDING_EXCEPTION;
-          return 0;
-        }
-
-        if (result.get_jboolean()) {
-          continue;
-        }
+      } else {
+        // public static boolean isJavaIdentifierStart(char ch);
+        JavaCalls::call_static(&result,
+          SystemDictionary::Character_klass(),
+          vmSymbols::isJavaIdentifierStart_name(),
+          vmSymbols::int_bool_signature(),
+          &args,
+          THREAD);
+      }
+      if (HAS_PENDING_EXCEPTION) {
+        CLEAR_PENDING_EXCEPTION;
+        return NULL;
+      }
+      if(result.get_jboolean()) {
+        continue;
       }
     }
     return (not_first_ch) ? old_p : NULL;
@@ -5109,7 +5099,8 @@
   return (not_first_ch) ? p : NULL;
 }
 
-// Take pointer to a string. Skip over the longest part of the string that could
+// Take pointer to a UTF8 byte string (not NUL-terminated).
+// Skip over the longest part of the string that could
 // be taken as a field signature. Allow "void" if void_ok.
 // Return a pointer to just past the signature.
 // Return NULL if no legal signature is found.
@@ -5142,18 +5133,12 @@
       }
       else {
         // Skip leading 'L' and ignore first appearance of ';'
-        length--;
         signature++;
-        char* c = strchr((char*) signature, ';');
+        const char* c = (const char*) memchr(signature, ';', length - 1);
         // Format check signature
         if (c != NULL) {
-          ResourceMark rm(THREAD);
           int newlen = c - (char*) signature;
-          char* sig = NEW_RESOURCE_ARRAY(char, newlen + 1);
-          strncpy(sig, signature, newlen);
-          sig[newlen] = '\0';
-
-          bool legal = verify_unqualified_name(sig, newlen, LegalClass);
+          bool legal = verify_unqualified_name(signature, newlen, LegalClass);
           if (!legal) {
             classfile_parse_error("Class name contains illegal character "
                                   "in descriptor in class file %s",
@@ -5187,8 +5172,8 @@
 void ClassFileParser::verify_legal_class_name(const Symbol* name, TRAPS) const {
   if (!_need_verify || _relax_verify) { return; }
 
-  char buf[fixed_buffer_size];
-  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  assert(name->refcount() > 0, "symbol must be kept alive");
+  char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();
   bool legal = false;
 
@@ -5216,7 +5201,7 @@
     Exceptions::fthrow(
       THREAD_AND_LOCATION,
       vmSymbols::java_lang_ClassFormatError(),
-      "Illegal class name \"%s\" in class file %s", bytes,
+      "Illegal class name \"%.*s\" in class file %s", length, bytes,
       _class_name->as_C_string()
     );
     return;
@@ -5227,8 +5212,7 @@
 void ClassFileParser::verify_legal_field_name(const Symbol* name, TRAPS) const {
   if (!_need_verify || _relax_verify) { return; }
 
-  char buf[fixed_buffer_size];
-  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();
   bool legal = false;
 
@@ -5250,7 +5234,7 @@
     Exceptions::fthrow(
       THREAD_AND_LOCATION,
       vmSymbols::java_lang_ClassFormatError(),
-      "Illegal field name \"%s\" in class %s", bytes,
+      "Illegal field name \"%.*s\" in class %s", length, bytes,
       _class_name->as_C_string()
     );
     return;
@@ -5262,8 +5246,7 @@
   if (!_need_verify || _relax_verify) { return; }
 
   assert(name != NULL, "method name is null");
-  char buf[fixed_buffer_size];
-  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();
   bool legal = false;
 
@@ -5288,7 +5271,7 @@
     Exceptions::fthrow(
       THREAD_AND_LOCATION,
       vmSymbols::java_lang_ClassFormatError(),
-      "Illegal method name \"%s\" in class %s", bytes,
+      "Illegal method name \"%.*s\" in class %s", length, bytes,
       _class_name->as_C_string()
     );
     return;
@@ -5302,8 +5285,7 @@
                                                    TRAPS) const {
   if (!_need_verify) { return; }
 
-  char buf[fixed_buffer_size];
-  const char* const bytes = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  const char* const bytes = (const char* const)signature->bytes();
   const unsigned int length = signature->utf8_length();
   const char* const p = skip_over_field_signature(bytes, false, length, CHECK);
 
@@ -5332,8 +5314,7 @@
   }
 
   unsigned int args_size = 0;
-  char buf[fixed_buffer_size];
-  const char* p = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
+  const char* p = (const char*)signature->bytes();
   unsigned int length = signature->utf8_length();
   const char* nextp;
 
@@ -5739,6 +5720,18 @@
   debug_only(ik->verify();)
 }
 
+void ClassFileParser::update_class_name(Symbol* new_class_name) {
+  // Decrement the refcount in the old name, since we're clobbering it.
+  _class_name->decrement_refcount();
+
+  _class_name = new_class_name;
+  // Increment the refcount of the new name.
+  // Now the ClassFileParser owns this name and will decrement in
+  // the destructor.
+  _class_name->increment_refcount();
+}
+
+
 // For an unsafe anonymous class that is in the unnamed package, move it to its host class's
 // package by prepending its host class's package name to its class name and setting
 // its _class_name field.
@@ -5761,7 +5754,13 @@
     // characters.  So, do a strncpy instead of using sprintf("%s...").
     strncpy(new_anon_name + host_pkg_len + 1, (char *)_class_name->base(), class_name_len);
 
+    // Decrement old _class_name to avoid leaking.
+    _class_name->decrement_refcount();
+
     // Create a symbol and update the anonymous class name.
+    // The new class name is created with a refcount of one. When installed into the InstanceKlass,
+    // it'll be two and when the ClassFileParser destructor runs, it'll go back to one and get deleted
+    // when the class is unloaded.
     _class_name = SymbolTable::new_symbol(new_anon_name,
                                           (int)host_pkg_len + 1 + class_name_len,
                                           CHECK);
@@ -5810,6 +5809,7 @@
                                  TRAPS) :
   _stream(stream),
   _requested_name(name),
+  _class_name(NULL),
   _loader_data(loader_data),
   _unsafe_anonymous_host(unsafe_anonymous_host),
   _cp_patches(cp_patches),
@@ -5868,6 +5868,7 @@
   _max_bootstrap_specifier_index(-1) {
 
   _class_name = name != NULL ? name : vmSymbols::unknown_class_name();
+  _class_name->increment_refcount();
 
   assert(THREAD->is_Java_thread(), "invariant");
   assert(_loader_data != NULL, "invariant");
@@ -5937,6 +5938,8 @@
 
 // Destructor to clean up
 ClassFileParser::~ClassFileParser() {
+  _class_name->decrement_refcount();
+
   if (_cp != NULL) {
     MetadataFactory::free_metadata(_loader_data, _cp);
   }
@@ -6090,9 +6093,8 @@
   Symbol* const class_name_in_cp = cp->klass_name_at(_this_class_index);
   assert(class_name_in_cp != NULL, "class_name can't be null");
 
-  // Update _class_name which could be null previously
-  // to reflect the name in the constant pool
-  _class_name = class_name_in_cp;
+  // Update _class_name to reflect the name in the constant pool
+  update_class_name(class_name_in_cp);
 
   // Don't need to check whether this class name is legal or not.
   // It has been checked when constant pool is parsed.
--- a/src/hotspot/share/classfile/classFileParser.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/classfile/classFileParser.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -496,6 +496,8 @@
                      FieldLayoutInfo* info,
                      TRAPS);
 
+   void update_class_name(Symbol* new_name);
+
  public:
   ClassFileParser(ClassFileStream* stream,
                   Symbol* name,
--- a/src/hotspot/share/classfile/loaderConstraints.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/classfile/loaderConstraints.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, 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
@@ -77,7 +77,10 @@
     if (p->hash() == hash) {
       if (p->name() == name) {
         for (int i = p->num_loaders() - 1; i >= 0; i--) {
-          if (p->loader_data(i) == loader_data) {
+          if (p->loader_data(i) == loader_data &&
+              // skip unloaded klasses
+              (p->klass() == NULL ||
+               p->klass()->is_loader_alive())) {
             return pp;
           }
         }
--- a/src/hotspot/share/classfile/stringTable.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/classfile/stringTable.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -334,6 +334,10 @@
   if (StringTable::_alt_hash) {
     hash = hash_string(name, len, true);
   }
+  found_string = StringTable::the_table()->do_lookup(name, len, hash);
+  if (found_string != NULL) {
+    return found_string;
+  }
   return StringTable::the_table()->do_intern(string_or_null_h, name, len,
                                              hash, CHECK_NULL);
 }
--- a/src/hotspot/share/classfile/systemDictionary.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/classfile/systemDictionary.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -2114,7 +2114,7 @@
         ss.print(" wants to load %s %s.",
                  k->external_kind(), k->external_name());
         Klass *existing_klass = constraints()->find_constrained_klass(name, class_loader);
-        if (existing_klass->class_loader() != class_loader()) {
+        if (existing_klass != NULL && existing_klass->class_loader() != class_loader()) {
           ss.print(" A different %s with the same name was previously loaded by %s. (%s)",
                    existing_klass->external_kind(),
                    existing_klass->class_loader_data()->loader_name_and_id(),
@@ -2459,7 +2459,6 @@
                                                           Symbol* signature,
                                                           Klass* accessing_klass,
                                                           Handle *appendix_result,
-                                                          Handle *method_type_result,
                                                           TRAPS) {
   methodHandle empty;
   assert(THREAD->can_call_java() ,"");
@@ -2492,7 +2491,6 @@
                          vmSymbols::linkMethod_signature(),
                          &args, CHECK_(empty));
   Handle mname(THREAD, (oop) result.get_jobject());
-  (*method_type_result) = method_type;
   return unpack_method_and_appendix(mname, accessing_klass, appendix_box, appendix_result, THREAD);
 }
 
@@ -2811,7 +2809,6 @@
                                                               Symbol* name,
                                                               Symbol* type,
                                                               Handle *appendix_result,
-                                                              Handle *method_type_result,
                                                               TRAPS) {
   methodHandle empty;
   Handle bsm, info;
@@ -2853,7 +2850,6 @@
                          vmSymbols::linkCallSite_signature(),
                          &args, CHECK_(empty));
   Handle mname(THREAD, (oop) result.get_jobject());
-  (*method_type_result) = method_type;
   return unpack_method_and_appendix(mname, caller, appendix_box, appendix_result, THREAD);
 }
 
--- a/src/hotspot/share/classfile/systemDictionary.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/classfile/systemDictionary.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -481,7 +481,6 @@
                                                  Symbol* signature,
                                                  Klass* accessing_klass,
                                                  Handle *appendix_result,
-                                                 Handle *method_type_result,
                                                  TRAPS);
   // for a given signature, find the internal MethodHandle method (linkTo* or invokeBasic)
   // (does not ask Java, since this is a low-level intrinsic defined by the JVM)
@@ -544,7 +543,6 @@
                                                      Symbol* name,
                                                      Symbol* type,
                                                      Handle *appendix_result,
-                                                     Handle *method_type_result,
                                                      TRAPS);
 
   // Record the error when the first attempt to resolve a reference from a constant
--- a/src/hotspot/share/code/dependencyContext.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/code/dependencyContext.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -107,7 +107,7 @@
       _safepoint_counter(SafepointSynchronize::safepoint_counter()) {}
 
   ~DependencyContext() {
-    assert(_safepoint_counter == SafepointSynchronize::safepoint_counter(), "safepoint happened");
+    assert(SafepointSynchronize::is_same_safepoint(_safepoint_counter), "must be the same safepoint");
   }
 #else
   DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
--- a/src/hotspot/share/code/relocInfo.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/code/relocInfo.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -92,18 +92,6 @@
   assert(format()==old_format, "sanity check");
 }
 
-nmethod* RelocIterator::code_as_nmethod() const {
-  return _code->as_nmethod();
-}
-
-void relocInfo::set_format(int f) {
-  int old_offset = addr_offset();
-  assert((f & format_mask) == f, "wrong format");
-  _value = (_value & ~(format_mask << offset_width)) | (f << offset_width);
-  assert(addr_offset()==old_offset, "sanity check");
-}
-
-
 void relocInfo::change_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type, relocType new_type) {
   bool found = false;
   while (itr->next() && !found) {
@@ -117,11 +105,6 @@
 }
 
 
-void relocInfo::remove_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type) {
-  change_reloc_info_for_address(itr, pc, old_type, none);
-}
-
-
 // ----------------------------------------------------------------------------------------------------
 // Implementation of RelocIterator
 
@@ -179,14 +162,6 @@
   set_limits(begin, limit);
 }
 
-
-enum { indexCardSize = 128 };
-struct RelocIndexEntry {
-  jint addr_offset;          // offset from header_end of an addr()
-  jint reloc_offset;         // offset from header_end of a relocInfo (prefix)
-};
-
-
 bool RelocIterator::addr_in_const() const {
   const int n = CodeBuffer::SECT_CONSTS;
   return section_start(n) <= addr() && addr() < section_end(n);
@@ -215,12 +190,6 @@
 }
 
 
-void RelocIterator::set_limit(address limit) {
-  address code_end = (address)code() + code()->size();
-  assert(limit == NULL || limit <= code_end, "in bounds");
-  _limit = limit;
-}
-
 // All the strange bit-encodings are in here.
 // The idea is to encode relocation data which are small integers
 // very efficiently (a single extra halfword).  Larger chunks of
@@ -622,14 +591,6 @@
   }
 }
 
-
-void metadata_Relocation::verify_metadata_relocation() {
-  if (!metadata_is_immediate()) {
-    // get the metadata from the pool, and re-insert it into the instruction:
-    verify_value(value());
-  }
-}
-
 address virtual_call_Relocation::cached_value() {
   assert(_cached_value != NULL && _cached_value < addr(), "must precede ic_call");
   return _cached_value;
--- a/src/hotspot/share/code/relocInfo.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/code/relocInfo.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -345,7 +345,6 @@
   static int offset_limit()     { return (1 << offset_width) * offset_unit; }
 
   void set_type(relocType type);
-  void set_format(int format);
 
   void remove() { set_type(none); }
 
@@ -422,7 +421,6 @@
   // (since code is dynamically patched, we also need to dynamically update the relocation info)
   // Both methods takes old_type, so it is able to performe sanity checks on the information removed.
   static void change_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type, relocType new_type);
-  static void remove_reloc_info_for_address(RelocIterator *itr, address pc, relocType old_type);
 
   // Machine dependent stuff
 #include CPU_HEADER(relocInfo)
@@ -531,7 +529,6 @@
   short           _databuf; // spare buffer for compressed data
   short*          _data;    // pointer to the relocation's data
   short           _datalen; // number of halfwords in _data
-  char            _format;  // position within the instruction
 
   // Base addresses needed to compute targets of section_word_type relocs.
   address _section_start[SECT_LIMIT];
@@ -588,23 +585,18 @@
       return false;
     }
 
-    if (relocInfo::have_format)  _format = current()->format();
     return true;
   }
 
   // accessors
   address      limit()        const { return _limit; }
-  void     set_limit(address x);
   relocType    type()         const { return current()->type(); }
   int          format()       const { return (relocInfo::have_format) ? current()->format() : 0; }
   address      addr()         const { return _addr; }
   CompiledMethod*     code()  const { return _code; }
-  nmethod*     code_as_nmethod() const;
   short*       data()         const { return _data; }
   int          datalen()      const { return _datalen; }
   bool     has_current()      const { return _datalen >= 0; }
-
-  void       set_addr(address addr) { _addr = addr; }
   bool   addr_in_const()      const;
 
   address section_start(int n) const {
@@ -793,7 +785,6 @@
   // accessors which only make sense for a bound Relocation
   address         addr()            const { return binding()->addr(); }
   CompiledMethod* code()            const { return binding()->code(); }
-  nmethod*        code_as_nmethod() const { return binding()->code_as_nmethod(); }
   bool            addr_in_const()   const { return binding()->addr_in_const(); }
  protected:
   short*   data()         const { return binding()->data(); }
@@ -1002,8 +993,6 @@
 
   void fix_metadata_relocation();        // reasserts metadata value
 
-  void verify_metadata_relocation();
-
   address value()  { return (address) *metadata_addr(); }
 
   bool metadata_is_immediate()  { return metadata_index() == 0; }
--- a/src/hotspot/share/code/relocInfo_ext.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2015, 2018, 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.
- *
- */
-
-#include "precompiled.hpp"
-#include "code/codeCache.hpp"
-#include "code/relocInfo.hpp"
-#include "code/relocInfo_ext.hpp"
-#include "gc/shared/cardTable.hpp"
-#include "gc/shared/cardTableBarrierSet.hpp"
-#include "gc/shared/collectedHeap.hpp"
-#include "memory/universe.hpp"
-#include "runtime/os.hpp"
-#include "utilities/debug.hpp"
-#ifdef COMPILER1
-#include "c1/c1_globals.hpp"
-#endif
-
-address symbolic_Relocation::symbolic_value(symbolic_Relocation::symbolic_reference t) {
-  if (Universe::heap() == NULL) {
-    // the symbolic values are not needed so early
-    // (and most of them lead to errors if asked too early)
-    return NULL;
-  }
-  switch(t) {
-  case symbolic_Relocation::polling_page_reference: {
-    return os::get_polling_page();
-  }
-  case symbolic_Relocation::eden_top_reference: {
-    if (!Universe::heap()->supports_inline_contig_alloc()) {
-      return NULL;
-    }
-    return (address)Universe::heap()->top_addr();
-  }
-  case symbolic_Relocation::heap_end_reference: {
-    if (!Universe::heap()->supports_inline_contig_alloc()) {
-      return NULL;
-    }
-    return (address)Universe::heap()->end_addr();
-  }
-  case symbolic_Relocation::card_table_reference: {
-    BarrierSet* bs = BarrierSet::barrier_set();
-    CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
-    CardTable* ct = ctbs->card_table();
-    return (address)ct->byte_map_base();
-  }
-  case symbolic_Relocation::mark_bits_reference: {
-    return (address)Universe::verify_mark_bits();
-  }
-  case symbolic_Relocation::mark_mask_reference: {
-    return (address)Universe::verify_mark_mask();
-  }
-  case symbolic_Relocation::oop_bits_reference: {
-    return (address)Universe::verify_oop_bits();
-  }
-  case symbolic_Relocation::oop_mask_reference: {
-    return (address)Universe::verify_oop_mask();
-  }
-  case symbolic_Relocation::debug_string_reference: {
-    return (address)"<Lost debug string>";
-  }
-  default: {
-    // missing declaration
-    ShouldNotReachHere();
-    return NULL;
-  }
-  }
-}
--- a/src/hotspot/share/code/relocInfo_ext.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011, 2019, 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.
- *
- */
-
-#ifndef SHARE_CODE_RELOCINFO_EXT_HPP
-#define SHARE_CODE_RELOCINFO_EXT_HPP
-
-// symbolic_Relocation allows to anotate some addresses in the generated code.
-//
-// This class was initially defined using the last unused relocType. The
-// new version tries to limit the impact on open source code changes.
-//
-// Without compiled code support, symbolic_Relocation need not be a real
-// relocation. To avoid using the last unused relocType, the
-// symbolic_Relocation::spec(<any symbolic type>) has been replaced
-// by additional methods using directly the symbolic type.
-//
-// Note: the order of the arguments in some methods had to reversed
-// to avoid confusion between the relocType enum and the
-// symbolic_reference enum.
-class symbolic_Relocation : AllStatic {
-
- public:
-  enum symbolic_reference {
-    card_table_reference,
-    eden_top_reference,
-    heap_end_reference,
-    polling_page_reference,
-    mark_bits_reference,
-    mark_mask_reference,
-    oop_bits_reference,
-    oop_mask_reference,
-    debug_string_reference,
-    last_symbolic_reference
-  };
-
-  // get the new value for a given symbolic type
-  static address symbolic_value(symbolic_reference t);
-};
-
-#endif // SHARE_CODE_RELOCINFO_EXT_HPP
--- a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -636,8 +636,8 @@
   }
 
   NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
-  _gc_counters = new CollectorCounters("CMS", 1);
-  _cgc_counters = new CollectorCounters("CMS stop-the-world phases", 2);
+  _gc_counters = new CollectorCounters("CMS full collection pauses", 1);
+  _cgc_counters = new CollectorCounters("CMS concurrent cycle pauses", 2);
   _completed_initialization = true;
   _inter_sweep_timer.start();  // start of time
 }
--- a/src/hotspot/share/gc/cms/parNewGeneration.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -624,7 +624,7 @@
 }
 
 ParNewGeneration::ParNewGeneration(ReservedSpace rs, size_t initial_byte_size)
-  : DefNewGeneration(rs, initial_byte_size, "PCopy"),
+  : DefNewGeneration(rs, initial_byte_size, "CMS young collection pauses"),
   _plab_stats("Young", YoungPLABSize, PLABWeight),
   _overflow_list(NULL),
   _is_alive_closure(this)
--- a/src/hotspot/share/gc/g1/collectionSetChooser.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2001, 2018, 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.
- *
- */
-
-#include "precompiled.hpp"
-#include "gc/g1/collectionSetChooser.hpp"
-#include "gc/g1/g1CollectedHeap.inline.hpp"
-#include "gc/g1/heapRegionRemSet.hpp"
-#include "gc/shared/space.inline.hpp"
-#include "runtime/atomic.hpp"
-
-// Even though we don't use the GC efficiency in our heuristics as
-// much as we used to, we still order according to GC efficiency. This
-// will cause regions with a lot of live objects and large RSets to
-// end up at the end of the array. Given that we might skip collecting
-// the last few old regions, if after a few mixed GCs the remaining
-// have reclaimable bytes under a certain threshold, the hope is that
-// the ones we'll skip are ones with both large RSets and a lot of
-// live objects, not the ones with just a lot of live objects if we
-// ordered according to the amount of reclaimable bytes per region.
-static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
-  if (hr1 == NULL) {
-    if (hr2 == NULL) {
-      return 0;
-    } else {
-      return 1;
-    }
-  } else if (hr2 == NULL) {
-    return -1;
-  }
-
-  double gc_eff1 = hr1->gc_efficiency();
-  double gc_eff2 = hr2->gc_efficiency();
-  if (gc_eff1 > gc_eff2) {
-    return -1;
-  } if (gc_eff1 < gc_eff2) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-static int order_regions(HeapRegion** hr1p, HeapRegion** hr2p) {
-  return order_regions(*hr1p, *hr2p);
-}
-
-CollectionSetChooser::CollectionSetChooser() :
-  // The line below is the worst bit of C++ hackery I've ever written
-  // (Detlefs, 11/23).  You should think of it as equivalent to
-  // "_regions(100, true)": initialize the growable array and inform it
-  // that it should allocate its elem array(s) on the C heap.
-  //
-  // The first argument, however, is actually a comma expression
-  // (set_allocation_type(this, C_HEAP), 100). The purpose of the
-  // set_allocation_type() call is to replace the default allocation
-  // type for embedded objects STACK_OR_EMBEDDED with C_HEAP. It will
-  // allow to pass the assert in GenericGrowableArray() which checks
-  // that a growable array object must be on C heap if elements are.
-  //
-  // Note: containing object is allocated on C heap since it is CHeapObj.
-  //
-  _regions((ResourceObj::set_allocation_type((address) &_regions,
-                                             ResourceObj::C_HEAP),
-                  100), true /* C_Heap */),
-    _front(0), _end(0), _first_par_unreserved_idx(0),
-    _region_live_threshold_bytes(0), _remaining_reclaimable_bytes(0) {
-  _region_live_threshold_bytes = mixed_gc_live_threshold_bytes();
-}
-
-#ifndef PRODUCT
-void CollectionSetChooser::verify() {
-  guarantee(_end <= regions_length(), "_end: %u regions length: %u", _end, regions_length());
-  guarantee(_front <= _end, "_front: %u _end: %u", _front, _end);
-  uint index = 0;
-  size_t sum_of_reclaimable_bytes = 0;
-  while (index < _front) {
-    guarantee(regions_at(index) == NULL,
-              "all entries before _front should be NULL");
-    index += 1;
-  }
-  HeapRegion *prev = NULL;
-  while (index < _end) {
-    HeapRegion *curr = regions_at(index++);
-    guarantee(curr != NULL, "Regions in _regions array cannot be NULL");
-    guarantee(!curr->is_young(), "should not be young!");
-    guarantee(!curr->is_pinned(),
-              "Pinned region should not be in collection set (index %u)", curr->hrm_index());
-    if (prev != NULL) {
-      guarantee(order_regions(prev, curr) != 1,
-                "GC eff prev: %1.4f GC eff curr: %1.4f",
-                prev->gc_efficiency(), curr->gc_efficiency());
-    }
-    sum_of_reclaimable_bytes += curr->reclaimable_bytes();
-    prev = curr;
-  }
-  guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
-            "reclaimable bytes inconsistent, "
-            "remaining: " SIZE_FORMAT " sum: " SIZE_FORMAT,
-            _remaining_reclaimable_bytes, sum_of_reclaimable_bytes);
-}
-#endif // !PRODUCT
-
-void CollectionSetChooser::sort_regions() {
-  // First trim any unused portion of the top in the parallel case.
-  if (_first_par_unreserved_idx > 0) {
-    assert(_first_par_unreserved_idx <= regions_length(),
-           "Or we didn't reserved enough length");
-    regions_trunc_to(_first_par_unreserved_idx);
-  }
-  _regions.sort(order_regions);
-  assert(_end <= regions_length(), "Requirement");
-#ifdef ASSERT
-  for (uint i = 0; i < _end; i++) {
-    assert(regions_at(i) != NULL, "Should be true by sorting!");
-  }
-#endif // ASSERT
-  if (log_is_enabled(Trace, gc, liveness)) {
-    G1PrintRegionLivenessInfoClosure cl("Post-Sorting");
-    for (uint i = 0; i < _end; ++i) {
-      HeapRegion* r = regions_at(i);
-      cl.do_heap_region(r);
-    }
-  }
-  verify();
-}
-
-void CollectionSetChooser::add_region(HeapRegion* hr) {
-  assert(!hr->is_pinned(),
-         "Pinned region shouldn't be added to the collection set (index %u)", hr->hrm_index());
-  assert(hr->is_old(), "should be old but is %s", hr->get_type_str());
-  assert(hr->rem_set()->is_complete(),
-         "Trying to add region %u to the collection set with incomplete remembered set", hr->hrm_index());
-  _regions.append(hr);
-  _end++;
-  _remaining_reclaimable_bytes += hr->reclaimable_bytes();
-  hr->calc_gc_efficiency();
-}
-
-void CollectionSetChooser::push(HeapRegion* hr) {
-  assert(hr != NULL, "Can't put back a NULL region");
-  assert(_front >= 1, "Too many regions have been put back");
-  _front--;
-  regions_at_put(_front, hr);
-  _remaining_reclaimable_bytes += hr->reclaimable_bytes();
-}
-
-void CollectionSetChooser::prepare_for_par_region_addition(uint n_threads,
-                                                           uint n_regions,
-                                                           uint chunk_size) {
-  _first_par_unreserved_idx = 0;
-  uint max_waste = n_threads * chunk_size;
-  // it should be aligned with respect to chunk_size
-  uint aligned_n_regions = (n_regions + chunk_size - 1) / chunk_size * chunk_size;
-  assert(aligned_n_regions % chunk_size == 0, "should be aligned");
-  regions_at_put_grow(aligned_n_regions + max_waste - 1, NULL);
-}
-
-uint CollectionSetChooser::claim_array_chunk(uint chunk_size) {
-  uint res = (uint) Atomic::add((jint) chunk_size,
-                                (volatile jint*) &_first_par_unreserved_idx);
-  assert(regions_length() > res + chunk_size - 1,
-         "Should already have been expanded");
-  return res - chunk_size;
-}
-
-void CollectionSetChooser::set_region(uint index, HeapRegion* hr) {
-  assert(regions_at(index) == NULL, "precondition");
-  assert(hr->is_old(), "should be old but is %s", hr->get_type_str());
-  regions_at_put(index, hr);
-  hr->calc_gc_efficiency();
-}
-
-void CollectionSetChooser::update_totals(uint region_num,
-                                         size_t reclaimable_bytes) {
-  // Only take the lock if we actually need to update the totals.
-  if (region_num > 0) {
-    assert(reclaimable_bytes > 0, "invariant");
-    // We could have just used atomics instead of taking the
-    // lock. However, we currently don't have an atomic add for size_t.
-    MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
-    _end += region_num;
-    _remaining_reclaimable_bytes += reclaimable_bytes;
-  } else {
-    assert(reclaimable_bytes == 0, "invariant");
-  }
-}
-
-void CollectionSetChooser::iterate(HeapRegionClosure* cl) {
-  for (uint i = _front; i < _end; i++) {
-    HeapRegion* r = regions_at(i);
-    if (cl->do_heap_region(r)) {
-      cl->set_incomplete();
-      break;
-    }
-  }
-}
-
-void CollectionSetChooser::clear() {
-  _regions.clear();
-  _front = 0;
-  _end = 0;
-  _remaining_reclaimable_bytes = 0;
-}
-
-class ParKnownGarbageHRClosure: public HeapRegionClosure {
-  G1CollectedHeap* _g1h;
-  CSetChooserParUpdater _cset_updater;
-
-public:
-  ParKnownGarbageHRClosure(CollectionSetChooser* hrSorted,
-                           uint chunk_size) :
-    _g1h(G1CollectedHeap::heap()),
-    _cset_updater(hrSorted, true /* parallel */, chunk_size) { }
-
-  bool do_heap_region(HeapRegion* r) {
-    // We will skip any region that's currently used as an old GC
-    // alloc region (we should not consider those for collection
-    // before we fill them up).
-    if (_cset_updater.should_add(r) && !_g1h->is_old_gc_alloc_region(r)) {
-      _cset_updater.add_region(r);
-    } else if (r->is_old()) {
-      // Keep remembered sets for humongous regions, otherwise clean out remembered
-      // sets for old regions.
-      r->rem_set()->clear(true /* only_cardset */);
-    } else {
-      assert(r->is_archive() || !r->is_old() || !r->rem_set()->is_tracked(),
-             "Missed to clear unused remembered set of region %u (%s) that is %s",
-             r->hrm_index(), r->get_type_str(), r->rem_set()->get_state_str());
-    }
-    return false;
-  }
-};
-
-class ParKnownGarbageTask: public AbstractGangTask {
-  CollectionSetChooser* _hrSorted;
-  uint _chunk_size;
-  G1CollectedHeap* _g1h;
-  HeapRegionClaimer _hrclaimer;
-
-public:
-  ParKnownGarbageTask(CollectionSetChooser* hrSorted, uint chunk_size, uint n_workers) :
-      AbstractGangTask("ParKnownGarbageTask"),
-      _hrSorted(hrSorted), _chunk_size(chunk_size),
-      _g1h(G1CollectedHeap::heap()), _hrclaimer(n_workers) {}
-
-  void work(uint worker_id) {
-    ParKnownGarbageHRClosure par_known_garbage_cl(_hrSorted, _chunk_size);
-    _g1h->heap_region_par_iterate_from_worker_offset(&par_known_garbage_cl, &_hrclaimer, worker_id);
-  }
-};
-
-uint CollectionSetChooser::calculate_parallel_work_chunk_size(uint n_workers, uint n_regions) const {
-  assert(n_workers > 0, "Active gc workers should be greater than 0");
-  const uint overpartition_factor = 4;
-  const uint min_chunk_size = MAX2(n_regions / n_workers, 1U);
-  return MAX2(n_regions / (n_workers * overpartition_factor), min_chunk_size);
-}
-
-bool CollectionSetChooser::region_occupancy_low_enough_for_evac(size_t live_bytes) {
-  return live_bytes < mixed_gc_live_threshold_bytes();
-}
-
-bool CollectionSetChooser::should_add(HeapRegion* hr) const {
-  return !hr->is_young() &&
-         !hr->is_pinned() &&
-         region_occupancy_low_enough_for_evac(hr->live_bytes()) &&
-         hr->rem_set()->is_complete();
-}
-
-void CollectionSetChooser::rebuild(WorkGang* workers, uint n_regions) {
-  clear();
-
-  uint n_workers = workers->active_workers();
-
-  uint chunk_size = calculate_parallel_work_chunk_size(n_workers, n_regions);
-  prepare_for_par_region_addition(n_workers, n_regions, chunk_size);
-
-  ParKnownGarbageTask par_known_garbage_task(this, chunk_size, n_workers);
-  workers->run_task(&par_known_garbage_task);
-
-  sort_regions();
-}
--- a/src/hotspot/share/gc/g1/collectionSetChooser.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/*
- * Copyright (c) 2001, 2019, 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.
- *
- */
-
-#ifndef SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
-#define SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
-
-#include "gc/g1/heapRegion.hpp"
-#include "utilities/growableArray.hpp"
-
-class CollectionSetChooser: public CHeapObj<mtGC> {
-
-  GrowableArray<HeapRegion*> _regions;
-
-  // Unfortunately, GrowableArray uses ints for length and indexes. To
-  // avoid excessive casting in the rest of the class the following
-  // wrapper methods are provided that use uints.
-
-  uint regions_length()          { return (uint) _regions.length(); }
-  HeapRegion* regions_at(uint i) { return _regions.at((int) i);     }
-  void regions_at_put(uint i, HeapRegion* hr) {
-    _regions.at_put((int) i, hr);
-  }
-  void regions_at_put_grow(uint i, HeapRegion* hr) {
-    _regions.at_put_grow((int) i, hr);
-  }
-  void regions_trunc_to(uint i)  { _regions.trunc_to((uint) i); }
-
-  // The index of the next candidate old region to be considered for
-  // addition to the CSet.
-  uint _front;
-
-  // The index of the last candidate old region
-  uint _end;
-
-  // Keeps track of the start of the next array chunk to be claimed by
-  // parallel GC workers.
-  uint _first_par_unreserved_idx;
-
-  // If a region has more live bytes than this threshold, it will not
-  // be added to the CSet chooser and will not be a candidate for
-  // collection.
-  size_t _region_live_threshold_bytes;
-
-  // The sum of reclaimable bytes over all the regions in the CSet chooser.
-  size_t _remaining_reclaimable_bytes;
-
-  // Calculate and return chunk size (in number of regions) for parallel
-  // addition of regions
-  uint calculate_parallel_work_chunk_size(uint n_workers, uint n_regions) const;
-public:
-
-  // Return the current candidate region to be considered for
-  // collection without removing it from the CSet chooser.
-  HeapRegion* peek() {
-    HeapRegion* res = NULL;
-    if (_front < _end) {
-      res = regions_at(_front);
-      assert(res != NULL, "Unexpected NULL hr in _regions at index %u", _front);
-    }
-    return res;
-  }
-
-  // Remove the given region from the CSet chooser and move to the
-  // next one.
-  HeapRegion* pop() {
-    HeapRegion* hr = regions_at(_front);
-    assert(hr != NULL, "pre-condition");
-    assert(_front < _end, "pre-condition");
-    regions_at_put(_front, NULL);
-    assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
-           "remaining reclaimable bytes inconsistent "
-           "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
-           hr->reclaimable_bytes(), _remaining_reclaimable_bytes);
-    _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
-    _front += 1;
-    return hr;
-  }
-
-  void push(HeapRegion* hr);
-
-  CollectionSetChooser();
-
-  static size_t mixed_gc_live_threshold_bytes() {
-    return HeapRegion::GrainBytes * (size_t) G1MixedGCLiveThresholdPercent / 100;
-  }
-
-  static bool region_occupancy_low_enough_for_evac(size_t live_bytes);
-
-  void sort_regions();
-
-  // Determine whether to add the given region to the CSet chooser or
-  // not. Currently, we skip pinned regions and regions whose live
-  // bytes are over the threshold. Humongous regions may be reclaimed during cleanup.
-  // Regions also need a complete remembered set to be a candidate.
-  bool should_add(HeapRegion* hr) const;
-
-  // Returns the number candidate old regions added
-  uint length() { return _end; }
-
-  // Serial version.
-  void add_region(HeapRegion *hr);
-
-  // Must be called before calls to claim_array_chunk().
-  // n_regions is the number of regions, chunk_size the chunk size.
-  void prepare_for_par_region_addition(uint n_threads, uint n_regions, uint chunk_size);
-  // Returns the first index in a contiguous chunk of chunk_size indexes
-  // that the calling thread has reserved.  These must be set by the
-  // calling thread using set_region() (to NULL if necessary).
-  uint claim_array_chunk(uint chunk_size);
-  // Set the marked array entry at index to hr.  Careful to claim the index
-  // first if in parallel.
-  void set_region(uint index, HeapRegion* hr);
-  // Atomically increment the number of added regions by region_num
-  // and the amount of reclaimable bytes by reclaimable_bytes.
-  void update_totals(uint region_num, size_t reclaimable_bytes);
-
-  // Iterate over all collection set candidate regions.
-  void iterate(HeapRegionClosure* cl);
-
-  void clear();
-
-  void rebuild(WorkGang* workers, uint n_regions);
-
-  // Return the number of candidate regions that remain to be collected.
-  uint remaining_regions() { return _end - _front; }
-
-  // Determine whether the CSet chooser has more candidate regions or not.
-  bool is_empty() { return remaining_regions() == 0; }
-
-  // Return the reclaimable bytes that remain to be collected on
-  // all the candidate regions in the CSet chooser.
-  size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
-
-  // Returns true if the used portion of "_regions" is properly
-  // sorted, otherwise asserts false.
-  void verify() PRODUCT_RETURN;
-};
-
-class CSetChooserParUpdater : public StackObj {
-private:
-  CollectionSetChooser* _chooser;
-  bool _parallel;
-  uint _chunk_size;
-  uint _cur_chunk_idx;
-  uint _cur_chunk_end;
-  uint _regions_added;
-  size_t _reclaimable_bytes_added;
-
-public:
-  CSetChooserParUpdater(CollectionSetChooser* chooser,
-                        bool parallel, uint chunk_size) :
-    _chooser(chooser), _parallel(parallel), _chunk_size(chunk_size),
-    _cur_chunk_idx(0), _cur_chunk_end(0),
-    _regions_added(0), _reclaimable_bytes_added(0) { }
-
-  ~CSetChooserParUpdater() {
-    if (_parallel && _regions_added > 0) {
-      _chooser->update_totals(_regions_added, _reclaimable_bytes_added);
-    }
-  }
-
-  void add_region(HeapRegion* hr) {
-    if (_parallel) {
-      if (_cur_chunk_idx == _cur_chunk_end) {
-        _cur_chunk_idx = _chooser->claim_array_chunk(_chunk_size);
-        _cur_chunk_end = _cur_chunk_idx + _chunk_size;
-      }
-      assert(_cur_chunk_idx < _cur_chunk_end, "invariant");
-      _chooser->set_region(_cur_chunk_idx, hr);
-      _cur_chunk_idx += 1;
-    } else {
-      _chooser->add_region(hr);
-    }
-    _regions_added += 1;
-    _reclaimable_bytes_added += hr->reclaimable_bytes();
-  }
-
-  bool should_add(HeapRegion* hr) { return _chooser->should_add(hr); }
-};
-
-#endif // SHARE_GC_G1_COLLECTIONSETCHOOSER_HPP
--- a/src/hotspot/share/gc/g1/dirtyCardQueue.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 2001, 2019, 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.
- *
- */
-
-#include "precompiled.hpp"
-#include "gc/g1/dirtyCardQueue.hpp"
-#include "gc/g1/g1CollectedHeap.inline.hpp"
-#include "gc/g1/g1FreeIdSet.hpp"
-#include "gc/g1/g1RemSet.hpp"
-#include "gc/g1/g1ThreadLocalData.hpp"
-#include "gc/g1/heapRegionRemSet.hpp"
-#include "gc/shared/suspendibleThreadSet.hpp"
-#include "gc/shared/workgroup.hpp"
-#include "runtime/atomic.hpp"
-#include "runtime/flags/flagSetting.hpp"
-#include "runtime/mutexLocker.hpp"
-#include "runtime/safepoint.hpp"
-#include "runtime/thread.inline.hpp"
-#include "runtime/threadSMR.hpp"
-
-// Closure used for updating remembered sets and recording references that
-// point into the collection set while the mutator is running.
-// Assumed to be only executed concurrently with the mutator. Yields via
-// SuspendibleThreadSet after every card.
-class G1RefineCardConcurrentlyClosure: public CardTableEntryClosure {
-public:
-  bool do_card_ptr(jbyte* card_ptr, uint worker_i) {
-    G1CollectedHeap::heap()->g1_rem_set()->refine_card_concurrently(card_ptr, worker_i);
-
-    if (SuspendibleThreadSet::should_yield()) {
-      // Caller will actually yield.
-      return false;
-    }
-    // Otherwise, we finished successfully; return true.
-    return true;
-  }
-};
-
-DirtyCardQueue::DirtyCardQueue(DirtyCardQueueSet* qset, bool permanent) :
-  // Dirty card queues are always active, so we create them with their
-  // active field set to true.
-  PtrQueue(qset, permanent, true /* active */)
-{ }
-
-DirtyCardQueue::~DirtyCardQueue() {
-  if (!is_permanent()) {
-    flush();
-  }
-}
-
-DirtyCardQueueSet::DirtyCardQueueSet(bool notify_when_complete) :
-  PtrQueueSet(notify_when_complete),
-  _shared_dirty_card_queue(this, true /* permanent */),
-  _free_ids(NULL),
-  _processed_buffers_mut(0),
-  _processed_buffers_rs_thread(0),
-  _cur_par_buffer_node(NULL)
-{
-  _all_active = true;
-}
-
-DirtyCardQueueSet::~DirtyCardQueueSet() {
-  delete _free_ids;
-}
-
-// Determines how many mutator threads can process the buffers in parallel.
-uint DirtyCardQueueSet::num_par_ids() {
-  return (uint)os::initial_active_processor_count();
-}
-
-void DirtyCardQueueSet::initialize(Monitor* cbl_mon,
-                                   BufferNode::Allocator* allocator,
-                                   Mutex* lock,
-                                   bool init_free_ids) {
-  PtrQueueSet::initialize(cbl_mon, allocator);
-  _shared_dirty_card_queue.set_lock(lock);
-  if (init_free_ids) {
-    _free_ids = new G1FreeIdSet(0, num_par_ids());
-  }
-}
-
-void DirtyCardQueueSet::handle_zero_index_for_thread(JavaThread* t) {
-  G1ThreadLocalData::dirty_card_queue(t).handle_zero_index();
-}
-
-bool DirtyCardQueueSet::apply_closure_to_buffer(CardTableEntryClosure* cl,
-                                                BufferNode* node,
-                                                bool consume,
-                                                uint worker_i) {
-  if (cl == NULL) return true;
-  bool result = true;
-  void** buf = BufferNode::make_buffer_from_node(node);
-  size_t i = node->index();
-  size_t limit = buffer_size();
-  for ( ; i < limit; ++i) {
-    jbyte* card_ptr = static_cast<jbyte*>(buf[i]);
-    assert(card_ptr != NULL, "invariant");
-    if (!cl->do_card_ptr(card_ptr, worker_i)) {
-      result = false;           // Incomplete processing.
-      break;
-    }
-  }
-  if (consume) {
-    assert(i <= buffer_size(), "invariant");
-    node->set_index(i);
-  }
-  return result;
-}
-
-#ifndef ASSERT
-#define assert_fully_consumed(node, buffer_size)
-#else
-#define assert_fully_consumed(node, buffer_size)                \
-  do {                                                          \
-    size_t _afc_index = (node)->index();                        \
-    size_t _afc_size = (buffer_size);                           \
-    assert(_afc_index == _afc_size,                             \
-           "Buffer was not fully consumed as claimed: index: "  \
-           SIZE_FORMAT ", size: " SIZE_FORMAT,                  \
-            _afc_index, _afc_size);                             \
-  } while (0)
-#endif // ASSERT
-
-bool DirtyCardQueueSet::mut_process_buffer(BufferNode* node) {
-  guarantee(_free_ids != NULL, "must be");
-
-  uint worker_i = _free_ids->claim_par_id(); // temporarily claim an id
-  G1RefineCardConcurrentlyClosure cl;
-  bool result = apply_closure_to_buffer(&cl, node, true, worker_i);
-  _free_ids->release_par_id(worker_i); // release the id
-
-  if (result) {
-    assert_fully_consumed(node, buffer_size());
-    Atomic::inc(&_processed_buffers_mut);
-  }
-  return result;
-}
-
-bool DirtyCardQueueSet::refine_completed_buffer_concurrently(uint worker_i, size_t stop_at) {
-  G1RefineCardConcurrentlyClosure cl;
-  return apply_closure_to_completed_buffer(&cl, worker_i, stop_at, false);
-}
-
-bool DirtyCardQueueSet::apply_closure_during_gc(CardTableEntryClosure* cl, uint worker_i) {
-  assert_at_safepoint();
-  return apply_closure_to_completed_buffer(cl, worker_i, 0, true);
-}
-
-bool DirtyCardQueueSet::apply_closure_to_completed_buffer(CardTableEntryClosure* cl,
-                                                          uint worker_i,
-                                                          size_t stop_at,
-                                                          bool during_pause) {
-  assert(!during_pause || stop_at == 0, "Should not leave any completed buffers during a pause");
-  BufferNode* nd = get_completed_buffer(stop_at);
-  if (nd == NULL) {
-    return false;
-  } else {
-    if (apply_closure_to_buffer(cl, nd, true, worker_i)) {
-      assert_fully_consumed(nd, buffer_size());
-      // Done with fully processed buffer.
-      deallocate_buffer(nd);
-      Atomic::inc(&_processed_buffers_rs_thread);
-    } else {
-      // Return partially processed buffer to the queue.
-      guarantee(!during_pause, "Should never stop early");
-      enqueue_completed_buffer(nd);
-    }
-    return true;
-  }
-}
-
-void DirtyCardQueueSet::par_apply_closure_to_all_completed_buffers(CardTableEntryClosure* cl) {
-  BufferNode* nd = _cur_par_buffer_node;
-  while (nd != NULL) {
-    BufferNode* next = nd->next();
-    BufferNode* actual = Atomic::cmpxchg(next, &_cur_par_buffer_node, nd);
-    if (actual == nd) {
-      bool b = apply_closure_to_buffer(cl, nd, false);
-      guarantee(b, "Should not stop early.");
-      nd = next;
-    } else {
-      nd = actual;
-    }
-  }
-}
-
-void DirtyCardQueueSet::abandon_logs() {
-  assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
-  abandon_completed_buffers();
-  // Since abandon is done only at safepoints, we can safely manipulate
-  // these queues.
-  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
-    G1ThreadLocalData::dirty_card_queue(t).reset();
-  }
-  shared_dirty_card_queue()->reset();
-}
-
-void DirtyCardQueueSet::concatenate_log(DirtyCardQueue& dcq) {
-  if (!dcq.is_empty()) {
-    dcq.flush();
-  }
-}
-
-void DirtyCardQueueSet::concatenate_logs() {
-  // Iterate over all the threads, if we find a partial log add it to
-  // the global list of logs.  Temporarily turn off the limit on the number
-  // of outstanding buffers.
-  assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
-  size_t old_limit = max_completed_buffers();
-  set_max_completed_buffers(MaxCompletedBuffersUnlimited);
-  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
-    concatenate_log(G1ThreadLocalData::dirty_card_queue(t));
-  }
-  concatenate_log(_shared_dirty_card_queue);
-  set_max_completed_buffers(old_limit);
-}
--- a/src/hotspot/share/gc/g1/dirtyCardQueue.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2001, 2019, 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.
- *
- */
-
-#ifndef SHARE_GC_G1_DIRTYCARDQUEUE_HPP
-#define SHARE_GC_G1_DIRTYCARDQUEUE_HPP
-
-#include "gc/shared/ptrQueue.hpp"
-#include "memory/allocation.hpp"
-
-class DirtyCardQueueSet;
-class G1FreeIdSet;
-class JavaThread;
-class Monitor;
-
-// A closure class for processing card table entries.  Note that we don't
-// require these closure objects to be stack-allocated.
-class CardTableEntryClosure: public CHeapObj<mtGC> {
-public:
-  // Process the card whose card table entry is "card_ptr".  If returns
-  // "false", terminate the iteration early.
-  virtual bool do_card_ptr(jbyte* card_ptr, uint worker_i) = 0;
-};
-
-// A ptrQueue whose elements are "oops", pointers to object heads.
-class DirtyCardQueue: public PtrQueue {
-public:
-  DirtyCardQueue(DirtyCardQueueSet* qset, bool permanent = false);
-
-  // Flush before destroying; queue may be used to capture pending work while
-  // doing something else, with auto-flush on completion.
-  ~DirtyCardQueue();
-
-  // Process queue entries and release resources.
-  void flush() { flush_impl(); }
-
-  // Compiler support.
-  static ByteSize byte_offset_of_index() {
-    return PtrQueue::byte_offset_of_index<DirtyCardQueue>();
-  }
-  using PtrQueue::byte_width_of_index;
-
-  static ByteSize byte_offset_of_buf() {
-    return PtrQueue::byte_offset_of_buf<DirtyCardQueue>();
-  }
-  using PtrQueue::byte_width_of_buf;
-
-};
-
-
-
-class DirtyCardQueueSet: public PtrQueueSet {
-  DirtyCardQueue _shared_dirty_card_queue;
-
-  // Apply the closure to the elements of "node" from it's index to
-  // buffer_size.  If all closure applications return true, then
-  // returns true.  Stops processing after the first closure
-  // application that returns false, and returns false from this
-  // function.  If "consume" is true, the node's index is updated to
-  // exclude the processed elements, e.g. up to the element for which
-  // the closure returned false.
-  bool apply_closure_to_buffer(CardTableEntryClosure* cl,
-                               BufferNode* node,
-                               bool consume,
-                               uint worker_i = 0);
-
-  // If there are more than stop_at completed buffers, pop one, apply
-  // the specified closure to its active elements, and return true.
-  // Otherwise return false.
-  //
-  // A completely processed buffer is freed.  However, if a closure
-  // invocation returns false, processing is stopped and the partially
-  // processed buffer (with its index updated to exclude the processed
-  // elements, e.g. up to the element for which the closure returned
-  // false) is returned to the completed buffer set.
-  //
-  // If during_pause is true, stop_at must be zero, and the closure
-  // must never return false.
-  bool apply_closure_to_completed_buffer(CardTableEntryClosure* cl,
-                                         uint worker_i,
-                                         size_t stop_at,
-                                         bool during_pause);
-
-  bool mut_process_buffer(BufferNode* node);
-
-  G1FreeIdSet* _free_ids;
-
-  // The number of completed buffers processed by mutator and rs thread,
-  // respectively.
-  jint _processed_buffers_mut;
-  jint _processed_buffers_rs_thread;
-
-  // Current buffer node used for parallel iteration.
-  BufferNode* volatile _cur_par_buffer_node;
-
-  void concatenate_log(DirtyCardQueue& dcq);
-
-public:
-  DirtyCardQueueSet(bool notify_when_complete = true);
-  ~DirtyCardQueueSet();
-
-  void initialize(Monitor* cbl_mon,
-                  BufferNode::Allocator* allocator,
-                  Mutex* lock,
-                  bool init_free_ids = false);
-
-  // The number of parallel ids that can be claimed to allow collector or
-  // mutator threads to do card-processing work.
-  static uint num_par_ids();
-
-  static void handle_zero_index_for_thread(JavaThread* t);
-
-  // Apply G1RefineCardConcurrentlyClosure to completed buffers until there are stop_at
-  // completed buffers remaining.
-  bool refine_completed_buffer_concurrently(uint worker_i, size_t stop_at);
-
-  // Apply the given closure to all completed buffers. The given closure's do_card_ptr
-  // must never return false. Must only be called during GC.
-  bool apply_closure_during_gc(CardTableEntryClosure* cl, uint worker_i);
-
-  void reset_for_par_iteration() { _cur_par_buffer_node = completed_buffers_head(); }
-  // Applies the current closure to all completed buffers, non-consumptively.
-  // Can be used in parallel, all callers using the iteration state initialized
-  // by reset_for_par_iteration.
-  void par_apply_closure_to_all_completed_buffers(CardTableEntryClosure* cl);
-
-  DirtyCardQueue* shared_dirty_card_queue() {
-    return &_shared_dirty_card_queue;
-  }
-
-  // If a full collection is happening, reset partial logs, and ignore
-  // completed ones: the full collection will make them all irrelevant.
-  void abandon_logs();
-
-  // If any threads have partial logs, add them to the global list of logs.
-  void concatenate_logs();
-
-  jint processed_buffers_mut() {
-    return _processed_buffers_mut;
-  }
-  jint processed_buffers_rs_thread() {
-    return _processed_buffers_rs_thread;
-  }
-
-};
-
-#endif // SHARE_GC_G1_DIRTYCARDQUEUE_HPP
--- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -25,11 +25,10 @@
 #ifndef SHARE_GC_G1_G1BARRIERSET_HPP
 #define SHARE_GC_G1_G1BARRIERSET_HPP
 
-#include "gc/g1/dirtyCardQueue.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1SATBMarkQueueSet.hpp"
 #include "gc/shared/cardTableBarrierSet.hpp"
 
-class DirtyCardQueueSet;
 class CardTable;
 class G1CardTable;
 
@@ -42,7 +41,7 @@
   BufferNode::Allocator _satb_mark_queue_buffer_allocator;
   BufferNode::Allocator _dirty_card_queue_buffer_allocator;
   G1SATBMarkQueueSet _satb_mark_queue_set;
-  DirtyCardQueueSet _dirty_card_queue_set;
+  G1DirtyCardQueueSet _dirty_card_queue_set;
 
   static G1BarrierSet* g1_barrier_set() {
     return barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set());
@@ -88,7 +87,7 @@
     return g1_barrier_set()->_satb_mark_queue_set;
   }
 
-  static DirtyCardQueueSet& dirty_card_queue_set() {
+  static G1DirtyCardQueueSet& dirty_card_queue_set() {
     return g1_barrier_set()->_dirty_card_queue_set;
   }
 
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -37,6 +37,7 @@
 #include "gc/g1/g1ConcurrentRefine.hpp"
 #include "gc/g1/g1ConcurrentRefineThread.hpp"
 #include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1EvacStats.inline.hpp"
 #include "gc/g1/g1FullCollector.hpp"
 #include "gc/g1/g1GCPhaseTimes.hpp"
@@ -107,7 +108,7 @@
 // apply to TLAB allocation, which is not part of this interface: it
 // is done by clients of this interface.)
 
-class RedirtyLoggedCardTableEntryClosure : public CardTableEntryClosure {
+class RedirtyLoggedCardTableEntryClosure : public G1CardTableEntryClosure {
  private:
   size_t _num_dirtied;
   G1CollectedHeap* _g1h;
@@ -124,7 +125,7 @@
   }
 
  public:
-  RedirtyLoggedCardTableEntryClosure(G1CollectedHeap* g1h) : CardTableEntryClosure(),
+  RedirtyLoggedCardTableEntryClosure(G1CollectedHeap* g1h) : G1CardTableEntryClosure(),
     _num_dirtied(0), _g1h(g1h), _g1_ct(g1h->card_table()) { }
 
   bool do_card_ptr(jbyte* card_ptr, uint worker_i) {
@@ -1811,7 +1812,7 @@
   }
 
   {
-    DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+    G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
     dcqs.set_process_completed_buffers_threshold(concurrent_refine()->yellow_zone());
     dcqs.set_max_completed_buffers(concurrent_refine()->red_zone());
   }
@@ -1954,12 +1955,12 @@
   return _hrm->total_free_bytes();
 }
 
-void G1CollectedHeap::iterate_hcc_closure(CardTableEntryClosure* cl, uint worker_i) {
+void G1CollectedHeap::iterate_hcc_closure(G1CardTableEntryClosure* cl, uint worker_i) {
   _hot_card_cache->drain(cl, worker_i);
 }
 
-void G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure* cl, uint worker_i) {
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+void G1CollectedHeap::iterate_dirty_card_closure(G1CardTableEntryClosure* cl, uint worker_i) {
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
   size_t n_completed_buffers = 0;
   while (dcqs.apply_closure_during_gc(cl, worker_i)) {
     n_completed_buffers++;
@@ -2605,10 +2606,10 @@
 size_t G1CollectedHeap::pending_card_num() {
   size_t extra_cards = 0;
   for (JavaThreadIteratorWithHandle jtiwh; JavaThread *curr = jtiwh.next(); ) {
-    DirtyCardQueue& dcq = G1ThreadLocalData::dirty_card_queue(curr);
+    G1DirtyCardQueue& dcq = G1ThreadLocalData::dirty_card_queue(curr);
     extra_cards += dcq.size();
   }
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
   size_t buffer_size = dcqs.buffer_size();
   size_t buffer_num = dcqs.completed_buffers_num();
 
@@ -2630,7 +2631,7 @@
   size_t _total_humongous;
   size_t _candidate_humongous;
 
-  DirtyCardQueue _dcq;
+  G1DirtyCardQueue _dcq;
 
   bool humongous_region_is_candidate(G1CollectedHeap* g1h, HeapRegion* region) const {
     assert(region->is_starts_humongous(), "Must start a humongous object");
@@ -3410,10 +3411,10 @@
 
 class G1RedirtyLoggedCardsTask : public AbstractGangTask {
  private:
-  DirtyCardQueueSet* _queue;
+  G1DirtyCardQueueSet* _queue;
   G1CollectedHeap* _g1h;
  public:
-  G1RedirtyLoggedCardsTask(DirtyCardQueueSet* queue, G1CollectedHeap* g1h) : AbstractGangTask("Redirty Cards"),
+  G1RedirtyLoggedCardsTask(G1DirtyCardQueueSet* queue, G1CollectedHeap* g1h) : AbstractGangTask("Redirty Cards"),
     _queue(queue), _g1h(g1h) { }
 
   virtual void work(uint worker_id) {
@@ -3434,7 +3435,7 @@
   dirty_card_queue_set().reset_for_par_iteration();
   workers()->run_task(&redirty_task);
 
-  DirtyCardQueueSet& dcq = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcq = G1BarrierSet::dirty_card_queue_set();
   dcq.merge_bufferlists(&dirty_card_queue_set());
   assert(dirty_card_queue_set().completed_buffers_num() == 0, "All should be consumed");
 
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -31,6 +31,7 @@
 #include "gc/g1/g1CollectionSet.hpp"
 #include "gc/g1/g1CollectorState.hpp"
 #include "gc/g1/g1ConcurrentMark.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1EdenRegions.hpp"
 #include "gc/g1/g1EvacFailure.hpp"
 #include "gc/g1/g1EvacStats.hpp"
@@ -758,7 +759,7 @@
 
   // A set of cards that cover the objects for which the Rsets should be updated
   // concurrently after the collection.
-  DirtyCardQueueSet _dirty_card_queue_set;
+  G1DirtyCardQueueSet _dirty_card_queue_set;
 
   // After a collection pause, convert the regions in the collection set into free
   // regions.
@@ -918,7 +919,7 @@
   uint num_task_queues() const;
 
   // A set of cards where updates happened during the GC
-  DirtyCardQueueSet& dirty_card_queue_set() { return _dirty_card_queue_set; }
+  G1DirtyCardQueueSet& dirty_card_queue_set() { return _dirty_card_queue_set; }
 
   // Create a G1CollectedHeap with the specified policy.
   // Must call the initialize method afterwards.
@@ -983,10 +984,10 @@
   void scrub_rem_set();
 
   // Apply the given closure on all cards in the Hot Card Cache, emptying it.
-  void iterate_hcc_closure(CardTableEntryClosure* cl, uint worker_i);
+  void iterate_hcc_closure(G1CardTableEntryClosure* cl, uint worker_i);
 
   // Apply the given closure on all cards in the Dirty Card Queue Set, emptying it.
-  void iterate_dirty_card_closure(CardTableEntryClosure* cl, uint worker_i);
+  void iterate_dirty_card_closure(G1CardTableEntryClosure* cl, uint worker_i);
 
   // The shared block offset table array.
   G1BlockOffsetTable* bot() const { return _bot; }
--- a/src/hotspot/share/gc/g1/g1CollectionSet.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,7 @@
 #include "precompiled.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1CollectionSet.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
 #include "gc/g1/g1CollectorState.hpp"
 #include "gc/g1/g1ParScanThreadState.hpp"
 #include "gc/g1/g1Policy.hpp"
@@ -44,10 +45,6 @@
   return _policy->phase_times();
 }
 
-CollectionSetChooser* G1CollectionSet::cset_chooser() {
-  return _cset_chooser;
-}
-
 double G1CollectionSet::predict_region_elapsed_time_ms(HeapRegion* hr) {
   return _policy->predict_region_elapsed_time_ms(hr, collector_state()->in_young_only_phase());
 }
@@ -55,7 +52,7 @@
 G1CollectionSet::G1CollectionSet(G1CollectedHeap* g1h, G1Policy* policy) :
   _g1h(g1h),
   _policy(policy),
-  _cset_chooser(new CollectionSetChooser()),
+  _candidates(NULL),
   _eden_region_length(0),
   _survivor_region_length(0),
   _old_region_length(0),
@@ -80,7 +77,7 @@
     FREE_C_HEAP_ARRAY(uint, _collection_set_regions);
   }
   free_optional_regions();
-  delete _cset_chooser;
+  clear_candidates();
 }
 
 void G1CollectionSet::init_region_lengths(uint eden_cset_region_length,
@@ -120,6 +117,11 @@
   }
 }
 
+void G1CollectionSet::clear_candidates() {
+  delete _candidates;
+  _candidates = NULL;
+}
+
 void G1CollectionSet::set_recorded_rs_lengths(size_t rs_lengths) {
   _recorded_rs_lengths = rs_lengths;
 }
@@ -439,14 +441,14 @@
 }
 
 void G1CollectionSet::add_as_old(HeapRegion* hr) {
-  cset_chooser()->pop(); // already have region via peek()
+  candidates()->pop_front(); // already have region via peek()
   _g1h->old_set_remove(hr);
   add_old_region(hr);
 }
 
 void G1CollectionSet::add_as_optional(HeapRegion* hr) {
   assert(_optional_regions != NULL, "Must not be called before array is allocated");
-  cset_chooser()->pop(); // already have region via peek()
+  candidates()->pop_front(); // already have region via peek()
   _g1h->old_set_remove(hr);
   add_optional_region(hr);
 }
@@ -480,7 +482,7 @@
   uint expensive_region_num = 0;
 
   if (collector_state()->in_mixed_phase()) {
-    cset_chooser()->verify();
+    candidates()->verify();
     const uint min_old_cset_length = _policy->calc_min_old_cset_length();
     const uint max_old_cset_length = MAX2(min_old_cset_length, _policy->calc_max_old_cset_length());
     bool check_time_remaining = _policy->adaptive_young_list_length();
@@ -490,7 +492,7 @@
                               "time remaining %1.2fms, optional threshold %1.2fms",
                               min_old_cset_length, max_old_cset_length, time_remaining_ms, optional_threshold_ms);
 
-    HeapRegion* hr = cset_chooser()->peek();
+    HeapRegion* hr = candidates()->peek_front();
     while (hr != NULL) {
       if (old_region_length() + optional_region_length() >= max_old_cset_length) {
         // Added maximum number of old regions to the CSet.
@@ -502,7 +504,7 @@
 
       // Stop adding regions if the remaining reclaimable space is
       // not above G1HeapWastePercent.
-      size_t reclaimable_bytes = cset_chooser()->remaining_reclaimable_bytes();
+      size_t reclaimable_bytes = candidates()->remaining_reclaimable_bytes();
       double reclaimable_percent = _policy->reclaimable_bytes_percent(reclaimable_bytes);
       double threshold = (double) G1HeapWastePercent;
       if (reclaimable_percent <= threshold) {
@@ -551,13 +553,13 @@
           break;
         }
       }
-      hr = cset_chooser()->peek();
+      hr = candidates()->peek_front();
     }
     if (hr == NULL) {
       log_debug(gc, ergo, cset)("Finish adding old regions to CSet (candidate old regions not available)");
     }
 
-    cset_chooser()->verify();
+    candidates()->verify();
   }
 
   stop_incremental_building();
@@ -630,15 +632,15 @@
 G1OptionalCSet::~G1OptionalCSet() {
   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   while (!is_empty()) {
-    // We want to return regions not evacuated to the
-    // chooser in reverse order to maintain the old order.
+    // We want to return regions not evacuated to the collection set candidates
+    // in reverse order to maintain the old order.
     HeapRegion* hr = _cset->remove_last_optional_region();
     assert(hr != NULL, "Should be valid region left");
     _pset->record_unused_optional_region(hr);
     g1h->old_set_add(hr);
     g1h->clear_in_cset(hr);
     hr->set_index_in_opt_cset(InvalidCSetIndex);
-    _cset->cset_chooser()->push(hr);
+    _cset->candidates()->push_front(hr);
   }
   _cset->free_optional_regions();
 }
--- a/src/hotspot/share/gc/g1/g1CollectionSet.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1CollectionSet.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -25,23 +25,25 @@
 #ifndef SHARE_GC_G1_G1COLLECTIONSET_HPP
 #define SHARE_GC_G1_G1COLLECTIONSET_HPP
 
-#include "gc/g1/collectionSetChooser.hpp"
 #include "utilities/debug.hpp"
 #include "utilities/globalDefinitions.hpp"
 
 class G1CollectedHeap;
+class G1CollectionSetCandidates;
 class G1CollectorState;
 class G1GCPhaseTimes;
 class G1ParScanThreadStateSet;
 class G1Policy;
 class G1SurvivorRegions;
 class HeapRegion;
+class HeapRegionClosure;
 
 class G1CollectionSet {
   G1CollectedHeap* _g1h;
   G1Policy* _policy;
 
-  CollectionSetChooser* _cset_chooser;
+  // All old gen collection set candidate regions for the current mixed gc phase.
+  G1CollectionSetCandidates* _candidates;
 
   uint _eden_region_length;
   uint _survivor_region_length;
@@ -128,7 +130,13 @@
   void initialize_optional(uint max_length);
   void free_optional_regions();
 
-  CollectionSetChooser* cset_chooser();
+  void clear_candidates();
+
+  void set_candidates(G1CollectionSetCandidates* candidates) {
+    assert(_candidates == NULL, "Trying to replace collection set candidates.");
+    _candidates = candidates;
+  }
+  G1CollectionSetCandidates* candidates() { return _candidates; }
 
   void init_region_lengths(uint eden_cset_region_length,
                            uint survivor_cset_region_length);
@@ -253,8 +261,8 @@
     _current_limit(0),
     _prepare_failed(false),
     _evacuation_failed(false) { }
-  // The destructor returns regions to the cset-chooser and
-  // frees the optional structure in the cset.
+  // The destructor returns regions to the collection set candidates set and
+  // frees the optional structure in the collection set.
   ~G1OptionalCSet();
 
   uint current_index() { return _current_index; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
+#include "gc/g1/heapRegion.inline.hpp"
+
+HeapRegion* G1CollectionSetCandidates::pop_front() {
+  assert(_front_idx < _num_regions, "pre-condition");
+  HeapRegion* hr = _regions[_front_idx];
+  assert(hr != NULL, "pre-condition");
+  _regions[_front_idx] = NULL;
+  assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
+         "Remaining reclaimable bytes inconsistent "
+         "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
+         hr->reclaimable_bytes(), _remaining_reclaimable_bytes);
+  _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
+  _front_idx++;
+  return hr;
+}
+
+void G1CollectionSetCandidates::push_front(HeapRegion* hr) {
+  assert(hr != NULL, "Can't put back a NULL region");
+  assert(_front_idx >= 1, "Too many regions have been put back.");
+  _front_idx--;
+  _regions[_front_idx] = hr;
+  _remaining_reclaimable_bytes += hr->reclaimable_bytes();
+}
+
+void G1CollectionSetCandidates::iterate(HeapRegionClosure* cl) {
+  for (uint i = _front_idx; i < _num_regions; i++) {
+    HeapRegion* r = _regions[i];
+    if (cl->do_heap_region(r)) {
+      cl->set_incomplete();
+      break;
+    }
+  }
+}
+
+#ifndef PRODUCT
+void G1CollectionSetCandidates::verify() const {
+  guarantee(_front_idx <= _num_regions, "Index: %u Num_regions: %u", _front_idx, _num_regions);
+  uint idx = 0;
+  size_t sum_of_reclaimable_bytes = 0;
+  while (idx < _front_idx) {
+    guarantee(_regions[idx] == NULL, "All entries before _front_idx %u should be NULL, but %u is not",
+              _front_idx, idx);
+    idx++;
+  }
+  HeapRegion *prev = NULL;
+  for (; idx < _num_regions; idx++) {
+    HeapRegion *cur = _regions[idx];
+    guarantee(cur != NULL, "Regions after _front_idx %u cannot be NULL but %u is", _front_idx, idx);
+    guarantee(G1CollectionSetChooser::should_add(cur), "Region %u should be eligible for addition.", cur->hrm_index());
+    if (prev != NULL) {
+      guarantee(prev->gc_efficiency() >= cur->gc_efficiency(),
+                "GC efficiency for region %u: %1.4f smaller than for region %u: %1.4f",
+                prev->hrm_index(), prev->gc_efficiency(), cur->hrm_index(), cur->gc_efficiency());
+    }
+    sum_of_reclaimable_bytes += cur->reclaimable_bytes();
+    prev = cur;
+  }
+  guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
+            "Inconsistent remaining_reclaimable bytes, remaining " SIZE_FORMAT " calculated " SIZE_FORMAT,
+            _remaining_reclaimable_bytes, sum_of_reclaimable_bytes);
+}
+#endif // !PRODUCT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2019, 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP
+#define SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP
+
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/shared/workgroup.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/globals.hpp"
+
+class HeapRegion;
+class HeapRegionClosure;
+
+// Set of collection set candidates, i.e. all old gen regions we consider worth
+// collecting in the remainder of the current mixed phase. Regions are sorted by decreasing
+// gc efficiency.
+// Maintains a cursor into the list that specifies the next collection set candidate
+// to put into the current collection set.
+class G1CollectionSetCandidates : public CHeapObj<mtGC> {
+  HeapRegion** _regions;
+  uint _num_regions; // Total number of regions in the collection set candidate set.
+
+  // The sum of bytes that can be reclaimed in the remaining set of collection
+  // set candidates.
+  size_t _remaining_reclaimable_bytes;
+  // The index of the next candidate old region to be considered for
+  // addition to the current collection set.
+  uint _front_idx;
+
+public:
+  G1CollectionSetCandidates(HeapRegion** regions, uint num_regions, size_t remaining_reclaimable_bytes) :
+    _regions(regions),
+    _num_regions(num_regions),
+    _remaining_reclaimable_bytes(remaining_reclaimable_bytes),
+    _front_idx(0) { }
+
+  ~G1CollectionSetCandidates() {
+    FREE_C_HEAP_ARRAY(HeapRegion*, _regions);
+  }
+
+  // Returns the total number of collection set candidate old regions added.
+  uint num_regions() { return _num_regions; }
+
+  // Return the candidate region at the cursor position to be considered for collection without
+  // removing it.
+  HeapRegion* peek_front() {
+    HeapRegion* res = NULL;
+    if (_front_idx < _num_regions) {
+      res = _regions[_front_idx];
+      assert(res != NULL, "Unexpected NULL HeapRegion at index %u", _front_idx);
+    }
+    return res;
+  }
+
+  // Remove the given region from the candidates set and move the cursor to the next one.
+  HeapRegion* pop_front();
+
+  // Add the given HeapRegion to the front of the collection set candidate set again.
+  void push_front(HeapRegion* hr);
+
+  // Iterate over all remaining collection set candidate regions.
+  void iterate(HeapRegionClosure* cl);
+
+  // Return the number of candidate regions remaining.
+  uint num_remaining() { return _num_regions - _front_idx; }
+
+  bool is_empty() { return num_remaining() == 0; }
+
+  // Return the amount of reclaimable bytes that may be collected by the remaining
+  // candidate regions.
+  size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
+
+  void verify() const PRODUCT_RETURN;
+};
+
+#endif /* SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,270 @@
+/*
+ * Copyright (c) 2001, 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1CollectedHeap.inline.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
+#include "gc/g1/heapRegionRemSet.hpp"
+#include "gc/shared/space.inline.hpp"
+#include "runtime/atomic.hpp"
+#include "utilities/quickSort.hpp"
+
+// Order regions according to GC efficiency. This will cause regions with a lot
+// of live objects and large remembered sets to end up at the end of the array.
+// Given that we might skip collecting the last few old regions, if after a few
+// mixed GCs the remaining have reclaimable bytes under a certain threshold, the
+// hope is that the ones we'll skip are ones with both large remembered sets and
+// a lot of live objects, not the ones with just a lot of live objects if we
+// ordered according to the amount of reclaimable bytes per region.
+static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
+  // Make sure that NULL entries are moved to the end.
+  if (hr1 == NULL) {
+    if (hr2 == NULL) {
+      return 0;
+    } else {
+      return 1;
+    }
+  } else if (hr2 == NULL) {
+    return -1;
+  }
+
+  double gc_eff1 = hr1->gc_efficiency();
+  double gc_eff2 = hr2->gc_efficiency();
+
+  if (gc_eff1 > gc_eff2) {
+    return -1;
+  } if (gc_eff1 < gc_eff2) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+// Determine collection set candidates: For all regions determine whether they
+// should be a collection set candidates, calculate their efficiency, sort and
+// return them as G1CollectionSetCandidates instance.
+// Threads calculate the GC efficiency of the regions they get to process, and
+// put them into some work area unsorted. At the end the array is sorted and
+// copied into the G1CollectionSetCandidates instance; the caller will be the new
+// owner of this object.
+class G1BuildCandidateRegionsTask : public AbstractGangTask {
+
+  // Work area for building the set of collection set candidates. Contains references
+  // to heap regions with their GC efficiencies calculated. To reduce contention
+  // on claiming array elements, worker threads claim parts of this array in chunks;
+  // Array elements may be NULL as threads might not get enough regions to fill
+  // up their chunks completely.
+  // Final sorting will remove them.
+  class G1BuildCandidateArray : public StackObj {
+
+    uint const _max_size;
+    uint const _chunk_size;
+
+    HeapRegion** _data;
+
+    uint volatile _cur_claim_idx;
+
+    // Calculates the maximum array size that will be used.
+    static uint required_array_size(uint num_regions, uint chunk_size, uint num_workers) {
+      uint const max_waste = num_workers * chunk_size;
+      // The array should be aligned with respect to chunk_size.
+      uint const aligned_num_regions = ((num_regions + chunk_size - 1) / chunk_size) * chunk_size;
+
+      return aligned_num_regions + max_waste;
+    }
+
+  public:
+    G1BuildCandidateArray(uint max_num_regions, uint chunk_size, uint num_workers) :
+      _max_size(required_array_size(max_num_regions, chunk_size, num_workers)),
+      _chunk_size(chunk_size),
+      _data(NEW_C_HEAP_ARRAY(HeapRegion*, _max_size, mtGC)),
+      _cur_claim_idx(0) {
+      for (uint i = 0; i < _max_size; i++) {
+        _data[i] = NULL;
+      }
+    }
+
+    ~G1BuildCandidateArray() {
+      FREE_C_HEAP_ARRAY(HeapRegion*, _data);
+    }
+
+    // Claim a new chunk, returning its bounds [from, to[.
+    void claim_chunk(uint& from, uint& to) {
+      uint result = Atomic::add(_chunk_size, &_cur_claim_idx);
+      assert(_max_size > result - 1,
+             "Array too small, is %u should be %u with chunk size %u.",
+             _max_size, result, _chunk_size);
+      from = result - _chunk_size;
+      to = result;
+    }
+
+    // Set element in array.
+    void set(uint idx, HeapRegion* hr) {
+      assert(idx < _max_size, "Index %u out of bounds %u", idx, _max_size);
+      assert(_data[idx] == NULL, "Value must not have been set.");
+      _data[idx] = hr;
+    }
+
+    void sort_and_copy_into(HeapRegion** dest, uint num_regions) {
+      if (_cur_claim_idx == 0) {
+        return;
+      }
+      for (uint i = _cur_claim_idx; i < _max_size; i++) {
+        assert(_data[i] == NULL, "must be");
+      }
+      QuickSort::sort(_data, _cur_claim_idx, order_regions, true);
+      for (uint i = num_regions; i < _max_size; i++) {
+        assert(_data[i] == NULL, "must be");
+      }
+      for (uint i = 0; i < num_regions; i++) {
+        dest[i] = _data[i];
+      }
+    }
+  };
+
+  // Per-region closure. In addition to determining whether a region should be
+  // added to the candidates, and calculating those regions' gc efficiencies, also
+  // gather additional statistics.
+  class G1BuildCandidateRegionsClosure : public HeapRegionClosure {
+    G1BuildCandidateArray* _array;
+
+    uint _cur_chunk_idx;
+    uint _cur_chunk_end;
+
+    uint _regions_added;
+    size_t _reclaimable_bytes_added;
+
+    void add_region(HeapRegion* hr) {
+      if (_cur_chunk_idx == _cur_chunk_end) {
+        _array->claim_chunk(_cur_chunk_idx, _cur_chunk_end);
+      }
+      assert(_cur_chunk_idx < _cur_chunk_end, "Must be");
+
+      hr->calc_gc_efficiency();
+      _array->set(_cur_chunk_idx, hr);
+
+      _cur_chunk_idx++;
+
+      _regions_added++;
+      _reclaimable_bytes_added += hr->reclaimable_bytes();
+    }
+
+    bool should_add(HeapRegion* hr) { return G1CollectionSetChooser::should_add(hr); }
+
+  public:
+    G1BuildCandidateRegionsClosure(G1BuildCandidateArray* array) :
+      _array(array),
+      _cur_chunk_idx(0),
+      _cur_chunk_end(0),
+      _regions_added(0),
+      _reclaimable_bytes_added(0) { }
+
+    bool do_heap_region(HeapRegion* r) {
+      // We will skip any region that's currently used as an old GC
+      // alloc region (we should not consider those for collection
+      // before we fill them up).
+      if (should_add(r) && !G1CollectedHeap::heap()->is_old_gc_alloc_region(r)) {
+        add_region(r);
+      } else if (r->is_old()) {
+        // Keep remembered sets for humongous regions, otherwise clean out remembered
+        // sets for old regions.
+        r->rem_set()->clear(true /* only_cardset */);
+      } else {
+        assert(r->is_archive() || !r->is_old() || !r->rem_set()->is_tracked(),
+               "Missed to clear unused remembered set of region %u (%s) that is %s",
+               r->hrm_index(), r->get_type_str(), r->rem_set()->get_state_str());
+      }
+      return false;
+    }
+
+    uint regions_added() const { return _regions_added; }
+    size_t reclaimable_bytes_added() const { return _reclaimable_bytes_added; }
+  };
+
+  G1CollectedHeap* _g1h;
+  HeapRegionClaimer _hrclaimer;
+
+  uint volatile _num_regions_added;
+  size_t volatile _reclaimable_bytes_added;
+
+  G1BuildCandidateArray _result;
+
+  void update_totals(uint num_regions, size_t reclaimable_bytes) {
+    if (num_regions > 0) {
+      assert(reclaimable_bytes > 0, "invariant");
+      Atomic::add(num_regions, &_num_regions_added);
+      Atomic::add(reclaimable_bytes, &_reclaimable_bytes_added);
+    } else {
+      assert(reclaimable_bytes == 0, "invariant");
+    }
+  }
+
+public:
+  G1BuildCandidateRegionsTask(uint max_num_regions, uint chunk_size, uint num_workers) :
+    AbstractGangTask("G1 Build Candidate Regions"),
+    _g1h(G1CollectedHeap::heap()),
+    _hrclaimer(num_workers),
+    _num_regions_added(0),
+    _reclaimable_bytes_added(0),
+    _result(max_num_regions, chunk_size, num_workers) { }
+
+  void work(uint worker_id) {
+    G1BuildCandidateRegionsClosure cl(&_result);
+    _g1h->heap_region_par_iterate_from_worker_offset(&cl, &_hrclaimer, worker_id);
+    update_totals(cl.regions_added(), cl.reclaimable_bytes_added());
+  }
+
+  G1CollectionSetCandidates* get_sorted_candidates() {
+    HeapRegion** regions = NEW_C_HEAP_ARRAY(HeapRegion*, _num_regions_added, mtGC);
+    _result.sort_and_copy_into(regions, _num_regions_added);
+    return new G1CollectionSetCandidates(regions,
+                                         _num_regions_added,
+                                         _reclaimable_bytes_added);
+  }
+};
+
+uint G1CollectionSetChooser::calculate_work_chunk_size(uint num_workers, uint num_regions) {
+  assert(num_workers > 0, "Active gc workers should be greater than 0");
+  return MAX2(num_regions / num_workers, 1U);
+}
+
+bool G1CollectionSetChooser::should_add(HeapRegion* hr) {
+  return !hr->is_young() &&
+         !hr->is_pinned() &&
+         region_occupancy_low_enough_for_evac(hr->live_bytes()) &&
+         hr->rem_set()->is_complete();
+}
+
+G1CollectionSetCandidates* G1CollectionSetChooser::build(WorkGang* workers, uint max_num_regions) {
+  uint num_workers = workers->active_workers();
+  uint chunk_size = calculate_work_chunk_size(num_workers, max_num_regions);
+
+  G1BuildCandidateRegionsTask cl(max_num_regions, chunk_size, num_workers);
+  workers->run_task(&cl, num_workers);
+
+  G1CollectionSetCandidates* result = cl.get_sorted_candidates();
+  result->verify();
+  return result;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2001, 2019, 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
+#define SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
+
+#include "gc/g1/heapRegion.hpp"
+#include "memory/allocation.hpp"
+#include "runtime/globals.hpp"
+
+class G1CollectionSetCandidates;
+class WorkGang;
+
+// Helper class to calculate collection set candidates, and containing some related
+// methods.
+class G1CollectionSetChooser : public AllStatic {
+  static uint calculate_work_chunk_size(uint num_workers, uint num_regions);
+public:
+
+  static size_t mixed_gc_live_threshold_bytes() {
+    return HeapRegion::GrainBytes * (size_t) G1MixedGCLiveThresholdPercent / 100;
+  }
+
+  static bool region_occupancy_low_enough_for_evac(size_t live_bytes) {
+    return live_bytes < mixed_gc_live_threshold_bytes();
+  }
+
+  // Determine whether to add the given region to the collection set candidates or
+  // not. Currently, we skip pinned regions and regions whose live
+  // bytes are over the threshold. Humongous regions may be reclaimed during cleanup.
+  // Regions also need a complete remembered set to be a candidate.
+  static bool should_add(HeapRegion* hr);
+
+  // Build and return set of collection set candidates sorted by decreasing gc
+  // efficiency.
+  static G1CollectionSetCandidates* build(WorkGang* workers, uint max_num_regions);
+};
+
+#endif // SHARE_GC_G1_G1COLLECTIONSETCHOOSER_HPP
--- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -30,6 +30,7 @@
 #include "gc/g1/g1CollectorState.hpp"
 #include "gc/g1/g1ConcurrentMark.inline.hpp"
 #include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1HeapVerifier.hpp"
 #include "gc/g1/g1OopClosures.inline.hpp"
 #include "gc/g1/g1Policy.hpp"
@@ -372,7 +373,7 @@
 
   // _finger set in set_non_marking_state
 
-  _worker_id_offset(DirtyCardQueueSet::num_par_ids() + G1ConcRefinementThreads),
+  _worker_id_offset(G1DirtyCardQueueSet::num_par_ids() + G1ConcRefinementThreads),
   _max_num_tasks(ParallelGCThreads),
   // _num_active_tasks set in set_non_marking_state()
   // _tasks set inside the constructor
--- a/src/hotspot/share/gc/g1/g1ConcurrentRefine.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ConcurrentRefine.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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,6 +26,7 @@
 #include "gc/g1/g1BarrierSet.hpp"
 #include "gc/g1/g1ConcurrentRefine.hpp"
 #include "gc/g1/g1ConcurrentRefineThread.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "logging/log.hpp"
 #include "memory/allocation.inline.hpp"
 #include "runtime/java.hpp"
@@ -378,7 +379,7 @@
 void G1ConcurrentRefine::adjust(double update_rs_time,
                                 size_t update_rs_processed_buffers,
                                 double goal_ms) {
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
 
   if (G1UseAdaptiveConcRefinement) {
     update_zones(update_rs_time, update_rs_processed_buffers, goal_ms);
@@ -386,7 +387,7 @@
     // Change the barrier params
     if (max_num_threads() == 0) {
       // Disable dcqs notification when there are no threads to notify.
-      dcqs.set_process_completed_buffers_threshold(DirtyCardQueueSet::ProcessCompletedBuffersThresholdNever);
+      dcqs.set_process_completed_buffers_threshold(G1DirtyCardQueueSet::ProcessCompletedBuffersThresholdNever);
     } else {
       // Worker 0 is the primary; wakeup is via dcqs notification.
       STATIC_ASSERT(max_yellow_zone <= INT_MAX);
@@ -417,7 +418,7 @@
 }
 
 uint G1ConcurrentRefine::worker_id_offset() {
-  return DirtyCardQueueSet::num_par_ids();
+  return G1DirtyCardQueueSet::num_par_ids();
 }
 
 void G1ConcurrentRefine::maybe_activate_more_threads(uint worker_id, size_t num_cur_buffers) {
@@ -427,7 +428,7 @@
 }
 
 bool G1ConcurrentRefine::do_refinement_step(uint worker_id) {
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
 
   size_t curr_buffer_num = dcqs.completed_buffers_num();
   // If the number of the buffers falls down into the yellow zone,
--- a/src/hotspot/share/gc/g1/g1ConcurrentRefine.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ConcurrentRefine.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -29,7 +29,6 @@
 #include "utilities/globalDefinitions.hpp"
 
 // Forward decl
-class CardTableEntryClosure;
 class G1ConcurrentRefine;
 class G1ConcurrentRefineThread;
 class outputStream;
--- a/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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,6 +26,7 @@
 #include "gc/g1/g1BarrierSet.hpp"
 #include "gc/g1/g1ConcurrentRefine.hpp"
 #include "gc/g1/g1ConcurrentRefineThread.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/shared/suspendibleThreadSet.hpp"
 #include "logging/log.hpp"
 #include "memory/resourceArea.hpp"
@@ -65,7 +66,7 @@
 }
 
 bool G1ConcurrentRefineThread::is_active() {
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
   return is_primary() ? dcqs.process_completed_buffers() : _active;
 }
 
@@ -74,7 +75,7 @@
   if (!is_primary()) {
     set_active(true);
   } else {
-    DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+    G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
     dcqs.set_process_completed_buffers(true);
   }
   _monitor->notify();
@@ -85,7 +86,7 @@
   if (!is_primary()) {
     set_active(false);
   } else {
-    DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+    G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
     dcqs.set_process_completed_buffers(false);
   }
 }
--- a/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -25,11 +25,9 @@
 #ifndef SHARE_GC_G1_G1CONCURRENTREFINETHREAD_HPP
 #define SHARE_GC_G1_G1CONCURRENTREFINETHREAD_HPP
 
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/shared/concurrentGCThread.hpp"
 
 // Forward Decl.
-class CardTableEntryClosure;
 class G1ConcurrentRefine;
 
 // One or more G1 Concurrent Refinement Threads may be active if concurrent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1DirtyCardQueue.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2001, 2019, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/g1/g1CollectedHeap.inline.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
+#include "gc/g1/g1FreeIdSet.hpp"
+#include "gc/g1/g1RemSet.hpp"
+#include "gc/g1/g1ThreadLocalData.hpp"
+#include "gc/g1/heapRegionRemSet.hpp"
+#include "gc/shared/suspendibleThreadSet.hpp"
+#include "gc/shared/workgroup.hpp"
+#include "runtime/atomic.hpp"
+#include "runtime/flags/flagSetting.hpp"
+#include "runtime/mutexLocker.hpp"
+#include "runtime/safepoint.hpp"
+#include "runtime/thread.inline.hpp"
+#include "runtime/threadSMR.hpp"
+
+// Closure used for updating remembered sets and recording references that
+// point into the collection set while the mutator is running.
+// Assumed to be only executed concurrently with the mutator. Yields via
+// SuspendibleThreadSet after every card.
+class G1RefineCardConcurrentlyClosure: public G1CardTableEntryClosure {
+public:
+  bool do_card_ptr(jbyte* card_ptr, uint worker_i) {
+    G1CollectedHeap::heap()->g1_rem_set()->refine_card_concurrently(card_ptr, worker_i);
+
+    if (SuspendibleThreadSet::should_yield()) {
+      // Caller will actually yield.
+      return false;
+    }
+    // Otherwise, we finished successfully; return true.
+    return true;
+  }
+};
+
+G1DirtyCardQueue::G1DirtyCardQueue(G1DirtyCardQueueSet* qset, bool permanent) :
+  // Dirty card queues are always active, so we create them with their
+  // active field set to true.
+  PtrQueue(qset, permanent, true /* active */)
+{ }
+
+G1DirtyCardQueue::~G1DirtyCardQueue() {
+  if (!is_permanent()) {
+    flush();
+  }
+}
+
+G1DirtyCardQueueSet::G1DirtyCardQueueSet(bool notify_when_complete) :
+  PtrQueueSet(notify_when_complete),
+  _shared_dirty_card_queue(this, true /* permanent */),
+  _free_ids(NULL),
+  _processed_buffers_mut(0),
+  _processed_buffers_rs_thread(0),
+  _cur_par_buffer_node(NULL)
+{
+  _all_active = true;
+}
+
+G1DirtyCardQueueSet::~G1DirtyCardQueueSet() {
+  delete _free_ids;
+}
+
+// Determines how many mutator threads can process the buffers in parallel.
+uint G1DirtyCardQueueSet::num_par_ids() {
+  return (uint)os::initial_active_processor_count();
+}
+
+void G1DirtyCardQueueSet::initialize(Monitor* cbl_mon,
+                                     BufferNode::Allocator* allocator,
+                                     Mutex* lock,
+                                     bool init_free_ids) {
+  PtrQueueSet::initialize(cbl_mon, allocator);
+  _shared_dirty_card_queue.set_lock(lock);
+  if (init_free_ids) {
+    _free_ids = new G1FreeIdSet(0, num_par_ids());
+  }
+}
+
+void G1DirtyCardQueueSet::handle_zero_index_for_thread(JavaThread* t) {
+  G1ThreadLocalData::dirty_card_queue(t).handle_zero_index();
+}
+
+bool G1DirtyCardQueueSet::apply_closure_to_buffer(G1CardTableEntryClosure* cl,
+                                                  BufferNode* node,
+                                                  bool consume,
+                                                  uint worker_i) {
+  if (cl == NULL) return true;
+  bool result = true;
+  void** buf = BufferNode::make_buffer_from_node(node);
+  size_t i = node->index();
+  size_t limit = buffer_size();
+  for ( ; i < limit; ++i) {
+    jbyte* card_ptr = static_cast<jbyte*>(buf[i]);
+    assert(card_ptr != NULL, "invariant");
+    if (!cl->do_card_ptr(card_ptr, worker_i)) {
+      result = false;           // Incomplete processing.
+      break;
+    }
+  }
+  if (consume) {
+    assert(i <= buffer_size(), "invariant");
+    node->set_index(i);
+  }
+  return result;
+}
+
+#ifndef ASSERT
+#define assert_fully_consumed(node, buffer_size)
+#else
+#define assert_fully_consumed(node, buffer_size)                \
+  do {                                                          \
+    size_t _afc_index = (node)->index();                        \
+    size_t _afc_size = (buffer_size);                           \
+    assert(_afc_index == _afc_size,                             \
+           "Buffer was not fully consumed as claimed: index: "  \
+           SIZE_FORMAT ", size: " SIZE_FORMAT,                  \
+            _afc_index, _afc_size);                             \
+  } while (0)
+#endif // ASSERT
+
+bool G1DirtyCardQueueSet::mut_process_buffer(BufferNode* node) {
+  guarantee(_free_ids != NULL, "must be");
+
+  uint worker_i = _free_ids->claim_par_id(); // temporarily claim an id
+  G1RefineCardConcurrentlyClosure cl;
+  bool result = apply_closure_to_buffer(&cl, node, true, worker_i);
+  _free_ids->release_par_id(worker_i); // release the id
+
+  if (result) {
+    assert_fully_consumed(node, buffer_size());
+    Atomic::inc(&_processed_buffers_mut);
+  }
+  return result;
+}
+
+bool G1DirtyCardQueueSet::refine_completed_buffer_concurrently(uint worker_i, size_t stop_at) {
+  G1RefineCardConcurrentlyClosure cl;
+  return apply_closure_to_completed_buffer(&cl, worker_i, stop_at, false);
+}
+
+bool G1DirtyCardQueueSet::apply_closure_during_gc(G1CardTableEntryClosure* cl, uint worker_i) {
+  assert_at_safepoint();
+  return apply_closure_to_completed_buffer(cl, worker_i, 0, true);
+}
+
+bool G1DirtyCardQueueSet::apply_closure_to_completed_buffer(G1CardTableEntryClosure* cl,
+                                                            uint worker_i,
+                                                            size_t stop_at,
+                                                            bool during_pause) {
+  assert(!during_pause || stop_at == 0, "Should not leave any completed buffers during a pause");
+  BufferNode* nd = get_completed_buffer(stop_at);
+  if (nd == NULL) {
+    return false;
+  } else {
+    if (apply_closure_to_buffer(cl, nd, true, worker_i)) {
+      assert_fully_consumed(nd, buffer_size());
+      // Done with fully processed buffer.
+      deallocate_buffer(nd);
+      Atomic::inc(&_processed_buffers_rs_thread);
+    } else {
+      // Return partially processed buffer to the queue.
+      guarantee(!during_pause, "Should never stop early");
+      enqueue_completed_buffer(nd);
+    }
+    return true;
+  }
+}
+
+void G1DirtyCardQueueSet::par_apply_closure_to_all_completed_buffers(G1CardTableEntryClosure* cl) {
+  BufferNode* nd = _cur_par_buffer_node;
+  while (nd != NULL) {
+    BufferNode* next = nd->next();
+    BufferNode* actual = Atomic::cmpxchg(next, &_cur_par_buffer_node, nd);
+    if (actual == nd) {
+      bool b = apply_closure_to_buffer(cl, nd, false);
+      guarantee(b, "Should not stop early.");
+      nd = next;
+    } else {
+      nd = actual;
+    }
+  }
+}
+
+void G1DirtyCardQueueSet::abandon_logs() {
+  assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
+  abandon_completed_buffers();
+  // Since abandon is done only at safepoints, we can safely manipulate
+  // these queues.
+  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
+    G1ThreadLocalData::dirty_card_queue(t).reset();
+  }
+  shared_dirty_card_queue()->reset();
+}
+
+void G1DirtyCardQueueSet::concatenate_log(G1DirtyCardQueue& dcq) {
+  if (!dcq.is_empty()) {
+    dcq.flush();
+  }
+}
+
+void G1DirtyCardQueueSet::concatenate_logs() {
+  // Iterate over all the threads, if we find a partial log add it to
+  // the global list of logs.  Temporarily turn off the limit on the number
+  // of outstanding buffers.
+  assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
+  size_t old_limit = max_completed_buffers();
+  set_max_completed_buffers(MaxCompletedBuffersUnlimited);
+  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
+    concatenate_log(G1ThreadLocalData::dirty_card_queue(t));
+  }
+  concatenate_log(_shared_dirty_card_queue);
+  set_max_completed_buffers(old_limit);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/g1/g1DirtyCardQueue.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2001, 2019, 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.
+ *
+ */
+
+#ifndef SHARE_GC_G1_G1DIRTYCARDQUEUE_HPP
+#define SHARE_GC_G1_G1DIRTYCARDQUEUE_HPP
+
+#include "gc/shared/ptrQueue.hpp"
+#include "memory/allocation.hpp"
+
+class G1DirtyCardQueueSet;
+class G1FreeIdSet;
+class JavaThread;
+class Monitor;
+
+// A closure class for processing card table entries.  Note that we don't
+// require these closure objects to be stack-allocated.
+class G1CardTableEntryClosure: public CHeapObj<mtGC> {
+public:
+  // Process the card whose card table entry is "card_ptr".  If returns
+  // "false", terminate the iteration early.
+  virtual bool do_card_ptr(jbyte* card_ptr, uint worker_i) = 0;
+};
+
+// A ptrQueue whose elements are "oops", pointers to object heads.
+class G1DirtyCardQueue: public PtrQueue {
+public:
+  G1DirtyCardQueue(G1DirtyCardQueueSet* qset, bool permanent = false);
+
+  // Flush before destroying; queue may be used to capture pending work while
+  // doing something else, with auto-flush on completion.
+  ~G1DirtyCardQueue();
+
+  // Process queue entries and release resources.
+  void flush() { flush_impl(); }
+
+  // Compiler support.
+  static ByteSize byte_offset_of_index() {
+    return PtrQueue::byte_offset_of_index<G1DirtyCardQueue>();
+  }
+  using PtrQueue::byte_width_of_index;
+
+  static ByteSize byte_offset_of_buf() {
+    return PtrQueue::byte_offset_of_buf<G1DirtyCardQueue>();
+  }
+  using PtrQueue::byte_width_of_buf;
+
+};
+
+
+
+class G1DirtyCardQueueSet: public PtrQueueSet {
+  G1DirtyCardQueue _shared_dirty_card_queue;
+
+  // Apply the closure to the elements of "node" from it's index to
+  // buffer_size.  If all closure applications return true, then
+  // returns true.  Stops processing after the first closure
+  // application that returns false, and returns false from this
+  // function.  If "consume" is true, the node's index is updated to
+  // exclude the processed elements, e.g. up to the element for which
+  // the closure returned false.
+  bool apply_closure_to_buffer(G1CardTableEntryClosure* cl,
+                               BufferNode* node,
+                               bool consume,
+                               uint worker_i = 0);
+
+  // If there are more than stop_at completed buffers, pop one, apply
+  // the specified closure to its active elements, and return true.
+  // Otherwise return false.
+  //
+  // A completely processed buffer is freed.  However, if a closure
+  // invocation returns false, processing is stopped and the partially
+  // processed buffer (with its index updated to exclude the processed
+  // elements, e.g. up to the element for which the closure returned
+  // false) is returned to the completed buffer set.
+  //
+  // If during_pause is true, stop_at must be zero, and the closure
+  // must never return false.
+  bool apply_closure_to_completed_buffer(G1CardTableEntryClosure* cl,
+                                         uint worker_i,
+                                         size_t stop_at,
+                                         bool during_pause);
+
+  bool mut_process_buffer(BufferNode* node);
+
+  G1FreeIdSet* _free_ids;
+
+  // The number of completed buffers processed by mutator and rs thread,
+  // respectively.
+  jint _processed_buffers_mut;
+  jint _processed_buffers_rs_thread;
+
+  // Current buffer node used for parallel iteration.
+  BufferNode* volatile _cur_par_buffer_node;
+
+  void concatenate_log(G1DirtyCardQueue& dcq);
+
+public:
+  G1DirtyCardQueueSet(bool notify_when_complete = true);
+  ~G1DirtyCardQueueSet();
+
+  void initialize(Monitor* cbl_mon,
+                  BufferNode::Allocator* allocator,
+                  Mutex* lock,
+                  bool init_free_ids = false);
+
+  // The number of parallel ids that can be claimed to allow collector or
+  // mutator threads to do card-processing work.
+  static uint num_par_ids();
+
+  static void handle_zero_index_for_thread(JavaThread* t);
+
+  // Apply G1RefineCardConcurrentlyClosure to completed buffers until there are stop_at
+  // completed buffers remaining.
+  bool refine_completed_buffer_concurrently(uint worker_i, size_t stop_at);
+
+  // Apply the given closure to all completed buffers. The given closure's do_card_ptr
+  // must never return false. Must only be called during GC.
+  bool apply_closure_during_gc(G1CardTableEntryClosure* cl, uint worker_i);
+
+  void reset_for_par_iteration() { _cur_par_buffer_node = completed_buffers_head(); }
+  // Applies the current closure to all completed buffers, non-consumptively.
+  // Can be used in parallel, all callers using the iteration state initialized
+  // by reset_for_par_iteration.
+  void par_apply_closure_to_all_completed_buffers(G1CardTableEntryClosure* cl);
+
+  G1DirtyCardQueue* shared_dirty_card_queue() {
+    return &_shared_dirty_card_queue;
+  }
+
+  // If a full collection is happening, reset partial logs, and ignore
+  // completed ones: the full collection will make them all irrelevant.
+  void abandon_logs();
+
+  // If any threads have partial logs, add them to the global list of logs.
+  void concatenate_logs();
+
+  jint processed_buffers_mut() {
+    return _processed_buffers_mut;
+  }
+  jint processed_buffers_rs_thread() {
+    return _processed_buffers_rs_thread;
+  }
+
+};
+
+#endif // SHARE_GC_G1_G1DIRTYCARDQUEUE_HPP
--- a/src/hotspot/share/gc/g1/g1EvacFailure.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1EvacFailure.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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,10 +23,10 @@
  */
 
 #include "precompiled.hpp"
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1CollectorState.hpp"
 #include "gc/g1/g1ConcurrentMark.inline.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1EvacFailure.hpp"
 #include "gc/g1/g1HeapVerifier.hpp"
 #include "gc/g1/g1OopClosures.inline.hpp"
@@ -41,11 +41,11 @@
 class UpdateRSetDeferred : public BasicOopIterateClosure {
 private:
   G1CollectedHeap* _g1h;
-  DirtyCardQueue* _dcq;
+  G1DirtyCardQueue* _dcq;
   G1CardTable*    _ct;
 
 public:
-  UpdateRSetDeferred(DirtyCardQueue* dcq) :
+  UpdateRSetDeferred(G1DirtyCardQueue* dcq) :
     _g1h(G1CollectedHeap::heap()), _dcq(dcq), _ct(_g1h->card_table()) {}
 
   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
@@ -196,7 +196,7 @@
   uint _worker_id;
   HeapRegionClaimer* _hrclaimer;
 
-  DirtyCardQueue _dcq;
+  G1DirtyCardQueue _dcq;
   UpdateRSetDeferred _update_rset_cl;
 
 public:
--- a/src/hotspot/share/gc/g1/g1HotCardCache.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1HotCardCache.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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,8 @@
  */
 
 #include "precompiled.hpp"
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1HotCardCache.hpp"
 #include "runtime/atomic.hpp"
 
@@ -83,7 +83,7 @@
   return (previous_ptr == current_ptr) ? previous_ptr : card_ptr;
 }
 
-void G1HotCardCache::drain(CardTableEntryClosure* cl, uint worker_i) {
+void G1HotCardCache::drain(G1CardTableEntryClosure* cl, uint worker_i) {
   assert(default_use_cache(), "Drain only necessary if we use the hot card cache.");
 
   assert(_hot_cache != NULL, "Logic");
--- a/src/hotspot/share/gc/g1/g1HotCardCache.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1HotCardCache.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -32,8 +32,7 @@
 #include "runtime/thread.hpp"
 #include "utilities/globalDefinitions.hpp"
 
-class CardTableEntryClosure;
-class DirtyCardQueue;
+class G1CardTableEntryClosure;
 class G1CollectedHeap;
 class HeapRegion;
 
@@ -112,7 +111,7 @@
 
   // Refine the cards that have delayed as a result of
   // being in the cache.
-  void drain(CardTableEntryClosure* cl, uint worker_i);
+  void drain(G1CardTableEntryClosure* cl, uint worker_i);
 
   // Set up for parallel processing of the cards in the hot cache
   void reset_hot_cache_claimed_index() {
--- a/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -119,15 +119,15 @@
   //  name "collector.0".  In a generational collector this would be the
   // young generation collection.
   _incremental_collection_counters =
-    new CollectorCounters("G1 incremental collections", 0);
+    new CollectorCounters("G1 young collection pauses", 0);
   //   name "collector.1".  In a generational collector this would be the
   // old generation collection.
   _full_collection_counters =
-    new CollectorCounters("G1 stop-the-world full collections", 1);
+    new CollectorCounters("G1 full collection pauses", 1);
   //   name "collector.2".  In a generational collector this would be the
   // STW phases in concurrent collection.
   _conc_collection_counters =
-    new CollectorCounters("G1 stop-the-world phases", 2);
+    new CollectorCounters("G1 concurrent cycle pauses", 2);
 
   // "Generation" and "Space" counters.
   //
--- a/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -25,9 +25,9 @@
 #ifndef SHARE_GC_G1_G1PARSCANTHREADSTATE_HPP
 #define SHARE_GC_G1_G1PARSCANTHREADSTATE_HPP
 
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/g1/g1CardTable.hpp"
 #include "gc/g1/g1CollectedHeap.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1OopClosures.hpp"
 #include "gc/g1/g1Policy.hpp"
 #include "gc/g1/g1RemSet.hpp"
@@ -46,7 +46,7 @@
 class G1ParScanThreadState : public CHeapObj<mtGC> {
   G1CollectedHeap* _g1h;
   RefToScanQueue*  _refs;
-  DirtyCardQueue   _dcq;
+  G1DirtyCardQueue _dcq;
   G1CardTable*     _ct;
   G1EvacuationRootClosures* _closures;
 
@@ -77,7 +77,7 @@
 
 #define PADDING_ELEM_NUM (DEFAULT_CACHE_LINE_SIZE / sizeof(size_t))
 
-  DirtyCardQueue& dirty_card_queue()             { return _dcq;  }
+  G1DirtyCardQueue& dirty_card_queue()           { return _dcq; }
   G1CardTable* ct()                              { return _ct; }
 
   InCSetState dest(InCSetState original) const {
--- a/src/hotspot/share/gc/g1/g1Policy.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1Policy.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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,9 +26,11 @@
 #include "gc/g1/g1Analytics.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1CollectionSet.hpp"
+#include "gc/g1/g1CollectionSetCandidates.hpp"
 #include "gc/g1/g1ConcurrentMark.hpp"
 #include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
 #include "gc/g1/g1ConcurrentRefine.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
 #include "gc/g1/g1HeterogeneousHeapPolicy.hpp"
 #include "gc/g1/g1HotCardCache.hpp"
 #include "gc/g1/g1IHOPControl.hpp"
@@ -438,7 +440,7 @@
   // Release the future to-space so that it is available for compaction into.
   collector_state()->set_in_young_only_phase(false);
   collector_state()->set_in_full_gc(true);
-  cset_chooser()->clear();
+  _collection_set->clear_candidates();
 }
 
 void G1Policy::record_full_collection_end() {
@@ -546,10 +548,6 @@
   return other_time_ms(pause_time_ms) - phase_times()->total_free_cset_time_ms();
 }
 
-CollectionSetChooser* G1Policy::cset_chooser() const {
-  return _collection_set->cset_chooser();
-}
-
 bool G1Policy::about_to_start_mixed_phase() const {
   return _g1h->concurrent_mark()->cm_thread()->during_cycle() || collector_state()->in_young_gc_before_mixed();
 }
@@ -773,8 +771,6 @@
   _g1h->concurrent_refine()->adjust(average_time_ms(G1GCPhaseTimes::UpdateRS),
                                     phase_times()->sum_thread_work_items(G1GCPhaseTimes::UpdateRS),
                                     update_rs_time_goal_ms);
-
-  cset_chooser()->verify();
 }
 
 G1IHOPControl* G1Policy::create_ihop_control(const G1Predictions* predictor){
@@ -1032,7 +1028,8 @@
 }
 
 void G1Policy::record_concurrent_mark_cleanup_end() {
-  cset_chooser()->rebuild(_g1h->workers(), _g1h->num_regions());
+  G1CollectionSetCandidates* candidates = G1CollectionSetChooser::build(_g1h->workers(), _g1h->num_regions());
+  _collection_set->set_candidates(candidates);
 
   bool mixed_gc_pending = next_gc_should_be_mixed("request mixed gcs", "request young-only gcs");
   if (!mixed_gc_pending) {
@@ -1063,10 +1060,10 @@
 
 void G1Policy::clear_collection_set_candidates() {
   // Clear remembered sets of remaining candidate regions and the actual candidate
-  // list.
+  // set.
   G1ClearCollectionSetCandidateRemSets cl;
-  cset_chooser()->iterate(&cl);
-  cset_chooser()->clear();
+  _collection_set->candidates()->iterate(&cl);
+  _collection_set->clear_candidates();
 }
 
 void G1Policy::maybe_start_marking() {
@@ -1132,22 +1129,24 @@
 
 bool G1Policy::next_gc_should_be_mixed(const char* true_action_str,
                                        const char* false_action_str) const {
-  if (cset_chooser()->is_empty()) {
+  G1CollectionSetCandidates* candidates = _collection_set->candidates();
+
+  if (candidates->is_empty()) {
     log_debug(gc, ergo)("%s (candidate old regions not available)", false_action_str);
     return false;
   }
 
   // Is the amount of uncollected reclaimable space above G1HeapWastePercent?
-  size_t reclaimable_bytes = cset_chooser()->remaining_reclaimable_bytes();
+  size_t reclaimable_bytes = candidates->remaining_reclaimable_bytes();
   double reclaimable_percent = reclaimable_bytes_percent(reclaimable_bytes);
   double threshold = (double) G1HeapWastePercent;
   if (reclaimable_percent <= threshold) {
     log_debug(gc, ergo)("%s (reclaimable percentage not over threshold). candidate old regions: %u reclaimable: " SIZE_FORMAT " (%1.2f) threshold: " UINTX_FORMAT,
-                        false_action_str, cset_chooser()->remaining_regions(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
+                        false_action_str, candidates->num_remaining(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
     return false;
   }
   log_debug(gc, ergo)("%s (candidate old regions available). candidate old regions: %u reclaimable: " SIZE_FORMAT " (%1.2f) threshold: " UINTX_FORMAT,
-                      true_action_str, cset_chooser()->remaining_regions(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
+                      true_action_str, candidates->num_remaining(), reclaimable_bytes, reclaimable_percent, G1HeapWastePercent);
   return true;
 }
 
@@ -1159,10 +1158,10 @@
   // maximum desired number of mixed GCs.
   //
   // The calculation is based on the number of marked regions we added
-  // to the CSet chooser in the first place, not how many remain, so
+  // to the CSet candidates in the first place, not how many remain, so
   // that the result is the same during all mixed GCs that follow a cycle.
 
-  const size_t region_num = (size_t) cset_chooser()->length();
+  const size_t region_num = _collection_set->candidates()->num_regions();
   const size_t gc_num = (size_t) MAX2(G1MixedGCCountTarget, (uintx) 1);
   size_t result = region_num / gc_num;
   // emulate ceiling
--- a/src/hotspot/share/gc/g1/g1Policy.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1Policy.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -44,7 +44,7 @@
 
 class HeapRegion;
 class G1CollectionSet;
-class CollectionSetChooser;
+class G1CollectionSetChooser;
 class G1IHOPControl;
 class G1Analytics;
 class G1SurvivorRegions;
@@ -176,7 +176,7 @@
   double non_young_other_time_ms() const;
   double constant_other_time_ms(double pause_time_ms) const;
 
-  CollectionSetChooser* cset_chooser() const;
+  G1CollectionSetChooser* cset_chooser() const;
 
   // The number of bytes copied during the GC.
   size_t _bytes_copied_during_gc;
--- a/src/hotspot/share/gc/g1/g1RemSet.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1RemSet.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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,12 +23,12 @@
  */
 
 #include "precompiled.hpp"
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/g1/g1BarrierSet.hpp"
 #include "gc/g1/g1BlockOffsetTable.inline.hpp"
 #include "gc/g1/g1CardTable.inline.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1ConcurrentRefine.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1FromCardCache.hpp"
 #include "gc/g1/g1GCPhaseTimes.hpp"
 #include "gc/g1/g1HotCardCache.hpp"
@@ -300,7 +300,7 @@
 }
 
 uint G1RemSet::num_par_rem_sets() {
-  return DirtyCardQueueSet::num_par_ids() + G1ConcurrentRefine::max_num_threads() + MAX2(ConcGCThreads, ParallelGCThreads);
+  return G1DirtyCardQueueSet::num_par_ids() + G1ConcurrentRefine::max_num_threads() + MAX2(ConcGCThreads, ParallelGCThreads);
 }
 
 void G1RemSet::initialize(size_t capacity, uint max_regions) {
@@ -456,7 +456,7 @@
 }
 
 // Closure used for updating rem sets. Only called during an evacuation pause.
-class G1RefineCardClosure: public CardTableEntryClosure {
+class G1RefineCardClosure: public G1CardTableEntryClosure {
   G1RemSet* _g1rs;
   G1ScanObjsDuringUpdateRSClosure* _update_rs_cl;
 
@@ -520,7 +520,7 @@
 }
 
 void G1RemSet::prepare_for_oops_into_collection_set_do() {
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
   dcqs.concatenate_logs();
 
   _scan_state->reset();
@@ -677,7 +677,7 @@
       *card_ptr = G1CardTable::dirty_card_val();
       MutexLockerEx x(Shared_DirtyCardQ_lock,
                       Mutex::_no_safepoint_check_flag);
-      DirtyCardQueue* sdcq =
+      G1DirtyCardQueue* sdcq =
         G1BarrierSet::dirty_card_queue_set().shared_dirty_card_queue();
       sdcq->enqueue(card_ptr);
     }
--- a/src/hotspot/share/gc/g1/g1RemSet.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1RemSet.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -25,7 +25,6 @@
 #ifndef SHARE_GC_G1_G1REMSET_HPP
 #define SHARE_GC_G1_G1REMSET_HPP
 
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/g1/g1CardTable.hpp"
 #include "gc/g1/g1OopClosures.hpp"
 #include "gc/g1/g1GCPhaseTimes.hpp"
--- a/src/hotspot/share/gc/g1/g1RemSetSummary.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1RemSetSummary.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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,6 +26,7 @@
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/g1/g1ConcurrentRefine.hpp"
 #include "gc/g1/g1ConcurrentRefineThread.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/g1/g1RemSet.hpp"
 #include "gc/g1/g1RemSetSummary.hpp"
 #include "gc/g1/g1YoungRemSetSamplingThread.hpp"
@@ -53,7 +54,7 @@
 
 void G1RemSetSummary::update() {
   _num_conc_refined_cards = _rem_set->num_conc_refined_cards();
-  DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
+  G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
   _num_processed_buf_mutator = dcqs.processed_buffers_mut();
   _num_processed_buf_rs_threads = dcqs.processed_buffers_rs_thread();
 
--- a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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,7 +23,7 @@
  */
 
 #include "precompiled.hpp"
-#include "gc/g1/collectionSetChooser.hpp"
+#include "gc/g1/g1CollectionSetChooser.hpp"
 #include "gc/g1/g1RemSetTrackingPolicy.hpp"
 #include "gc/g1/heapRegion.inline.hpp"
 #include "gc/g1/heapRegionRemSet.hpp"
@@ -126,7 +126,7 @@
   // - Otherwise only add those old gen regions which occupancy is low enough that there
   // is a chance that we will ever evacuate them in the mixed gcs.
   if ((total_live_bytes > 0) &&
-      CollectionSetChooser::region_occupancy_low_enough_for_evac(total_live_bytes) &&
+      G1CollectionSetChooser::region_occupancy_low_enough_for_evac(total_live_bytes) &&
       !r->rem_set()->is_tracked()) {
 
     r->rem_set()->set_state_updating();
--- a/src/hotspot/share/gc/g1/g1ThreadLocalData.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/g1ThreadLocalData.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2019, 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
@@ -24,8 +24,8 @@
 #ifndef SHARE_GC_G1_G1THREADLOCALDATA_HPP
 #define SHARE_GC_G1_G1THREADLOCALDATA_HPP
 
-#include "gc/g1/dirtyCardQueue.hpp"
 #include "gc/g1/g1BarrierSet.hpp"
+#include "gc/g1/g1DirtyCardQueue.hpp"
 #include "gc/shared/satbMarkQueue.hpp"
 #include "runtime/thread.hpp"
 #include "utilities/debug.hpp"
@@ -33,8 +33,8 @@
 
 class G1ThreadLocalData {
 private:
-  SATBMarkQueue  _satb_mark_queue;
-  DirtyCardQueue _dirty_card_queue;
+  SATBMarkQueue _satb_mark_queue;
+  G1DirtyCardQueue _dirty_card_queue;
 
   G1ThreadLocalData() :
       _satb_mark_queue(&G1BarrierSet::satb_mark_queue_set()),
@@ -66,7 +66,7 @@
     return data(thread)->_satb_mark_queue;
   }
 
-  static DirtyCardQueue& dirty_card_queue(Thread* thread) {
+  static G1DirtyCardQueue& dirty_card_queue(Thread* thread) {
     return data(thread)->_dirty_card_queue;
   }
 
@@ -83,11 +83,11 @@
   }
 
   static ByteSize dirty_card_queue_index_offset() {
-    return dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_index();
+    return dirty_card_queue_offset() + G1DirtyCardQueue::byte_offset_of_index();
   }
 
   static ByteSize dirty_card_queue_buffer_offset() {
-    return dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_buf();
+    return dirty_card_queue_offset() + G1DirtyCardQueue::byte_offset_of_buf();
   }
 };
 
--- a/src/hotspot/share/gc/g1/heapRegion.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/heapRegion.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -547,7 +547,7 @@
   }
 
   void calc_gc_efficiency(void);
-  double gc_efficiency() { return _gc_efficiency;}
+  double gc_efficiency() const { return _gc_efficiency;}
 
   uint index_in_opt_cset() const { return _index_in_opt_cset; }
   void set_index_in_opt_cset(uint index) { _index_in_opt_cset = index; }
@@ -705,7 +705,7 @@
 class HeapRegionClosure : public StackObj {
   friend class HeapRegionManager;
   friend class G1CollectionSet;
-  friend class CollectionSetChooser;
+  friend class G1CollectionSetCandidates;
 
   bool _is_complete;
   void set_incomplete() { _is_complete = false; }
--- a/src/hotspot/share/gc/g1/vmStructs_g1.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/g1/vmStructs_g1.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -102,7 +102,7 @@
   declare_toplevel_type(PtrQueue)                                             \
   declare_toplevel_type(HeapRegionType)                                       \
   declare_toplevel_type(SATBMarkQueue)                                        \
-  declare_toplevel_type(DirtyCardQueue)                                       \
+  declare_toplevel_type(G1DirtyCardQueue)                                     \
                                                                               \
   declare_toplevel_type(G1CollectedHeap*)                                     \
   declare_toplevel_type(HeapRegion*)                                          \
--- a/src/hotspot/share/gc/parallel/psMarkSweep.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/parallel/psMarkSweep.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -72,7 +72,7 @@
 void PSMarkSweep::initialize() {
   _span_based_discoverer.set_span(ParallelScavengeHeap::heap()->reserved_region());
   set_ref_processor(new ReferenceProcessor(&_span_based_discoverer));     // a vanilla ref proc
-  _counters = new CollectorCounters("PSMarkSweep", 1);
+  _counters = new CollectorCounters("Serial full collection pauses", 1);
   MarkSweep::initialize();
 }
 
--- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -883,7 +883,7 @@
     new PCReferenceProcessor(&_span_based_discoverer,
                              &_is_alive_closure); // non-header is alive closure
 
-  _counters = new CollectorCounters("PSParallelCompact", 1);
+  _counters = new CollectorCounters("Parallel full collection pauses", 1);
 
   // Initialize static fields in ParCompactionManager.
   ParCompactionManager::initialize(mark_bitmap());
--- a/src/hotspot/share/gc/parallel/psScavenge.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -754,5 +754,5 @@
   // Cache the cardtable
   _card_table = heap->card_table();
 
-  _counters = new CollectorCounters("PSScavenge", 0);
+  _counters = new CollectorCounters("Parallel young collection pauses", 0);
 }
--- a/src/hotspot/share/gc/serial/defNewGeneration.hpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp	Mon Feb 18 10:45:21 2019 +0530
@@ -192,7 +192,7 @@
 
  public:
   DefNewGeneration(ReservedSpace rs, size_t initial_byte_size,
-                   const char* policy="Copy");
+                   const char* policy="Serial young collection pauses");
 
   virtual void ref_processor_init();
 
--- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -65,7 +65,7 @@
   _gen_counters = new GenerationCounters(gen_name, 1, 1,
       gcp->min_old_size(), gcp->max_old_size(), &_virtual_space);
 
-  _gc_counters = new CollectorCounters("MSC", 1);
+  _gc_counters = new CollectorCounters("Serial full collection pauses", 1);
 
   _space_counters = new CSpaceCounters(gen_name, 0,
                                        _virtual_space.reserved_size(),
--- a/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp	Sun Feb 17 15:15:30 2019 -0800
+++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp	Mon Feb 18 10:45:21 2019 +0530
@@ -75,6 +75,7 @@
 
   bool mismatched = (decorators & C2_MISMATCHED) != 0;
   bool unaligned = (decorators & C2_UNALIGNED) != 0;
+  bool unsafe = (decorators & C2_UNSAFE_ACCESS) != 0;
   bool requires_atomic_access = (decorators & MO_UNORDERED) == 0;
 
   bool in_native = (decorators & IN_NATIVE) != 0;
@@ -93,7 +94,7 @@
     }
 
     store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), access.type(),
-                                     access.addr().type(), mo, requires_atomic_access, unaligned, mismatched);
+                                     access.addr().type(), mo, requires_atomic_access, unaligned, mismatched, unsafe);
     access.set_raw_access(store);
   } else {
     assert(!requires_atomic_access, "not yet supported");
@@ -132,6 +133,7 @@
   bool unaligned = (decorators & C2_UNALIGNED) != 0;
   bool control_dependent = (decorators & C2_CONTROL_DEPENDENT_LOAD) != 0;
   bool pinned = (decorators & C2_PINNED_LOAD) != 0;
+  bool unsafe = (decorators & C2_UNSAFE_ACCESS) != 0;
 
   bool in_n