OpenJDK / amber / amber
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