diff --git a/.hgtags-top-repo b/.hgtags-top-repo index a1da5758a42..cb9368a1832 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -390,3 +390,4 @@ f64afae7f1a5608e438585bbf0bc23785e69cba0 jdk-9+141 ff98aa9ec9fae991e426ce5926fc9036d25f5562 jdk-9+145 a22e2671d88f6b22a4aa82e3966986542ed2a381 jdk-9+146 5f6920274c48eb00d31afee6c034826a754c13d9 jdk-9+147 +3ffc3e886c74736e387f3685e86b557cdea706c8 jdk-9+148 diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 8a665cb09f4..79ef6b5bfca 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -671,6 +671,8 @@ LLVM_LIBS LLVM_LDFLAGS LLVM_CFLAGS LLVM_CONFIG +LIBFFI_LIB_FILE +ENABLE_LIBFFI_BUNDLING LIBFFI_LIBS LIBFFI_CFLAGS ALSA_LIBS @@ -1208,6 +1210,7 @@ with_alsa_lib with_libffi with_libffi_include with_libffi_lib +enable_libffi_bundling with_libjpeg with_giflib with_libpng @@ -1990,6 +1993,9 @@ Optional Features: disable bundling of the freetype library with the build result [enabled on Windows or when using --with-freetype, disabled otherwise] + --enable-libffi-bundling + enable bundling of libffi.so to make the built JDK + runnable on more systems --enable-jtreg-failure-handler forces build of the jtreg failure handler to be enabled, missing dependencies become fatal errors. @@ -4171,7 +4177,7 @@ apt_help() { ffi) PKGHANDLER_COMMAND="sudo apt-get install libffi-dev" ;; x11) - PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; + PKGHANDLER_COMMAND="sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; ccache) PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; dtrace) @@ -5082,7 +5088,7 @@ VS_SDK_PLATFORM_NAME_2013= #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1480714260 +DATE_WHEN_GENERATED=1481104795 ############################################################################### # @@ -24451,11 +24457,10 @@ $as_echo "$as_me: WARNING: --with-version-opt value has been sanitized from '$wi fi else if test "x$NO_DEFAULT_VERSION_PARTS" != xtrue; then - # Default is to calculate a string like this .. - timestamp=`$DATE '+%Y-%m-%d-%H%M%S'` + # Default is to calculate a string like this 'adhoc..' # Outer [ ] to quote m4. basedirname=`$BASENAME "$TOPDIR" | $TR -d -c '[a-z][A-Z][0-9].-'` - VERSION_OPT="$timestamp.$USERNAME.$basedirname" + VERSION_OPT="adhoc.$USERNAME.$basedirname" fi fi @@ -62634,6 +62639,11 @@ if test "${with_libffi_lib+set}" = set; then : withval=$with_libffi_lib; fi + # Check whether --enable-libffi-bundling was given. +if test "${enable_libffi_bundling+set}" = set; then : + enableval=$enable_libffi_bundling; +fi + if test "x$NEEDS_LIB_FFI" = xfalse; then if (test "x${with_libffi}" != x && test "x${with_libffi}" != xno) || \ @@ -62652,6 +62662,7 @@ $as_echo "$as_me: WARNING: libffi not used, so --with-libffi[-*] is ignored" >&2 fi if test "x${with_libffi}" != x; then + LIBFFI_LIB_PATH="${with_libffi}/lib" LIBFFI_LIBS="-L${with_libffi}/lib -lffi" LIBFFI_CFLAGS="-I${with_libffi}/include" LIBFFI_FOUND=yes @@ -62661,6 +62672,7 @@ $as_echo "$as_me: WARNING: libffi not used, so --with-libffi[-*] is ignored" >&2 LIBFFI_FOUND=yes fi if test "x${with_libffi_lib}" != x; then + LIBFFI_LIB_PATH="${with_libffi_lib}" LIBFFI_LIBS="-L${with_libffi_lib} -lffi" LIBFFI_FOUND=yes fi @@ -62870,12 +62882,75 @@ $as_echo "$LIBFFI_WORKS" >&6; } as_fn_error $? "Found libffi but could not link and compile with it. $HELP_MSG" "$LINENO" 5 fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libffi should be bundled" >&5 +$as_echo_n "checking if libffi should be bundled... " >&6; } + if test "x$enable_libffi_bundling" = "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ENABLE_LIBFFI_BUNDLING=false + elif test "x$enable_libffi_bundling" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, forced" >&5 +$as_echo "no, forced" >&6; } + ENABLE_LIBFFI_BUNDLING=false + elif test "x$enable_libffi_bundling" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, forced" >&5 +$as_echo "yes, forced" >&6; } + ENABLE_LIBFFI_BUNDLING=true + else + as_fn_error $? "Invalid value for --enable-libffi-bundling" "$LINENO" 5 + fi + + # Find the libffi.so.X to bundle + if test "x${ENABLE_LIBFFI_BUNDLING}" = "xtrue"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libffi lib file location" >&5 +$as_echo_n "checking for libffi lib file location... " >&6; } + if test "x${LIBFFI_LIB_PATH}" != x; then + if test -e ${LIBFFI_LIB_PATH}/libffi.so.?; then + LIBFFI_LIB_FILE="${LIBFFI_LIB_PATH}/libffi.so.?" + else + as_fn_error $? "Could not locate libffi.so.? for bundling in ${LIBFFI_LIB_PATH}" "$LINENO" 5 + fi + else + # If we don't have an explicit path, look in a few obvious places + if test "x${OPENJDK_TARGET_CPU}" = "xx86"; then + if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?" + elif test -e ${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.?" + else + as_fn_error $? "Could not locate libffi.so.? for bundling" "$LINENO" 5 + fi + elif test "x${OPENJDK_TARGET_CPU}" = "xx86_64"; then + if test -e ${SYSROOT}/usr/lib64/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib64/libffi.so.?" + elif test -e ${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.?" + else + as_fn_error $? "Could not locate libffi.so.? for bundling" "$LINENO" 5 + fi + else + # Fallback on the default /usr/lib dir + if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?" + else + as_fn_error $? "Could not locate libffi.so.? for bundling" "$LINENO" 5 + fi + fi + fi + # Make sure the wildcard is evaluated + LIBFFI_LIB_FILE="$(ls ${LIBFFI_LIB_FILE})" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${LIBFFI_LIB_FILE}" >&5 +$as_echo "${LIBFFI_LIB_FILE}" >&6; } + fi fi + + if [[ " $JVM_VARIANTS " =~ " zeroshark " ]] ; then # Extract the first word of "llvm-config", so it can be a program name with args. set dummy llvm-config; ac_word=$2 diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index e7ccdca3cf3..98e2a9258b5 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -116,7 +116,7 @@ apt_help() { ffi) PKGHANDLER_COMMAND="sudo apt-get install libffi-dev" ;; x11) - PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; + PKGHANDLER_COMMAND="sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; ccache) PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; dtrace) diff --git a/common/autoconf/jdk-version.m4 b/common/autoconf/jdk-version.m4 index 65df55e5690..949f4276fd4 100644 --- a/common/autoconf/jdk-version.m4 +++ b/common/autoconf/jdk-version.m4 @@ -160,11 +160,10 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS], fi else if test "x$NO_DEFAULT_VERSION_PARTS" != xtrue; then - # Default is to calculate a string like this .. - timestamp=`$DATE '+%Y-%m-%d-%H%M%S'` + # Default is to calculate a string like this 'adhoc..' # Outer [ ] to quote m4. [ basedirname=`$BASENAME "$TOPDIR" | $TR -d -c '[a-z][A-Z][0-9].-'` ] - VERSION_OPT="$timestamp.$USERNAME.$basedirname" + VERSION_OPT="adhoc.$USERNAME.$basedirname" fi fi diff --git a/common/autoconf/lib-ffi.m4 b/common/autoconf/lib-ffi.m4 index b4b36f12e5b..2a714f3a0b9 100644 --- a/common/autoconf/lib-ffi.m4 +++ b/common/autoconf/lib-ffi.m4 @@ -35,6 +35,8 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBFFI], [specify directory for the libffi include files])]) AC_ARG_WITH(libffi-lib, [AS_HELP_STRING([--with-libffi-lib], [specify directory for the libffi library])]) + AC_ARG_ENABLE(libffi-bundling, [AS_HELP_STRING([--enable-libffi-bundling], + [enable bundling of libffi.so to make the built JDK runnable on more systems])]) if test "x$NEEDS_LIB_FFI" = xfalse; then if (test "x${with_libffi}" != x && test "x${with_libffi}" != xno) || \ @@ -52,6 +54,7 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBFFI], fi if test "x${with_libffi}" != x; then + LIBFFI_LIB_PATH="${with_libffi}/lib" LIBFFI_LIBS="-L${with_libffi}/lib -lffi" LIBFFI_CFLAGS="-I${with_libffi}/include" LIBFFI_FOUND=yes @@ -61,6 +64,7 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBFFI], LIBFFI_FOUND=yes fi if test "x${with_libffi_lib}" != x; then + LIBFFI_LIB_PATH="${with_libffi_lib}" LIBFFI_LIBS="-L${with_libffi_lib} -lffi" LIBFFI_FOUND=yes fi @@ -109,8 +113,65 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBFFI], HELP_MSG_MISSING_DEPENDENCY([ffi]) AC_MSG_ERROR([Found libffi but could not link and compile with it. $HELP_MSG]) fi + + AC_MSG_CHECKING([if libffi should be bundled]) + if test "x$enable_libffi_bundling" = "x"; then + AC_MSG_RESULT([no]) + ENABLE_LIBFFI_BUNDLING=false + elif test "x$enable_libffi_bundling" = "xno"; then + AC_MSG_RESULT([no, forced]) + ENABLE_LIBFFI_BUNDLING=false + elif test "x$enable_libffi_bundling" = "xyes"; then + AC_MSG_RESULT([yes, forced]) + ENABLE_LIBFFI_BUNDLING=true + else + AC_MSG_ERROR([Invalid value for --enable-libffi-bundling]) + fi + + # Find the libffi.so.X to bundle + if test "x${ENABLE_LIBFFI_BUNDLING}" = "xtrue"; then + AC_MSG_CHECKING([for libffi lib file location]) + if test "x${LIBFFI_LIB_PATH}" != x; then + if test -e ${LIBFFI_LIB_PATH}/libffi.so.?; then + LIBFFI_LIB_FILE="${LIBFFI_LIB_PATH}/libffi.so.?" + else + AC_MSG_ERROR([Could not locate libffi.so.? for bundling in ${LIBFFI_LIB_PATH}]) + fi + else + # If we don't have an explicit path, look in a few obvious places + if test "x${OPENJDK_TARGET_CPU}" = "xx86"; then + if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?" + elif test -e ${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/i386-linux-gnu/libffi.so.?" + else + AC_MSG_ERROR([Could not locate libffi.so.? for bundling]) + fi + elif test "x${OPENJDK_TARGET_CPU}" = "xx86_64"; then + if test -e ${SYSROOT}/usr/lib64/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib64/libffi.so.?" + elif test -e ${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/x86_64-linux-gnu/libffi.so.?" + else + AC_MSG_ERROR([Could not locate libffi.so.? for bundling]) + fi + else + # Fallback on the default /usr/lib dir + if test -e ${SYSROOT}/usr/lib/libffi.so.? ; then + LIBFFI_LIB_FILE="${SYSROOT}/usr/lib/libffi.so.?" + else + AC_MSG_ERROR([Could not locate libffi.so.? for bundling]) + fi + fi + fi + # Make sure the wildcard is evaluated + LIBFFI_LIB_FILE="$(ls ${LIBFFI_LIB_FILE})" + AC_MSG_RESULT([${LIBFFI_LIB_FILE}]) + fi fi AC_SUBST(LIBFFI_CFLAGS) AC_SUBST(LIBFFI_LIBS) + AC_SUBST(ENABLE_LIBFFI_BUNDLING) + AC_SUBST(LIBFFI_LIB_FILE) ]) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 1d7cdf263ed..fa16d6bc266 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -319,6 +319,8 @@ ALSA_LIBS:=@ALSA_LIBS@ ALSA_CFLAGS:=@ALSA_CFLAGS@ LIBFFI_LIBS:=@LIBFFI_LIBS@ LIBFFI_CFLAGS:=@LIBFFI_CFLAGS@ +ENABLE_LIBFFI_BUNDLING:=@ENABLE_LIBFFI_BUNDLING@ +LIBFFI_LIB_FILE:=@LIBFFI_LIB_FILE@ PACKAGE_PATH=@PACKAGE_PATH@ diff --git a/common/conf/jib-profiles.js b/common/conf/jib-profiles.js index a40c8b05eef..8c0f3a7d23b 100644 --- a/common/conf/jib-profiles.js +++ b/common/conf/jib-profiles.js @@ -346,6 +346,35 @@ var getJibProfilesProfiles = function (input, common) { // Generate debug profiles for the open jprt profiles profiles = concatObjects(profiles, generateDebugProfiles(common, openOnlyProfiles)); + // Profiles for building the zero jvm variant. These are used for verification + // in JPRT. + var zeroProfiles = { + "linux-x64-zero": { + target_os: "linux", + target_cpu: "x64", + dependencies: concat(common.dependencies, "devkit"), + configure_args: concat(common.configure_args, + "--with-zlib=system", + "--with-jvm-variants=zero", + "--enable-libffi-bundling"), + default_make_targets: common.default_make_targets + }, + + "linux-x86-zero": { + target_os: "linux", + target_cpu: "x86", + build_cpu: "x64", + dependencies: concat(common.dependencies, "devkit"), + configure_args: concat(common.configure_args, common.configure_args_32bit, + "--with-zlib=system", + "--with-jvm-variants=zero", + "--enable-libffi-bundling"), + default_make_targets: common.default_make_targets + }, + } + profiles = concatObjects(profiles, zeroProfiles); + profiles = concatObjects(profiles, generateDebugProfiles(common, zeroProfiles)); + // Profiles used to run tests. Used in JPRT. var testOnlyProfiles = { @@ -380,7 +409,7 @@ var getJibProfilesDependencies = function (input, common) { + (input.build_cpu == "x86" ? "i586" : input.build_cpu); var devkit_platform_revisions = { - linux_x64: "gcc4.9.2-OEL6.4+1.0", + linux_x64: "gcc4.9.2-OEL6.4+1.1", macosx_x64: "Xcode6.3-MacOSX10.9+1.0", solaris_x64: "SS12u4-Solaris11u1+1.0", solaris_sparcv9: "SS12u4-Solaris11u1+1.0", diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 4070057d7fa..3a531937f19 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -550,3 +550,4 @@ d87d5d430c42342f0320ca7f5cbe0cbd1f9d62ba jdk-9+143 61e7ea56312351657e69198c503a6f7bf865af83 jdk-9+145 a82cb5350cad96a0b4de496afebe3ded89f27efa jdk-9+146 132a72c782071cc11ab25cc7c9ee167c3632fea4 jdk-9+147 +5e4e893520ecdbd517c6ed6375f0885664fe62c4 jdk-9+148 diff --git a/hotspot/make/copy/Copy-java.base.gmk b/hotspot/make/copy/Copy-java.base.gmk index ffb6e30dae5..2185b60396e 100644 --- a/hotspot/make/copy/Copy-java.base.gmk +++ b/hotspot/make/copy/Copy-java.base.gmk @@ -65,3 +65,17 @@ $(INCLUDE_DST_DIR)/$(JNI_MD_SUBDIR)/jni_md.h: $(JNI_MD_H_SRC) #TARGETS += $(INCLUDE_DST_DIR)/$(JNI_MD_SUBDIR)/jni_md.h ################################################################################ +# Optionally copy libffi.so.? into the the image + +ifeq ($(ENABLE_LIBFFI_BUNDLING), true) + $(eval $(call SetupCopyFiles, COPY_LIBFFI, \ + FILES := $(LIBFFI_LIB_FILE), \ + DEST := $(call FindLibDirForModule, $(MODULE)), \ + FLATTEN := true, \ + MACRO := install-file-nolink, \ + )) + + TARGETS += $(COPY_LIBFFI) +endif + +################################################################################ diff --git a/hotspot/test/Makefile b/hotspot/test/Makefile index 6e38234f52d..e37f990e49c 100644 --- a/hotspot/test/Makefile +++ b/hotspot/test/Makefile @@ -4,7 +4,9 @@ # # 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. +# 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 @@ -22,262 +24,59 @@ # # -# -# Makefile to run various hotspot tests -# +NATIVE_TEST_PATH := hotspot/jtreg/native -ALT_MAKE ?= closed +TREAT_EXIT_CODE_1_AS_0 := true -GETMIXEDPATH=echo +CLEAN_BEFORE_PREP := true -# Utilities used -AWK = awk -CAT = cat -CD = cd -CHMOD = chmod -CP = cp -CUT = cut -DIRNAME = dirname -ECHO = echo -EGREP = egrep -EXPAND = expand -FIND = find -MKDIR = mkdir -PWD = pwd -SED = sed -SORT = sort -TEE = tee -UNAME = uname -UNIQ = uniq -WC = wc -ZIPEXE = zip +USE_JTREG_VERSION := 4.1 -define NEWLINE +USE_JTREG_ASSERT := false +LIMIT_JTREG_VM_MEMORY := false -endef +IGNORE_MARKED_TESTS := true # Get OS name from uname (Cygwin inexplicably adds _NT-5.1) -UNAME_S := $(shell $(UNAME) -s | $(CUT) -f1 -d_) +UNAME_S := $(shell uname -s | cut -f1 -d_) + ifeq ($(UNAME_S), SunOS) - PLATFORM = solaris - SLASH_JAVA = /java - ARCH = $(shell uname -p) - ifeq ($(ARCH), i386) - ARCH=i586 - endif NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line) endif ifeq ($(UNAME_S), Linux) - PLATFORM = linux - SLASH_JAVA = /java - ARCH = $(shell uname -m) - ifeq ($(ARCH), i386) - ARCH = i586 - endif NUM_CORES := $(shell cat /proc/cpuinfo | grep -c processor) endif ifeq ($(UNAME_S), Darwin) - PLATFORM = bsd - SLASH_JAVA = /java - ARCH = $(shell uname -m) - ifeq ($(ARCH), i386) - ARCH = i586 - endif NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu) endif -ifeq ($(findstring BSD,$(UNAME_S)), BSD) - PLATFORM = bsd - SLASH_JAVA = /java - ARCH = $(shell uname -m) - ifeq ($(ARCH), i386) - ARCH = i586 - endif -endif -ifeq ($(PLATFORM),) - # detect whether we're running in MKS or cygwin - ifeq ($(UNAME_S), Windows_NT) # MKS - GETMIXEDPATH=dosname -s - endif - ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN) - GETMIXEDPATH=cygpath -m - endif - PLATFORM = windows - SLASH_JAVA = J: - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64) - ARCH = ia64 - else - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64) - ARCH = x64 - else - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T) - ARCH = x64 - else - ARCH = i586 - endif - endif - endif - EXESUFFIX = .exe +ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN) ifneq ($(NUMBER_OF_PROCESSORS), ) NUM_CORES := $(NUMBER_OF_PROCESSORS) else ifneq ($(HOTSPOT_BUILD_JOBS), ) NUM_CORES := $(HOTSPOT_BUILD_JOBS) + else + NUM_CORES := 1 # fallback endif endif endif -ifdef ALT_SLASH_JAVA - SLASH_JAVA = $(ALT_SLASH_JAVA) +# Concurrency based on min(cores / 2, 12) +CONCURRENCY := $(shell expr $(NUM_CORES) / 2) +ifeq ($(CONCURRENCY), 0) + CONCURRENCY := 1 +else ifeq ($(shell expr $(CONCURRENCY) \> 12), 1) + CONCURRENCY := 12 endif -# Root of this test area (important to use full paths in some places) -TEST_ROOT := $(shell pwd) +# Make sure MaxRAMFraction is high enough to not cause OOM or swapping since we may end up with a lot of JVM's +JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMFraction=$(shell expr $(CONCURRENCY) \* 4) -# Root of all test results -ifdef TEST_OUTPUT_DIR - $(shell $(MKDIR) -p $(TEST_OUTPUT_DIR)/jtreg) - ABS_TEST_OUTPUT_DIR := \ - $(shell $(CD) $(TEST_OUTPUT_DIR)/jtreg && $(PWD)) -else - ifdef ALT_OUTPUTDIR - ABS_OUTPUTDIR = $(shell $(CD) $(ALT_OUTPUTDIR) && $(PWD)) - else - ABS_OUTPUTDIR = $(shell $(CD) $(TEST_ROOT)/.. && $(PWD)) - endif - - ABS_PLATFORM_BUILD_ROOT = $(ABS_OUTPUTDIR) - ABS_TEST_OUTPUT_DIR := $(ABS_PLATFORM_BUILD_ROOT)/testoutput/$(UNIQUE_DIR) -endif - -# Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test) -ifndef PRODUCT_HOME - # Try to use images/jdk if it exists - ABS_JDK_IMAGE = $(ABS_PLATFORM_BUILD_ROOT)/images/jdk - PRODUCT_HOME := \ - $(shell \ - if [ -d $(ABS_JDK_IMAGE) ] ; then \ - $(ECHO) "$(ABS_JDK_IMAGE)"; \ - else \ - $(ECHO) "$(ABS_PLATFORM_BUILD_ROOT)"; \ - fi) - PRODUCT_HOME := $(PRODUCT_HOME) -endif - -# Expect JPRT to set JAVA_ARGS (e.g. -server etc.) -JAVA_OPTIONS = -ifdef JAVA_ARGS - JAVA_OPTIONS = $(JAVA_ARGS) -endif - -# jtreg -nativepath -# -# Local make tests will be TEST_IMAGE_DIR and JPRT with jprt.use.reg.test.bundle=true -# should be JPRT_TESTNATIVE_PATH -ifdef TEST_IMAGE_DIR - TESTNATIVE_DIR = $(TEST_IMAGE_DIR) -else ifdef JPRT_TESTNATIVE_PATH - TESTNATIVE_DIR = $(JPRT_TESTNATIVE_PATH) -endif -ifdef TESTNATIVE_DIR - JTREG_NATIVE_PATH = -nativepath:$(shell $(GETMIXEDPATH) "$(TESTNATIVE_DIR)/hotspot/jtreg/native") -endif - -# jtreg failure handler config -ifeq ($(FAILURE_HANDLER_DIR), ) - ifneq ($(TESTNATIVE_DIR), ) - FAILURE_HANDLER_DIR := $(TESTNATIVE_DIR)/failure_handler - endif -endif -ifneq ($(FAILURE_HANDLER_DIR), ) - FAILURE_HANDLER_DIR_MIXED := $(shell $(GETMIXEDPATH) "$(FAILURE_HANDLER_DIR)") - JTREG_FAILURE_HANDLER_OPTIONS := \ - -timeoutHandlerDir:$(FAILURE_HANDLER_DIR_MIXED)/jtregFailureHandler.jar \ - -observerDir:$(FAILURE_HANDLER_DIR_MIXED)/jtregFailureHandler.jar \ - -timeoutHandler:jdk.test.failurehandler.jtreg.GatherProcessInfoTimeoutHandler \ - -observer:jdk.test.failurehandler.jtreg.GatherDiagnosticInfoObserver \ - -timeoutHandlerTimeout:0 - ifeq ($(PLATFORM), windows) - JTREG_FAILURE_HANDLER_OPTIONS += -J-Djava.library.path="$(FAILURE_HANDLER_DIR_MIXED)" - endif -endif - -# Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results) -ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip -ifdef JPRT_ARCHIVE_BUNDLE - ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE) -endif - -# How to create the test bundle (pass or fail, we want to create this) -# Follow command with ";$(BUNDLE_UP_AND_EXIT)", so it always gets executed. -ZIP_UP_RESULTS = ( $(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)` \ - && $(CD) $(ABS_TEST_OUTPUT_DIR) \ - && $(CHMOD) -R a+r . \ - && $(ZIPEXE) -q -r $(ARCHIVE_BUNDLE) . ) - -# important results files -SUMMARY_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport/text/summary.txt") -STATS_TXT_NAME = Stats.txt -STATS_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/$(STATS_TXT_NAME)") -RUNLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/runlist.txt") -PASSLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/passlist.txt") -FAILLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/faillist.txt") -EXITCODE = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/exitcode.txt") - -TESTEXIT = \ - if [ ! -s $(EXITCODE) ] ; then \ - $(ECHO) "ERROR: EXITCODE file not filled in."; \ - $(ECHO) "1" > $(EXITCODE); \ - fi ; \ - testExitCode=`$(CAT) $(EXITCODE)`; \ - $(ECHO) "EXIT CODE: $${testExitCode}"; \ - exit $${testExitCode} - -BUNDLE_UP_AND_EXIT = \ -( \ - jtregExitCode=$$? && \ - _summary="$(SUMMARY_TXT)"; \ - if [ $${jtregExitCode} = 1 ] ; then \ - jtregExitCode=0; \ - fi; \ - $(RM) -f $(STATS_TXT) $(RUNLIST) $(PASSLIST) $(FAILLIST) $(EXITCODE); \ - $(ECHO) "$${jtregExitCode}" > $(EXITCODE); \ - if [ -r "$${_summary}" ] ; then \ - $(ECHO) "Summary: $(UNIQUE_DIR)" > $(STATS_TXT); \ - $(EXPAND) $${_summary} | $(EGREP) -v ' Not run\.' > $(RUNLIST); \ - $(EGREP) ' Passed\.' $(RUNLIST) \ - | $(EGREP) -v ' Error\.' \ - | $(EGREP) -v ' Failed\.' > $(PASSLIST); \ - ( $(EGREP) ' Failed\.' $(RUNLIST); \ - $(EGREP) ' Error\.' $(RUNLIST); \ - $(EGREP) -v ' Passed\.' $(RUNLIST) ) \ - | $(SORT) | $(UNIQ) > $(FAILLIST); \ - if [ $${jtregExitCode} != 0 -o -s $(FAILLIST) ] ; then \ - $(EXPAND) $(FAILLIST) \ - | $(CUT) -d' ' -f1 \ - | $(SED) -e 's@^@FAILED: @' >> $(STATS_TXT); \ - if [ $${jtregExitCode} = 0 ] ; then \ - jtregExitCode=1; \ - fi; \ - fi; \ - runc="`$(CAT) $(RUNLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ - passc="`$(CAT) $(PASSLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ - failc="`$(CAT) $(FAILLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ - exclc="FIXME CODETOOLS-7900176"; \ - $(ECHO) "TEST STATS: name=$(UNIQUE_DIR) run=$${runc} pass=$${passc} fail=$${failc}" \ - >> $(STATS_TXT); \ - else \ - $(ECHO) "Missing file: $${_summary}" >> $(STATS_TXT); \ - fi; \ - if [ -f $(STATS_TXT) ] ; then \ - $(CAT) $(STATS_TXT); \ - fi; \ - $(ZIP_UP_RESULTS) ; \ - $(TESTEXIT) \ -) +# Include the common base file with most of the logic +include ../../test/TestCommon.gmk ################################################################ - # Default make rule (runs jtreg_tests) all: hotspot_all @$(ECHO) "Testing completed successfully" @@ -292,106 +91,10 @@ hotspot_%: hotspot_internal: $(ALT_OUTPUTDIR)/jdk/bin/java -XX:+ExecuteInternalVMTests -XX:+ShowMessageBoxOnError -version -# Prep for output -prep: clean - @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR) - @$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` - -# Cleanup -clean: - @$(RM) -r $(ABS_TEST_OUTPUT_DIR) - @$(RM) $(ARCHIVE_BUNDLE) - ################################################################ - -# jtreg tests - -# Expect JT_HOME to be set for jtreg tests. (home for jtreg) -ifndef JT_HOME - JT_HOME = $(SLASH_JAVA)/re/jtreg/4.1/promoted/latest/binaries/jtreg - ifdef JPRT_JTREG_HOME - JT_HOME = $(JPRT_JTREG_HOME) - endif -endif - -# When called from JPRT the TESTDIRS variable is set to the jtreg tests to run -ifdef TESTDIRS - TEST_SELECTION = $(TESTDIRS) -endif - -# Concurrency based on min(cores / 2, 12) -ifdef NUM_CORES - CONCURRENCY := $(shell expr $(NUM_CORES) / 2) - ifeq ($(CONCURRENCY), 0) - CONCURRENCY := 1 - else ifeq ($(shell expr $(CONCURRENCY) \> 12), 1) - CONCURRENCY := 12 - endif -else - CONCURRENCY := 1 -endif -JTREG_BASIC_OPTIONS += -concurrency:$(CONCURRENCY) - -# Make sure MaxRAMFraction is high enough to not cause OOM or swapping since we may end up with a lot of JVM's -JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMFraction=$(shell expr $(CONCURRENCY) \* 4) - -ifdef EXTRA_JTREG_OPTIONS - JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS) -endif - -# Default JTREG to run -JTREG = $(JT_HOME)/bin/jtreg - -# Use agent mode -JTREG_BASIC_OPTIONS += -agentvm -# Only run automatic tests -JTREG_BASIC_OPTIONS += -a -# Report details on all failed or error tests, times too -JTREG_BASIC_OPTIONS += -v:fail,error,time -# Retain all files for failing tests -JTREG_BASIC_OPTIONS += -retain:fail,error -# Ignore tests are not run and completely silent about it -JTREG_IGNORE_OPTION = -ignore:quiet -JTREG_BASIC_OPTIONS += $(JTREG_IGNORE_OPTION) -# Multiply by 4 the timeout factor -JTREG_TIMEOUT_OPTION = -timeoutFactor:4 -JTREG_BASIC_OPTIONS += $(JTREG_TIMEOUT_OPTION) -# Set other vm and test options -JTREG_TEST_OPTIONS = $(JAVA_ARGS:%=-javaoptions:%) $(JAVA_OPTIONS:%=-vmoption:%) $(JAVA_VM_ARGS:%=-vmoption:%) - -# Option to tell jtreg to not run tests marked with "ignore" -ifeq ($(PLATFORM), windows) - JTREG_KEY_OPTION = -k:!ignore -else - JTREG_KEY_OPTION = -k:\!ignore -endif -JTREG_BASIC_OPTIONS += $(JTREG_KEY_OPTION) - +ALT_MAKE ?= closed -include $(ALT_MAKE)/Makefile -# Make sure jtreg exists -$(JTREG): $(JT_HOME) - -jtreg_tests: prep $(PRODUCT_HOME) $(JTREG) - ( \ - ( JT_HOME=$(shell $(GETMIXEDPATH) "$(JT_HOME)"); \ - export JT_HOME; \ - $(shell $(GETMIXEDPATH) "$(JTREG)") \ - $(JTREG_BASIC_OPTIONS) \ - -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport") \ - -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTwork") \ - -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \ - $(JTREG_NATIVE_PATH) \ - $(JTREG_FAILURE_HANDLER_OPTIONS) \ - $(JTREG_EXCLUSIONS) \ - $(JTREG_TEST_OPTIONS) \ - $(TEST_SELECTION) \ - ) ; \ - $(BUNDLE_UP_AND_EXIT) \ - ) 2>&1 | $(TEE) $(ABS_TEST_OUTPUT_DIR)/output.txt ; $(TESTEXIT) - -PHONY_LIST += jtreg_tests - # flags used to execute java in test targets TEST_FLAGS += -version -Xinternalversion -X -help @@ -471,6 +174,12 @@ PHONY_LIST += hotspot_servertest servertest # Run the native gtest tests from the test image +define NEWLINE + + +endef + + hotspot_gtest: $(foreach v, $(JVM_VARIANTS), \ $(MAKE) hotspot_gtest$v $(NEWLINE) ) @@ -481,9 +190,3 @@ hotspot_gtestserver hotspot_gtestclient hotspot_gtestminimal: hotspot_gtest%: PHONY_LIST += hotspot_gtest hotspot_gtestserver hotspot_gtestclient \ hotspot_gtestminimal - -################################################################ -# Phony targets (e.g. these are not filenames) -.PHONY: all clean prep $(PHONY_LIST) - -################################################################ diff --git a/jdk/.hgtags b/jdk/.hgtags index fe87fc38b47..8aee88cad73 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -390,3 +390,4 @@ efa71dc820eb8bd5a6c9f2f66f39c383ac3ee99d jdk-9+144 99b7853cfbd8227c4441de4b6119c10742556840 jdk-9+145 6e4ff59afb5d0adf21a72c4ff534326594a99e5d jdk-9+146 c41140100bf1e5c10c7b8f3bde91c16eff7485f5 jdk-9+147 +9098b2b9d997d65af0026fc2f39cf75234e26bc5 jdk-9+148 diff --git a/jdk/make/data/tzdata/VERSION b/jdk/make/data/tzdata/VERSION index 3fbffda8d33..016d94c21fa 100644 --- a/jdk/make/data/tzdata/VERSION +++ b/jdk/make/data/tzdata/VERSION @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2016i +tzdata2016j diff --git a/jdk/make/data/tzdata/africa b/jdk/make/data/tzdata/africa index cbde238491e..67918afea67 100644 --- a/jdk/make/data/tzdata/africa +++ b/jdk/make/data/tzdata/africa @@ -142,7 +142,7 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01 # Cameroon # See Africa/Lagos. -# Cape Verde +# Cape Verde / Cabo Verde # # Shanks gives 1907 for the transition to CVT. # Perhaps the 1911-05-26 Portuguese decree diff --git a/jdk/make/data/tzdata/asia b/jdk/make/data/tzdata/asia index 7d540324cdb..ac207403859 100644 --- a/jdk/make/data/tzdata/asia +++ b/jdk/make/data/tzdata/asia @@ -1606,12 +1606,12 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # was "blended" with the Central zone. Therefore, Kazakhstan now has # two time zones, and difference between them is one hour. The zone # closer to UTC is the former Western zone (probably still called the -# same), encompassing four provinces in the west: Aqtobe, Atyrau, -# Mangghystau, and West Kazakhstan. The other zone encompasses +# same), encompassing four provinces in the west: Aqtöbe, Atyraū, +# Mangghystaū, and West Kazakhstan. The other zone encompasses # everything else.... I guess that would make Kazakhstan time zones # de jure UTC+5 and UTC+6 respectively. -# From Stepan Golosunov (2016-03-27) ([*] means see later comments below): +# From Stepan Golosunov (2016-03-27): # Review of the linked documents from http://adilet.zan.kz/ # produced the following data for post-1991 Kazakhstan: # @@ -1657,7 +1657,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # # This implies that on 1991-03-31 Asia/Oral remained on +04/+05 while # the rest of Kazakhstan switched from +06/+07 to +05/06 or from +05/06 -# to +04/+05. It's unclear how Kzyl-Orda oblast moved into the fifth +# to +04/+05. It's unclear how Qyzylorda oblast moved into the fifth # time belt. (By switching from +04/+05 to +05/+06 on 1991-09-29?) ... # # 1. Act of the Cabinet of Ministers of the Republic of Kazakhstan @@ -1670,25 +1670,25 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # on the whole territory of Kazakhstan 1 hour forward on 1992-01-19 at # 2:00, specified DST rules. It acknowledged that Kazakhstan was # located in the fourth and the fifth time belts and specified the -# border between them to be located east of Kustanay and Aktyubinsk -# oblasts (notably including Turgai and Kzyl-Orda oblasts into the fifth +# border between them to be located east of Qostanay and Aktyubinsk +# oblasts (notably including Turgai and Qyzylorda oblasts into the fifth # time belt). # # This means switch on 1992-01-19 at 2:00 from +04/+05 to +05/+06 for -# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyrau and Kustanay oblasts; from -# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk) [*].... +# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyraū and Qostanay oblasts; from +# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk).... # # 2. Act of the Cabinet of Ministers of the Republic of Kazakhstan # from 1992-03-27 No. 284 # http://adilet.zan.kz/rus/docs/P920000284_ -# cancels extra hour ("decree time") for Uralsk and Kzyl-Orda oblasts +# cancels extra hour ("decree time") for Uralsk and Qyzylorda oblasts # since the last Sunday of March 1992, while keeping them in the fourth # and the fifth time belts respectively. # # 3. Order of the Prime Minister of the Republic of Kazakhstan # from 1994-09-23 No. 384 # http://adilet.zan.kz/rus/docs/R940000384_ -# cancels the extra hour ("decree time") on the territory of Mangystau +# cancels the extra hour ("decree time") on the territory of Mangghystaū # oblast since the last Sunday of September 1994 (saying that time on # the territory would correspond to the third time belt as a # result).... @@ -1702,14 +1702,11 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # 5. Act of the Government of the Republic of Kazakhstan # from 1999-03-26 No. 305 # http://adilet.zan.kz/rus/docs/P990000305_ -# cancels the extra hour ("decree time") for Atyrau oblast since the +# cancels the extra hour ("decree time") for Atyraū oblast since the # last Sunday of March 1999 while retaining the oblast in the fourth # time belt. # -# This means change from +05/+06 to +04/+05. -# -# There is no zone for Atyrau currently (listed under Asia/Aqtau in -# zone1970.tab).[*] +# This means change from +05/+06 to +04/+05.... # # 6. Act of the Government of the Republic of Kazakhstan # from 2000-11-23 No. 1749 @@ -1719,10 +1716,10 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # The only changes I noticed are in definition of the border between the # fourth and the fifth time belts. They account for changes in spelling # and administrative division (splitting of Turgai oblast in 1997 -# probably changed time in territories incorporated into Kostanay oblast -# (including Arkalyk) from +06/+07 to +05/+06) and move Kyzylorda oblast +# probably changed time in territories incorporated into Qostanay oblast +# (including Arkalyk) from +06/+07 to +05/+06) and move Qyzylorda oblast # from being in the fifth time belt and not using decree time into the -# fourth time belt (no change in practice).[*] +# fourth time belt (no change in practice). # # 7. Act of the Government of the Republic of Kazakhstan # from 2003-12-29 No. 1342 @@ -1732,7 +1729,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # 8. Act of the Government of the Republic of Kazakhstan # from 2004-07-20 No. 775 # http://adilet.zan.kz/rus/archive/docs/P040000775_/20.07.2004 -# modified the 2000-11-23 act to move Kostanay and Kyzylorda oblasts into +# modified the 2000-11-23 act to move Qostanay and Qyzylorda oblasts into # the fifth time belt and add Aktobe oblast to the list of regions not # using extra hour ("decree time"), leaving Kazakhstan with only 2 time # zones (+04/+05 and +06/+07). The changes were to be implemented @@ -1744,14 +1741,14 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # http://adilet.zan.kz/rus/docs/P040001059_ # modified the 2000-11-23 act to remove exceptions from the "decree time" # (leaving Kazakhstan in +05/+06 and +06/+07 zones), amended the -# 2004-07-20 act to implement changes for Atyrau, West Kazakhstan, -# Kostanay, Kyzylorda and Mangystau oblasts by not moving clocks -# during the 2014 transition to "winter" time. +# 2004-07-20 act to implement changes for Atyraū, West Kazakhstan, +# Qostanay, Qyzylorda and Mangghystaū oblasts by not moving clocks +# during the 2004 transition to "winter" time. # -# This means transition from +04/+05 to +05/+06 for Atyrau oblast (no +# This means transition from +04/+05 to +05/+06 for Atyraū oblast (no # zone currently), Asia/Oral, Asia/Aqtau and transition from +05/+06 to -# +06/+07 for Kostanay oblast (Kostanay and Arkalyk, no zones currently) -# and Asia/Qyzylorda on 2004-10-31 at 3:00....[*] +# +06/+07 for Qostanay oblast (Qostanay and Arkalyk, no zones currently) +# and Asia/Qyzylorda on 2004-10-31 at 3:00.... # # 10. Act of the Government of the Republic of Kazakhstan # from 2005-03-15 No. 231 @@ -1767,14 +1764,9 @@ Zone Asia/Amman 2:23:44 - LMT 1931 # Kazakh 1992-01-13 act appears to provide the same rules and 1992-03-27 # act was to be enacted on the last Sunday of March 1992. -# From Paul Eggert (2016-04-15): -# The tables below should reflect Stepan Golosunov's remarks above, -# except for the items marked "[*]" which I haven't gotten to yet. -# It looks like we will need new zones Asia/Atyrau and Asia/Qostanay -# to handle changes from 1992 through 2004 that we did not previously -# know about. +# From Paul Eggert (2016-11-07): +# The tables below reflect Golosunov's remarks, with exceptions as noted. -# # Zone NAME GMTOFF RULES FORMAT [UNTIL] # # Almaty (formerly Alma-Ata), representing most locations in Kazakhstan @@ -1787,6 +1779,8 @@ Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata 6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s 6:00 - +06 # Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY) +# This currently includes Qostanay (aka Kostanay, Kustanay) (KZ-KUS); +# see comments below. Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 4:00 - +04 1930 Jun 21 5:00 - +05 1981 Apr 1 @@ -1798,7 +1792,21 @@ Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s 6:00 - +06 -# Aqtobe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT) +# The following zone is like Asia/Qyzylorda except for being one +# hour earlier from 1991-09-29 to 1992-03-29. The 1991/2 rules for +# Qostenay are unclear partly because of the 1997 Turgai +# reorganization, so this zone is commented out for now. +#Zone Asia/Qostanay 4:14:20 - LMT 1924 May 2 +# 4:00 - +04 1930 Jun 21 +# 5:00 - +05 1981 Apr 1 +# 5:00 1:00 +06 1981 Oct 1 +# 6:00 - +06 1982 Apr 1 +# 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s +# 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s +# 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s +# 6:00 - +06 +# +# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT) Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 4:00 - +04 1930 Jun 21 5:00 - +05 1981 Apr 1 @@ -1808,14 +1816,11 @@ Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s 5:00 - +05 -# Qostanay (KZ-KUS) - -# Mangghystau (KZ-MAN) +# Mangghystaū (KZ-MAN) # Aqtau was not founded until 1963, but it represents an inhabited region, # so include time stamps before 1963. Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 4:00 - +04 1930 Jun 21 - 5:00 - +05 1963 5:00 - +05 1981 Oct 1 6:00 - +06 1982 Apr 1 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s @@ -1823,7 +1828,17 @@ Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s 5:00 - +05 - +# Atyraū (KZ-ATY) is like Mangghystaū except it switched from +# +04/+05 to +05/+06 in spring 1999, not fall 1994. +Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2 + 4:00 - +04 1930 Jun 21 + 5:00 - +05 1981 Oct 1 + 6:00 - +06 1982 Apr 1 + 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s + 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s + 5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s + 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s + 5:00 - +05 # West Kazakhstan (KZ-ZAP) # From Paul Eggert (2016-03-18): # The 1989 transition is from USSR act No. 227 (1989-03-14). @@ -2639,7 +2654,7 @@ Rule Palestine 2016 max - Oct lastSat 1:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Gaza 2:17:52 - LMT 1900 Oct - 2:00 Zion EET 1948 May 15 + 2:00 Zion EET/EEST 1948 May 15 2:00 EgyptAsia EE%sT 1967 Jun 5 2:00 Zion I%sT 1996 2:00 Jordan EE%sT 1999 @@ -2652,7 +2667,7 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct 2:00 Palestine EE%sT Zone Asia/Hebron 2:20:23 - LMT 1900 Oct - 2:00 Zion EET 1948 May 15 + 2:00 Zion EET/EEST 1948 May 15 2:00 EgyptAsia EE%sT 1967 Jun 5 2:00 Zion I%sT 1996 2:00 Jordan EE%sT 1999 diff --git a/jdk/make/data/tzdata/europe b/jdk/make/data/tzdata/europe index df464859fb3..9cede59acda 100644 --- a/jdk/make/data/tzdata/europe +++ b/jdk/make/data/tzdata/europe @@ -924,7 +924,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 # Cyprus # Please see the 'asia' file for Asia/Nicosia. -# Czech Republic +# Czech Republic / Czechia # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Czech 1945 only - Apr 8 2:00s 1:00 S Rule Czech 1945 only - Nov 18 2:00s 0 - @@ -2624,10 +2624,9 @@ Zone Europe/Astrakhan 3:12:12 - LMT 1924 May 3:00 - +03 2016 Mar 27 2:00s 4:00 - +04 -# From Paul Eggert (2016-03-18): +# From Paul Eggert (2016-11-11): # Europe/Volgograd covers: # 34 RU-VGG Volgograd Oblast -# 64 RU-SAR Saratov Oblast # The 1988 transition is from USSR act No. 5 (1988-01-04). Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3 @@ -2640,6 +2639,27 @@ Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3 4:00 - +04 2014 Oct 26 2:00s 3:00 - +03 +# From Paul Eggert (2016-11-11): +# Europe/Saratov covers: +# 64 RU-SAR Saratov Oblast + +# From Yuri Konotopov (2016-11-11): +# Dec 4, 2016 02:00 UTC+3.... Saratov Region's local time will be ... UTC+4. +# From Stepan Golosunov (2016-11-11): +# ... Byalokoz listed Saratov on 03:04:18. +# From Stepan Golosunov (2016-11-22): +# http://publication.pravo.gov.ru/Document/View/0001201611220031 + +Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u + 3:00 - +03 1930 Jun 21 + 4:00 Russia +04/+05 1988 Mar 27 2:00s + 3:00 Russia +03/+04 1991 Mar 31 2:00s + 4:00 - +04 1992 Mar 29 2:00s + 3:00 Russia +03/+04 2011 Mar 27 2:00s + 4:00 - +04 2014 Oct 26 2:00s + 3:00 - +03 2016 Dec 4 2:00s + 4:00 - +04 + # From Paul Eggert (2016-03-18): # Europe/Kirov covers: # 43 RU-KIR Kirov Oblast diff --git a/jdk/make/data/tzdata/iso3166.tab b/jdk/make/data/tzdata/iso3166.tab index e47eefe1227..004a4a70556 100644 --- a/jdk/make/data/tzdata/iso3166.tab +++ b/jdk/make/data/tzdata/iso3166.tab @@ -98,7 +98,7 @@ CO Colombia CR Costa Rica CU Cuba CV Cape Verde -CW Curacao +CW Curaçao CX Christmas Island CY Cyprus CZ Czech Republic diff --git a/jdk/make/data/tzdata/zone.tab b/jdk/make/data/tzdata/zone.tab index 2de07ef7112..7255ea5bfb4 100644 --- a/jdk/make/data/tzdata/zone.tab +++ b/jdk/make/data/tzdata/zone.tab @@ -262,7 +262,8 @@ KY +1918-08123 America/Cayman KZ +4315+07657 Asia/Almaty Kazakhstan (most areas) KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda KZ +5017+05710 Asia/Aqtobe Aqtobe/Aktobe -KZ +4431+05016 Asia/Aqtau Atyrau/Atirau/Gur'yev, Mangghystau/Mankistau +KZ +4431+05016 Asia/Aqtau Mangghystau/Mankistau +KZ +4707+05156 Asia/Atyrau Atyrau/Atirau/Gur'yev KZ +5113+05121 Asia/Oral West Kazakhstan LA +1758+10236 Asia/Vientiane LB +3353+03530 Asia/Beirut @@ -353,14 +354,15 @@ RS +4450+02030 Europe/Belgrade RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area RU +4457+03406 Europe/Simferopol MSK+00 - Crimea -RU +4844+04425 Europe/Volgograd MSK+00 - Volgograd, Saratov +RU +4844+04425 Europe/Volgograd MSK+00 - Volgograd RU +5836+04939 Europe/Kirov MSK+00 - Kirov RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan -RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia +RU +5134+04602 Europe/Saratov MSK+01 - Saratov RU +5420+04824 Europe/Ulyanovsk MSK+01 - Ulyanovsk +RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia RU +5651+06036 Asia/Yekaterinburg MSK+02 - Urals RU +5500+07324 Asia/Omsk MSK+03 - Omsk -RU +5502+08255 Asia/Novosibirsk MSK+03 - Novosibirsk +RU +5502+08255 Asia/Novosibirsk MSK+04 - Novosibirsk RU +5322+08345 Asia/Barnaul MSK+04 - Altai RU +5630+08458 Asia/Tomsk MSK+04 - Tomsk RU +5345+08707 Asia/Novokuznetsk MSK+04 - Kemerovo diff --git a/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk b/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk index 31c39f1bb69..81f51e1b73c 100644 --- a/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk +++ b/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2016, 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 @@ -38,7 +38,6 @@ ifeq ($(OPENJDK_TARGET_OS), solaris) OPTIMIZATION := LOW, \ CFLAGS := $(CFLAGS_JDKLIB) \ $(addprefix -I, $(LIBJ2UCRYPTO_SRC)), \ - DISABLED_WARNINGS_solstudio := E_MACRO_REDEFINED, \ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2ucrypto/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB), \ LIBS := $(LIBDL), \ diff --git a/jdk/make/mapfiles/libnio/mapfile-linux b/jdk/make/mapfiles/libnio/mapfile-linux index 93e59458abe..a07e4c92ce6 100644 --- a/jdk/make/mapfiles/libnio/mapfile-linux +++ b/jdk/make/mapfiles/libnio/mapfile-linux @@ -60,6 +60,7 @@ SUNWprivate_1.1 { Java_sun_nio_ch_FileChannelImpl_position0; Java_sun_nio_ch_FileChannelImpl_transferTo0; Java_sun_nio_ch_FileChannelImpl_unmap0; + Java_sun_nio_ch_FileDispatcherImpl_allocate0; Java_sun_nio_ch_FileDispatcherImpl_close0; Java_sun_nio_ch_FileDispatcherImpl_closeIntFD; Java_sun_nio_ch_FileDispatcherImpl_force0; diff --git a/jdk/make/mapfiles/libnio/mapfile-macosx b/jdk/make/mapfiles/libnio/mapfile-macosx index a3f6d5d9c1c..4f6a04867d3 100644 --- a/jdk/make/mapfiles/libnio/mapfile-macosx +++ b/jdk/make/mapfiles/libnio/mapfile-macosx @@ -43,6 +43,7 @@ SUNWprivate_1.1 { Java_sun_nio_ch_FileChannelImpl_position0; Java_sun_nio_ch_FileChannelImpl_transferTo0; Java_sun_nio_ch_FileChannelImpl_unmap0; + Java_sun_nio_ch_FileDispatcherImpl_allocate0; Java_sun_nio_ch_FileDispatcherImpl_close0; Java_sun_nio_ch_FileDispatcherImpl_closeIntFD; Java_sun_nio_ch_FileDispatcherImpl_force0; diff --git a/jdk/make/mapfiles/libnio/mapfile-solaris b/jdk/make/mapfiles/libnio/mapfile-solaris index d7a9da908ca..3e9f8491572 100644 --- a/jdk/make/mapfiles/libnio/mapfile-solaris +++ b/jdk/make/mapfiles/libnio/mapfile-solaris @@ -48,6 +48,7 @@ SUNWprivate_1.1 { Java_sun_nio_ch_FileChannelImpl_position0; Java_sun_nio_ch_FileChannelImpl_transferTo0; Java_sun_nio_ch_FileChannelImpl_unmap0; + Java_sun_nio_ch_FileDispatcherImpl_allocate0; Java_sun_nio_ch_FileDispatcherImpl_close0; Java_sun_nio_ch_FileDispatcherImpl_closeIntFD; Java_sun_nio_ch_FileDispatcherImpl_force0; diff --git a/jdk/src/java.base/macosx/classes/apple/security/KeychainStore.java b/jdk/src/java.base/macosx/classes/apple/security/KeychainStore.java index 42b312196cd..7ed9956b80c 100644 --- a/jdk/src/java.base/macosx/classes/apple/security/KeychainStore.java +++ b/jdk/src/java.base/macosx/classes/apple/security/KeychainStore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016, 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 @@ -911,7 +911,6 @@ public final class KeychainStore extends KeyStoreSpi { return true; } - @SuppressWarnings("deprecation") private byte[] fetchPrivateKeyFromBag(byte[] privateKeyInfo) throws IOException, NoSuchAlgorithmException, CertificateException { byte[] returnValue = null; @@ -972,7 +971,6 @@ public final class KeychainStore extends KeyStoreSpi { return returnValue; } - @SuppressWarnings("deprecation") private byte[] extractKeyData(DerInputStream stream) throws IOException, NoSuchAlgorithmException, CertificateException { diff --git a/jdk/src/java.base/share/classes/com/sun/crypto/provider/ISO10126Padding.java b/jdk/src/java.base/share/classes/com/sun/crypto/provider/ISO10126Padding.java index 7377fab0a9c..a7134238e14 100644 --- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/ISO10126Padding.java +++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/ISO10126Padding.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2016, 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 @@ -68,10 +68,10 @@ final class ISO10126Padding implements Padding { } byte paddingOctet = (byte) (len & 0xff); - byte[] padding = new byte[len]; + byte[] padding = new byte[len - 1]; SunJCE.getRandom().nextBytes(padding); - padding[len-1] = paddingOctet; - System.arraycopy(padding, 0, in, off, len); + System.arraycopy(padding, 0, in, off, len - 1); + in[off + len - 1] = paddingOctet; return; } @@ -101,7 +101,7 @@ final class ISO10126Padding implements Padding { return -1; } - int start = off + len - ((int)lastByte & 0x0ff); + int start = off + len - padValue; if (start < off) { return -1; } diff --git a/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java b/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java index 22afce72bf8..38ce83d91d2 100644 --- a/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java +++ b/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java @@ -63,10 +63,10 @@ public class DriverResource_ja extends ListResourceBundle { "\u5727\u7E2E\u30AA\u30D7\u30B7\u30E7\u30F3", " -r\u3001--repack jar\u3092\u518D\u5727\u7E2E\u307E\u305F\u306F\u6B63\u898F\u5316\u3059\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3001", " jarsigner\u306B\u3088\u308B\u7F72\u540D\u306B\u9069\u3057\u307E\u3059", - " -g\u3001--no-gzip \u30D7\u30EC\u30FC\u30F3\u306A\u5727\u7E2E\u30D5\u30A1\u30A4\u30EB\u3092\u51FA\u529B\u3059\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3001", + " -g\u3001--no-gzip \u30D7\u30EC\u30FC\u30F3\u306Apack\u30D5\u30A1\u30A4\u30EB\u3092\u51FA\u529B\u3059\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3001", " \u30D5\u30A1\u30A4\u30EB\u5727\u7E2E\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3\u306B\u3088\u308B\u5727\u7E2E\u306B\u9069\u3057\u307E\u3059", - " --gzip (\u30C7\u30D5\u30A9\u30EB\u30C8)\u5727\u7E2E\u51FA\u529B\u3092gzip\u3067", - " \u5727\u7E2E\u306E\u5F8C\u51E6\u7406\u3092\u884C\u3044\u307E\u3059", + " --gzip (\u30C7\u30D5\u30A9\u30EB\u30C8) pack\u51FA\u529B\u3092\u5F8C\u51E6\u7406\u3067\u5727\u7E2E\u3057\u307E\u3059", + " (gzip\u3092\u4F7F\u7528)", " -G\u3001--strip-debug \u5727\u7E2E\u4E2D\u306B\u30C7\u30D0\u30C3\u30B0\u5C5E\u6027(SourceFile\u3001", " LineNumberTable\u3001LocalVariableTable", " \u3001LocalVariableTypeTable)\u3092\u524A\u9664\u3057\u307E\u3059", diff --git a/jdk/src/java.base/share/classes/java/io/ObjectInputFilter.java b/jdk/src/java.base/share/classes/java/io/ObjectInputFilter.java index e222f47c41a..a0e998c7b29 100644 --- a/jdk/src/java.base/share/classes/java/io/ObjectInputFilter.java +++ b/jdk/src/java.base/share/classes/java/io/ObjectInputFilter.java @@ -350,16 +350,24 @@ public interface ObjectInputFilter { * The first pattern that matches, working from left to right, determines * the {@link Status#ALLOWED Status.ALLOWED} * or {@link Status#REJECTED Status.REJECTED} result. - * If nothing matches, the result is {@link Status#UNDECIDED Status.UNDECIDED}. + * If the limits are not exceeded and no pattern matches the class, + * the result is {@link Status#UNDECIDED Status.UNDECIDED}. * * @param pattern the pattern string to parse; not null - * @return a filter to check a class being deserialized; may be null; + * @return a filter to check a class being deserialized; * {@code null} if no patterns - * @throws IllegalArgumentException - * if a limit is missing the name, or the long value - * is not a number or is negative, - * or the module name is missing if the pattern contains "/" - * or if the package is missing for ".*" and ".**" + * @throws IllegalArgumentException if the pattern string is illegal or + * malformed and cannot be parsed. + * In particular, if any of the following is true: + *
    + *
  • if a limit is missing the name or the name is not one of + * "maxdepth", "maxrefs", "maxbytes", or "maxarray" + *
  • if the value of the limit can not be parsed by + * {@link Long#parseLong Long.parseLong} or is negative + *
  • if the pattern contains "/" and the module name is missing + * or the remaining pattern is empty + *
  • if the package is missing for ".*" and ".**" + *
*/ public static ObjectInputFilter createFilter(String pattern) { Objects.requireNonNull(pattern, "pattern"); @@ -402,14 +410,19 @@ public interface ObjectInputFilter { * Returns an ObjectInputFilter from a string of patterns. * * @param pattern the pattern string to parse - * @return a filter to check a class being deserialized; not null + * @return a filter to check a class being deserialized; + * {@code null} if no patterns * @throws IllegalArgumentException if the parameter is malformed * if the pattern is missing the name, the long value * is not a number or is negative. */ static ObjectInputFilter createFilter(String pattern) { - Global filter = new Global(pattern); - return filter.isEmpty() ? null : filter; + try { + return new Global(pattern); + } catch (UnsupportedOperationException uoe) { + // no non-empty patterns + return null; + } } /** @@ -417,8 +430,10 @@ public interface ObjectInputFilter { * * @param pattern a pattern string of filters * @throws IllegalArgumentException if the pattern is malformed + * @throws UnsupportedOperationException if there are no non-empty patterns */ private Global(String pattern) { + boolean hasLimits = false; this.pattern = pattern; maxArrayLength = Long.MAX_VALUE; // Default values are unlimited @@ -436,6 +451,7 @@ public interface ObjectInputFilter { } if (parseLimit(p)) { // If the pattern contained a limit setting, i.e. type=value + hasLimits = true; continue; } boolean negate = p.charAt(0) == '!'; @@ -510,18 +526,9 @@ public interface ObjectInputFilter { filters.add(c -> moduleName.equals(c.getModule().getName()) ? patternFilter.apply(c) : Status.UNDECIDED); } } - } - - /** - * Returns if this filter has any checks. - * @return {@code true} if the filter has any checks, {@code false} otherwise - */ - private boolean isEmpty() { - return filters.isEmpty() && - maxArrayLength == Long.MAX_VALUE && - maxDepth == Long.MAX_VALUE && - maxReferences == Long.MAX_VALUE && - maxStreamBytes == Long.MAX_VALUE; + if (filters.isEmpty() && !hasLimits) { + throw new UnsupportedOperationException("no non-empty patterns"); + } } /** diff --git a/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java b/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java index f2c034ed148..ed033d685e9 100644 --- a/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java +++ b/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java @@ -657,13 +657,11 @@ public class ObjectInputStream *
      *     Class.forName(desc.getName(), false, loader)
      * 
- * where loader is determined as follows: if there is a - * method on the current thread's stack whose declaring class is not a - * - * platform class, then loader is - * the class loader of such class; otherwise, loader - * is the {@linkplain ClassLoader#getPlatformClassLoader() - * platform class loader}. If this call results in a + * where loader is the first class loader on the current + * thread's stack (starting from the currently executing method) that is + * neither the {@linkplain ClassLoader#getPlatformClassLoader() platform + * class loader} nor its ancestor; otherwise, loader is the + * platform class loader. If this call results in a * ClassNotFoundException and the name of the passed * ObjectStreamClass instance is the Java language keyword * for a primitive type or void, then the Class object @@ -721,13 +719,11 @@ public class ObjectInputStream *
      *     Class.forName(i, false, loader)
      * 
- * where loader is determined as follows: if there is a - * method on the current thread's stack whose declaring class is not a - * - * platform class, then loader is - * the class loader of such class; otherwise, loader - * is the {@linkplain ClassLoader#getPlatformClassLoader() - * platform class loader}. + * where loader is the first class loader on the current + * thread's stack (starting from the currently executing method) that is + * neither the {@linkplain ClassLoader#getPlatformClassLoader() platform + * class loader} nor its ancestor; otherwise, loader is the + * platform class loader. * Unless any of the resolved interfaces are non-public, this same value * of loader is also the class loader passed to * Proxy.getProxyClass; if non-public interfaces are present, @@ -1168,6 +1164,13 @@ public class ObjectInputStream * for each class and reference in the stream. * The filter can check any or all of the class, the array length, the number * of references, the depth of the graph, and the size of the input stream. + * The depth is the number of nested {@linkplain #readObject readObject} + * calls starting with the reading of the root of the graph being deserialized + * and the current object being deserialized. + * The number of references is the cumulative number of objects and references + * to objects already read from the stream including the current object being read. + * The filter is invoked only when reading objects from the stream and for + * not primitives. *

* If the filter returns {@link ObjectInputFilter.Status#REJECTED Status.REJECTED}, * {@code null} or throws a {@link RuntimeException}, @@ -1182,8 +1185,9 @@ public class ObjectInputStream * * @implSpec * The filter, when not {@code null}, is invoked during {@link #readObject readObject} - * and {@link #readUnshared readUnshared} for each object - * (regular or class) in the stream including the following: + * and {@link #readUnshared readUnshared} for each object (regular or class) in the stream. + * Strings are treated as primitives and do not invoke the filter. + * The filter is called for: *