Merge
This commit is contained in:
commit
5f2062b484
@ -1,6 +1,6 @@
|
||||
#!/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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
$(eval $(call IncludeCustomExtension, Bundles.gmk))
|
||||
|
||||
@ -270,5 +285,6 @@ $(eval $(call IncludeCustomExtension, Bundles.gmk))
|
||||
product-bundles: $(PRODUCT_TARGETS)
|
||||
test-bundles: $(TEST_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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -371,10 +371,15 @@ release-file:
|
||||
exploded-image-optimize:
|
||||
+($(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 \
|
||||
zip-source jrtfs-jar jdk-image legacy-jre-image \
|
||||
symbols-image mac-jdk-bundle mac-legacy-jre-bundle \
|
||||
release-file exploded-image-optimize
|
||||
release-file exploded-image-optimize jcov-image
|
||||
|
||||
################################################################################
|
||||
# Docs targets
|
||||
@ -577,7 +582,12 @@ test-bundles:
|
||||
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
|
||||
@ -633,6 +643,7 @@ else
|
||||
# Declare dependencies between hotspot-<variant>* targets
|
||||
$(foreach v, $(JVM_VARIANTS), \
|
||||
$(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) \
|
||||
)
|
||||
|
||||
@ -820,6 +831,10 @@ else
|
||||
mac-jdk-bundle: jdk-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
|
||||
# populated (java, copy and gendata targets) and the basic libs and launchers
|
||||
# have been built.
|
||||
@ -900,6 +915,8 @@ else
|
||||
|
||||
docs-bundles: docs-image
|
||||
|
||||
jcov-bundles: jcov-image
|
||||
|
||||
generate-summary: jmods buildtools-modules
|
||||
|
||||
update-x11wrappers: java.base-copy buildtools-jdk
|
||||
|
@ -135,9 +135,11 @@ define SetupAotModuleBody
|
||||
$1_LD := $$(LD)
|
||||
endif
|
||||
|
||||
# Create jaotc flags.
|
||||
# VM flags which don't affect AOT code generation are filtered out: -Xcomp, -XX:+-TieredCompilation
|
||||
$1_JAOTC_OPTS := \
|
||||
-J-Xmx4g --info \
|
||||
$$(addprefix -J, $$($1_VM_OPTIONS)) \
|
||||
$$(addprefix -J, $$(filter-out -Xcomp %TieredCompilation, $$($1_VM_OPTIONS))) \
|
||||
$$(addprefix --compile-commands$(SPACE), $$($1_AOT_CCLIST)) \
|
||||
--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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -325,17 +325,13 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
|
||||
fi
|
||||
fi
|
||||
|
||||
# Only enable ZGC on Linux x86_64
|
||||
AC_MSG_CHECKING([if zgc should be built])
|
||||
if HOTSPOT_CHECK_JVM_FEATURE(zgc); then
|
||||
if test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc"
|
||||
AC_MSG_RESULT([no, platform not supported])
|
||||
fi
|
||||
# Only enable ZGC on supported platforms
|
||||
AC_MSG_CHECKING([if zgc can be built])
|
||||
if test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc"
|
||||
AC_MSG_RESULT([no, platform not supported])
|
||||
fi
|
||||
|
||||
# Disable unsupported GCs for Zero
|
||||
@ -474,7 +470,7 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
|
||||
fi
|
||||
|
||||
# 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.
|
||||
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
|
||||
AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
|
||||
fi
|
||||
|
||||
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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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@
|
||||
|
||||
GCOV_ENABLED=@GCOV_ENABLED@
|
||||
JCOV_ENABLED=@JCOV_ENABLED@
|
||||
JCOV_HOME=@JCOV_HOME@
|
||||
JCOV_INPUT_JDK=@JCOV_INPUT_JDK@
|
||||
|
||||
# AddressSanitizer
|
||||
export ASAN_ENABLED:=@ASAN_ENABLED@
|
||||
@ -839,10 +842,12 @@ OS_VERSION_MICRO:=@OS_VERSION_MICRO@
|
||||
# Images directory definitions
|
||||
JDK_IMAGE_SUBDIR:=jdk
|
||||
JRE_IMAGE_SUBDIR:=jre
|
||||
JCOV_IMAGE_SUBDIR := jdk-jcov
|
||||
|
||||
# Colon left out to be able to override output dir for bootcycle-images
|
||||
JDK_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_IMAGE_SUBDIR)
|
||||
JRE_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_IMAGE_SUBDIR)
|
||||
JCOV_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(JCOV_IMAGE_SUBDIR)
|
||||
|
||||
# Test image, as above
|
||||
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_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-tests$(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_SYMBOLS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_SYMBOLS_BUNDLE_NAME)
|
||||
TEST_DEMOS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_DEMOS_BUNDLE_NAME)
|
||||
TEST_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_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.
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
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"],
|
||||
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",
|
||||
@ -688,14 +688,6 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
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
|
||||
// corresponding debug profile. This profile does a compare build run with no
|
||||
// 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"
|
||||
},
|
||||
|
||||
jcov: {
|
||||
server: "jpg",
|
||||
product: "jcov",
|
||||
version: "3.0",
|
||||
build_number: "b07",
|
||||
file: "bundles/jcov-3_0.zip",
|
||||
},
|
||||
|
||||
gnumake: {
|
||||
organization: common.organization,
|
||||
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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -5,14 +5,3 @@ A1AD 223C
|
||||
A2A6 FF5E
|
||||
A2C1 2299
|
||||
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
|
||||
#
|
||||
# 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
|
||||
01 0001
|
||||
02 0002
|
||||
@ -294,6 +285,7 @@ A2BD 2661
|
||||
A2BE 2665
|
||||
A2BF 2667
|
||||
A2C0 2663
|
||||
A2C1 25C9
|
||||
A2C2 25C8
|
||||
A2C3 25A3
|
||||
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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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
|
||||
Subtag: aa
|
||||
@ -3351,7 +3351,7 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: aue
|
||||
Description: =/Kx'au//'ein
|
||||
Description: ǂKxʼauǁʼein
|
||||
Added: 2009-07-29
|
||||
Deprecated: 2015-02-12
|
||||
Preferred-Value: ktz
|
||||
@ -9812,6 +9812,12 @@ Description: Dzùùngoo
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: dno
|
||||
Description: Ndrulo
|
||||
Description: Northern Lendu
|
||||
Added: 2018-10-28
|
||||
%%
|
||||
Type: language
|
||||
Subtag: dnr
|
||||
Description: Danaru
|
||||
Added: 2009-07-29
|
||||
@ -10338,6 +10344,11 @@ Description: Dhuwaya
|
||||
Added: 2016-05-30
|
||||
%%
|
||||
Type: language
|
||||
Subtag: dwz
|
||||
Description: Dewas Rai
|
||||
Added: 2018-10-28
|
||||
%%
|
||||
Type: language
|
||||
Subtag: dya
|
||||
Description: Dyan
|
||||
Added: 2009-07-29
|
||||
@ -12022,7 +12033,7 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: gfx
|
||||
Description: Mangetti Dune !Xung
|
||||
Description: Mangetti Dune ǃXung
|
||||
Added: 2012-08-12
|
||||
Deprecated: 2015-02-12
|
||||
Preferred-Value: vaj
|
||||
@ -12328,7 +12339,6 @@ Macrolanguage: kpe
|
||||
Type: language
|
||||
Subtag: gku
|
||||
Description: ǂUngkue
|
||||
Description: =/Ungkue
|
||||
Added: 2015-02-12
|
||||
%%
|
||||
Type: language
|
||||
@ -12523,7 +12533,6 @@ Added: 2018-03-08
|
||||
%%
|
||||
Type: language
|
||||
Subtag: gnk
|
||||
Description: //Gana
|
||||
Description: ǁGana
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -13156,7 +13165,6 @@ Added: 2005-10-16
|
||||
%%
|
||||
Type: language
|
||||
Subtag: gwj
|
||||
Description: /Gwi
|
||||
Description: ǀGwi
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -13489,7 +13497,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: hgm
|
||||
Description: Hai//om
|
||||
Description: Haiǁom
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -13833,7 +13840,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: hnh
|
||||
Description: //Ani
|
||||
Description: ǁAni
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -14113,7 +14119,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: huc
|
||||
Description: =/Hua
|
||||
Description: ǂHua
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -18425,7 +18430,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: ktz
|
||||
Description: Ju/'hoan
|
||||
Description: Juǀʼhoan
|
||||
Description: Juǀʼhoansi
|
||||
Added: 2009-07-29
|
||||
@ -24926,7 +24930,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: ngh
|
||||
Description: N/u
|
||||
Description: Nǀu
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -25641,7 +25644,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: nmn
|
||||
Description: !Xóõ
|
||||
Description: ǃXóõ
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -27613,7 +27615,7 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: oun
|
||||
Description: !O!ung
|
||||
Description: ǃOǃung
|
||||
Added: 2009-07-29
|
||||
Deprecated: 2015-02-12
|
||||
Preferred-Value: vaj
|
||||
@ -36667,7 +36669,6 @@ Added: 2005-10-16
|
||||
Type: language
|
||||
Subtag: vaj
|
||||
Description: Sekele
|
||||
Description: Northwestern !Kung
|
||||
Description: Northwestern ǃKung
|
||||
Description: Vasekele
|
||||
Added: 2009-07-29
|
||||
@ -38299,7 +38300,6 @@ Added: 2005-10-16
|
||||
%%
|
||||
Type: language
|
||||
Subtag: xam
|
||||
Description: /Xam
|
||||
Description: ǀXam
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -38559,7 +38559,6 @@ Added: 2009-07-29
|
||||
%%
|
||||
Type: language
|
||||
Subtag: xeg
|
||||
Description: //Xegwi
|
||||
Description: ǁXegwi
|
||||
Added: 2009-07-29
|
||||
%%
|
||||
@ -44036,6 +44035,11 @@ Description: Elbasan
|
||||
Added: 2010-08-16
|
||||
%%
|
||||
Type: script
|
||||
Subtag: Elym
|
||||
Description: Elymaic
|
||||
Added: 2018-10-28
|
||||
%%
|
||||
Type: script
|
||||
Subtag: Ethi
|
||||
Description: Ethiopic
|
||||
Description: Geʻez
|
||||
@ -44432,6 +44436,11 @@ Description: Burmese
|
||||
Added: 2005-10-16
|
||||
%%
|
||||
Type: script
|
||||
Subtag: Nand
|
||||
Description: Nandinagari
|
||||
Added: 2018-10-28
|
||||
%%
|
||||
Type: script
|
||||
Subtag: Narb
|
||||
Description: Old North Arabian
|
||||
Description: Ancient North Arabian
|
||||
@ -46032,6 +46041,8 @@ Added: 2005-10-16
|
||||
%%
|
||||
Type: region
|
||||
Subtag: SZ
|
||||
Description: Eswatini
|
||||
Description: eSwatini
|
||||
Description: Swaziland
|
||||
Added: 2005-10-16
|
||||
%%
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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/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
|
||||
JFR_FILES := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jfrfiles/jfrEventClasses.hpp
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_DTRACE_GEN_OFFSETS, \
|
||||
NAME := dtraceGenOffsets, \
|
||||
@ -76,7 +77,7 @@ ifeq ($(call check-jvm-feature, dtrace), true)
|
||||
CFLAGS := -m64 $(JVM_CFLAGS), \
|
||||
DISABLED_WARNINGS_solstudio := hidef w_novirtualdescr unknownpragma \
|
||||
doubunder nokeyworddefine wunreachable, \
|
||||
EXTRA_DEPS := $(JVMTI_H), \
|
||||
EXTRA_DEPS := $(JVMTI_H) $(JFR_FILES), \
|
||||
OBJECT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets/objs, \
|
||||
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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?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.
|
||||
~
|
||||
~ 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
#
|
||||
# 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, \
|
||||
OPTIMIZATION := LOW, \
|
||||
DISABLED_WARNINGS_microsoft := 4311 4302 4312, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) \
|
||||
CFLAGS := $(filter-out -MD, $(CFLAGS_JDKLIB)) -MT \
|
||||
-DACCESSBRIDGE_ARCH_$2, \
|
||||
EXTRA_HEADER_DIRS := \
|
||||
include/bridge \
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?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.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
@ -278,7 +278,7 @@
|
||||
<arg value="${javadoc.option}"/>
|
||||
<fileset dir="${nashorn.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>
|
||||
</target>
|
||||
|
||||
@ -296,7 +296,7 @@
|
||||
<arg value="."/>
|
||||
<arg value="${javadoc.option}"/>
|
||||
<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>
|
||||
</target>
|
||||
|
||||
@ -314,7 +314,7 @@
|
||||
<arg value="."/>
|
||||
<arg value="${javadoc.option}"/>
|
||||
<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>
|
||||
</target>
|
||||
|
||||
@ -835,8 +835,8 @@ grant codeBase "file:/${basedir}/${test.script.dir}/basic/JDK-8158467.js" {
|
||||
|
||||
<!-- 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-min.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" tryGzipEncoding="true"/>
|
||||
|
||||
<!-- showdown -->
|
||||
<mkdir dir="${test.external.dir}/showdown"/>
|
||||
|
@ -1,52 +1,8 @@
|
||||
com.sun.jarsigner
|
||||
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
|
||||
module:java.base
|
||||
java.io
|
||||
java.lang
|
||||
java.lang.annotation
|
||||
java.lang.instrument
|
||||
java.lang.invoke
|
||||
java.lang.management
|
||||
java.lang.module
|
||||
java.lang.ref
|
||||
java.lang.reflect
|
||||
@ -61,17 +17,11 @@ java.nio.charset.spi
|
||||
java.nio.file
|
||||
java.nio.file.attribute
|
||||
java.nio.file.spi
|
||||
java.rmi
|
||||
java.rmi.activation
|
||||
java.rmi.dgc
|
||||
java.rmi.registry
|
||||
java.rmi.server
|
||||
java.security
|
||||
java.security.acl
|
||||
java.security.cert
|
||||
java.security.interfaces
|
||||
java.security.spec
|
||||
java.sql
|
||||
java.text
|
||||
java.text.spi
|
||||
java.time
|
||||
@ -85,56 +35,47 @@ java.util.concurrent.atomic
|
||||
java.util.concurrent.locks
|
||||
java.util.function
|
||||
java.util.jar
|
||||
java.util.logging
|
||||
java.util.prefs
|
||||
java.util.regex
|
||||
java.util.spi
|
||||
java.util.stream
|
||||
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.interfaces
|
||||
javax.crypto.spec
|
||||
javax.net
|
||||
javax.net.ssl
|
||||
javax.security.auth
|
||||
javax.security.auth.callback
|
||||
javax.security.auth.login
|
||||
javax.security.auth.spi
|
||||
javax.security.auth.x500
|
||||
javax.security.cert
|
||||
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.event
|
||||
javax.imageio.metadata
|
||||
@ -143,54 +84,14 @@ javax.imageio.plugins.jpeg
|
||||
javax.imageio.plugins.tiff
|
||||
javax.imageio.spi
|
||||
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.attribute
|
||||
javax.print.attribute.standard
|
||||
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.spi
|
||||
javax.sound.sampled
|
||||
javax.sound.sampled.spi
|
||||
javax.sql
|
||||
javax.sql.rowset
|
||||
javax.sql.rowset.serial
|
||||
javax.sql.rowset.spi
|
||||
javax.swing
|
||||
javax.swing.border
|
||||
javax.swing.colorchooser
|
||||
@ -209,27 +110,64 @@ javax.swing.text.html.parser
|
||||
javax.swing.text.rtf
|
||||
javax.swing.tree
|
||||
javax.swing.undo
|
||||
javax.tools
|
||||
javax.transaction
|
||||
module:java.instrument
|
||||
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
|
||||
module:java.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.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.namespace
|
||||
javax.xml.parsers
|
||||
javax.xml.soap
|
||||
javax.xml.stream
|
||||
javax.xml.stream.events
|
||||
javax.xml.stream.util
|
||||
@ -239,76 +177,106 @@ javax.xml.transform.sax
|
||||
javax.xml.transform.stax
|
||||
javax.xml.transform.stream
|
||||
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
|
||||
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.beans
|
||||
jdk.dynalink.linker
|
||||
jdk.dynalink.linker.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
|
||||
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.consumer
|
||||
module:jdk.jlink
|
||||
module:jdk.jshell
|
||||
jdk.jshell
|
||||
jdk.jshell.execution
|
||||
jdk.jshell.spi
|
||||
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.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.tree
|
||||
jdk.net
|
||||
jdk.packager.services
|
||||
jdk.security.jarsigner
|
||||
netscape.javascript
|
||||
org.ietf.jgss
|
||||
org.omg.CORBA
|
||||
org.omg.CORBA_2_3
|
||||
org.omg.CORBA_2_3.portable
|
||||
org.omg.CORBA.DynAnyPackage
|
||||
org.omg.CORBA.ORBPackage
|
||||
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
|
||||
module:jdk.sctp
|
||||
com.sun.nio.sctp
|
||||
module:jdk.security.auth
|
||||
com.sun.security.auth
|
||||
com.sun.security.auth.callback
|
||||
com.sun.security.auth.login
|
||||
com.sun.security.auth.module
|
||||
module:jdk.security.jgss
|
||||
com.sun.security.jgss
|
||||
module:jdk.xml.dom
|
||||
org.w3c.dom.css
|
||||
org.w3c.dom.events
|
||||
org.w3c.dom.html
|
||||
org.w3c.dom.ls
|
||||
org.w3c.dom.ranges
|
||||
org.w3c.dom.stylesheets
|
||||
org.w3c.dom.traversal
|
||||
org.w3c.dom.views
|
||||
org.w3c.dom.xpath
|
||||
org.xml.sax
|
||||
org.xml.sax.ext
|
||||
org.xml.sax.helpers
|
||||
module:jdk.zipfs
|
@ -36,8 +36,8 @@ build.compiler=modern
|
||||
jdk.build.dir=build
|
||||
nashorn.make.dir=make/nashorn
|
||||
|
||||
javadoc.base.url=https://docs.oracle.com/javase/9/docs/api/
|
||||
javadoc.pkg.list=make/nashorn
|
||||
javadoc.base.url=https://docs.oracle.com/en/java/javase/11/docs/api/
|
||||
javadoc.element.list=make/nashorn
|
||||
|
||||
javadoc.option=\
|
||||
-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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/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.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -98,7 +98,7 @@ updateChangesetFiles() # changeset
|
||||
count=0
|
||||
files=${tmp}/files.$1
|
||||
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}' \
|
||||
> ${files}
|
||||
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"
|
||||
set -x
|
||||
ls -al ${files}
|
||||
hg log --rev $1 -v --template '{files}\n'
|
||||
hg log --rev $1 -v --template '{files}\n' | expand \
|
||||
hg log -l1 --rev $1 -v --template '{files}\n'
|
||||
hg log -l1 --rev $1 -v --template '{files}\n' | expand \
|
||||
| ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}'
|
||||
set +x
|
||||
exit 1
|
||||
@ -150,7 +150,7 @@ if [ -s ${all_changesets} ] ; then
|
||||
desc=${tmp}/desc.${changeset}
|
||||
rm -f ${desc}
|
||||
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`"
|
||||
if [ "${year}" = "2010" ] ; 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_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
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c
|
||||
|
||||
WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
|
||||
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
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
|
||||
ifeq ($(OPENJDK_TARGET_OS), linux)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
|
||||
else ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lsocket -lnsl
|
||||
endif
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libTestMainKeyWindow := -ObjC
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
|
||||
-framework Cocoa -framework JavaNativeFoundation
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJniInvocationTest := -ljli
|
||||
else
|
||||
BUILD_JDK_JTREG_EXCLUDE += libTestMainKeyWindow.c
|
||||
BUILD_JDK_JTREG_EXCLUDE += exeJniInvocationTest.c
|
||||
endif
|
||||
|
||||
$(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.
|
||||
}
|
||||
|
||||
/**
|
||||
* @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 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,
|
||||
Register t0, Register t1, Register t2, Register t3,
|
||||
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,
|
||||
Register t0, Register t1, Register t2, Register t3,
|
||||
Register tc0, Register tc1, Register tc2, Register tc3,
|
||||
|
@ -62,7 +62,6 @@ class ppc64 {
|
||||
public:
|
||||
|
||||
// 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_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);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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 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,
|
||||
Register t0, Register t1, Register t2, Register t3,
|
||||
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
|
||||
// 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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -50,6 +50,10 @@ using namespace std;
|
||||
#define strdup _strdup
|
||||
#endif
|
||||
|
||||
#if _MSC_VER < 1900
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
#ifndef _INTPTR_T_DEFINED
|
||||
#ifdef _WIN64
|
||||
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
|
||||
if( c1->_external_name != NULL ) {
|
||||
sprintf(string_buffer, "%s", c1->as_string());
|
||||
if( !c2->is_zero() ) {
|
||||
strncat(string_buffer, "+", STRING_BUFFER_LENGTH);
|
||||
strncat(string_buffer, c2->as_string(), STRING_BUFFER_LENGTH);
|
||||
if( c2->is_zero() ) {
|
||||
snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c1->as_string());
|
||||
} else {
|
||||
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);
|
||||
}
|
||||
else if( c2->_external_name != NULL ) {
|
||||
if( !c1->is_zero() ) {
|
||||
sprintf(string_buffer, "%s", c1->as_string());
|
||||
strncat(string_buffer, " + ", STRING_BUFFER_LENGTH);
|
||||
if( c1->is_zero() ) {
|
||||
snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c2->_external_name);
|
||||
} 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);
|
||||
}
|
||||
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) {
|
||||
if( !c1->is_zero() ) {
|
||||
sprintf( string_buffer, "%s", c1->_expr);
|
||||
if( !c2->is_zero() ) {
|
||||
strncat(string_buffer, "+", STRING_BUFFER_LENGTH);
|
||||
strncat(string_buffer, c2->_expr, STRING_BUFFER_LENGTH);
|
||||
if( c2->is_zero() ) {
|
||||
snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c1->_expr);
|
||||
} else {
|
||||
snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s+%s", c1->_expr, c2->_expr);
|
||||
}
|
||||
}
|
||||
else if( !c2->is_zero() ) {
|
||||
sprintf( string_buffer, "%s", c2->_expr);
|
||||
snprintf(string_buffer, STRING_BUFFER_LENGTH, "%s", c2->_expr);
|
||||
}
|
||||
else {
|
||||
sprintf( string_buffer, "0");
|
||||
}
|
||||
string_buffer[STRING_BUFFER_LENGTH - 1] = '\0';
|
||||
char *cost = strdup(string_buffer);
|
||||
|
||||
return cost;
|
||||
|
@ -57,7 +57,7 @@ ciInstanceKlass::ciInstanceKlass(Klass* k) :
|
||||
AccessFlags access_flags = ik->access_flags();
|
||||
_flags = ciFlags(access_flags);
|
||||
_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();
|
||||
_nonstatic_field_size = ik->nonstatic_field_size();
|
||||
_has_nonstatic_fields = ik->has_nonstatic_fields();
|
||||
@ -147,8 +147,8 @@ void ciInstanceKlass::compute_shared_init_state() {
|
||||
bool ciInstanceKlass::compute_shared_has_subklass() {
|
||||
GUARDED_VM_ENTRY(
|
||||
InstanceKlass* ik = get_instanceKlass();
|
||||
_has_subklass = ik->subklass() != NULL;
|
||||
return _has_subklass;
|
||||
_has_subklass = ik->subklass() != NULL ? subklass_true : subklass_false;
|
||||
return _has_subklass == subklass_true;
|
||||
)
|
||||
}
|
||||
|
||||
@ -583,7 +583,7 @@ bool ciInstanceKlass::is_leaf_type() {
|
||||
if (is_shared()) {
|
||||
return is_final(); // approximately correct
|
||||
} else {
|
||||
return !_has_subklass && (nof_implementors() == 0);
|
||||
return !has_subklass() && (nof_implementors() == 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,13 +44,15 @@ class ciInstanceKlass : public ciKlass {
|
||||
friend class ciField;
|
||||
|
||||
private:
|
||||
enum SubklassValue { subklass_unknown, subklass_false, subklass_true };
|
||||
|
||||
jobject _loader;
|
||||
jobject _protection_domain;
|
||||
|
||||
InstanceKlass::ClassState _init_state; // state of class
|
||||
bool _is_shared;
|
||||
bool _has_finalizer;
|
||||
bool _has_subklass;
|
||||
SubklassValue _has_subklass;
|
||||
bool _has_nonstatic_fields;
|
||||
bool _has_nonstatic_concrete_methods;
|
||||
bool _is_unsafe_anonymous;
|
||||
@ -139,14 +141,15 @@ public:
|
||||
return _has_finalizer; }
|
||||
bool has_subklass() {
|
||||
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()) {
|
||||
return false;
|
||||
} else {
|
||||
return compute_shared_has_subklass();
|
||||
}
|
||||
}
|
||||
return _has_subklass;
|
||||
return _has_subklass == subklass_true;
|
||||
}
|
||||
jint size_helper() {
|
||||
return (Klass::layout_helper_size_in_bytes(layout_helper())
|
||||
|
@ -198,17 +198,28 @@ void ciReceiverTypeData::translate_receiver_data_from(const ProfileData* data) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {
|
||||
for (int i = 0; i < number_of_entries(); i++) {
|
||||
intptr_t k = entries->type(i);
|
||||
TypeStackSlotEntries::set_type(i, translate_klass(k));
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
|
||||
intptr_t k = ret->type();
|
||||
set_type(translate_klass(k));
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
void ciSpeculativeTrapData::translate_from(const ProfileData* data) {
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "classfile/metadataOnStackMark.hpp"
|
||||
#include "classfile/moduleEntry.hpp"
|
||||
#include "classfile/packageEntry.hpp"
|
||||
#include "code/dependencyContext.hpp"
|
||||
#include "logging/log.hpp"
|
||||
#include "logging/logStream.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
@ -597,6 +598,7 @@ void ClassLoaderDataGraph::purge() {
|
||||
Metaspace::purge();
|
||||
set_metaspace_oom(false);
|
||||
}
|
||||
DependencyContext::purge_dependency_contexts();
|
||||
}
|
||||
|
||||
int ClassLoaderDataGraph::resize_if_needed() {
|
||||
|
@ -375,6 +375,9 @@ public:
|
||||
inline int remain() {
|
||||
return (int)(_end - _p);
|
||||
}
|
||||
int last_line_no() {
|
||||
return _line_no - 1;
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
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() {
|
||||
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) {
|
||||
assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), "");
|
||||
intptr_t* vmdeps_addr = (intptr_t*)call_site->field_addr(_vmdependencies_offset);
|
||||
DependencyContext dep_ctx(vmdeps_addr);
|
||||
nmethodBucket* volatile* vmdeps_addr = (nmethodBucket* volatile*)call_site->field_addr(_vmdependencies_offset);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1201,7 +1201,8 @@ public:
|
||||
// Interface to java.lang.invoke.MethodHandleNatives$CallSiteContext objects
|
||||
|
||||
#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;
|
||||
|
||||
@ -1210,6 +1211,7 @@ class java_lang_invoke_MethodHandleNatives_CallSiteContext : AllStatic {
|
||||
|
||||
private:
|
||||
static int _vmdependencies_offset;
|
||||
static int _last_cleanup_offset;
|
||||
|
||||
static void compute_offsets();
|
||||
|
||||
|
@ -426,6 +426,7 @@
|
||||
template(signers_name, "signers_name") \
|
||||
template(loader_data_name, "loader_data") \
|
||||
template(vmdependencies_name, "vmdependencies") \
|
||||
template(last_cleanup_name, "last_cleanup") \
|
||||
template(loader_name, "loader") \
|
||||
template(getModule_name, "getModule") \
|
||||
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, CodeBuffer* cb, int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments);
|
||||
|
||||
public:
|
||||
// Only used by unit test.
|
||||
CodeBlob()
|
||||
: _type(compiler_none) {}
|
||||
|
||||
// Returns the space needed for CodeBlob
|
||||
static unsigned int allocation_size(CodeBuffer* cb, int header_size);
|
||||
static unsigned int align_code_offset(int offset);
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "code/codeHeapState.hpp"
|
||||
#include "code/compiledIC.hpp"
|
||||
#include "code/dependencies.hpp"
|
||||
#include "code/dependencyContext.hpp"
|
||||
#include "code/icBuffer.hpp"
|
||||
#include "code/nmethod.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() {
|
||||
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||
VerifyOopClosure voc;
|
||||
|
@ -180,17 +180,10 @@ class CodeCache : AllStatic {
|
||||
ClosureIsUnloadingBehaviour _is_unloading_behaviour;
|
||||
|
||||
public:
|
||||
UnloadingScope(BoolObjectClosure* is_alive)
|
||||
: _is_unloading_behaviour(is_alive)
|
||||
{
|
||||
IsUnloadingBehaviour::set_current(&_is_unloading_behaviour);
|
||||
increment_unloading_cycle();
|
||||
}
|
||||
|
||||
~UnloadingScope() {
|
||||
IsUnloadingBehaviour::set_current(NULL);
|
||||
}
|
||||
UnloadingScope(BoolObjectClosure* is_alive);
|
||||
~UnloadingScope();
|
||||
};
|
||||
|
||||
static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);
|
||||
static uint8_t unloading_cycle() { return _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);
|
||||
|
||||
public:
|
||||
// Only used by unit test.
|
||||
CompiledMethod() {}
|
||||
|
||||
virtual bool is_compiled() const { return true; }
|
||||
|
||||
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_stale_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() {
|
||||
DependencyContext::init();
|
||||
@ -61,7 +63,7 @@ void DependencyContext::init() {
|
||||
//
|
||||
int DependencyContext::mark_dependent_nmethods(DepChange& changes) {
|
||||
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();
|
||||
// since dependencies aren't removed until an nmethod becomes a zombie,
|
||||
// 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
|
||||
// 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);
|
||||
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()) {
|
||||
b->increment();
|
||||
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) {
|
||||
_perf_total_buckets_allocated_count->inc();
|
||||
}
|
||||
}
|
||||
|
||||
void DependencyContext::release(nmethodBucket* b) {
|
||||
bool expunge = Atomic::load(&_cleaning_epoch) == 0;
|
||||
if (expunge) {
|
||||
// Remove stale entries from the list.
|
||||
expunge_stale_entries();
|
||||
assert_locked_or_safepoint(CodeCache_lock);
|
||||
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.
|
||||
// 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);
|
||||
nmethodBucket* first = dependencies();
|
||||
nmethodBucket* first = dependencies_not_unloading();
|
||||
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()) {
|
||||
int val = b->decrement();
|
||||
guarantee(val >= 0, "Underflow: %d", val);
|
||||
if (val == 0) {
|
||||
if (expunge) {
|
||||
if (last == NULL) {
|
||||
set_dependencies(b->next());
|
||||
} else {
|
||||
last->set_next(b->next());
|
||||
}
|
||||
delete b;
|
||||
if (UsePerfData) {
|
||||
_perf_total_buckets_deallocated_count->inc();
|
||||
}
|
||||
if (last == NULL) {
|
||||
// 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 {
|
||||
// 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();
|
||||
}
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
if (expunge) {
|
||||
// Remove stale entries from the list.
|
||||
expunge_stale_entries();
|
||||
release(b);
|
||||
}
|
||||
return;
|
||||
}
|
||||
last = b;
|
||||
}
|
||||
#ifdef ASSERT
|
||||
tty->print_raw_cr("### can't find dependent nmethod");
|
||||
nm->print();
|
||||
#endif // ASSERT
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
|
||||
//
|
||||
// Reclaim all unused buckets.
|
||||
//
|
||||
void DependencyContext::expunge_stale_entries() {
|
||||
assert_locked_or_safepoint(CodeCache_lock);
|
||||
if (!has_stale_entries()) {
|
||||
assert(!find_stale_entries(), "inconsistent info");
|
||||
return;
|
||||
}
|
||||
nmethodBucket* first = dependencies();
|
||||
nmethodBucket* last = NULL;
|
||||
void DependencyContext::purge_dependency_contexts() {
|
||||
int removed = 0;
|
||||
for (nmethodBucket* b = first; b != NULL;) {
|
||||
assert(b->count() >= 0, "bucket count: %d", b->count());
|
||||
nmethodBucket* next = b->next();
|
||||
if (b->count() == 0) {
|
||||
if (last == NULL) {
|
||||
first = next;
|
||||
} else {
|
||||
last->set_next(next);
|
||||
}
|
||||
removed++;
|
||||
delete b;
|
||||
// last stays the same.
|
||||
} else {
|
||||
last = b;
|
||||
}
|
||||
for (nmethodBucket* b = _purge_list; b != NULL;) {
|
||||
nmethodBucket* next = b->purge_list_next();
|
||||
removed++;
|
||||
delete b;
|
||||
b = next;
|
||||
}
|
||||
set_dependencies(first);
|
||||
set_has_stale_entries(false);
|
||||
if (UsePerfData && removed > 0) {
|
||||
_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
|
||||
int DependencyContext::remove_all_dependents() {
|
||||
assert_locked_or_safepoint(CodeCache_lock);
|
||||
nmethodBucket* b = dependencies();
|
||||
nmethodBucket* b = dependencies_not_unloading();
|
||||
set_dependencies(NULL);
|
||||
int marked = 0;
|
||||
int removed = 0;
|
||||
@ -206,12 +215,11 @@ int DependencyContext::remove_all_dependents() {
|
||||
nm->mark_for_deoptimization();
|
||||
marked++;
|
||||
}
|
||||
nmethodBucket* next = b->next();
|
||||
nmethodBucket* next = b->next_not_unloading();
|
||||
removed++;
|
||||
delete b;
|
||||
release(b);
|
||||
b = next;
|
||||
}
|
||||
set_has_stale_entries(false);
|
||||
if (UsePerfData && removed > 0) {
|
||||
_perf_total_buckets_deallocated_count->inc(removed);
|
||||
}
|
||||
@ -221,7 +229,7 @@ int DependencyContext::remove_all_dependents() {
|
||||
#ifndef PRODUCT
|
||||
void DependencyContext::print_dependent_nmethods(bool verbose) {
|
||||
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();
|
||||
tty->print("[%d] count=%d { ", idx++, b->count());
|
||||
if (!verbose) {
|
||||
@ -236,7 +244,7 @@ void DependencyContext::print_dependent_nmethods(bool verbose) {
|
||||
}
|
||||
|
||||
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()) {
|
||||
#ifdef ASSERT
|
||||
int count = b->count();
|
||||
@ -248,15 +256,112 @@ bool DependencyContext::is_dependent_nmethod(nmethod* nm) {
|
||||
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
|
||||
|
||||
int nmethodBucket::decrement() {
|
||||
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;
|
||||
private:
|
||||
nmethod* _nmethod;
|
||||
int _count;
|
||||
nmethodBucket* _next;
|
||||
volatile int _count;
|
||||
nmethodBucket* volatile _next;
|
||||
nmethodBucket* volatile _purge_list_next;
|
||||
|
||||
public:
|
||||
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 increment() { _count += 1; return _count; }
|
||||
int count() { return _count; }
|
||||
int increment() { _count += 1; return _count; }
|
||||
int decrement();
|
||||
nmethodBucket* next() { return _next; }
|
||||
void set_next(nmethodBucket* b) { _next = b; }
|
||||
nmethod* get_nmethod() { return _nmethod; }
|
||||
nmethodBucket* next();
|
||||
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; }
|
||||
};
|
||||
|
||||
//
|
||||
// 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)
|
||||
// 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 {
|
||||
friend class VMStructs;
|
||||
friend class TestDependencyContext;
|
||||
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;
|
||||
|
||||
void set_dependencies(nmethodBucket* b) {
|
||||
assert((intptr_t(b) & _has_stale_entries_mask) == 0, "should be aligned");
|
||||
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;
|
||||
}
|
||||
bool claim_cleanup();
|
||||
void set_dependencies(nmethodBucket* b);
|
||||
nmethodBucket* dependencies();
|
||||
nmethodBucket* dependencies_not_unloading();
|
||||
|
||||
static PerfCounter* _perf_total_buckets_allocated_count;
|
||||
static PerfCounter* _perf_total_buckets_deallocated_count;
|
||||
static PerfCounter* _perf_total_buckets_stale_count;
|
||||
static PerfCounter* _perf_total_buckets_stale_acc_count;
|
||||
static nmethodBucket* volatile _purge_list;
|
||||
static volatile uint64_t _cleaning_epoch;
|
||||
|
||||
public:
|
||||
#ifdef ASSERT
|
||||
@ -120,31 +100,35 @@ class DependencyContext : public StackObj {
|
||||
// (e.g. CallSiteContext Java object).
|
||||
uint64_t _safepoint_counter;
|
||||
|
||||
DependencyContext(intptr_t* addr) : _dependency_context_addr(addr),
|
||||
_safepoint_counter(SafepointSynchronize::safepoint_counter()) {}
|
||||
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()) {}
|
||||
|
||||
~DependencyContext() {
|
||||
assert(_safepoint_counter == SafepointSynchronize::safepoint_counter(), "safepoint happened");
|
||||
}
|
||||
#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
|
||||
|
||||
static const intptr_t EMPTY = 0; // dependencies = NULL, has_stale_entries = false
|
||||
|
||||
static void init();
|
||||
|
||||
int mark_dependent_nmethods(DepChange& changes);
|
||||
void add_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false);
|
||||
void remove_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false);
|
||||
void add_dependent_nmethod(nmethod* nm);
|
||||
void remove_dependent_nmethod(nmethod* nm);
|
||||
int remove_all_dependents();
|
||||
|
||||
void expunge_stale_entries();
|
||||
void clean_unloading_dependents();
|
||||
static void purge_dependency_contexts();
|
||||
static void release(nmethodBucket* b);
|
||||
static void cleaning_start();
|
||||
static void cleaning_end();
|
||||
|
||||
#ifndef PRODUCT
|
||||
void print_dependent_nmethods(bool verbose);
|
||||
bool is_dependent_nmethod(nmethod* nm);
|
||||
bool find_stale_entries();
|
||||
#endif //PRODUCT
|
||||
};
|
||||
#endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP
|
||||
|
@ -1053,7 +1053,8 @@ void nmethod::make_unloaded() {
|
||||
// recorded in instanceKlasses get flushed.
|
||||
// Since this work is being done during a GC, defer deleting dependencies from the
|
||||
// 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);
|
||||
|
||||
// Break cycle between nmethod & method
|
||||
@ -1095,7 +1096,8 @@ void nmethod::make_unloaded() {
|
||||
}
|
||||
|
||||
// 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
|
||||
Universe::heap()->unregister_nmethod(this);
|
||||
@ -1372,8 +1374,8 @@ oop nmethod::oop_at(int index) const {
|
||||
// notifies instanceKlasses that are reachable
|
||||
|
||||
void nmethod::flush_dependencies(bool delete_immediately) {
|
||||
assert_locked_or_safepoint(CodeCache_lock);
|
||||
assert(Universe::heap()->is_gc_active() != delete_immediately,
|
||||
DEBUG_ONLY(bool called_by_gc = Universe::heap()->is_gc_active() || Thread::current()->is_ConcurrentGC_thread();)
|
||||
assert(called_by_gc != delete_immediately,
|
||||
"delete_immediately is false if and only if we are called during GC");
|
||||
if (!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) {
|
||||
// CallSite dependencies are managed on per-CallSite instance basis.
|
||||
oop call_site = deps.argument_oop(0);
|
||||
MethodHandles::remove_dependent_nmethod(call_site, this);
|
||||
if (delete_immediately) {
|
||||
assert_locked_or_safepoint(CodeCache_lock);
|
||||
MethodHandles::remove_dependent_nmethod(call_site, this);
|
||||
} else {
|
||||
MethodHandles::clean_dependency_context(call_site);
|
||||
}
|
||||
} else {
|
||||
Klass* klass = deps.context_type();
|
||||
if (klass == NULL) {
|
||||
@ -1389,11 +1396,12 @@ void nmethod::flush_dependencies(bool delete_immediately) {
|
||||
}
|
||||
// During GC delete_immediately is false, and liveness
|
||||
// of dependee determines class that needs to be updated.
|
||||
if (delete_immediately || klass->is_loader_alive()) {
|
||||
// The GC defers deletion of this entry, since there might be multiple threads
|
||||
// iterating over the _dependencies graph. Other call paths are single-threaded
|
||||
// and may delete it immediately.
|
||||
InstanceKlass::cast(klass)->remove_dependent_nmethod(this, delete_immediately);
|
||||
if (delete_immediately) {
|
||||
assert_locked_or_safepoint(CodeCache_lock);
|
||||
InstanceKlass::cast(klass)->remove_dependent_nmethod(this);
|
||||
} else if (klass->is_loader_alive()) {
|
||||
// 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() {
|
||||
if (!is_compiled_by_jvmci()) {
|
||||
return;
|
||||
}
|
||||
|
||||
assert(Patching_lock->is_locked() ||
|
||||
SafepointSynchronize::is_at_safepoint(), "should be performed under a lock for consistency");
|
||||
oop installed_code = JNIHandles::resolve(_jvmci_installed_code);
|
||||
|
@ -257,6 +257,14 @@ class nmethod : public CompiledMethod {
|
||||
#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,
|
||||
int compile_id,
|
||||
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);
|
||||
}
|
||||
|
||||
// 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)) {
|
||||
FLAG_SET_ERGO(uint, G1ConcRefinementThreads, ParallelGCThreads);
|
||||
}
|
||||
|
@ -1563,16 +1563,33 @@ G1CollectedHeap::G1CollectedHeap(G1CollectorPolicy* collector_policy) :
|
||||
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,
|
||||
size_t size,
|
||||
size_t translation_factor) {
|
||||
size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1);
|
||||
// Allocate a new reserved space, preferring to use large pages.
|
||||
ReservedSpace rs(size, preferred_page_size);
|
||||
size_t page_size = actual_reserved_page_size(rs);
|
||||
G1RegionToSpaceMapper* result =
|
||||
G1RegionToSpaceMapper::create_mapper(rs,
|
||||
size,
|
||||
rs.alignment(),
|
||||
page_size,
|
||||
HeapRegion::GrainBytes,
|
||||
translation_factor,
|
||||
mtGC);
|
||||
@ -1580,7 +1597,7 @@ G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* des
|
||||
os::trace_page_sizes_for_requested_size(description,
|
||||
size,
|
||||
preferred_page_size,
|
||||
rs.alignment(),
|
||||
page_size,
|
||||
rs.base(),
|
||||
rs.size());
|
||||
|
||||
@ -1675,7 +1692,7 @@ jint G1CollectedHeap::initialize() {
|
||||
|
||||
// Carve out the G1 part of the heap.
|
||||
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::create_mapper(g1_rs,
|
||||
g1_rs.size(),
|
||||
|
@ -273,6 +273,69 @@ public:
|
||||
};
|
||||
|
||||
// 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 {
|
||||
private:
|
||||
G1CollectedHeap* _g1h;
|
||||
|
@ -115,6 +115,7 @@ public:
|
||||
void verify_dirty_region(HeapRegion* hr) PRODUCT_RETURN;
|
||||
void verify_dirty_young_regions() PRODUCT_RETURN;
|
||||
|
||||
static void verify_ready_for_archiving();
|
||||
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.
|
||||
*
|
||||
* 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:
|
||||
return "WhiteBox Initiated Full GC";
|
||||
|
||||
case _archive_time_gc:
|
||||
return "Full GC for -Xshare:dump";
|
||||
|
||||
case _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.
|
||||
*
|
||||
* 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_conc_mark,
|
||||
_wb_full_gc,
|
||||
_archive_time_gc,
|
||||
|
||||
/* implementation independent, but reserved for GC use */
|
||||
_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)));
|
||||
}
|
||||
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;
|
||||
} else {
|
||||
return val;
|
||||
|
@ -38,11 +38,18 @@ void ZForwardingTable::setup(size_t live_objects) {
|
||||
_size = ZUtils::round_up_power_of_2(live_objects * 2);
|
||||
_table = MallocArrayAllocator<ZForwardingTableEntry>::allocate(_size, mtGC);
|
||||
|
||||
// Clear table
|
||||
memset(_table, ZForwardingTableEntry::empty(), _size * sizeof(ZForwardingTableEntry));
|
||||
// Construct table entries
|
||||
for (size_t i = 0; i < _size; i++) {
|
||||
::new (_table + i) ZForwardingTableEntry();
|
||||
}
|
||||
}
|
||||
|
||||
void ZForwardingTable::reset() {
|
||||
// Destruct table entries
|
||||
for (size_t i = 0; i < _size; i++) {
|
||||
(_table + i)->~ZForwardingTableEntry();
|
||||
}
|
||||
|
||||
// Free table
|
||||
MallocArrayAllocator<ZForwardingTableEntry>::free(_table);
|
||||
_table = NULL;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user