OpenJDK / jdk / jdk12
changeset 35599:cc774aa3d2fe
Merge
author | thartmann |
---|---|
date | Tue, 26 Jan 2016 09:11:58 +0100 |
parents | 8d7bc466f490 25ce76c109ab |
children | 42c6406c3146 1513b6586d6d |
files | hotspot/src/share/vm/utilities/vmError.cpp jdk/src/java.base/share/classes/java/lang/invoke/DontInline.java jdk/src/java.base/share/classes/java/lang/invoke/ForceInline.java jdk/src/java.base/share/classes/java/lang/invoke/Stable.java jdk/src/java.base/share/classes/sun/invoke/anon/AnonymousClassLoader.java jdk/src/java.base/share/classes/sun/invoke/anon/ConstantPoolParser.java jdk/src/java.base/share/classes/sun/invoke/anon/ConstantPoolPatch.java jdk/src/java.base/share/classes/sun/invoke/anon/ConstantPoolVisitor.java jdk/src/java.base/share/classes/sun/invoke/anon/InvalidConstantPoolFormatException.java jdk/src/java.base/share/classes/sun/misc/ClassFileTransformer.java jdk/test/sun/invoke/anon/ConstantPoolPatch/OptimalMapSize.java |
diffstat | 766 files changed, 14932 insertions(+), 7149 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Mon Jan 25 14:09:28 2016 -1000 +++ b/.hgtags Tue Jan 26 09:11:58 2016 +0100 @@ -344,3 +344,4 @@ f9bcdce2df26678c3fe468130b535c0342c69b89 jdk-9+99 4379223f8806626852c46c52d4e7a27a584b406e jdk-9+100 80f67512daa15cf37b4825c1c62a675d524d7c49 jdk-9+101 +2dc4c11fe48831854916d53c3913bdb7d49023ea jdk-9+102
--- a/.hgtags-top-repo Mon Jan 25 14:09:28 2016 -1000 +++ b/.hgtags-top-repo Tue Jan 26 09:11:58 2016 +0100 @@ -344,3 +344,4 @@ 7c0577bea4c65d69c5bef67023a89d2efa4fb2f7 jdk-9+99 c1f30ac14db0eaff398429c04cd9fab92e1b4b2a jdk-9+100 c4d72a1620835b5d657b7b6792c2879367d0154f jdk-9+101 +6406ecf5d39482623225bb1b3098c2cac6f7d450 jdk-9+102
--- a/common/autoconf/build-performance.m4 Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/build-performance.m4 Tue Jan 26 09:11:58 2016 +0100 @@ -37,9 +37,9 @@ # Looks like a Solaris system NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` FOUND_CORES=yes - elif test -x /usr/sbin/system_profiler; then + elif test -x /usr/sbin/sysctl; then # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` + NUM_CORES=`/usr/sbin/sysctl -n hw.ncpu` FOUND_CORES=yes elif test "x$OPENJDK_BUILD_OS" = xaix ; then NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print [$]4 }'` @@ -74,10 +74,10 @@ # Looks like a Solaris or AIX system MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [[Ss]]ize" | awk '{ print [$]3 }'` FOUND_MEM=yes - elif test -x /usr/sbin/system_profiler; then + elif test -x /usr/sbin/sysctl; then # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + MEMORY_SIZE=`/usr/sbin/sysctl -n hw.memsize` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024` FOUND_MEM=yes elif test "x$OPENJDK_BUILD_OS" = xwindows; then # Windows, but without cygwin
--- a/common/autoconf/flags.m4 Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/flags.m4 Tue Jan 26 09:11:58 2016 +0100 @@ -403,7 +403,7 @@ CXXFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then CFLAGS_DEBUG_SYMBOLS="-g -xs" - # FIXME: likely a bug, this disables debug symbols rather than enables them + # -g0 enables debug symbols without disabling inlining. CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" elif test "x$TOOLCHAIN_TYPE" = xxlc; then CFLAGS_DEBUG_SYMBOLS="-g" @@ -501,7 +501,7 @@ C_O_FLAG_HI="-O3 -qstrict" C_O_FLAG_NORM="-O2" C_O_FLAG_DEBUG="-qnoopt" - C_O_FLAG_NONE="-qnoop" + C_O_FLAG_NONE="-qnoopt" elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then C_O_FLAG_HIGHEST="-O2" C_O_FLAG_HI="-O1"
--- a/common/autoconf/generated-configure.sh Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/generated-configure.sh Tue Jan 26 09:11:58 2016 +0100 @@ -688,11 +688,11 @@ FIXPATH_DETACH_FLAG FIXPATH GCOV_ENABLED -ZIP_DEBUGINFO_FILES -ENABLE_DEBUG_SYMBOLS STRIP_POLICY DEBUG_BINARIES -NATIVE_DEBUG_SYMBOLS +ZIP_EXTERNAL_DEBUG_SYMBOLS +COPY_DEBUG_SYMBOLS +COMPILE_WITH_DEBUG_SYMBOLS CFLAGS_WARNINGS_ARE_ERRORS DISABLE_WARNING_PREFIX HOTSPOT_SET_WARNINGS_AS_ERRORS @@ -4119,6 +4119,16 @@ + # -g is already added by ENABLE_DEBUG_SYMBOLS and the hotspot makefiles + # will basically do slowdebug builds when DEBUG_BINARIES is set for + # fastdebug builds + DEBUG_BINARIES=false + # Fastdebug builds with this setting will essentially be slowdebug + # in hotspot. + # -g is already added by ENABLE_DEBUG_SYMBOLS and the hotspot makefiles + # will basically do slowdebug builds when DEBUG_BINARIES is set for + # fastdebug builds + DEBUG_BINARIES=false # # Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -4839,7 +4849,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1452780299 +DATE_WHEN_GENERATED=1453385294 ############################################################################### # @@ -14818,7 +14828,7 @@ VAR_CPU_ENDIAN=big ;; powerpc64le) - VAR_CPU=ppc64 + VAR_CPU=ppc64le VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=little @@ -14957,7 +14967,7 @@ VAR_CPU_ENDIAN=big ;; powerpc64le) - VAR_CPU=ppc64 + VAR_CPU=ppc64le VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=little @@ -47031,7 +47041,7 @@ CXXFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then CFLAGS_DEBUG_SYMBOLS="-g -xs" - # FIXME: likely a bug, this disables debug symbols rather than enables them + # -g0 enables debug symbols without disabling inlining. CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" elif test "x$TOOLCHAIN_TYPE" = xxlc; then CFLAGS_DEBUG_SYMBOLS="-g" @@ -47249,7 +47259,7 @@ C_O_FLAG_HI="-O3 -qstrict" C_O_FLAG_NORM="-O2" C_O_FLAG_DEBUG="-qnoopt" - C_O_FLAG_NONE="-qnoop" + C_O_FLAG_NONE="-qnoopt" elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then C_O_FLAG_HIGHEST="-O2" C_O_FLAG_HI="-O1" @@ -48271,21 +48281,31 @@ fi fi - ENABLE_DEBUG_SYMBOLS=true - ZIP_DEBUGINFO_FILES=true - DEBUG_BINARIES=true + COMPILE_WITH_DEBUG_SYMBOLS=true + COPY_DEBUG_SYMBOLS=true + ZIP_EXTERNAL_DEBUG_SYMBOLS=true + + # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true + DEBUG_BINARIES=false STRIP_POLICY=min_strip + elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then - ENABLE_DEBUG_SYMBOLS=false - ZIP_DEBUGINFO_FILES=false + COMPILE_WITH_DEBUG_SYMBOLS=false + COPY_DEBUG_SYMBOLS=false + ZIP_EXTERNAL_DEBUG_SYMBOLS=false + DEBUG_BINARIES=false STRIP_POLICY=no_strip elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then - ENABLE_DEBUG_SYMBOLS=false # -g option only - ZIP_DEBUGINFO_FILES=false + COMPILE_WITH_DEBUG_SYMBOLS=true + COPY_DEBUG_SYMBOLS=false + ZIP_EXTERNAL_DEBUG_SYMBOLS=false + + # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false DEBUG_BINARIES=true STRIP_POLICY=no_strip STRIP="" + elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then @@ -48296,9 +48316,12 @@ fi fi - ENABLE_DEBUG_SYMBOLS=true - ZIP_DEBUGINFO_FILES=false - DEBUG_BINARIES=true + COMPILE_WITH_DEBUG_SYMBOLS=true + COPY_DEBUG_SYMBOLS=true + ZIP_EXTERNAL_DEBUG_SYMBOLS=false + + # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true + DEBUG_BINARIES=false STRIP_POLICY=min_strip else as_fn_error $? "Allowed native debug symbols are: none, internal, external, zipped" "$LINENO" 5 @@ -48348,6 +48371,8 @@ + # Legacy values + @@ -59224,9 +59249,9 @@ # Looks like a Solaris system NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` FOUND_CORES=yes - elif test -x /usr/sbin/system_profiler; then + elif test -x /usr/sbin/sysctl; then # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` + NUM_CORES=`/usr/sbin/sysctl -n hw.ncpu` FOUND_CORES=yes elif test "x$OPENJDK_BUILD_OS" = xaix ; then NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print $4 }'` @@ -59278,10 +59303,10 @@ # Looks like a Solaris or AIX system MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [Ss]ize" | awk '{ print $3 }'` FOUND_MEM=yes - elif test -x /usr/sbin/system_profiler; then + elif test -x /usr/sbin/sysctl; then # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + MEMORY_SIZE=`/usr/sbin/sysctl -n hw.memsize` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024` FOUND_MEM=yes elif test "x$OPENJDK_BUILD_OS" = xwindows; then # Windows, but without cygwin
--- a/common/autoconf/hotspot-spec.gmk.in Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/hotspot-spec.gmk.in Tue Jan 26 09:11:58 2016 +0100 @@ -118,7 +118,7 @@ # Hotspot expects the variable FULL_DEBUG_SYMBOLS=1/0 to control debug symbols # creation. -ifeq ($(ENABLE_DEBUG_SYMBOLS), true) +ifeq ($(COPY_DEBUG_SYMBOLS), true) FULL_DEBUG_SYMBOLS=1 # Ensure hotspot uses the objcopy that configure located ALT_OBJCOPY:=$(OBJCOPY) @@ -127,12 +127,15 @@ endif # Hotspot expects the variable ZIP_DEBUGINFO_FILES=1/0 and not true/false. -ifeq ($(ZIP_DEBUGINFO_FILES)$(ENABLE_DEBUG_SYMBOLS), truetrue) +ifeq ($(ZIP_EXTERNAL_DEBUG_SYMBOLS), true) ZIP_DEBUGINFO_FILES:=1 else ZIP_DEBUGINFO_FILES:=0 endif +DEBUG_BINARIES := @DEBUG_BINARIES@ +STRIP_POLICY := @STRIP_POLICY@ + ifeq ($(OPENJDK_TARGET_OS), windows) # On Windows, the Visual Studio toolchain needs the LIB and INCLUDE # environment variables (in Windows path style).
--- a/common/autoconf/hotspot.m4 Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/hotspot.m4 Tue Jan 26 09:11:58 2016 +0100 @@ -266,3 +266,14 @@ HOTSPOT_MAKE_ARGS="$HOTSPOT_TARGET" AC_SUBST(HOTSPOT_MAKE_ARGS) ]) + + # -g is already added by ENABLE_DEBUG_SYMBOLS and the hotspot makefiles + # will basically do slowdebug builds when DEBUG_BINARIES is set for + # fastdebug builds + DEBUG_BINARIES=false + # Fastdebug builds with this setting will essentially be slowdebug + # in hotspot. + # -g is already added by ENABLE_DEBUG_SYMBOLS and the hotspot makefiles + # will basically do slowdebug builds when DEBUG_BINARIES is set for + # fastdebug builds + DEBUG_BINARIES=false \ No newline at end of file
--- a/common/autoconf/jdk-options.m4 Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/jdk-options.m4 Tue Jan 26 09:11:58 2016 +0100 @@ -251,21 +251,31 @@ fi fi - ENABLE_DEBUG_SYMBOLS=true - ZIP_DEBUGINFO_FILES=true - DEBUG_BINARIES=true + COMPILE_WITH_DEBUG_SYMBOLS=true + COPY_DEBUG_SYMBOLS=true + ZIP_EXTERNAL_DEBUG_SYMBOLS=true + + # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true + DEBUG_BINARIES=false STRIP_POLICY=min_strip + elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then - ENABLE_DEBUG_SYMBOLS=false - ZIP_DEBUGINFO_FILES=false + COMPILE_WITH_DEBUG_SYMBOLS=false + COPY_DEBUG_SYMBOLS=false + ZIP_EXTERNAL_DEBUG_SYMBOLS=false + DEBUG_BINARIES=false STRIP_POLICY=no_strip elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then - ENABLE_DEBUG_SYMBOLS=false # -g option only - ZIP_DEBUGINFO_FILES=false + COMPILE_WITH_DEBUG_SYMBOLS=true + COPY_DEBUG_SYMBOLS=false + ZIP_EXTERNAL_DEBUG_SYMBOLS=false + + # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false DEBUG_BINARIES=true STRIP_POLICY=no_strip STRIP="" + elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then @@ -276,9 +286,12 @@ fi fi - ENABLE_DEBUG_SYMBOLS=true - ZIP_DEBUGINFO_FILES=false - DEBUG_BINARIES=true + COMPILE_WITH_DEBUG_SYMBOLS=true + COPY_DEBUG_SYMBOLS=true + ZIP_EXTERNAL_DEBUG_SYMBOLS=false + + # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true + DEBUG_BINARIES=false STRIP_POLICY=min_strip else AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped]) @@ -294,11 +307,13 @@ BASIC_DEPRECATED_ARG_ENABLE(zip-debug-info, zip_debug_info, [Please use --with-native-debug-symbols=zipped .]) - AC_SUBST(NATIVE_DEBUG_SYMBOLS) + AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS) + AC_SUBST(COPY_DEBUG_SYMBOLS) + AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS) + + # Legacy values AC_SUBST(DEBUG_BINARIES) AC_SUBST(STRIP_POLICY) - AC_SUBST(ENABLE_DEBUG_SYMBOLS) - AC_SUBST(ZIP_DEBUGINFO_FILES) ]) ################################################################################
--- a/common/autoconf/platform.m4 Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/platform.m4 Tue Jan 26 09:11:58 2016 +0100 @@ -67,7 +67,7 @@ VAR_CPU_ENDIAN=big ;; powerpc64le) - VAR_CPU=ppc64 + VAR_CPU=ppc64le VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=little
--- a/common/autoconf/spec.gmk.in Mon Jan 25 14:09:28 2016 -1000 +++ b/common/autoconf/spec.gmk.in Tue Jan 26 09:11:58 2016 +0100 @@ -424,13 +424,12 @@ # # Options for generating debug symbols -ENABLE_DEBUG_SYMBOLS:=@ENABLE_DEBUG_SYMBOLS@ +COMPILE_WITH_DEBUG_SYMBOLS := @COMPILE_WITH_DEBUG_SYMBOLS@ +COPY_DEBUG_SYMBOLS := @COPY_DEBUG_SYMBOLS@ +ZIP_EXTERNAL_DEBUG_SYMBOLS := @ZIP_EXTERNAL_DEBUG_SYMBOLS@ + CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@ CXXFLAGS_DEBUG_SYMBOLS:=@CXXFLAGS_DEBUG_SYMBOLS@ -ZIP_DEBUGINFO_FILES:=@ZIP_DEBUGINFO_FILES@ -NATIVE_DEBUG_SYMBOLS:=@NATIVE_DEBUG_SYMBOLS@ -DEBUG_BINARIES:=@DEBUG_BINARIES@ -STRIP_POLICY:=@STRIP_POLICY@ # # Compress (or not) jars
--- a/common/bin/unshuffle_list.txt Mon Jan 25 14:09:28 2016 -1000 +++ b/common/bin/unshuffle_list.txt Tue Jan 26 09:11:58 2016 +0100 @@ -378,6 +378,7 @@ jdk/src/java.base/unix/conf/i586/jvm.cfg : jdk/src/solaris/bin/i586/jvm.cfg jdk/src/java.base/unix/conf/ia64/jvm.cfg : jdk/src/solaris/bin/ia64/jvm.cfg jdk/src/java.base/unix/conf/ppc64/jvm.cfg : jdk/src/solaris/bin/ppc64/jvm.cfg +jdk/src/java.base/unix/conf/ppc64le/jvm.cfg : jdk/src/solaris/bin/ppc64le/jvm.cfg jdk/src/java.base/unix/conf/ppc/jvm.cfg : jdk/src/solaris/bin/ppc/jvm.cfg jdk/src/java.base/unix/conf/sdp/sdp.conf.template : jdk/src/solaris/lib/sdp/sdp.conf.template jdk/src/java.base/unix/conf/sparc/jvm.cfg : jdk/src/solaris/bin/sparc/jvm.cfg
--- a/common/conf/jib-profiles.js Mon Jan 25 14:09:28 2016 -1000 +++ b/common/conf/jib-profiles.js Tue Jan 26 09:11:58 2016 +0100 @@ -257,7 +257,7 @@ target_os: "macosx", target_cpu: "x64", dependencies: concat(common.dependencies, "devkit"), - configure_args: concat(common.configure_args, "--with-sdk-name=macosx10.9"), + configure_args: common.configure_args, make_args: common.make_args },
--- a/corba/.hgtags Mon Jan 25 14:09:28 2016 -1000 +++ b/corba/.hgtags Tue Jan 26 09:11:58 2016 +0100 @@ -344,3 +344,4 @@ 180212ee1d8710691ba9944593dfc1ff3e4f1532 jdk-9+99 791d0d3ac0138faeb6110bd840a4545bc1950df2 jdk-9+100 30dfb3bd3d06b4bb80a087babc0d1841edba187b jdk-9+101 +9c4662334d933d299928d1f599d02ff50777cbf8 jdk-9+102
--- a/corba/make/gensrc/Gensrc-java.corba.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/corba/make/gensrc/Gensrc-java.corba.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -62,9 +62,9 @@ $(EXCEPTION_DIR)/%SystemException.java: \ $(CORBA_TOPDIR)/src/java.corba/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ $(BUILD_TOOLS_CORBA) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating class file from $*.mc) + $(call MakeDir, $(@D)) $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) $(LOG_INFO) Generating class file from $*.mc $(TOOL_LOGUTIL_CMD) make-class $< $(@D) # Generate LogWrapper properties file by concatening resource files @@ -77,17 +77,17 @@ $(LOGWRAPPER_DIR)/ORBUtilSystemException.resource \ $(LOGWRAPPER_DIR)/POASystemException.resource \ $(LOGWRAPPER_DIR)/UtilSystemException.resource - $(MKDIR) -p $(@D) - $(ECHO) $(LOG_INFO) Concatenating 8 resource files into $(@F) + $(call LogInfo, Concatenating 8 resource files into $(@F)) + $(call MakeDir, $(@D)) $(CAT) $^ > $@ # The resources files are generated from lisp-like .mc files. $(LOGWRAPPER_DIR)/%SystemException.resource: \ $(CORBA_TOPDIR)/src/java.corba/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ $(BUILD_TOOLS_CORBA) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating resource file from $*.mc) + $(call MakeDir, $(@D)) $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) $(LOG_INFO) Generating resource file from $*.mc $(TOOL_LOGUTIL_CMD) make-resource $< $(@D) @@ -240,4 +240,3 @@ all: $(BUILD_IDLS) $(LOGWRAPPER_TARGETS) \ $(SUPPORT_OUTPUTDIR)/gensrc/java.corba/com/sun/corba/se/impl/orbutil/resources/sunorb_zh_HK.properties -
--- a/hotspot/.hgtags Mon Jan 25 14:09:28 2016 -1000 +++ b/hotspot/.hgtags Tue Jan 26 09:11:58 2016 +0100 @@ -504,3 +504,4 @@ f008e8cc10d5b3212fb22d58c96fa01d38654f19 jdk-9+99 bdb0acafc63c42e84d9d8195bf2e2b25ee9c3306 jdk-9+100 9f45d3d57d6948cf526fbc2e2891a9a74ac6941a jdk-9+101 +d5239fc1b69749ae50793c61b899fcdacf3df857 jdk-9+102
--- a/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -110,7 +110,6 @@ LIBS := $(SA_LIBS), \ MAPFILE := $(SA_MAPFILE), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsa, \ - DEBUG_SYMBOLS := true, \ STRIP_SYMBOLS := true, \ ))
--- a/hotspot/src/share/vm/runtime/vm_version.cpp Mon Jan 25 14:09:28 2016 -1000 +++ b/hotspot/src/share/vm/runtime/vm_version.cpp Tue Jan 26 09:11:58 2016 +0100 @@ -238,9 +238,14 @@ #define FLOAT_ARCH_STR XSTR(FLOAT_ARCH) #endif - return VMNAME " (" VM_RELEASE ") for " OS "-" CPU FLOAT_ARCH_STR - " JRE (" VERSION_STRING "), built on " __DATE__ " " __TIME__ - " by " XSTR(HOTSPOT_BUILD_USER) " with " HOTSPOT_BUILD_COMPILER; + #define INTERNAL_VERSION_SUFFIX VM_RELEASE ")" \ + " for " OS "-" CPU FLOAT_ARCH_STR \ + " JRE (" VERSION_STRING "), built on " __DATE__ " " __TIME__ \ + " by " XSTR(HOTSPOT_BUILD_USER) " with " HOTSPOT_BUILD_COMPILER + + return strcmp(DEBUG_LEVEL, "release") == 0 + ? VMNAME " (" INTERNAL_VERSION_SUFFIX + : VMNAME " (" DEBUG_LEVEL " " INTERNAL_VERSION_SUFFIX; } const char *Abstract_VM_Version::vm_build_user() { @@ -251,6 +256,11 @@ return DEBUG_LEVEL; } +const char *Abstract_VM_Version::printable_jdk_debug_level() { + // Debug level is not printed for "release" builds + return strcmp(DEBUG_LEVEL, "release") == 0 ? "" : DEBUG_LEVEL " "; +} + unsigned int Abstract_VM_Version::jvm_version() { return ((Abstract_VM_Version::vm_major_version() & 0xFF) << 24) | ((Abstract_VM_Version::vm_minor_version() & 0xFF) << 16) |
--- a/hotspot/src/share/vm/runtime/vm_version.hpp Mon Jan 25 14:09:28 2016 -1000 +++ b/hotspot/src/share/vm/runtime/vm_version.hpp Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -106,6 +106,7 @@ static const char* internal_vm_info_string(); static const char* jre_release_version(); static const char* jdk_debug_level(); + static const char* printable_jdk_debug_level(); static uint64_t features() { return _features;
--- a/hotspot/src/share/vm/utilities/vmError.cpp Mon Jan 25 14:09:28 2016 -1000 +++ b/hotspot/src/share/vm/utilities/vmError.cpp Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, 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 @@ -232,11 +232,17 @@ const char* runtime_name = JDK_Version::runtime_name() != NULL ? JDK_Version::runtime_name() : ""; const char* runtime_version = JDK_Version::runtime_version() != NULL ? - JDK_Version::runtime_version() : ""; - st->print_cr("# JRE version: %s (%s) (build %s)", runtime_name, buf, runtime_version); + JDK_Version::runtime_version() : ""; + const char* jdk_debug_level = Abstract_VM_Version::printable_jdk_debug_level() != NULL ? + Abstract_VM_Version::printable_jdk_debug_level() : ""; + + st->print_cr("# JRE version: %s (%s) (%sbuild %s)", runtime_name, buf, + jdk_debug_level, runtime_version); + // This is the long version with some default settings added - st->print_cr("# Java VM: %s (%s, %s%s%s%s%s, %s, %s)", + st->print_cr("# Java VM: %s (%s%s, %s%s%s%s%s, %s, %s)", Abstract_VM_Version::vm_name(), + jdk_debug_level, Abstract_VM_Version::vm_release(), Abstract_VM_Version::vm_info_string(), TieredCompilation ? ", tiered" : "",
--- a/jaxp/.hgtags Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/.hgtags Tue Jan 26 09:11:58 2016 +0100 @@ -344,3 +344,4 @@ 52774b544850c791f1d1c67db2601b33739b18c9 jdk-9+99 d45bcd374f6057851e3c2dcd45607cd362afadfa jdk-9+100 d3e834ff74e724a2b92a558e18e8cbf81c6dbc59 jdk-9+101 +9dcf193c0b6cf22c0e89e2dc705a2c0f520ae064 jdk-9+102
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java Tue Jan 26 09:11:58 2016 +0100 @@ -932,9 +932,9 @@ //Check if FSP and SM - only then process with loading if (namespace != null && isSecureProcessing && isExtensionFunctionEnabled - && (namespace.equals(JAVA_EXT_XALAN) - || namespace.equals(JAVA_EXT_XSLTC) - || namespace.equals(JAVA_EXT_XALAN_OLD) + && (namespace.startsWith(JAVA_EXT_XALAN) + || namespace.startsWith(JAVA_EXT_XSLTC) + || namespace.startsWith(JAVA_EXT_XALAN_OLD) || namespace.startsWith(XALAN_CLASSPACKAGE_NAMESPACE))) { _clazz = getXSLTC().loadExternalFunction(_className); } else {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java Tue Jan 26 09:11:58 2016 +0100 @@ -36,6 +36,7 @@ import com.sun.org.apache.xml.internal.serializer.ToHTMLStream; import java.util.ArrayList; import java.util.HashMap; +import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Set; @@ -104,9 +105,9 @@ } } - // Check if we have any declared namesaces + // Check if we have any declared namespaces if (_accessedPrefixes == null) { - _accessedPrefixes = new HashMap<>(); + _accessedPrefixes = new Hashtable<>(); } else { if (!declared) {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java Tue Jan 26 09:11:58 2016 +0100 @@ -331,7 +331,7 @@ new Object[]{entityName}); } } - fEntityManager.startEntity(false, entityName, true); + fEntityManager.startEntity(true, entityName, true); } } }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Tue Jan 26 09:11:58 2016 +0100 @@ -904,7 +904,7 @@ } int length = fCurrentEntity.position - offset; fCurrentEntity.columnNumber += length - newlines; - if (fCurrentEntity.reference) { + if (fCurrentEntity.isGE) { checkLimit(Limit.TOTAL_ENTITY_SIZE_LIMIT, fCurrentEntity, offset, length); } content.setValues(fCurrentEntity.ch, offset, length); @@ -1051,6 +1051,9 @@ } int length = fCurrentEntity.position - offset; fCurrentEntity.columnNumber += length - newlines; + if (fCurrentEntity.isGE) { + checkLimit(Limit.TOTAL_ENTITY_SIZE_LIMIT, fCurrentEntity, offset, length); + } content.setValues(fCurrentEntity.ch, offset, length); // return next character
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java Tue Jan 26 09:11:58 2016 +0100 @@ -1155,7 +1155,7 @@ StaxXMLInputSource staxInputSource = fEntityManager.resolveEntityAsPerStax(resourceIdentifier); // Check access permission. If the source is resolved by a resolver, the check is skipped. - if (!staxInputSource.hasResolver()) { + if (!staxInputSource.isCreatedByResolver()) { String accessError = checkAccess(fDoctypeSystemId, fAccessExternalDTD); if (accessError != null) { reportFatalError("AccessExternalDTD", new Object[]{ SecuritySupport.sanitizePath(fDoctypeSystemId), accessError });
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Tue Jan 26 09:11:58 2016 +0100 @@ -1008,12 +1008,14 @@ } // do default resolution - //this works for both stax & Xerces, if staxInputSource is null, it means parser need to revert to default resolution + //this works for both stax & Xerces, if staxInputSource is null, + //it means parser need to revert to default resolution if (staxInputSource == null) { // REVISIT: when systemId is null, I think we should return null. // is this the right solution? -SG //if (systemId != null) - staxInputSource = new StaxXMLInputSource(new XMLInputSource(publicId, literalSystemId, baseSystemId)); + staxInputSource = new StaxXMLInputSource( + new XMLInputSource(publicId, literalSystemId, baseSystemId), false); }else if(staxInputSource.hasXMLStreamOrXMLEventReader()){ //Waiting for the clarification from EG. - nb } @@ -1108,7 +1110,7 @@ /** * Starts a named entity. * - * @param reference flag to indicate whether the entity is an Entity Reference. + * @param isGE flag to indicate whether the entity is a General Entity * @param entityName The name of the entity to start. * @param literal True if this entity is started within a literal * value. @@ -1116,7 +1118,7 @@ * @throws IOException Thrown on i/o error. * @throws XNIException Thrown by entity handler to signal an error. */ - public void startEntity(boolean reference, String entityName, boolean literal) + public void startEntity(boolean isGE, String entityName, boolean literal) throws IOException, XNIException { // was entity declared? @@ -1240,7 +1242,7 @@ } // start the entity - startEntity(reference, entityName, xmlInputSource, literal, external); + startEntity(isGE, entityName, xmlInputSource, literal, external); } // startEntity(String,boolean) @@ -1289,7 +1291,7 @@ * This method can be used to insert an application defined XML * entity stream into the parsing stream. * - * @param reference flag to indicate whether the entity is an Entity Reference. + * @param isGE flag to indicate whether the entity is a General Entity * @param name The name of the entity. * @param xmlInputSource The input source of the entity. * @param literal True if this entity is started within a @@ -1299,12 +1301,12 @@ * @throws IOException Thrown on i/o error. * @throws XNIException Thrown by entity handler to signal an error. */ - public void startEntity(boolean reference, String name, + public void startEntity(boolean isGE, String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal) throws IOException, XNIException { - String encoding = setupCurrentEntity(reference, name, xmlInputSource, literal, isExternal); + String encoding = setupCurrentEntity(isGE, name, xmlInputSource, literal, isExternal); //when entity expansion limit is set by the Application, we need to //check for the entity expansion limit set by the parser, if number of entity
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Tue Jan 26 09:11:58 2016 +0100 @@ -1038,7 +1038,7 @@ } int length = fCurrentEntity.position - offset; fCurrentEntity.columnNumber += length - newlines; - if (fCurrentEntity.reference) { + if (fCurrentEntity.isGE) { checkLimit(Limit.TOTAL_ENTITY_SIZE_LIMIT, fCurrentEntity, offset, length); } @@ -1205,6 +1205,9 @@ } int length = fCurrentEntity.position - offset; fCurrentEntity.columnNumber += length - newlines; + if (fCurrentEntity.isGE) { + checkLimit(Limit.TOTAL_ENTITY_SIZE_LIMIT, fCurrentEntity, offset, length); + } content.setValues(fCurrentEntity.ch, offset, length); // return next character
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLScanner.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLScanner.java Tue Jan 26 09:11:58 2016 +0100 @@ -946,7 +946,7 @@ new Object[]{entityName}); } } - fEntityManager.startEntity(false, entityName, true); + fEntityManager.startEntity(true, entityName, true); } } }
--- a/jaxp/src/java.xml/share/classes/com/sun/xml/internal/stream/Entity.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/xml/internal/stream/Entity.java Tue Jan 26 09:11:58 2016 +0100 @@ -344,8 +344,8 @@ // to know that prolog is read public boolean xmlDeclChunkRead = false; - // flag to indicate whether the Entity is an Entity Reference - public boolean reference = false; + // flag to indicate whether the Entity is a General Entity + public boolean isGE = false; /** returns the name of the current encoding * @return current encoding name @@ -391,11 +391,11 @@ // /** Constructs a scanned entity. */ - public ScannedEntity(boolean reference, String name, + public ScannedEntity(boolean isGE, String name, XMLResourceIdentifier entityLocation, InputStream stream, Reader reader, String encoding, boolean literal, boolean mayReadChunks, boolean isExternal) { - this.reference = reference; + this.isGE = isGE; this.name = name ; this.entityLocation = entityLocation; this.stream = stream;
--- a/jaxp/src/java.xml/share/classes/com/sun/xml/internal/stream/StaxEntityResolverWrapper.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/xml/internal/stream/StaxEntityResolverWrapper.java Tue Jan 26 09:11:58 2016 +0100 @@ -71,12 +71,12 @@ if(object == null) return null ; if(object instanceof java.io.InputStream){ - return new StaxXMLInputSource(new XMLInputSource(null, null, null, (InputStream)object, null)); + return new StaxXMLInputSource(new XMLInputSource(null, null, null, (InputStream)object, null), true); } else if(object instanceof XMLStreamReader){ - return new StaxXMLInputSource((XMLStreamReader)object) ; + return new StaxXMLInputSource((XMLStreamReader)object, true) ; }else if(object instanceof XMLEventReader){ - return new StaxXMLInputSource((XMLEventReader)object) ; + return new StaxXMLInputSource((XMLEventReader)object, true) ; } return null ;
--- a/jaxp/src/java.xml/share/classes/com/sun/xml/internal/stream/StaxXMLInputSource.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/com/sun/xml/internal/stream/StaxXMLInputSource.java Tue Jan 26 09:11:58 2016 +0100 @@ -43,27 +43,22 @@ XMLEventReader fEventReader ; XMLInputSource fInputSource ; - //indicate if the source is resolved by a resolver - boolean fHasResolver = false; + //indicates if the source is created by a resolver + boolean fIsCreatedByResolver = false; /** Creates a new instance of StaxXMLInputSource */ - public StaxXMLInputSource(XMLStreamReader streamReader) { + public StaxXMLInputSource(XMLStreamReader streamReader, boolean byResolver) { fStreamReader = streamReader ; } /** Creates a new instance of StaxXMLInputSource */ - public StaxXMLInputSource(XMLEventReader eventReader) { + public StaxXMLInputSource(XMLEventReader eventReader, boolean byResolver) { fEventReader = eventReader ; } - public StaxXMLInputSource(XMLInputSource inputSource){ + public StaxXMLInputSource(XMLInputSource inputSource, boolean byResolver){ fInputSource = inputSource ; - - } - - public StaxXMLInputSource(XMLInputSource inputSource, boolean hasResolver){ - fInputSource = inputSource ; - fHasResolver = hasResolver; + fIsCreatedByResolver = byResolver; } public XMLStreamReader getXMLStreamReader(){ @@ -82,7 +77,7 @@ return (fStreamReader == null) && (fEventReader == null) ? false : true ; } - public boolean hasResolver() { - return fHasResolver; + public boolean isCreatedByResolver() { + return fIsCreatedByResolver; } }
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java Tue Jan 26 09:11:58 2016 +0100 @@ -351,7 +351,7 @@ * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type is not available. * @throws NullPointerException If {@code expression or type} is {@code null}. * - * @since 1.9 + * @since 9 */ default <T>T evaluateExpression(String expression, Object item, Class<T> type) throws XPathExpressionException { @@ -399,7 +399,7 @@ * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type. * @throws NullPointerException If {@code expression} is {@code null}. * - * @since 1.9 + * @since 9 */ default XPathEvaluationResult<?> evaluateExpression(String expression, Object item) throws XPathExpressionException @@ -445,7 +445,7 @@ * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type is not available. * @throws NullPointerException If {@code expression, source or type}is {@code null}. * - * @since 1.9 + * @since 9 */ default <T>T evaluateExpression(String expression, InputSource source, Class<T> type) throws XPathExpressionException @@ -486,7 +486,7 @@ * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type. * @throws NullPointerException If {@code expression or source} is {@code null}. * - * @since 1.9 + * @since 9 */ default XPathEvaluationResult<?> evaluateExpression(String expression, InputSource source) throws XPathExpressionException
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathEvaluationResult.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathEvaluationResult.java Tue Jan 26 09:11:58 2016 +0100 @@ -37,7 +37,7 @@ * @see <a href="http://www.w3.org/TR/xpath">XML Path Language (XPath) Version * 1.0</a> * - * @since 1.9 + * @since 9 */ public interface XPathEvaluationResult<T> {
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java Tue Jan 26 09:11:58 2016 +0100 @@ -246,7 +246,7 @@ * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type is not available. * @throws NullPointerException If {@code type} is {@code null}. * - * @since 1.9 + * @since 9 */ default <T>T evaluateExpression(Object item, Class<T> type) throws XPathExpressionException @@ -292,7 +292,7 @@ * does not support the * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type. * - * @since 1.9 + * @since 9 */ default XPathEvaluationResult<?> evaluateExpression(Object item) throws XPathExpressionException @@ -338,7 +338,7 @@ * is not available. * @throws NullPointerException If {@code source or type} is {@code null}. * - * @since 1.9 + * @since 9 */ default <T>T evaluateExpression(InputSource source, Class<T> type) throws XPathExpressionException @@ -377,7 +377,7 @@ * {@link XPathEvaluationResult.XPathResultType#ANY ANY} type. * @throws NullPointerException If {@code source} is {@code null}. * - * @since 1.9 + * @since 9 */ default XPathEvaluationResult<?> evaluateExpression(InputSource source) throws XPathExpressionException
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathNodes.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathNodes.java Tue Jan 26 09:11:58 2016 +0100 @@ -33,7 +33,7 @@ * in <a href="http://www.w3.org/TR/xpath/#node-sets">XML Path Language (XPath) * Version 1.0, 3.3 Node-sets</a>. * - * @since 1.9 + * @since 9 */ public interface XPathNodes extends Iterable<Node> {
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/DocumentRange.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/DocumentRange.java Tue Jan 26 09:11:58 2016 +0100 @@ -43,7 +43,7 @@ /** * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public interface DocumentRange { /**
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/Range.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/Range.java Tue Jan 26 09:11:58 2016 +0100 @@ -47,7 +47,7 @@ /** * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public interface Range { /**
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/RangeException.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/RangeException.java Tue Jan 26 09:11:58 2016 +0100 @@ -45,7 +45,7 @@ * Range operations may throw a <code>RangeException</code> as specified in * their method descriptions. * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public class RangeException extends RuntimeException { public RangeException(short code, String message) {
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/DocumentTraversal.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/DocumentTraversal.java Tue Jan 26 09:11:58 2016 +0100 @@ -53,7 +53,7 @@ * Traversal feature, <code>DocumentTraversal</code> will be implemented by * the same objects that implement the Document interface. * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public interface DocumentTraversal { /**
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/NodeFilter.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/NodeFilter.java Tue Jan 26 09:11:58 2016 +0100 @@ -59,7 +59,7 @@ * filter may be used with a number of different kinds of traversals, * encouraging code reuse. * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public interface NodeFilter { // Constants returned by acceptNode
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/NodeIterator.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/NodeIterator.java Tue Jan 26 09:11:58 2016 +0100 @@ -55,7 +55,7 @@ * <code>NodeIterators</code> are created by calling * <code>DocumentTraversal</code><code>.createNodeIterator()</code>. * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public interface NodeIterator { /**
--- a/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/TreeWalker.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/traversal/TreeWalker.java Tue Jan 26 09:11:58 2016 +0100 @@ -60,7 +60,7 @@ * nodes will be siblings and appear as direct children of the root node, no * matter how deeply nested the structure of the original document. * <p>See also the <a href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113'>Document Object Model (DOM) Level 2 Traversal and Range Specification</a>. - * @since 1.9, DOM Level 2 + * @since 9, DOM Level 2 */ public interface TreeWalker { /**
--- a/jaxws/.hgtags Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxws/.hgtags Tue Jan 26 09:11:58 2016 +0100 @@ -347,3 +347,4 @@ 97b31ca0dd77483cf20ff99a033a455673639578 jdk-9+99 d0a97e57d2336238edf6a4cd60aafe67deb7258d jdk-9+100 3e99318616da903e0dc8f07f9f9203dc1bd49921 jdk-9+101 +0868b93587cc99df3a4f4d3817a1aa756bea60ab jdk-9+102
--- a/jaxws/src/java.xml.bind/share/classes/javax/xml/bind/JAXBContextFactory.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxws/src/java.xml.bind/share/classes/javax/xml/bind/JAXBContextFactory.java Tue Jan 26 09:11:58 2016 +0100 @@ -32,7 +32,7 @@ * * JAXBContextFactory can be located using {@link java.util.ServiceLoader#load(Class)} * - * @since 1.9, JAXB 2.3 + * @since 9, JAXB 2.3 */ public interface JAXBContextFactory { @@ -68,7 +68,7 @@ * @throws IllegalArgumentException * if the parameter contains {@code null} (i.e., {@code newInstance(null,someMap);}) * - * @since 1.9, JAXB 2.3 + * @since 9, JAXB 2.3 */ JAXBContext createContext(Class<?>[] classesToBeBound, Map<String, ?> properties ) throws JAXBException; @@ -100,7 +100,7 @@ * <li>failure to locate a value for the context factory provider property</li> * <li>mixing schema derived packages from different providers on the same contextPath</li> * </ol> - * @since 1.9, JAXB 2.3 + * @since 9, JAXB 2.3 */ JAXBContext createContext(String contextPath, ClassLoader classLoader,
--- a/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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,6 +38,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Logger; +import java.util.Optional; + /** * Manages all the WebService HTTP servers created by JAXWS runtime. @@ -81,24 +83,38 @@ synchronized(servers) { state = servers.get(inetAddress); if (state == null) { - logger.fine("Creating new HTTP Server at "+inetAddress); - // Creates server with default socket backlog - server = HttpServer.create(inetAddress, 0); - server.setExecutor(Executors.newCachedThreadPool()); - String path = url.toURI().getPath(); - logger.fine("Creating HTTP Context at = "+path); - HttpContext context = server.createContext(path); - server.start(); + final int finalPortNum = port; + Optional<ServerState> stateOpt = + servers.values() + .stream() + .filter(s -> s.getServer() + .getAddress() + .getPort() == finalPortNum) + .findAny(); - // we have to get actual inetAddress from server, which can differ from the original in some cases. - // e.g. A port number of zero will let the system pick up an ephemeral port in a bind operation, - // or IP: 0.0.0.0 - which is used to monitor network traffic from any valid IP address - inetAddress = server.getAddress(); + if (inetAddress.getAddress().isAnyLocalAddress() && + stateOpt.isPresent()) { + state = stateOpt.get(); + } else { + logger.fine("Creating new HTTP Server at "+inetAddress); + // Creates server with default socket backlog + server = HttpServer.create(inetAddress, 0); + server.setExecutor(Executors.newCachedThreadPool()); + String path = url.toURI().getPath(); + logger.fine("Creating HTTP Context at = "+path); + HttpContext context = server.createContext(path); + server.start(); - logger.fine("HTTP server started = "+inetAddress); - state = new ServerState(server, path); - servers.put(inetAddress, state); - return context; + // we have to get actual inetAddress from server, which can differ from the original in some cases. + // e.g. A port number of zero will let the system pick up an ephemeral port in a bind operation, + // or IP: 0.0.0.0 - which is used to monitor network traffic from any valid IP address + inetAddress = server.getAddress(); + + logger.fine("HTTP server started = "+inetAddress); + state = new ServerState(server, path); + servers.put(inetAddress, state); + return context; + } } } server = state.getServer();
--- a/jdk/.hgtags Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/.hgtags Tue Jan 26 09:11:58 2016 +0100 @@ -344,3 +344,4 @@ e1a789be1535741274c9779f4d4ca3495196b5c3 jdk-9+99 3d452840f48299a36842760d17c0c8402f0e1266 jdk-9+100 5e8370fb3ed925335164afe340d1e54beab2d4d5 jdk-9+101 +6eb3c8132e489dab81adde4ce29844904ce15482 jdk-9+102
--- a/jdk/make/CompileDemos.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/CompileDemos.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -38,7 +38,8 @@ include ZipArchive.gmk # Prepare the find cache. -$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src)) +$(eval $(call FillCacheFind, $(wildcard $(JDK_TOPDIR)/src/demo \ + $(JDK_TOPDIR)/src/*/demo))) # Append demo goals to this variable. TARGETS =
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/CompileTools.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -0,0 +1,83 @@ +# +# Copyright (c) 2011, 2014, 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. +# + +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk +include SetupJavaCompilers.gmk + +################################################################################ + +JIMAGE_PKGS := \ + jdk/internal/jimage \ + jdk/internal/jrtfs \ + # + +$(eval $(call SetupJavaCompilation,BUILD_INTERIM_JIMAGE, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(JDK_TOPDIR)/src/java.base/share/classes, \ + INCLUDES := $(JIMAGE_PKGS), \ + BIN := $(BUILDTOOLS_OUTPUTDIR)/interim_jimage_classes)) + +TARGETS += $(BUILD_INTERIM_JIMAGE) + +# Because of the explicit INCLUDES in the compilation setup above, the service provider +# file will not be copied unless META-INF/services would also be added to the INCLUDES. +# Adding META-INF/services would include all files in that directory when only the one +# is needed, which is why this explicit copy is defined instead. +$(eval $(call SetupCopyFiles,COPY_JIMAGE_SERVICE_PROVIDER, \ + SRC := $(JDK_TOPDIR)/src/java.base/share/classes, \ + DEST := $(BUILDTOOLS_OUTPUTDIR)/interim_jimage_classes, \ + FILES := META-INF/services/java.nio.file.spi.FileSystemProvider)) + +TARGETS += $(COPY_JIMAGE_SERVICE_PROVIDER) + +################################################################################ + +$(eval $(call SetupJavaCompilation,BUILD_TOOLS_JDK, \ + SETUP := GENERATE_OLDBYTECODE, \ + ADD_JAVAC_FLAGS := -Xbootclasspath/p:$(call PathList, \ + $(BUILDTOOLS_OUTPUTDIR)/interim_jimage_classes \ + $(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes), \ + SRC := $(JDK_TOPDIR)/make/src/classes $(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes, \ + BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes, \ + COPY := boot.modules ext.modules)) + +$(BUILD_TOOLS_JDK): $(BUILD_INTERIM_JIMAGE) $(COPY_JIMAGE_SERVICE_PROVIDER) + +TARGETS += $(BUILD_TOOLS_JDK) + +$(eval $(call SetupCopyFiles,COPY_NIMBUS_TEMPLATES, \ + SRC := $(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/plaf/nimbus, \ + DEST := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes/build/tools/generatenimbus/resources, \ + FILES := $(wildcard $(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/plaf/nimbus/*.template))) + +TARGETS += $(COPY_NIMBUS_TEMPLATES) + +################################################################################ + +all: $(TARGETS)
--- a/jdk/make/CopySamples.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/CopySamples.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -28,41 +28,38 @@ include $(SPEC) include MakeBase.gmk +################################################################################ + SAMPLE_TARGET_DIR := $(SUPPORT_OUTPUTDIR)/sample/image SAMPLE_SOURCE_DIR := $(JDK_TOPDIR)/src/sample/share -SAMPLE_CLOSED_SOURCE_DIR := $(JDK_TOPDIR)/src/closed/sample/share SAMPLE_SOLARIS_SOURCE_DIR := $(JDK_TOPDIR)/src/sample/solaris # Exclude the vm directory -SAMPLE_FIND_FILTER := -name vm -prune -o +$(eval $(call SetupCopyFiles, COPY_SHARE_SAMPLES, \ + SRC := $(SAMPLE_SOURCE_DIR), \ + DEST := $(SAMPLE_TARGET_DIR), \ + FILES := $(filter-out $(SAMPLE_SOURCE_DIR)/vm/%, \ + $(call CacheFind, $(SAMPLE_SOURCE_DIR))), \ +)) -SAMPLE_SOURCE := $(shell $(FIND) $(SAMPLE_SOURCE_DIR) $(SAMPLE_FIND_FILTER) -type f -print) -SAMPLE_TARGET := $(subst $(SAMPLE_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_SOURCE)) +TARGETS += $(COPY_SHARE_SAMPLES) -ifndef OPENJDK -# Exclude Main.java in EbayClient dir - SAMPLE_CLOSED_SOURCE := $(shell $(FIND) $(SAMPLE_CLOSED_SOURCE_DIR) -type f -print | $(GREP) -v EbayClient/Main.java) - SAMPLE_CLOSED_TARGET := $(subst $(SAMPLE_CLOSED_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_CLOSED_SOURCE)) - SAMPLE_TARGET += $(SAMPLE_CLOSED_TARGET) +ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx)) + $(eval $(call SetupCopyFiles, COPY_SOLARIS_SAMPLES, \ + SRC := $(SAMPLE_SOLARIS_SOURCE_DIR), \ + DEST := $(SAMPLE_TARGET_DIR), \ + FILES := $(call CacheFind, $(SAMPLE_SOLARIS_SOURCE_DIR)), \ + )) + + TARGETS += $(COPY_SOLARIS_SAMPLES) endif -ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx)) - SAMPLE_SOLARIS_SOURCE := $(shell $(FIND) $(SAMPLE_SOLARIS_SOURCE_DIR) -type f -print) - SAMPLE_SOLARIS_TARGET := $(subst $(SAMPLE_SOLARIS_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_SOLARIS_SOURCE)) - SAMPLE_TARGET += $(SAMPLE_SOLARIS_TARGET) -endif +################################################################################ -$(SAMPLE_TARGET_DIR)/dtrace/%: $(SAMPLE_SOLARIS_SOURCE_DIR)/dtrace/% - $(call install-file) +$(eval $(call IncludeCustomExtension, jdk, CopySamples.gmk)) -$(SAMPLE_TARGET_DIR)/webservices/%: $(SAMPLE_CLOSED_SOURCE_DIR)/webservices/% - $(call install-file) +################################################################################ -$(SAMPLE_TARGET_DIR)/%: $(SAMPLE_SOURCE_DIR)/% - $(call install-file) +all: $(TARGETS) -COPY_FILES += $(SAMPLE_TARGET) - -all: $(COPY_FILES) - -.PHONY: all +.PHONY: all default
--- a/jdk/make/Import.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/Import.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -48,7 +48,7 @@ ifneq ($(STATIC_BUILD), true) JSIG_IMPORT = jsig.* else - JSIG_IMPORT = + JSIG_IMPORT = endif HOTSPOT_BASE_IMPORT_FILES := \
--- a/jdk/make/Tools.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/Tools.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -26,31 +26,14 @@ ifndef _TOOLS_GMK _TOOLS_GMK := 1 -default: all - -include $(SPEC) -include MakeBase.gmk include JavaCompilation.gmk -include NativeCompilation.gmk -include SetupJavaCompilers.gmk ################################################################################ - -$(eval $(call SetupJavaCompilation,BUILD_TOOLS_JDK, \ - SETUP := GENERATE_OLDBYTECODE, \ - ADD_JAVAC_FLAGS := -Xbootclasspath/p:$(call PathList, \ - $(BUILDTOOLS_OUTPUTDIR)/interim_jimage_classes \ - $(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes), \ - SRC := $(JDK_TOPDIR)/make/src/classes $(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes, \ - BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes, \ - COPY := boot.modules ext.modules)) - -$(eval $(call SetupCopyFiles,COPY_NIMBUS_TEMPLATES, \ - SRC := $(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/plaf/nimbus, \ - DEST := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes/build/tools/generatenimbus/resources, \ - FILES := $(wildcard $(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/plaf/nimbus/*.template))) - -BUILD_TOOLS_JDK += $(COPY_NIMBUS_TEMPLATES) +# To avoid reevaluating the compilation setup for the tools each time this file +# is included, the actual compilation is handled by CompileTools.gmk. The +# following trick is used to be able to declare a dependency on the built tools. +BUILD_TOOLS_JDK := $(call SetupJavaCompilationCompileTarget, \ + BUILD_TOOLS_JDK, $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes) ################################################################################ @@ -135,34 +118,4 @@ -cp $(call PathList, $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes $(JDK_OUTPUTDIR)) \ build.tools.module.ImageBuilder -########################################################################################## - -JIMAGE_PKGS := \ - jdk/internal/jimage \ - jdk/internal/jrtfs \ - # - -$(eval $(call SetupJavaCompilation,BUILD_INTERIM_JIMAGE, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(JDK_TOPDIR)/src/java.base/share/classes, \ - INCLUDES := $(JIMAGE_PKGS), \ - BIN := $(BUILDTOOLS_OUTPUTDIR)/interim_jimage_classes)) - -# Because of the explicit INCLUDES in the compilation setup above, the service provider -# file will not be copied unless META-INF/services would also be added to the INCLUDES. -# Adding META-INF/services would include all files in that directory when only the one -# is needed, which is why this explicit copy is defined instead. -$(eval $(call SetupCopyFiles,COPY_JIMAGE_SERVICE_PROVIDER, \ - SRC := $(JDK_TOPDIR)/src/java.base/share/classes, \ - DEST := $(BUILDTOOLS_OUTPUTDIR)/interim_jimage_classes, \ - FILES := META-INF/services/java.nio.file.spi.FileSystemProvider)) - -########################################################################################## - -$(BUILD_TOOLS_JDK): $(BUILD_INTERIM_JIMAGE) $(COPY_JIMAGE_SERVICE_PROVIDER) - -java-tools: $(BUILD_TOOLS_JDK) - -all: java-tools - endif # _TOOLS_GMK
--- a/jdk/make/copy/Copy-java.base.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/copy/Copy-java.base.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -187,27 +187,31 @@ ifeq ($(CACERTS_FILE), ) CACERTS_FILE := $(JDK_TOPDIR)/src/java.base/share/conf/security/cacerts endif + CACERTS_DST := $(LIB_DST_DIR)/security/cacerts $(CACERTS_DST): $(CACERTS_FILE) + $(call LogInfo, Copying $(patsubst $(OUTPUT_ROOT)/%, %, $@)) $(call install-file) TARGETS += $(CACERTS_DST) ################################################################################ -$(CONF_DST_DIR)/net.properties: $(JDK_TOPDIR)/src/java.base/share/conf/net.properties - $(ECHO) $(LOG_INFO) Copying $(@F) - $(call install-file) +$(eval $(call SetupCopyFiles, COPY_NET_PROPERTIES, \ + FILES := $(JDK_TOPDIR)/src/java.base/share/conf/net.properties, \ + DEST := $(CONF_DST_DIR), \ +)) -TARGETS += $(CONF_DST_DIR)/net.properties +TARGETS += $(COPY_NET_PROPERTIES) ifeq ($(OPENJDK_TARGET_OS), solaris) - $(CONF_DST_DIR)/sdp/sdp.conf.template: $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template - $(ECHO) $(LOG_INFO) Copying $(@F) - $(call install-file) + $(eval $(call SetupCopyFiles, COPY_SDP_CONF, \ + FILES := $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template, \ + DEST := $(CONF_DST_DIR)/sdp, \ + )) - TARGETS += $(CONF_DST_DIR)/sdp/sdp.conf.template + TARGETS += $(COPY_SDP_CONF) endif ################################################################################
--- a/jdk/make/data/blacklistedcertsconverter/blacklisted.certs.pem Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/data/blacklistedcertsconverter/blacklisted.certs.pem Tue Jan 26 09:11:58 2016 +0100 @@ -725,3 +725,26 @@ DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU= -----END CERTIFICATE----- + +// Subject: CN=eDellRoot +// Issuer: CN=eDellRoot +// Serial Number: +// 6b:c5:7b:95:18:93:aa:97:4b:62:4a:c0:88:fc:3b:b6 +-----BEGIN CERTIFICATE----- +MIIC8zCCAd+gAwIBAgIQa8V7lRiTqpdLYkrAiPw7tjAJBgUrDgMCHQUAMBQxEjAQ +BgNVBAMTCWVEZWxsUm9vdDAeFw0xNTA0MDcxMDIzMjdaFw0zOTEyMzEyMzU5NTla +MBQxEjAQBgNVBAMTCWVEZWxsUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAL3RJg1uzVuEX0Hw4XWGzs6oI9W+o7HZdVdBMMVb4Gzb4uZjCTNjbPx4 +b8LNFL1uArUt+5VVMQDsOTY3Lg/Xe/UNukY2b+0llUOzzBYYpbsFcco4n6SsTvDh +Ni5t+kPo7c23ZrYBPmOu82eEJ6cavs/t39u+wFOkXXwvRCiHA/lWyNWNEPh17+bC +EP3q5N+JrV+6Ho3zQPEv5QUJYdmXsMmD2CMQojeQUj68J91P5w5BKjurG0xjivzh +Soie9ym7VRwLFjWScRuw/9XV6CLqTyL5xrqiiDp1uTOuqNj3uxyts9ocbsoJXuxj +5iEYkSM1nvLupEv+lgy9WqzIEFMm1l8CAwEAAaNJMEcwRQYDVR0BBD4wPIAQYA/f +EzPwmaRcZuSaa/VZ1KEWMBQxEjAQBgNVBAMTCWVEZWxsUm9vdIIQa8V7lRiTqpdL +YkrAiPw7tjAJBgUrDgMCHQUAA4IBAQArfdcScsezj8ooJ92UwwnPgg36noOgiUs5 +XzPLP4h0JpUYQVKB9hY1WTDwRUfTKGh7oNOowd027a/rVSb/TNeoiJIvMKn4gbvV +CWAiHhO8u2u0RkHCDVsa7e0i4ncpueWsihjn6jBrY8T+7eDYwiFT/F03A8NJ7mK5 +lZA8SFd5CTDy3EBUU5UwzXUc5HoIRUxXSPycu3aIBWawg3sCdKiAoikScPAWj0bM +0vmsP/8QSlTOBqO+QFQ6R82BtTvBNU3qbVICV4QObsxib++FAFL56NApPqskg7Vz +LfNIAjKabHUcjbuZkmg6jr4BfYW7+oQDHCsYgADjjKGdKz/8U/fP +-----END CERTIFICATE-----
--- a/jdk/make/gendata/GendataBreakIterator.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gendata/GendataBreakIterator.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -68,8 +68,8 @@ $(BIFILES): $(BASE_DATA_PKG_DIR)/_the.bifiles $(BASE_DATA_PKG_DIR)/_the.bifiles: JAVA_FLAGS += -Xbootclasspath/p:$(BREAK_ITERATOR_CLASSES) $(BASE_DATA_PKG_DIR)/_the.bifiles: $(BUILD_TOOLS) $(UNICODEDATA) $(BUILD_BREAKITERATOR) - $(ECHO) $(LOG_INFO) "Generating BreakIteratorData" - $(MKDIR) -p $(@D) + $(call LogInfo, Generating BreakIteratorData) + $(call MakeDir, $(@D)) $(RM) $(BIFILES) $(TOOL_GENERATEBREAKITERATORDATA) \ -o $(@D) \ @@ -79,8 +79,8 @@ $(BIFILES_TH): $(LD_DATA_PKG_DIR)/_the.bifiles_th $(LD_DATA_PKG_DIR)/_the.bifiles_th: JAVA_FLAGS += -Xbootclasspath/p:$(BREAK_ITERATOR_CLASSES) $(LD_DATA_PKG_DIR)/_the.bifiles_th: $(BUILD_TOOLS) $(UNICODEDATA) $(BUILD_BREAKITERATOR) - $(ECHO) $(LOG_INFO) "Generating BreakIteratorData_th" - $(MKDIR) -p $(@D)/th + $(call LogInfo, Generating BreakIteratorData_th) + $(call MakeDir, $(@D)/th) $(RM) $(BIFILES_TH) $(TOOL_GENERATEBREAKITERATORDATA) \ -o $(@D) \
--- a/jdk/make/gendata/GendataHtml32dtd.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gendata/GendataHtml32dtd.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -27,7 +27,7 @@ HTML32DTD = $(JDK_OUTPUTDIR)/modules/java.desktop/javax/swing/text/html/parser/html32.bdtd $(HTML32DTD): $(BUILD_TOOLS_JDK) - $(ECHO) "Generating HTML DTD file" + $(call LogInfo, Generating HTML DTD file) $(MKDIR) -p $(@D) $(RM) $@ ($(TOOL_DTDBUILDER) $(LOG_INFO) html32 > $@) || exit 1
--- a/jdk/make/gendata/GendataPolicyJars.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gendata/GendataPolicyJars.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -87,8 +87,7 @@ $(US_EXPORT_POLICY_JAR_LIMITED): \ $(US_EXPORT_POLICY_JAR_UNLIMITED) - $(ECHO) $(LOG_INFO) \ - Copying unlimited $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(call LogInfo, Copying unlimited $(patsubst $(OUTPUT_ROOT)/%,%,$@)) $(install-file) TARGETS += $(US_EXPORT_POLICY_JAR_LIMITED) $(US_EXPORT_POLICY_JAR_UNLIMITED) @@ -99,7 +98,7 @@ else $(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_LIMITED) $(install-file) -endif +endif ifndef OPENJDK ifneq ($(UNLIMITED_CRYPTO), true)
--- a/jdk/make/gensrc/Gensrc-jdk.charsets.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/Gensrc-jdk.charsets.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -46,30 +46,34 @@ $(wildcard $(CHARSET_DATA_DIR)/$(CHARSET_STANDARD_OS)) \ $(CHARSET_TEMPLATES) $(CHARSET_EXTENDED_JAVA_TEMPLATES) \ $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating jdk.charsets extcs) + $(call MakeDir, $(@D)) $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR_CS) \ extcs charsets $(CHARSET_STANDARD_OS) \ $(CHARSET_EXTENDED_JAVA_TEMPLATES) \ $(CHARSET_EXTENDED_JAVA_DIR) \ $(CHARSET_COPYRIGHT_HEADER) \ - $(LOG_INFO) + $(LOG_DEBUG) $(TOUCH) '$@' $(CHARSET_DONE_CS)-hkscs: $(CHARSET_COPYRIGHT_HEADER)/HKSCS.java \ $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating jdk.charsets hkscs) + $(call MakeDir, $(@D)) $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR_CS) hkscs '$<' $(TOUCH) '$@' $(CHARSET_DONE_CS)-euctw: $(CHARSET_COPYRIGHT_HEADER)/EUC_TW.java \ $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating jdk.charsets euctw) + $(call MakeDir, $(@D)) $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR_CS) euctw '$<' $(TOUCH) '$@' $(CHARSET_GENSRC_JAVA_DIR_CS)/sjis0213.dat: $(CHARSET_DATA_DIR)/sjis0213.map \ $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating $(patsubst $(OUTPUT_ROOT)/%, %, $@)) + $(call MakeDir, $(@D)) $(TOOL_CHARSETMAPPING) '$<' '$@' sjis0213 GENSRC_JDK_CHARSETS += \ @@ -86,4 +90,3 @@ all: jdk.charsets .PHONY: all jdk.charsets -
--- a/jdk/make/gensrc/Gensrc-jdk.jdi.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/Gensrc-jdk.jdi.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -40,19 +40,18 @@ # Touch the target of this rule at the end to avoid triggering false rebuilds $(JAVA_FILE): $(JDWP_SPEC_FILE) $(BUILD_TOOLS_JDK) $(HEADER_FILE) - $(MKDIR) -p $(@D) - $(MKDIR) -p $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent + $(call LogInfo, Creating JDWP.java and JDWPCommands.h from jdwp.spec) + $(call MakeDir, $(@D) $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent) $(RM) $@ $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent/JDWPCommands.h - $(ECHO) $(LOG_INFO) Creating JDWP.java and JDWPCommands.h from jdwp.spec $(TOOL_JDWPGEN) $< -jdi $@ -include \ $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent/JDWPCommands.h $(TOUCH) $@ $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/jdwp-protocol.html: $(JDWP_SPEC_FILE) \ $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(@D) + $(call LogInfo, Creating $(@F) from jdwp.spec) + $(call MakeDir, $(@D)) $(RM) $@ - $(ECHO) $(LOG_INFO) Creating $(@F) from jdwp.spec $(TOOL_JDWPGEN) $< -doc $@ GENSRC_JDWP := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/com/sun/tools/jdi/JDWP.java \ @@ -63,14 +62,14 @@ ################################################################################ define process-provider - $(MKDIR) -p $(@D) + $(call MakeDir, $(@D)) $(CAT) $^ | $(SED) -e "s/^#\[$(OPENJDK_TARGET_OS)\]//" > $@ endef # Filter com.sun.jdi.connect.Connector $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/META-INF/services/com.sun.jdi.connect.Connector: \ $(JDK_TOPDIR)/src/jdk.jdi/share/classes/META-INF/services/com.sun.jdi.connect.Connector \ - $(HOTSPOT_TOPDIR)/agent/src/share/classes/META-INF/services/com.sun.jdi.connect.Connector + $(HOTSPOT_TOPDIR)/src/jdk.hotspot.agent/share/classes/META-INF/services/com.sun.jdi.connect.Connector $(process-provider) # Copy the same service file into jdk.hotspot.agent so that they are kept the same.
--- a/jdk/make/gensrc/GensrcBuffer.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcBuffer.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -23,7 +23,7 @@ # questions. # -GENSRC_BUFFER := +GENSRC_BUFFER := GENSRC_BUFFER_DST := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/java/nio @@ -31,9 +31,9 @@ ### -$(GENSRC_BUFFER_DST)/_the.buffer.dir: - $(ECHO) "Generating buffer classes" - $(MKDIR) -p $(@D) +$(GENSRC_BUFFER_DST)/_the.buffer.dir: + $(call LogInfo, Generating buffer classes) + $(call MakeDir, $(@D)) $(TOUCH) $@ define fixRw
--- a/jdk/make/gensrc/GensrcCharacterData.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcCharacterData.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -35,8 +35,8 @@ define SetupCharacterData $(SUPPORT_OUTPUTDIR)/gensrc/java.base/java/lang/$1.java: \ $(CHARACTERDATA)/$1.java.template - $(MKDIR) -p $$(@D) - $(ECHO) $(LOG_INFO) Generating $1.java + $$(call LogInfo, Generating $1.java) + $$(call MakeDir, $$(@D)) $(TOOL_GENERATECHARACTER) $2 \ -template $(CHARACTERDATA)/$1.java.template \ -spec $(UNICODEDATA)/UnicodeData.txt \ @@ -56,7 +56,7 @@ # Copy two Java files that need no preprocessing. $(SUPPORT_OUTPUTDIR)/gensrc/java.base/java/lang/%.java: $(CHARACTERDATA)/%.java.template - $(ECHO) $(LOG_INFO) Generating $(@F) + $(call LogInfo, Generating $(@F)) $(call install-file) GENSRC_CHARACTERDATA += $(SUPPORT_OUTPUTDIR)/gensrc/java.base/java/lang/CharacterDataUndefined.java \
--- a/jdk/make/gensrc/GensrcCharsetMapping.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcCharsetMapping.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -44,13 +44,13 @@ $(wildcard $(CHARSET_DATA_DIR)/$(CHARSET_STANDARD_OS)) \ $(CHARSET_TEMPLATES) $(CHARSET_STANDARD_JAVA_TEMPLATES) \ $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(@D) + $(call LogInfo, Generating java.base charset mapping) + $(call MakeDir, $(@D)) $(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR_BASE) \ stdcs charsets $(CHARSET_STANDARD_OS) \ $(CHARSET_STANDARD_JAVA_TEMPLATES) $(CHARSET_EXTSRC_DIR) \ $(CHARSET_COPYRIGHT_HEADER) \ - $(LOG_INFO) + $(LOG_DEBUG) $(TOUCH) '$@' GENSRC_JAVA_BASE += $(CHARSET_DONE_BASE)-stdcs -
--- a/jdk/make/gensrc/GensrcExceptions.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcExceptions.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -32,21 +32,12 @@ GENSRC_EXCEPTIONS_SRC_DIRS := . charset channels -### - -$(GENSRC_EXCEPTIONS_DST)/_the.exceptions.dir: - $(ECHO) "Generating exceptions classes" - $(MKDIR) -p $(@D) - $(TOUCH) $@ - - -### - $(GENSRC_EXCEPTIONS_DST)/_the.%.marker: $(GENSRC_EXCEPTIONS_SRC)/%/exceptions \ - $(GENSRC_EXCEPTIONS_CMD) \ - $(GENSRC_EXCEPTIONS_DST)/_the.exceptions.dir - $(MKDIR) -p $(@D)/$* - SCRIPTS="$(JDK_TOPDIR)/make/scripts" NAWK="$(NAWK)" SH="$(SH)" $(SH) $(GENSRC_EXCEPTIONS_CMD) $< $(@D)/$* $(LOG_INFO) + $(GENSRC_EXCEPTIONS_CMD) + $(call LogInfo, Generating exceptions java.nio $*) + $(call MakeDir, $(@D)/$*) + SCRIPTS="$(JDK_TOPDIR)/make/scripts" NAWK="$(NAWK)" SH="$(SH)" $(SH) \ + $(GENSRC_EXCEPTIONS_CMD) $< $(@D)/$* $(LOG_DEBUG) $(TOUCH) $@ GENSRC_EXCEPTIONS += $(foreach D,$(GENSRC_EXCEPTIONS_SRC_DIRS),$(GENSRC_EXCEPTIONS_DST)/_the.$(D).marker)
--- a/jdk/make/gensrc/GensrcIcons.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcIcons.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -65,8 +65,8 @@ ################################################################################ $(GENSRC_AWT_ICONS_TMP)/_the.icons.dir: - $(ECHO) Generating icon classes - $(MKDIR) -p $(GENSRC_AWT_ICONS_DST) + $(call LogInfo, Generating icon classes) + $(call MakeDir, $(GENSRC_AWT_ICONS_DST)) $(TOUCH) $@ ################################################################################ @@ -121,8 +121,9 @@ endif $(GENSRC_OSX_ICONS): $(GENSRC_OSX_ICONS_SRC) $(BUILD_TOOLS_JDK) + $(call LogInfo, Generating $(patsubst $(OUTPUT_ROOT)/%, %, $@)) + $(call MakeDir, $(@D)) $(RM) $@ $@.tmp - $(MKDIR) -p $(dir $@) $(ECHO) "static unsigned char sAWTIconData[] = { " >> $@.tmp $(CAT) $< | $(TOOL_OSX_TOBIN) >> $@.tmp $(ECHO) "};" >> $@.tmp
--- a/jdk/make/gensrc/GensrcLocaleData.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcLocaleData.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -28,8 +28,9 @@ # into LocaleDataMetaInfo.java # First go look for all locale files -LOCALE_FILES := $(shell $(FIND) $(JDK_TOPDIR)/src/java.base/share/classes \ - $(JDK_TOPDIR)/src/jdk.localedata/share/classes \ +LOCALE_FILES := $(shell $(FIND) \ + $(JDK_TOPDIR)/src/$(MODULE)/share/classes/sun/text/resources \ + $(JDK_TOPDIR)/src/$(MODULE)/share/classes/sun/util/resources \ -name "FormatData_*.java" -o -name "FormatData_*.properties" -o \ -name "CollationData_*.java" -o -name "CollationData_*.properties" -o \ -name "TimeZoneNames_*.java" -o -name "TimeZoneNames_*.properties" -o \ @@ -42,17 +43,21 @@ LOCALE_RESOURCES := $(sort $(subst .properties,,$(subst .java,,$(notdir $(LOCALE_FILES))))) # Include the list of resources found during the previous compile. --include $(SUPPORT_OUTPUTDIR)/gensrc/_the.locale_resources +-include $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/_the.locale_resources MISSING_RESOURCES := $(filter-out $(LOCALE_RESOURCES), $(PREV_LOCALE_RESOURCES)) NEW_RESOURCES := $(filter-out $(PREV_LOCALE_RESOURCES), $(LOCALE_RESOURCES)) ifneq (, $(MISSING_RESOURCES)$(NEW_RESOURCES)) # There is a difference in the number of supported resources. Trigger a regeneration. - $(shell $(RM) $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/BaseLocaleDataMetaInfo.java \ - $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/provider/NonBaseLocaleDataMetaInfo.java \ - $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/util/cldr/CLDRBaseLocaleDataMetaInfo.java \ - $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo_jdk_localedata.java) + ifeq ($(MODULE), java.base) + $(shell $(RM) $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/BaseLocaleDataMetaInfo.java \ + $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/util/cldr/CLDRBaseLocaleDataMetaInfo.java) + endif + ifeq ($(MODULE), jdk.localedata) + $(shell $(RM) $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/provider/NonBaseLocaleDataMetaInfo.java \ + $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo_jdk_localedata.java) + endif endif # The base locales @@ -121,18 +126,18 @@ $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/BaseLocaleDataMetaInfo.java: \ $(JDK_TOPDIR)/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template + $(call LogInfo, Creating sun/util/locale/provider/BaseLocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources) $(MKDIR) -p $(@D) - $(ECHO) Creating sun/util/locale/provider/BaseLocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources. $(PRINTF) "PREV_LOCALE_RESOURCES:=$(LOCALE_RESOURCES)" \ - > $(SUPPORT_OUTPUTDIR)/gensrc/_the.locale_resources + > $(SUPPORT_OUTPUTDIR)/gensrc/java.base/_the.locale_resources $(SED) $(SED_BASEARGS) $< > $@ $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/provider/NonBaseLocaleDataMetaInfo.java: \ $(JDK_TOPDIR)/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template + $(call LogInfo, Creating sun/util/resources/provider/NonBaseLocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources) $(MKDIR) -p $(@D) - $(ECHO) Creating sun/util/resources/provider/NonBaseLocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources. $(PRINTF) "PREV_LOCALE_RESOURCES:=$(LOCALE_RESOURCES)" \ - > $(SUPPORT_OUTPUTDIR)/gensrc/_the.locale_resources + > $(SUPPORT_OUTPUTDIR)/gensrc/jdk.localedata/_the.locale_resources $(SED) $(SED_NONBASEARGS) $< > $@ GENSRC_BASELOCALEDATA := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/BaseLocaleDataMetaInfo.java
--- a/jdk/make/gensrc/GensrcMisc.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcMisc.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -50,7 +50,7 @@ SOR_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOR_SRC)/$(GENSRC_SOR_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOR_EXE, \ +$(eval $(call SetupNativeCompilation, BUILD_GENSRC_SOR_EXE, \ SRC := $(GENSRC_SOR_SRC), \ INCLUDE_FILES := $(GENSRC_SOR_SRC_FILE), \ TOOLCHAIN := TOOLCHAIN_BUILD, \ @@ -86,7 +86,7 @@ UC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_UC_SRC)/$(GENSRC_UC_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_UC_EXE, \ + $(eval $(call SetupNativeCompilation, BUILD_GENSRC_UC_EXE, \ SRC := $(GENSRC_UC_SRC), \ INCLUDE_FILES := $(GENSRC_UC_SRC_FILE), \ TOOLCHAIN := TOOLCHAIN_BUILD, \ @@ -124,7 +124,7 @@ SOL_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOL_SRC)/$(GENSRC_SOL_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOL_EXE, \ + $(eval $(call SetupNativeCompilation, BUILD_GENSRC_SOL_EXE, \ SRC := $(GENSRC_SOL_SRC), \ INCLUDE_FILES := $(GENSRC_SOL_SRC_FILE), \ TOOLCHAIN := TOOLCHAIN_BUILD, \
--- a/jdk/make/gensrc/GensrcProperties.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcProperties.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -75,7 +75,7 @@ # Convert .../src/<module>/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties # to .../support/gensrc/<module>/com/sun/tools/javac/resources/javac_zh_CN.java - # Strip away prefix and suffix, leaving for example only: + # Strip away prefix and suffix, leaving for example only: # "<module>/share/classes/com/sun/tools/javac/resources/javac_zh_CN" $1_JAVAS := $$(patsubst $$($1_MODULE_PATH_ROOT)/%, \ $(SUPPORT_OUTPUTDIR)/gensrc/%, \
--- a/jdk/make/gensrc/GensrcSwing.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcSwing.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -31,12 +31,11 @@ NIMBUS_SKIN_FILE = $(JDK_TOPDIR)/src/java.desktop/share/classes/javax/swing/plaf/nimbus/skin.laf $(SUPPORT_OUTPUTDIR)/gensrc/java.desktop/_the.generated_nimbus: $(NIMBUS_SKIN_FILE) $(BUILD_TOOLS_JDK) + $(call LogInfo, Generating Nimbus source files) $(MKDIR) -p $(@D) - $(ECHO) "Generating Nimbus source files" - $(TOOL_GENERATENIMBUS) $(LOG_INFO) \ + $(TOOL_GENERATENIMBUS) $(LOG_DEBUG) \ -skinFile $(NIMBUS_SKIN_FILE) -buildDir $(SUPPORT_OUTPUTDIR)/gensrc/java.desktop \ -packagePrefix $(NIMBUS_PACKAGE).nimbus -lafName Nimbus - $(ECHO) $(LOG_INFO) "Finished generating Nimbus source files" $(TOUCH) $@ GENSRC_SWING_NIMBUS := $(SUPPORT_OUTPUTDIR)/gensrc/java.desktop/_the.generated_nimbus
--- a/jdk/make/gensrc/GensrcX11Wrappers.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/gensrc/GensrcX11Wrappers.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -63,14 +63,14 @@ # Copy only the sizes.* files that are actually needed. WrapperGenerator picks up any it finds from the # file prefix it is given so those not needed need to be hidden. $(GENSRC_X11WRAPPERS_TMP)/sizes.%: $(GENSRC_SIZER_DIR)/sizes.% - $(MKDIR) -p $(@D) + $(call MakeDir, $(@D)) $(RM) '$@' $(SORT) $< > $@ # Run the tool on the offset files copied from the source repository to generate several Java classes # used in awt. $(SUPPORT_OUTPUTDIR)/gensrc/java.desktop/_the.generated.x11: $(GENSRC_X11_SIZES_USED) $(BUILD_TOOLS_JDK) - $(MKDIR) -p $(GENSRC_X11WRAPPERS_DST) + $(call MakeDir, $(GENSRC_X11WRAPPERS_DST)) $(TOOL_WRAPPERGENERATOR) $(GENSRC_X11WRAPPERS_DST) $(GENSRC_SIZER_DIR)/xlibtypes.txt "gen" $(GENSRC_X11WRAPPERS_TMP)/sizes $(TOUCH) $@ @@ -82,8 +82,8 @@ # Generate the C code for the program that will output the offset file. $(GENSRC_X11WRAPPERS_TMP)/sizer.%.c: $(GENSRC_SIZER_DIR)/xlibtypes.txt $(BUILD_TOOLS_JDK) - $(ECHO) "Generating X11 wrapper ($*-bit version)" - $(MKDIR) -p $(@D) + $(call LogInfo, Generating X11 wrapper ($*-bit version)) + $(call MakeDir, $(@D)) $(TOOL_WRAPPERGENERATOR) $(@D) $(GENSRC_SIZER_DIR)/xlibtypes.txt "sizer" $* # use -m32/-m64 only if the compiler supports it @@ -103,7 +103,7 @@ # Compile the C code into an executable. $(GENSRC_X11WRAPPERS_TMP)/sizer.%.exe: $(GENSRC_X11WRAPPERS_TMP)/sizer.%.c - $(MKDIR) -p $(@D) + $(call MakeDir, $(@D)) (cd $(@D) && $(CC) $(MEMORY_MODEL_FLAG) -o $@ $< \ $(X_CFLAGS) \ $(X_LIBS) \ @@ -114,9 +114,9 @@ # Run the executable create the offset file and check that it is identical # to the offset file in the source code repository. $(GENSRC_X11WRAPPERS_TMP)/sizes.%.verification: $(GENSRC_X11WRAPPERS_TMP)/sizer.%.exe - $(MKDIR) -p $(@D) + $(call LogInfo, Verifying X11 wrapper sizes) + $(call MakeDir, $(@D)) $(GENSRC_X11WRAPPERS_TMP)/sizer.$*.exe | $(SORT) > $@.tmp - $(ECHO) Verifying $(GENSRC_X11WRAPPERS_TMP)/sizes.$*.verification.tmp to $(GENSRC_X11WRAPPERS_TMP)/sizes.$* $(DIFF) $(GENSRC_X11WRAPPERS_TMP)/sizes.$*.verification.tmp $(GENSRC_X11WRAPPERS_TMP)/sizes.$* mv $@.tmp $@
--- a/jdk/make/launcher/Launcher-java.base.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/launcher/Launcher-java.base.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -130,7 +130,6 @@ LDFLAGS := $(LDFLAGS_JDKEXE), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/jexec_obj, \ OUTPUT_DIR := $(BUILD_JEXEC_DST_DIR), \ - DEBUG_SYMBOLS := true, \ PROGRAM := jexec)) TARGETS += $(BUILD_JEXEC)
--- a/jdk/make/launcher/Launcher-jdk.accessibility.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/launcher/Launcher-jdk.accessibility.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -45,7 +45,6 @@ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jabswitch, \ OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/jdk.accessibility, \ PROGRAM := jabswitch, \ - DEBUG_SYMBOLS := true, \ VERSIONINFO_RESOURCE := $(ACCESSBRIDGE_SRC)/AccessBridgeStatusWindow.RC, \ RC_FLAGS := $(RC_FLAGS) \ -D "JDK_FNAME=jabswitch.exe" \ @@ -79,7 +78,6 @@ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jaccessinspector$1, \ OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/jdk.accessibility, \ PROGRAM := jaccessinspector$1, \ - DEBUG_SYMBOLS := true, \ VERSIONINFO_RESOURCE := $(TOPDIR)/jaccessinspector/jaccessinspectorWindow.rc, \ RC_FLAGS := $$(RC_FLAGS) \ -D "JDK_FNAME=jaccessinspector$1.exe" \ @@ -107,7 +105,6 @@ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jaccesswalker$1, \ OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/jdk.accessibility, \ PROGRAM := jaccesswalker$1, \ - DEBUG_SYMBOLS := true, \ VERSIONINFO_RESOURCE := $(TOPDIR)/jaccesswalker/jaccesswalkerWindow.rc, \ RC_FLAGS := $$(RC_FLAGS) \ -D "JDK_FNAME=jaccesswalker$1.exe" \
--- a/jdk/make/launcher/Launcher-jdk.pack200.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/launcher/Launcher-jdk.pack200.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -100,7 +100,6 @@ -D "JDK_FNAME=unpack200.exe" \ -D "JDK_INTERNAL_NAME=unpack200" \ -D "JDK_FTYPE=0x1L", \ - DEBUG_SYMBOLS := true, \ MANIFEST := $(JDK_TOPDIR)/src/jdk.pack200/windows/native/unpack200/unpack200_proto.exe.manifest, \ MANIFEST_VERSION := $(VERSION_NUMBER_FOUR_POSITIONS), \ ))
--- a/jdk/make/launcher/LauncherCommon.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/launcher/LauncherCommon.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -25,15 +25,6 @@ include NativeCompilation.gmk -# SetupNativeCompilation now supports debug symbols on macosx for hotspot. -# Disable it here for the jdk binaries until we decide to enable them. -ifeq ($(OPENJDK_TARGET_OS), macosx) - ENABLE_DEBUG_SYMBOLS := false -endif - -# Prepare the find cache. -$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/java.base/share/native/launcher)) - ifeq ($(OPENJDK_TARGET_OS), macosx) ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN) else @@ -124,7 +115,7 @@ $1_LDFLAGS += -exported_symbols_list \ $(SUPPORT_OUTPUTDIR)/build-static/exported.symbols $1_LIBS += \ - $(shell $(FIND) $(SUPPORT_OUTPUTDIR)/modules_libs/java.base -name "*.a") \ + $$(shell $(FIND) $(SUPPORT_OUTPUTDIR)/modules_libs/java.base -name "*.a") \ $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/libdt_socket.a \ $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/libjdwp.a \ $(SUPPORT_OUTPUTDIR)/native/java.base/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) \ @@ -174,8 +165,7 @@ endif $$(eval $$(call SetupNativeCompilation, BUILD_LAUNCHER_$1, \ - SRC := $(LAUNCHER_SRC), \ - INCLUDE_FILES := main.c, \ + EXTRA_FILES := $(LAUNCHER_SRC)/main.c, \ OPTIMIZATION := $$($1_OPTIMIZATION), \ CFLAGS := $$($1_CFLAGS) \ $(LAUNCHER_CFLAGS) \ @@ -204,7 +194,6 @@ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$1_objs, \ OUTPUT_DIR := $$($1_OUTPUT_DIR), \ PROGRAM := $1, \ - DEBUG_SYMBOLS := true, \ VERSIONINFO_RESOURCE := $$($1_VERSION_INFO_RESOURCE), \ RC_FLAGS := $$(RC_FLAGS) \ -D "JDK_FNAME=$1$(EXE_SUFFIX)" \
--- a/jdk/make/lib/Awt2dLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Awt2dLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -69,7 +69,7 @@ -D "JDK_INTERNAL_NAME=mlib_image" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmlib_image, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBMLIB_IMAGE): $(call FindLib, java.base, java) @@ -134,7 +134,7 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS := -ljava -ljvm -lc $(BUILD_LIBMLIB_LDLIBS), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmlib_image_v, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBMLIB_IMAGE_V): $(call FindLib, java.base, java) @@ -279,7 +279,7 @@ -D "JDK_INTERNAL_NAME=awt" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBAWT): $(call FindLib, java.base, java) @@ -369,7 +369,7 @@ -D "JDK_INTERNAL_NAME=xawt" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt_xawt, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBAWT_XAWT): $(call FindLib, java.base, java) @@ -433,7 +433,7 @@ -D "JDK_INTERNAL_NAME=lcms" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/liblcms, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) TARGETS += $(BUILD_LIBLCMS) @@ -509,7 +509,7 @@ -D "JDK_FTYPE=0x2L", \ REORDER := $(BUILD_LIBJAVAJPEG_REORDER), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjavajpeg, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBJAVAJPEG): $(call FindLib, java.base, java) @@ -578,7 +578,7 @@ LIBS_linux := -lm $(LIBDL), \ LIBS_solaris := -lm $(LIBDL) $(LIBCXX) -lc, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt_headless, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBAWT_HEADLESS): $(BUILD_LIBAWT) @@ -700,7 +700,7 @@ -D "JDK_INTERNAL_NAME=fontmanager" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfontmanager, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT) @@ -745,12 +745,13 @@ -D "JDK_INTERNAL_NAME=jawt" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjawt, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBJAWT): $(BUILD_LIBAWT) $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT) - $(ECHO) Copying $(@F) + $(call LogInfo, Copying $(patsubst $(OUTPUT_ROOT)/%, %, $@)) + $(call MakeDir, $(@D)) $(CP) $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjawt/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) $@ TARGETS += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) @@ -804,7 +805,7 @@ LIBS_solaris := $(X_LIBS) -lXrender, \ LIBS_macosx := -framework Cocoa, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjawt, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) ifndef BUILD_HEADLESS_ONLY $(BUILD_LIBJAWT): $(BUILD_LIBAWT_XAWT) @@ -926,7 +927,7 @@ -D "JDK_INTERNAL_NAME=splashscreen" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsplashscreen, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBSPLASHSCREEN) @@ -1002,7 +1003,7 @@ -framework OpenGL \ -framework QuartzCore -ljava, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libawt_lwawt, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBAWT_LWAWT) @@ -1044,7 +1045,7 @@ -framework JavaRuntimeSupport \ -ljava -ljvm, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosxui, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBOSXUI)
--- a/jdk/make/lib/CoreLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/CoreLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -25,6 +25,10 @@ WIN_VERIFY_LIB := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libverify/verify.lib +# Hook to include the corresponding custom file, if present. +$(eval $(call IncludeCustomExtension, jdk, lib/CoreLibraries.gmk)) + + ########################################################################################## # libfdlibm is statically linked with libjava below and not delivered into the # product on its own. @@ -51,7 +55,7 @@ DISABLED_WARNINGS_microsoft := 4146 4244 4018, \ ARFLAGS := $(ARFLAGS), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) else @@ -64,7 +68,7 @@ CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \ LDFLAGS := -nostdlib -r -arch x86_64, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) BUILD_LIBFDLIBM := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) $(BUILD_LIBFDLIBM): $(BUILD_LIBFDLIBM_MAC) @@ -82,7 +86,7 @@ LIBVERIFY_OPTIMIZATION := HIGH ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), ) - ifeq ($(ENABLE_DEBUG_SYMBOLS), true) + ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) LIBVERIFY_OPTIMIZATION := LOW endif endif @@ -106,7 +110,7 @@ -D "JDK_FTYPE=0x2L", \ REORDER := $(BUILD_LIBVERIFY_REORDER), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libverify, \ - DEBUG_SYMBOLS := true)) +)) TARGETS += $(BUILD_LIBVERIFY) @@ -119,6 +123,9 @@ -I$(SUPPORT_OUTPUTDIR)/headers/java.base \ -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"' +# Make it possible to override this variable +LIBJAVA_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers + ifeq ($(OPENJDK_TARGET_OS), macosx) BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c @@ -146,7 +153,7 @@ System.c_CFLAGS := $(VERSION_CFLAGS), \ jdk_util.c_CFLAGS := $(VERSION_CFLAGS), \ DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \ - MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers, \ + MAPFILE := $(LIBJAVA_MAPFILE), \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_macosx := -L$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/, \ @@ -171,7 +178,7 @@ -D "JDK_FTYPE=0x2L", \ REORDER := $(LIBJAVA_REORDER), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjava, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) TARGETS += $(BUILD_LIBJAVA) @@ -228,8 +235,7 @@ -D "JDK_INTERNAL_NAME=zip" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libzip, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) - +)) $(BUILD_LIBZIP): $(BUILD_LIBJAVA) @@ -273,7 +279,7 @@ -D "JDK_INTERNAL_NAME=jimage" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjimage, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBJIMAGE): $(BUILD_LIBJAVA) @@ -389,7 +395,7 @@ -D "JDK_INTERNAL_NAME=jli" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) TARGETS += $(BUILD_LIBJLI) @@ -407,7 +413,7 @@ CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS), \ ARFLAGS := $(ARFLAGS), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBJLI_STATIC) @@ -426,7 +432,7 @@ CFLAGS := $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \ LDFLAGS := -nostdlib -r, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) ifeq ($(STATIC_BUILD), true) TARGETS += $(BUILD_LIBJLI_STATIC)
--- a/jdk/make/lib/Lib-java.base.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-java.base.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -49,7 +49,7 @@ JAVA_BASE_EXPORT_SYMBOL_FILE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/java.base.symbols $(JAVA_BASE_EXPORT_SYMBOL_FILE): $(JAVA_BASE_EXPORT_SYMBOLS_SRC) - $(ECHO) $(LOG_INFO) "Generating java.base.symbols file" + $(call LogInfo, Generating java.base.symbols file) $(CAT) $^ > $@ # The individual symbol files is generated when the respective lib is built
--- a/jdk/make/lib/Lib-java.instrument.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-java.instrument.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -84,7 +84,7 @@ -D "JDK_INTERNAL_NAME=instrument" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libinstrument, \ - DEBUG_SYMBOLS := true)) +)) ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows aix)) $(BUILD_LIBINSTRUMENT): $(SUPPORT_OUTPUTDIR)/native/java.base/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX)
--- a/jdk/make/lib/Lib-java.management.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-java.management.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -40,7 +40,7 @@ LIBMANAGEMENT_OPTIMIZATION := HIGH ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), ) - ifeq ($(ENABLE_DEBUG_SYMBOLS), true) + ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) LIBMANAGEMENT_OPTIMIZATION := LOW endif endif @@ -64,7 +64,7 @@ -D "JDK_INTERNAL_NAME=management" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmanagement, \ - DEBUG_SYMBOLS := true)) +)) $(BUILD_LIBMANAGEMENT): $(call FindLib, java.base, java)
--- a/jdk/make/lib/Lib-java.prefs.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-java.prefs.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -55,7 +55,7 @@ -D "JDK_INTERNAL_NAME=prefs" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libprefs, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBPREFS): $(call FindLib, java.base, java)
--- a/jdk/make/lib/Lib-java.security.jgss.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-java.security.jgss.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -46,7 +46,7 @@ LIBS := $(LIBDL), \ LIBS_solaris := -lc, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libj2gss, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBJ2GSS) endif @@ -92,7 +92,7 @@ -D "JDK_INTERNAL_NAME=$(BUILD_LIBKRB5_NAME)" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libkrb5, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBKRB5) endif
--- a/jdk/make/lib/Lib-java.smartcardio.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-java.smartcardio.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -52,7 +52,7 @@ -D "JDK_INTERNAL_NAME=j2pcsc" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libj2pcsc, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) TARGETS += $(BUILD_LIBJ2PCSC)
--- a/jdk/make/lib/Lib-jdk.accessibility.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.accessibility.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -61,7 +61,7 @@ -D "JDK_INTERNAL_NAME=javaaccessbridge$1" \ -D "JDK_FTYPE=0x02L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjavaaccessbridge$1, \ - DEBUG_SYMBOLS := true) + ) $$(BUILD_JAVAACCESSBRIDGE$1): $(SUPPORT_OUTPUTDIR)/native/java.desktop/libjawt/jawt.lib @@ -91,7 +91,7 @@ -D "JDK_INTERNAL_NAME=windowsaccessbridge$1" \ -D "JDK_FTYPE=0x02L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libwindowsaccessbridge$1, \ - DEBUG_SYMBOLS := true) + ) TARGETS += $$(BUILD_WINDOWSACCESSBRIDGE$1) @@ -113,7 +113,7 @@ -D "JDK_INTERNAL_NAME=jabsysinfo" \ -D "JDK_FTYPE=0x02L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/lib/libjabsysinfo, \ - DEBUG_SYMBOLS := true) + ) TARGETS += $$(BUILD_ACCESSBRIDGESYSINFO)
--- a/jdk/make/lib/Lib-jdk.attach.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.attach.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -56,7 +56,7 @@ LIBS_solaris := -ldoor, \ LIBS_windows := $(WIN_JAVA_LIB) advapi32.lib psapi.lib, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libattach, \ - DEBUG_SYMBOLS := true)) +)) $(BUILD_LIBATTACH): $(call FindLib, java.base, java)
--- a/jdk/make/lib/Lib-jdk.crypto.ec.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.crypto.ec.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -68,7 +68,7 @@ -D "JDK_INTERNAL_NAME=sunec" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsunec, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBSUNEC) endif
--- a/jdk/make/lib/Lib-jdk.crypto.mscapi.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.crypto.mscapi.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -47,7 +47,7 @@ -D "JDK_INTERNAL_NAME=sunmscapi" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsunmscapi, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBSUNMSCAPI) endif
--- a/jdk/make/lib/Lib-jdk.crypto.pkcs11.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.crypto.pkcs11.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -51,7 +51,7 @@ -D "JDK_INTERNAL_NAME=j2pkcs11" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libj2pkcs11, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) TARGETS += $(BUILD_LIBJ2PKCS11)
--- a/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -44,7 +44,7 @@ LIBS := $(LIBDL), \ LIBS_solaris := -lc, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libj2ucrypto, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBJ2UCRYPTO): $(BUILD_LIBJAVA)
--- a/jdk/make/lib/Lib-jdk.deploy.osx.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.deploy.osx.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -57,7 +57,7 @@ -framework SystemConfiguration \ $(JDKLIB_LIBS), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosx, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBOSX)
--- a/jdk/make/lib/Lib-jdk.internal.le.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.internal.le.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -51,7 +51,7 @@ -D "JDK_INTERNAL_NAME=le" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/lible, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBLE)
--- a/jdk/make/lib/Lib-jdk.jdi.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.jdi.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -55,7 +55,7 @@ -D "JDK_INTERNAL_NAME=dt_shmem" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libdt_shmem, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBDT_SHMEM)
--- a/jdk/make/lib/Lib-jdk.jdwp.agent.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.jdwp.agent.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -56,7 +56,7 @@ -D "JDK_INTERNAL_NAME=dt_socket" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libdt_socket, \ - DEBUG_SYMBOLS := true)) +)) $(BUILD_LIBDT_SOCKET): $(call FindLib, java.base, java) @@ -95,7 +95,7 @@ -D "JDK_INTERNAL_NAME=jdwp" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjdwp, \ - DEBUG_SYMBOLS := true)) +)) $(BUILD_LIBJDWP): $(call FindLib, java.base, java) @@ -111,7 +111,7 @@ JDK_JDWP_AGENT_EXPORT_SYMBOL_FILE := $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/jdk.jdwp.agent.symbols $(JDK_JDWP_AGENT_EXPORT_SYMBOL_FILE): $(JDK_JDWP_AGENT_EXPORT_SYMBOLS_SRC) - $(ECHO) $(LOG_INFO) "Generating jdk.jdwp.agent symbols file" + $(call LogInfo, Generating jdk.jdwp.agent symbols file) $(CAT) $^ > $@ # The individual symbol files is generated when the respective lib is built
--- a/jdk/make/lib/Lib-jdk.management.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.management.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -48,7 +48,7 @@ LIBMANAGEMENT_EXT_OPTIMIZATION := HIGH ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), ) - ifeq ($(ENABLE_DEBUG_SYMBOLS), true) + ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) LIBMANAGEMENT_EXT_OPTIMIZATION := LOW endif endif @@ -73,7 +73,7 @@ -D "JDK_INTERNAL_NAME=management_ext" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmanagement_ext, \ - DEBUG_SYMBOLS := true)) +)) $(BUILD_LIBMANAGEMENT_EXT): $(call FindLib, java.base, java)
--- a/jdk/make/lib/Lib-jdk.pack200.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.pack200.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -52,7 +52,7 @@ -D "JDK_FNAME=unpack.dll" \ -D "JDK_INTERNAL_NAME=unpack" \ -D "JDK_FTYPE=0x2L", \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBUNPACK): $(call FindLib, java.base, java)
--- a/jdk/make/lib/Lib-jdk.sctp.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.sctp.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -53,7 +53,7 @@ LIBS_linux := -lpthread $(LIBDL), \ LIBS_solaris := -lsocket -lc, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsctp, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBSCTP)
--- a/jdk/make/lib/Lib-jdk.security.auth.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/Lib-jdk.security.auth.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -55,7 +55,7 @@ -D "JDK_INTERNAL_NAME=$(LIBJAAS_NAME)" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjaas, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBJAAS): $(call FindLib, java.base, java)
--- a/jdk/make/lib/LibCommon.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/LibCommon.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -23,40 +23,24 @@ # questions. # -include $(SPEC) -include MakeBase.gmk include NativeCompilation.gmk +# Hook to include the corresponding custom file, if present. +$(eval $(call IncludeCustomExtension, jdk, lib/LibCommon.gmk)) + +################################################################################ + GLOBAL_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/common/version.rc # Absolute paths to lib files on windows for use in LDFLAGS. Should figure out a more # elegant solution to this. WIN_JAVA_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib -ifdef OPENJDK - # Build everything with debugging on OpenJDK - DEBUG_ALL_BINARIES := true -else - # Use this variable to set DEBUG_SYMBOLS true on windows for all libraries, but - # not on other platforms. - ifeq ($(OPENJDK_TARGET_OS), windows) - DEBUG_ALL_BINARIES := true - else - DEBUG_ALL_BINARIES := false - endif -endif - -# SetupNativeCompilation now supports debug symbols on macosx for hotspot. -# Disable it here for the jdk libraries until we decide to enable them. -ifeq ($(OPENJDK_TARGET_OS), macosx) - ENABLE_DEBUG_SYMBOLS := false -endif - ################################################################################ # Find the default set of src dirs for a native library. # Param 1 - module name # Param 2 - library name -FindSrcDirsForLib = \ +FindSrcDirsForLib += \ $(call uniq, $(wildcard \ $(JDK_TOPDIR)/src/$(strip $1)/$(OPENJDK_TARGET_OS)/native/lib$(strip $2) \ $(JDK_TOPDIR)/src/$(strip $1)/$(OPENJDK_TARGET_OS_TYPE)/native/lib$(strip $2) \ @@ -87,3 +71,5 @@ else ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/java.base/share/native/libzip/zlib-1.2.8 endif + +###############################################################################
--- a/jdk/make/lib/NetworkingLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/NetworkingLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -52,7 +52,7 @@ -D "JDK_INTERNAL_NAME=net" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libnet, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBNET): $(BUILD_LIBJAVA)
--- a/jdk/make/lib/NioLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/NioLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -91,7 +91,7 @@ -D "JDK_INTERNAL_NAME=nio" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libnio, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) TARGETS += $(BUILD_LIBNIO)
--- a/jdk/make/lib/PlatformLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/PlatformLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -54,7 +54,7 @@ -framework IOSurface \ -framework QuartzCore, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosxapp, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) TARGETS += $(BUILD_LIBOSXAPP)
--- a/jdk/make/lib/SecurityLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/SecurityLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -54,7 +54,7 @@ -framework Security \ $(JDKLIB_LIBS), \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosxsecurity, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBOSXSECURITY): $(BUILD_LIBJAVA)
--- a/jdk/make/lib/SoundLibraries.gmk Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/lib/SoundLibraries.gmk Tue Jan 26 09:11:58 2016 +0100 @@ -138,7 +138,7 @@ -D "JDK_INTERNAL_NAME=jsound" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjsound, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) +)) $(BUILD_LIBJSOUND): $(BUILD_LIBJAVA) @@ -173,7 +173,7 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS := $(ALSA_LIBS) -ljava -ljvm, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjsoundalsa, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBJSOUNDALSA): $(BUILD_LIBJAVA) @@ -204,7 +204,7 @@ -D "JDK_INTERNAL_NAME=jsoundds" \ -D "JDK_FTYPE=0x2L", \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjsoundds, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + )) $(BUILD_LIBJSOUNDDS): $(BUILD_LIBJAVA)
--- a/jdk/make/src/classes/build/tools/spp/Spp.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/src/classes/build/tools/spp/Spp.java Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2015, 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 @@ -32,9 +32,10 @@ * Spp: A simple regex-based stream preprocessor based on Mark Reinhold's * sed-based spp.sh * - * Usage: java build.tools.spp.Spp [-be] [-Kkey] -Dvar=value ... <in >out + * Usage: java build.tools.spp.Spp [-be] [-nel] [-Kkey] -Dvar=value ... <in >out * - * Source-file constructs + * If -nel is declared then empty lines will not be substituted for lines of + * text in the template that do not appear in the output. * * Meaningful only at beginning of line, works with any number of keys: * @@ -64,9 +65,10 @@ public class Spp { public static void main(String args[]) throws Exception { - Map<String, String> vars = new HashMap<String, String>(); - Set<String> keys = new HashSet<String>(); + Map<String, String> vars = new HashMap<>(); + Set<String> keys = new HashSet<>(); boolean be = false; + boolean el = true; for (String arg:args) { if (arg.startsWith("-D")) { @@ -76,8 +78,10 @@ keys.add(arg.substring(2)); } else if ("-be".equals(arg)) { be = true; + } else if ("-nel".equals(arg)) { + el = false; } else { - System.err.println("Usage: java build.tools.spp.Spp [-be] [-Kkey] -Dvar=value ... <in >out"); + System.err.println("Usage: java build.tools.spp.Spp [-be] [-nel] [-Kkey] -Dvar=value ... <in >out"); System.exit(-1); } } @@ -85,7 +89,7 @@ StringBuffer out = new StringBuffer(); new Spp().spp(new Scanner(System.in), out, "", - keys, vars, be, + keys, vars, be, el, false); System.out.print(out.toString()); } @@ -93,7 +97,7 @@ static final String LNSEP = System.getProperty("line.separator"); static final String KEY = "([a-zA-Z0-9]+)"; static final String VAR = "([a-zA-Z0-9_\\-]+)"; - static final String TEXT = "([a-zA-Z0-9&;,.<>/#() \\$]+)"; // $ -- hack embedded $var$ + static final String TEXT = "([a-zA-Z0-9&;,.<>/#() \\?\\[\\]\\$]+)"; // $ -- hack embedded $var$ static final int GN_NOT = 1; static final int GN_KEY = 2; @@ -101,11 +105,11 @@ static final int GN_NO = 5; static final int GN_VAR = 6; - Matcher ifkey = Pattern.compile("^#if\\[(!)?" + KEY + "\\]").matcher(""); - Matcher elsekey = Pattern.compile("^#else\\[(!)?" + KEY + "\\]").matcher(""); - Matcher endkey = Pattern.compile("^#end\\[(!)?" + KEY + "\\]").matcher(""); - Matcher vardef = Pattern.compile("\\{#if\\[(!)?" + KEY + "\\]\\?" + TEXT + "(:"+ TEXT + ")?\\}|\\$" + VAR + "\\$").matcher(""); - Matcher vardef2 = Pattern.compile("\\$" + VAR + "\\$").matcher(""); + final Matcher ifkey = Pattern.compile("^#if\\[(!)?" + KEY + "\\]").matcher(""); + final Matcher elsekey = Pattern.compile("^#else\\[(!)?" + KEY + "\\]").matcher(""); + final Matcher endkey = Pattern.compile("^#end\\[(!)?" + KEY + "\\]").matcher(""); + final Matcher vardef = Pattern.compile("\\{#if\\[(!)?" + KEY + "\\]\\?" + TEXT + "(:"+ TEXT + ")?\\}|\\$" + VAR + "\\$").matcher(""); + final Matcher vardef2 = Pattern.compile("\\$" + VAR + "\\$").matcher(""); void append(StringBuffer buf, String ln, Set<String> keys, Map<String, String> vars) { @@ -135,7 +139,7 @@ // return true if #end[key], #end or EOF reached boolean spp(Scanner in, StringBuffer buf, String key, Set<String> keys, Map<String, String> vars, - boolean be, boolean skip) { + boolean be, boolean el, boolean skip) { while (in.hasNextLine()) { String ln = in.nextLine(); if (be) { @@ -154,9 +158,9 @@ boolean test = keys.contains(k); if (ifkey.group(GN_NOT) != null) test = !test; - buf.append(LNSEP); - if (!spp(in, buf, k, keys, vars, be, skip || !test)) { - spp(in, buf, k, keys, vars, be, skip || test); + if (el) buf.append(LNSEP); + if (!spp(in, buf, k, keys, vars, be, el, skip || !test)) { + spp(in, buf, k, keys, vars, be, el, skip || test); } continue; } @@ -164,14 +168,14 @@ if (!key.equals(elsekey.group(GN_KEY))) { throw new Error("Mis-matched #if-else-end at line <" + ln + ">"); } - buf.append(LNSEP); + if (el) buf.append(LNSEP); return false; } if (endkey.reset(ln).find()) { if (!key.equals(endkey.group(GN_KEY))) { throw new Error("Mis-matched #if-else-end at line <" + ln + ">"); } - buf.append(LNSEP); + if (el) buf.append(LNSEP); return true; } if (ln.startsWith("#warn")) { @@ -181,8 +185,9 @@ } if (!skip) { append(buf, ln, keys, vars); + if (!el) buf.append(LNSEP); } - buf.append(LNSEP); + if (el) buf.append(LNSEP); } return true; }
--- a/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java Tue Jan 26 09:11:58 2016 +0100 @@ -60,7 +60,7 @@ * @author Stephen Colebourne * @author Michael Nascimento Santos * - * @since 1.9 + * @since 9 */ class TzdbZoneRulesProvider {
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/CounterMode.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/CounterMode.java Tue Jan 26 09:11:58 2016 +0100 @@ -26,7 +26,9 @@ package com.sun.crypto.provider; import java.security.InvalidKeyException; +import java.util.Objects; +import jdk.internal.HotSpotIntrinsicCandidate; /** * This class represents ciphers in counter (CTR) mode. @@ -138,7 +140,7 @@ * <code>cipherOffset</code>. * * @param in the buffer with the input data to be encrypted - * @param inOffset the offset in <code>plain</code> + * @param inOff the offset in <code>plain</code> * @param len the length of the input data * @param out the buffer for the result * @param outOff the offset in <code>cipher</code> @@ -170,6 +172,15 @@ * are encrypted on demand. */ private int crypt(byte[] in, int inOff, int len, byte[] out, int outOff) { + + cryptBlockCheck(in, inOff, len); + cryptBlockCheck(out, outOff, len); + return implCrypt(in, inOff, len, out, outOff); + } + + // Implementation of crpyt() method. Possibly replaced with a compiler intrinsic. + @HotSpotIntrinsicCandidate + private int implCrypt(byte[] in, int inOff, int len, byte[] out, int outOff) { int result = len; while (len-- > 0) { if (used >= blockSize) { @@ -181,4 +192,23 @@ } return result; } + + // Used to perform all checks required by the Java semantics + // (i.e., null checks and bounds checks) on the input parameters to crypt(). + // Normally, the Java Runtime performs these checks, however, as crypt() is + // possibly replaced with compiler intrinsic, the JDK performs the + // required checks instead. + // Does not check accesses to class-internal (private) arrays. + private static void cryptBlockCheck(byte[] array, int offset, int len) { + Objects.requireNonNull(array); + + if (offset < 0 || len < 0 || offset >= array.length) { + throw new ArrayIndexOutOfBoundsException(offset); + } + + int largestIndex = offset + len - 1; + if (largestIndex < 0 || largestIndex >= array.length) { + throw new ArrayIndexOutOfBoundsException(largestIndex); + } + } }
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/PBES2Core.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/PBES2Core.java Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, 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 @@ -263,7 +263,7 @@ passwdChars[i] = (char) (passwdBytes[i] & 0x7f); PBEKeySpec pbeSpec = - new PBEKeySpec(passwdChars, salt, iCount, blkSize * 8); + new PBEKeySpec(passwdChars, salt, iCount, keyLength); // password char[] was cloned in PBEKeySpec constructor, // so we can zero it out here java.util.Arrays.fill(passwdChars, ' ');
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java Tue Jan 26 09:11:58 2016 +0100 @@ -76,11 +76,14 @@ "TlsRsaPremasterSecretGenerator must be initialized"); } - if (random == null) { - random = new SecureRandom(); + byte[] b = spec.getEncodedSecret(); + if (b == null) { + if (random == null) { + random = new SecureRandom(); + } + b = new byte[48]; + random.nextBytes(b); } - byte[] b = new byte[48]; - random.nextBytes(b); b[0] = (byte)spec.getMajorVersion(); b[1] = (byte)spec.getMinorVersion();
--- a/jdk/src/java.base/share/classes/java/io/InputStream.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/io/InputStream.java Tue Jan 26 09:11:58 2016 +0100 @@ -228,7 +228,7 @@ * allocated. For example, if an array larger than {@code 2GB} would * be required to store the bytes. * - * @since 1.9 + * @since 9 */ public byte[] readAllBytes() throws IOException { byte[] buf = new byte[DEFAULT_BUFFER_SIZE]; @@ -298,7 +298,7 @@ * @throws IndexOutOfBoundsException If {@code off} is negative, {@code len} * is negative, or {@code len} is greater than {@code b.length - off} * - * @since 1.9 + * @since 9 */ public int readNBytes(byte[] b, int off, int len) throws IOException { Objects.requireNonNull(b); @@ -514,7 +514,7 @@ * @throws IOException if an I/O error occurs when reading or writing * @throws NullPointerException if {@code out} is {@code null} * - * @since 1.9 + * @since 9 */ public long transferTo(OutputStream out) throws IOException { Objects.requireNonNull(out, "out");
--- a/jdk/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Tue Jan 26 09:11:58 2016 +0100 @@ -1526,7 +1526,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public IntStream chars() { @@ -1543,7 +1543,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public IntStream codePoints() {
--- a/jdk/src/java.base/share/classes/java/lang/Character.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/Character.java Tue Jan 26 09:11:58 2016 +0100 @@ -493,25 +493,25 @@ /** * Weak bidirectional character type "LRI" in the Unicode specification. - * @since 1.9 + * @since 9 */ public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE = 19; /** * Weak bidirectional character type "RLI" in the Unicode specification. - * @since 1.9 + * @since 9 */ public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE = 20; /** * Weak bidirectional character type "FSI" in the Unicode specification. - * @since 1.9 + * @since 9 */ public static final byte DIRECTIONALITY_FIRST_STRONG_ISOLATE = 21; /** * Weak bidirectional character type "PDI" in the Unicode specification. - * @since 1.9 + * @since 9 */ public static final byte DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE = 22; @@ -2590,7 +2590,7 @@ /** * Constant for the "Combining Diacritical Marks Extended" Unicode * character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED = new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_EXTENDED", @@ -2599,7 +2599,7 @@ /** * Constant for the "Myanmar Extended-B" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MYANMAR_EXTENDED_B = new UnicodeBlock("MYANMAR_EXTENDED_B", @@ -2608,7 +2608,7 @@ /** * Constant for the "Latin Extended-E" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock LATIN_EXTENDED_E = new UnicodeBlock("LATIN_EXTENDED_E", @@ -2617,7 +2617,7 @@ /** * Constant for the "Coptic Epact Numbers" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock COPTIC_EPACT_NUMBERS = new UnicodeBlock("COPTIC_EPACT_NUMBERS", @@ -2626,7 +2626,7 @@ /** * Constant for the "Old Permic" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock OLD_PERMIC = new UnicodeBlock("OLD_PERMIC", @@ -2635,14 +2635,14 @@ /** * Constant for the "Elbasan" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock ELBASAN = new UnicodeBlock("ELBASAN"); /** * Constant for the "Caucasian Albanian" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock CAUCASIAN_ALBANIAN = new UnicodeBlock("CAUCASIAN_ALBANIAN", @@ -2651,7 +2651,7 @@ /** * Constant for the "Linear A" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock LINEAR_A = new UnicodeBlock("LINEAR_A", @@ -2660,21 +2660,21 @@ /** * Constant for the "Palmyrene" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock PALMYRENE = new UnicodeBlock("PALMYRENE"); /** * Constant for the "Nabataean" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock NABATAEAN = new UnicodeBlock("NABATAEAN"); /** * Constant for the "Old North Arabian" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock OLD_NORTH_ARABIAN = new UnicodeBlock("OLD_NORTH_ARABIAN", @@ -2683,14 +2683,14 @@ /** * Constant for the "Manichaean" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MANICHAEAN = new UnicodeBlock("MANICHAEAN"); /** * Constant for the "Psalter Pahlavi" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock PSALTER_PAHLAVI = new UnicodeBlock("PSALTER_PAHLAVI", @@ -2699,14 +2699,14 @@ /** * Constant for the "Mahajani" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MAHAJANI = new UnicodeBlock("MAHAJANI"); /** * Constant for the "Sinhala Archaic Numbers" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock SINHALA_ARCHAIC_NUMBERS = new UnicodeBlock("SINHALA_ARCHAIC_NUMBERS", @@ -2715,49 +2715,49 @@ /** * Constant for the "Khojki" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock KHOJKI = new UnicodeBlock("KHOJKI"); /** * Constant for the "Khudawadi" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock KHUDAWADI = new UnicodeBlock("KHUDAWADI"); /** * Constant for the "Grantha" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock GRANTHA = new UnicodeBlock("GRANTHA"); /** * Constant for the "Tirhuta" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock TIRHUTA = new UnicodeBlock("TIRHUTA"); /** * Constant for the "Siddham" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock SIDDHAM = new UnicodeBlock("SIDDHAM"); /** * Constant for the "Modi" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MODI = new UnicodeBlock("MODI"); /** * Constant for the "Warang Citi" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock WARANG_CITI = new UnicodeBlock("WARANG_CITI", @@ -2766,7 +2766,7 @@ /** * Constant for the "Pau Cin Hau" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock PAU_CIN_HAU = new UnicodeBlock("PAU_CIN_HAU", @@ -2775,14 +2775,14 @@ /** * Constant for the "Mro" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MRO = new UnicodeBlock("MRO"); /** * Constant for the "Bassa Vah" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock BASSA_VAH = new UnicodeBlock("BASSA_VAH", @@ -2791,7 +2791,7 @@ /** * Constant for the "Pahawh Hmong" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock PAHAWH_HMONG = new UnicodeBlock("PAHAWH_HMONG", @@ -2800,14 +2800,14 @@ /** * Constant for the "Duployan" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock DUPLOYAN = new UnicodeBlock("DUPLOYAN"); /** * Constant for the "Shorthand Format Controls" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock SHORTHAND_FORMAT_CONTROLS = new UnicodeBlock("SHORTHAND_FORMAT_CONTROLS", @@ -2816,7 +2816,7 @@ /** * Constant for the "Mende Kikakui" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MENDE_KIKAKUI = new UnicodeBlock("MENDE_KIKAKUI", @@ -2825,7 +2825,7 @@ /** * Constant for the "Ornamental Dingbats" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock ORNAMENTAL_DINGBATS = new UnicodeBlock("ORNAMENTAL_DINGBATS", @@ -2834,7 +2834,7 @@ /** * Constant for the "Geometric Shapes Extended" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock GEOMETRIC_SHAPES_EXTENDED = new UnicodeBlock("GEOMETRIC_SHAPES_EXTENDED", @@ -2843,7 +2843,7 @@ /** * Constant for the "Supplemental Arrows-C" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock SUPPLEMENTAL_ARROWS_C = new UnicodeBlock("SUPPLEMENTAL_ARROWS_C", @@ -2852,7 +2852,7 @@ /** * Constant for the "Cherokee Supplement" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock CHEROKEE_SUPPLEMENT = new UnicodeBlock("CHEROKEE_SUPPLEMENT", @@ -2861,14 +2861,14 @@ /** * Constant for the "Hatran" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock HATRAN = new UnicodeBlock("HATRAN"); /** * Constant for the "Old Hungarian" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock OLD_HUNGARIAN = new UnicodeBlock("OLD_HUNGARIAN", @@ -2877,21 +2877,21 @@ /** * Constant for the "Multani" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock MULTANI = new UnicodeBlock("MULTANI"); /** * Constant for the "Ahom" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock AHOM = new UnicodeBlock("AHOM"); /** * Constant for the "Early Dynastic Cuneiform" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock EARLY_DYNASTIC_CUNEIFORM = new UnicodeBlock("EARLY_DYNASTIC_CUNEIFORM", @@ -2900,7 +2900,7 @@ /** * Constant for the "Anatolian Hieroglyphs" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock ANATOLIAN_HIEROGLYPHS = new UnicodeBlock("ANATOLIAN_HIEROGLYPHS", @@ -2909,7 +2909,7 @@ /** * Constant for the "Sutton SignWriting" Unicode character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock SUTTON_SIGNWRITING = new UnicodeBlock("SUTTON_SIGNWRITING", @@ -2919,7 +2919,7 @@ /** * Constant for the "Supplemental Symbols and Pictographs" Unicode * character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS = new UnicodeBlock("SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS", @@ -2929,7 +2929,7 @@ /** * Constant for the "CJK Unified Ideographs Extension E" Unicode * character block. - * @since 1.9 + * @since 9 */ public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E = new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E", @@ -4189,175 +4189,175 @@ /** * Unicode script "Caucasian Albanian". - * @since 1.9 + * @since 9 */ CAUCASIAN_ALBANIAN, /** * Unicode script "Bassa Vah". - * @since 1.9 + * @since 9 */ BASSA_VAH, /** * Unicode script "Duployan". - * @since 1.9 + * @since 9 */ DUPLOYAN, /** * Unicode script "Elbasan". - * @since 1.9 + * @since 9 */ ELBASAN, /** * Unicode script "Grantha". - * @since 1.9 + * @since 9 */ GRANTHA, /** * Unicode script "Pahawh Hmong". - * @since 1.9 + * @since 9 */ PAHAWH_HMONG, /** * Unicode script "Khojki". - * @since 1.9 + * @since 9 */ KHOJKI, /** * Unicode script "Linear A". - * @since 1.9 + * @since 9 */ LINEAR_A, /** * Unicode script "Mahajani". - * @since 1.9 + * @since 9 */ MAHAJANI, /** * Unicode script "Manichaean". - * @since 1.9 + * @since 9 */ MANICHAEAN, /** * Unicode script "Mende Kikakui". - * @since 1.9 + * @since 9 */ MENDE_KIKAKUI, /** * Unicode script "Modi". - * @since 1.9 + * @since 9 */ MODI, /** * Unicode script "Mro". - * @since 1.9 + * @since 9 */ MRO, /** * Unicode script "Old North Arabian". - * @since 1.9 + * @since 9 */ OLD_NORTH_ARABIAN, /** * Unicode script "Nabataean". - * @since 1.9 + * @since 9 */ NABATAEAN, /** * Unicode script "Palmyrene". - * @since 1.9 + * @since 9 */ PALMYRENE, /** * Unicode script "Pau Cin Hau". - * @since 1.9 + * @since 9 */ PAU_CIN_HAU, /** * Unicode script "Old Permic". - * @since 1.9 + * @since 9 */ OLD_PERMIC, /** * Unicode script "Psalter Pahlavi". - * @since 1.9 + * @since 9 */ PSALTER_PAHLAVI, /** * Unicode script "Siddham". - * @since 1.9 + * @since 9 */ SIDDHAM, /** * Unicode script "Khudawadi". - * @since 1.9 + * @since 9 */ KHUDAWADI, /** * Unicode script "Tirhuta". - * @since 1.9 + * @since 9 */ TIRHUTA, /** * Unicode script "Warang Citi". - * @since 1.9 + * @since 9 */ WARANG_CITI, /** * Unicode script "Ahom". - * @since 1.9 + * @since 9 */ AHOM, /** * Unicode script "Anatolian Hieroglyphs". - * @since 1.9 + * @since 9 */ ANATOLIAN_HIEROGLYPHS, /** * Unicode script "Hatran". - * @since 1.9 + * @since 9 */ HATRAN, /** * Unicode script "Multani". - * @since 1.9 + * @since 9 */ MULTANI, /** * Unicode script "Old Hungarian". - * @since 1.9 + * @since 9 */ OLD_HUNGARIAN, /** * Unicode script "SignWriting". - * @since 1.9 + * @since 9 */ SIGNWRITING,
--- a/jdk/src/java.base/share/classes/java/lang/Integer.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/Integer.java Tue Jan 26 09:11:58 2016 +0100 @@ -716,7 +716,7 @@ * {@code radix}, or if {@code radix} is either smaller than * {@link java.lang.Character#MIN_RADIX} or larger than * {@link java.lang.Character#MAX_RADIX}. - * @since 1.9 + * @since 9 */ public static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException { @@ -899,7 +899,7 @@ * {@code radix}, or if {@code radix} is either smaller than * {@link java.lang.Character#MIN_RADIX} or larger than * {@link java.lang.Character#MAX_RADIX}. - * @since 1.9 + * @since 9 */ public static int parseUnsignedInt(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException {
--- a/jdk/src/java.base/share/classes/java/lang/Long.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/Long.java Tue Jan 26 09:11:58 2016 +0100 @@ -747,7 +747,7 @@ * {@code radix}, or if {@code radix} is either smaller than * {@link java.lang.Character#MIN_RADIX} or larger than * {@link java.lang.Character#MAX_RADIX}. - * @since 1.9 + * @since 9 */ public static long parseLong(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException { @@ -993,7 +993,7 @@ * {@code radix}, or if {@code radix} is either smaller than * {@link java.lang.Character#MIN_RADIX} or larger than * {@link java.lang.Character#MAX_RADIX}. - * @since 1.9 + * @since 9 */ public static long parseUnsignedLong(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException {
--- a/jdk/src/java.base/share/classes/java/lang/Process.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/Process.java Tue Jan 26 09:11:58 2016 +0100 @@ -304,7 +304,7 @@ * otherwise, {@link #destroy} forcibly terminates the process * @throws UnsupportedOperationException if the Process implementation * does not support this operation - * @since 1.9 + * @since 9 */ public boolean supportsNormalTermination() { throw new UnsupportedOperationException(this.getClass() @@ -340,7 +340,7 @@ * @return the native process id of the process * @throws UnsupportedOperationException if the Process implementation * does not support this operation - * @since 1.9 + * @since 9 */ public long getPid() { return toHandle().getPid(); @@ -409,7 +409,7 @@ * * @return a new {@code CompletableFuture<Process>} for the Process * - * @since 1.9 + * @since 9 */ public CompletableFuture<Process> onExit() { return CompletableFuture.supplyAsync(this::waitForInternal); @@ -471,7 +471,7 @@ * does not support this operation * @throws SecurityException if a security manager has been installed and * it denies RuntimePermission("manageProcess") - * @since 1.9 + * @since 9 */ public ProcessHandle toHandle() { throw new UnsupportedOperationException(this.getClass() @@ -491,7 +491,7 @@ * @return a snapshot of information about the process, always non-null * @throws UnsupportedOperationException if the Process implementation * does not support this operation - * @since 1.9 + * @since 9 */ public ProcessHandle.Info info() { return toHandle().info(); @@ -516,7 +516,7 @@ * does not support this operation * @throws SecurityException if a security manager has been installed and * it denies RuntimePermission("manageProcess") - * @since 1.9 + * @since 9 */ public Stream<ProcessHandle> children() { return toHandle().children(); @@ -542,7 +542,7 @@ * does not support this operation * @throws SecurityException if a security manager has been installed and * it denies RuntimePermission("manageProcess") - * @since 1.9 + * @since 9 */ public Stream<ProcessHandle> descendants() { return toHandle().descendants();
--- a/jdk/src/java.base/share/classes/java/lang/ProcessHandle.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/ProcessHandle.java Tue Jan 26 09:11:58 2016 +0100 @@ -89,7 +89,7 @@ * {@link #compareTo(ProcessHandle) compareTo} methods to compare ProcessHandles. * * @see Process - * @since 1.9 + * @since 9 */ public interface ProcessHandle extends Comparable<ProcessHandle> { @@ -215,7 +215,7 @@ * by the operating system privileges of the process making the request. * The return types are {@code Optional<T>} allowing explicit tests * and actions if the value is available. - * @since 1.9 + * @since 9 */ public interface Info { /**
--- a/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java Tue Jan 26 09:11:58 2016 +0100 @@ -50,7 +50,7 @@ * ProcessHandleImpl is the implementation of ProcessHandle. * * @see Process - * @since 1.9 + * @since 9 */ final class ProcessHandleImpl implements ProcessHandle { /** @@ -338,7 +338,7 @@ * * @return {@code true} if the process represented by this * {@code ProcessHandle} object has not yet terminated. - * @since 1.9 + * @since 9 */ @Override public boolean isAlive() {
--- a/jdk/src/java.base/share/classes/java/lang/StackWalker.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/StackWalker.java Tue Jan 26 09:11:58 2016 +0100 @@ -81,7 +81,7 @@ * will cause a {@link NullPointerException NullPointerException} * to be thrown. * - * @since 1.9 + * @since 9 */ public final class StackWalker { /** @@ -92,7 +92,7 @@ * by the {@linkplain Option stack walking options} of a {@linkplain * StackWalker stack walker}. * - * @since 1.9 + * @since 9 * @jvms 2.6 */ public static interface StackFrame { @@ -185,7 +185,7 @@ * Stack walker option to configure the {@linkplain StackFrame stack frame} * information obtained by a {@code StackWalker}. * - * @since 1.9 + * @since 9 */ public enum Option { /**
--- a/jdk/src/java.base/share/classes/java/lang/String.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/String.java Tue Jan 26 09:11:58 2016 +0100 @@ -2674,7 +2674,7 @@ * point</a> is passed through uninterpreted. * * @return an IntStream of char values from this sequence - * @since 1.9 + * @since 9 */ @Override public IntStream chars() { @@ -2694,7 +2694,7 @@ * {@code int} values which are then passed to the stream. * * @return an IntStream of Unicode code points from this sequence - * @since 1.9 + * @since 9 */ @Override public IntStream codePoints() {
--- a/jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,25 +25,25 @@ package java.lang.invoke; -import static jdk.internal.org.objectweb.asm.Opcodes.*; -import static java.lang.invoke.LambdaForm.*; -import static java.lang.invoke.LambdaForm.BasicType.*; -import static java.lang.invoke.MethodHandleStatics.*; +import jdk.internal.vm.annotation.Stable; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.FieldVisitor; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import sun.invoke.util.ValueConversions; +import sun.invoke.util.Wrapper; import java.lang.invoke.LambdaForm.NamedFunction; import java.lang.invoke.MethodHandles.Lookup; import java.lang.reflect.Field; import java.util.Arrays; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.function.Function; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.ConcurrentHashMap; -import jdk.internal.org.objectweb.asm.FieldVisitor; -import sun.invoke.util.ValueConversions; -import sun.invoke.util.Wrapper; - -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.internal.org.objectweb.asm.MethodVisitor; +import static java.lang.invoke.LambdaForm.BasicType; +import static java.lang.invoke.LambdaForm.BasicType.*; +import static java.lang.invoke.MethodHandleStatics.*; +import static jdk.internal.org.objectweb.asm.Opcodes.*; /** * The flavor of method handle which emulates an invoke instruction @@ -459,7 +459,7 @@ static final String BMH_SIG = "L"+BMH+";"; static final String SPECIES_DATA = "java/lang/invoke/BoundMethodHandle$SpeciesData"; static final String SPECIES_DATA_SIG = "L"+SPECIES_DATA+";"; - static final String STABLE_SIG = "Ljava/lang/invoke/Stable;"; + static final String STABLE_SIG = "Ljdk/internal/vm/annotation/Stable;"; static final String SPECIES_PREFIX_NAME = "Species_"; static final String SPECIES_PREFIX_PATH = BMH + "$" + SPECIES_PREFIX_NAME;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Tue Jan 26 09:11:58 2016 +0100 @@ -26,19 +26,23 @@ package java.lang.invoke; import jdk.internal.misc.Unsafe; +import jdk.internal.vm.annotation.ForceInline; +import sun.invoke.util.ValueConversions; +import sun.invoke.util.VerifyAccess; +import sun.invoke.util.VerifyType; +import sun.invoke.util.Wrapper; + +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; -import sun.invoke.util.VerifyAccess; +import java.util.Objects; + +import static java.lang.invoke.LambdaForm.*; import static java.lang.invoke.MethodHandleNatives.Constants.*; -import static java.lang.invoke.LambdaForm.*; +import static java.lang.invoke.MethodHandleStatics.UNSAFE; +import static java.lang.invoke.MethodHandleStatics.newInternalError; import static java.lang.invoke.MethodTypeForm.*; -import static java.lang.invoke.MethodHandleStatics.*; -import java.lang.ref.WeakReference; -import java.lang.reflect.Field; -import java.util.Objects; -import sun.invoke.util.ValueConversions; -import sun.invoke.util.VerifyType; -import sun.invoke.util.Wrapper; /** * The flavor of method handle which implements a constant reference
--- a/jdk/src/java.base/share/classes/java/lang/invoke/DontInline.java Mon Jan 25 14:09:28 2016 -1000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2012, 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. - */ - -package java.lang.invoke; - -import java.lang.annotation.*; - -/** - * Internal marker for some methods in the JSR 292 implementation. - */ -/*non-public*/ -@Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) -@Retention(RetentionPolicy.RUNTIME) -@interface DontInline { -}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/ForceInline.java Mon Jan 25 14:09:28 2016 -1000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2012, 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. - */ - -package java.lang.invoke; - -import java.lang.annotation.*; - -/** - * Internal marker for some methods in the JSR 292 implementation. - */ -/*non-public*/ -@Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) -@Retention(RetentionPolicy.RUNTIME) -@interface ForceInline { -}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Jan 26 09:11:58 2016 +0100 @@ -625,9 +625,9 @@ if (lambdaForm.forceInline) { // Force inlining of this invoker method. - mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true); + mv.visitAnnotation("Ljdk/internal/vm/annotation/ForceInline;", true); } else { - mv.visitAnnotation("Ljava/lang/invoke/DontInline;", true); + mv.visitAnnotation("Ljdk/internal/vm/annotation/DontInline;", true); } if (lambdaForm.customized != null) { @@ -1309,7 +1309,7 @@ mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true); // Don't inline the interpreter entry. - mv.visitAnnotation("Ljava/lang/invoke/DontInline;", true); + mv.visitAnnotation("Ljdk/internal/vm/annotation/DontInline;", true); // create parameter array emitIconstInsn(invokerType.parameterCount()); @@ -1368,7 +1368,7 @@ mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true); // Force inlining of this invoker method. - mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true); + mv.visitAnnotation("Ljdk/internal/vm/annotation/ForceInline;", true); // Load receiver emitAloadInsn(0);
--- a/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,6 +25,10 @@ package java.lang.invoke; +import jdk.internal.vm.annotation.DontInline; +import jdk.internal.vm.annotation.ForceInline; +import jdk.internal.vm.annotation.Stable; + import java.lang.reflect.Array; import java.util.Arrays;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,18 +25,24 @@ package java.lang.invoke; -import java.lang.annotation.*; +import jdk.internal.vm.annotation.DontInline; +import jdk.internal.vm.annotation.Stable; +import sun.invoke.util.Wrapper; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.List; import java.util.Arrays; import java.util.HashMap; - -import sun.invoke.util.Wrapper; -import java.lang.reflect.Field; +import java.util.List; import static java.lang.invoke.LambdaForm.BasicType.*; -import static java.lang.invoke.MethodHandleStatics.*; -import static java.lang.invoke.MethodHandleNatives.Constants.*; +import static java.lang.invoke.MethodHandleNatives.Constants.REF_invokeStatic; +import static java.lang.invoke.MethodHandleStatics.debugEnabled; +import static java.lang.invoke.MethodHandleStatics.newInternalError; /** * The symbolic, non-executable form of a method handle's invocation semantics.
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Jan 26 09:11:58 2016 +0100 @@ -33,6 +33,7 @@ import java.util.List; import java.util.function.Function; +import jdk.internal.vm.annotation.Stable; import sun.invoke.empty.Empty; import sun.invoke.util.ValueConversions; import sun.invoke.util.VerifyType; @@ -1487,7 +1488,7 @@ } private static final int LEFT_ARGS = FILL_ARRAYS_COUNT - 1; - private static final @Stable MethodHandle[] FILL_ARRAY_TO_RIGHT = new MethodHandle[MAX_ARITY+1]; + private static final @Stable MethodHandle[] FILL_ARRAY_TO_RIGHT = new MethodHandle[MAX_ARITY + 1]; /** fill_array_to_right(N).invoke(a, argL..arg[N-1]) * fills a[L]..a[N-1] with corresponding arguments, * and then returns a. The value L is a global constant (LEFT_ARGS).
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodType.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodType.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,6 +25,7 @@ package java.lang.invoke; +import jdk.internal.vm.annotation.Stable; import sun.invoke.util.Wrapper; import java.lang.ref.WeakReference; import java.lang.ref.Reference;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,6 +25,7 @@ package java.lang.invoke; +import jdk.internal.vm.annotation.Stable; import sun.invoke.util.Wrapper; import java.lang.ref.SoftReference; import static java.lang.invoke.MethodHandleStatics.*;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/Stable.java Mon Jan 25 14:09:28 2016 -1000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2012, 2013, 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. - */ - -package java.lang.invoke; - -import java.lang.annotation.*; - -/** - * A field may be annotated as stable if all of its component variables - * changes value at most once. - * A field's value counts as its component value. - * If the field is typed as an array, then all the non-null components - * of the array, of depth up to the rank of the field's array type, - * also count as component values. - * By extension, any variable (either array or field) which has annotated - * as stable is called a stable variable, and its non-null or non-zero - * value is called a stable value. - * <p> - * Since all fields begin with a default value of null for references - * (resp., zero for primitives), it follows that this annotation indicates - * that the first non-null (resp., non-zero) value stored in the field - * will never be changed. - * <p> - * If the field is not of an array type, there are no array elements, - * then the value indicated as stable is simply the value of the field. - * If the dynamic type of the field value is an array but the static type - * is not, the components of the array are <em>not</em> regarded as stable. - * <p> - * If the field is an array type, then both the field value and - * all the components of the field value (if the field value is non-null) - * are indicated to be stable. - * If the field type is an array type with rank {@code N > 1}, - * then each component of the field value (if the field value is non-null), - * is regarded as a stable array of rank {@code N-1}. - * <p> - * Fields which are declared {@code final} may also be annotated as stable. - * Since final fields already behave as stable values, such an annotation - * indicates no additional information, unless the type of the field is - * an array type. - * <p> - * It is (currently) undefined what happens if a field annotated as stable - * is given a third value. In practice, if the JVM relies on this annotation - * to promote a field reference to a constant, it may be that the Java memory - * model would appear to be broken, if such a constant (the second value of the field) - * is used as the value of the field even after the field value has changed. - */ -/* package-private */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@interface Stable { -}
--- a/jdk/src/java.base/share/classes/java/lang/ref/PhantomReference.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/ref/PhantomReference.java Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,23 +29,20 @@ /** * Phantom reference objects, which are enqueued after the collector * determines that their referents may otherwise be reclaimed. Phantom - * references are most often used for scheduling pre-mortem cleanup actions in - * a more flexible way than is possible with the Java finalization mechanism. + * references are most often used to schedule post-mortem cleanup actions. * - * <p> If the garbage collector determines at a certain point in time that the - * referent of a phantom reference is <a - * href="package-summary.html#reachability">phantom reachable</a>, then at that - * time or at some later time it will enqueue the reference. + * <p> Suppose the garbage collector determines at a certain point in time + * that an object is <a href="package-summary.html#reachability"> + * phantom reachable</a>. At that time it will atomically clear + * all phantom references to that object and all phantom references to + * any other phantom-reachable objects from which that object is reachable. + * At the same time or at some later time it will enqueue those newly-cleared + * phantom references that are registered with reference queues. * * <p> In order to ensure that a reclaimable object remains so, the referent of * a phantom reference may not be retrieved: The {@code get} method of a * phantom reference always returns {@code null}. * - * <p> Unlike soft and weak references, phantom references are not - * automatically cleared by the garbage collector as they are enqueued. An - * object that is reachable via phantom references will remain so until all - * such references are cleared or themselves become unreachable. - * * @author Mark Reinhold * @since 1.2 */ @@ -69,8 +66,8 @@ * * <p> It is possible to create a phantom reference with a {@code null} * queue, but such a reference is completely useless: Its {@code get} - * method will always return null and, since it does not have a queue, it - * will never be enqueued. + * method will always return {@code null} and, since it does not have a queue, + * it will never be enqueued. * * @param referent the object the new phantom reference will refer to * @param q the queue with which the reference is to be registered,
--- a/jdk/src/java.base/share/classes/java/lang/ref/Reference.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/ref/Reference.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,6 +25,7 @@ package java.lang.ref; +import jdk.internal.vm.annotation.DontInline; import sun.misc.Cleaner; import jdk.internal.HotSpotIntrinsicCandidate; import jdk.internal.misc.JavaLangRefAccess; @@ -310,4 +311,120 @@ this.queue = (queue == null) ? ReferenceQueue.NULL : queue; } + /** + * Ensures that the object referenced by the given reference remains + * <a href="package-summary.html#reachability"><em>strongly reachable</em></a>, + * regardless of any prior actions of the program that might otherwise cause + * the object to become unreachable; thus, the referenced object is not + * reclaimable by garbage collection at least until after the invocation of + * this method. Invocation of this method does not itself initiate garbage + * collection or finalization. + * + * <p> This method establishes an ordering for + * <a href="package-summary.html#reachability"><em>strong reachability</em></a> + * with respect to garbage collection. It controls relations that are + * otherwise only implicit in a program -- the reachability conditions + * triggering garbage collection. This method is designed for use in + * uncommon situations of premature finalization where using + * {@code synchronized} blocks or methods, or using other synchronization + * facilities are not possible or do not provide the desired control. This + * method is applicable only when reclamation may have visible effects, + * which is possible for objects with finalizers (See + * <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.6"> + * Section 12.6 17 of <cite>The Java™ Language Specification</cite></a>) + * that are implemented in ways that rely on ordering control for correctness. + * + * @apiNote + * Finalization may occur whenever the virtual machine detects that no + * reference to an object will ever be stored in the heap: The garbage + * collector may reclaim an object even if the fields of that object are + * still in use, so long as the object has otherwise become unreachable. + * This may have surprising and undesirable effects in cases such as the + * following example in which the bookkeeping associated with a class is + * managed through array indices. Here, method {@code action} uses a + * {@code reachabilityFence} to ensure that the {@code Resource} object is + * not reclaimed before bookkeeping on an associated + * {@code ExternalResource} has been performed; in particular here, to + * ensure that the array slot holding the {@code ExternalResource} is not + * nulled out in method {@link Object#finalize}, which may otherwise run + * concurrently. + * + * <pre> {@code + * class Resource { + * private static ExternalResource[] externalResourceArray = ... + * + * int myIndex; + * Resource(...) { + * myIndex = ... + * externalResourceArray[myIndex] = ...; + * ... + * } + * protected void finalize() { + * externalResourceArray[myIndex] = null; + * ... + * } + * public void action() { + * try { + * // ... + * int i = myIndex; + * Resource.update(externalResourceArray[i]); + * } finally { + * Reference.reachabilityFence(this); + * } + * } + * private static void update(ExternalResource ext) { + * ext.status = ...; + * } + * }}</pre> + * + * Here, the invocation of {@code reachabilityFence} is nonintuitively + * placed <em>after</em> the call to {@code update}, to ensure that the + * array slot is not nulled out by {@link Object#finalize} before the + * update, even if the call to {@code action} was the last use of this + * object. This might be the case if, for example a usage in a user program + * had the form {@code new Resource().action();} which retains no other + * reference to this {@code Resource}. While probably overkill here, + * {@code reachabilityFence} is placed in a {@code finally} block to ensure + * that it is invoked across all paths in the method. In a method with more + * complex control paths, you might need further precautions to ensure that + * {@code reachabilityFence} is encountered along all of them. + * + * <p> It is sometimes possible to better encapsulate use of + * {@code reachabilityFence}. Continuing the above example, if it were + * acceptable for the call to method {@code update} to proceed even if the + * finalizer had already executed (nulling out slot), then you could + * localize use of {@code reachabilityFence}: + * + * <pre> {@code + * public void action2() { + * // ... + * Resource.update(getExternalResource()); + * } + * private ExternalResource getExternalResource() { + * ExternalResource ext = externalResourceArray[myIndex]; + * Reference.reachabilityFence(this); + * return ext; + * }}</pre> + * + * <p> Method {@code reachabilityFence} is not required in constructions + * that themselves ensure reachability. For example, because objects that + * are locked cannot, in general, be reclaimed, it would suffice if all + * accesses of the object, in all methods of class {@code Resource} + * (including {@code finalize}) were enclosed in {@code synchronized (this)} + * blocks. (Further, such blocks must not include infinite loops, or + * themselves be unreachable, which fall into the corner case exceptions to + * the "in general" disclaimer.) However, method {@code reachabilityFence} + * remains a better option in cases where this approach is not as efficient, + * desirable, or possible; for example because it would encounter deadlock. + * + * @param ref the reference. If {@code null}, this method has no effect. + * @since 9 + */ + @DontInline + public static void reachabilityFence(Object ref) { + // Does nothing, because this method is annotated with @DontInline + // HotSpot needs to retain the ref and not GC it before a call to this + // method + } + }
--- a/jdk/src/java.base/share/classes/java/lang/ref/package-info.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/ref/package-info.java Tue Jan 26 09:11:58 2016 +0100 @@ -66,9 +66,9 @@ * object with a <em>reference queue</em> at the time the reference * object is created. Some time after the garbage collector * determines that the reachability of the referent has changed to the - * value corresponding to the type of the reference, it will add the - * reference to the associated queue. At this point, the reference is - * considered to be <em>enqueued</em>. The program may remove + * value corresponding to the type of the reference, it will clear the + * reference and add it to the associated queue. At this point, the + * reference is considered to be <em>enqueued</em>. The program may remove * references from a queue either by polling or by blocking until a * reference becomes available. Reference queues are implemented by * the {@link java.lang.ref.ReferenceQueue} class. @@ -94,16 +94,6 @@ * structure, this check will add little overhead to the hashtable * access methods. * - * <h3>Automatically-cleared references</h3> - * - * Soft and weak references are automatically cleared by the collector - * before being added to the queues with which they are registered, if - * any. Therefore soft and weak references need not be registered - * with a queue in order to be useful, while phantom references do. - * An object that is reachable via phantom references will remain so - * until all such references are cleared or themselves become - * unreachable. - * * <a name="reachability"></a> * <h3>Reachability</h3> *
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedArrayType.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedArrayType.java Tue Jan 26 09:11:58 2016 +0100 @@ -53,7 +53,7 @@ * * @return {@code null} * - * @since 1.9 + * @since 9 */ @Override AnnotatedType getAnnotatedOwnerType();
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedParameterizedType.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedParameterizedType.java Tue Jan 26 09:11:58 2016 +0100 @@ -59,7 +59,7 @@ * refers to a parameterized type that cannot be instantiated * for any reason * - * @since 1.9 + * @since 9 */ @Override AnnotatedType getAnnotatedOwnerType();
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedType.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedType.java Tue Jan 26 09:11:58 2016 +0100 @@ -60,7 +60,7 @@ * refers to a parameterized type that cannot be instantiated * for any reason * - * @since 1.9 + * @since 9 */ default AnnotatedType getAnnotatedOwnerType() { return null;
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedTypeVariable.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedTypeVariable.java Tue Jan 26 09:11:58 2016 +0100 @@ -54,7 +54,7 @@ * * @return {@code null} * - * @since 1.9 + * @since 9 */ @Override AnnotatedType getAnnotatedOwnerType();
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedWildcardType.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedWildcardType.java Tue Jan 26 09:11:58 2016 +0100 @@ -65,7 +65,7 @@ * * @return {@code null} * - * @since 1.9 + * @since 9 */ @Override AnnotatedType getAnnotatedOwnerType();
--- a/jdk/src/java.base/share/classes/java/math/BigInteger.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/math/BigInteger.java Tue Jan 26 09:11:58 2016 +0100 @@ -297,7 +297,7 @@ * @throws IndexOutOfBoundsException if the provided array offset and * length would cause an index into the byte array to be * negative or greater than or equal to the array length. - * @since 1.9 + * @since 9 */ public BigInteger(byte[] val, int off, int len) { if (val.length == 0) { @@ -385,7 +385,7 @@ * @throws IndexOutOfBoundsException if the provided array offset and * length would cause an index into the byte array to be * negative or greater than or equal to the array length. - * @since 1.9 + * @since 9 */ public BigInteger(int signum, byte[] magnitude, int off, int len) { if (signum < -1 || signum > 1) { @@ -2424,7 +2424,7 @@ * {@code (i * sqrt(-val))} where <i>i</i> is the * <i>imaginary unit</i> and is equal to * {@code sqrt(-1)}.) - * @since 1.9 + * @since 9 */ public BigInteger sqrt() { if (this.signum < 0) { @@ -2447,7 +2447,7 @@ * <i>imaginary unit</i> and is equal to * {@code sqrt(-1)}.) * @see #sqrt() - * @since 1.9 + * @since 9 */ public BigInteger[] sqrtAndRemainder() { BigInteger s = sqrt();
--- a/jdk/src/java.base/share/classes/java/math/MutableBigInteger.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/math/MutableBigInteger.java Tue Jan 26 09:11:58 2016 +0100 @@ -1878,7 +1878,7 @@ * @throws ArithmeticException if the value returned by {@code bitLength()} * overflows the range of {@code int}. * @return the integer square root of {@code this} - * @since 1.9 + * @since 9 */ MutableBigInteger sqrt() { // Special cases.
--- a/jdk/src/java.base/share/classes/java/net/DatagramSocket.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/DatagramSocket.java Tue Jan 26 09:11:58 2016 +0100 @@ -1338,7 +1338,7 @@ * * @throws NullPointerException if name is {@code null} * - * @since 1.9 + * @since 9 */ public <T> DatagramSocket setOption(SocketOption<T> name, T value) throws IOException @@ -1368,7 +1368,7 @@ * {@link java.net.StandardSocketOptions StandardSocketOptions} * do not require any security permission. * - * @since 1.9 + * @since 9 */ public <T> T getOption(SocketOption<T> name) throws IOException { return getImpl().getOption(name); @@ -1386,7 +1386,7 @@ * @return A set of the socket options supported by this socket. This set * may be empty if the socket's DatagramSocketImpl cannot be created. * - * @since 1.9 + * @since 9 */ public Set<SocketOption<?>> supportedOptions() { synchronized(DatagramSocket.class) {
--- a/jdk/src/java.base/share/classes/java/net/DatagramSocketImpl.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/DatagramSocketImpl.java Tue Jan 26 09:11:58 2016 +0100 @@ -278,7 +278,7 @@ * * @throws NullPointerException if name is {@code null} * @throws IOException if an I/O problem occurs while attempting to set the option - * @since 1.9 + * @since 9 */ protected <T> void setOption(SocketOption<T> name, T value) throws IOException { if (name == StandardSocketOptions.SO_SNDBUF) { @@ -319,7 +319,7 @@ * @throws NullPointerException if name is {@code null} * @throws IOException if an I/O problem occurs while attempting to set the option * - * @since 1.9 + * @since 9 */ @SuppressWarnings("unchecked") protected <T> T getOption(SocketOption<T> name) throws IOException {
--- a/jdk/src/java.base/share/classes/java/net/NetworkInterface.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/NetworkInterface.java Tue Jan 26 09:11:58 2016 +0100 @@ -130,7 +130,7 @@ * * @return a Stream object with all or a subset of the InetAddresses * bound to this network interface - * @since 1.9 + * @since 9 */ public Stream<InetAddress> inetAddresses() { return streamFromArray(getCheckedInetAddresses()); @@ -208,7 +208,7 @@ * * @return a Stream object with all of the subinterfaces * of this network interface - * @since 1.9 + * @since 9 */ public Stream<NetworkInterface> subInterfaces() { return streamFromArray(childs); @@ -362,7 +362,7 @@ * * @return a Stream of NetworkInterfaces found on this machine * @exception SocketException if an I/O error occurs. - * @since 1.9 + * @since 9 */ public static Stream<NetworkInterface> networkInterfaces() throws SocketException {
--- a/jdk/src/java.base/share/classes/java/net/ServerSocket.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/ServerSocket.java Tue Jan 26 09:11:58 2016 +0100 @@ -946,7 +946,7 @@ * {@link java.net.StandardSocketOptions StandardSocketOptions} * do not require any security permission. * - * @since 1.9 + * @since 9 */ public <T> ServerSocket setOption(SocketOption<T> name, T value) throws IOException @@ -976,7 +976,7 @@ * {@link java.net.StandardSocketOptions StandardSocketOptions} * do not require any security permission. * - * @since 1.9 + * @since 9 */ public <T> T getOption(SocketOption<T> name) throws IOException { return getImpl().getOption(name); @@ -994,7 +994,7 @@ * @return A set of the socket options supported by this socket. This set * may be empty if the socket's SocketImpl cannot be created. * - * @since 1.9 + * @since 9 */ public Set<SocketOption<?>> supportedOptions() { synchronized (ServerSocket.class) {
--- a/jdk/src/java.base/share/classes/java/net/Socket.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/Socket.java Tue Jan 26 09:11:58 2016 +0100 @@ -1756,7 +1756,7 @@ * {@link java.net.StandardSocketOptions StandardSocketOptions} * do not require any security permission. * - * @since 1.9 + * @since 9 */ public <T> Socket setOption(SocketOption<T> name, T value) throws IOException { getImpl().setOption(name, value); @@ -1784,7 +1784,7 @@ * {@link java.net.StandardSocketOptions StandardSocketOptions} * do not require any security permission. * - * @since 1.9 + * @since 9 */ @SuppressWarnings("unchecked") public <T> T getOption(SocketOption<T> name) throws IOException { @@ -1803,7 +1803,7 @@ * @return A set of the socket options supported by this socket. This set * may be empty if the socket's SocketImpl cannot be created. * - * @since 1.9 + * @since 9 */ public Set<SocketOption<?>> supportedOptions() { synchronized (Socket.class) {
--- a/jdk/src/java.base/share/classes/java/net/SocketImpl.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/SocketImpl.java Tue Jan 26 09:11:58 2016 +0100 @@ -373,7 +373,7 @@ * * @throws IOException if an I/O error occurs, or if the socket is closed. * - * @since 1.9 + * @since 9 */ protected <T> void setOption(SocketOption<T> name, T value) throws IOException { if (name == StandardSocketOptions.SO_KEEPALIVE && @@ -412,7 +412,7 @@ * * @throws IOException if an I/O error occurs, or if the socket is closed. * - * @since 1.9 + * @since 9 */ @SuppressWarnings("unchecked") protected <T> T getOption(SocketOption<T> name) throws IOException {
--- a/jdk/src/java.base/share/classes/java/net/URL.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/URL.java Tue Jan 26 09:11:58 2016 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2015, 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 @@ -31,6 +31,10 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Hashtable; +import java.io.InvalidObjectException; +import java.io.ObjectStreamException; +import java.io.ObjectStreamField; +import java.io.ObjectInputStream.GetField; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.ServiceConfigurationError; @@ -142,6 +146,7 @@ */ public final class URL implements java.io.Serializable { + static final String BUILTIN_HANDLERS_PREFIX = "sun.net.www.protocol"; static final long serialVersionUID = -7627629688361524110L; /** @@ -226,6 +231,8 @@ */ private int hashCode = -1; + private transient UrlDeserializedState tempState; + /** * Creates a {@code URL} object from the specified * {@code protocol}, {@code host}, {@code port} @@ -1354,6 +1361,31 @@ } /** + * @serialField protocol String + * + * @serialField host String + * + * @serialField port int + * + * @serialField authority String + * + * @serialField file String + * + * @serialField ref String + * + * @serialField hashCode int + * + */ + private static final ObjectStreamField[] serialPersistentFields = { + new ObjectStreamField("protocol", String.class), + new ObjectStreamField("host", String.class), + new ObjectStreamField("port", int.class), + new ObjectStreamField("authority", String.class), + new ObjectStreamField("file", String.class), + new ObjectStreamField("ref", String.class), + new ObjectStreamField("hashCode", int.class), }; + + /** * WriteObject is called to save the state of the URL to an * ObjectOutputStream. The handler is not saved since it is * specific to this system. @@ -1375,16 +1407,67 @@ * stream handler. */ private synchronized void readObject(java.io.ObjectInputStream s) - throws IOException, ClassNotFoundException - { - s.defaultReadObject(); // read the fields - if ((handler = getURLStreamHandler(protocol)) == null) { + throws IOException, ClassNotFoundException { + GetField gf = s.readFields(); + String protocol = (String)gf.get("protocol", null); + if (getURLStreamHandler(protocol) == null) { throw new IOException("unknown protocol: " + protocol); } + String host = (String)gf.get("host", null); + int port = gf.get("port", -1); + String authority = (String)gf.get("authority", null); + String file = (String)gf.get("file", null); + String ref = (String)gf.get("ref", null); + int hashCode = gf.get("hashCode", -1); + if (authority == null + && ((host != null && host.length() > 0) || port != -1)) { + if (host == null) + host = ""; + authority = (port == -1) ? host : host + ":" + port; + } + tempState = new UrlDeserializedState(protocol, host, port, authority, + file, ref, hashCode); + } + + /** + * Replaces the de-serialized object with an URL object. + * + * @return a newly created object from deserialized data + * + * @throws ObjectStreamException if a new object replacing this + * object could not be created + */ + + private Object readResolve() throws ObjectStreamException { + + URLStreamHandler handler = null; + // already been checked in readObject + handler = getURLStreamHandler(tempState.getProtocol()); + + URL replacementURL = null; + if (isBuiltinStreamHandler(handler.getClass().getName())) { + replacementURL = fabricateNewURL(); + } else { + replacementURL = setDeserializedFields(handler); + } + return replacementURL; + } + + private URL setDeserializedFields(URLStreamHandler handler) { + URL replacementURL; + String userInfo = null; + String protocol = tempState.getProtocol(); + String host = tempState.getHost(); + int port = tempState.getPort(); + String authority = tempState.getAuthority(); + String file = tempState.getFile(); + String ref = tempState.getRef(); + int hashCode = tempState.getHashCode(); + // Construct authority part - if (authority == null && - ((host != null && host.length() > 0) || port != -1)) { + if (authority == null + && ((host != null && host.length() > 0) || port != -1)) { if (host == null) host = ""; authority = (port == -1) ? host : host + ":" + port; @@ -1403,8 +1486,8 @@ } // Construct path and query part - path = null; - query = null; + String path = null; + String query = null; if (file != null) { // Fix: only do this if hierarchical? int q = file.lastIndexOf('?'); @@ -1414,6 +1497,67 @@ } else path = file; } + + if (port == -1) { + port = 0; + } + // Set the object fields. + this.protocol = protocol; + this.host = host; + this.port = port; + this.file = file; + this.authority = authority; + this.ref = ref; + this.hashCode = hashCode; + this.handler = handler; + this.query = query; + this.path = path; + this.userInfo = userInfo; + replacementURL = this; + return replacementURL; + } + + private URL fabricateNewURL() + throws InvalidObjectException { + // create URL string from deserialized object + URL replacementURL = null; + String urlString = tempState.reconstituteUrlString(); + + try { + replacementURL = new URL(urlString); + } catch (MalformedURLException mEx) { + resetState(); + InvalidObjectException invoEx = new InvalidObjectException( + "Malformed URL: " + urlString); + invoEx.initCause(mEx); + throw invoEx; + } + replacementURL.setSerializedHashCode(tempState.getHashCode()); + resetState(); + return replacementURL; + } + + private boolean isBuiltinStreamHandler(String handlerClassName) { + return (handlerClassName.startsWith(BUILTIN_HANDLERS_PREFIX)); + } + + private void resetState() { + this.protocol = null; + this.host = null; + this.port = -1; + this.file = null; + this.authority = null; + this.ref = null; + this.hashCode = -1; + this.handler = null; + this.query = null; + this.path = null; + this.userInfo = null; + this.tempState = null; + } + + private void setSerializedHashCode(int hc) { + this.hashCode = hc; } } @@ -1445,3 +1589,82 @@ return ref; } } + +final class UrlDeserializedState { + private final String protocol; + private final String host; + private final int port; + private final String authority; + private final String file; + private final String ref; + private final int hashCode; + + public UrlDeserializedState(String protocol, + String host, int port, + String authority, String file, + String ref, int hashCode) { + this.protocol = protocol; + this.host = host; + this.port = port; + this.authority = authority; + this.file = file; + this.ref = ref; + this.hashCode = hashCode; + } + + String getProtocol() { + return protocol; + } + + String getHost() { + return host; + } + + String getAuthority () { + return authority; + } + + int getPort() { + return port; + } + + String getFile () { + return file; + } + + String getRef () { + return ref; + } + + int getHashCode () { + return hashCode; + } + + String reconstituteUrlString() { + + // pre-compute length of StringBuffer + int len = protocol.length() + 1; + if (authority != null && authority.length() > 0) + len += 2 + authority.length(); + if (file != null) { + len += file.length(); + } + if (ref != null) + len += 1 + ref.length(); + StringBuilder result = new StringBuilder(len); + result.append(protocol); + result.append(":"); + if (authority != null && authority.length() > 0) { + result.append("//"); + result.append(authority); + } + if (file != null) { + result.append(file); + } + if (ref != null) { + result.append("#"); + result.append(ref); + } + return result.toString(); + } +}
--- a/jdk/src/java.base/share/classes/java/net/spi/URLStreamHandlerProvider.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/spi/URLStreamHandlerProvider.java Tue Jan 26 09:11:58 2016 +0100 @@ -44,7 +44,7 @@ * <p> URL stream handler providers are located at runtime, as specified in the * {@linkplain java.net.URL#URL(String,String,int,String) URL constructor}. * - * @since 1.9 + * @since 9 */ public abstract class URLStreamHandlerProvider implements URLStreamHandlerFactory
--- a/jdk/src/java.base/share/classes/java/net/spi/package-info.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/net/spi/package-info.java Tue Jan 26 09:11:58 2016 +0100 @@ -29,7 +29,7 @@ * <p> Only developers who are defining new URL stream handler providers * should need to make direct use of this package. * - * @since 1.9 + * @since 9 */ package java.net.spi;
--- a/jdk/src/java.base/share/classes/java/nio/MappedByteBuffer.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/nio/MappedByteBuffer.java Tue Jan 26 09:11:58 2016 +0100 @@ -213,7 +213,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer position(int newPosition) { @@ -223,7 +223,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer limit(int newLimit) { @@ -233,7 +233,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer mark() { @@ -243,7 +243,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer reset() { @@ -253,7 +253,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer clear() { @@ -263,7 +263,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer flip() { @@ -273,7 +273,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public final MappedByteBuffer rewind() {
--- a/jdk/src/java.base/share/classes/java/nio/X-Buffer.java.template Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/nio/X-Buffer.java.template Tue Jan 26 09:11:58 2016 +0100 @@ -1064,7 +1064,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public @@ -1078,7 +1078,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public @@ -1092,7 +1092,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public @@ -1106,7 +1106,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public @@ -1120,7 +1120,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public @@ -1134,7 +1134,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public @@ -1148,7 +1148,7 @@ /** * {@inheritDoc} - * @since 1.9 + * @since 9 */ @Override public
--- a/jdk/src/java.base/share/classes/java/security/KeyStore.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/security/KeyStore.java Tue Jan 26 09:11:58 2016 +0100 @@ -1666,7 +1666,7 @@ * * @see Provider * - * @since 1.9 + * @since 9 */ public static final KeyStore getInstance(File file, char[] password) throws KeyStoreException, IOException, NoSuchAlgorithmException, @@ -1722,7 +1722,7 @@ * * @see Provider * - * @since 1.9 + * @since 9 */ public static final KeyStore getInstance(File file, LoadStoreParameter param) throws KeyStoreException, IOException, @@ -2006,7 +2006,7 @@ * of either PasswordProtection or CallbackHandlerProtection; or * if file does not exist or does not refer to a normal file * - * @since 1.9 + * @since 9 */ public static Builder newInstance(File file, ProtectionParameter protection) {
--- a/jdk/src/java.base/share/classes/java/security/PermissionCollection.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/security/PermissionCollection.java Tue Jan 26 09:11:58 2016 +0100 @@ -144,7 +144,7 @@ * the enumeration returned from a call to {@link #elements()}. * * @return a stream of all the Permissions. - * @since 1.9 + * @since 9 */ public Stream<Permission> elementsAsStream() { int characteristics = isReadOnly()
--- a/jdk/src/java.base/share/classes/java/security/cert/URICertStoreParameters.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/security/cert/URICertStoreParameters.java Tue Jan 26 09:11:58 2016 +0100 @@ -43,7 +43,7 @@ * provide the necessary locking. Multiple threads each manipulating * separate objects need not synchronize. * - * @since 1.9 + * @since 9 * @see CertStore * @see java.net.URI */
--- a/jdk/src/java.base/share/classes/java/security/spec/EncodedKeySpec.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/security/spec/EncodedKeySpec.java Tue Jan 26 09:11:58 2016 +0100 @@ -74,7 +74,7 @@ * or {@code algorithm} is null. * @throws IllegalArgumentException if {@code algorithm} is * the empty string {@code ""} - * @since 1.9 + * @since 9 */ protected EncodedKeySpec(byte[] encodedKey, String algorithm) { if (algorithm == null) { @@ -93,7 +93,7 @@ * Returns the name of the algorithm of the encoded key. * * @return the name of the algorithm, or null if not specified - * @since 1.9 + * @since 9 */ public String getAlgorithm() { return algorithmName;
--- a/jdk/src/java.base/share/classes/java/security/spec/PKCS8EncodedKeySpec.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/security/spec/PKCS8EncodedKeySpec.java Tue Jan 26 09:11:58 2016 +0100 @@ -92,7 +92,7 @@ * or {@code algorithm} is null. * @throws IllegalArgumentException if {@code algorithm} is * the empty string {@code ""} - * @since 1.9 + * @since 9 */ public PKCS8EncodedKeySpec(byte[] encodedKey, String algorithm) { super(encodedKey, algorithm);
--- a/jdk/src/java.base/share/classes/java/security/spec/X509EncodedKeySpec.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/security/spec/X509EncodedKeySpec.java Tue Jan 26 09:11:58 2016 +0100 @@ -82,7 +82,7 @@ * or {@code algorithm} is null. * @throws IllegalArgumentException if {@code algorithm} is * the empty string {@code ""} - * @since 1.9 + * @since 9 */ public X509EncodedKeySpec(byte[] encodedKey, String algorithm) { super(encodedKey, algorithm);
--- a/jdk/src/java.base/share/classes/java/util/ArrayList.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/ArrayList.java Tue Jan 26 09:11:58 2016 +0100 @@ -207,39 +207,19 @@ * necessary, to ensure that it can hold at least the number of elements * specified by the minimum capacity argument. * - * @param minCapacity the desired minimum capacity + * @param minCapacity the desired minimum capacity */ public void ensureCapacity(int minCapacity) { - int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) - // any size if not default element table - ? 0 - // larger than default for default empty table. It's already - // supposed to be at default size. - : DEFAULT_CAPACITY; - - if (minCapacity > minExpand) { - ensureExplicitCapacity(minCapacity); + if (minCapacity > elementData.length + && !(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA + && minCapacity <= DEFAULT_CAPACITY)) { + modCount++; + grow(minCapacity); } } - private void ensureCapacityInternal(int minCapacity) { - if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { - minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); - } - - ensureExplicitCapacity(minCapacity); - } - - private void ensureExplicitCapacity(int minCapacity) { - modCount++; - - // overflow-conscious code - if (minCapacity - elementData.length > 0) - grow(minCapacity); - } - /** - * The maximum size of array to allocate. + * The maximum size of array to allocate (unless necessary). * Some VMs reserve some header words in an array. * Attempts to allocate larger arrays may result in * OutOfMemoryError: Requested array size exceeds VM limit @@ -251,25 +231,48 @@ * number of elements specified by the minimum capacity argument. * * @param minCapacity the desired minimum capacity + * @throws OutOfMemoryError if minCapacity is less than zero */ - private void grow(int minCapacity) { + private Object[] grow(int minCapacity) { + return elementData = Arrays.copyOf(elementData, + newCapacity(minCapacity)); + } + + private Object[] grow() { + return grow(size + 1); + } + + /** + * Returns a capacity at least as large as the given minimum capacity. + * Returns the current capacity increased by 50% if that suffices. + * Will not return a capacity greater than MAX_ARRAY_SIZE unless + * the given minimum capacity is greater than MAX_ARRAY_SIZE. + * + * @param minCapacity the desired minimum capacity + * @throws OutOfMemoryError if minCapacity is less than zero + */ + private int newCapacity(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); - if (newCapacity - minCapacity < 0) - newCapacity = minCapacity; - if (newCapacity - MAX_ARRAY_SIZE > 0) - newCapacity = hugeCapacity(minCapacity); - // minCapacity is usually close to size, so this is a win: - elementData = Arrays.copyOf(elementData, newCapacity); + if (newCapacity - minCapacity <= 0) { + if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) + return Math.max(DEFAULT_CAPACITY, minCapacity); + if (minCapacity < 0) // overflow + throw new OutOfMemoryError(); + return minCapacity; + } + return (newCapacity - MAX_ARRAY_SIZE <= 0) + ? newCapacity + : hugeCapacity(minCapacity); } private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // overflow throw new OutOfMemoryError(); - return (minCapacity > MAX_ARRAY_SIZE) ? - Integer.MAX_VALUE : - MAX_ARRAY_SIZE; + return (minCapacity > MAX_ARRAY_SIZE) + ? Integer.MAX_VALUE + : MAX_ARRAY_SIZE; } /** @@ -452,14 +455,26 @@ } /** + * This helper method split out from add(E) to keep method + * bytecode size under 35 (the -XX:MaxInlineSize default value), + * which helps when add(E) is called in a C1-compiled loop. + */ + private void add(E e, Object[] elementData, int s) { + if (s == elementData.length) + elementData = grow(); + elementData[s] = e; + size = s + 1; + } + + /** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @return {@code true} (as specified by {@link Collection#add}) */ public boolean add(E e) { - ensureCapacityInternal(size + 1); // Increments modCount!! - elementData[size++] = e; + modCount++; + add(e, elementData, size); return true; } @@ -474,12 +489,16 @@ */ public void add(int index, E element) { rangeCheckForAdd(index); - - ensureCapacityInternal(size + 1); // Increments modCount!! - System.arraycopy(elementData, index, elementData, index + 1, - size - index); + modCount++; + final int s; + Object[] elementData; + if ((s = size) == (elementData = this.elementData).length) + elementData = grow(); + System.arraycopy(elementData, index, + elementData, index + 1, + s - index); elementData[index] = element; - size++; + size = s + 1; } /** @@ -578,11 +597,17 @@ */ public boolean addAll(Collection<? extends E> c) { Object[] a = c.toArray(); + modCount++; int numNew = a.length; - ensureCapacityInternal(size + numNew); // Increments modCount - System.arraycopy(a, 0, elementData, size, numNew); - size += numNew; - return numNew != 0; + if (numNew == 0) + return false; + Object[] elementData; + final int s; + if (numNew > (elementData = this.elementData).length - (s = size)) + elementData = grow(s + numNew); + System.arraycopy(a, 0, elementData, s, numNew); + size = s + numNew; + return true; } /** @@ -604,17 +629,23 @@ rangeCheckForAdd(index); Object[] a = c.toArray(); + modCount++; int numNew = a.length; - ensureCapacityInternal(size + numNew); // Increments modCount + if (numNew == 0) + return false; + Object[] elementData; + final int s; + if (numNew > (elementData = this.elementData).length - (s = size)) + elementData = grow(s + numNew); - int numMoved = size - index; + int numMoved = s - index; if (numMoved > 0) - System.arraycopy(elementData, index, elementData, index + numNew, + System.arraycopy(elementData, index, + elementData, index + numNew, numMoved); - System.arraycopy(a, 0, elementData, index, numNew); - size += numNew; - return numNew != 0; + size = s + numNew; + return true; } /** @@ -786,7 +817,6 @@ */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { - elementData = EMPTY_ELEMENTDATA; // Read in size, and any hidden stuff s.defaultReadObject(); @@ -795,14 +825,19 @@ s.readInt(); // ignored if (size > 0) { - // be like clone(), allocate array based upon size not capacity - ensureCapacityInternal(size); + // like clone(), allocate array based upon size not capacity + Object[] elements = new Object[size]; - Object[] a = elementData; // Read in all elements in the proper order. - for (int i=0; i<size; i++) { - a[i] = s.readObject(); + for (int i = 0; i < size; i++) { + elements[i] = s.readObject(); } + + elementData = elements; + } else if (size == 0) { + elementData = EMPTY_ELEMENTDATA; + } else { + throw new java.io.InvalidObjectException("Invalid size: " + size); } }
--- a/jdk/src/java.base/share/classes/java/util/Arrays.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/Arrays.java Tue Jan 26 09:11:58 2016 +0100 @@ -110,7 +110,7 @@ * Checks that {@code fromIndex} and {@code toIndex} are in * the range and throws an exception if they aren't. */ - private static void rangeCheck(int arrayLength, int fromIndex, int toIndex) { + static void rangeCheck(int arrayLength, int fromIndex, int toIndex) { if (fromIndex > toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); @@ -2579,11 +2579,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) - if (a[i] != a2[i]) - return false; - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -2628,11 +2624,9 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) - if (a[aFromIndex++] != b[bFromIndex++]) - return false; - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + aLength) < 0; } /** @@ -2657,11 +2651,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) - if (a[i] != a2[i]) - return false; - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -2706,11 +2696,9 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) - if (a[aFromIndex++] != b[bFromIndex++]) - return false; - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + aLength) < 0; } /** @@ -2735,11 +2723,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) - if (a[i] != a2[i]) - return false; - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -2784,11 +2768,9 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) - if (a[aFromIndex++] != b[bFromIndex++]) - return false; - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + aLength) < 0; } /** @@ -2814,11 +2796,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) - if (a[i] != a2[i]) - return false; - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -2863,11 +2841,9 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) - if (a[aFromIndex++] != b[bFromIndex++]) - return false; - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + aLength) < 0; } /** @@ -2893,11 +2869,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) - if (a[i] != a2[i]) - return false; - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -2942,11 +2914,9 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) - if (a[aFromIndex++] != b[bFromIndex++]) - return false; - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + aLength) < 0; } /** @@ -2971,11 +2941,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) - if (a[i] != a2[i]) - return false; - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -3020,11 +2986,9 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) - if (a[aFromIndex++] != b[bFromIndex++]) - return false; - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + aLength) < 0; } /** @@ -3055,14 +3019,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) { - double v1 = a[i], v2 = a2[i]; - if (Double.doubleToRawLongBits(v1) != Double.doubleToRawLongBits(v2)) - if (!Double.isNaN(v1) || !Double.isNaN(v2)) - return false; - } - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -3113,14 +3070,8 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) { - Double va = a[aFromIndex++], vb = b[bFromIndex++]; - if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) - if (!Double.isNaN(va) || !Double.isNaN(vb)) - return false; - } - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, aLength) < 0; } /** @@ -3151,14 +3102,7 @@ if (a2.length != length) return false; - for (int i=0; i<length; i++) { - float v1 = a[i], v2 = a2[i]; - if (Float.floatToRawIntBits(v1) != Float.floatToRawIntBits(v2)) - if (!Float.isNaN(v1) || !Float.isNaN(v2)) - return false; - } - - return true; + return ArraysSupport.mismatch(a, a2, length) < 0; } /** @@ -3209,14 +3153,8 @@ if (aLength != bLength) return false; - for (int i = 0; i < aLength; i++) { - float va = a[aFromIndex++], vb = b[bFromIndex++]; - if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) - if (!Float.isNaN(va) || !Float.isNaN(vb)) - return false; - } - - return true; + return ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, aLength) < 0; } /** @@ -5804,9 +5742,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Boolean.compare(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Boolean.compare(a[i], b[i]); } return a.length - b.length; @@ -5880,11 +5819,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - boolean va = a[aFromIndex++]; - boolean vb = b[bFromIndex++]; - if (va != vb) return Boolean.compare(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Boolean.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -5939,9 +5878,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Byte.compare(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Byte.compare(a[i], b[i]); } return a.length - b.length; @@ -6014,11 +5954,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - byte va = a[aFromIndex++]; - byte vb = b[bFromIndex++]; - if (va != vb) return Byte.compare(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Byte.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6066,9 +6006,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Byte.compareUnsigned(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Byte.compareUnsigned(a[i], b[i]); } return a.length - b.length; @@ -6133,11 +6074,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - byte va = a[aFromIndex++]; - byte vb = b[bFromIndex++]; - if (va != vb) return Byte.compareUnsigned(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Byte.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6192,9 +6133,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Short.compare(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Short.compare(a[i], b[i]); } return a.length - b.length; @@ -6267,11 +6209,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - short va = a[aFromIndex++]; - short vb = b[bFromIndex++]; - if (va != vb) return Short.compare(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Short.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6319,9 +6261,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Short.compareUnsigned(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Short.compareUnsigned(a[i], b[i]); } return a.length - b.length; @@ -6385,11 +6328,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - short va = a[aFromIndex++]; - short vb = b[bFromIndex++]; - if (va != vb) return Short.compareUnsigned(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Short.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6444,9 +6387,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Character.compare(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Character.compare(a[i], b[i]); } return a.length - b.length; @@ -6519,11 +6463,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - char va = a[aFromIndex++]; - char vb = b[bFromIndex++]; - if (va != vb) return Character.compare(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Character.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6578,9 +6522,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Integer.compare(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Integer.compare(a[i], b[i]); } return a.length - b.length; @@ -6653,11 +6598,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - int va = a[aFromIndex++]; - int vb = b[bFromIndex++]; - if (va != vb) return Integer.compare(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Integer.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6705,9 +6650,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Integer.compareUnsigned(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Integer.compareUnsigned(a[i], b[i]); } return a.length - b.length; @@ -6771,11 +6717,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - int va = a[aFromIndex++]; - int vb = b[bFromIndex++]; - if (va != vb) return Integer.compareUnsigned(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Integer.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6830,9 +6776,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Long.compare(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Long.compare(a[i], b[i]); } return a.length - b.length; @@ -6905,11 +6852,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - long va = a[aFromIndex++]; - long vb = b[bFromIndex++]; - if (va != vb) return Long.compare(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Long.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -6957,9 +6904,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return Long.compareUnsigned(a[i], b[i]); + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Long.compareUnsigned(a[i], b[i]); } return a.length - b.length; @@ -7023,11 +6971,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - long va = a[aFromIndex++]; - long vb = b[bFromIndex++]; - if (va != vb) return Long.compareUnsigned(va, vb); + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Long.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -7082,13 +7030,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - float va = a[i], vb = b[i]; - if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) { - int c = Float.compare(va, vb); - if (c != 0) return c; - } + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Float.compare(a[i], b[i]); } return a.length - b.length; @@ -7161,13 +7106,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - float va = a[aFromIndex++], vb = b[bFromIndex++]; - if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) { - int c = Float.compare(va, vb); - if (c != 0) return c; - } + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Float.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -7222,13 +7165,10 @@ if (a == null || b == null) return a == null ? -1 : 1; - int length = Math.min(a.length, b.length); - for (int i = 0; i < length; i++) { - double va = a[i], vb = b[i]; - if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) { - int c = Double.compare(va, vb); - if (c != 0) return c; - } + int i = ArraysSupport.mismatch(a, b, + Math.min(a.length, b.length)); + if (i >= 0) { + return Double.compare(a[i], b[i]); } return a.length - b.length; @@ -7301,13 +7241,11 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; - int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - double va = a[aFromIndex++], vb = b[bFromIndex++]; - if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) { - int c = Double.compare(va, vb); - if (c != 0) return c; - } + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + Math.min(aLength, bLength)); + if (i >= 0) { + return Double.compare(a[aFromIndex + i], b[bFromIndex + i]); } return aLength - bLength; @@ -7673,11 +7611,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -7749,11 +7684,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - if (a[aFromIndex++] != b[bFromIndex++]) return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch byte @@ -7804,11 +7738,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -7880,11 +7811,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - if (a[aFromIndex++] != b[bFromIndex++]) return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch char @@ -7935,11 +7865,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -8011,11 +7938,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - if (a[aFromIndex++] != b[bFromIndex++]) return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch short @@ -8066,11 +7992,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -8142,11 +8065,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - if (a[aFromIndex++] != b[bFromIndex++]) return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch int @@ -8197,11 +8119,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -8273,11 +8192,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - if (a[aFromIndex++] != b[bFromIndex++]) return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch long @@ -8328,11 +8246,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - if (a[i] != b[i]) return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -8404,11 +8319,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - if (a[aFromIndex++] != b[bFromIndex++]) return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch float @@ -8459,14 +8373,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - float va = a[i], vb = b[i]; - if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) - if (!Float.isNaN(va) || !Float.isNaN(vb)) - return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -8538,14 +8446,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - float va = a[aFromIndex++], vb = b[bFromIndex++]; - if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) - if (!Float.isNaN(va) || !Float.isNaN(vb)) - return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch double @@ -8596,14 +8500,8 @@ if (a == b) return -1; - for (int i = 0; i < length; i++) { - double va = a[i], vb = b[i]; - if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) - if (!Double.isNaN(va) || !Double.isNaN(vb)) - return i; - } - - return a.length != b.length ? length : -1; + int i = ArraysSupport.mismatch(a, b, length); + return (i < 0 && a.length != b.length) ? length : i; } /** @@ -8675,14 +8573,10 @@ int aLength = aToIndex - aFromIndex; int bLength = bToIndex - bFromIndex; int length = Math.min(aLength, bLength); - for (int i = 0; i < length; i++) { - double va = a[aFromIndex++], vb = b[bFromIndex++]; - if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) - if (!Double.isNaN(va) || !Double.isNaN(vb)) - return i; - } - - return aLength != bLength ? length : -1; + int i = ArraysSupport.mismatch(a, aFromIndex, + b, bFromIndex, + length); + return (i < 0 && aLength != bLength) ? length : i; } // Mismatch objects
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/java/util/ArraysSupport.java Tue Jan 26 09:11:58 2016 +0100 @@ -0,0 +1,545 @@ +/* + * Copyright (c) 2015, 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. + */ +package java.util; + +import jdk.internal.HotSpotIntrinsicCandidate; +import jdk.internal.misc.Unsafe; + +/** + * Utility methods to find a mismatch between two primitive arrays. + * + * <p>Array equality and lexicographical comparison can be built on top of + * array mismatch functionality. + * + * <p>The mismatch method implementation, {@link #vectorizedMismatch}, leverages + * vector-based techniques to access and compare the contents of two arrays. + * The Java implementation uses {@code Unsafe.getLongUnaligned} to access the + * content of an array, thus access is supported on platforms that do not + * support unaligned access. For a byte[] array, 8 bytes (64 bits) can be + * accessed and compared as a unit rather than individually, which increases + * the performance when the method is compiled by the HotSpot VM. On supported + * platforms the mismatch implementation is intrinsified to leverage SIMD + * instructions. So for a byte[] array, 16 bytes (128 bits), 32 bytes + * (256 bits), and perhaps in the future even 64 bytes (512 bits), platform + * permitting, can be accessed and compared as a unit, which further increases + * the performance over the Java implementation. + * + * <p>None of the mismatch methods perform array bounds checks. It is the + * responsibility of the caller (direct or otherwise) to perform such checks + * before calling this method. + */ +class ArraysSupport { + static final Unsafe U = Unsafe.getUnsafe(); + + private static final boolean BIG_ENDIAN = U.isBigEndian(); + + private static final int LOG2_ARRAY_BOOLEAN_INDEX_SCALE = exactLog2(Unsafe.ARRAY_BOOLEAN_INDEX_SCALE); + private static final int LOG2_ARRAY_BYTE_INDEX_SCALE = exactLog2(Unsafe.ARRAY_BYTE_INDEX_SCALE); + private static final int LOG2_ARRAY_CHAR_INDEX_SCALE = exactLog2(Unsafe.ARRAY_CHAR_INDEX_SCALE); + private static final int LOG2_ARRAY_SHORT_INDEX_SCALE = exactLog2(Unsafe.ARRAY_SHORT_INDEX_SCALE); + private static final int LOG2_ARRAY_INT_INDEX_SCALE = exactLog2(Unsafe.ARRAY_INT_INDEX_SCALE); + private static final int LOG2_ARRAY_LONG_INDEX_SCALE = exactLog2(Unsafe.ARRAY_LONG_INDEX_SCALE); + private static final int LOG2_ARRAY_FLOAT_INDEX_SCALE = exactLog2(Unsafe.ARRAY_FLOAT_INDEX_SCALE); + private static final int LOG2_ARRAY_DOUBLE_INDEX_SCALE = exactLog2(Unsafe.ARRAY_DOUBLE_INDEX_SCALE); + + private static final int LOG2_BYTE_BIT_SIZE = exactLog2(Byte.SIZE); + + private static int exactLog2(int scale) { + if ((scale & (scale - 1)) != 0) + throw new Error("data type scale not a power of two"); + return Integer.numberOfTrailingZeros(scale); + } + + private ArraysSupport() {} + + /** + * Find the relative index of the first mismatching pair of elements in two + * primitive arrays of the same component type. Pairs of elements will be + * tested in order relative to given offsets into both arrays. + * + * <p>This method does not perform type checks or bounds checks. It is the + * responsibility of the caller to perform such checks before calling this + * method. + * + * <p>The given offsets, in bytes, need not be aligned according to the + * given log<sub>2</sub> size the array elements. More specifically, an + * offset modulus the size need not be zero. + * + * @param a the first array to be tested for mismatch, or {@code null} for + * direct memory access + * @param aOffset the relative offset, in bytes, from the base address of + * the first array to test from, otherwise if the first array is + * {@code null}, an absolute address pointing to the first element to test. + * @param b the second array to be tested for mismatch, or {@code null} for + * direct memory access + * @param bOffset the relative offset, in bytes, from the base address of + * the second array to test from, otherwise if the second array is + * {@code null}, an absolute address pointing to the first element to test. + * @param length the number of array elements to test + * @param log2ArrayIndexScale log<sub>2</sub> of the array index scale, that + * corresponds to the size, in bytes, of an array element. + * @return if a mismatch is found a relative index, between 0 (inclusive) + * and {@code length} (exclusive), of the first mismatching pair of elements + * in the two arrays. Otherwise, if a mismatch is not found the bitwise + * compliment of the number of remaining pairs of elements to be checked in + * the tail of the two arrays. + */ + @HotSpotIntrinsicCandidate + static int vectorizedMismatch(Object a, long aOffset, + Object b, long bOffset, + int length, + int log2ArrayIndexScale) { + // assert a.getClass().isArray(); + // assert b.getClass().isArray(); + // assert 0 <= length <= sizeOf(a) + // assert 0 <= length <= sizeOf(b) + // assert 0 <= log2ArrayIndexScale <= 3 + + int log2ValuesPerWidth = LOG2_ARRAY_LONG_INDEX_SCALE - log2ArrayIndexScale; + int wi = 0; + for (; wi < length >> log2ValuesPerWidth; wi++) { + long bi = ((long) wi) << LOG2_ARRAY_LONG_INDEX_SCALE; + long av = U.getLongUnaligned(a, aOffset + bi); + long bv = U.getLongUnaligned(b, bOffset + bi); + if (av != bv) { + long x = av ^ bv; + int o = BIG_ENDIAN + ? Long.numberOfLeadingZeros(x) >> (LOG2_BYTE_BIT_SIZE + log2ArrayIndexScale) + : Long.numberOfTrailingZeros(x) >> (LOG2_BYTE_BIT_SIZE + log2ArrayIndexScale); + return (wi << log2ValuesPerWidth) + o; + } + } + + // Calculate the tail of remaining elements to check + int tail = length - (wi << log2ValuesPerWidth); + + if (log2ArrayIndexScale < LOG2_ARRAY_INT_INDEX_SCALE) { + int wordTail = 1 << (LOG2_ARRAY_INT_INDEX_SCALE - log2ArrayIndexScale); + // Handle 4 bytes or 2 chars in the tail using int width + if (tail >= wordTail) { + long bi = ((long) wi) << LOG2_ARRAY_LONG_INDEX_SCALE; + int av = U.getIntUnaligned(a, aOffset + bi); + int bv = U.getIntUnaligned(b, bOffset + bi); + if (av != bv) { + int x = av ^ bv; + int o = BIG_ENDIAN + ? Integer.numberOfLeadingZeros(x) >> (LOG2_BYTE_BIT_SIZE + log2ArrayIndexScale) + : Integer.numberOfTrailingZeros(x) >> (LOG2_BYTE_BIT_SIZE + log2ArrayIndexScale); + return (wi << log2ValuesPerWidth) + o; + } + tail -= wordTail; + } + return ~tail; + } + else { + return ~tail; + } + } + + // Booleans + // Each boolean element takes up one byte + + static int mismatch(boolean[] a, + boolean[] b, + int length) { + int i = 0; + if (length > 7) { + i = vectorizedMismatch( + a, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, + b, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, + length, LOG2_ARRAY_BOOLEAN_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[i] != b[i]) + return i; + } + return -1; + } + + static int mismatch(boolean[] a, int aFromIndex, + boolean[] b, int bFromIndex, + int length) { + int i = 0; + if (length > 7) { + int aOffset = Unsafe.ARRAY_BOOLEAN_BASE_OFFSET + aFromIndex; + int bOffset = Unsafe.ARRAY_BOOLEAN_BASE_OFFSET + bFromIndex; + i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_BOOLEAN_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[aFromIndex + i] != b[bFromIndex + i]) + return i; + } + return -1; + } + + + // Bytes + + /** + * Find the index of a mismatch between two arrays. + * + * <p>This method does not perform bounds checks. It is the responsibility + * of the caller to perform such bounds checks before calling this method. + * + * @param a the first array to be tested for a mismatch + * @param b the second array to be tested for a mismatch + * @param length the number of bytes from each array to check + * @return the index of a mismatch between the two arrays, otherwise -1 if + * no mismatch. The index will be within the range of (inclusive) 0 to + * (exclusive) the smaller of the two array lengths. + */ + static int mismatch(byte[] a, + byte[] b, + int length) { + // ISSUE: defer to index receiving methods if performance is good + // assert length <= a.length + // assert length <= b.length + + int i = 0; + if (length > 7) { + i = vectorizedMismatch( + a, Unsafe.ARRAY_BYTE_BASE_OFFSET, + b, Unsafe.ARRAY_BYTE_BASE_OFFSET, + length, LOG2_ARRAY_BYTE_INDEX_SCALE); + if (i >= 0) + return i; + // Align to tail + i = length - ~i; +// assert i >= 0 && i <= 7; + } + // Tail < 8 bytes + for (; i < length; i++) { + if (a[i] != b[i]) + return i; + } + return -1; + } + + /** + * Find the relative index of a mismatch between two arrays starting from + * given indexes. + * + * <p>This method does not perform bounds checks. It is the responsibility + * of the caller to perform such bounds checks before calling this method. + * + * @param a the first array to be tested for a mismatch + * @param aFromIndex the index of the first element (inclusive) in the first + * array to be compared + * @param b the second array to be tested for a mismatch + * @param bFromIndex the index of the first element (inclusive) in the + * second array to be compared + * @param length the number of bytes from each array to check + * @return the relative index of a mismatch between the two arrays, + * otherwise -1 if no mismatch. The index will be within the range of + * (inclusive) 0 to (exclusive) the smaller of the two array bounds. + */ + static int mismatch(byte[] a, int aFromIndex, + byte[] b, int bFromIndex, + int length) { + // assert 0 <= aFromIndex < a.length + // assert 0 <= aFromIndex + length <= a.length + // assert 0 <= bFromIndex < b.length + // assert 0 <= bFromIndex + length <= b.length + // assert length >= 0 + + int i = 0; + if (length > 7) { + int aOffset = Unsafe.ARRAY_BYTE_BASE_OFFSET + aFromIndex; + int bOffset = Unsafe.ARRAY_BYTE_BASE_OFFSET + bFromIndex; + i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_BYTE_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[aFromIndex + i] != b[bFromIndex + i]) + return i; + } + return -1; + } + + + // Chars + + static int mismatch(char[] a, + char[] b, + int length) { + int i = 0; + if (length > 3) { + i = vectorizedMismatch( + a, Unsafe.ARRAY_CHAR_BASE_OFFSET, + b, Unsafe.ARRAY_CHAR_BASE_OFFSET, + length, LOG2_ARRAY_CHAR_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[i] != b[i]) + return i; + } + return -1; + } + + static int mismatch(char[] a, int aFromIndex, + char[] b, int bFromIndex, + int length) { + int i = 0; + if (length > 3) { + int aOffset = Unsafe.ARRAY_CHAR_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_CHAR_INDEX_SCALE); + int bOffset = Unsafe.ARRAY_CHAR_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_CHAR_INDEX_SCALE); + i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_CHAR_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[aFromIndex + i] != b[bFromIndex + i]) + return i; + } + return -1; + } + + + // Shorts + + static int mismatch(short[] a, + short[] b, + int length) { + int i = 0; + if (length > 3) { + i = vectorizedMismatch( + a, Unsafe.ARRAY_SHORT_BASE_OFFSET, + b, Unsafe.ARRAY_SHORT_BASE_OFFSET, + length, LOG2_ARRAY_SHORT_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[i] != b[i]) + return i; + } + return -1; + } + + static int mismatch(short[] a, int aFromIndex, + short[] b, int bFromIndex, + int length) { + int i = 0; + if (length > 3) { + int aOffset = Unsafe.ARRAY_SHORT_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_SHORT_INDEX_SCALE); + int bOffset = Unsafe.ARRAY_SHORT_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_SHORT_INDEX_SCALE); + i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_SHORT_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[aFromIndex + i] != b[bFromIndex + i]) + return i; + } + return -1; + } + + + // Ints + + static int mismatch(int[] a, + int[] b, + int length) { + int i = 0; + if (length > 1) { + i = vectorizedMismatch( + a, Unsafe.ARRAY_INT_BASE_OFFSET, + b, Unsafe.ARRAY_INT_BASE_OFFSET, + length, LOG2_ARRAY_INT_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[i] != b[i]) + return i; + } + return -1; + } + + static int mismatch(int[] a, int aFromIndex, + int[] b, int bFromIndex, + int length) { + int i = 0; + if (length > 1) { + int aOffset = Unsafe.ARRAY_INT_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_INT_INDEX_SCALE); + int bOffset = Unsafe.ARRAY_INT_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_INT_INDEX_SCALE); + i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_INT_INDEX_SCALE); + if (i >= 0) + return i; + i = length - ~i; + } + for (; i < length; i++) { + if (a[aFromIndex + i] != b[bFromIndex + i]) + return i; + } + return -1; + } + + + // Floats + + static int mismatch(float[] a, + float[] b, + int length) { + return mismatch(a, 0, b, 0, length); + } + + static int mismatch(float[] a, int aFromIndex, + float[] b, int bFromIndex, + int length) { + int i = 0; + if (length > 1) { + int aOffset = Unsafe.ARRAY_FLOAT_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_FLOAT_INDEX_SCALE); + int bOffset = Unsafe.ARRAY_FLOAT_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_FLOAT_INDEX_SCALE); + i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_FLOAT_INDEX_SCALE); + // Mismatched + if (i >= 0) { + // Check if mismatch is not associated with two NaN values + if (!Float.isNaN(a[aFromIndex + i]) || !Float.isNaN(b[bFromIndex + i])) + return i; + + // Mismatch on two different NaN values that are normalized to match + // Fall back to slow mechanism + // ISSUE: Consider looping over vectorizedMismatch adjusting ranges + // However, requires that returned value be relative to input ranges + i++; + } + // Matched + else { + i = length - ~i; + } + } + for (; i < length; i++) { + if (Float.floatToIntBits(a[aFromIndex + i]) != Float.floatToIntBits(b[bFromIndex + i])) + return i; + } + return -1; + } + + // 64 bit sizes + + // Long + + static int mismatch(long[] a, + long[] b, + int length) { + if (length == 0) { + return -1; + } + int i = vectorizedMismatch( + a, Unsafe.ARRAY_LONG_BASE_OFFSET, + b, Unsafe.ARRAY_LONG_BASE_OFFSET, + length, LOG2_ARRAY_LONG_INDEX_SCALE); + return i >= 0 ? i : -1; + } + + static int mismatch(long[] a, int aFromIndex, + long[] b, int bFromIndex, + int length) { + if (length == 0) { + return -1; + } + int aOffset = Unsafe.ARRAY_LONG_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_LONG_INDEX_SCALE); + int bOffset = Unsafe.ARRAY_LONG_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_LONG_INDEX_SCALE); + int i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_LONG_INDEX_SCALE); + return i >= 0 ? i : -1; + } + + + // Double + + static int mismatch(double[] a, + double[] b, + int length) { + return mismatch(a, 0, b, 0, length); + } + + static int mismatch(double[] a, int aFromIndex, + double[] b, int bFromIndex, + int length) { + if (length == 0) { + return -1; + } + int aOffset = Unsafe.ARRAY_DOUBLE_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_DOUBLE_INDEX_SCALE); + int bOffset = Unsafe.ARRAY_DOUBLE_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_DOUBLE_INDEX_SCALE); + int i = vectorizedMismatch( + a, aOffset, + b, bOffset, + length, LOG2_ARRAY_DOUBLE_INDEX_SCALE); + if (i >= 0) { + // Check if mismatch is not associated with two NaN values + if (!Double.isNaN(a[aFromIndex + i]) || !Double.isNaN(b[bFromIndex + i])) + return i; + + // Mismatch on two different NaN values that are normalized to match + // Fall back to slow mechanism + // ISSUE: Consider looping over vectorizedMismatch adjusting ranges + // However, requires that returned value be relative to input ranges + i++; + for (; i < length; i++) { + if (Double.doubleToLongBits(a[aFromIndex + i]) != Double.doubleToLongBits(b[bFromIndex + i])) + return i; + } + } + + return -1; + } +}
--- a/jdk/src/java.base/share/classes/java/util/EnumMap.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/EnumMap.java Tue Jan 26 09:11:58 2016 +0100 @@ -25,7 +25,6 @@ package java.util; -import java.util.Map.Entry; import jdk.internal.misc.SharedSecrets; /** @@ -125,8 +124,6 @@ return (V)(value == NULL ? null : value); } - private static final Enum<?>[] ZERO_LENGTH_ENUM_ARRAY = new Enum<?>[0]; - /** * Creates an empty enum map with the specified key type. *
--- a/jdk/src/java.base/share/classes/java/util/EnumSet.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/EnumSet.java Tue Jan 26 09:11:58 2016 +0100 @@ -92,8 +92,6 @@ */ final Enum<?>[] universe; - private static Enum<?>[] ZERO_LENGTH_ENUM_ARRAY = new Enum<?>[0]; - EnumSet(Class<E>elementType, Enum<?>[] universe) { this.elementType = elementType; this.universe = universe; @@ -421,6 +419,9 @@ private static class SerializationProxy <E extends Enum<E>> implements java.io.Serializable { + + private static final Enum<?>[] ZERO_LENGTH_ENUM_ARRAY = new Enum<?>[0]; + /** * The element type of this enum set. *
--- a/jdk/src/java.base/share/classes/java/util/Enumeration.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/Enumeration.java Tue Jan 26 09:11:58 2016 +0100 @@ -112,7 +112,7 @@ * * @return an Iterator representing the remaining elements of this Enumeration * - * @since 1.9 + * @since 9 */ default Iterator<E> asIterator() { return new Iterator<>() {
--- a/jdk/src/java.base/share/classes/java/util/Scanner.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/Scanner.java Tue Jan 26 09:11:58 2016 +0100 @@ -2684,7 +2684,7 @@ * * @return a sequential stream of token strings * @throws IllegalStateException if this scanner is closed - * @since 1.9 + * @since 9 */ public Stream<String> tokens() { ensureOpen(); @@ -2770,7 +2770,7 @@ * @return a sequential stream of match results * @throws NullPointerException if pattern is null * @throws IllegalStateException if this scanner is closed - * @since 1.9 + * @since 9 */ public Stream<MatchResult> findAll(Pattern pattern) { Objects.requireNonNull(pattern); @@ -2792,7 +2792,7 @@ * @throws NullPointerException if patString is null * @throws IllegalStateException if this scanner is closed * @throws PatternSyntaxException if the regular expression's syntax is invalid - * @since 1.9 + * @since 9 * @see java.util.regex.Pattern */ public Stream<MatchResult> findAll(String patString) {
--- a/jdk/src/java.base/share/classes/java/util/concurrent/CompletableFuture.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/CompletableFuture.java Tue Jan 26 09:11:58 2016 +0100 @@ -2429,7 +2429,7 @@ * * @param <U> the type of the value * @return a new CompletableFuture - * @since 1.9 + * @since 9 */ public <U> CompletableFuture<U> newIncompleteFuture() { return new CompletableFuture<U>(); @@ -2444,7 +2444,7 @@ * an Executor that provides at least one independent thread. * * @return the executor - * @since 1.9 + * @since 9 */ public Executor defaultExecutor() { return ASYNC_POOL; @@ -2462,7 +2462,7 @@ * arrange dependent actions. * * @return the new CompletableFuture - * @since 1.9 + * @since 9 */ public CompletableFuture<T> copy() { return uniCopyStage(); @@ -2479,7 +2479,7 @@ * cause. * * @return the new CompletionStage - * @since 1.9 + * @since 9 */ public CompletionStage<T> minimalCompletionStage() { return uniAsMinimalStage(); @@ -2494,7 +2494,7 @@ * to complete this CompletableFuture * @param executor the executor to use for asynchronous execution * @return this CompletableFuture - * @since 1.9 + * @since 9 */ public CompletableFuture<T> completeAsync(Supplier<? extends T> supplier, Executor executor) { @@ -2512,7 +2512,7 @@ * @param supplier a function returning the value to be used * to complete this CompletableFuture * @return this CompletableFuture - * @since 1.9 + * @since 9 */ public CompletableFuture<T> completeAsync(Supplier<? extends T> supplier) { return completeAsync(supplier, defaultExecutor()); @@ -2528,7 +2528,7 @@ * @param unit a {@code TimeUnit} determining how to interpret the * {@code timeout} parameter * @return this CompletableFuture - * @since 1.9 + * @since 9 */ public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit) { if (unit == null) @@ -2549,7 +2549,7 @@ * @param unit a {@code TimeUnit} determining how to interpret the * {@code timeout} parameter * @return this CompletableFuture - * @since 1.9 + * @since 9 */ public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit) { @@ -2573,7 +2573,7 @@ * {@code delay} parameter * @param executor the base executor * @return the new delayed executor - * @since 1.9 + * @since 9 */ public static Executor delayedExecutor(long delay, TimeUnit unit, Executor executor) { @@ -2592,7 +2592,7 @@ * @param unit a {@code TimeUnit} determining how to interpret the * {@code delay} parameter * @return the new delayed executor - * @since 1.9 + * @since 9 */ public static Executor delayedExecutor(long delay, TimeUnit unit) { if (unit == null) @@ -2608,7 +2608,7 @@ * @param value the value * @param <U> the type of the value * @return the completed CompletionStage - * @since 1.9 + * @since 9 */ public static <U> CompletionStage<U> completedStage(U value) { return new MinimalStage<U>((value == null) ? NIL : value); @@ -2621,7 +2621,7 @@ * @param ex the exception * @param <U> the type of the value * @return the exceptionally completed CompletableFuture - * @since 1.9 + * @since 9 */ public static <U> CompletableFuture<U> failedFuture(Throwable ex) { if (ex == null) throw new NullPointerException(); @@ -2636,7 +2636,7 @@ * @param ex the exception * @param <U> the type of the value * @return the exceptionally completed CompletionStage - * @since 1.9 + * @since 9 */ public static <U> CompletionStage<U> failedStage(Throwable ex) { if (ex == null) throw new NullPointerException();
--- a/jdk/src/java.base/share/classes/java/util/concurrent/Flow.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/Flow.java Tue Jan 26 09:11:58 2016 +0100 @@ -161,7 +161,7 @@ * }}</pre> * * @author Doug Lea - * @since 1.9 + * @since 9 */ public final class Flow {
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java Tue Jan 26 09:11:58 2016 +0100 @@ -1301,7 +1301,7 @@ * support extensions, and is unlikely to be useful otherwise. * * @return a task, or {@code null} if none are available - * @since 1.9 + * @since 9 */ protected static ForkJoinTask<?> pollSubmission() { Thread t;
--- a/jdk/src/java.base/share/classes/java/util/concurrent/SubmissionPublisher.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/SubmissionPublisher.java Tue Jan 26 09:11:58 2016 +0100 @@ -154,7 +154,7 @@ * * @param <T> the published item type * @author Doug Lea - * @since 1.9 + * @since 9 */ public class SubmissionPublisher<T> implements Flow.Publisher<T>, AutoCloseable {
--- a/jdk/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Tue Jan 26 09:11:58 2016 +0100 @@ -39,6 +39,7 @@ import java.util.Collection; import java.util.Date; import java.util.concurrent.TimeUnit; +import jdk.internal.vm.annotation.ReservedStackAccess; /** * Provides a framework for implementing blocking locks and related @@ -886,6 +887,7 @@ * @param arg the acquire argument * @return {@code true} if interrupted while waiting */ + @ReservedStackAccess final boolean acquireQueued(final Node node, int arg) { try { boolean interrupted = false; @@ -1218,6 +1220,7 @@ * {@link #tryAcquire} but is otherwise uninterpreted and * can represent anything you like. */ + @ReservedStackAccess public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) @@ -1281,6 +1284,7 @@ * can represent anything you like. * @return the value returned from {@link #tryRelease} */ + @ReservedStackAccess public final boolean release(int arg) { if (tryRelease(arg)) { Node h = head; @@ -1361,6 +1365,7 @@ * and can represent anything you like. * @return the value returned from {@link #tryReleaseShared} */ + @ReservedStackAccess public final boolean releaseShared(int arg) { if (tryReleaseShared(arg)) { doReleaseShared();
--- a/jdk/src/java.base/share/classes/java/util/concurrent/locks/ReentrantLock.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/concurrent/locks/ReentrantLock.java Tue Jan 26 09:11:58 2016 +0100 @@ -37,6 +37,7 @@ import java.util.Collection; import java.util.concurrent.TimeUnit; +import jdk.internal.vm.annotation.ReservedStackAccess; /** * A reentrant mutual exclusion {@link Lock} with the same basic @@ -127,6 +128,7 @@ * Performs non-fair tryLock. tryAcquire is implemented in * subclasses, but both need nonfair try for trylock method. */ + @ReservedStackAccess final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); @@ -146,6 +148,7 @@ return false; } + @ReservedStackAccess protected final boolean tryRelease(int releases) { int c = getState() - releases; if (Thread.currentThread() != getExclusiveOwnerThread()) @@ -203,6 +206,7 @@ * Performs lock. Try immediate barge, backing up to normal * acquire on failure. */ + @ReservedStackAccess final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); @@ -229,6 +233,7 @@ * Fair version of tryAcquire. Don't grant access unless * recursive call or no waiters or is first. */ + @ReservedStackAccess protected final boolean tryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState();
--- a/jdk/src/java.base/share/classes/java/util/regex/Matcher.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/regex/Matcher.java Tue Jan 26 09:11:58 2016 +0100 @@ -974,7 +974,7 @@ * @throws IndexOutOfBoundsException * If the replacement string refers to a capturing group * that does not exist in the pattern - * @since 1.9 + * @since 9 */ public Matcher appendReplacement(StringBuilder sb, String replacement) { // If no match, return error @@ -1117,7 +1117,7 @@ * * @return The target string builder * - * @since 1.9 + * @since 9 */ public StringBuilder appendTail(StringBuilder sb) { sb.append(text, lastAppendPosition, getTextLength()); @@ -1229,7 +1229,7 @@ * @throws ConcurrentModificationException if it is detected, on a * best-effort basis, that the replacer function modified this * matcher's state - * @since 1.9 + * @since 9 */ public String replaceAll(Function<MatchResult, String> replacer) { Objects.requireNonNull(replacer); @@ -1273,7 +1273,7 @@ * modification is detected. * * @return a sequential stream of match results. - * @since 1.9 + * @since 9 */ public Stream<MatchResult> results() { class MatchResultIterator implements Iterator<MatchResult> { @@ -1451,7 +1451,7 @@ * @throws ConcurrentModificationException if it is detected, on a * best-effort basis, that the replacer function modified this * matcher's state - * @since 1.9 + * @since 9 */ public String replaceFirst(Function<MatchResult, String> replacer) { Objects.requireNonNull(replacer);
--- a/jdk/src/java.base/share/classes/java/util/stream/DoubleStream.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/stream/DoubleStream.java Tue Jan 26 09:11:58 2016 +0100 @@ -329,7 +329,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default DoubleStream takeWhile(DoublePredicate predicate) { Objects.requireNonNull(predicate); @@ -396,7 +396,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default DoubleStream dropWhile(DoublePredicate predicate) { Objects.requireNonNull(predicate);
--- a/jdk/src/java.base/share/classes/java/util/stream/IntStream.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/stream/IntStream.java Tue Jan 26 09:11:58 2016 +0100 @@ -326,7 +326,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default IntStream takeWhile(IntPredicate predicate) { Objects.requireNonNull(predicate); @@ -392,7 +392,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default IntStream dropWhile(IntPredicate predicate) { Objects.requireNonNull(predicate);
--- a/jdk/src/java.base/share/classes/java/util/stream/LongStream.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/stream/LongStream.java Tue Jan 26 09:11:58 2016 +0100 @@ -327,7 +327,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default LongStream takeWhile(LongPredicate predicate) { Objects.requireNonNull(predicate); @@ -394,7 +394,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default LongStream dropWhile(LongPredicate predicate) { Objects.requireNonNull(predicate);
--- a/jdk/src/java.base/share/classes/java/util/stream/Stream.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/stream/Stream.java Tue Jan 26 09:11:58 2016 +0100 @@ -533,7 +533,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default Stream<T> takeWhile(Predicate<? super T> predicate) { Objects.requireNonNull(predicate); @@ -599,7 +599,7 @@ * predicate to apply to elements to determine the longest * prefix of elements. * @return the new stream - * @since 1.9 + * @since 9 */ default Stream<T> dropWhile(Predicate<? super T> predicate) { Objects.requireNonNull(predicate); @@ -1146,7 +1146,7 @@ * @param <T> the type of stream elements * @return a stream with a single element if the specified element * is non-null, otherwise an empty stream - * @since 1.9 + * @since 9 */ public static<T> Stream<T> ofNullable(T t) { return t == null ? Stream.empty()
--- a/jdk/src/java.base/share/classes/java/util/stream/WhileOps.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/stream/WhileOps.java Tue Jan 26 09:11:58 2016 +0100 @@ -43,7 +43,7 @@ * Factory for instances of a takeWhile and dropWhile operations * that produce subsequences of their input stream. * - * @since 1.9 + * @since 9 */ final class WhileOps {
--- a/jdk/src/java.base/share/classes/java/util/zip/CRC32C.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/zip/CRC32C.java Tue Jan 26 09:11:58 2016 +0100 @@ -44,7 +44,7 @@ * {@link NullPointerException} to be thrown. * </p> * - * @since 1.9 + * @since 9 */ public final class CRC32C implements Checksum {
--- a/jdk/src/java.base/share/classes/java/util/zip/Checksum.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/zip/Checksum.java Tue Jan 26 09:11:58 2016 +0100 @@ -51,7 +51,7 @@ * @throws NullPointerException * if {@code b} is {@code null} * - * @since 1.9 + * @since 9 */ default public void update(byte[] b) { update(b, 0, b.length); @@ -99,7 +99,7 @@ * @throws NullPointerException * if {@code buffer} is {@code null} * - * @since 1.9 + * @since 9 */ default public void update(ByteBuffer buffer) { int pos = buffer.position();
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/java/util/zip/ZipEntry.java Tue Jan 26 09:11:58 2016 +0100 @@ -220,7 +220,7 @@ * The last modification time of the entry in local date-time * * @see #getTimeLocal() - * @since 1.9 + * @since 9 */ public void setTimeLocal(LocalDateTime time) { int year = time.getYear() - 1980; @@ -259,7 +259,7 @@ * @return The last modification time of the entry in local date-time * * @see #setTimeLocal(LocalDateTime) - * @since 1.9 + * @since 9 */ public LocalDateTime getTimeLocal() { if (mtime != null) {
--- a/jdk/src/java.base/share/classes/jdk/internal/HotSpotIntrinsicCandidate.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/jdk/internal/HotSpotIntrinsicCandidate.java Tue Jan 26 09:11:58 2016 +0100 @@ -117,7 +117,7 @@ * and that (2) for all methods of that class annotated with * {@code @HotSpotIntrinsicCandidate} there is an intrinsic in the list. * - * @since 1.9 + * @since 9 */ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) @Retention(RetentionPolicy.RUNTIME)
--- a/jdk/src/java.base/share/classes/jdk/internal/logger/package-info.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/jdk/internal/logger/package-info.java Tue Jan 26 09:11:58 2016 +0100 @@ -63,6 +63,6 @@ * @see sun.util.logging.PlatformLogger.Bridge * @see sun.util.logging.internal * - * @since 1.9 + * @since 9 */ package jdk.internal.logger;
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java Tue Jan 26 09:11:58 2016 +0100 @@ -1081,7 +1081,7 @@ * @return the value fetched from the indicated object * @throws RuntimeException No defined exceptions are thrown, not even * {@link NullPointerException} - * @since 1.9 + * @since 9 */ @HotSpotIntrinsicCandidate public final long getLongUnaligned(Object o, long offset) { @@ -1115,7 +1115,7 @@ * @param offset The offset in bytes from the start of the object * @param bigEndian The endianness of the value * @return the value fetched from the indicated object - * @since 1.9 + * @since 9 */ public final long getLongUnaligned(Object o, long offset, boolean bigEndian) { return convEndian(bigEndian, getLongUnaligned(o, offset)); @@ -1193,7 +1193,7 @@ * @param x the value to store * @throws RuntimeException No defined exceptions are thrown, not even * {@link NullPointerException} - * @since 1.9 + * @since 9 */ @HotSpotIntrinsicCandidate public final void putLongUnaligned(Object o, long offset, long x) { @@ -1231,7 +1231,7 @@ * @param bigEndian The endianness of the value * @throws RuntimeException No defined exceptions are thrown, not even * {@link NullPointerException} - * @since 1.9 + * @since 9 */ public final void putLongUnaligned(Object o, long offset, long x, boolean bigEndian) { putLongUnaligned(o, offset, convEndian(bigEndian, x));
--- a/jdk/src/java.base/share/classes/jdk/internal/ref/PhantomCleanable.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/jdk/internal/ref/PhantomCleanable.java Tue Jan 26 09:11:58 2016 +0100 @@ -26,6 +26,7 @@ package jdk.internal.ref; import java.lang.ref.Cleaner; +import java.lang.ref.Reference; import java.lang.ref.PhantomReference; import java.util.Objects; @@ -66,9 +67,9 @@ this.list = CleanerImpl.getCleanerImpl(cleaner).phantomCleanableList; insert(); - // TODO: Replace getClass() with ReachabilityFence when it is available - cleaner.getClass(); - referent.getClass(); + // Ensure referent and cleaner remain accessible + Reference.reachabilityFence(referent); + Reference.reachabilityFence(cleaner); } /**
--- a/jdk/src/java.base/share/classes/jdk/internal/ref/SoftCleanable.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/jdk/internal/ref/SoftCleanable.java Tue Jan 26 09:11:58 2016 +0100 @@ -26,6 +26,7 @@ package jdk.internal.ref; import java.lang.ref.Cleaner; +import java.lang.ref.Reference; import java.lang.ref.SoftReference; import java.util.Objects; @@ -66,9 +67,9 @@ list = CleanerImpl.getCleanerImpl(cleaner).softCleanableList; insert(); - // TODO: Replace getClass() with ReachabilityFence when it is available - cleaner.getClass(); - referent.getClass(); + // Ensure referent and cleaner remain accessible + Reference.reachabilityFence(referent); + Reference.reachabilityFence(cleaner); } /**
--- a/jdk/src/java.base/share/classes/jdk/internal/ref/WeakCleanable.java Mon Jan 25 14:09:28 2016 -1000 +++ b/jdk/src/java.base/share/classes/jdk/internal/ref/WeakCleanable.java Tue Jan 26 09:11:58 2016 +0100 @@ -26,6 +26,7 @@ */ import java.lang.ref.Cleaner; +import java.lang.ref.Reference; import java.lang.ref.WeakReference; import java.util.Objects; @@ -66,9 +67,10 @@ list = CleanerImpl.getCleanerImpl(cleaner).weakCleanableList; insert(); - // TODO: Replace getClass() with ReachabilityFence when it is available - cleaner.getClass(); - referent.getClass(); + // Ensure referent and cleaner remain accessible + Reference.reachabilityFence(referent); + Reference.reachabilityFence(cleaner); + } /**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/DontInline.java Tue Jan 26 09:11:58 2016 +0100 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2012, 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. + */ + +package jdk.internal.vm.annotation; + +import java.lang.annotation.*; + +/** + * A method or constructor may be annotated as "don't inline" if the inlining of + * this method should not be performed by the HotSpot VM. + * <p> + * This annotation must be used sparingly. It is useful when the only + * reasonable alternative is to bind the name of a specific method or + * constructor into the HotSpot VM for special handling by the inlining policy. + * This annotation must not be relied on as an alternative to avoid tuning the + * VM's inlining policy. In a few cases, it may act as a temporary workaround + * until the profiling and inlining performed by the HotSpot VM is sufficiently + * improved. + * + * @implNote + * This annotation only takes effect for methods or constructors of classes + * loaded by the boot loader. Annotations on methods or constructors of classes + * loaded outside of the boot loader are ignored. + */ +@Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) +@Retention(RetentionPolicy.RUNTIME) +public @interface DontInline { +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ForceInline.java Tue Jan 26 09:11:58 2016 +0100 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012, 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. + */ + +package jdk.internal.vm.annotation; + +import java.lang.annotation.*; + +/** + * A method or constructor may be annotated as "force inline" if the standard + * inlining metrics are to be ignored when the HotSpot VM inlines the method + * or constructor. + * <p> + * This annotation must be used sparingly. It is useful when the only + * reasonable alternative is to bind the name of a specific method or + * constructor into the HotSpot VM for special handling by the inlining policy. + * This annotation must not be relied on as an alternative to avoid tuning the + * VM's inlining policy. In a few cases, it may act as a temporary workaround + * until the profiling and inlining performed by the HotSpot VM is sufficiently + * improved. + * + * @implNote + * This annotation only takes effect for methods or constructors of classes + * loaded by the boot loader. Annotations on methods or constructors of classes + * loaded outside of the boot loader are ignored. + */ +@Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ForceInline { +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ReservedStackAccess.java Tue Jan 26 09:11:58 2016 +0100 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015, 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