This commit is contained in:
Prasanta Sadhukhan 2018-12-04 13:35:04 +05:30
commit 5f2062b484
304 changed files with 5022 additions and 2024 deletions

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -262,6 +262,21 @@ endif
################################################################################ ################################################################################
ifneq ($(filter jcov-bundles, $(MAKECMDGOALS)), )
JCOV_BUNDLE_FILES := $(call CacheFind, $(JCOV_IMAGE_DIR))
$(eval $(call SetupBundleFile, BUILD_JCOV_BUNDLE, \
BUNDLE_NAME := $(JCOV_BUNDLE_NAME), \
FILES := $(JCOV_BUNDLE_FILES), \
BASE_DIRS := $(JCOV_IMAGE_DIR), \
SUBDIR := $(JDK_BUNDLE_SUBDIR), \
))
JCOV_TARGETS += $(BUILD_JCOV_BUNDLE)
endif
################################################################################
# Hook to include the corresponding custom file, if present. # Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, Bundles.gmk)) $(eval $(call IncludeCustomExtension, Bundles.gmk))
@ -270,5 +285,6 @@ $(eval $(call IncludeCustomExtension, Bundles.gmk))
product-bundles: $(PRODUCT_TARGETS) product-bundles: $(PRODUCT_TARGETS)
test-bundles: $(TEST_TARGETS) test-bundles: $(TEST_TARGETS)
docs-bundles: $(DOCS_TARGETS) docs-bundles: $(DOCS_TARGETS)
jcov-bundles: $(JCOV_TARGETS)
.PHONY: all default product-bundles test-bundles docs-bundles .PHONY: all default product-bundles test-bundles docs-bundles jcov-bundles

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

56
make/Coverage.gmk Normal file
View File

@ -0,0 +1,56 @@
#
# Copyright (c) 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. 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.
include $(SPEC)
include MakeBase.gmk
################################################################################
JCOV_INPUT_IMAGE_DIR :=
ifneq ($(JCOV_INPUT_JDK), )
JCOV_INPUT_IMAGE_DIR := $(JCOV_INPUT_JDK)
else
JCOV_INPUT_IMAGE_DIR := $(JDK_IMAGE_DIR)
endif
#moving instrumented jdk image in and out of jcov_temp because of CODETOOLS-7902299
JCOV_TEMP := $(SUPPORT_OUTPUTDIR)/jcov_temp
$(JCOV_IMAGE_DIR)/release: $(JCOV_INPUT_IMAGE_DIR)/release
$(call LogWarn, Creating instrumented jdk image with JCov)
$(call MakeDir, $(JCOV_TEMP) $(IMAGES_OUTPUTDIR))
$(RM) -r $(JCOV_IMAGE_DIR) $(JCOV_TEMP)/*
$(CP) -r $(JCOV_INPUT_IMAGE_DIR) $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR)
$(JAVA) -Xmx3g -jar $(JCOV_HOME)/lib/jcov.jar JREInstr \
-t $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR)/template.xml \
-rt $(JCOV_HOME)/lib/jcov_network_saver.jar \
-exclude 'java.lang.Object' \
-exclude 'jdk.internal.org.objectweb.**' \
-exclude jdk.test.Main -exclude '**\$Proxy*' \
$(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR)
$(MV) $(JCOV_TEMP)/$(JCOV_IMAGE_SUBDIR) $(JCOV_IMAGE_DIR)
$(RMDIR) $(JCOV_TEMP)
jcov-image: $(JCOV_IMAGE_DIR)/release

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,4 +1,4 @@
# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -371,10 +371,15 @@ release-file:
exploded-image-optimize: exploded-image-optimize:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f ExplodedImageOptimize.gmk) +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f ExplodedImageOptimize.gmk)
ifeq ($(JCOV_ENABLED), true)
jcov-image:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Coverage.gmk jcov-image)
endif
ALL_TARGETS += store-source-revision create-source-revision-tracker bootcycle-images zip-security \ ALL_TARGETS += store-source-revision create-source-revision-tracker bootcycle-images zip-security \
zip-source jrtfs-jar jdk-image legacy-jre-image \ zip-source jrtfs-jar jdk-image legacy-jre-image \
symbols-image mac-jdk-bundle mac-legacy-jre-bundle \ symbols-image mac-jdk-bundle mac-legacy-jre-bundle \
release-file exploded-image-optimize release-file exploded-image-optimize jcov-image
################################################################################ ################################################################################
# Docs targets # Docs targets
@ -577,7 +582,12 @@ test-bundles:
docs-bundles: docs-bundles:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk docs-bundles) +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk docs-bundles)
ALL_TARGETS += product-bundles test-bundles docs-bundles ifeq ($(JCOV_ENABLED), true)
jcov-bundles:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk jcov-bundles)
endif
ALL_TARGETS += product-bundles test-bundles docs-bundles jcov-bundles
################################################################################ ################################################################################
# Install targets # Install targets
@ -633,6 +643,7 @@ else
# Declare dependencies between hotspot-<variant>* targets # Declare dependencies between hotspot-<variant>* targets
$(foreach v, $(JVM_VARIANTS), \ $(foreach v, $(JVM_VARIANTS), \
$(eval hotspot-$v: hotspot-$v-gensrc hotspot-$v-libs) \ $(eval hotspot-$v: hotspot-$v-gensrc hotspot-$v-libs) \
$(eval hotspot-$v-gensrc: java.base-copy) \
$(eval hotspot-$v-libs: hotspot-$v-gensrc java.base-copy) \ $(eval hotspot-$v-libs: hotspot-$v-gensrc java.base-copy) \
) )
@ -820,6 +831,10 @@ else
mac-jdk-bundle: jdk-image mac-jdk-bundle: jdk-image
mac-legacy-jre-bundle: legacy-jre-image mac-legacy-jre-bundle: legacy-jre-image
ifeq ($(JCOV_INPUT_JDK), )
jcov-image: jdk-image
endif
# The optimize target can run as soon as the modules dir has been completely # The optimize target can run as soon as the modules dir has been completely
# populated (java, copy and gendata targets) and the basic libs and launchers # populated (java, copy and gendata targets) and the basic libs and launchers
# have been built. # have been built.
@ -900,6 +915,8 @@ else
docs-bundles: docs-image docs-bundles: docs-image
jcov-bundles: jcov-image
generate-summary: jmods buildtools-modules generate-summary: jmods buildtools-modules
update-x11wrappers: java.base-copy buildtools-jdk update-x11wrappers: java.base-copy buildtools-jdk

View File

@ -135,9 +135,11 @@ define SetupAotModuleBody
$1_LD := $$(LD) $1_LD := $$(LD)
endif endif
# Create jaotc flags.
# VM flags which don't affect AOT code generation are filtered out: -Xcomp, -XX:+-TieredCompilation
$1_JAOTC_OPTS := \ $1_JAOTC_OPTS := \
-J-Xmx4g --info \ -J-Xmx4g --info \
$$(addprefix -J, $$($1_VM_OPTIONS)) \ $$(addprefix -J, $$(filter-out -Xcomp %TieredCompilation, $$($1_VM_OPTIONS))) \
$$(addprefix --compile-commands$(SPACE), $$($1_AOT_CCLIST)) \ $$(addprefix --compile-commands$(SPACE), $$($1_AOT_CCLIST)) \
--linker-path $$($1_LD) \ --linker-path $$($1_LD) \
# #

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -325,18 +325,14 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
fi fi
fi fi
# Only enable ZGC on Linux x86_64 # Only enable ZGC on supported platforms
AC_MSG_CHECKING([if zgc should be built]) AC_MSG_CHECKING([if zgc can be built])
if HOTSPOT_CHECK_JVM_FEATURE(zgc); then
if test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then if test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
else else
DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc" DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc"
AC_MSG_RESULT([no, platform not supported]) AC_MSG_RESULT([no, platform not supported])
fi fi
else
AC_MSG_RESULT([no])
fi
# Disable unsupported GCs for Zero # Disable unsupported GCs for Zero
if HOTSPOT_CHECK_JVM_VARIANT(zero); then if HOTSPOT_CHECK_JVM_VARIANT(zero); then
@ -474,7 +470,7 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
fi fi
# All variants but minimal (and custom) get these features # All variants but minimal (and custom) get these features
NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES cmsgc g1gc parallelgc serialgc epsilongc jni-check jvmti management nmt services vm-structs" NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES cmsgc g1gc parallelgc serialgc epsilongc jni-check jvmti management nmt services vm-structs zgc"
# Disable CDS on AIX. # Disable CDS on AIX.
if test "x$OPENJDK_TARGET_OS" = "xaix"; then if test "x$OPENJDK_TARGET_OS" = "xaix"; then

View File

@ -395,8 +395,37 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
elif test "x$enable_native_coverage" != "x"; then elif test "x$enable_native_coverage" != "x"; then
AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"]) AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
fi fi
AC_SUBST(GCOV_ENABLED) AC_SUBST(GCOV_ENABLED)
AC_ARG_WITH(jcov, [AS_HELP_STRING([--with-jcov],
[jcov library location])])
AC_ARG_WITH(jcov-input-jdk, [AS_HELP_STRING([--with-jcov-input-jdk],
[jdk image to instrument])])
JCOV_HOME=
JCOV_INPUT_JDK=
JCOV_ENABLED=
if test "x$with_jcov" = "x" ; then
JCOV_ENABLED="false"
else
JCOV_HOME="$with_jcov"
if test ! -f "$JCOV_HOME/lib/jcov.jar"; then
AC_MSG_RESULT([fail])
AC_MSG_ERROR([Invalid JCov bundle: "$JCOV_HOME/lib/jcov.jar" does not exist])
fi
JCOV_ENABLED="true"
BASIC_FIXUP_PATH(JCOV_HOME)
if test "x$with_jcov_input_jdk" != "x" ; then
JCOV_INPUT_JDK="$with_jcov_input_jdk"
if test ! -f "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX"; then
AC_MSG_RESULT([fail])
AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX" does not exist])
fi
BASIC_FIXUP_PATH(JCOV_INPUT_JDK)
fi
fi
AC_SUBST(JCOV_ENABLED)
AC_SUBST(JCOV_HOME)
AC_SUBST(JCOV_INPUT_JDK)
]) ])
############################################################################### ###############################################################################

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -372,6 +372,9 @@ CACERTS_FILE=@CACERTS_FILE@
UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@ UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@
GCOV_ENABLED=@GCOV_ENABLED@ GCOV_ENABLED=@GCOV_ENABLED@
JCOV_ENABLED=@JCOV_ENABLED@
JCOV_HOME=@JCOV_HOME@
JCOV_INPUT_JDK=@JCOV_INPUT_JDK@
# AddressSanitizer # AddressSanitizer
export ASAN_ENABLED:=@ASAN_ENABLED@ export ASAN_ENABLED:=@ASAN_ENABLED@
@ -839,10 +842,12 @@ OS_VERSION_MICRO:=@OS_VERSION_MICRO@
# Images directory definitions # Images directory definitions
JDK_IMAGE_SUBDIR:=jdk JDK_IMAGE_SUBDIR:=jdk
JRE_IMAGE_SUBDIR:=jre JRE_IMAGE_SUBDIR:=jre
JCOV_IMAGE_SUBDIR := jdk-jcov
# Colon left out to be able to override output dir for bootcycle-images # Colon left out to be able to override output dir for bootcycle-images
JDK_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_IMAGE_SUBDIR) JDK_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_IMAGE_SUBDIR)
JRE_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_IMAGE_SUBDIR) JRE_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_IMAGE_SUBDIR)
JCOV_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(JCOV_IMAGE_SUBDIR)
# Test image, as above # Test image, as above
TEST_IMAGE_SUBDIR:=test TEST_IMAGE_SUBDIR:=test
@ -889,12 +894,14 @@ JDK_SYMBOLS_BUNDLE_NAME := jdk-$(BASE_NAME)_bin$(DEBUG_PART)-symbols.tar.gz
TEST_DEMOS_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests-demos$(DEBUG_PART).tar.gz TEST_DEMOS_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests-demos$(DEBUG_PART).tar.gz
TEST_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests$(DEBUG_PART).tar.gz TEST_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests$(DEBUG_PART).tar.gz
DOCS_BUNDLE_NAME := jdk-$(BASE_NAME)_doc-api-spec$(DEBUG_PART).tar.gz DOCS_BUNDLE_NAME := jdk-$(BASE_NAME)_doc-api-spec$(DEBUG_PART).tar.gz
JCOV_BUNDLE_NAME := jdk-jcov-$(BASE_NAME)_bin$(DEBUG_PART).$(JDK_BUNDLE_EXTENSION)
JDK_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_BUNDLE_NAME) JDK_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_BUNDLE_NAME)
JDK_SYMBOLS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_SYMBOLS_BUNDLE_NAME) JDK_SYMBOLS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_SYMBOLS_BUNDLE_NAME)
TEST_DEMOS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_DEMOS_BUNDLE_NAME) TEST_DEMOS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_DEMOS_BUNDLE_NAME)
TEST_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_BUNDLE_NAME) TEST_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_BUNDLE_NAME)
DOCS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_BUNDLE_NAME) DOCS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_BUNDLE_NAME)
JCOV_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JCOV_BUNDLE_NAME)
# This macro is called to allow inclusion of closed source counterparts. # This macro is called to allow inclusion of closed source counterparts.
# Unless overridden in closed sources, it expands to nothing. # Unless overridden in closed sources, it expands to nothing.

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -243,7 +243,7 @@ var getJibProfilesCommon = function (input, data) {
// These are the base setttings for all the main build profiles. // These are the base setttings for all the main build profiles.
common.main_profile_base = { common.main_profile_base = {
dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf", "jmh"], dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf", "jmh", "jcov"],
default_make_targets: ["product-bundles", "test-bundles"], default_make_targets: ["product-bundles", "test-bundles"],
configure_args: concat(["--enable-jtreg-failure-handler"], configure_args: concat(["--enable-jtreg-failure-handler"],
"--with-exclude-translations=de,es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK", "--with-exclude-translations=de,es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
@ -688,14 +688,6 @@ var getJibProfilesProfiles = function (input, common, data) {
profiles[openName].artifacts["jdk"].remote)); profiles[openName].artifacts["jdk"].remote));
}); });
// Enable ZGC in linux-x64-open builds
[ "linux-x64-open" ].forEach(function (name) {
var configureArgs = { configure_args: [ "--with-jvm-features=zgc" ] };
var debugName = name + common.debug_suffix;
profiles[name] = concatObjects(profiles[name], configureArgs);
profiles[debugName] = concatObjects(profiles[debugName], configureArgs);
});
// Generate cmp-baseline profiles for each main profile and their // Generate cmp-baseline profiles for each main profile and their
// corresponding debug profile. This profile does a compare build run with no // corresponding debug profile. This profile does a compare build run with no
// changes to verify that the compare script has a clean baseline // changes to verify that the compare script has a clean baseline
@ -898,6 +890,14 @@ var getJibProfilesDependencies = function (input, common) {
revision: "1.21+1.0" revision: "1.21+1.0"
}, },
jcov: {
server: "jpg",
product: "jcov",
version: "3.0",
build_number: "b07",
file: "bundles/jcov-3_0.zip",
},
gnumake: { gnumake: {
organization: common.organization, organization: common.organization,
ext: "tar.gz", ext: "tar.gz",

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -5,14 +5,3 @@ A1AD 223C
A2A6 FF5E A2A6 FF5E
A2C1 2299 A2C1 2299
A3DC 20A9 A3DC 20A9
#
# see .map file for the info regarding following 3 entries
#
a1aa 6950
a1a9 84f1
a1ad cf7f

View File

@ -1,15 +1,6 @@
# #
# source: Cp970.b2c, which is identical(?) to 03CA34B0.TPMAP100 # source: Cp970.b2c, which is identical(?) to 03CA34B0.TPMAP100
# #
# Warning:
# following 3 c->b only entries exist in the "old" implementation,
# they don't appear existing in any of of the cdc 970 tables. Added
# them into c2b for "compatibility
# 6950 -> a1aa 2014
# 84f1 -> a1a9 2010
# cf7f -> a1ad 301c
#
#
00 0000 00 0000
01 0001 01 0001
02 0002 02 0002
@ -294,6 +285,7 @@ A2BD 2661
A2BE 2665 A2BE 2665
A2BF 2667 A2BF 2667
A2C0 2663 A2C0 2663
A2C1 25C9
A2C2 25C8 A2C2 25C8
A2C3 25A3 A2C3 25A3
A2C4 25D0 A2C4 25D0

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
# #
# #
# Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
# #
# #
# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,4 +1,4 @@
File-Date: 2018-04-23 File-Date: 2018-10-31
%% %%
Type: language Type: language
Subtag: aa Subtag: aa
@ -3351,7 +3351,7 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: aue Subtag: aue
Description: =/Kx'au//'ein Description: ǂKxʼauǁʼein
Added: 2009-07-29 Added: 2009-07-29
Deprecated: 2015-02-12 Deprecated: 2015-02-12
Preferred-Value: ktz Preferred-Value: ktz
@ -9812,6 +9812,12 @@ Description: Dzùùngoo
Added: 2009-07-29 Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: dno
Description: Ndrulo
Description: Northern Lendu
Added: 2018-10-28
%%
Type: language
Subtag: dnr Subtag: dnr
Description: Danaru Description: Danaru
Added: 2009-07-29 Added: 2009-07-29
@ -10338,6 +10344,11 @@ Description: Dhuwaya
Added: 2016-05-30 Added: 2016-05-30
%% %%
Type: language Type: language
Subtag: dwz
Description: Dewas Rai
Added: 2018-10-28
%%
Type: language
Subtag: dya Subtag: dya
Description: Dyan Description: Dyan
Added: 2009-07-29 Added: 2009-07-29
@ -12022,7 +12033,7 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: gfx Subtag: gfx
Description: Mangetti Dune !Xung Description: Mangetti Dune ǃXung
Added: 2012-08-12 Added: 2012-08-12
Deprecated: 2015-02-12 Deprecated: 2015-02-12
Preferred-Value: vaj Preferred-Value: vaj
@ -12328,7 +12339,6 @@ Macrolanguage: kpe
Type: language Type: language
Subtag: gku Subtag: gku
Description: ǂUngkue Description: ǂUngkue
Description: =/Ungkue
Added: 2015-02-12 Added: 2015-02-12
%% %%
Type: language Type: language
@ -12523,7 +12533,6 @@ Added: 2018-03-08
%% %%
Type: language Type: language
Subtag: gnk Subtag: gnk
Description: //Gana
Description: ǁGana Description: ǁGana
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -13156,7 +13165,6 @@ Added: 2005-10-16
%% %%
Type: language Type: language
Subtag: gwj Subtag: gwj
Description: /Gwi
Description: ǀGwi Description: ǀGwi
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -13489,7 +13497,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: hgm Subtag: hgm
Description: Hai//om
Description: Haiǁom Description: Haiǁom
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -13833,7 +13840,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: hnh Subtag: hnh
Description: //Ani
Description: ǁAni Description: ǁAni
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -14113,7 +14119,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: huc Subtag: huc
Description: =/Hua
Description: ǂHua Description: ǂHua
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -18425,7 +18430,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: ktz Subtag: ktz
Description: Ju/'hoan
Description: Juǀʼhoan Description: Juǀʼhoan
Description: Juǀʼhoansi Description: Juǀʼhoansi
Added: 2009-07-29 Added: 2009-07-29
@ -24926,7 +24930,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: ngh Subtag: ngh
Description: N/u
Description: Nǀu Description: Nǀu
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -25641,7 +25644,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: nmn Subtag: nmn
Description: !Xóõ
Description: ǃXóõ Description: ǃXóõ
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -27613,7 +27615,7 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: oun Subtag: oun
Description: !O!ung Description: ǃOǃung
Added: 2009-07-29 Added: 2009-07-29
Deprecated: 2015-02-12 Deprecated: 2015-02-12
Preferred-Value: vaj Preferred-Value: vaj
@ -36667,7 +36669,6 @@ Added: 2005-10-16
Type: language Type: language
Subtag: vaj Subtag: vaj
Description: Sekele Description: Sekele
Description: Northwestern !Kung
Description: Northwestern ǃKung Description: Northwestern ǃKung
Description: Vasekele Description: Vasekele
Added: 2009-07-29 Added: 2009-07-29
@ -38299,7 +38300,6 @@ Added: 2005-10-16
%% %%
Type: language Type: language
Subtag: xam Subtag: xam
Description: /Xam
Description: ǀXam Description: ǀXam
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -38559,7 +38559,6 @@ Added: 2009-07-29
%% %%
Type: language Type: language
Subtag: xeg Subtag: xeg
Description: //Xegwi
Description: ǁXegwi Description: ǁXegwi
Added: 2009-07-29 Added: 2009-07-29
%% %%
@ -44036,6 +44035,11 @@ Description: Elbasan
Added: 2010-08-16 Added: 2010-08-16
%% %%
Type: script Type: script
Subtag: Elym
Description: Elymaic
Added: 2018-10-28
%%
Type: script
Subtag: Ethi Subtag: Ethi
Description: Ethiopic Description: Ethiopic
Description: Geʻez Description: Geʻez
@ -44432,6 +44436,11 @@ Description: Burmese
Added: 2005-10-16 Added: 2005-10-16
%% %%
Type: script Type: script
Subtag: Nand
Description: Nandinagari
Added: 2018-10-28
%%
Type: script
Subtag: Narb Subtag: Narb
Description: Old North Arabian Description: Old North Arabian
Description: Ancient North Arabian Description: Ancient North Arabian
@ -46032,6 +46041,8 @@ Added: 2005-10-16
%% %%
Type: region Type: region
Subtag: SZ Subtag: SZ
Description: Eswatini
Description: eSwatini
Description: Swaziland Description: Swaziland
Added: 2005-10-16 Added: 2005-10-16
%% %%

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# #
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# #
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# #
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -64,8 +64,9 @@ ifeq ($(call check-jvm-feature, dtrace), true)
include lib/JvmFeatures.gmk include lib/JvmFeatures.gmk
include lib/JvmFlags.gmk include lib/JvmFlags.gmk
# We cannot compile until the JVMTI gensrc has finished # We cannot compile until the JVMTI and JFR gensrc has finished
JVMTI_H := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jvmtifiles/jvmti.h JVMTI_H := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jvmtifiles/jvmti.h
JFR_FILES := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jfrfiles/jfrEventClasses.hpp
$(eval $(call SetupNativeCompilation, BUILD_DTRACE_GEN_OFFSETS, \ $(eval $(call SetupNativeCompilation, BUILD_DTRACE_GEN_OFFSETS, \
NAME := dtraceGenOffsets, \ NAME := dtraceGenOffsets, \
@ -76,7 +77,7 @@ ifeq ($(call check-jvm-feature, dtrace), true)
CFLAGS := -m64 $(JVM_CFLAGS), \ CFLAGS := -m64 $(JVM_CFLAGS), \
DISABLED_WARNINGS_solstudio := hidef w_novirtualdescr unknownpragma \ DISABLED_WARNINGS_solstudio := hidef w_novirtualdescr unknownpragma \
doubunder nokeyworddefine wunreachable, \ doubunder nokeyworddefine wunreachable, \
EXTRA_DEPS := $(JVMTI_H), \ EXTRA_DEPS := $(JVMTI_H) $(JFR_FILES), \
OBJECT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets/objs, \ OBJECT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets/objs, \
OUTPUT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets, \ OUTPUT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets, \
)) ))

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
~ Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. ~ Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
~ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ~ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
~ ~
~ This code is free software; you can redistribute it and/or modify it ~ This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -41,7 +41,7 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
EXTRA_SRC := common, \ EXTRA_SRC := common, \
OPTIMIZATION := LOW, \ OPTIMIZATION := LOW, \
DISABLED_WARNINGS_microsoft := 4311 4302 4312, \ DISABLED_WARNINGS_microsoft := 4311 4302 4312, \
CFLAGS := $(CFLAGS_JDKLIB) \ CFLAGS := $(filter-out -MD, $(CFLAGS_JDKLIB)) -MT \
-DACCESSBRIDGE_ARCH_$2, \ -DACCESSBRIDGE_ARCH_$2, \
EXTRA_HEADER_DIRS := \ EXTRA_HEADER_DIRS := \
include/bridge \ include/bridge \

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
@ -278,7 +278,7 @@
<arg value="${javadoc.option}"/> <arg value="${javadoc.option}"/>
<fileset dir="${nashorn.module.src.dir}" includes="**/*.java"/> <fileset dir="${nashorn.module.src.dir}" includes="**/*.java"/>
<fileset dir="${dynalink.module.src.dir}" includes="**/*.java"/> <fileset dir="${dynalink.module.src.dir}" includes="**/*.java"/>
<link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.pkg.list}"/> <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.element.list}"/>
</javadoc> </javadoc>
</target> </target>
@ -296,7 +296,7 @@
<arg value="."/> <arg value="."/>
<arg value="${javadoc.option}"/> <arg value="${javadoc.option}"/>
<fileset dir="${nashorn.module.src.dir}" includes="jdk/nashorn/api/**/*.java"/> <fileset dir="${nashorn.module.src.dir}" includes="jdk/nashorn/api/**/*.java"/>
<link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.pkg.list}"/> <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.element.list}"/>
</javadoc> </javadoc>
</target> </target>
@ -314,7 +314,7 @@
<arg value="."/> <arg value="."/>
<arg value="${javadoc.option}"/> <arg value="${javadoc.option}"/>
<fileset dir="${dynalink.module.src.dir}" includes="**/*.java"/> <fileset dir="${dynalink.module.src.dir}" includes="**/*.java"/>
<link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.pkg.list}"/> <link offline="true" href="${javadoc.base.url}" packagelistLoc="${javadoc.element.list}"/>
</javadoc> </javadoc>
</target> </target>
@ -835,8 +835,8 @@ grant codeBase "file:/${basedir}/${test.script.dir}/basic/JDK-8158467.js" {
<!-- yui --> <!-- yui -->
<mkdir dir="${test.external.dir}/yui"/> <mkdir dir="${test.external.dir}/yui"/>
<get src="http://yui.yahooapis.com/3.5.1/build/yui/yui.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true"/> <get src="http://yui.yahooapis.com/3.5.1/build/yui/yui.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true" tryGzipEncoding="true"/>
<get src="http://yui.yahooapis.com/3.5.1/build/yui/yui-min.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true"/> <get src="http://yui.yahooapis.com/3.5.1/build/yui/yui-min.js" dest="${test.external.dir}/yui" skipexisting="true" ignoreerrors="true" tryGzipEncoding="true"/>
<!-- showdown --> <!-- showdown -->
<mkdir dir="${test.external.dir}/showdown"/> <mkdir dir="${test.external.dir}/showdown"/>

View File

@ -1,52 +1,8 @@
com.sun.jarsigner module:java.base
com.sun.java.accessibility.util
com.sun.javadoc
com.sun.jdi
com.sun.jdi.connect
com.sun.jdi.connect.spi
com.sun.jdi.event
com.sun.jdi.request
com.sun.management
com.sun.net.httpserver
com.sun.net.httpserver.spi
com.sun.nio.sctp
com.sun.security.auth
com.sun.security.auth.callback
com.sun.security.auth.login
com.sun.security.auth.module
com.sun.security.jgss
com.sun.source.doctree
com.sun.source.tree
com.sun.source.util
com.sun.tools.attach
com.sun.tools.attach.spi
com.sun.tools.doclets
com.sun.tools.doclets.standard
com.sun.tools.javac
com.sun.tools.javadoc
com.sun.tools.jconsole
java.applet
java.awt
java.awt.color
java.awt.datatransfer
java.awt.desktop
java.awt.dnd
java.awt.event
java.awt.font
java.awt.geom
java.awt.im
java.awt.im.spi
java.awt.image
java.awt.image.renderable
java.awt.print
java.beans
java.beans.beancontext
java.io java.io
java.lang java.lang
java.lang.annotation java.lang.annotation
java.lang.instrument
java.lang.invoke java.lang.invoke
java.lang.management
java.lang.module java.lang.module
java.lang.ref java.lang.ref
java.lang.reflect java.lang.reflect
@ -61,17 +17,11 @@ java.nio.charset.spi
java.nio.file java.nio.file
java.nio.file.attribute java.nio.file.attribute
java.nio.file.spi java.nio.file.spi
java.rmi
java.rmi.activation
java.rmi.dgc
java.rmi.registry
java.rmi.server
java.security java.security
java.security.acl java.security.acl
java.security.cert java.security.cert
java.security.interfaces java.security.interfaces
java.security.spec java.security.spec
java.sql
java.text java.text
java.text.spi java.text.spi
java.time java.time
@ -85,56 +35,47 @@ java.util.concurrent.atomic
java.util.concurrent.locks java.util.concurrent.locks
java.util.function java.util.function
java.util.jar java.util.jar
java.util.logging
java.util.prefs
java.util.regex java.util.regex
java.util.spi java.util.spi
java.util.stream java.util.stream
java.util.zip java.util.zip
javafx.animation
javafx.application
javafx.beans
javafx.beans.binding
javafx.beans.property
javafx.beans.property.adapter
javafx.beans.value
javafx.collections
javafx.collections.transformation
javafx.concurrent
javafx.css
javafx.css.converter
javafx.embed.swing
javafx.event
javafx.fxml
javafx.geometry
javafx.print
javafx.scene
javafx.scene.canvas
javafx.scene.chart
javafx.scene.control
javafx.scene.control.cell
javafx.scene.control.skin
javafx.scene.effect
javafx.scene.image
javafx.scene.input
javafx.scene.layout
javafx.scene.media
javafx.scene.paint
javafx.scene.shape
javafx.scene.text
javafx.scene.transform
javafx.scene.web
javafx.stage
javafx.util
javafx.util.converter
javax.accessibility
javax.activation
javax.activity
javax.annotation
javax.annotation.processing
javax.crypto javax.crypto
javax.crypto.interfaces javax.crypto.interfaces
javax.crypto.spec 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
module:java.compiler
javax.annotation.processing
javax.lang.model
javax.lang.model.element
javax.lang.model.type
javax.lang.model.util
javax.tools
module:java.datatransfer
java.awt.datatransfer
module:java.desktop
java.applet
java.awt
java.awt.color
java.awt.desktop
java.awt.dnd
java.awt.event
java.awt.font
java.awt.geom
java.awt.im
java.awt.im.spi
java.awt.image
java.awt.image.renderable
java.awt.print
java.beans
java.beans.beancontext
javax.accessibility
javax.imageio javax.imageio
javax.imageio.event javax.imageio.event
javax.imageio.metadata javax.imageio.metadata
@ -143,54 +84,14 @@ javax.imageio.plugins.jpeg
javax.imageio.plugins.tiff javax.imageio.plugins.tiff
javax.imageio.spi javax.imageio.spi
javax.imageio.stream javax.imageio.stream
javax.jnlp
javax.jws
javax.jws.soap
javax.lang.model
javax.lang.model.element
javax.lang.model.type
javax.lang.model.util
javax.management
javax.management.loading
javax.management.modelmbean
javax.management.monitor
javax.management.openmbean
javax.management.relation
javax.management.remote
javax.management.remote.rmi
javax.management.timer
javax.naming
javax.naming.directory
javax.naming.event
javax.naming.ldap
javax.naming.spi
javax.net
javax.net.ssl
javax.print javax.print
javax.print.attribute javax.print.attribute
javax.print.attribute.standard javax.print.attribute.standard
javax.print.event javax.print.event
javax.rmi
javax.rmi.CORBA
javax.rmi.ssl
javax.script
javax.security.auth
javax.security.auth.callback
javax.security.auth.kerberos
javax.security.auth.login
javax.security.auth.spi
javax.security.auth.x500
javax.security.cert
javax.security.sasl
javax.smartcardio
javax.sound.midi javax.sound.midi
javax.sound.midi.spi javax.sound.midi.spi
javax.sound.sampled javax.sound.sampled
javax.sound.sampled.spi javax.sound.sampled.spi
javax.sql
javax.sql.rowset
javax.sql.rowset.serial
javax.sql.rowset.spi
javax.swing javax.swing
javax.swing.border javax.swing.border
javax.swing.colorchooser javax.swing.colorchooser
@ -209,27 +110,64 @@ javax.swing.text.html.parser
javax.swing.text.rtf javax.swing.text.rtf
javax.swing.tree javax.swing.tree
javax.swing.undo javax.swing.undo
javax.tools module:java.instrument
javax.transaction java.lang.instrument
module:java.logging
java.util.logging
module:java.management
java.lang.management
javax.management
javax.management.loading
javax.management.modelmbean
javax.management.monitor
javax.management.openmbean
javax.management.relation
javax.management.remote
javax.management.timer
module:java.management.rmi
javax.management.remote.rmi
module:java.naming
javax.naming
javax.naming.directory
javax.naming.event
javax.naming.ldap
javax.naming.spi
module:java.net.http
java.net.http
module:java.prefs
java.util.prefs
module:java.rmi
java.rmi
java.rmi.activation
java.rmi.dgc
java.rmi.registry
java.rmi.server
javax.rmi.ssl
module:java.scripting
javax.script
module:java.se
module:java.security.jgss
javax.security.auth.kerberos
org.ietf.jgss
module:java.security.sasl
javax.security.sasl
module:java.smartcardio
javax.smartcardio
module:java.sql
java.sql
javax.sql
module:java.sql.rowset
javax.sql.rowset
javax.sql.rowset.serial
javax.sql.rowset.spi
module:java.transaction.xa
javax.transaction.xa javax.transaction.xa
module:java.xml
javax.xml javax.xml
javax.xml.bind
javax.xml.bind.annotation
javax.xml.bind.annotation.adapters
javax.xml.bind.attachment
javax.xml.bind.helpers
javax.xml.bind.util
javax.xml.catalog javax.xml.catalog
javax.xml.crypto
javax.xml.crypto.dom
javax.xml.crypto.dsig
javax.xml.crypto.dsig.dom
javax.xml.crypto.dsig.keyinfo
javax.xml.crypto.dsig.spec
javax.xml.datatype javax.xml.datatype
javax.xml.namespace javax.xml.namespace
javax.xml.parsers javax.xml.parsers
javax.xml.soap
javax.xml.stream javax.xml.stream
javax.xml.stream.events javax.xml.stream.events
javax.xml.stream.util javax.xml.stream.util
@ -239,76 +177,106 @@ javax.xml.transform.sax
javax.xml.transform.stax javax.xml.transform.stax
javax.xml.transform.stream javax.xml.transform.stream
javax.xml.validation javax.xml.validation
javax.xml.ws
javax.xml.ws.handler
javax.xml.ws.handler.soap
javax.xml.ws.http
javax.xml.ws.soap
javax.xml.ws.spi
javax.xml.ws.spi.http
javax.xml.ws.wsaddressing
javax.xml.xpath javax.xml.xpath
org.w3c.dom
org.w3c.dom.bootstrap
org.w3c.dom.events
org.w3c.dom.ls
org.w3c.dom.ranges
org.w3c.dom.traversal
org.w3c.dom.views
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers
module:java.xml.crypto
javax.xml.crypto
javax.xml.crypto.dom
javax.xml.crypto.dsig
javax.xml.crypto.dsig.dom
javax.xml.crypto.dsig.keyinfo
javax.xml.crypto.dsig.spec
module:jdk.accessibility
com.sun.java.accessibility.util
module:jdk.attach
com.sun.tools.attach
com.sun.tools.attach.spi
module:jdk.charsets
module:jdk.compiler
com.sun.source.doctree
com.sun.source.tree
com.sun.source.util
com.sun.tools.javac
module:jdk.crypto.cryptoki
module:jdk.crypto.ec
module:jdk.dynalink
jdk.dynalink jdk.dynalink
jdk.dynalink.beans jdk.dynalink.beans
jdk.dynalink.linker jdk.dynalink.linker
jdk.dynalink.linker.support jdk.dynalink.linker.support
jdk.dynalink.support jdk.dynalink.support
jdk.incubator.http module:jdk.editpad
module:jdk.hotspot.agent
module:jdk.httpserver
com.sun.net.httpserver
com.sun.net.httpserver.spi
module:jdk.jartool
com.sun.jarsigner
jdk.security.jarsigner
module:jdk.javadoc
com.sun.javadoc
com.sun.tools.javadoc
jdk.javadoc.doclet jdk.javadoc.doclet
module:jdk.jcmd
module:jdk.jconsole
com.sun.tools.jconsole
module:jdk.jdeps
module:jdk.jdi
com.sun.jdi
com.sun.jdi.connect
com.sun.jdi.connect.spi
com.sun.jdi.event
com.sun.jdi.request
module:jdk.jdwp.agent
module:jdk.jfr
jdk.jfr jdk.jfr
jdk.jfr.consumer jdk.jfr.consumer
module:jdk.jlink
module:jdk.jshell
jdk.jshell jdk.jshell
jdk.jshell.execution jdk.jshell.execution
jdk.jshell.spi jdk.jshell.spi
jdk.jshell.tool jdk.jshell.tool
module:jdk.jsobject
netscape.javascript
module:jdk.jstatd
module:jdk.localedata
module:jdk.management
com.sun.management
module:jdk.management.agent
module:jdk.management.jfr
jdk.management.jfr jdk.management.jfr
jdk.management.resource module:jdk.naming.dns
module:jdk.naming.rmi
module:jdk.net
jdk.net
jdk.nio
module:jdk.pack
module:jdk.rmic
module:jdk.scripting.nashorn
jdk.nashorn.api.scripting jdk.nashorn.api.scripting
jdk.nashorn.api.tree jdk.nashorn.api.tree
jdk.net module:jdk.sctp
jdk.packager.services com.sun.nio.sctp
jdk.security.jarsigner module:jdk.security.auth
netscape.javascript com.sun.security.auth
org.ietf.jgss com.sun.security.auth.callback
org.omg.CORBA com.sun.security.auth.login
org.omg.CORBA_2_3 com.sun.security.auth.module
org.omg.CORBA_2_3.portable module:jdk.security.jgss
org.omg.CORBA.DynAnyPackage com.sun.security.jgss
org.omg.CORBA.ORBPackage module:jdk.xml.dom
org.omg.CORBA.portable
org.omg.CORBA.TypeCodePackage
org.omg.CosNaming
org.omg.CosNaming.NamingContextExtPackage
org.omg.CosNaming.NamingContextPackage
org.omg.Dynamic
org.omg.DynamicAny
org.omg.DynamicAny.DynAnyFactoryPackage
org.omg.DynamicAny.DynAnyPackage
org.omg.IOP
org.omg.IOP.CodecFactoryPackage
org.omg.IOP.CodecPackage
org.omg.Messaging
org.omg.PortableInterceptor
org.omg.PortableInterceptor.ORBInitInfoPackage
org.omg.PortableServer
org.omg.PortableServer.CurrentPackage
org.omg.PortableServer.POAManagerPackage
org.omg.PortableServer.POAPackage
org.omg.PortableServer.portable
org.omg.PortableServer.ServantLocatorPackage
org.omg.SendingContext
org.omg.stub.java.rmi
org.w3c.dom
org.w3c.dom.bootstrap
org.w3c.dom.css org.w3c.dom.css
org.w3c.dom.events
org.w3c.dom.html org.w3c.dom.html
org.w3c.dom.ls
org.w3c.dom.ranges
org.w3c.dom.stylesheets org.w3c.dom.stylesheets
org.w3c.dom.traversal
org.w3c.dom.views
org.w3c.dom.xpath org.w3c.dom.xpath
org.xml.sax module:jdk.zipfs
org.xml.sax.ext
org.xml.sax.helpers

View File

@ -36,8 +36,8 @@ build.compiler=modern
jdk.build.dir=build jdk.build.dir=build
nashorn.make.dir=make/nashorn nashorn.make.dir=make/nashorn
javadoc.base.url=https://docs.oracle.com/javase/9/docs/api/ javadoc.base.url=https://docs.oracle.com/en/java/javase/11/docs/api/
javadoc.pkg.list=make/nashorn javadoc.element.list=make/nashorn
javadoc.option=\ javadoc.option=\
-tag "implSpec:a:Implementation Requirements:" \ -tag "implSpec:a:Implementation Requirements:" \

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# #
# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it

View File

@ -98,7 +98,7 @@ updateChangesetFiles() # changeset
count=0 count=0
files=${tmp}/files.$1 files=${tmp}/files.$1
rm -f ${files} rm -f ${files}
hg log --rev $1 -v --template '{files}\n' | expand \ hg log -l1 --rev $1 -v --template '{files}\n' | expand \
| ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}' \ | ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}' \
> ${files} > ${files}
if [ -f "${files}" -a -s "${files}" ] ; then if [ -f "${files}" -a -s "${files}" ] ; then
@ -120,8 +120,8 @@ updateChangesetFiles() # changeset
printf " ERROR: No files changed in the changeset? Must be a mistake.\n" printf " ERROR: No files changed in the changeset? Must be a mistake.\n"
set -x set -x
ls -al ${files} ls -al ${files}
hg log --rev $1 -v --template '{files}\n' hg log -l1 --rev $1 -v --template '{files}\n'
hg log --rev $1 -v --template '{files}\n' | expand \ hg log -l1 --rev $1 -v --template '{files}\n' | expand \
| ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}' | ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}'
set +x set +x
exit 1 exit 1
@ -150,7 +150,7 @@ if [ -s ${all_changesets} ] ; then
desc=${tmp}/desc.${changeset} desc=${tmp}/desc.${changeset}
rm -f ${desc} rm -f ${desc}
echo "------------------------------------------------" echo "------------------------------------------------"
hg log --rev ${changeset} --template '{desc}\n' > ${desc} hg log -l1 --rev ${changeset} --template '{desc}\n' > ${desc}
printf "%d: %s\n%s\n" ${index} "${changeset}" "`cat ${desc}|head -1`" printf "%d: %s\n%s\n" ${index} "${changeset}" "`cat ${desc}|head -1`"
if [ "${year}" = "2010" ] ; then if [ "${year}" = "2010" ] ; then
if cat ${desc} | fgrep -i "Added tag" > /dev/null ; then if cat ${desc} | fgrep -i "Added tag" > /dev/null ; then

View File

@ -48,28 +48,38 @@ BUILD_JDK_JTREG_OUTPUT_DIR := $(OUTPUTDIR)/support/test/jdk/jtreg/native
BUILD_JDK_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/jdk/jtreg BUILD_JDK_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/jdk/jtreg
BUILD_JDK_JTREG_EXECUTABLES_CFLAGS_exeJliLaunchTest := \
-I$(TOPDIR)/src/java.base/share/native/libjli \
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjli \
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli
# Platform specific setup # Platform specific setup
ifeq ($(OPENJDK_TARGET_OS), windows) ifeq ($(OPENJDK_TARGET_OS), windows)
BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c
WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := $(WIN_LIB_JAVA) BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := $(WIN_LIB_JAVA)
WIN_LIB_JLI := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := $(WIN_LIB_JLI)
else else
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
ifeq ($(OPENJDK_TARGET_OS), linux) ifeq ($(OPENJDK_TARGET_OS), linux)
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
else ifeq ($(OPENJDK_TARGET_OS), solaris) else ifeq ($(OPENJDK_TARGET_OS), solaris)
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lsocket -lnsl
endif endif
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
endif endif
ifeq ($(OPENJDK_TARGET_OS), macosx) ifeq ($(OPENJDK_TARGET_OS), macosx)
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \ BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
-framework Cocoa -framework JavaNativeFoundation -framework Cocoa -framework JavaNativeFoundation
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJniInvocationTest := -ljli
else else
BUILD_JDK_JTREG_EXCLUDE += libTestMainKeyWindow.c BUILD_JDK_JTREG_EXCLUDE += libTestMainKeyWindow.c
BUILD_JDK_JTREG_EXCLUDE += exeJniInvocationTest.c
endif endif
$(eval $(call SetupTestFilesCompilation, BUILD_JDK_JTREG_LIBRARIES, \ $(eval $(call SetupTestFilesCompilation, BUILD_JDK_JTREG_LIBRARIES, \

View File

@ -4013,105 +4013,6 @@ void MacroAssembler::update_1word_crc32(Register crc, Register buf, Register tab
xorr(crc, t0, t2); // Now crc contains the final checksum value. xorr(crc, t0, t2); // Now crc contains the final checksum value.
} }
/**
* @param crc register containing existing CRC (32-bit)
* @param buf register pointing to input byte buffer (byte*)
* @param len register containing number of bytes
* @param table register pointing to CRC table
*
* Uses R9..R12 as work register. Must be saved/restored by caller!
*/
void MacroAssembler::kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
Register t0, Register t1, Register t2, Register t3,
Register tc0, Register tc1, Register tc2, Register tc3,
bool invertCRC) {
assert_different_registers(crc, buf, len, table);
Label L_mainLoop, L_tail;
Register tmp = t0;
Register data = t0;
Register tmp2 = t1;
const int mainLoop_stepping = 8;
const int tailLoop_stepping = 1;
const int log_stepping = exact_log2(mainLoop_stepping);
const int mainLoop_alignment = 32; // InputForNewCode > 4 ? InputForNewCode : 32;
const int complexThreshold = 2*mainLoop_stepping;
// Don't test for len <= 0 here. This pathological case should not occur anyway.
// Optimizing for it by adding a test and a branch seems to be a waste of CPU cycles
// for all well-behaved cases. The situation itself is detected and handled correctly
// within update_byteLoop_crc32.
assert(tailLoop_stepping == 1, "check tailLoop_stepping!");
BLOCK_COMMENT("kernel_crc32_2word {");
if (invertCRC) {
nand(crc, crc, crc); // 1s complement of crc
}
// Check for short (<mainLoop_stepping) buffer.
cmpdi(CCR0, len, complexThreshold);
blt(CCR0, L_tail);
// Pre-mainLoop alignment did show a slight (1%) positive effect on performance.
// We leave the code in for reference. Maybe we need alignment when we exploit vector instructions.
{
// Align buf addr to mainLoop_stepping boundary.
neg(tmp2, buf); // Calculate # preLoop iterations for alignment.
rldicl(tmp2, tmp2, 0, 64-log_stepping); // Rotate tmp2 0 bits, insert into tmp2, anding with mask with 1s from 62..63.
if (complexThreshold > mainLoop_stepping) {
sub(len, len, tmp2); // Remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
} else {
sub(tmp, len, tmp2); // Remaining bytes for main loop.
cmpdi(CCR0, tmp, mainLoop_stepping);
blt(CCR0, L_tail); // For less than one mainloop_stepping left, do only tail processing
mr(len, tmp); // remaining bytes for main loop (>=mainLoop_stepping is guaranteed).
}
update_byteLoop_crc32(crc, buf, tmp2, table, data, false);
}
srdi(tmp2, len, log_stepping); // #iterations for mainLoop
andi(len, len, mainLoop_stepping-1); // remaining bytes for tailLoop
mtctr(tmp2);
#ifdef VM_LITTLE_ENDIAN
Register crc_rv = crc;
#else
Register crc_rv = tmp; // Load_reverse needs separate registers to work on.
// Occupies tmp, but frees up crc.
load_reverse_32(crc_rv, crc); // Revert byte order because we are dealing with big-endian data.
tmp = crc;
#endif
int reconstructTableOffset = crc32_table_columns(table, tc0, tc1, tc2, tc3);
align(mainLoop_alignment); // Octoword-aligned loop address. Shows 2% improvement.
BIND(L_mainLoop);
update_1word_crc32(crc_rv, buf, table, 0, 0, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
update_1word_crc32(crc_rv, buf, table, 4, mainLoop_stepping, crc_rv, t1, t2, t3, tc0, tc1, tc2, tc3);
bdnz(L_mainLoop);
#ifndef VM_LITTLE_ENDIAN
load_reverse_32(crc, crc_rv); // Revert byte order because we are dealing with big-endian data.
tmp = crc_rv; // Tmp uses it's original register again.
#endif
// Restore original table address for tailLoop.
if (reconstructTableOffset != 0) {
addi(table, table, -reconstructTableOffset);
}
// Process last few (<complexThreshold) bytes of buffer.
BIND(L_tail);
update_byteLoop_crc32(crc, buf, len, table, data, false);
if (invertCRC) {
nand(crc, crc, crc); // 1s complement of crc
}
BLOCK_COMMENT("} kernel_crc32_2word");
}
/** /**
* @param crc register containing existing CRC (32-bit) * @param crc register containing existing CRC (32-bit)
* @param buf register pointing to input byte buffer (byte*) * @param buf register pointing to input byte buffer (byte*)

View File

@ -835,10 +835,6 @@ class MacroAssembler: public Assembler {
void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc, void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
Register t0, Register t1, Register t2, Register t3, Register t0, Register t1, Register t2, Register t3,
Register tc0, Register tc1, Register tc2, Register tc3); Register tc0, Register tc1, Register tc2, Register tc3);
void kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
Register t0, Register t1, Register t2, Register t3,
Register tc0, Register tc1, Register tc2, Register tc3,
bool invertCRC);
void kernel_crc32_1word(Register crc, Register buf, Register len, Register table, void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
Register t0, Register t1, Register t2, Register t3, Register t0, Register t1, Register t2, Register t3,
Register tc0, Register tc1, Register tc2, Register tc3, Register tc0, Register tc1, Register tc2, Register tc3,

View File

@ -62,7 +62,6 @@ class ppc64 {
public: public:
// CRC32 Intrinsics. // CRC32 Intrinsics.
static void generate_load_table_addr(MacroAssembler* masm, Register table, address table_addr, uint64_t table_contents);
static void generate_load_crc_table_addr(MacroAssembler* masm, Register table); static void generate_load_crc_table_addr(MacroAssembler* masm, Register table);
static void generate_load_crc_constants_addr(MacroAssembler* masm, Register table); static void generate_load_crc_constants_addr(MacroAssembler* masm, Register table);
static void generate_load_crc_barret_constants_addr(MacroAssembler* masm, Register table); static void generate_load_crc_barret_constants_addr(MacroAssembler* masm, Register table);

View File

@ -6325,75 +6325,6 @@ void MacroAssembler::update_1word_crc32(Register crc, Register buf, Register tab
lgr_if_needed(crc, t0); lgr_if_needed(crc, t0);
} }
/**
* @param crc register containing existing CRC (32-bit)
* @param buf register pointing to input byte buffer (byte*)
* @param len register containing number of bytes
* @param table register pointing to CRC table
*
* uses Z_R10..Z_R13 as work register. Must be saved/restored by caller!
*/
void MacroAssembler::kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
Register t0, Register t1, Register t2, Register t3,
bool invertCRC) {
assert_different_registers(crc, buf, len, table);
Label L_mainLoop, L_tail;
Register data = t0;
Register ctr = Z_R0;
const int mainLoop_stepping = 8;
const int tailLoop_stepping = 1;
const int log_stepping = exact_log2(mainLoop_stepping);
// Don't test for len <= 0 here. This pathological case should not occur anyway.
// Optimizing for it by adding a test and a branch seems to be a waste of CPU cycles.
// The situation itself is detected and handled correctly by the conditional branches
// following aghi(len, -stepping) and aghi(len, +stepping).
if (invertCRC) {
not_(crc, noreg, false); // 1s complement of crc
}
#if 0
{
// Pre-mainLoop alignment did not show any positive effect on performance.
// We leave the code in for reference. Maybe the vector instructions in z13 depend on alignment.
z_cghi(len, mainLoop_stepping); // Alignment is useless for short data streams.
z_brnh(L_tail);
// Align buf to word (4-byte) boundary.
z_lcr(ctr, buf);
rotate_then_insert(ctr, ctr, 62, 63, 0, true); // TODO: should set cc
z_sgfr(len, ctr); // Remaining len after alignment.
update_byteLoop_crc32(crc, buf, ctr, table, data);
}
#endif
// Check for short (<mainLoop_stepping bytes) buffer.
z_srag(ctr, len, log_stepping);
z_brnh(L_tail);
z_lrvr(crc, crc); // Revert byte order because we are dealing with big-endian data.
rotate_then_insert(len, len, 64-log_stepping, 63, 0, true); // #bytes for tailLoop
BIND(L_mainLoop);
update_1word_crc32(crc, buf, table, 0, 0, crc, t1, t2, t3);
update_1word_crc32(crc, buf, table, 4, mainLoop_stepping, crc, t1, t2, t3);
z_brct(ctr, L_mainLoop); // Iterate.
z_lrvr(crc, crc); // Revert byte order back to original.
// Process last few (<8) bytes of buffer.
BIND(L_tail);
update_byteLoop_crc32(crc, buf, len, table, data);
if (invertCRC) {
not_(crc, noreg, false); // 1s complement of crc
}
}
/** /**
* @param crc register containing existing CRC (32-bit) * @param crc register containing existing CRC (32-bit)
* @param buf register pointing to input byte buffer (byte*) * @param buf register pointing to input byte buffer (byte*)

View File

@ -1056,9 +1056,6 @@ class MacroAssembler: public Assembler {
void kernel_crc32_1word(Register crc, Register buf, Register len, Register table, void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
Register t0, Register t1, Register t2, Register t3, Register t0, Register t1, Register t2, Register t3,
bool invertCRC); bool invertCRC);
void kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
Register t0, Register t1, Register t2, Register t3,
bool invertCRC);
// Emitters for BigInteger.multiplyToLen intrinsic // Emitters for BigInteger.multiplyToLen intrinsic
// note: length of result array (zlen) is passed on the stack // note: length of result array (zlen) is passed on the stack

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -50,6 +50,10 @@ using namespace std;
#define strdup _strdup #define strdup _strdup
#endif #endif
#if _MSC_VER < 1900
#define snprintf _snprintf
#endif
#ifndef _INTPTR_T_DEFINED #ifndef _INTPTR_T_DEFINED
#ifdef _WIN64 #ifdef _WIN64
typedef __int64 intptr_t; typedef __int64 intptr_t;

View File

@ -719,21 +719,21 @@ const char *Expr::compute_external(const Expr *c1, const Expr *c2) {
// Preserve use of external name which has a zero value // Preserve use of external name which has a zero value
if( c1->_external_name != NULL ) { if( c1->_external_name != NULL ) {
sprintf(string_buffer, "%s", c1->as_string()); if( c2->is_zero() ) {
if( !c2->is_zero() ) { snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c1->as_string());
strncat(string_buffer, "+", STRING_BUFFER_LENGTH); } else {
strncat(string_buffer, c2->as_string(), STRING_BUFFER_LENGTH); snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s+%s", c1->as_string(), c2->as_string());
} }
string_buffer[STRING_BUFFER_LENGTH - 1] = '\0';
result = strdup(string_buffer); result = strdup(string_buffer);
} }
else if( c2->_external_name != NULL ) { else if( c2->_external_name != NULL ) {
if( !c1->is_zero() ) { if( c1->is_zero() ) {
sprintf(string_buffer, "%s", c1->as_string()); snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c2->_external_name);
strncat(string_buffer, " + ", STRING_BUFFER_LENGTH);
} else { } else {
string_buffer[0] = '\0'; snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s + %s", c1->as_string(), c2->as_string());
} }
strncat(string_buffer, c2->_external_name, STRING_BUFFER_LENGTH); string_buffer[STRING_BUFFER_LENGTH - 1] = '\0';
result = strdup(string_buffer); result = strdup(string_buffer);
} }
return result; return result;
@ -741,18 +741,19 @@ const char *Expr::compute_external(const Expr *c1, const Expr *c2) {
const char *Expr::compute_expr(const Expr *c1, const Expr *c2) { const char *Expr::compute_expr(const Expr *c1, const Expr *c2) {
if( !c1->is_zero() ) { if( !c1->is_zero() ) {
sprintf( string_buffer, "%s", c1->_expr); if( c2->is_zero() ) {
if( !c2->is_zero() ) { snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c1->_expr);
strncat(string_buffer, "+", STRING_BUFFER_LENGTH); } else {
strncat(string_buffer, c2->_expr, STRING_BUFFER_LENGTH); snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s+%s", c1->_expr, c2->_expr);
} }
} }
else if( !c2->is_zero() ) { else if( !c2->is_zero() ) {
sprintf( string_buffer, "%s", c2->_expr); snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c2->_expr);
} }
else { else {
sprintf( string_buffer, "0"); sprintf( string_buffer, "0");
} }
string_buffer[STRING_BUFFER_LENGTH - 1] = '\0';
char *cost = strdup(string_buffer); char *cost = strdup(string_buffer);
return cost; return cost;

View File

@ -57,7 +57,7 @@ ciInstanceKlass::ciInstanceKlass(Klass* k) :
AccessFlags access_flags = ik->access_flags(); AccessFlags access_flags = ik->access_flags();
_flags = ciFlags(access_flags); _flags = ciFlags(access_flags);
_has_finalizer = access_flags.has_finalizer(); _has_finalizer = access_flags.has_finalizer();
_has_subklass = ik->subklass() != NULL; _has_subklass = flags().is_final() ? subklass_false : subklass_unknown;
_init_state = ik->init_state(); _init_state = ik->init_state();
_nonstatic_field_size = ik->nonstatic_field_size(); _nonstatic_field_size = ik->nonstatic_field_size();
_has_nonstatic_fields = ik->has_nonstatic_fields(); _has_nonstatic_fields = ik->has_nonstatic_fields();
@ -147,8 +147,8 @@ void ciInstanceKlass::compute_shared_init_state() {
bool ciInstanceKlass::compute_shared_has_subklass() { bool ciInstanceKlass::compute_shared_has_subklass() {
GUARDED_VM_ENTRY( GUARDED_VM_ENTRY(
InstanceKlass* ik = get_instanceKlass(); InstanceKlass* ik = get_instanceKlass();
_has_subklass = ik->subklass() != NULL; _has_subklass = ik->subklass() != NULL ? subklass_true : subklass_false;
return _has_subklass; return _has_subklass == subklass_true;
) )
} }
@ -583,7 +583,7 @@ bool ciInstanceKlass::is_leaf_type() {
if (is_shared()) { if (is_shared()) {
return is_final(); // approximately correct return is_final(); // approximately correct
} else { } else {
return !_has_subklass && (nof_implementors() == 0); return !has_subklass() && (nof_implementors() == 0);
} }
} }

View File

@ -44,13 +44,15 @@ class ciInstanceKlass : public ciKlass {
friend class ciField; friend class ciField;
private: private:
enum SubklassValue { subklass_unknown, subklass_false, subklass_true };
jobject _loader; jobject _loader;
jobject _protection_domain; jobject _protection_domain;
InstanceKlass::ClassState _init_state; // state of class InstanceKlass::ClassState _init_state; // state of class
bool _is_shared; bool _is_shared;
bool _has_finalizer; bool _has_finalizer;
bool _has_subklass; SubklassValue _has_subklass;
bool _has_nonstatic_fields; bool _has_nonstatic_fields;
bool _has_nonstatic_concrete_methods; bool _has_nonstatic_concrete_methods;
bool _is_unsafe_anonymous; bool _is_unsafe_anonymous;
@ -139,14 +141,15 @@ public:
return _has_finalizer; } return _has_finalizer; }
bool has_subklass() { bool has_subklass() {
assert(is_loaded(), "must be loaded"); assert(is_loaded(), "must be loaded");
if (_is_shared && !_has_subklass) { if (_has_subklass == subklass_unknown ||
(_is_shared && _has_subklass == subklass_false)) {
if (flags().is_final()) { if (flags().is_final()) {
return false; return false;
} else { } else {
return compute_shared_has_subklass(); return compute_shared_has_subklass();
} }
} }
return _has_subklass; return _has_subklass == subklass_true;
} }
jint size_helper() { jint size_helper() {
return (Klass::layout_helper_size_in_bytes(layout_helper()) return (Klass::layout_helper_size_in_bytes(layout_helper())

View File

@ -198,18 +198,29 @@ void ciReceiverTypeData::translate_receiver_data_from(const ProfileData* data) {
} }
} }
void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) { void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {
for (int i = 0; i < number_of_entries(); i++) { for (int i = 0; i < number_of_entries(); i++) {
intptr_t k = entries->type(i); intptr_t k = entries->type(i);
Klass* klass = (Klass*)klass_part(k);
if (klass != NULL && !klass->is_loader_alive()) {
// With concurrent class unloading, the MDO could have stale metadata; override it
TypeStackSlotEntries::set_type(i, TypeStackSlotEntries::with_status((Klass*)NULL, k));
} else {
TypeStackSlotEntries::set_type(i, translate_klass(k)); TypeStackSlotEntries::set_type(i, translate_klass(k));
} }
} }
}
void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) { void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
intptr_t k = ret->type(); intptr_t k = ret->type();
Klass* klass = (Klass*)klass_part(k);
if (klass != NULL && !klass->is_loader_alive()) {
// With concurrent class unloading, the MDO could have stale metadata; override it
set_type(ReturnTypeEntry::with_status((Klass*)NULL, k));
} else {
set_type(translate_klass(k)); set_type(translate_klass(k));
} }
}
void ciSpeculativeTrapData::translate_from(const ProfileData* data) { void ciSpeculativeTrapData::translate_from(const ProfileData* data) {
Method* m = data->as_SpeculativeTrapData()->method(); Method* m = data->as_SpeculativeTrapData()->method();

View File

@ -29,6 +29,7 @@
#include "classfile/metadataOnStackMark.hpp" #include "classfile/metadataOnStackMark.hpp"
#include "classfile/moduleEntry.hpp" #include "classfile/moduleEntry.hpp"
#include "classfile/packageEntry.hpp" #include "classfile/packageEntry.hpp"
#include "code/dependencyContext.hpp"
#include "logging/log.hpp" #include "logging/log.hpp"
#include "logging/logStream.hpp" #include "logging/logStream.hpp"
#include "memory/allocation.inline.hpp" #include "memory/allocation.inline.hpp"
@ -597,6 +598,7 @@ void ClassLoaderDataGraph::purge() {
Metaspace::purge(); Metaspace::purge();
set_metaspace_oom(false); set_metaspace_oom(false);
} }
DependencyContext::purge_dependency_contexts();
} }
int ClassLoaderDataGraph::resize_if_needed() { int ClassLoaderDataGraph::resize_if_needed() {

View File

@ -375,6 +375,9 @@ public:
inline int remain() { inline int remain() {
return (int)(_end - _p); return (int)(_end - _p);
} }
int last_line_no() {
return _line_no - 1;
}
void corrupted(const char *p, const char *msg); void corrupted(const char *p, const char *msg);

View File

@ -3741,6 +3741,7 @@ oop java_lang_invoke_CallSite::context_no_keepalive(oop call_site) {
// Support for java_lang_invoke_MethodHandleNatives_CallSiteContext // Support for java_lang_invoke_MethodHandleNatives_CallSiteContext
int java_lang_invoke_MethodHandleNatives_CallSiteContext::_vmdependencies_offset; int java_lang_invoke_MethodHandleNatives_CallSiteContext::_vmdependencies_offset;
int java_lang_invoke_MethodHandleNatives_CallSiteContext::_last_cleanup_offset;
void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() { void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() {
InstanceKlass* k = SystemDictionary::Context_klass(); InstanceKlass* k = SystemDictionary::Context_klass();
@ -3755,8 +3756,9 @@ void java_lang_invoke_MethodHandleNatives_CallSiteContext::serialize_offsets(Ser
DependencyContext java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) { DependencyContext java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) {
assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), ""); assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), "");
intptr_t* vmdeps_addr = (intptr_t*)call_site->field_addr(_vmdependencies_offset); nmethodBucket* volatile* vmdeps_addr = (nmethodBucket* volatile*)call_site->field_addr(_vmdependencies_offset);
DependencyContext dep_ctx(vmdeps_addr); volatile uint64_t* last_cleanup_addr = (volatile uint64_t*)call_site->field_addr(_last_cleanup_offset);
DependencyContext dep_ctx(vmdeps_addr, last_cleanup_addr);
return dep_ctx; return dep_ctx;
} }

View File

@ -1201,7 +1201,8 @@ public:
// Interface to java.lang.invoke.MethodHandleNatives$CallSiteContext objects // Interface to java.lang.invoke.MethodHandleNatives$CallSiteContext objects
#define CALLSITECONTEXT_INJECTED_FIELDS(macro) \ #define CALLSITECONTEXT_INJECTED_FIELDS(macro) \
macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, vmdependencies, intptr_signature, false) macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, vmdependencies, intptr_signature, false) \
macro(java_lang_invoke_MethodHandleNatives_CallSiteContext, last_cleanup, long_signature, false)
class DependencyContext; class DependencyContext;
@ -1210,6 +1211,7 @@ class java_lang_invoke_MethodHandleNatives_CallSiteContext : AllStatic {
private: private:
static int _vmdependencies_offset; static int _vmdependencies_offset;
static int _last_cleanup_offset;
static void compute_offsets(); static void compute_offsets();

View File

@ -426,6 +426,7 @@
template(signers_name, "signers_name") \ template(signers_name, "signers_name") \
template(loader_data_name, "loader_data") \ template(loader_data_name, "loader_data") \
template(vmdependencies_name, "vmdependencies") \ template(vmdependencies_name, "vmdependencies") \
template(last_cleanup_name, "last_cleanup") \
template(loader_name, "loader") \ template(loader_name, "loader") \
template(getModule_name, "getModule") \ template(getModule_name, "getModule") \
template(input_stream_void_signature, "(Ljava/io/InputStream;)V") \ template(input_stream_void_signature, "(Ljava/io/InputStream;)V") \

View File

@ -116,7 +116,12 @@ protected:
CodeBlob(const char* name, CompilerType type, const CodeBlobLayout& layout, int frame_complete_offset, int frame_size, ImmutableOopMapSet* oop_maps, bool caller_must_gc_arguments); CodeBlob(const char* name, CompilerType type, const CodeBlobLayout& layout, int frame_complete_offset, int frame_size, ImmutableOopMapSet* oop_maps, bool caller_must_gc_arguments);
CodeBlob(const char* name, CompilerType type, const CodeBlobLayout& layout, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments); CodeBlob(const char* name, CompilerType type, const CodeBlobLayout& layout, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments);
public: public:
// Only used by unit test.
CodeBlob()
: _type(compiler_none) {}
// Returns the space needed for CodeBlob // Returns the space needed for CodeBlob
static unsigned int allocation_size(CodeBuffer* cb, int header_size); static unsigned int allocation_size(CodeBuffer* cb, int header_size);
static unsigned int align_code_offset(int offset); static unsigned int align_code_offset(int offset);

View File

@ -29,6 +29,7 @@
#include "code/codeHeapState.hpp" #include "code/codeHeapState.hpp"
#include "code/compiledIC.hpp" #include "code/compiledIC.hpp"
#include "code/dependencies.hpp" #include "code/dependencies.hpp"
#include "code/dependencyContext.hpp"
#include "code/icBuffer.hpp" #include "code/icBuffer.hpp"
#include "code/nmethod.hpp" #include "code/nmethod.hpp"
#include "code/pcDesc.hpp" #include "code/pcDesc.hpp"
@ -940,6 +941,19 @@ void CodeCache::increment_unloading_cycle() {
} }
} }
CodeCache::UnloadingScope::UnloadingScope(BoolObjectClosure* is_alive)
: _is_unloading_behaviour(is_alive)
{
IsUnloadingBehaviour::set_current(&_is_unloading_behaviour);
increment_unloading_cycle();
DependencyContext::cleaning_start();
}
CodeCache::UnloadingScope::~UnloadingScope() {
IsUnloadingBehaviour::set_current(NULL);
DependencyContext::cleaning_end();
}
void CodeCache::verify_oops() { void CodeCache::verify_oops() {
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
VerifyOopClosure voc; VerifyOopClosure voc;

View File

@ -180,17 +180,10 @@ class CodeCache : AllStatic {
ClosureIsUnloadingBehaviour _is_unloading_behaviour; ClosureIsUnloadingBehaviour _is_unloading_behaviour;
public: public:
UnloadingScope(BoolObjectClosure* is_alive) UnloadingScope(BoolObjectClosure* is_alive);
: _is_unloading_behaviour(is_alive) ~UnloadingScope();
{
IsUnloadingBehaviour::set_current(&_is_unloading_behaviour);
increment_unloading_cycle();
}
~UnloadingScope() {
IsUnloadingBehaviour::set_current(NULL);
}
}; };
static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred); static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);
static uint8_t unloading_cycle() { return _unloading_cycle; } static uint8_t unloading_cycle() { return _unloading_cycle; }
static void increment_unloading_cycle(); static void increment_unloading_cycle();

View File

@ -177,6 +177,9 @@ protected:
CompiledMethod(Method* method, const char* name, CompilerType type, int size, int header_size, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments); CompiledMethod(Method* method, const char* name, CompilerType type, int size, int header_size, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments);
public: public:
// Only used by unit test.
CompiledMethod() {}
virtual bool is_compiled() const { return true; } virtual bool is_compiled() const { return true; }
template<typename T> template<typename T>

View File

@ -35,6 +35,8 @@ PerfCounter* DependencyContext::_perf_total_buckets_allocated_count = NULL;
PerfCounter* DependencyContext::_perf_total_buckets_deallocated_count = NULL; PerfCounter* DependencyContext::_perf_total_buckets_deallocated_count = NULL;
PerfCounter* DependencyContext::_perf_total_buckets_stale_count = NULL; PerfCounter* DependencyContext::_perf_total_buckets_stale_count = NULL;
PerfCounter* DependencyContext::_perf_total_buckets_stale_acc_count = NULL; PerfCounter* DependencyContext::_perf_total_buckets_stale_acc_count = NULL;
nmethodBucket* volatile DependencyContext::_purge_list = NULL;
volatile uint64_t DependencyContext::_cleaning_epoch = 0;
void dependencyContext_init() { void dependencyContext_init() {
DependencyContext::init(); DependencyContext::init();
@ -61,7 +63,7 @@ void DependencyContext::init() {
// //
int DependencyContext::mark_dependent_nmethods(DepChange& changes) { int DependencyContext::mark_dependent_nmethods(DepChange& changes) {
int found = 0; int found = 0;
for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
nmethod* nm = b->get_nmethod(); nmethod* nm = b->get_nmethod();
// since dependencies aren't removed until an nmethod becomes a zombie, // since dependencies aren't removed until an nmethod becomes a zombie,
// the dependency list may contain nmethods which aren't alive. // the dependency list may contain nmethods which aren't alive.
@ -86,21 +88,49 @@ int DependencyContext::mark_dependent_nmethods(DepChange& changes) {
// so a count is kept for each bucket to guarantee that creation and // so a count is kept for each bucket to guarantee that creation and
// deletion of dependencies is consistent. // deletion of dependencies is consistent.
// //
void DependencyContext::add_dependent_nmethod(nmethod* nm, bool expunge) { void DependencyContext::add_dependent_nmethod(nmethod* nm) {
assert_lock_strong(CodeCache_lock); assert_lock_strong(CodeCache_lock);
for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
if (nm == b->get_nmethod()) { if (nm == b->get_nmethod()) {
b->increment(); b->increment();
return; return;
} }
} }
set_dependencies(new nmethodBucket(nm, dependencies())); nmethodBucket* new_head = new nmethodBucket(nm, NULL);
for (;;) {
nmethodBucket* head = Atomic::load(_dependency_context_addr);
new_head->set_next(head);
if (Atomic::cmpxchg(new_head, _dependency_context_addr, head) == head) {
break;
}
}
if (UsePerfData) { if (UsePerfData) {
_perf_total_buckets_allocated_count->inc(); _perf_total_buckets_allocated_count->inc();
} }
}
void DependencyContext::release(nmethodBucket* b) {
bool expunge = Atomic::load(&_cleaning_epoch) == 0;
if (expunge) { if (expunge) {
// Remove stale entries from the list. assert_locked_or_safepoint(CodeCache_lock);
expunge_stale_entries(); delete b;
if (UsePerfData) {
_perf_total_buckets_deallocated_count->inc();
}
} else {
// Mark the context as having stale entries, since it is not safe to
// expunge the list right now.
for (;;) {
nmethodBucket* purge_list_head = Atomic::load(&_purge_list);
b->set_purge_list_next(purge_list_head);
if (Atomic::cmpxchg(b, &_purge_list, purge_list_head) == purge_list_head) {
break;
}
}
if (UsePerfData) {
_perf_total_buckets_stale_count->inc();
_perf_total_buckets_stale_acc_count->inc();
}
} }
} }
@ -111,92 +141,71 @@ void DependencyContext::add_dependent_nmethod(nmethod* nm, bool expunge) {
// a corresponding bucket otherwise there's a bug in the recording of dependencies. // a corresponding bucket otherwise there's a bug in the recording of dependencies.
// Can be called concurrently by parallel GC threads. // Can be called concurrently by parallel GC threads.
// //
void DependencyContext::remove_dependent_nmethod(nmethod* nm, bool expunge) { void DependencyContext::remove_dependent_nmethod(nmethod* nm) {
assert_locked_or_safepoint(CodeCache_lock); assert_locked_or_safepoint(CodeCache_lock);
nmethodBucket* first = dependencies(); nmethodBucket* first = dependencies_not_unloading();
nmethodBucket* last = NULL; nmethodBucket* last = NULL;
for (nmethodBucket* b = first; b != NULL; b = b->next()) { for (nmethodBucket* b = first; b != NULL; b = b->next_not_unloading()) {
if (nm == b->get_nmethod()) { if (nm == b->get_nmethod()) {
int val = b->decrement(); int val = b->decrement();
guarantee(val >= 0, "Underflow: %d", val); guarantee(val >= 0, "Underflow: %d", val);
if (val == 0) { if (val == 0) {
if (expunge) {
if (last == NULL) { if (last == NULL) {
set_dependencies(b->next()); // If there was not a head that was not unloading, we can set a new
// head without a CAS, because we know there is no contending cleanup.
set_dependencies(b->next_not_unloading());
} else { } else {
last->set_next(b->next()); // Only supports a single inserting thread (protected by CodeCache_lock)
// for now. Therefore, the next pointer only competes with another cleanup
// operation. That interaction does not need a CAS.
last->set_next(b->next_not_unloading());
} }
delete b; release(b);
if (UsePerfData) {
_perf_total_buckets_deallocated_count->inc();
}
} else {
// Mark the context as having stale entries, since it is not safe to
// expunge the list right now.
set_has_stale_entries(true);
if (UsePerfData) {
_perf_total_buckets_stale_count->inc();
_perf_total_buckets_stale_acc_count->inc();
}
}
}
if (expunge) {
// Remove stale entries from the list.
expunge_stale_entries();
} }
return; return;
} }
last = b; last = b;
} }
#ifdef ASSERT
tty->print_raw_cr("### can't find dependent nmethod");
nm->print();
#endif // ASSERT
ShouldNotReachHere();
} }
// //
// Reclaim all unused buckets. // Reclaim all unused buckets.
// //
void DependencyContext::expunge_stale_entries() { void DependencyContext::purge_dependency_contexts() {
assert_locked_or_safepoint(CodeCache_lock);
if (!has_stale_entries()) {
assert(!find_stale_entries(), "inconsistent info");
return;
}
nmethodBucket* first = dependencies();
nmethodBucket* last = NULL;
int removed = 0; int removed = 0;
for (nmethodBucket* b = first; b != NULL;) { for (nmethodBucket* b = _purge_list; b != NULL;) {
assert(b->count() >= 0, "bucket count: %d", b->count()); nmethodBucket* next = b->purge_list_next();
nmethodBucket* next = b->next();
if (b->count() == 0) {
if (last == NULL) {
first = next;
} else {
last->set_next(next);
}
removed++; removed++;
delete b; delete b;
// last stays the same.
} else {
last = b;
}
b = next; b = next;
} }
set_dependencies(first);
set_has_stale_entries(false);
if (UsePerfData && removed > 0) { if (UsePerfData && removed > 0) {
_perf_total_buckets_deallocated_count->inc(removed); _perf_total_buckets_deallocated_count->inc(removed);
_perf_total_buckets_stale_count->dec(removed); }
_purge_list = NULL;
}
//
// Cleanup a dependency context by unlinking and placing all dependents corresponding
// to is_unloading nmethods on a purge list, which will be deleted later when it is safe.
void DependencyContext::clean_unloading_dependents() {
if (!claim_cleanup()) {
// Somebody else is cleaning up this dependency context.
return;
}
// Walk the nmethodBuckets and move dead entries on the purge list, which will
// be deleted during ClassLoaderDataGraph::purge().
nmethodBucket* b = dependencies_not_unloading();
while (b != NULL) {
nmethodBucket* next = b->next_not_unloading();
b = next;
} }
} }
// //
// Invalidate all dependencies in the context // Invalidate all dependencies in the context
int DependencyContext::remove_all_dependents() { int DependencyContext::remove_all_dependents() {
assert_locked_or_safepoint(CodeCache_lock); nmethodBucket* b = dependencies_not_unloading();
nmethodBucket* b = dependencies();
set_dependencies(NULL); set_dependencies(NULL);
int marked = 0; int marked = 0;
int removed = 0; int removed = 0;
@ -206,12 +215,11 @@ int DependencyContext::remove_all_dependents() {
nm->mark_for_deoptimization(); nm->mark_for_deoptimization();
marked++; marked++;
} }
nmethodBucket* next = b->next(); nmethodBucket* next = b->next_not_unloading();
removed++; removed++;
delete b; release(b);
b = next; b = next;
} }
set_has_stale_entries(false);
if (UsePerfData && removed > 0) { if (UsePerfData && removed > 0) {
_perf_total_buckets_deallocated_count->inc(removed); _perf_total_buckets_deallocated_count->inc(removed);
} }
@ -221,7 +229,7 @@ int DependencyContext::remove_all_dependents() {
#ifndef PRODUCT #ifndef PRODUCT
void DependencyContext::print_dependent_nmethods(bool verbose) { void DependencyContext::print_dependent_nmethods(bool verbose) {
int idx = 0; int idx = 0;
for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
nmethod* nm = b->get_nmethod(); nmethod* nm = b->get_nmethod();
tty->print("[%d] count=%d { ", idx++, b->count()); tty->print("[%d] count=%d { ", idx++, b->count());
if (!verbose) { if (!verbose) {
@ -236,7 +244,7 @@ void DependencyContext::print_dependent_nmethods(bool verbose) {
} }
bool DependencyContext::is_dependent_nmethod(nmethod* nm) { bool DependencyContext::is_dependent_nmethod(nmethod* nm) {
for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) { for (nmethodBucket* b = dependencies_not_unloading(); b != NULL; b = b->next_not_unloading()) {
if (nm == b->get_nmethod()) { if (nm == b->get_nmethod()) {
#ifdef ASSERT #ifdef ASSERT
int count = b->count(); int count = b->count();
@ -248,15 +256,112 @@ bool DependencyContext::is_dependent_nmethod(nmethod* nm) {
return false; return false;
} }
bool DependencyContext::find_stale_entries() {
for (nmethodBucket* b = dependencies(); b != NULL; b = b->next()) {
if (b->count() == 0) return true;
}
return false;
}
#endif //PRODUCT #endif //PRODUCT
int nmethodBucket::decrement() { int nmethodBucket::decrement() {
return Atomic::sub(1, &_count); return Atomic::sub(1, &_count);
} }
// We use a safepoint counter to track the safepoint counter the last time a given
// dependency context was cleaned. GC threads claim cleanup tasks by performing
// a CAS on this value.
bool DependencyContext::claim_cleanup() {
uint64_t cleaning_epoch = Atomic::load(&_cleaning_epoch);
uint64_t last_cleanup = Atomic::load(_last_cleanup_addr);
if (last_cleanup >= cleaning_epoch) {
return false;
}
return Atomic::cmpxchg(cleaning_epoch, _last_cleanup_addr, last_cleanup) == last_cleanup;
}
// Retrieve the first nmethodBucket that has a dependent that does not correspond to
// an is_unloading nmethod. Any nmethodBucket entries observed from the original head
// that is_unloading() will be unlinked and placed on the purge list.
nmethodBucket* DependencyContext::dependencies_not_unloading() {
for (;;) {
// Need acquire becase the read value could come from a concurrent insert.
nmethodBucket* head = OrderAccess::load_acquire(_dependency_context_addr);
if (head == NULL || !head->get_nmethod()->is_unloading()) {
return head;
}
nmethodBucket* head_next = head->next();
OrderAccess::loadload();
if (Atomic::load(_dependency_context_addr) != head) {
// Unstable load of head w.r.t. head->next
continue;
}
if (Atomic::cmpxchg(head_next, _dependency_context_addr, head) == head) {
// Release is_unloading entries if unlinking was claimed
DependencyContext::release(head);
}
}
}
// Relaxed accessors
void DependencyContext::set_dependencies(nmethodBucket* b) {
Atomic::store(b, _dependency_context_addr);
}
nmethodBucket* DependencyContext::dependencies() {
return Atomic::load(_dependency_context_addr);
}
// After the gc_prologue, the dependency contexts may be claimed by the GC
// and releasing of nmethodBucket entries will be deferred and placed on
// a purge list to be deleted later.
void DependencyContext::cleaning_start() {
assert(SafepointSynchronize::is_at_safepoint(), "must be");
uint64_t epoch = SafepointSynchronize::safepoint_counter();
Atomic::store(epoch, &_cleaning_epoch);
}
// The epilogue marks the end of dependency context cleanup by the GC,
// and also makes subsequent releases of nmethodBuckets case immediate
// deletion. It is admitted to end the cleanup in a concurrent phase.
void DependencyContext::cleaning_end() {
uint64_t epoch = 0;
Atomic::store(epoch, &_cleaning_epoch);
}
// This function skips over nmethodBuckets in the list corresponding to
// nmethods that are is_unloading. This allows exposing a view of the
// dependents as-if they were already cleaned, despite being cleaned
// concurrently. Any entry observed that is_unloading() will be unlinked
// and placed on the purge list.
nmethodBucket* nmethodBucket::next_not_unloading() {
for (;;) {
// Do not need acquire because the loaded entry can never be
// concurrently inserted.
nmethodBucket* next = Atomic::load(&_next);
if (next == NULL || !next->get_nmethod()->is_unloading()) {
return next;
}
nmethodBucket* next_next = Atomic::load(&next->_next);
OrderAccess::loadload();
if (Atomic::load(&_next) != next) {
// Unstable load of next w.r.t. next->next
continue;
}
if (Atomic::cmpxchg(next_next, &_next, next) == next) {
// Release is_unloading entries if unlinking was claimed
DependencyContext::release(next);
}
}
}
// Relaxed accessors
nmethodBucket* nmethodBucket::next() {
return Atomic::load(&_next);
}
void nmethodBucket::set_next(nmethodBucket* b) {
Atomic::store(b, &_next);
}
nmethodBucket* nmethodBucket::purge_list_next() {
return Atomic::load(&_purge_list_next);
}
void nmethodBucket::set_purge_list_next(nmethodBucket* b) {
Atomic::store(b, &_purge_list_next);
}

View File

@ -48,70 +48,50 @@ class nmethodBucket: public CHeapObj<mtClass> {
friend class VMStructs; friend class VMStructs;
private: private:
nmethod* _nmethod; nmethod* _nmethod;
int _count; volatile int _count;
nmethodBucket* _next; nmethodBucket* volatile _next;
nmethodBucket* volatile _purge_list_next;
public: public:
nmethodBucket(nmethod* nmethod, nmethodBucket* next) : nmethodBucket(nmethod* nmethod, nmethodBucket* next) :
_nmethod(nmethod), _count(1), _next(next) {} _nmethod(nmethod), _count(1), _next(next), _purge_list_next(NULL) {}
int count() { return _count; } int count() { return _count; }
int increment() { _count += 1; return _count; } int increment() { _count += 1; return _count; }
int decrement(); int decrement();
nmethodBucket* next() { return _next; } nmethodBucket* next();
void set_next(nmethodBucket* b) { _next = b; } nmethodBucket* next_not_unloading();
void set_next(nmethodBucket* b);
nmethodBucket* purge_list_next();
void set_purge_list_next(nmethodBucket* b);
nmethod* get_nmethod() { return _nmethod; } nmethod* get_nmethod() { return _nmethod; }
}; };
// //
// Utility class to manipulate nmethod dependency context. // Utility class to manipulate nmethod dependency context.
// The context consists of nmethodBucket* (a head of a linked list)
// and a boolean flag (does the list contains stale entries). The structure is
// encoded as an intptr_t: lower bit is used for the flag. It is possible since
// nmethodBucket* is aligned - the structure is malloc'ed in C heap.
// Dependency context can be attached either to an InstanceKlass (_dep_context field) // Dependency context can be attached either to an InstanceKlass (_dep_context field)
// or CallSiteContext oop for call_site_target dependencies (see javaClasses.hpp). // or CallSiteContext oop for call_site_target dependencies (see javaClasses.hpp).
// DependencyContext class operates on some location which holds a intptr_t value. // DependencyContext class operates on some location which holds a nmethodBucket* value
// and uint64_t integer recording the safepoint counter at the last cleanup.
// //
class DependencyContext : public StackObj { class DependencyContext : public StackObj {
friend class VMStructs; friend class VMStructs;
friend class TestDependencyContext; friend class TestDependencyContext;
private: private:
enum TagBits { _has_stale_entries_bit = 1, _has_stale_entries_mask = 1 }; nmethodBucket* volatile* _dependency_context_addr;
volatile uint64_t* _last_cleanup_addr;
intptr_t* _dependency_context_addr; bool claim_cleanup();
void set_dependencies(nmethodBucket* b);
void set_dependencies(nmethodBucket* b) { nmethodBucket* dependencies();
assert((intptr_t(b) & _has_stale_entries_mask) == 0, "should be aligned"); nmethodBucket* dependencies_not_unloading();
if (has_stale_entries()) {
*_dependency_context_addr = intptr_t(b) | _has_stale_entries_mask;
} else {
*_dependency_context_addr = intptr_t(b);
}
}
void set_has_stale_entries(bool x) {
if (x) {
*_dependency_context_addr |= _has_stale_entries_mask;
} else {
*_dependency_context_addr &= ~_has_stale_entries_mask;
}
}
nmethodBucket* dependencies() {
intptr_t value = *_dependency_context_addr;
return (nmethodBucket*) (value & ~_has_stale_entries_mask);
}
bool has_stale_entries() const {
intptr_t value = *_dependency_context_addr;
return (value & _has_stale_entries_mask) != 0;
}
static PerfCounter* _perf_total_buckets_allocated_count; static PerfCounter* _perf_total_buckets_allocated_count;
static PerfCounter* _perf_total_buckets_deallocated_count; static PerfCounter* _perf_total_buckets_deallocated_count;
static PerfCounter* _perf_total_buckets_stale_count; static PerfCounter* _perf_total_buckets_stale_count;
static PerfCounter* _perf_total_buckets_stale_acc_count; static PerfCounter* _perf_total_buckets_stale_acc_count;
static nmethodBucket* volatile _purge_list;
static volatile uint64_t _cleaning_epoch;
public: public:
#ifdef ASSERT #ifdef ASSERT
@ -120,31 +100,35 @@ class DependencyContext : public StackObj {
// (e.g. CallSiteContext Java object). // (e.g. CallSiteContext Java object).
uint64_t _safepoint_counter; uint64_t _safepoint_counter;
DependencyContext(intptr_t* addr) : _dependency_context_addr(addr), DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
: _dependency_context_addr(bucket_addr),
_last_cleanup_addr(last_cleanup_addr),
_safepoint_counter(SafepointSynchronize::safepoint_counter()) {} _safepoint_counter(SafepointSynchronize::safepoint_counter()) {}
~DependencyContext() { ~DependencyContext() {
assert(_safepoint_counter == SafepointSynchronize::safepoint_counter(), "safepoint happened"); assert(_safepoint_counter == SafepointSynchronize::safepoint_counter(), "safepoint happened");
} }
#else #else
DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {} DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
: _dependency_context_addr(bucket_addr),
_last_cleanup_addr(last_cleanup_addr) {}
#endif // ASSERT #endif // ASSERT
static const intptr_t EMPTY = 0; // dependencies = NULL, has_stale_entries = false
static void init(); static void init();
int mark_dependent_nmethods(DepChange& changes); int mark_dependent_nmethods(DepChange& changes);
void add_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); void add_dependent_nmethod(nmethod* nm);
void remove_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); void remove_dependent_nmethod(nmethod* nm);
int remove_all_dependents(); int remove_all_dependents();
void clean_unloading_dependents();
void expunge_stale_entries(); static void purge_dependency_contexts();
static void release(nmethodBucket* b);
static void cleaning_start();
static void cleaning_end();
#ifndef PRODUCT #ifndef PRODUCT
void print_dependent_nmethods(bool verbose); void print_dependent_nmethods(bool verbose);
bool is_dependent_nmethod(nmethod* nm); bool is_dependent_nmethod(nmethod* nm);
bool find_stale_entries();
#endif //PRODUCT #endif //PRODUCT
}; };
#endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP #endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP

View File

@ -1053,7 +1053,8 @@ void nmethod::make_unloaded() {
// recorded in instanceKlasses get flushed. // recorded in instanceKlasses get flushed.
// Since this work is being done during a GC, defer deleting dependencies from the // Since this work is being done during a GC, defer deleting dependencies from the
// InstanceKlass. // InstanceKlass.
assert(Universe::heap()->is_gc_active(), "should only be called during gc"); assert(Universe::heap()->is_gc_active() || Thread::current()->is_ConcurrentGC_thread(),
"should only be called during gc");
flush_dependencies(/*delete_immediately*/false); flush_dependencies(/*delete_immediately*/false);
// Break cycle between nmethod & method // Break cycle between nmethod & method
@ -1095,7 +1096,8 @@ void nmethod::make_unloaded() {
} }
// Make the class unloaded - i.e., change state and notify sweeper // Make the class unloaded - i.e., change state and notify sweeper
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); assert(SafepointSynchronize::is_at_safepoint() || Thread::current()->is_ConcurrentGC_thread(),
"must be at safepoint");
// Unregister must be done before the state change // Unregister must be done before the state change
Universe::heap()->unregister_nmethod(this); Universe::heap()->unregister_nmethod(this);
@ -1372,8 +1374,8 @@ oop nmethod::oop_at(int index) const {
// notifies instanceKlasses that are reachable // notifies instanceKlasses that are reachable
void nmethod::flush_dependencies(bool delete_immediately) { void nmethod::flush_dependencies(bool delete_immediately) {
assert_locked_or_safepoint(CodeCache_lock); DEBUG_ONLY(bool called_by_gc = Universe::heap()->is_gc_active() || Thread::current()->is_ConcurrentGC_thread();)
assert(Universe::heap()->is_gc_active() != delete_immediately, assert(called_by_gc != delete_immediately,
"delete_immediately is false if and only if we are called during GC"); "delete_immediately is false if and only if we are called during GC");
if (!has_flushed_dependencies()) { if (!has_flushed_dependencies()) {
set_has_flushed_dependencies(); set_has_flushed_dependencies();
@ -1381,7 +1383,12 @@ void nmethod::flush_dependencies(bool delete_immediately) {
if (deps.type() == Dependencies::call_site_target_value) { if (deps.type() == Dependencies::call_site_target_value) {
// CallSite dependencies are managed on per-CallSite instance basis. // CallSite dependencies are managed on per-CallSite instance basis.
oop call_site = deps.argument_oop(0); oop call_site = deps.argument_oop(0);
if (delete_immediately) {
assert_locked_or_safepoint(CodeCache_lock);
MethodHandles::remove_dependent_nmethod(call_site, this); MethodHandles::remove_dependent_nmethod(call_site, this);
} else {
MethodHandles::clean_dependency_context(call_site);
}
} else { } else {
Klass* klass = deps.context_type(); Klass* klass = deps.context_type();
if (klass == NULL) { if (klass == NULL) {
@ -1389,11 +1396,12 @@ void nmethod::flush_dependencies(bool delete_immediately) {
} }
// During GC delete_immediately is false, and liveness // During GC delete_immediately is false, and liveness
// of dependee determines class that needs to be updated. // of dependee determines class that needs to be updated.
if (delete_immediately || klass->is_loader_alive()) { if (delete_immediately) {
// The GC defers deletion of this entry, since there might be multiple threads assert_locked_or_safepoint(CodeCache_lock);
// iterating over the _dependencies graph. Other call paths are single-threaded InstanceKlass::cast(klass)->remove_dependent_nmethod(this);
// and may delete it immediately. } else if (klass->is_loader_alive()) {
InstanceKlass::cast(klass)->remove_dependent_nmethod(this, delete_immediately); // The GC may clean dependency contexts concurrently and in parallel.
InstanceKlass::cast(klass)->clean_dependency_context();
} }
} }
} }
@ -2917,6 +2925,10 @@ void nmethod::clear_speculation_log() {
} }
void nmethod::maybe_invalidate_installed_code() { void nmethod::maybe_invalidate_installed_code() {
if (!is_compiled_by_jvmci()) {
return;
}
assert(Patching_lock->is_locked() || assert(Patching_lock->is_locked() ||
SafepointSynchronize::is_at_safepoint(), "should be performed under a lock for consistency"); SafepointSynchronize::is_at_safepoint(), "should be performed under a lock for consistency");
oop installed_code = JNIHandles::resolve(_jvmci_installed_code); oop installed_code = JNIHandles::resolve(_jvmci_installed_code);

View File

@ -257,6 +257,14 @@ class nmethod : public CompiledMethod {
#endif #endif
); );
// Only used for unit tests.
nmethod()
: CompiledMethod(),
_is_unloading_state(0),
_native_receiver_sp_offset(in_ByteSize(-1)),
_native_basic_lock_sp_offset(in_ByteSize(-1)) {}
static nmethod* new_native_nmethod(const methodHandle& method, static nmethod* new_native_nmethod(const methodHandle& method,
int compile_id, int compile_id,
CodeBuffer *code_buffer, CodeBuffer *code_buffer,

View File

@ -81,6 +81,13 @@ void G1Arguments::initialize() {
vm_exit_during_initialization("The flag -XX:+UseG1GC can not be combined with -XX:ParallelGCThreads=0", NULL); vm_exit_during_initialization("The flag -XX:+UseG1GC can not be combined with -XX:ParallelGCThreads=0", NULL);
} }
// When dumping the CDS archive we want to reduce fragmentation by
// triggering a full collection. To get as low fragmentation as
// possible we only use one worker thread.
if (DumpSharedSpaces) {
FLAG_SET_ERGO(uint, ParallelGCThreads, 1);
}
if (FLAG_IS_DEFAULT(G1ConcRefinementThreads)) { if (FLAG_IS_DEFAULT(G1ConcRefinementThreads)) {
FLAG_SET_ERGO(uint, G1ConcRefinementThreads, ParallelGCThreads); FLAG_SET_ERGO(uint, G1ConcRefinementThreads, ParallelGCThreads);
} }

View File

@ -1563,16 +1563,33 @@ G1CollectedHeap::G1CollectedHeap(G1CollectorPolicy* collector_policy) :
guarantee(_task_queues != NULL, "task_queues allocation failure."); guarantee(_task_queues != NULL, "task_queues allocation failure.");
} }
static size_t actual_reserved_page_size(ReservedSpace rs) {
size_t page_size = os::vm_page_size();
if (UseLargePages) {
// There are two ways to manage large page memory.
// 1. OS supports committing large page memory.
// 2. OS doesn't support committing large page memory so ReservedSpace manages it.
// And ReservedSpace calls it 'special'. If we failed to set 'special',
// we reserved memory without large page.
if (os::can_commit_large_page_memory() || rs.special()) {
page_size = rs.alignment();
}
}
return page_size;
}
G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description, G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description,
size_t size, size_t size,
size_t translation_factor) { size_t translation_factor) {
size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1); size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1);
// Allocate a new reserved space, preferring to use large pages. // Allocate a new reserved space, preferring to use large pages.
ReservedSpace rs(size, preferred_page_size); ReservedSpace rs(size, preferred_page_size);
size_t page_size = actual_reserved_page_size(rs);
G1RegionToSpaceMapper* result = G1RegionToSpaceMapper* result =
G1RegionToSpaceMapper::create_mapper(rs, G1RegionToSpaceMapper::create_mapper(rs,
size, size,
rs.alignment(), page_size,
HeapRegion::GrainBytes, HeapRegion::GrainBytes,
translation_factor, translation_factor,
mtGC); mtGC);
@ -1580,7 +1597,7 @@ G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* des
os::trace_page_sizes_for_requested_size(description, os::trace_page_sizes_for_requested_size(description,
size, size,
preferred_page_size, preferred_page_size,
rs.alignment(), page_size,
rs.base(), rs.base(),
rs.size()); rs.size());
@ -1675,7 +1692,7 @@ jint G1CollectedHeap::initialize() {
// Carve out the G1 part of the heap. // Carve out the G1 part of the heap.
ReservedSpace g1_rs = heap_rs.first_part(max_byte_size); ReservedSpace g1_rs = heap_rs.first_part(max_byte_size);
size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); size_t page_size = actual_reserved_page_size(heap_rs);
G1RegionToSpaceMapper* heap_storage = G1RegionToSpaceMapper* heap_storage =
G1RegionToSpaceMapper::create_mapper(g1_rs, G1RegionToSpaceMapper::create_mapper(g1_rs,
g1_rs.size(), g1_rs.size(),

View File

@ -273,6 +273,69 @@ public:
}; };
// Should be only used at CDS dump time // Should be only used at CDS dump time
class VerifyReadyForArchivingRegionClosure : public HeapRegionClosure {
bool _seen_free;
bool _has_holes;
bool _has_unexpected_holes;
bool _has_humongous;
public:
bool has_holes() {return _has_holes;}
bool has_unexpected_holes() {return _has_unexpected_holes;}
bool has_humongous() {return _has_humongous;}
VerifyReadyForArchivingRegionClosure() : HeapRegionClosure() {
_seen_free = false;
_has_holes = false;
_has_unexpected_holes = false;
_has_humongous = false;
}
virtual bool do_heap_region(HeapRegion* hr) {
const char* hole = "";
if (hr->is_free()) {
_seen_free = true;
} else {
if (_seen_free) {
_has_holes = true;
if (hr->is_humongous()) {
hole = " hole";
} else {
_has_unexpected_holes = true;
hole = " hole **** unexpected ****";
}
}
}
if (hr->is_humongous()) {
_has_humongous = true;
}
log_info(gc, region, cds)("HeapRegion " INTPTR_FORMAT " %s%s", p2i(hr->bottom()), hr->get_type_str(), hole);
return false;
}
};
// We want all used regions to be moved to the bottom-end of the heap, so we have
// a contiguous range of free regions at the top end of the heap. This way, we can
// avoid fragmentation while allocating the archive regions.
//
// Before calling this, a full GC should have been executed with a single worker thread,
// so that no old regions would be moved to the middle of the heap.
void G1HeapVerifier::verify_ready_for_archiving() {
VerifyReadyForArchivingRegionClosure cl;
G1CollectedHeap::heap()->heap_region_iterate(&cl);
if (cl.has_holes()) {
log_warning(gc, verify)("All free regions should be at the top end of the heap, but"
" we found holes. This is probably caused by (unmovable) humongous"
" allocations, and may lead to fragmentation while"
" writing archive heap memory regions.");
}
if (cl.has_humongous()) {
log_warning(gc, verify)("(Unmovable) humongous regions have been found and"
" may lead to fragmentation while"
" writing archive heap memory regions.");
}
assert(!cl.has_unexpected_holes(), "all holes should have been caused by humongous regions");
}
class VerifyArchivePointerRegionClosure: public HeapRegionClosure { class VerifyArchivePointerRegionClosure: public HeapRegionClosure {
private: private:
G1CollectedHeap* _g1h; G1CollectedHeap* _g1h;

View File

@ -115,6 +115,7 @@ public:
void verify_dirty_region(HeapRegion* hr) PRODUCT_RETURN; void verify_dirty_region(HeapRegion* hr) PRODUCT_RETURN;
void verify_dirty_young_regions() PRODUCT_RETURN; void verify_dirty_young_regions() PRODUCT_RETURN;
static void verify_ready_for_archiving();
static void verify_archive_regions(); static void verify_archive_regions();
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -60,6 +60,9 @@ const char* GCCause::to_string(GCCause::Cause cause) {
case _wb_full_gc: case _wb_full_gc:
return "WhiteBox Initiated Full GC"; return "WhiteBox Initiated Full GC";
case _archive_time_gc:
return "Full GC for -Xshare:dump";
case _no_gc: case _no_gc:
return "No GC"; return "No GC";

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -52,6 +52,7 @@ class GCCause : public AllStatic {
_wb_young_gc, _wb_young_gc,
_wb_conc_mark, _wb_conc_mark,
_wb_full_gc, _wb_full_gc,
_archive_time_gc,
/* implementation independent, but reserved for GC use */ /* implementation independent, but reserved for GC use */
_no_gc, _no_gc,

View File

@ -658,8 +658,6 @@ Node* ZBarrierSetC2::load_barrier(GraphKit* kit, Node* val, Node* adr, bool weak
kit->set_control(gvn.transform(new ProjNode(barrier, LoadBarrierNode::Control))); kit->set_control(gvn.transform(new ProjNode(barrier, LoadBarrierNode::Control)));
} }
Node* result = gvn.transform(new ProjNode(transformed_barrier, LoadBarrierNode::Oop)); Node* result = gvn.transform(new ProjNode(transformed_barrier, LoadBarrierNode::Oop));
assert(is_gc_barrier_node(result), "sanity");
assert(step_over_gc_barrier(result) == val, "sanity");
return result; return result;
} else { } else {
return val; return val;

View File

@ -38,11 +38,18 @@ void ZForwardingTable::setup(size_t live_objects) {
_size = ZUtils::round_up_power_of_2(live_objects * 2); _size = ZUtils::round_up_power_of_2(live_objects * 2);
_table = MallocArrayAllocator<ZForwardingTableEntry>::allocate(_size, mtGC); _table = MallocArrayAllocator<ZForwardingTableEntry>::allocate(_size, mtGC);
// Clear table // Construct table entries
memset(_table, ZForwardingTableEntry::empty(), _size * sizeof(ZForwardingTableEntry)); for (size_t i = 0; i < _size; i++) {
::new (_table + i) ZForwardingTableEntry();
}
} }
void ZForwardingTable::reset() { void ZForwardingTable::reset() {
// Destruct table entries
for (size_t i = 0; i < _size; i++) {
(_table + i)->~ZForwardingTableEntry();
}
// Free table // Free table
MallocArrayAllocator<ZForwardingTableEntry>::free(_table); MallocArrayAllocator<ZForwardingTableEntry>::free(_table);
_table = NULL; _table = NULL;

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