Merge
This commit is contained in:
commit
5f2062b484
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
56
make/Coverage.gmk
Normal 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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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) \
|
||||||
#
|
#
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
2
make/autoconf/build-aux/config.guess
vendored
2
make/autoconf/build-aux/config.guess
vendored
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
])
|
])
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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",
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
%%
|
%%
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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, \
|
||||||
))
|
))
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 \
|
||||||
|
@ -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"/>
|
||||||
|
@ -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
|
|
@ -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:" \
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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, \
|
||||||
|
@ -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*)
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
||||||
|
@ -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*)
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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())
|
||||||
|
@ -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();
|
||||||
|
@ -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() {
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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") \
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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>
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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(),
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user