Merge
authorlana
Fri, 02 Feb 2018 01:52:03 +0000
changeset 48718 d68d95009bdb
parent 48717 7a5835a47adf (current diff)
parent 48697 0474300affbd (diff)
child 48719 678e1ec433a0
Merge
.hgtags
make/devkit/createWindowsDevkit.sh
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
src/java.base/share/classes/java/util/ArraysSupport.java
src/java.base/share/native/include/classfile_constants.h
src/java.compiler/share/classes/javax/tools/FileManagerUtils.java
src/jdk.compiler/share/classes/com/sun/tools/javac/util/JDK9Wrappers.java
src/jdk.unsupported/share/classes/sun/reflect/Reflection.java
test/hotspot/jtreg/ProblemList.txt
test/jdk/jdk/internal/reflect/Reflection/GetCallerClassWithDepth.java
test/jdk/sun/reflect/Reflection/GetCallerClassWithDepth.java
test/jdk/sun/security/krb5/auto/principalProperty/TestHosts
--- a/.hgtags	Thu Feb 01 11:58:38 2018 +0100
+++ b/.hgtags	Fri Feb 02 01:52:03 2018 +0000
@@ -460,7 +460,8 @@
 bbd692ad4fa300ecca7939ffbe3b1d5e52a28cc6 jdk-10+33
 89deac44e51517841491ba86ff44aa82a5ca96b3 jdk-10+34
 d8c634b016c628622c9abbdc6bf50509e5dedbec jdk-10+35
-cb54a299aa91419cb7caef3992592e7b22488163 jdk-10+36
+0ee20aad71c4f33c426372b4c8bcc1235ce2ec08 jdk-11+0
+959f2f7cbaa6d2ee45d50029744efb219721576c jdk-10+36
 4f830b447edf04fb4a52151a5ad44d9bb60723cd jdk-10+37
 e569e83139fdfbecfeb3cd9014d560917787f158 jdk-10+38
 5b834ec962366e00d4445352a999a3ac14e26f64 jdk-10+39
--- a/bin/idea.sh	Thu Feb 01 11:58:38 2018 +0100
+++ b/bin/idea.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -30,9 +30,10 @@
 }
 
 SCRIPT_DIR=`dirname $0`
-PWD=`pwd`
+#assume TOP is the dir from which the script has been called
+TOP=`pwd`
 cd $SCRIPT_DIR; SCRIPT_DIR=`pwd`
-cd ../; TOP=`pwd`; cd $PWD
+cd $TOP;
 
 IDEA_OUTPUT=$TOP/.idea
 VERBOSE="false"
@@ -66,30 +67,42 @@
 mkdir $IDEA_OUTPUT || exit 1
 cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd`
 
-IDEA_MAKE="$TOP/make/idea"
+MAKE_DIR="$SCRIPT_DIR/../make"
+IDEA_MAKE="$MAKE_DIR/idea"
 IDEA_TEMPLATE="$IDEA_MAKE/template"
-IML_TEMPLATE="$IDEA_TEMPLATE/jdk.iml"
-ANT_TEMPLATE="$IDEA_TEMPLATE/ant.xml"
-MISC_TEMPLATE="$IDEA_TEMPLATE/misc.xml"
-IDEA_IML="$IDEA_OUTPUT/jdk.iml"
-IDEA_ANT="$IDEA_OUTPUT/ant.xml"
-IDEA_MISC="$IDEA_OUTPUT/misc.xml"
+
+cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
+
+#init template variables
+for file in `ls -p $IDEA_TEMPLATE | grep -v /`; do
+	VAR_SUFFIX=`echo $file | cut -d'.' -f1 | tr [:lower:] [:upper:]`
+    eval "$VAR_SUFFIX"_TEMPLATE="$IDEA_TEMPLATE"/$file
+	eval IDEA_"$VAR_SUFFIX"="$IDEA_OUTPUT"/$file
+done
+
+#override template variables
+if [ -d "$TEMPLATES_OVERRIDE" ] ; then
+    for file in `ls -p "$TEMPLATES_OVERRIDE" | grep -v /`; do
+        cp "$TEMPLATES_OVERRIDE"/$file "$IDEA_OUTPUT"/
+    	VAR_SUFFIX=`echo $file | cut -d'.' -f1 | tr [:lower:] [:upper:]`
+        eval "$VAR_SUFFIX"_TEMPLATE="$TEMPLATES_OVERRIDE"/$file
+    done
+fi
 
 if [ "$VERBOSE" = "true" ] ; then
   echo "output dir: $IDEA_OUTPUT"
   echo "idea template dir: $IDEA_TEMPLATE"
 fi
 
-if [ ! -f "$IML_TEMPLATE" ] ; then
-  echo "FATAL: cannot find $IML_TEMPLATE" >&2; exit 1
+if [ ! -f "$JDK_TEMPLATE" ] ; then
+  echo "FATAL: cannot find $JDK_TEMPLATE" >&2; exit 1
 fi
 
 if [ ! -f "$ANT_TEMPLATE" ] ; then
   echo "FATAL: cannot find $ANT_TEMPLATE" >&2; exit 1
 fi
 
-cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
-cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I make/common idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1
+cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I $MAKE_DIR/.. idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1
 cd $SCRIPT_DIR
 
 . $IDEA_OUTPUT/env.cfg
@@ -118,11 +131,12 @@
   root=$@
   relativePath="`echo "$root" | sed -e s@"$TOP/\(.*$\)"@"\1"@`"
   folder="`echo "$SOURCE_FOLDER" | sed -e s@"\(.*/\)####\(.*\)"@"\1$relativePath\2"@`"
-  printf "%s\n" "$folder" >> $IDEA_IML
+  printf "%s\n" "$folder" >> $IDEA_JDK
 }
 
 ### Generate project iml
-rm -f $IDEA_IML
+
+rm -f $IDEA_JDK
 while IFS= read -r line
 do
   if echo "$line" | egrep "^ .* <sourceFolder.*####" > /dev/null ; then
@@ -133,9 +147,9 @@
       done
     fi
   else
-    printf "%s\n" "$line" >> $IDEA_IML
+    printf "%s\n" "$line" >> $IDEA_JDK
   fi
-done < "$IML_TEMPLATE"
+done < "$JDK_TEMPLATE"
 
 
 MODULE_NAME="        <property name=\"module.name\" value=\"####\" />"
--- a/make/Main.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/Main.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -637,7 +637,7 @@
   # Declare dependencies between hotspot-<variant>* targets
   $(foreach v, $(JVM_VARIANTS), \
       $(eval hotspot-$v: hotspot-$v-gensrc hotspot-$v-libs) \
-      $(eval hotspot-$v-libs: hotspot-$v-gensrc) \
+      $(eval hotspot-$v-libs: hotspot-$v-gensrc java.base-copy) \
   )
 
   hotspot-ide-project: hotspot exploded-image
@@ -691,8 +691,9 @@
   jdk.jdwp.agent-libs: jdk.jdwp.agent-gensrc
 
   # The swing beans need to have java base properly generated to avoid errors
-  # in javadoc.
-  java.desktop-gensrc-src: java.base-gensrc
+  # in javadoc. The X11 wrappers need the java.base include files to have been
+  # copied and processed.
+  java.desktop-gensrc-src: java.base-gensrc java.base-copy
 
   # The annotation processing for jdk.internal.vm.ci and jdk.internal.vm.compiler
   # needs classes from the current JDK.
--- a/make/autoconf/basics.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/basics.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -586,69 +586,71 @@
 AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
 [
   AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
-      [use this devkit for compilers, tools and resources])],
-      [
-        BASIC_FIXUP_PATH([with_devkit])
-        DEVKIT_ROOT="$with_devkit"
-        # Check for a meta data info file in the root of the devkit
-        if test -f "$DEVKIT_ROOT/devkit.info"; then
-          . $DEVKIT_ROOT/devkit.info
-          # This potentially sets the following:
-          # A descriptive name of the devkit
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
-          # Corresponds to --with-extra-path
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
-          # Corresponds to --with-toolchain-path
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
-          # Corresponds to --with-sysroot
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
+      [use this devkit for compilers, tools and resources])])
 
-          # Identifies the Visual Studio version in the devkit
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
-          # The Visual Studio include environment variable
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
-          # The Visual Studio lib environment variable
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
-          # Corresponds to --with-msvcr-dll
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
-          # Corresponds to --with-msvcp-dll
-          BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
-        fi
+  if test "x$with_devkit" = xyes; then
+    AC_MSG_ERROR([--with-devkit must have a value])
+  elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
+    BASIC_FIXUP_PATH([with_devkit])
+    DEVKIT_ROOT="$with_devkit"
+    # Check for a meta data info file in the root of the devkit
+    if test -f "$DEVKIT_ROOT/devkit.info"; then
+      . $DEVKIT_ROOT/devkit.info
+      # This potentially sets the following:
+      # A descriptive name of the devkit
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
+      # Corresponds to --with-extra-path
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
+      # Corresponds to --with-toolchain-path
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
+      # Corresponds to --with-sysroot
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
+
+      # Identifies the Visual Studio version in the devkit
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
+      # The Visual Studio include environment variable
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
+      # The Visual Studio lib environment variable
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
+      # Corresponds to --with-msvcr-dll
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
+      # Corresponds to --with-msvcp-dll
+      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
+    fi
 
-        AC_MSG_CHECKING([for devkit])
-        if test "x$DEVKIT_NAME" != x; then
-          AC_MSG_RESULT([$DEVKIT_NAME in $DEVKIT_ROOT])
-        else
-          AC_MSG_RESULT([$DEVKIT_ROOT])
-        fi
+    AC_MSG_CHECKING([for devkit])
+    if test "x$DEVKIT_NAME" != x; then
+      AC_MSG_RESULT([$DEVKIT_NAME in $DEVKIT_ROOT])
+    else
+      AC_MSG_RESULT([$DEVKIT_ROOT])
+    fi
 
-        BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
+    BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
 
-        # Fallback default of just /bin if DEVKIT_PATH is not defined
-        if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
-          DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
-        fi
-        BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$DEVKIT_TOOLCHAIN_PATH)
+    # Fallback default of just /bin if DEVKIT_PATH is not defined
+    if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
+      DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
+    fi
+    BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$DEVKIT_TOOLCHAIN_PATH)
 
-        # If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
-        # places for backwards compatiblity.
-        if test "x$DEVKIT_SYSROOT" != x; then
-          SYSROOT="$DEVKIT_SYSROOT"
-        elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
-          SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
-        elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
-          SYSROOT="$DEVKIT_ROOT/$host/sys-root"
-        fi
+    # If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
+    # places for backwards compatiblity.
+    if test "x$DEVKIT_SYSROOT" != x; then
+      SYSROOT="$DEVKIT_SYSROOT"
+    elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
+      SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
+    elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
+      SYSROOT="$DEVKIT_ROOT/$host/sys-root"
+    fi
 
-        if test "x$DEVKIT_ROOT" != x; then
-          DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
-          if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-            DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
-          fi
-          AC_SUBST(DEVKIT_LIB_DIR)
-        fi
-      ]
-  )
+    if test "x$DEVKIT_ROOT" != x; then
+      DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+        DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
+      fi
+      AC_SUBST(DEVKIT_LIB_DIR)
+    fi
+  fi
 
   # You can force the sysroot if the sysroot encoded into the compiler tools
   # is not correct.
@@ -1185,9 +1187,6 @@
 
 AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
 [
-  # Did user specify any unknown variables?
-  BASIC_CHECK_LEFTOVER_OVERRIDDEN
-
   AC_MSG_CHECKING([if build directory is on local disk])
   BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUTDIR,
       [OUTPUT_DIR_IS_LOCAL="yes"],
--- a/make/autoconf/buildjdk-spec.gmk.in	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/buildjdk-spec.gmk.in	Fri Feb 02 01:52:03 2018 +0000
@@ -55,6 +55,7 @@
 OPENJDK_TARGET_CPU_BITS := @OPENJDK_BUILD_CPU_BITS@
 OPENJDK_TARGET_CPU_ENDIAN := @OPENJDK_BUILD_CPU_ENDIAN@
 OPENJDK_TARGET_CPU_LEGACY := @OPENJDK_BUILD_CPU_LEGACY@
+OPENJDK_TARGET_OS_INCLUDE_SUBDIR := @OPENJDK_BUILD_OS_INCLUDE_SUBDIR@
 
 HOTSPOT_TARGET_OS := @HOTSPOT_BUILD_OS@
 HOTSPOT_TARGET_OS_TYPE := @HOTSPOT_BUILD_OS_TYPE@
--- a/make/autoconf/configure.ac	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/configure.ac	Fri Feb 02 01:52:03 2018 +0000
@@ -280,6 +280,9 @@
 # This needs to be done after CUSTOM_LATE_HOOK since we can setup custom features.
 HOTSPOT_VALIDATE_JVM_FEATURES
 
+# Did user specify any unknown variables?
+BASIC_CHECK_LEFTOVER_OVERRIDDEN
+
 # We're messing a bit with internal autoconf variables to put the config.status
 # in the output directory instead of the current directory.
 CONFIG_STATUS="$CONFIGURESUPPORT_OUTPUTDIR/config.status"
--- a/make/autoconf/flags.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/flags.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -1162,9 +1162,7 @@
   # Setup some hard coded includes
   $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \
       -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
-      -I${TOPDIR}/src/java.base/share/native/include \
-      -I${TOPDIR}/src/java.base/$OPENJDK_$1_OS/native/include \
-      -I${TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/include \
+      -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
       -I${TOPDIR}/src/java.base/share/native/libjava \
       -I${TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/libjava \
       -I${TOPDIR}/src/hotspot/share/include \
--- a/make/autoconf/generated-configure.sh	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/generated-configure.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -886,6 +886,8 @@
 BOOT_JDK
 JAVA_CHECK
 JAVAC_CHECK
+VERSION_CLASSFILE_MINOR
+VERSION_CLASSFILE_MAJOR
 VENDOR_VERSION_STRING
 VERSION_DATE
 VERSION_IS_GA
@@ -970,6 +972,7 @@
 USERNAME
 TOPDIR
 PATH_SEP
+OPENJDK_BUILD_OS_INCLUDE_SUBDIR
 HOTSPOT_BUILD_CPU_DEFINE
 HOTSPOT_BUILD_CPU_ARCH
 HOTSPOT_BUILD_CPU
@@ -980,6 +983,7 @@
 OPENJDK_BUILD_CPU_ISADIR
 OPENJDK_BUILD_CPU_LEGACY_LIB
 OPENJDK_BUILD_CPU_LEGACY
+OPENJDK_TARGET_OS_INCLUDE_SUBDIR
 HOTSPOT_TARGET_CPU_DEFINE
 HOTSPOT_TARGET_CPU_ARCH
 HOTSPOT_TARGET_CPU
@@ -5113,7 +5117,7 @@
 
 ################################################################################
 # The order of these defines the priority by which we try to find them.
-VALID_VS_VERSIONS="2013 2012 2010"
+VALID_VS_VERSIONS="2013 2012 2010 2015 2017"
 
 VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
 VS_VERSION_INTERNAL_2010=100
@@ -5146,6 +5150,30 @@
 VS_VS_PLATFORM_NAME_2013="v120"
 VS_SDK_PLATFORM_NAME_2013=
 
+VS_DESCRIPTION_2015="Microsoft Visual Studio 2015 - CURRENTLY NOT WORKING"
+VS_VERSION_INTERNAL_2015=140
+VS_MSVCR_2015=vcruntime140.dll
+VS_MSVCP_2015=msvcp140.dll
+VS_ENVVAR_2015="VS140COMNTOOLS"
+VS_VS_INSTALLDIR_2015="Microsoft Visual Studio 14.0"
+VS_SDK_INSTALLDIR_2015=
+VS_VS_PLATFORM_NAME_2015="v140"
+VS_SDK_PLATFORM_NAME_2015=
+# The vcvars of 2015 breaks if 2017 is also installed. Work around this by
+# explicitly specifying Windows Kit 8.1 to be used.
+VS_ENV_ARGS_2015="8.1"
+
+VS_DESCRIPTION_2017="Microsoft Visual Studio 2017 - CURRENTLY NOT WORKING"
+VS_VERSION_INTERNAL_2017=141
+VS_MSVCR_2017=vcruntime140.dll
+VS_MSVCP_2017=msvcp140.dll
+VS_ENVVAR_2017="VS150COMNTOOLS"
+VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
+VS_EDITIONS_2017="Community Professional Enterprise"
+VS_SDK_INSTALLDIR_2017=
+VS_VS_PLATFORM_NAME_2017="v141"
+VS_SDK_PLATFORM_NAME_2017=
+
 ################################################################################
 
 
@@ -5187,7 +5215,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1516225089
+DATE_WHEN_GENERATED=1517274450
 
 ###############################################################################
 #
@@ -16318,6 +16346,14 @@
   fi
 
 
+  # For historical reasons, the OS include directories have odd names.
+  OPENJDK_TARGET_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
+  if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
+    OPENJDK_TARGET_OS_INCLUDE_SUBDIR="win32"
+  elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+    OPENJDK_TARGET_OS_INCLUDE_SUBDIR="darwin"
+  fi
+
 
 
   # Also store the legacy naming of the cpu.
@@ -16469,6 +16505,14 @@
   fi
 
 
+  # For historical reasons, the OS include directories have odd names.
+  OPENJDK_BUILD_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
+  if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
+    OPENJDK_BUILD_OS_INCLUDE_SUBDIR="win32"
+  elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+    OPENJDK_BUILD_OS_INCLUDE_SUBDIR="darwin"
+  fi
+
 
 
 
@@ -17093,6 +17137,12 @@
 # Check whether --with-devkit was given.
 if test "${with_devkit+set}" = set; then :
   withval=$with_devkit;
+fi
+
+
+  if test "x$with_devkit" = xyes; then
+    as_fn_error $? "--with-devkit must have a value" "$LINENO" 5
+  elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
 
   # Only process if variable expands to non-empty
 
@@ -17225,77 +17275,77 @@
     fi
   fi
 
-        DEVKIT_ROOT="$with_devkit"
-        # Check for a meta data info file in the root of the devkit
-        if test -f "$DEVKIT_ROOT/devkit.info"; then
-          . $DEVKIT_ROOT/devkit.info
-          # This potentially sets the following:
-          # A descriptive name of the devkit
+    DEVKIT_ROOT="$with_devkit"
+    # Check for a meta data info file in the root of the devkit
+    if test -f "$DEVKIT_ROOT/devkit.info"; then
+      . $DEVKIT_ROOT/devkit.info
+      # This potentially sets the following:
+      # A descriptive name of the devkit
 
   if test "x$DEVKIT_NAME" = x; then
     eval DEVKIT_NAME="\${DEVKIT_NAME_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # Corresponds to --with-extra-path
+      # Corresponds to --with-extra-path
 
   if test "x$DEVKIT_EXTRA_PATH" = x; then
     eval DEVKIT_EXTRA_PATH="\${DEVKIT_EXTRA_PATH_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # Corresponds to --with-toolchain-path
+      # Corresponds to --with-toolchain-path
 
   if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
     eval DEVKIT_TOOLCHAIN_PATH="\${DEVKIT_TOOLCHAIN_PATH_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # Corresponds to --with-sysroot
+      # Corresponds to --with-sysroot
 
   if test "x$DEVKIT_SYSROOT" = x; then
     eval DEVKIT_SYSROOT="\${DEVKIT_SYSROOT_${OPENJDK_TARGET_CPU}}"
   fi
 
 
-          # Identifies the Visual Studio version in the devkit
+      # Identifies the Visual Studio version in the devkit
 
   if test "x$DEVKIT_VS_VERSION" = x; then
     eval DEVKIT_VS_VERSION="\${DEVKIT_VS_VERSION_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # The Visual Studio include environment variable
+      # The Visual Studio include environment variable
 
   if test "x$DEVKIT_VS_INCLUDE" = x; then
     eval DEVKIT_VS_INCLUDE="\${DEVKIT_VS_INCLUDE_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # The Visual Studio lib environment variable
+      # The Visual Studio lib environment variable
 
   if test "x$DEVKIT_VS_LIB" = x; then
     eval DEVKIT_VS_LIB="\${DEVKIT_VS_LIB_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # Corresponds to --with-msvcr-dll
+      # Corresponds to --with-msvcr-dll
 
   if test "x$DEVKIT_MSVCR_DLL" = x; then
     eval DEVKIT_MSVCR_DLL="\${DEVKIT_MSVCR_DLL_${OPENJDK_TARGET_CPU}}"
   fi
 
-          # Corresponds to --with-msvcp-dll
+      # Corresponds to --with-msvcp-dll
 
   if test "x$DEVKIT_MSVCP_DLL" = x; then
     eval DEVKIT_MSVCP_DLL="\${DEVKIT_MSVCP_DLL_${OPENJDK_TARGET_CPU}}"
   fi
 
-        fi
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for devkit" >&5
+    fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for devkit" >&5
 $as_echo_n "checking for devkit... " >&6; }
-        if test "x$DEVKIT_NAME" != x; then
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_NAME in $DEVKIT_ROOT" >&5
+    if test "x$DEVKIT_NAME" != x; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_NAME in $DEVKIT_ROOT" >&5
 $as_echo "$DEVKIT_NAME in $DEVKIT_ROOT" >&6; }
-        else
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_ROOT" >&5
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_ROOT" >&5
 $as_echo "$DEVKIT_ROOT" >&6; }
-        fi
+    fi
 
 
   if test "x$DEVKIT_EXTRA_PATH" != x; then
@@ -17307,10 +17357,10 @@
   fi
 
 
-        # Fallback default of just /bin if DEVKIT_PATH is not defined
-        if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
-          DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
-        fi
+    # Fallback default of just /bin if DEVKIT_PATH is not defined
+    if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
+      DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
+    fi
 
   if test "x$DEVKIT_TOOLCHAIN_PATH" != x; then
     if test "x$TOOLCHAIN_PATH" = x; then
@@ -17321,27 +17371,24 @@
   fi
 
 
-        # If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
-        # places for backwards compatiblity.
-        if test "x$DEVKIT_SYSROOT" != x; then
-          SYSROOT="$DEVKIT_SYSROOT"
-        elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
-          SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
-        elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
-          SYSROOT="$DEVKIT_ROOT/$host/sys-root"
-        fi
-
-        if test "x$DEVKIT_ROOT" != x; then
-          DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
-          if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-            DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
-          fi
-
-        fi
-
-
-fi
-
+    # If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
+    # places for backwards compatiblity.
+    if test "x$DEVKIT_SYSROOT" != x; then
+      SYSROOT="$DEVKIT_SYSROOT"
+    elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
+      SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
+    elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
+      SYSROOT="$DEVKIT_ROOT/$host/sys-root"
+    fi
+
+    if test "x$DEVKIT_ROOT" != x; then
+      DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+        DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
+      fi
+
+    fi
+  fi
 
   # You can force the sysroot if the sysroot encoded into the compiler tools
   # is not correct.
@@ -25524,6 +25571,10 @@
     VENDOR_VERSION_STRING="$with_vendor_version_string"
   fi
 
+  # We could define --with flags for these, if really needed
+  VERSION_CLASSFILE_MAJOR="$DEFAULT_VERSION_CLASSFILE_MAJOR"
+  VERSION_CLASSFILE_MINOR="$DEFAULT_VERSION_CLASSFILE_MINOR"
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version string" >&5
 $as_echo_n "checking for version string... " >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VERSION_STRING" >&5
@@ -25545,6 +25596,9 @@
 
 
 
+
+
+
 ###############################################################################
 #
 # Setup BootJDK, used to bootstrap the build.
@@ -32272,7 +32326,11 @@
   elif test "x$DEVKIT_VS_VERSION" != x; then
     VS_VERSION=$DEVKIT_VS_VERSION
     TOOLCHAIN_VERSION=$VS_VERSION
-    eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
+    # If the devkit has a name, use that as description
+    VS_DESCRIPTION="$DEVKIT_NAME"
+    if test "x$VS_DESCRIPTION" = x; then
+      eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
+    fi
     eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
     eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
     eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
@@ -32340,7 +32398,9 @@
   eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
   eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
   eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
+  eval VS_EDITIONS="\${VS_EDITIONS_${VS_VERSION}}"
   eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
+  eval VS_ENV_ARGS="\${VS_ENV_ARGS_${VS_VERSION}}"
 
   # When using --with-tools-dir, assume it points to the correct and default
   # version of Visual Studio or that --with-toolchain-version was also set.
@@ -32351,12 +32411,6 @@
     VS_BASE="$with_tools_dir/../.."
     METHOD="--with-tools-dir"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
-
 
   windows_path="$VS_BASE"
   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -32367,19 +32421,42 @@
     VS_BASE="$unix_path"
   fi
 
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
+
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
 $as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
       fi
     fi
   fi
@@ -32390,12 +32467,6 @@
     VS_BASE="$with_tools_dir/../../.."
     METHOD="--with-tools-dir"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
-
 
   windows_path="$VS_BASE"
   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -32406,19 +32477,42 @@
     VS_BASE="$unix_path"
   fi
 
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
+
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
 $as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
       fi
     fi
   fi
@@ -32437,7 +32531,6 @@
   fi
 
   VS_ENV_CMD=""
-  VS_ENV_ARGS=""
 
   if test "x$VS_COMNTOOLS" != x; then
 
@@ -32446,12 +32539,6 @@
     VS_BASE="$VS_COMNTOOLS/../.."
     METHOD="$VS_COMNTOOLS_VAR variable"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
-
 
   windows_path="$VS_BASE"
   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -32462,19 +32549,42 @@
     VS_BASE="$unix_path"
   fi
 
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
+
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
 $as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
       fi
     fi
   fi
@@ -32487,12 +32597,6 @@
     VS_BASE="$PROGRAMFILES/$VS_INSTALL_DIR"
     METHOD="well-known name"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
-
 
   windows_path="$VS_BASE"
   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -32503,19 +32607,42 @@
     VS_BASE="$unix_path"
   fi
 
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
+
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
 $as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
       fi
     fi
   fi
@@ -32530,12 +32657,6 @@
     VS_BASE="$PROGRAMFILES_X86/$VS_INSTALL_DIR"
     METHOD="well-known name"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
-
 
   windows_path="$VS_BASE"
   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -32546,19 +32667,42 @@
     VS_BASE="$unix_path"
   fi
 
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
+
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
 $as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
       fi
     fi
   fi
@@ -32570,11 +32714,61 @@
     VS_BASE="C:/Program Files/$VS_INSTALL_DIR"
     METHOD="well-known name"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
+
+  windows_path="$VS_BASE"
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+    unix_path=`$CYGPATH -u "$windows_path"`
+    VS_BASE="$unix_path"
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+    VS_BASE="$unix_path"
+  fi
+
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
+
+    if test -d "$VS_BASE"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
+        eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
+      fi
+    fi
+  fi
+
+
+  if test "x$VS_ENV_CMD" = x; then
+    VS_VERSION="${VS_VERSION}"
+    VS_BASE="C:/Program Files (x86)/$VS_INSTALL_DIR"
+    METHOD="well-known name"
 
 
   windows_path="$VS_BASE"
@@ -32586,58 +32780,42 @@
     VS_BASE="$unix_path"
   fi
 
-    if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
-        eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
-      fi
-    fi
-  fi
-
-
-  if test "x$VS_ENV_CMD" = x; then
-    VS_VERSION="${VS_VERSION}"
-    VS_BASE="C:/Program Files (x86)/$VS_INSTALL_DIR"
-    METHOD="well-known name"
-
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
-    fi
-
-
-  windows_path="$VS_BASE"
-  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
-    unix_path=`$CYGPATH -u "$windows_path"`
-    VS_BASE="$unix_path"
-  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
-    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
-    VS_BASE="$unix_path"
-  fi
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
+    fi
 
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
 $as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
+$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
-$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
-$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
       fi
     fi
   fi
@@ -32890,6 +33068,11 @@
     fi
   done
 
+  TOOLCHAIN_DESCRIPTION="$VS_DESCRIPTION"
+  if test "$TOOLCHAIN_VERSION" -gt 2013; then
+    UNSUPPORTED_TOOLCHAIN_VERSION=yes
+  fi
+
 
   # If we have a devkit, skip all of the below.
   if test "x$DEVKIT_VS_VERSION" = x; then
@@ -33222,6 +33405,9 @@
       # This will end up something like:
       # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
       $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
+      # In some cases, the VS_ENV_CMD will change directory, change back so
+      # the set-vs-env.sh ends up in the right place.
+      $ECHO 'cd %~dp0' >> $EXTRACT_VC_ENV_BAT_FILE
       # These will end up something like:
       # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
       # The trailing space for everyone except PATH is no typo, but is needed due
@@ -33643,7 +33829,7 @@
     if test "x$XCODE_VERSION_OUTPUT" != x; then
       # For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
       TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
-      TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode"
+      TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
     else
       # Currently we do not define this for other toolchains. This might change as the need arise.
       TOOLCHAIN_VERSION=
@@ -52817,9 +53003,7 @@
   # Setup some hard coded includes
   COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
       -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
-      -I${TOPDIR}/src/java.base/share/native/include \
-      -I${TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \
-      -I${TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include \
+      -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
       -I${TOPDIR}/src/java.base/share/native/libjava \
       -I${TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/libjava \
       -I${TOPDIR}/src/hotspot/share/include \
@@ -53700,9 +53884,7 @@
   # Setup some hard coded includes
   OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK \
       -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
-      -I${TOPDIR}/src/java.base/share/native/include \
-      -I${TOPDIR}/src/java.base/$OPENJDK_BUILD_OS/native/include \
-      -I${TOPDIR}/src/java.base/$OPENJDK_BUILD_OS_TYPE/native/include \
+      -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
       -I${TOPDIR}/src/java.base/share/native/libjava \
       -I${TOPDIR}/src/java.base/$OPENJDK_BUILD_OS_TYPE/native/libjava \
       -I${TOPDIR}/src/hotspot/share/include \
@@ -55865,7 +56047,6 @@
   MSVC_DLL=
 
   if test "x$MSVC_DLL" = x; then
-    # Probe: Using well-known location from Visual Studio 10.0
     if test "x$VCINSTALLDIR" != x; then
       CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
 
@@ -55878,15 +56059,27 @@
     CYGWIN_VC_INSTALL_DIR="$unix_path"
   fi
 
-      if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-        POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
-      else
-        POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
-      fi
-      $ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
+      if test "$VS_VERSION" -lt 2017; then
+        # Probe: Using well-known location from Visual Studio 12.0 and older
+        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+          POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        else
+          POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        fi
+      else
+        # Probe: Using well-known location from VS 2017
+        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+          POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+        else
+          POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+        fi
+      fi
+      # In case any of the above finds more than one file, loop over them.
+      for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
+        $ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
 
   DLL_NAME="$DLL_NAME"
-  POSSIBLE_MSVC_DLL="$POSSIBLE_MSVC_DLL"
+  POSSIBLE_MSVC_DLL="$possible_msvc_dll"
   METHOD="well-known location in VCINSTALLDIR"
   if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD" >&5
@@ -56059,6 +56252,7 @@
     fi
   fi
 
+      done
     fi
   fi
 
@@ -57214,7 +57408,6 @@
   MSVC_DLL=
 
   if test "x$MSVC_DLL" = x; then
-    # Probe: Using well-known location from Visual Studio 10.0
     if test "x$VCINSTALLDIR" != x; then
       CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
 
@@ -57227,15 +57420,27 @@
     CYGWIN_VC_INSTALL_DIR="$unix_path"
   fi
 
-      if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-        POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
-      else
-        POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
-      fi
-      $ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
+      if test "$VS_VERSION" -lt 2017; then
+        # Probe: Using well-known location from Visual Studio 12.0 and older
+        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+          POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        else
+          POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        fi
+      else
+        # Probe: Using well-known location from VS 2017
+        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+          POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+        else
+          POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+        fi
+      fi
+      # In case any of the above finds more than one file, loop over them.
+      for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
+        $ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
 
   DLL_NAME="$DLL_NAME"
-  POSSIBLE_MSVC_DLL="$POSSIBLE_MSVC_DLL"
+  POSSIBLE_MSVC_DLL="$possible_msvc_dll"
   METHOD="well-known location in VCINSTALLDIR"
   if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD" >&5
@@ -57408,6 +57613,7 @@
     fi
   fi
 
+      done
     fi
   fi
 
@@ -68877,16 +69083,6 @@
   fi
 
 
-  # Did user specify any unknown variables?
-
-  if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
-    # Replace the separating ! with spaces before presenting for end user.
-    unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The following variables might be unknown to configure: $unknown_variables" >&5
-$as_echo "$as_me: WARNING: The following variables might be unknown to configure: $unknown_variables" >&2;}
-  fi
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5
 $as_echo_n "checking if build directory is on local disk... " >&6; }
 
@@ -68968,6 +69164,16 @@
   done
 
 
+# Did user specify any unknown variables?
+
+  if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
+    # Replace the separating ! with spaces before presenting for end user.
+    unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The following variables might be unknown to configure: $unknown_variables" >&5
+$as_echo "$as_me: WARNING: The following variables might be unknown to configure: $unknown_variables" >&2;}
+  fi
+
+
 # We're messing a bit with internal autoconf variables to put the config.status
 # in the output directory instead of the current directory.
 CONFIG_STATUS="$CONFIGURESUPPORT_OUTPUTDIR/config.status"
@@ -70200,10 +70406,7 @@
     printf "* Environment:    $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n"
   fi
   printf "* Boot JDK:       $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
-  if test "x$TOOLCHAIN_VERSION" != "x"; then
-    print_version=" $TOOLCHAIN_VERSION"
-  fi
-  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
+  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
   printf "* C Compiler:     Version $CC_VERSION_NUMBER (at $CC)\n"
   printf "* C++ Compiler:   Version $CXX_VERSION_NUMBER (at $CXX)\n"
 
@@ -70251,6 +70454,12 @@
     printf "\n"
   fi
 
+  if test "x$UNSUPPORTED_TOOLCHAIN_VERSION" = "xyes"; then
+    printf "WARNING: The toolchain version used is known to have issues. Please\n"
+    printf "consider using a supported version unless you know what you are doing.\n"
+    printf "\n"
+  fi
+
 
 
   # Locate config.log.
--- a/make/autoconf/help.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/help.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -242,10 +242,7 @@
     printf "* Environment:    $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n"
   fi
   printf "* Boot JDK:       $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
-  if test "x$TOOLCHAIN_VERSION" != "x"; then
-    print_version=" $TOOLCHAIN_VERSION"
-  fi
-  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
+  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
   printf "* C Compiler:     Version $CC_VERSION_NUMBER (at $CC)\n"
   printf "* C++ Compiler:   Version $CXX_VERSION_NUMBER (at $CXX)\n"
 
@@ -292,6 +289,12 @@
     printf "You should run without '--no-create | -n' to create the configuration.\n"
     printf "\n"
   fi
+
+  if test "x$UNSUPPORTED_TOOLCHAIN_VERSION" = "xyes"; then
+    printf "WARNING: The toolchain version used is known to have issues. Please\n"
+    printf "consider using a supported version unless you know what you are doing.\n"
+    printf "\n"
+  fi
 ])
 
 AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS],
--- a/make/autoconf/jdk-version.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/jdk-version.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -381,6 +381,10 @@
     VENDOR_VERSION_STRING="$with_vendor_version_string"
   fi
 
+  # We could define --with flags for these, if really needed
+  VERSION_CLASSFILE_MAJOR="$DEFAULT_VERSION_CLASSFILE_MAJOR"
+  VERSION_CLASSFILE_MINOR="$DEFAULT_VERSION_CLASSFILE_MINOR"
+
   AC_MSG_CHECKING([for version string])
   AC_MSG_RESULT([$VERSION_STRING])
 
@@ -398,4 +402,7 @@
   AC_SUBST(VERSION_IS_GA)
   AC_SUBST(VERSION_DATE)
   AC_SUBST(VENDOR_VERSION_STRING)
+  AC_SUBST(VERSION_CLASSFILE_MAJOR)
+  AC_SUBST(VERSION_CLASSFILE_MINOR)
+
 ])
--- a/make/autoconf/platform.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/platform.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -478,6 +478,14 @@
   fi
   AC_SUBST(HOTSPOT_$1_CPU_DEFINE)
 
+  # For historical reasons, the OS include directories have odd names.
+  OPENJDK_$1_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
+  if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
+    OPENJDK_$1_OS_INCLUDE_SUBDIR="win32"
+  elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+    OPENJDK_$1_OS_INCLUDE_SUBDIR="darwin"
+  fi
+  AC_SUBST(OPENJDK_$1_OS_INCLUDE_SUBDIR)
 ])
 
 AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
--- a/make/autoconf/spec.gmk.in	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/spec.gmk.in	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -78,6 +78,7 @@
 OPENJDK_TARGET_CPU_LEGACY:=@OPENJDK_TARGET_CPU_LEGACY@
 OPENJDK_TARGET_CPU_LEGACY_LIB:=@OPENJDK_TARGET_CPU_LEGACY_LIB@
 OPENJDK_TARGET_CPU_OSARCH:=@OPENJDK_TARGET_CPU_OSARCH@
+OPENJDK_TARGET_OS_INCLUDE_SUBIDR:=@OPENJDK_TARGET_OS_INCLUDE_SUBDIR@
 
 HOTSPOT_TARGET_OS := @HOTSPOT_TARGET_OS@
 HOTSPOT_TARGET_OS_TYPE := @HOTSPOT_TARGET_OS_TYPE@
@@ -100,6 +101,8 @@
 OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@
 OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@
 
+OPENJDK_BUILD_OS_INCLUDE_SUBIDR:=@OPENJDK_TARGET_OS_INCLUDE_SUBDIR@
+
 # Target platform value in ModuleTarget class file attribute.
 OPENJDK_MODULE_TARGET_PLATFORM:=@OPENJDK_MODULE_TARGET_PLATFORM@
 
@@ -189,6 +192,10 @@
 # Vendor version string
 VENDOR_VERSION_STRING := @VENDOR_VERSION_STRING@
 
+# Class-file version
+VERSION_CLASSFILE_MAJOR := @VERSION_CLASSFILE_MAJOR@
+VERSION_CLASSFILE_MINOR := @VERSION_CLASSFILE_MINOR@
+
 # Convenience CFLAGS settings for passing version information into native programs.
 VERSION_CFLAGS := \
     -DVERSION_FEATURE=$(VERSION_FEATURE) \
@@ -204,6 +211,8 @@
     -DVERSION_SPECIFICATION='"$(VERSION_SPECIFICATION)"' \
     -DVERSION_DATE='"$(VERSION_DATE)"' \
     -DVENDOR_VERSION_STRING='"$(VENDOR_VERSION_STRING)"' \
+    -DVERSION_CLASSFILE_MAJOR=$(VERSION_CLASSFILE_MAJOR) \
+    -DVERSION_CLASSFILE_MINOR=$(VERSION_CLASSFILE_MINOR) \
     #
 
 ifneq ($(COMPANY_NAME),)
@@ -604,6 +613,8 @@
 INTERIM_LANGTOOLS_MODULES := $(addsuffix .interim, $(INTERIM_LANGTOOLS_BASE_MODULES))
 INTERIM_LANGTOOLS_ADD_EXPORTS := \
     --add-exports java.base/sun.reflect.annotation=jdk.compiler.interim \
+    --add-exports java.base/jdk.internal.jmod=jdk.compiler.interim \
+    --add-exports java.base/jdk.internal.misc=jdk.compiler.interim \
     #
 INTERIM_LANGTOOLS_MODULES_COMMA := $(strip $(subst $(SPACE),$(COMMA),$(strip \
     $(INTERIM_LANGTOOLS_MODULES))))
--- a/make/autoconf/toolchain.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/toolchain.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -286,7 +286,7 @@
     if test "x$XCODE_VERSION_OUTPUT" != x; then
       # For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
       TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
-      TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode"
+      TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
     else
       # Currently we do not define this for other toolchains. This might change as the need arise.
       TOOLCHAIN_VERSION=
--- a/make/autoconf/toolchain_windows.m4	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/toolchain_windows.m4	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 
 ################################################################################
 # The order of these defines the priority by which we try to find them.
-VALID_VS_VERSIONS="2013 2012 2010"
+VALID_VS_VERSIONS="2013 2012 2010 2015 2017"
 
 VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
 VS_VERSION_INTERNAL_2010=100
@@ -58,6 +58,30 @@
 VS_VS_PLATFORM_NAME_2013="v120"
 VS_SDK_PLATFORM_NAME_2013=
 
+VS_DESCRIPTION_2015="Microsoft Visual Studio 2015 - CURRENTLY NOT WORKING"
+VS_VERSION_INTERNAL_2015=140
+VS_MSVCR_2015=vcruntime140.dll
+VS_MSVCP_2015=msvcp140.dll
+VS_ENVVAR_2015="VS140COMNTOOLS"
+VS_VS_INSTALLDIR_2015="Microsoft Visual Studio 14.0"
+VS_SDK_INSTALLDIR_2015=
+VS_VS_PLATFORM_NAME_2015="v140"
+VS_SDK_PLATFORM_NAME_2015=
+# The vcvars of 2015 breaks if 2017 is also installed. Work around this by
+# explicitly specifying Windows Kit 8.1 to be used.
+VS_ENV_ARGS_2015="8.1"
+
+VS_DESCRIPTION_2017="Microsoft Visual Studio 2017 - CURRENTLY NOT WORKING"
+VS_VERSION_INTERNAL_2017=141
+VS_MSVCR_2017=vcruntime140.dll
+VS_MSVCP_2017=msvcp140.dll
+VS_ENVVAR_2017="VS150COMNTOOLS"
+VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
+VS_EDITIONS_2017="Community Professional Enterprise"
+VS_SDK_INSTALLDIR_2017=
+VS_VS_PLATFORM_NAME_2017="v141"
+VS_SDK_PLATFORM_NAME_2017=
+
 ################################################################################
 
 AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
@@ -67,23 +91,41 @@
     VS_BASE="$2"
     METHOD="$3"
 
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
-      VCVARSFILE="vc/bin/vcvars32.bat"
-    else
-      VCVARSFILE="vc/bin/amd64/vcvars64.bat"
+    BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
+    # In VS 2017, the default installation is in a subdir named after the edition.
+    # Find the first one present and use that.
+    if test "x$VS_EDITIONS" != x; then
+      for edition in $VS_EDITIONS; do
+        if test -d "$VS_BASE/$edition"; then
+          VS_BASE="$VS_BASE/$edition"
+          break
+        fi
+      done
     fi
 
-    BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
     if test -d "$VS_BASE"; then
-      if test -f "$VS_BASE/$VCVARSFILE"; then
-        AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
-        VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
-        # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
-        # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
+      AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
+      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
+      else
+        VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
+            vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+      fi
+
+      for VCVARSFILE in $VCVARSFILES; do
+        if test -f "$VS_BASE/$VCVARSFILE"; then
+          VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
+          break
+        fi
+      done
+
+      if test "x$VS_ENV_CMD" = x; then
+        AC_MSG_NOTICE([Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring])
+      else
+        # PLATFORM_TOOLSET is used during the compilation of the freetype sources
+        # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
+        # 'v110' or 'v120' for VS 2010, 2012 or VS2013
         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
-      else
-        AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
-        AC_MSG_NOTICE([Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring])
       fi
     fi
   fi
@@ -133,7 +175,9 @@
   eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
   eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
   eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
+  eval VS_EDITIONS="\${VS_EDITIONS_${VS_VERSION}}"
   eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
+  eval VS_ENV_ARGS="\${VS_ENV_ARGS_${VS_VERSION}}"
 
   # When using --with-tools-dir, assume it points to the correct and default
   # version of Visual Studio or that --with-toolchain-version was also set.
@@ -153,7 +197,6 @@
   fi
 
   VS_ENV_CMD=""
-  VS_ENV_ARGS=""
 
   if test "x$VS_COMNTOOLS" != x; then
     TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
@@ -213,7 +256,11 @@
   elif test "x$DEVKIT_VS_VERSION" != x; then
     VS_VERSION=$DEVKIT_VS_VERSION
     TOOLCHAIN_VERSION=$VS_VERSION
-    eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
+    # If the devkit has a name, use that as description
+    VS_DESCRIPTION="$DEVKIT_NAME"
+    if test "x$VS_DESCRIPTION" = x; then
+      eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
+    fi
     eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
     eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
     eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
@@ -267,6 +314,11 @@
       break
     fi
   done
+
+  TOOLCHAIN_DESCRIPTION="$VS_DESCRIPTION"
+  if test "$TOOLCHAIN_VERSION" -gt 2013; then
+    UNSUPPORTED_TOOLCHAIN_VERSION=yes
+  fi
 ])
 
 ################################################################################
@@ -320,6 +372,9 @@
       # This will end up something like:
       # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
       $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
+      # In some cases, the VS_ENV_CMD will change directory, change back so
+      # the set-vs-env.sh ends up in the right place.
+      $ECHO 'cd %~dp0' >> $EXTRACT_VC_ENV_BAT_FILE
       # These will end up something like:
       # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
       # The trailing space for everyone except PATH is no typo, but is needed due
@@ -483,18 +538,30 @@
   MSVC_DLL=
 
   if test "x$MSVC_DLL" = x; then
-    # Probe: Using well-known location from Visual Studio 10.0
     if test "x$VCINSTALLDIR" != x; then
       CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
       BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR)
-      if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-        POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+      if test "$VS_VERSION" -lt 2017; then
+        # Probe: Using well-known location from Visual Studio 12.0 and older
+        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+          POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        else
+          POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        fi
       else
-        POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+        # Probe: Using well-known location from VS 2017
+        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+          POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+        else
+          POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+        fi
       fi
-      $ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
-      TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
-          [well-known location in VCINSTALLDIR])
+      # In case any of the above finds more than one file, loop over them.
+      for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
+        $ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
+        TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$possible_msvc_dll],
+            [well-known location in VCINSTALLDIR])
+      done
     fi
   fi
 
@@ -576,7 +643,7 @@
     TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
     if test "x$MSVC_DLL" = x; then
       AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
-    fi  
+    fi
     MSVCR_DLL="$MSVC_DLL"
   else
     TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
@@ -599,7 +666,7 @@
       TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
       if test "x$MSVC_DLL" = x; then
         AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
-      fi  
+      fi
       MSVCP_DLL="$MSVC_DLL"
     else
       TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
--- a/make/autoconf/version-numbers	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/autoconf/version-numbers	Fri Feb 02 01:52:03 2018 +0000
@@ -30,6 +30,8 @@
 DEFAULT_VERSION_UPDATE=0
 DEFAULT_VERSION_PATCH=0
 DEFAULT_VERSION_DATE=2018-03-20
+DEFAULT_VERSION_CLASSFILE_MAJOR=55  # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
+DEFAULT_VERSION_CLASSFILE_MINOR=0
 
 LAUNCHER_NAME=openjdk
 PRODUCT_NAME=OpenJDK
--- a/make/common/SetupJavaCompilers.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/common/SetupJavaCompilers.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -26,13 +26,16 @@
 ifndef _SETUP_GMK
 _SETUP_GMK := 1
 
+# Include custom extension hook
+$(eval $(call IncludeCustomExtension, common/SetupJavaCompilers.gmk))
+
 include JavaCompilation.gmk
 
-DISABLE_WARNINGS := -Xlint:all,-deprecation,-removal,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough,-try,-varargs,-empty,-finally
+DISABLE_WARNINGS ?= -Xlint:all,-deprecation,-removal,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough,-try,-varargs,-empty,-finally
 
 # If warnings needs to be non-fatal for testing purposes use a command like:
 # make JAVAC_WARNINGS="-Xlint:all -Xmaxwarns 10000"
-JAVAC_WARNINGS := -Xlint:all -Werror
+JAVAC_WARNINGS ?= -Xlint:all -Werror
 
 # The BOOT_JAVAC setup uses the boot jdk compiler to compile the tools
 # and the interim javac, to be run by the boot jdk.
@@ -69,7 +72,7 @@
 $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \
     JVM := $(JAVA_JAVAC), \
     JAVAC := $(NEW_JAVAC), \
-    FLAGS := -source 10 -target 10 --doclint-format html5 \
+    FLAGS := -source 11 -target 11 --doclint-format html5 \
         -encoding ascii -XDignore.symbol.file=true $(JAVAC_WARNINGS), \
     SERVER_DIR := $(SJAVAC_SERVER_DIR), \
     SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
@@ -79,7 +82,7 @@
 $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE_NOWARNINGS, \
     JVM := $(JAVA_JAVAC), \
     JAVAC := $(NEW_JAVAC), \
-    FLAGS := -source 10 -target 10 \
+    FLAGS := -source 11 -target 11 \
         -encoding ascii -XDignore.symbol.file=true $(DISABLE_WARNINGS), \
     SERVER_DIR := $(SJAVAC_SERVER_DIR), \
     SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
--- a/make/conf/jib-profiles.js	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/conf/jib-profiles.js	Fri Feb 02 01:52:03 2018 +0000
@@ -829,7 +829,7 @@
         jtreg: {
             server: "javare",
             revision: "4.2",
-            build_number: "b10",
+            build_number: "b11",
             checksum_file: "MD5_VALUES",
             file: "jtreg_bin-4.2.zip",
             environment_name: "JT_HOME",
--- a/make/copy/Copy-java.base.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/copy/Copy-java.base.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -24,6 +24,7 @@
 #
 
 include CopyCommon.gmk
+include TextFileProcessing.gmk
 
 $(eval $(call IncludeCustomExtension, copy/Copy-java.base.gmk))
 
@@ -244,3 +245,16 @@
 endif
 
 ################################################################################
+# Generate classfile_constants.h
+
+$(eval $(call SetupTextFileProcessing, CREATE_CLASSFILE_CONSTANTS_H, \
+    SOURCE_FILES := $(TOPDIR)/src/java.base/share/native/include/classfile_constants.h.template, \
+    OUTPUT_FILE := $(SUPPORT_OUTPUTDIR)/modules_include/java.base/classfile_constants.h, \
+    REPLACEMENTS := \
+        @@VERSION_CLASSFILE_MAJOR@@ => $(VERSION_CLASSFILE_MAJOR) ; \
+        @@VERSION_CLASSFILE_MINOR@@ => $(VERSION_CLASSFILE_MINOR) ; , \
+))
+
+TARGETS += $(CREATE_CLASSFILE_CONSTANTS_H)
+
+################################################################################
--- a/make/copy/CopyCommon.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/copy/CopyCommon.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -39,20 +39,12 @@
   $(eval $(call SetupCopyFiles, COPY_EXPORTED_INCLUDE, \
       SRC := $(INCLUDE_SOURCE_DIR), \
       DEST := $(INCLUDE_TARGET_DIR), \
-      FILES := $(shell $(FIND) $(INCLUDE_SOURCE_DIR) -type f), \
+      FILES := $(filter %.h, $(call CacheFind, $(INCLUDE_SOURCE_DIR))), \
   ))
 
   TARGETS += $(COPY_EXPORTED_INCLUDE)
 endif
 
-# For historical reasons, the OS include directories have odd names.
-INCLUDE_TARGET_OS_SUBDIR := $(OPENJDK_TARGET_OS)
-ifeq ($(OPENJDK_TARGET_OS), windows)
-  INCLUDE_TARGET_OS_SUBDIR := win32
-else ifeq ($(OPENJDK_TARGET_OS), macosx)
-  INCLUDE_TARGET_OS_SUBDIR := darwin
-endif
-
 # Use the most specific of OS and OS_TYPE.
 INCLUDE_SOURCE_OS_DIR := $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS)/native/include
 ifeq ($(wildcard $(INCLUDE_SOURCE_OS_DIR)/*), )
@@ -62,8 +54,8 @@
 ifneq ($(wildcard $(INCLUDE_SOURCE_OS_DIR)/*), )
   $(eval $(call SetupCopyFiles, COPY_EXPORTED_INCLUDE_OS, \
       SRC := $(INCLUDE_SOURCE_OS_DIR), \
-      DEST := $(INCLUDE_TARGET_DIR)/$(INCLUDE_TARGET_OS_SUBDIR), \
-      FILES := $(shell $(FIND) $(INCLUDE_SOURCE_OS_DIR) -type f), \
+      DEST := $(INCLUDE_TARGET_DIR)/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR), \
+      FILES := $(filter %.h, $(call CacheFind, $(INCLUDE_SOURCE_OS_DIR))), \
   ))
 
   TARGETS += $(COPY_EXPORTED_INCLUDE_OS)
--- a/make/data/characterdata/CharacterDataLatin1.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/data/characterdata/CharacterDataLatin1.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -25,6 +25,8 @@
 
 package java.lang;
 
+import java.util.Arrays;
+
 /** The CharacterData class encapsulates the large tables found in
     Java.lang.Character. */
 
@@ -159,20 +161,39 @@
         return toUpperCase(ch);
     }
 
+    // Digit values for codePoints in the 0-255 range. Contents generated using:
+    // for (char i = 0; i < 256; i++) {
+    //     int v = -1;
+    //     if (i >= '0' && i <= '9') { v = i - '0'; } 
+    //     else if (i >= 'A' && i <= 'Z') { v = i - 'A' + 10; }
+    //     else if (i >= 'a' && i <= 'z') { v = i - 'a' + 10; }
+    //     if (i % 20 == 0) System.out.println();
+    //     System.out.printf("%2d, ", v);
+    // }
+    //
+    // Analysis has shown that generating the whole array allows the JIT to generate
+    // better code compared to a slimmed down array, such as one cutting off after 'z'
+    private static final byte[] DIGITS = new byte[] {
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1,
+        -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, 10, 11, 12,
+        13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+        33, 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
+
     int digit(int ch, int radix) {
-        int value = -1;
-        if (radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
-            int val = getProperties(ch);
-            int kind = val & $$maskType;
-            if (kind == Character.DECIMAL_DIGIT_NUMBER) {
-                value = ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit;
-            }
-            else if ((val & $$maskNumericType) == $$valueJavaSupradecimal) {
-                // Java supradecimal digit
-                value = (ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit) + 10;
-            }
+        int value = DIGITS[ch];
+        if (value >= 0 && radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
+            value = (value < radix) ? value : -1;
         }
-        return (value < radix) ? value : -1;
+        return value;
     }
 
     int getNumericValue(int ch) {
--- a/make/data/jdwp/jdwp.spec	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/data/jdwp/jdwp.spec	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -869,7 +869,6 @@
         "section in "
         "<cite>The Java&trade; Virtual Machine Specification</cite>. "
         "Since JDWP version 1.5."
-        "<p>
         (Out
             (referenceType refType "The reference type ID.")
         )
@@ -2723,7 +2722,6 @@
         "<P>"
         "The events that are grouped in a composite event are restricted in the "
         "following ways: "
-        "<P>"
         "<UL>"
         "<LI>Only with other thread start events for the same thread:"
         "    <UL>"
--- a/make/devkit/createWindowsDevkit.sh	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2015, 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
-# 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.
-#
-
-# This script copies parts of a Visual Studio 2013 installation into a devkit
-# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin.
-# erik.joelsson@oracle.com
-
-VS_VERSION="2013"
-VS_VERSION_NUM="12.0"
-VS_VERSION_NUM_NODOT="120"
-SDK_VERSION="8.1"
-VS_VERSION_SP="SP4"
-
-SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
-BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
-DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}${VS_VERSION_SP}-devkit"
-DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
-
-echo "Creating devkit in $DEVKIT_ROOT"
-
-MSVCR_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/msvcr${VS_VERSION_NUM_NODOT}.dll
-MSVCP_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/msvcp${VS_VERSION_NUM_NODOT}.dll
-
-################################################################################
-# Copy Visual Studio files
-
-eval VSNNNCOMNTOOLS="\"\${VS${VS_VERSION_NUM_NODOT}COMNTOOLS}\""
-VS_INSTALL_DIR="$(cygpath "$VSNNNCOMNTOOLS/../..")"
-echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
-
-if [ ! -d $DEVKIT_ROOT/VC ]; then
-    echo "Copying VC..."
-    mkdir -p $DEVKIT_ROOT/VC/bin
-    cp -r "$VS_INSTALL_DIR/VC/bin/amd64" $DEVKIT_ROOT/VC/bin/
-    cp    "$VS_INSTALL_DIR/VC/bin/"*.* $DEVKIT_ROOT/VC/bin/
-    cp -r "$VS_INSTALL_DIR/VC/bin/1033/" $DEVKIT_ROOT/VC/bin/
-    mkdir -p $DEVKIT_ROOT/VC/lib
-    cp -r "$VS_INSTALL_DIR/VC/lib/amd64" $DEVKIT_ROOT/VC/lib/
-    cp    "$VS_INSTALL_DIR/VC/lib/"*.* $DEVKIT_ROOT/VC/lib/
-    cp -r "$VS_INSTALL_DIR/VC/include" $DEVKIT_ROOT/VC/
-    mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
-    cp -r "$VS_INSTALL_DIR/VC/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
-    cp -r "$VS_INSTALL_DIR/VC/atlmfc/lib/amd64" $DEVKIT_ROOT/VC/atlmfc/lib/
-    cp    "$VS_INSTALL_DIR/VC/atlmfc/lib/"*.* $DEVKIT_ROOT/VC/atlmfc/lib/
-    mkdir -p $DEVKIT_ROOT/VC/redist
-    cp -r "$VS_INSTALL_DIR/VC/redist/x64" $DEVKIT_ROOT/VC/redist/
-    cp -r "$VS_INSTALL_DIR/VC/redist/x86" $DEVKIT_ROOT/VC/redist/
-    # The redist runtime libs are needed to run the compiler but may not be
-    # installed on the machine where the devkit will be used.
-    cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/
-    cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/
-    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/amd64/
-    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/amd64/
-    # The msvcdis dll is needed to run some of the tools in VC/bin but is not
-    # shipped in that directory. Copy it from the common dir.
-    cp "$VS_INSTALL_DIR/Common7/IDE/msvcdis${VS_VERSION_NUM_NODOT}.dll" \
-        $DEVKIT_ROOT/VC/bin/
-fi
-
-################################################################################
-# Copy SDK files
-
-PROGRAMFILES_X86="`env | sed -n 's/^ProgramFiles(x86)=//p'`"
-SDK_INSTALL_DIR="$(cygpath "$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION")"
-echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
-
-if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then
-    echo "Copying SDK..."
-    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
-    cp -r "$SDK_INSTALL_DIR/bin/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
-    cp -r "$SDK_INSTALL_DIR/bin/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
-    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
-    cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x64 $DEVKIT_ROOT/$SDK_VERSION/lib/
-    cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x86 $DEVKIT_ROOT/$SDK_VERSION/lib/
-    cp -r "$SDK_INSTALL_DIR/include" $DEVKIT_ROOT/$SDK_VERSION/
-fi
-
-################################################################################
-# Generate devkit.info
-
-echo-info() {
-    echo "$1" >> $DEVKIT_ROOT/devkit.info
-}
-
-echo "Generating devkit.info..."
-rm -f $DEVKIT_ROOT/devkit.info
-echo-info "# This file describes to configure how to interpret the contents of this devkit"
-echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
-echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
-echo-info ""
-echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
-echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
-echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib;\$DEVKIT_ROOT/VC/atlmfc/lib;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\""
-echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
-echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
-echo-info ""
-echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/amd64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
-echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
-echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/amd64;\$DEVKIT_ROOT/VC/atlmfc/lib/amd64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\""
-echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
-echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
-
-################################################################################
-# Copy this script
-
-echo "Copying this script..."
-cp $0 $DEVKIT_ROOT/
-
-################################################################################
-# Create bundle
-
-echo "Creating bundle: $DEVKIT_BUNDLE"
-(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/devkit/createWindowsDevkit2013.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,136 @@
+#!/bin/bash
+#
+# Copyright (c) 2015, 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
+# 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.
+#
+
+# This script copies parts of a Visual Studio 2013 installation into a devkit
+# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin.
+# erik.joelsson@oracle.com
+
+VS_VERSION="2013"
+VS_VERSION_NUM="12.0"
+VS_VERSION_NUM_NODOT="120"
+SDK_VERSION="8.1"
+VS_VERSION_SP="SP4"
+
+SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
+BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
+DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}${VS_VERSION_SP}-devkit"
+DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
+
+echo "Creating devkit in $DEVKIT_ROOT"
+
+MSVCR_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/msvcr${VS_VERSION_NUM_NODOT}.dll
+MSVCP_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/msvcp${VS_VERSION_NUM_NODOT}.dll
+
+################################################################################
+# Copy Visual Studio files
+
+eval VSNNNCOMNTOOLS="\"\${VS${VS_VERSION_NUM_NODOT}COMNTOOLS}\""
+VS_INSTALL_DIR="$(cygpath "$VSNNNCOMNTOOLS/../..")"
+echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
+
+if [ ! -d $DEVKIT_ROOT/VC ]; then
+    echo "Copying VC..."
+    mkdir -p $DEVKIT_ROOT/VC/bin
+    cp -r "$VS_INSTALL_DIR/VC/bin/amd64" $DEVKIT_ROOT/VC/bin/
+    cp    "$VS_INSTALL_DIR/VC/bin/"*.* $DEVKIT_ROOT/VC/bin/
+    cp -r "$VS_INSTALL_DIR/VC/bin/1033/" $DEVKIT_ROOT/VC/bin/
+    mkdir -p $DEVKIT_ROOT/VC/lib
+    cp -r "$VS_INSTALL_DIR/VC/lib/amd64" $DEVKIT_ROOT/VC/lib/
+    cp    "$VS_INSTALL_DIR/VC/lib/"*.* $DEVKIT_ROOT/VC/lib/
+    cp -r "$VS_INSTALL_DIR/VC/include" $DEVKIT_ROOT/VC/
+    mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
+    cp -r "$VS_INSTALL_DIR/VC/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
+    cp -r "$VS_INSTALL_DIR/VC/atlmfc/lib/amd64" $DEVKIT_ROOT/VC/atlmfc/lib/
+    cp    "$VS_INSTALL_DIR/VC/atlmfc/lib/"*.* $DEVKIT_ROOT/VC/atlmfc/lib/
+    mkdir -p $DEVKIT_ROOT/VC/redist
+    cp -r "$VS_INSTALL_DIR/VC/redist/x64" $DEVKIT_ROOT/VC/redist/
+    cp -r "$VS_INSTALL_DIR/VC/redist/x86" $DEVKIT_ROOT/VC/redist/
+    # The redist runtime libs are needed to run the compiler but may not be
+    # installed on the machine where the devkit will be used.
+    cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/
+    cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/amd64/
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/amd64/
+    # The msvcdis dll is needed to run some of the tools in VC/bin but is not
+    # shipped in that directory. Copy it from the common dir.
+    cp "$VS_INSTALL_DIR/Common7/IDE/msvcdis${VS_VERSION_NUM_NODOT}.dll" \
+        $DEVKIT_ROOT/VC/bin/
+fi
+
+################################################################################
+# Copy SDK files
+
+PROGRAMFILES_X86="`env | sed -n 's/^ProgramFiles(x86)=//p'`"
+SDK_INSTALL_DIR="$(cygpath "$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION")"
+echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
+
+if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then
+    echo "Copying SDK..."
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
+    cp -r "$SDK_INSTALL_DIR/bin/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
+    cp -r "$SDK_INSTALL_DIR/bin/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
+    cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x64 $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x86 $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/include" $DEVKIT_ROOT/$SDK_VERSION/
+fi
+
+################################################################################
+# Generate devkit.info
+
+echo-info() {
+    echo "$1" >> $DEVKIT_ROOT/devkit.info
+}
+
+echo "Generating devkit.info..."
+rm -f $DEVKIT_ROOT/devkit.info
+echo-info "# This file describes to configure how to interpret the contents of this devkit"
+echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
+echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
+echo-info ""
+echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
+echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib;\$DEVKIT_ROOT/VC/atlmfc/lib;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\""
+echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
+echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
+echo-info ""
+echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/amd64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
+echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/amd64;\$DEVKIT_ROOT/VC/atlmfc/lib/amd64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\""
+echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
+echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
+
+################################################################################
+# Copy this script
+
+echo "Copying this script..."
+cp $0 $DEVKIT_ROOT/
+
+################################################################################
+# Create bundle
+
+echo "Creating bundle: $DEVKIT_BUNDLE"
+(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/devkit/createWindowsDevkit2015.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,142 @@
+#!/bin/bash
+#
+# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# 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.
+#
+
+# This script copies parts of a Visual Studio installation into a devkit
+# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin.
+# erik.joelsson@oracle.com
+
+VS_VERSION="2015"
+VS_VERSION_NUM="14.0"
+VS_VERSION_NUM_NODOT="140"
+SDK_VERSION="8.1"
+VS_VERSION_SP="update3"
+
+SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
+BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
+DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}${VS_VERSION_SP}-devkit"
+DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
+
+echo "Creating devkit in $DEVKIT_ROOT"
+
+MSVCR_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/vcruntime${VS_VERSION_NUM_NODOT}.dll
+MSVCP_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/msvcp${VS_VERSION_NUM_NODOT}.dll
+
+################################################################################
+# Copy Visual Studio files
+
+eval VSNNNCOMNTOOLS="\"\${VS${VS_VERSION_NUM_NODOT}COMNTOOLS}\""
+VS_INSTALL_DIR="$(cygpath "$VSNNNCOMNTOOLS/../..")"
+echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
+
+if [ ! -d $DEVKIT_ROOT/VC ]; then
+    echo "Copying VC..."
+    mkdir -p $DEVKIT_ROOT/VC/bin
+    cp -r "$VS_INSTALL_DIR/VC/bin/amd64" $DEVKIT_ROOT/VC/bin/
+    cp    "$VS_INSTALL_DIR/VC/bin/"*.* $DEVKIT_ROOT/VC/bin/
+    cp -r "$VS_INSTALL_DIR/VC/bin/1033/" $DEVKIT_ROOT/VC/bin/
+    mkdir -p $DEVKIT_ROOT/VC/lib
+    cp -r "$VS_INSTALL_DIR/VC/lib/amd64" $DEVKIT_ROOT/VC/lib/
+    cp    "$VS_INSTALL_DIR/VC/lib/"*.* $DEVKIT_ROOT/VC/lib/
+    cp -r "$VS_INSTALL_DIR/VC/include" $DEVKIT_ROOT/VC/
+    mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
+    cp -r "$VS_INSTALL_DIR/VC/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
+    cp -r "$VS_INSTALL_DIR/VC/atlmfc/lib/amd64" $DEVKIT_ROOT/VC/atlmfc/lib/
+    cp    "$VS_INSTALL_DIR/VC/atlmfc/lib/"*.* $DEVKIT_ROOT/VC/atlmfc/lib/
+    mkdir -p $DEVKIT_ROOT/VC/redist
+    cp -r "$VS_INSTALL_DIR/VC/redist/x64" $DEVKIT_ROOT/VC/redist/
+    cp -r "$VS_INSTALL_DIR/VC/redist/x86" $DEVKIT_ROOT/VC/redist/
+    # The redist runtime libs are needed to run the compiler but may not be
+    # installed on the machine where the devkit will be used.
+    cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/
+    cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/amd64/
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/amd64/
+    # The msvcdis dll is needed to run some of the tools in VC/bin but is not
+    # shipped in that directory. Copy it from the common dir.
+    cp "$VS_INSTALL_DIR/Common7/IDE/msvcdis${VS_VERSION_NUM_NODOT}.dll" \
+        $DEVKIT_ROOT/VC/bin/
+fi
+
+################################################################################
+# Copy SDK files
+
+PROGRAMFILES_X86="`env | sed -n 's/^ProgramFiles(x86)=//p'`"
+SDK_INSTALL_DIR="$(cygpath "$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION")"
+echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
+
+if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then
+    echo "Copying SDK..."
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
+    cp -r "$SDK_INSTALL_DIR/bin/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
+    cp -r "$SDK_INSTALL_DIR/bin/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
+    cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x64 $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x86 $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/include" $DEVKIT_ROOT/$SDK_VERSION/
+    # In 2015, the new Universal CRT is delivered in the sdk 10 directory
+    # so need to include that as well.
+    mkdir -p $DEVKIT_ROOT/10/lib
+    cp -r "$SDK_INSTALL_DIR/../10/lib/10.0.10240.0/ucrt" $DEVKIT_ROOT/10/lib/
+    mkdir -p $DEVKIT_ROOT/10/include
+    cp -r "$SDK_INSTALL_DIR/../10/include/10.0.10240.0/ucrt" $DEVKIT_ROOT/10/include/
+fi
+
+################################################################################
+# Generate devkit.info
+
+echo-info() {
+    echo "$1" >> $DEVKIT_ROOT/devkit.info
+}
+
+echo "Generating devkit.info..."
+rm -f $DEVKIT_ROOT/devkit.info
+echo-info "# This file describes to configure how to interpret the contents of this devkit"
+echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
+echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
+echo-info ""
+echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt;\$DEVKIT_ROOT/10/include/ucrt\""
+echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib;\$DEVKIT_ROOT/VC/atlmfc/lib;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86;\$DEVKIT_ROOT/10/lib/ucrt/x86\""
+echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
+echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
+echo-info ""
+echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/amd64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt;\$DEVKIT_ROOT/10/include/ucrt\""
+echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/amd64;\$DEVKIT_ROOT/VC/atlmfc/lib/amd64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64;\$DEVKIT_ROOT/10/lib/ucrt/x64\""
+echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
+echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
+
+################################################################################
+# Copy this script
+
+echo "Copying this script..."
+cp $0 $DEVKIT_ROOT/
+
+################################################################################
+# Create bundle
+
+echo "Creating bundle: $DEVKIT_BUNDLE"
+(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/devkit/createWindowsDevkit2017.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,172 @@
+#!/bin/bash
+#
+# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# 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.
+#
+
+# This script copies parts of a Visual Studio installation into a devkit
+# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin.
+# erik.joelsson@oracle.com
+
+VS_VERSION="2017"
+VS_VERSION_NUM_NODOT="150"
+VS_DLL_VERSION="140"
+SDK_VERSION="10"
+SDK_FULL_VERSION="10.0.16299.0"
+MSVC_DIR="Microsoft.VC141.CRT"
+
+SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
+BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
+
+################################################################################
+# Prepare settings
+
+# Work around the insanely named ProgramFiles(x86) env variable
+PROGRAMFILES_X86="$(cygpath "$(env | sed -n 's/^ProgramFiles(x86)=//p')")"
+
+# Find Visual Studio installation dir
+eval VSNNNCOMNTOOLS="\"\${VS${VS_VERSION_NUM_NODOT}COMNTOOLS}\""
+if [ -d "$VSNNNCOMNTOOLS" ]; then
+    VS_INSTALL_DIR="$(cygpath "$VSNNNCOMNTOOLS/../..")"
+else
+    VS_INSTALL_DIR="${PROGRAMFILES_X86}/Microsoft Visual Studio/2017"
+    VS_INSTALL_DIR="$(ls -d "${VS_INSTALL_DIR}/"{Community,Professional} 2>/dev/null | head -n1)"
+    VS_INSTALL_DIR="$(cygpath "$VS_INSTALL_DIR")"
+fi
+echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
+
+# Extract semantic version
+POTENTIAL_INI_FILES="Common7\IDE\wdexpress.isolation.ini Common7\IDE\devenv.isolation.ini"
+for f in $POTENTIAL_INI_FILES; do
+    if [ -f "$VS_INSTALL_DIR/$f" ]; then
+        VS_VERSION_SP="$(grep ^SemanticVersion= "$VS_INSTALL_DIR/$f")"
+        # Remove SemnaticVersion=
+        VS_VERSION_SP="${VS_VERSION_SP#*=}"
+        # Remove suffix of too detailed numbering starting with +
+        VS_VERSION_SP="${VS_VERSION_SP%+*}"
+        break
+    fi
+done
+if [ -z "$VS_VERSION_SP" ]; then
+    echo "Failed to find SP version"
+    exit 1
+fi
+echo "Found Version SP: $VS_VERSION_SP"
+
+# Setup output dirs
+DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}-${VS_VERSION_SP}-devkit"
+DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
+
+echo "Creating devkit in $DEVKIT_ROOT"
+
+MSVCR_DLL=${MSVC_DIR}/vcruntime${VS_DLL_VERSION}.dll
+MSVCP_DLL=${MSVC_DIR}/msvcp${VS_DLL_VERSION}.dll
+
+################################################################################
+# Copy Visual Studio files
+
+if [ ! -d $DEVKIT_ROOT/VC ]; then
+    VC_SUBDIR="VC/Tools/MSVC/14.12.25827"
+    REDIST_SUBDIR="VC/Redist/MSVC/14.12.25810"
+    echo "Copying VC..."
+    mkdir -p $DEVKIT_ROOT/VC/bin
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/
+    mkdir -p $DEVKIT_ROOT/VC/lib
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/
+    mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/
+    cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
+    mkdir -p $DEVKIT_ROOT/VC/Auxiliary
+    cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/
+    mkdir -p $DEVKIT_ROOT/VC/redist
+    cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/
+    cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/
+
+    # The redist runtime libs are needed to run the compiler but may not be
+    # installed on the machine where the devkit will be used.
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x86
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64
+    cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64
+fi
+
+################################################################################
+# Copy SDK files
+
+SDK_INSTALL_DIR="$(cygpath "$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION")"
+echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
+
+if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then
+    echo "Copying SDK..."
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
+    cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
+    cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
+    cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/
+    cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/
+    mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include
+    cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/
+fi
+
+################################################################################
+# Generate devkit.info
+
+echo-info() {
+    echo "$1" >> $DEVKIT_ROOT/devkit.info
+}
+
+echo "Generating devkit.info..."
+rm -f $DEVKIT_ROOT/devkit.info
+echo-info "# This file describes to configure how to interpret the contents of this devkit"
+echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
+echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
+echo-info ""
+echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
+echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\""
+echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
+echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
+echo-info ""
+echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
+echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\""
+echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
+echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
+
+################################################################################
+# Copy this script
+
+echo "Copying this script..."
+cp $0 $DEVKIT_ROOT/
+
+################################################################################
+# Create bundle
+
+echo "Creating bundle: $DEVKIT_BUNDLE"
+(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
--- a/make/gensrc/GensrcVarHandles.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/gensrc/GensrcVarHandles.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -168,3 +168,7 @@
   $(eval $(call GenerateVarHandleByteArray,VAR_HANDLE_BYTE_ARRAY_$t,$t)))
 
 GENSRC_JAVA_BASE += $(GENSRC_VARHANDLES)
+
+# Include custom extension post hook
+$(eval $(call IncludeCustomExtension, gensrc/GensrcVarHandles-post.gmk))
+
--- a/make/gensrc/GensrcX11Wrappers.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/gensrc/GensrcX11Wrappers.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -92,10 +92,10 @@
   endif
 
   SIZER_CFLAGS := \
-      -I${TOPDIR}/src/hotspot/share/include \
-      -I${TOPDIR}/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
-      -I$(TOPDIR)/src/java.base/share/native/include \
-      -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include \
+      -I$(TOPDIR)/src/hotspot/share/include \
+      -I$(TOPDIR)/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
+      -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
+      -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
       -I$(TOPDIR)/src/java.base/share/native/libjava \
       -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \
       -I$(TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
--- a/make/hotspot/lib/CompileJvm.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/hotspot/lib/CompileJvm.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -59,8 +59,8 @@
     -I$(TOPDIR)/src/hotspot/share/precompiled \
     -I$(TOPDIR)/src/hotspot/share/include \
     -I$(TOPDIR)/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
-    -I$(TOPDIR)/src/java.base/share/native/include \
-    -I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include \
+    -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
+    -I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
     -I$(TOPDIR)/src/java.base/share/native/libjimage \
     #
 
--- a/make/idea/idea.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/idea/idea.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -20,16 +20,9 @@
     SEL_MODULES := $(MODULES)
   endif
 
-  # Find all source dirs for a particular module
-  # $1 - Module to find source dirs for
-  FindIdeaModuleSrcDirs = \
-    $(strip $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
-        $(wildcard $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
-
-
   idea:
 	$(ECHO) "SUPPORT=$(SUPPORT_OUTPUTDIR)" >> $(OUT)
-	$(ECHO) "MODULE_ROOTS=\"$(foreach mod, $(SEL_MODULES), $(call FindIdeaModuleSrcDirs,$(mod)))\"" >> $(OUT)
+	$(ECHO) "MODULE_ROOTS=\"$(foreach mod, $(SEL_MODULES), $(call FindModuleSrcDirs,$(mod)))\"" >> $(OUT)
 	$(ECHO) "MODULE_NAMES=\"$(strip $(foreach mod, $(SEL_MODULES), $(mod)))\"" >> $(OUT)
 	$(ECHO) "SEL_MODULES=\"$(SEL_MODULES)\"" >> $(OUT)
 	$(ECHO) "BOOT_JDK=\"$(BOOT_JDK)\"" >> $(OUT)
--- a/make/idea/template/ant.xml	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/idea/template/ant.xml	Fri Feb 02 01:52:03 2018 +0000
@@ -3,7 +3,6 @@
   <component name="AntConfiguration">
     <buildFile url="file://$PROJECT_DIR$/.idea/build.xml">
       <properties>
-        <property name="boot.java.home" value="$JDKPath$" />
         <property name="intellij.ismake" value="$IsMake$" />
         <property name="build.target.dir" value="specDir" /> <!-- this will be replaced -->
         <property name="module.name" value="java.base" /> <!-- this will be replaced -->
--- a/make/idea/template/build.xml	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/idea/template/build.xml	Fri Feb 02 01:52:03 2018 +0000
@@ -6,32 +6,16 @@
         new JdkLogger(project)
     </script>
 
-     <!-- java.marker is set to a marker file to check for within a Java install dir.
-         The best file to check for across Solaris/Linux/Windows/MacOS is one of the
-         executables; regrettably, that is OS-specific. -->
-    <condition property="java.marker" value="bin/java">
-        <os family="unix"/>
-    </condition>
-    <condition property="java.marker" value="bin/java.exe">
-        <os family="windows"/>
-    </condition>
-
-    <target name="-check-jtreg.home" depends="-def-check">
-        <check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
-    </target>
-
-    <property name="test.dir" value="${basedir}/jdk/test"/>
-
     <macrodef name="call-make">
-            <attribute name="dir"/>
-            <attribute name="args"/>
-            <sequential>
-                <exec executable="make" dir="@{dir}" failonerror="true">
-                    <arg line="@{args}"/>
-                    <env key="CLASSPATH" value = ""/>
-                </exec>
-            </sequential>
-        </macrodef>
+        <attribute name="dir"/>
+        <attribute name="args"/>
+        <sequential>
+            <exec executable="make" dir="@{dir}" failonerror="true">
+                <arg line="@{args}"/>
+                <env key="CLASSPATH" value = ""/>
+            </exec>
+        </sequential>
+    </macrodef>
 
     <target name="cond-clean" unless="${intellij.ismake}">
         <antcall target="clean"/>
@@ -43,71 +27,17 @@
         **** Global JDK Build Targets
     -->
 
-    <target name="clean" depends="-do-configure">
-        <echo message="base = ${basedir}"/>
-        <call-make dir = "${build.target.dir}" args = "clean"/>
-    </target>
-
-    <target name="-do-configure">
+    <target name="clean">
         <echo message="base = ${basedir}"/>
-        <fail message="Not part of a full JDK forest">
-            <condition>
-                <not>
-                    <available file="${basedir}/configure" />
-                </not>
-            </condition>
-        </fail>
-        <exec executable="sh" dir="${basedir}" failonerror="true">
-            <arg line="configure --with-boot-jdk=${boot.java.home}"/>
-        </exec>
+        <call-make dir = "${build.target.dir}" args = "reconfigure"/>
+        <call-make dir = "${build.target.dir}" args = "clean"/>
     </target>
 
     <target name="images">
         <call-make dir = "${build.target.dir}" args = "images"/>
     </target>
 
-    <target name="jimages">
-        <call-make dir = "${build.target.dir}" args = "jimages"/>
-    </target>
-
-    <target name="check-env">
-        <exec executable="env" dir="${basedir}"/>
-    </target>
-
     <target name="build-module">
         <call-make dir = "${build.target.dir}" args = "${module.name}"/>
     </target>
-
-    <target name="-check-boot.java.home" depends="-def-check">
-        <check name="bootstrap java" property="boot.java.home" marker="${java.marker}"/>
-    </target>
-
-    <target name="-def-check">
-        <macrodef name="check">
-            <attribute name="name"/>
-            <attribute name="property"/>
-            <attribute name="marker" default=""/>
-            <sequential>
-                <fail message="Cannot locate @{name}: please set @{property} to its location">
-                    <condition>
-                        <not>
-                            <isset property="@{property}"/>
-                        </not>
-                    </condition>
-                </fail>
-                <fail message="@{name} is not installed in ${@{property}}">
-                    <condition>
-                        <and>
-                            <not>
-                                <equals arg1="@{marker}" arg2=""/>
-                            </not>
-                            <not>
-                                <available file="${@{property}}/@{marker}"/>
-                            </not>
-                        </and>
-                    </condition>
-                </fail>
-            </sequential>
-        </macrodef>
-    </target>
 </project>
--- a/make/idea/template/jdk.iml	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/idea/template/jdk.iml	Fri Feb 02 01:52:03 2018 +0000
@@ -4,11 +4,9 @@
     <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/####" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/src" />
       <excludeFolder url="file://$MODULE_DIR$/build" />
       <excludeFolder url="file://$MODULE_DIR$/make" />
-    </content>    
+    </content>
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="inheritedJdk" />
   </component>
--- a/make/jdk/src/classes/build/tools/jdwpgen/AbstractCommandNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/AbstractCommandNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
 class AbstractCommandNode extends AbstractNamedNode {
 
     void document(PrintWriter writer) {
-        writer.println("<h5><a name=\"" + context.whereC + "\">" + name +
-                       " Command</a> (" + nameNode.value() + ")</h5>");
+        writer.println("<h5 id=\"" + context.whereC + "\">" + name +
+                       " Command (" + nameNode.value() + ")</h5>");
         writer.println(comment());
         writer.println("<dl>");
         for (Node node : components) {
--- a/make/jdk/src/classes/build/tools/jdwpgen/AbstractNamedNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/AbstractNamedNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -62,8 +62,8 @@
     }
 
     void document(PrintWriter writer) {
-        writer.println("<h4><a name=" + name + ">" + name +
-                       " Command Set</a></h4>");
+        writer.println("<h4 id=\"" + name + "\">" + name +
+                       " Command Set</h4>");
         for (Node node : components) {
             node.document(writer);
         }
--- a/make/jdk/src/classes/build/tools/jdwpgen/AbstractTypeListNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/AbstractTypeListNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,11 +43,11 @@
         if (components.isEmpty()) {
             writer.println("<dd>(None)");
         } else {
-            writer.println("<dd><table border=1 cellpadding=3 cellspacing=0 width=\"90%\" summary=\"\"><tr>");
+            writer.println("<dd><table><tr>");
             for (int i = maxStructIndent; i > 0; --i) {
-                writer.print("<th width=\"4%\">");
+                writer.print("<th style=\"width: 4%\">");
             }
-            writer.println("<th width=\"15%\"><th width=\"65%\">");
+            writer.println("<th style=\"width: 15%\"><th style=\"width: 65%\">");
             writer.println("");
             for (Node node : components) {
                 node.document(writer);
--- a/make/jdk/src/classes/build/tools/jdwpgen/CommandSetNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/CommandSetNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,8 +38,8 @@
     }
 
     void document(PrintWriter writer) {
-        writer.println("<h4><a name=\"" + context.whereC + "\">" + name +
-                       " Command Set</a> (" +
+        writer.println("<h4 id=\"" + context.whereC + "\">" + name +
+                       " Command Set (" +
                        nameNode.value() + ")</h4>");
         writer.println(comment());
         for (Node node : components) {
@@ -51,11 +51,13 @@
         writer.print("<li><a href=\"#" + context.whereC + "\">");
         writer.println(name() + "</a> Command Set (" +
                        nameNode.value() + ")");
-        writer.println("<ul>");
-        for (Node node : components) {
-            node.documentIndex(writer);
+        if (components.size() > 0) {
+            writer.println("<ul>");
+            for (Node node : components) {
+                node.documentIndex(writer);
+            }
+            writer.println("</ul>");
         }
-        writer.println("</ul>");
     }
 
     void genJavaClassSpecifics(PrintWriter writer, int depth) {
--- a/make/jdk/src/classes/build/tools/jdwpgen/ConstantSetNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/ConstantSetNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -54,15 +54,15 @@
     }
 
     void document(PrintWriter writer) {
-        writer.println("<h4><a name=\"" + context.whereC + "\">" + name +
-                       " Constants</a></h4>");
+        writer.println("<h4 id=\"" + context.whereC + "\">" + name +
+                       " Constants</h4>");
         writer.println(comment());
-        writer.println("<dd><table border=1 cellpadding=3 cellspacing=0 width=\"90%\" summary=\"\"><tr>");
-        writer.println("<th width=\"20%\"><th width=\"5%\"><th width=\"65%\">");
+        writer.println("<table><tr>");
+        writer.println("<th style=\"width: 20%\"><th style=\"width: 5%\"><th style=\"width:  65%\">");
         ConstantNode n;
         for (Node node : components) {
             n = (ConstantNode)node;
-            writer.println("<a NAME=\"" + name + "_" + n.name + "\"></a>");
+            writer.println("<span id=\"" + name + "_" + n.name + "\"></span>");
             n.document(writer);
         }
         writer.println("</table>");
--- a/make/jdk/src/classes/build/tools/jdwpgen/ErrorSetNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/ErrorSetNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
         if (components.isEmpty()) {
             writer.println("<dd>(None)");
         } else {
-            writer.println("<dd><table border=1 cellpadding=3 cellspacing=0 width=\"90%\" summary=\"\">");
+            writer.println("<dd><table>");
         for (Node node : components) {
             node.document(writer);
         }
--- a/make/jdk/src/classes/build/tools/jdwpgen/RootNode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/jdk/src/classes/build/tools/jdwpgen/RootNode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,11 +41,22 @@
 
     void document(PrintWriter writer) {
         writer.println("<!DOCTYPE html>");
-        writer.println("<html><head><title>" + comment() + "</title></head>");
-        writer.println("<body bgcolor=\"white\">");
+        writer.println("<html lang=\"en\">");
+        writer.println("<head>");
+        writer.println("<meta charset=\"utf-8\"/>");
+        writer.println("<title>" + comment() + "</title>");
+        writer.println("<style>");
+        writer.println("body {background-color:white;}");
+        writer.println("table {border: 1px solid grey; border-spacing:0px; border-collapse: separate; width: 90%;}");
+        writer.println("td, th {padding: 3px; border: 1px solid black;}");
+        writer.println("</style>");
+        writer.println("</head>");
+        writer.println("<body>");
+        writer.println("<ul>");
         for (Node node : components) {
             node.documentIndex(writer);
         }
+        writer.println("</ul>");
         for (Node node : components) {
             node.document(writer);
         }
--- a/make/lib/Lib-java.management.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/lib/Lib-java.management.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -70,3 +70,7 @@
 TARGETS += $(BUILD_LIBMANAGEMENT)
 
 ################################################################################
+
+# Include custom extension post hook
+$(eval $(call IncludeCustomExtension, lib/Lib-java.management-post.gmk))
+
--- a/make/lib/Lib-jdk.management.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/lib/Lib-jdk.management.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -80,3 +80,7 @@
 TARGETS += $(BUILD_LIBMANAGEMENT_EXT)
 
 ################################################################################
+
+# Include custom extension post hook
+$(eval $(call IncludeCustomExtension, lib/Lib-jdk.management-post.gmk))
+
--- a/make/mapfiles/libjava/mapfile-vers	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/mapfiles/libjava/mapfile-vers	Fri Feb 02 01:52:03 2018 +0000
@@ -258,7 +258,6 @@
 		Java_jdk_internal_reflect_NativeConstructorAccessorImpl_newInstance0;
 		Java_jdk_internal_reflect_NativeMethodAccessorImpl_invoke0;
 		Java_jdk_internal_reflect_Reflection_getCallerClass__;
-		Java_jdk_internal_reflect_Reflection_getCallerClass__I;
 		Java_jdk_internal_reflect_Reflection_getClassAccessFlags;
 		Java_jdk_internal_misc_VM_latestUserDefinedLoader0;
                 Java_jdk_internal_misc_VM_getuid;
--- a/make/mapfiles/libjava/reorder-sparc	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/mapfiles/libjava/reorder-sparc	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,6 @@
 text: .text%Java_java_io_FileOutputStream_initIDs;
 text: .text%Java_java_lang_System_setIn0;
 text: .text%Java_sun_reflect_Reflection_getCallerClass__;
-text: .text%Java_sun_reflect_Reflection_getCallerClass__I;
 text: .text%Java_java_lang_Class_forName0;
 text: .text%Java_java_lang_Object_getClass;
 text: .text%Java_sun_reflect_Reflection_getClassAccessFlags;
--- a/make/mapfiles/libjava/reorder-sparcv9	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/mapfiles/libjava/reorder-sparcv9	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,6 @@
 text: .text%Java_java_io_FileOutputStream_initIDs;
 text: .text%Java_java_lang_System_setIn0;
 text: .text%Java_sun_reflect_Reflection_getCallerClass__;
-text: .text%Java_sun_reflect_Reflection_getCallerClass__I;
 text: .text%Java_java_lang_Class_forName0;
 text: .text%Java_java_lang_String_intern;
 text: .text%Java_java_lang_StringUTF16_isBigEndian;
--- a/make/mapfiles/libjava/reorder-x86	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/mapfiles/libjava/reorder-x86	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,6 @@
 text: .text%Java_java_io_FileOutputStream_initIDs;
 text: .text%Java_java_lang_System_setIn0;
 text: .text%Java_sun_reflect_Reflection_getCallerClass__;
-text: .text%Java_sun_reflect_Reflection_getCallerClass__I;
 text: .text%Java_java_lang_Class_forName0;
 text: .text%Java_java_lang_String_intern;
 text: .text%Java_java_lang_StringUTF16_isBigEndian;
--- a/make/test/JtregNativeHotspot.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/make/test/JtregNativeHotspot.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -44,6 +44,7 @@
 # Add more directories here when needed.
 BUILD_HOTSPOT_JTREG_NATIVE_SRC += \
     $(TOPDIR)/test/hotspot/jtreg/gc/g1/TestJNIWeakG1 \
+    $(TOPDIR)/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC \
     $(TOPDIR)/test/hotspot/jtreg/gc/stress/gclocker \
     $(TOPDIR)/test/hotspot/jtreg/gc/cslocker \
     $(TOPDIR)/test/hotspot/jtreg/native_sanity \
--- a/src/hotspot/cpu/aarch64/aarch64.ad	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/aarch64.ad	Fri Feb 02 01:52:03 2018 +0000
@@ -5844,8 +5844,8 @@
 operand immByteMapBase()
 %{
   // Get base of card map
-  predicate((jbyte*)n->get_ptr() ==
-        ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base);
+  predicate(Universe::heap()->barrier_set()->is_a(BarrierSet::CardTableModRef) &&
+    (jbyte*)n->get_ptr() == ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base);
   match(ConP);
 
   op_cost(0);
--- a/src/hotspot/cpu/aarch64/assembler_aarch64.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/assembler_aarch64.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -848,7 +848,7 @@
   // architecture.  In debug mode we shrink it in order to test
   // trampolines, but not so small that branches in the interpreter
   // are out of range.
-  static const unsigned long branch_range = INCLUDE_JVMCI ? 128 * M : NOT_DEBUG(128 * M) DEBUG_ONLY(2 * M);
+  static const unsigned long branch_range = NOT_DEBUG(128 * M) DEBUG_ONLY(2 * M);
 
   static bool reachable_from_branch_at(address branch, address target) {
     return uabs(target - branch) < branch_range;
@@ -2295,23 +2295,32 @@
     rf(Vn, 5), rf(Rd, 0);
   }
 
-#define INSN(NAME, opc, opc2)                                           \
+#define INSN(NAME, opc, opc2, isSHR)                                    \
   void NAME(FloatRegister Vd, SIMD_Arrangement T, FloatRegister Vn, int shift){ \
     starti;                                                             \
-    /* The encodings for the immh:immb fields (bits 22:16) are          \
-     *   0001 xxx       8B/16B, shift = xxx                             \
-     *   001x xxx       4H/8H,  shift = xxxx                            \
-     *   01xx xxx       2S/4S,  shift = xxxxx                           \
-     *   1xxx xxx       1D/2D,  shift = xxxxxx (1D is RESERVED)         \
+    /* The encodings for the immh:immb fields (bits 22:16) in *SHR are  \
+     *   0001 xxx       8B/16B, shift = 16  - UInt(immh:immb)           \
+     *   001x xxx       4H/8H,  shift = 32  - UInt(immh:immb)           \
+     *   01xx xxx       2S/4S,  shift = 64  - UInt(immh:immb)           \
+     *   1xxx xxx       1D/2D,  shift = 128 - UInt(immh:immb)           \
+     *   (1D is RESERVED)                                               \
+     * for SHL shift is calculated as:                                  \
+     *   0001 xxx       8B/16B, shift = UInt(immh:immb) - 8             \
+     *   001x xxx       4H/8H,  shift = UInt(immh:immb) - 16            \
+     *   01xx xxx       2S/4S,  shift = UInt(immh:immb) - 32            \
+     *   1xxx xxx       1D/2D,  shift = UInt(immh:immb) - 64            \
+     *   (1D is RESERVED)                                               \
      */                                                                 \
     assert((1 << ((T>>1)+3)) > shift, "Invalid Shift value");           \
+    int cVal = (1 << (((T >> 1) + 3) + (isSHR ? 1 : 0)));               \
+    int encodedShift = isSHR ? cVal - shift : cVal + shift;             \
     f(0, 31), f(T & 1, 30), f(opc, 29), f(0b011110, 28, 23),            \
-    f((1 << ((T>>1)+3))|shift, 22, 16); f(opc2, 15, 10), rf(Vn, 5), rf(Vd, 0); \
+    f(encodedShift, 22, 16); f(opc2, 15, 10), rf(Vn, 5), rf(Vd, 0);     \
   }
 
-  INSN(shl,  0, 0b010101);
-  INSN(sshr, 0, 0b000001);
-  INSN(ushr, 1, 0b000001);
+  INSN(shl,  0, 0b010101, /* isSHR = */ false);
+  INSN(sshr, 0, 0b000001, /* isSHR = */ true);
+  INSN(ushr, 1, 0b000001, /* isSHR = */ true);
 
 #undef INSN
 
--- a/src/hotspot/cpu/aarch64/compiledIC_aarch64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/compiledIC_aarch64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -71,6 +71,13 @@
   return 7 * NativeInstruction::instruction_size;
 }
 
+int CompiledStaticCall::to_trampoline_stub_size() {
+  // Somewhat pessimistically, we count 3 instructions here (although
+  // there are only two) because we sometimes emit an alignment nop.
+  // Trampoline stubs are always word aligned.
+  return 3 * NativeInstruction::instruction_size + wordSize;
+}
+
 // Relocation entries for call stub, compiled java to interpreter.
 int CompiledStaticCall::reloc_to_interp_stub() {
   return 4; // 3 in emit_to_interp_stub + 1 in emit_call
--- a/src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -109,7 +109,7 @@
   TRACE_jvmci_3("relocating (foreign call) at " PTR_FORMAT, p2i(inst));
 }
 
-void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) {
+void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &cbuf, Handle hotspot_method, jint pc_offset, TRAPS) {
 #ifdef ASSERT
   Method* method = NULL;
   // we need to check, this might also be an unresolved method
@@ -124,22 +124,22 @@
     case INVOKEINTERFACE: {
       assert(method == NULL || !method->is_static(), "cannot call static method with invokeinterface");
       NativeCall* call = nativeCall_at(_instructions->start() + pc_offset);
-      call->set_destination(SharedRuntime::get_resolve_virtual_call_stub());
       _instructions->relocate(call->instruction_address(), virtual_call_Relocation::spec(_invoke_mark_pc));
+      call->trampoline_jump(cbuf, SharedRuntime::get_resolve_virtual_call_stub());
       break;
     }
     case INVOKESTATIC: {
       assert(method == NULL || method->is_static(), "cannot call non-static method with invokestatic");
       NativeCall* call = nativeCall_at(_instructions->start() + pc_offset);
-      call->set_destination(SharedRuntime::get_resolve_static_call_stub());
       _instructions->relocate(call->instruction_address(), relocInfo::static_call_type);
+      call->trampoline_jump(cbuf, SharedRuntime::get_resolve_static_call_stub());
       break;
     }
     case INVOKESPECIAL: {
       assert(method == NULL || !method->is_static(), "cannot call static method with invokespecial");
       NativeCall* call = nativeCall_at(_instructions->start() + pc_offset);
-      call->set_destination(SharedRuntime::get_resolve_opt_virtual_call_stub());
       _instructions->relocate(call->instruction_address(), relocInfo::opt_virtual_call_type);
+      call->trampoline_jump(cbuf, SharedRuntime::get_resolve_opt_virtual_call_stub());
       break;
     }
     default:
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -801,7 +801,7 @@
   assert(is_NativeCallTrampolineStub_at(stub_start_addr), "doesn't look like a trampoline");
 
   end_a_stub();
-  return stub;
+  return stub_start_addr;
 }
 
 address MacroAssembler::ic_call(address entry, jint method_index) {
--- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -367,3 +367,24 @@
   set_ptr_at(data_offset, new_destination);
   OrderAccess::release();
 }
+
+// Generate a trampoline for a branch to dest.  If there's no need for a
+// trampoline, simply patch the call directly to dest.
+address NativeCall::trampoline_jump(CodeBuffer &cbuf, address dest) {
+  MacroAssembler a(&cbuf);
+  address stub = NULL;
+
+  if (a.far_branches()
+      && ! is_NativeCallTrampolineStub_at(instruction_address() + displacement())) {
+    stub = a.emit_trampoline_stub(instruction_address() - cbuf.insts()->start(), dest);
+  }
+
+  if (stub == NULL) {
+    // If we generated no stub, patch this call directly to dest.
+    // This will happen if we don't need far branches or if there
+    // already was a trampoline.
+    set_destination(dest);
+  }
+
+  return stub;
+}
--- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -61,7 +61,7 @@
     return uint_at(0);
   }
 
-  bool is_blr()                      const { return (encoding() & 0xfffffc1f) == 0xd63f0000; }
+  bool is_blr()                      const { return (encoding() & 0xff9ffc1f) == 0xd61f0000; } // blr(register) or br(register)
   bool is_adr_aligned()              const { return (encoding() & 0xff000000) == 0x10000000; } // adr Xn, <label>, where label is aligned to 4 bytes (address of instruction).
 
   inline bool is_nop();
@@ -143,8 +143,9 @@
 }
 
 inline NativeCall* nativeCall_at(address address);
-// The NativeCall is an abstraction for accessing/manipulating native call imm32/rel32off
-// instructions (used to manipulate inline caches, primitive & dll calls, etc.).
+// The NativeCall is an abstraction for accessing/manipulating native
+// call instructions (used to manipulate inline caches, primitive &
+// DSO calls, etc.).
 
 class NativeCall: public NativeInstruction {
  public:
@@ -155,7 +156,6 @@
     return_address_offset       =    4
   };
 
-  enum { cache_line_size = BytesPerWord };  // conservative estimate!
   address instruction_address() const       { return addr_at(instruction_offset); }
   address next_instruction_address() const  { return addr_at(return_address_offset); }
   int   displacement() const                { return (int_at(displacement_offset) << 6) >> 4; }
@@ -206,6 +206,7 @@
   void set_destination_mt_safe(address dest, bool assert_lock = true);
 
   address get_trampoline();
+  address trampoline_jump(CodeBuffer &cbuf, address dest);
 };
 
 inline NativeCall* nativeCall_at(address address) {
--- a/src/hotspot/cpu/aarch64/relocInfo_aarch64.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/relocInfo_aarch64.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2014, Red Hat Inc. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -35,4 +35,10 @@
     format_width       =  0
   };
 
+ public:
+
+  // This platform has no oops in the code that are not also
+  // listed in the oop section.
+  static bool mustIterateImmediateOopsInCode() { return false; }
+
 #endif // CPU_AARCH64_VM_RELOCINFO_AARCH64_HPP
--- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -3421,7 +3421,6 @@
   Label done;
   Label initialize_header;
   Label initialize_object; // including clearing the fields
-  Label allocate_shared;
 
   __ get_cpool_and_tags(r4, r0);
   // Make sure the class we're about to instantiate has been resolved.
@@ -3450,18 +3449,24 @@
   // test to see if it has a finalizer or is malformed in some way
   __ tbnz(r3, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case);
 
-  // Allocate the instance
-  // 1) Try to allocate in the TLAB
-  // 2) if fail and the object is large allocate in the shared Eden
-  // 3) if the above fails (or is not applicable), go to a slow case
-  // (creates a new TLAB, etc.)
-
+  // Allocate the instance:
+  //  If TLAB is enabled:
+  //    Try to allocate in the TLAB.
+  //    If fails, go to the slow path.
+  //  Else If inline contiguous allocations are enabled:
+  //    Try to allocate in eden.
+  //    If fails due to heap end, go to slow path.
+  //
+  //  If TLAB is enabled OR inline contiguous is enabled:
+  //    Initialize the allocation.
+  //    Exit.
+  //
+  //  Go to slow path.
   const bool allow_shared_alloc =
     Universe::heap()->supports_inline_contig_alloc();
 
   if (UseTLAB) {
-    __ tlab_allocate(r0, r3, 0, noreg, r1,
-                     allow_shared_alloc ? allocate_shared : slow_case);
+    __ tlab_allocate(r0, r3, 0, noreg, r1, slow_case);
 
     if (ZeroTLAB) {
       // the fields have been already cleared
@@ -3470,19 +3475,19 @@
       // initialize both the header and fields
       __ b(initialize_object);
     }
+  } else {
+    // Allocation in the shared Eden, if allowed.
+    //
+    // r3: instance size in bytes
+    if (allow_shared_alloc) {
+      __ eden_allocate(r0, r3, 0, r10, slow_case);
+      __ incr_allocated_bytes(rthread, r3, 0, rscratch1);
+    }
   }
 
-  // Allocation in the shared Eden, if allowed.
-  //
-  // r3: instance size in bytes
-  if (allow_shared_alloc) {
-    __ bind(allocate_shared);
-
-    __ eden_allocate(r0, r3, 0, r10, slow_case);
-    __ incr_allocated_bytes(rthread, r3, 0, rscratch1);
-  }
-
-  if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) {
+  // If UseTLAB or allow_shared_alloc are true, the object is created above and
+  // there is an initialize need. Otherwise, skip and go to the slow path.
+  if (UseTLAB || allow_shared_alloc) {
     // The object is initialized before the header.  If the object size is
     // zero, go directly to the header initialization.
     __ bind(initialize_object);
--- a/src/hotspot/cpu/arm/relocInfo_arm.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/arm/relocInfo_arm.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,4 +32,10 @@
     format_width = 0
   };
 
+ public:
+
+  // This platform has no oops in the code that are not also
+  // listed in the oop section.
+  static bool mustIterateImmediateOopsInCode() { return false; }
+
 #endif // CPU_ARM_VM_RELOCINFO_ARM_HPP
--- a/src/hotspot/cpu/arm/templateTable_arm.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/arm/templateTable_arm.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -4335,7 +4335,6 @@
   Label done;
   Label initialize_header;
   Label initialize_object;  // including clearing the fields
-  Label allocate_shared;
 
   const bool allow_shared_alloc =
     Universe::heap()->supports_inline_contig_alloc();
@@ -4380,13 +4379,19 @@
   // Klass::_lh_instance_slow_path_bit is really a bit mask, not bit number
   __ tbnz(Rsize, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case);
 
+  // Allocate the instance:
+  //  If TLAB is enabled:
+  //    Try to allocate in the TLAB.
+  //    If fails, go to the slow path.
+  //  Else If inline contiguous allocations are enabled:
+  //    Try to allocate in eden.
+  //    If fails due to heap end, go to slow path.
   //
-  // Allocate the instance
-  // 1) Try to allocate in the TLAB
-  // 2) if fail and the object is large allocate in the shared Eden
-  // 3) if the above fails (or is not applicable), go to a slow case
-  // (creates a new TLAB, etc.)
-
+  //  If TLAB is enabled OR inline contiguous is enabled:
+  //    Initialize the allocation.
+  //    Exit.
+  //
+  //  Go to slow path.
   if (UseTLAB) {
     const Register Rtlab_top = R1_tmp;
     const Register Rtlab_end = R2_tmp;
@@ -4396,7 +4401,7 @@
     __ ldr(Rtlab_end, Address(Rthread, in_bytes(JavaThread::tlab_end_offset())));
     __ add(Rtlab_top, Robj, Rsize);
     __ cmp(Rtlab_top, Rtlab_end);
-    __ b(allow_shared_alloc ? allocate_shared : slow_case, hi);
+    __ b(slow_case, hi);
     __ str(Rtlab_top, Address(Rthread, JavaThread::tlab_top_offset()));
     if (ZeroTLAB) {
       // the fields have been already cleared
@@ -4405,45 +4410,43 @@
       // initialize both the header and fields
       __ b(initialize_object);
     }
-  }
-
-  // Allocation in the shared Eden, if allowed.
-  if (allow_shared_alloc) {
-    __ bind(allocate_shared);
-
-    const Register Rheap_top_addr = R2_tmp;
-    const Register Rheap_top = R5_tmp;
-    const Register Rheap_end = Rtemp;
-    assert_different_registers(Robj, Rklass, Rsize, Rheap_top_addr, Rheap_top, Rheap_end, LR);
-
-    // heap_end now (re)loaded in the loop since also used as a scratch register in the CAS
-    __ ldr_literal(Rheap_top_addr, Lheap_top_addr);
-
-    Label retry;
-    __ bind(retry);
+  } else {
+    // Allocation in the shared Eden, if allowed.
+    if (allow_shared_alloc) {
+      const Register Rheap_top_addr = R2_tmp;
+      const Register Rheap_top = R5_tmp;
+      const Register Rheap_end = Rtemp;
+      assert_different_registers(Robj, Rklass, Rsize, Rheap_top_addr, Rheap_top, Rheap_end, LR);
+
+      // heap_end now (re)loaded in the loop since also used as a scratch register in the CAS
+      __ ldr_literal(Rheap_top_addr, Lheap_top_addr);
+
+      Label retry;
+      __ bind(retry);
 
 #ifdef AARCH64
-    __ ldxr(Robj, Rheap_top_addr);
+      __ ldxr(Robj, Rheap_top_addr);
 #else
-    __ ldr(Robj, Address(Rheap_top_addr));
+      __ ldr(Robj, Address(Rheap_top_addr));
 #endif // AARCH64
 
-    __ ldr(Rheap_end, Address(Rheap_top_addr, (intptr_t)Universe::heap()->end_addr()-(intptr_t)Universe::heap()->top_addr()));
-    __ add(Rheap_top, Robj, Rsize);
-    __ cmp(Rheap_top, Rheap_end);
-    __ b(slow_case, hi);
-
-    // Update heap top atomically.
-    // If someone beats us on the allocation, try again, otherwise continue.
+      __ ldr(Rheap_end, Address(Rheap_top_addr, (intptr_t)Universe::heap()->end_addr()-(intptr_t)Universe::heap()->top_addr()));
+      __ add(Rheap_top, Robj, Rsize);
+      __ cmp(Rheap_top, Rheap_end);
+      __ b(slow_case, hi);
+
+      // Update heap top atomically.
+      // If someone beats us on the allocation, try again, otherwise continue.
 #ifdef AARCH64
-    __ stxr(Rtemp2, Rheap_top, Rheap_top_addr);
-    __ cbnz_w(Rtemp2, retry);
+      __ stxr(Rtemp2, Rheap_top, Rheap_top_addr);
+      __ cbnz_w(Rtemp2, retry);
 #else
-    __ atomic_cas_bool(Robj, Rheap_top, Rheap_top_addr, 0, Rheap_end/*scratched*/);
-    __ b(retry, ne);
+      __ atomic_cas_bool(Robj, Rheap_top, Rheap_top_addr, 0, Rheap_end/*scratched*/);
+      __ b(retry, ne);
 #endif // AARCH64
 
-    __ incr_allocated_bytes(Rsize, Rtemp);
+      __ incr_allocated_bytes(Rsize, Rtemp);
+    }
   }
 
   if (UseTLAB || allow_shared_alloc) {
--- a/src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -34,8 +34,8 @@
 #include "runtime/basicLock.hpp"
 #include "runtime/biasedLocking.hpp"
 #include "runtime/os.hpp"
+#include "runtime/sharedRuntime.hpp"
 #include "runtime/stubRoutines.hpp"
-#include "runtime/sharedRuntime.hpp"
 #include "utilities/align.hpp"
 
 
--- a/src/hotspot/cpu/ppc/c1_globals_ppc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/c1_globals_ppc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -33,36 +33,36 @@
 // (see c1_globals.hpp)
 
 #ifndef TIERED
-define_pd_global(bool, BackgroundCompilation,        true );
-define_pd_global(bool, CICompileOSR,                 true );
-define_pd_global(bool, InlineIntrinsics,             true );
-define_pd_global(bool, PreferInterpreterNativeStubs, false);
-define_pd_global(bool, ProfileTraps,                 false);
-define_pd_global(bool, UseOnStackReplacement,        true );
-define_pd_global(bool, TieredCompilation,            false);
-define_pd_global(intx, CompileThreshold,             1000 );
+define_pd_global(bool,     BackgroundCompilation,        true);
+define_pd_global(bool,     CICompileOSR,                 true);
+define_pd_global(bool,     InlineIntrinsics,             true);
+define_pd_global(bool,     PreferInterpreterNativeStubs, false);
+define_pd_global(bool,     ProfileTraps,                 false);
+define_pd_global(bool,     UseOnStackReplacement,        true);
+define_pd_global(bool,     TieredCompilation,            false);
+define_pd_global(intx,     CompileThreshold,             1000);
 
-define_pd_global(intx, OnStackReplacePercentage,     1400 );
-define_pd_global(bool, UseTLAB,                      true );
-define_pd_global(bool, ProfileInterpreter,           false);
-define_pd_global(intx, FreqInlineSize,               325  );
-define_pd_global(bool, ResizeTLAB,                   true );
-define_pd_global(intx, ReservedCodeCacheSize,        32*M );
-define_pd_global(intx, CodeCacheExpansionSize,       32*K );
-define_pd_global(uintx,CodeCacheMinBlockLength,      1);
-define_pd_global(uintx,MetaspaceSize,                12*M );
-define_pd_global(bool, NeverActAsServerClassMachine, true );
-define_pd_global(intx, NewSizeThreadIncrease,        16*K );
-define_pd_global(uint64_t,MaxRAM,                    1ULL*G);
-define_pd_global(intx, InitialCodeCacheSize,         160*K);
+define_pd_global(intx,     OnStackReplacePercentage,     1400);
+define_pd_global(bool,     UseTLAB,                      true);
+define_pd_global(bool,     ProfileInterpreter,           false);
+define_pd_global(intx,     FreqInlineSize,               325 );
+define_pd_global(bool,     ResizeTLAB,                   true);
+define_pd_global(uintx,    ReservedCodeCacheSize,        32*M);
+define_pd_global(uintx,    CodeCacheExpansionSize,       32*K);
+define_pd_global(uintx,    CodeCacheMinBlockLength,      1);
+define_pd_global(size_t,   MetaspaceSize,                12*M);
+define_pd_global(bool,     NeverActAsServerClassMachine, true);
+define_pd_global(size_t,   NewSizeThreadIncrease,        16*K);
+define_pd_global(uint64_t, MaxRAM,                       1ULL*G);
+define_pd_global(uintx,    InitialCodeCacheSize,         160*K);
 #endif // !TIERED
 
-define_pd_global(bool, UseTypeProfile,               false);
-define_pd_global(bool, RoundFPResults,               false);
+define_pd_global(bool,     UseTypeProfile,               false);
+define_pd_global(bool,     RoundFPResults,               false);
 
-define_pd_global(bool, LIRFillDelaySlots,            false);
-define_pd_global(bool, OptimizeSinglePrecision,      false);
-define_pd_global(bool, CSEArrayLength,               true );
-define_pd_global(bool, TwoOperandLIRForm,            false);
+define_pd_global(bool,     LIRFillDelaySlots,            false);
+define_pd_global(bool,     OptimizeSinglePrecision,      false);
+define_pd_global(bool,     CSEArrayLength,               true);
+define_pd_global(bool,     TwoOperandLIRForm,            false);
 
 #endif // CPU_PPC_VM_C1_GLOBALS_PPC_HPP
--- a/src/hotspot/cpu/ppc/c2_globals_ppc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/c2_globals_ppc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -39,7 +39,7 @@
 define_pd_global(bool, ProfileTraps,                 true);
 define_pd_global(bool, UseOnStackReplacement,        true);
 define_pd_global(bool, ProfileInterpreter,           true);
-define_pd_global(bool, TieredCompilation,            true);
+define_pd_global(bool, TieredCompilation,            trueInTiered);
 define_pd_global(intx, CompileThreshold,             10000);
 
 define_pd_global(intx, OnStackReplacePercentage,     140);
@@ -78,27 +78,27 @@
 //   x.f = 0
 //   loc = x.f
 //   NullCheck loc
-define_pd_global(bool, OptoScheduling,               false);
-define_pd_global(bool, IdealizeClearArrayNode,       true);
+define_pd_global(bool,     OptoScheduling,               false);
+define_pd_global(bool,     IdealizeClearArrayNode,       true);
 
-define_pd_global(intx, InitialCodeCacheSize,         2048*K); // Integral multiple of CodeCacheExpansionSize
-define_pd_global(intx, ReservedCodeCacheSize,        256*M);
-define_pd_global(intx, NonProfiledCodeHeapSize,      125*M);
-define_pd_global(intx, ProfiledCodeHeapSize,         126*M);
-define_pd_global(intx, NonNMethodCodeHeapSize,       5*M  );
-define_pd_global(intx, CodeCacheExpansionSize,       64*K);
+define_pd_global(uintx,    InitialCodeCacheSize,         2048*K); // Integral multiple of CodeCacheExpansionSize
+define_pd_global(uintx,    ReservedCodeCacheSize,        256*M);
+define_pd_global(uintx,    NonProfiledCodeHeapSize,      125*M);
+define_pd_global(uintx,    ProfiledCodeHeapSize,         126*M);
+define_pd_global(uintx,    NonNMethodCodeHeapSize,       5*M  );
+define_pd_global(uintx,    CodeCacheExpansionSize,       64*K);
 
 // Ergonomics related flags
-define_pd_global(uint64_t, MaxRAM,                   4ULL*G);
-define_pd_global(uintx, CodeCacheMinBlockLength,     4);
-define_pd_global(uintx, CodeCacheMinimumUseSpace,    400*K);
+define_pd_global(uint64_t, MaxRAM,                       128ULL*G);
+define_pd_global(uintx,    CodeCacheMinBlockLength,      4);
+define_pd_global(uintx,    CodeCacheMinimumUseSpace,     400*K);
 
-define_pd_global(bool,  TrapBasedRangeChecks,        true);
+define_pd_global(bool,     TrapBasedRangeChecks,          true);
 
 // Heap related flags
-define_pd_global(size_t, MetaspaceSize,              ScaleForWordSize(16*M));
+define_pd_global(size_t,   MetaspaceSize,                ScaleForWordSize(16*M));
 
 // Ergonomics related flags
-define_pd_global(bool, NeverActAsServerClassMachine, false);
+define_pd_global(bool,     NeverActAsServerClassMachine, false);
 
 #endif // CPU_PPC_VM_C2_GLOBALS_PPC_HPP
--- a/src/hotspot/cpu/ppc/c2_init_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/c2_init_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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,11 +29,11 @@
 #include "runtime/globals.hpp"
 #include "utilities/debug.hpp"
 
-// processor dependent initialization for ppc
+// Processor dependent initialization of C2 compiler for ppc.
 
 void Compile::pd_compiler2_init() {
 
-  // Power7 and later
+  // Power7 and later.
   if (PowerArchitecturePPC64 > 6) {
     if (FLAG_IS_DEFAULT(UsePopCountInstruction)) {
       FLAG_SET_ERGO(bool, UsePopCountInstruction, true);
--- a/src/hotspot/cpu/ppc/globals_ppc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/globals_ppc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 SAP SE. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -86,14 +86,14 @@
 define_pd_global(bool, ThreadLocalHandshakes, true);
 
 // Platform dependent flag handling: flags only defined on this platform.
-#define ARCH_FLAGS(develop, \
-                   product, \
-                   diagnostic, \
+#define ARCH_FLAGS(develop,      \
+                   product,      \
+                   diagnostic,   \
                    experimental, \
-                   notproduct, \
-                   range, \
-                   constraint, \
-                   writeable)  \
+                   notproduct,   \
+                   range,        \
+                   constraint,   \
+                   writeable)    \
                                                                             \
   product(uintx, PowerArchitecturePPC64, 0,                                 \
           "CPU Version: x for PowerX. Currently recognizes Power5 to "      \
--- a/src/hotspot/cpu/ppc/icache_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/icache_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2013 SAP SE. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -24,7 +24,6 @@
  */
 
 #include "precompiled.hpp"
-#include "assembler_ppc.inline.hpp"
 #include "runtime/icache.hpp"
 
 // Use inline assembler to implement icache flush.
@@ -32,7 +31,7 @@
   address end = start + (unsigned int)lines*ICache::line_size;
   assert(start <= end, "flush_icache parms");
 
-  // store modified cache lines from data cache
+  // Store modified cache lines from data cache.
   for (address a = start; a < end; a += ICache::line_size) {
     __asm__ __volatile__(
      "dcbst 0, %0  \n"
@@ -48,7 +47,7 @@
      :
      : "memory");
 
-  // invalidate respective cache lines in instruction cache
+  // Invalidate respective cache lines in instruction cache.
   for (address a = start; a < end; a += ICache::line_size) {
     __asm__ __volatile__(
      "icbi 0, %0   \n"
@@ -57,7 +56,7 @@
      : "memory");
   }
 
-  // discard fetched instructions
+  // Discard fetched instructions.
   __asm__ __volatile__(
      "isync \n"
      :
@@ -71,6 +70,8 @@
 
   *flush_icache_stub = (ICache::flush_icache_stub_t)ICache::ppc64_flush_icache;
 
-  // First call to flush itself
+  // First call to flush itself.
+  // Pointless since we call C, but it is expected to get
+  // executed during VM_Version::determine_features().
   ICache::invalidate_range((address)(*flush_icache_stub), 0);
 }
--- a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 SAP SE. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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,6 +32,10 @@
 #include "runtime/safepointMechanism.hpp"
 #include "runtime/sharedRuntime.hpp"
 
+// Implementation of InterpreterMacroAssembler.
+
+// This file specializes the assembler with interpreter-specific macros.
+
 #ifdef PRODUCT
 #define BLOCK_COMMENT(str) // nothing
 #else
--- a/src/hotspot/cpu/ppc/jniFastGetField_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/jniFastGetField_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2013 SAP SE. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -24,7 +24,7 @@
  */
 
 #include "precompiled.hpp"
-#include "assembler_ppc.inline.hpp"
+#include "asm/assembler.inline.hpp"
 #include "memory/resourceArea.hpp"
 #include "prims/jniFastGetField.hpp"
 #include "prims/jvm_misc.hpp"
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2017, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -2883,10 +2883,6 @@
     //assert(ObjectMonitor::recursions_size_in_bytes() == 8, "unexpected size");
     asm_assert_mem8_is_zero(ObjectMonitor::recursions_offset_in_bytes(), temp,
                             "monitor->_recursions should be 0", -1);
-    // Invariant 2: OwnerIsThread shouldn't be 0.
-    //assert(ObjectMonitor::OwnerIsThread_size_in_bytes() == 4, "unexpected size");
-    //asm_assert_mem4_isnot_zero(ObjectMonitor::OwnerIsThread_offset_in_bytes(), temp,
-    //                           "monitor->OwnerIsThread shouldn't be 0", -1);
 #   endif
 
 #if INCLUDE_RTM_OPT
@@ -5604,12 +5600,17 @@
 
 #endif // !PRODUCT
 
-SkipIfEqualZero::SkipIfEqualZero(MacroAssembler* masm, Register temp, const bool* flag_addr) : _masm(masm), _label() {
+void SkipIfEqualZero::skip_to_label_if_equal_zero(MacroAssembler* masm, Register temp,
+                                                  const bool* flag_addr, Label& label) {
   int simm16_offset = masm->load_const_optimized(temp, (address)flag_addr, R0, true);
   assert(sizeof(bool) == 1, "PowerPC ABI");
   masm->lbz(temp, simm16_offset, temp);
   masm->cmpwi(CCR0, temp, 0);
-  masm->beq(CCR0, _label);
+  masm->beq(CCR0, label);
+}
+
+SkipIfEqualZero::SkipIfEqualZero(MacroAssembler* masm, Register temp, const bool* flag_addr) : _masm(masm), _label() {
+  skip_to_label_if_equal_zero(masm, temp, flag_addr, _label);
 }
 
 SkipIfEqualZero::~SkipIfEqualZero() {
--- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -980,6 +980,8 @@
  public:
    // 'Temp' is a temp register that this object can use (and trash).
    explicit SkipIfEqualZero(MacroAssembler*, Register temp, const bool* flag_addr);
+   static void skip_to_label_if_equal_zero(MacroAssembler*, Register temp,
+                                           const bool* flag_addr, Label& label);
    ~SkipIfEqualZero();
 };
 
--- a/src/hotspot/cpu/ppc/nativeInst_ppc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/nativeInst_ppc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -26,7 +26,6 @@
 #ifndef CPU_PPC_VM_NATIVEINST_PPC_HPP
 #define CPU_PPC_VM_NATIVEINST_PPC_HPP
 
-#include "asm/assembler.hpp"
 #include "asm/macroAssembler.hpp"
 #include "memory/allocation.hpp"
 #include "runtime/icache.hpp"
--- a/src/hotspot/cpu/ppc/relocInfo_ppc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/relocInfo_ppc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2013 SAP SE. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -43,4 +43,10 @@
 #endif
   };
 
+ public:
+
+  // This platform has no oops in the code that are not also
+  // listed in the oop section.
+  static bool mustIterateImmediateOopsInCode() { return false; }
+
 #endif // CPU_PPC_VM_RELOCINFO_PPC_HPP
--- a/src/hotspot/cpu/ppc/runtime_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/runtime_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -25,7 +25,6 @@
 
 #include "precompiled.hpp"
 #ifdef COMPILER2
-#include "asm/assembler.inline.hpp"
 #include "asm/macroAssembler.inline.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "code/vmreg.hpp"
--- a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 SAP SE. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018 SAP SE. 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
@@ -1912,8 +1912,8 @@
   // - *_slot_offset Indicates offset from SP in number of stack slots.
   // - *_offset      Indicates offset from SP in bytes.
 
-  int stack_slots = c_calling_convention(out_sig_bt, out_regs, out_regs2, total_c_args) // 1+2)
-                  + SharedRuntime::out_preserve_stack_slots(); // See c_calling_convention.
+  int stack_slots = c_calling_convention(out_sig_bt, out_regs, out_regs2, total_c_args) + // 1+2)
+                    SharedRuntime::out_preserve_stack_slots(); // See c_calling_convention.
 
   // Now the space for the inbound oop handle area.
   int total_save_slots = num_java_iarg_registers * VMRegImpl::slots_per_word;
@@ -2044,7 +2044,8 @@
   OopMap    *oop_map  = new OopMap(stack_slots * 2, 0 /* arg_slots*/);
 
   if (is_critical_native) {
-    check_needs_gc_for_critical_native(masm, stack_slots, total_in_args, oop_handle_slot_offset, oop_maps, in_regs, in_sig_bt, r_temp_1);
+    check_needs_gc_for_critical_native(masm, stack_slots, total_in_args, oop_handle_slot_offset,
+                                       oop_maps, in_regs, in_sig_bt, r_temp_1);
   }
 
   // Move arguments from register/stack to register/stack.
--- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2017, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -40,6 +40,10 @@
 #include "runtime/thread.inline.hpp"
 #include "utilities/align.hpp"
 
+// Declaration and definition of StubGenerator (no .hpp file).
+// For a more detailed description of the stub routine structure
+// see the comment in stubRoutines.hpp.
+
 #define __ _masm->
 
 #ifdef PRODUCT
--- a/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2017, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -23,6 +23,7 @@
  *
  */
 
+#include "precompiled.hpp"
 #include "asm/macroAssembler.inline.hpp"
 #include "runtime/stubRoutines.hpp"
 
--- a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2015, 2017, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -582,25 +582,6 @@
   return entry;
 }
 
-#if 0
-// Call special ClassCastException constructor taking object to cast
-// and target class as arguments.
-address TemplateInterpreterGenerator::generate_ClassCastException_verbose_handler() {
-  address entry = __ pc();
-
-  // Expression stack must be empty before entering the VM if an
-  // exception happened.
-  __ empty_expression_stack();
-
-  // Thread will be loaded to R3_ARG1.
-  // Target class oop is in register R5_ARG3 by convention!
-  __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose), R17_tos, R5_ARG3);
-  // Above call must not return here since exception pending.
-  DEBUG_ONLY(__ should_not_reach_here();)
-  return entry;
-}
-#endif
-
 address TemplateInterpreterGenerator::generate_ClassCastException_handler() {
   address entry = __ pc();
   // Expression stack must be empty before entering the VM if an
@@ -1896,7 +1877,6 @@
   return NULL;
 }
 
-
 /**
  * Method entry for static native methods:
  *   int java.util.zip.CRC32.updateBytes(     int crc, byte[] b,  int off, int len)
--- a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -3637,10 +3637,7 @@
   transition(vtos, atos);
 
   Label Lslow_case,
-        Ldone,
-        Linitialize_header,
-        Lallocate_shared,
-        Linitialize_object;  // Including clearing the fields.
+        Ldone;
 
   const Register RallocatedObject = R17_tos,
                  RinstanceKlass   = R9_ARG7,
@@ -3651,8 +3648,6 @@
                  Rtags            = R3_ARG1,
                  Rindex           = R5_ARG3;
 
-  const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc();
-
   // --------------------------------------------------------------------------
   // Check if fast case is possible.
 
@@ -3661,6 +3656,8 @@
   // Load index of constant pool entry.
   __ get_2_byte_integer_at_bcp(1, Rindex, InterpreterMacroAssembler::Unsigned);
 
+  // Note: compared to other architectures, PPC's implementation always goes
+  // to the slow path if TLAB is used and fails.
   if (UseTLAB) {
     // Make sure the class we're about to instantiate has been resolved
     // This is done before loading instanceKlass to be consistent with the order
@@ -3690,8 +3687,7 @@
     // Fast case:
     // Allocate the instance.
     // 1) Try to allocate in the TLAB.
-    // 2) If fail, and the TLAB is not full enough to discard, allocate in the shared Eden.
-    // 3) If the above fails (or is not applicable), go to a slow case (creates a new TLAB, etc.).
+    // 2) If the above fails (or is not applicable), go to a slow case (creates a new TLAB, etc.).
 
     Register RoldTopValue = RallocatedObject; // Object will be allocated here if it fits.
     Register RnewTopValue = R6_ARG4;
@@ -3705,53 +3701,13 @@
 
     // If there is enough space, we do not CAS and do not clear.
     __ cmpld(CCR0, RnewTopValue, RendValue);
-    __ bgt(CCR0, allow_shared_alloc ? Lallocate_shared : Lslow_case);
+    __ bgt(CCR0, Lslow_case);
 
     __ std(RnewTopValue, in_bytes(JavaThread::tlab_top_offset()), R16_thread);
 
-    if (ZeroTLAB) {
-      // The fields have already been cleared.
-      __ b(Linitialize_header);
-    } else {
-      // Initialize both the header and fields.
-      __ b(Linitialize_object);
-    }
-
-    // Fall through: TLAB was too small.
-    if (allow_shared_alloc) {
-      Register RtlabWasteLimitValue = R10_ARG8;
-      Register RfreeValue = RnewTopValue;
-
-      __ bind(Lallocate_shared);
-      // Check if tlab should be discarded (refill_waste_limit >= free).
-      __ ld(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread);
-      __ subf(RfreeValue, RoldTopValue, RendValue);
-      __ srdi(RfreeValue, RfreeValue, LogHeapWordSize); // in dwords
-      __ cmpld(CCR0, RtlabWasteLimitValue, RfreeValue);
-      __ bge(CCR0, Lslow_case);
-
-      // Increment waste limit to prevent getting stuck on this slow path.
-      __ add_const_optimized(RtlabWasteLimitValue, RtlabWasteLimitValue, ThreadLocalAllocBuffer::refill_waste_limit_increment());
-      __ std(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread);
-    }
-    // else: No allocation in the shared eden. // fallthru: __ b(Lslow_case);
-  }
-  // else: Always go the slow path.
-
-  // --------------------------------------------------------------------------
-  // slow case
-  __ bind(Lslow_case);
-  call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex);
-
-  if (UseTLAB) {
-    __ b(Ldone);
-    // --------------------------------------------------------------------------
-    // Init1: Zero out newly allocated memory.
-
-    if (!ZeroTLAB || allow_shared_alloc) {
-      // Clear object fields.
-      __ bind(Linitialize_object);
-
+    if (!ZeroTLAB) {
+      // --------------------------------------------------------------------------
+      // Init1: Zero out newly allocated memory.
       // Initialize remaining object fields.
       Register Rbase = Rtags;
       __ addi(Rinstance_size, Rinstance_size, 7 - (int)sizeof(oopDesc));
@@ -3760,13 +3716,10 @@
 
       // Clear out object skipping header. Takes also care of the zero length case.
       __ clear_memory_doubleword(Rbase, Rinstance_size);
-      // fallthru: __ b(Linitialize_header);
     }
 
     // --------------------------------------------------------------------------
     // Init2: Initialize the header: mark, klass
-    __ bind(Linitialize_header);
-
     // Init mark.
     if (UseBiasedLocking) {
       __ ld(Rscratch, in_bytes(Klass::prototype_header_offset()), RinstanceKlass);
@@ -3780,14 +3733,19 @@
     __ store_klass(RallocatedObject, RinstanceKlass, Rscratch); // klass (last for cms)
 
     // Check and trigger dtrace event.
-    {
-      SkipIfEqualZero skip_if(_masm, Rscratch, &DTraceAllocProbes);
-      __ push(atos);
-      __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc));
-      __ pop(atos);
-    }
+    SkipIfEqualZero::skip_to_label_if_equal_zero(_masm, Rscratch, &DTraceAllocProbes, Ldone);
+    __ push(atos);
+    __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc));
+    __ pop(atos);
+
+    __ b(Ldone);
   }
 
+  // --------------------------------------------------------------------------
+  // slow case
+  __ bind(Lslow_case);
+  call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex);
+
   // continue
   __ bind(Ldone);
 
--- a/src/hotspot/cpu/s390/bytes_s390.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/s390/bytes_s390.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018 SAP SE. 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
@@ -42,11 +42,6 @@
   //
   // In short, it makes no sense on z/Architecture to piecemeal get or put unaligned data.
 
-  // Only swap on little endian machines => suffix `_le'.
-  static inline u2   swap_u2_le(u2 x) { return x; }
-  static inline u4   swap_u4_le(u4 x) { return x; }
-  static inline u8   swap_u8_le(u8 x) { return x; }
-
   static inline u2   get_native_u2(address p) { return *(u2*)p; }
   static inline u4   get_native_u4(address p) { return *(u4*)p; }
   static inline u8   get_native_u8(address p) { return *(u8*)p; }
@@ -55,7 +50,8 @@
   static inline void put_native_u4(address p, u4 x) { *(u4*)p = x; }
   static inline void put_native_u8(address p, u8 x) { *(u8*)p = x; }
 
-#include "bytes_linux_s390.inline.hpp"
+  // The following header contains the implementations of swap_u2, swap_u4, and swap_u8.
+#include OS_CPU_HEADER_INLINE(bytes)
 
   // Efficient reading and writing of unaligned unsigned data in Java byte ordering (i.e. big-endian ordering)
   static inline u2   get_Java_u2(address p) { return get_native_u2(p); }
--- a/src/hotspot/cpu/s390/c1_globals_s390.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/s390/c1_globals_s390.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018 SAP SE. 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
@@ -48,7 +48,7 @@
 define_pd_global(bool,     ProfileInterpreter,           false);
 define_pd_global(intx,     FreqInlineSize,               325);
 define_pd_global(bool,     ResizeTLAB,                   true);
-define_pd_global(intx,     ReservedCodeCacheSize,        32*M);
+define_pd_global(uintx,    ReservedCodeCacheSize,        32*M);
 define_pd_global(uintx,    NonProfiledCodeHeapSize,      13*M);
 define_pd_global(uintx,    ProfiledCodeHeapSize,         14*M);
 define_pd_global(uintx,    NonNMethodCodeHeapSize,       5*M);
--- a/src/hotspot/cpu/s390/c2_globals_s390.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/s390/c2_globals_s390.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018 SAP SE. 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
@@ -58,7 +58,7 @@
 define_pd_global(intx, LoopPercentProfileLimit,      10);
 define_pd_global(intx, MinJumpTableSize,             18);
 
-// Peephole and CISC spilling both break the graph, and so makes the
+// Peephole and CISC spilling both break the graph, and so make the
 // scheduler sick.
 define_pd_global(bool, OptoPeephole,                 false);
 define_pd_global(bool, UseCISCSpill,                 true);
--- a/src/hotspot/cpu/s390/globals_s390.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/s390/globals_s390.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016, 2017 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2018 SAP SE. 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
@@ -87,7 +87,14 @@
 
 define_pd_global(bool, ThreadLocalHandshakes, true);
 
-#define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct, range, constraint, writeable) \
+#define ARCH_FLAGS(develop,      \
+                   product,      \
+                   diagnostic,   \
+                   experimental, \
+                   notproduct,   \
+                   range,        \
+                   constraint,   \
+                   writeable)    \
                                                                               \
   /* Reoptimize code-sequences of calls at runtime, e.g. replace an */        \
   /* indirect call by a direct call.                                */        \
--- a/src/hotspot/cpu/s390/relocInfo_s390.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/s390/relocInfo_s390.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018 SAP SE. 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
@@ -110,6 +110,10 @@
     pcrel_data_format   = 3   // Relocation is for the target data of a pc-relative instruction.
   };
 
+  // This platform has no oops in the code that are not also
+  // listed in the oop section.
+  static bool mustIterateImmediateOopsInCode() { return false; }
+
   // Store the new target address into an oop_Relocation cell, if any.
   // Return indication if update happened.
   static bool update_oop_pool(address begin, address end, address newTarget, CodeBlob* cb);
--- a/src/hotspot/cpu/sparc/compiledIC_sparc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/sparc/compiledIC_sparc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -73,6 +73,11 @@
 }
 #undef __
 
+int CompiledStaticCall::to_trampoline_stub_size() {
+  // SPARC doesn't use trampolines.
+  return 0;
+}
+
 int CompiledStaticCall::to_interp_stub_size() {
   // This doesn't need to be accurate but it must be larger or equal to
   // the real size of the stub.
--- a/src/hotspot/cpu/sparc/jvmciCodeInstaller_sparc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/sparc/jvmciCodeInstaller_sparc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -115,7 +115,7 @@
   TRACE_jvmci_3("relocating (foreign call) at " PTR_FORMAT, p2i(inst));
 }
 
-void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) {
+void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &, Handle hotspot_method, jint pc_offset, TRAPS) {
 #ifdef ASSERT
   Method* method = NULL;
   // we need to check, this might also be an unresolved method
--- a/src/hotspot/cpu/sparc/relocInfo_sparc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/sparc/relocInfo_sparc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,11 @@
     format_width       =  1
   };
 
+ public:
+
+  // This platform has no oops in the code that are not also
+  // listed in the oop section.
+  static bool mustIterateImmediateOopsInCode() { return false; }
 
 //Reconciliation History
 // 1.3 97/10/15 15:38:36 relocInfo_i486.hpp
--- a/src/hotspot/cpu/sparc/templateTable_sparc.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/sparc/templateTable_sparc.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -3259,11 +3259,19 @@
   __ br(Assembler::notZero, false, Assembler::pn, slow_case);
   __ delayed()->nop();
 
-  // allocate the instance
-  // 1) Try to allocate in the TLAB
-  // 2) if fail, and the TLAB is not full enough to discard, allocate in the shared Eden
-  // 3) if the above fails (or is not applicable), go to a slow case
-  // (creates a new TLAB, etc.)
+  // Allocate the instance:
+  //  If TLAB is enabled:
+  //    Try to allocate in the TLAB.
+  //    If fails, go to the slow path.
+  //  Else If inline contiguous allocations are enabled:
+  //    Try to allocate in eden.
+  //    If fails due to heap end, go to slow path.
+  //
+  //  If TLAB is enabled OR inline contiguous is enabled:
+  //    Initialize the allocation.
+  //    Exit.
+  //
+  //  Go to slow path.
 
   const bool allow_shared_alloc =
     Universe::heap()->supports_inline_contig_alloc();
@@ -3291,61 +3299,43 @@
     }
     __ delayed()->st_ptr(RnewTopValue, G2_thread, in_bytes(JavaThread::tlab_top_offset()));
 
+    // Allocation does not fit in the TLAB.
+    __ ba_short(slow_case);
+  } else {
+    // Allocation in the shared Eden
     if (allow_shared_alloc) {
-      // Check if tlab should be discarded (refill_waste_limit >= free)
-      __ ld_ptr(G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), RtlabWasteLimitValue);
-      __ sub(RendValue, RoldTopValue, RfreeValue);
-      __ srlx(RfreeValue, LogHeapWordSize, RfreeValue);
-      __ cmp_and_brx_short(RtlabWasteLimitValue, RfreeValue, Assembler::greaterEqualUnsigned, Assembler::pt, slow_case); // tlab waste is small
-
-      // increment waste limit to prevent getting stuck on this slow path
-      if (Assembler::is_simm13(ThreadLocalAllocBuffer::refill_waste_limit_increment())) {
-        __ add(RtlabWasteLimitValue, ThreadLocalAllocBuffer::refill_waste_limit_increment(), RtlabWasteLimitValue);
-      } else {
-        // set64 does not use the temp register if the given constant is 32 bit. So
-        // we can just use any register; using G0 results in ignoring of the upper 32 bit
-        // of that value.
-        __ set64(ThreadLocalAllocBuffer::refill_waste_limit_increment(), G4_scratch, G0);
-        __ add(RtlabWasteLimitValue, G4_scratch, RtlabWasteLimitValue);
-      }
-      __ st_ptr(RtlabWasteLimitValue, G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()));
-    } else {
-      // No allocation in the shared eden.
-      __ ba_short(slow_case);
+      Register RoldTopValue = G1_scratch;
+      Register RtopAddr = G3_scratch;
+      Register RnewTopValue = RallocatedObject;
+      Register RendValue = Rscratch;
+
+      __ set((intptr_t)Universe::heap()->top_addr(), RtopAddr);
+
+      Label retry;
+      __ bind(retry);
+      __ set((intptr_t)Universe::heap()->end_addr(), RendValue);
+      __ ld_ptr(RendValue, 0, RendValue);
+      __ ld_ptr(RtopAddr, 0, RoldTopValue);
+      __ add(RoldTopValue, Roffset, RnewTopValue);
+
+      // RnewTopValue contains the top address after the new object
+      // has been allocated.
+      __ cmp_and_brx_short(RnewTopValue, RendValue, Assembler::greaterUnsigned, Assembler::pn, slow_case);
+
+      __ cas_ptr(RtopAddr, RoldTopValue, RnewTopValue);
+
+      // if someone beat us on the allocation, try again, otherwise continue
+      __ cmp_and_brx_short(RoldTopValue, RnewTopValue, Assembler::notEqual, Assembler::pn, retry);
+
+      // bump total bytes allocated by this thread
+      // RoldTopValue and RtopAddr are dead, so can use G1 and G3
+      __ incr_allocated_bytes(Roffset, G1_scratch, G3_scratch);
     }
   }
 
-  // Allocation in the shared Eden
-  if (allow_shared_alloc) {
-    Register RoldTopValue = G1_scratch;
-    Register RtopAddr = G3_scratch;
-    Register RnewTopValue = RallocatedObject;
-    Register RendValue = Rscratch;
-
-    __ set((intptr_t)Universe::heap()->top_addr(), RtopAddr);
-
-    Label retry;
-    __ bind(retry);
-    __ set((intptr_t)Universe::heap()->end_addr(), RendValue);
-    __ ld_ptr(RendValue, 0, RendValue);
-    __ ld_ptr(RtopAddr, 0, RoldTopValue);
-    __ add(RoldTopValue, Roffset, RnewTopValue);
-
-    // RnewTopValue contains the top address after the new object
-    // has been allocated.
-    __ cmp_and_brx_short(RnewTopValue, RendValue, Assembler::greaterUnsigned, Assembler::pn, slow_case);
-
-    __ cas_ptr(RtopAddr, RoldTopValue, RnewTopValue);
-
-    // if someone beat us on the allocation, try again, otherwise continue
-    __ cmp_and_brx_short(RoldTopValue, RnewTopValue, Assembler::notEqual, Assembler::pn, retry);
-
-    // bump total bytes allocated by this thread
-    // RoldTopValue and RtopAddr are dead, so can use G1 and G3
-    __ incr_allocated_bytes(Roffset, G1_scratch, G3_scratch);
-  }
-
-  if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) {
+  // If UseTLAB or allow_shared_alloc are true, the object is created above and
+  // there is an initialize need. Otherwise, skip and go to the slow path.
+  if (UseTLAB || allow_shared_alloc) {
     // clear object fields
     __ bind(initialize_object);
     __ deccc(Roffset, sizeof(oopDesc));
--- a/src/hotspot/cpu/x86/assembler_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/assembler_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3167,6 +3167,89 @@
     return;
   }
 
+  if (UseAddressNop && VM_Version::is_zx()) {
+    //
+    // Using multi-bytes nops "0x0F 0x1F [address]" for ZX
+    //  1: 0x90
+    //  2: 0x66 0x90
+    //  3: 0x66 0x66 0x90 (don't use "0x0F 0x1F 0x00" - need patching safe padding)
+    //  4: 0x0F 0x1F 0x40 0x00
+    //  5: 0x0F 0x1F 0x44 0x00 0x00
+    //  6: 0x66 0x0F 0x1F 0x44 0x00 0x00
+    //  7: 0x0F 0x1F 0x80 0x00 0x00 0x00 0x00
+    //  8: 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
+    //  9: 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
+    // 10: 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
+    // 11: 0x66 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
+
+    // The rest coding is ZX specific - don't use consecutive address nops
+
+    // 12: 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
+    // 13: 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
+    // 14: 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
+    // 15: 0x66 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
+
+    while (i >= 15) {
+      // For ZX don't generate consecutive addess nops (mix with regular nops)
+      i -= 15;
+      emit_int8(0x66);   // size prefix
+      emit_int8(0x66);   // size prefix
+      emit_int8(0x66);   // size prefix
+      addr_nop_8();
+      emit_int8(0x66);   // size prefix
+      emit_int8(0x66);   // size prefix
+      emit_int8(0x66);   // size prefix
+      emit_int8((unsigned char)0x90);
+                         // nop
+    }
+    switch (i) {
+      case 14:
+        emit_int8(0x66); // size prefix
+      case 13:
+        emit_int8(0x66); // size prefix
+      case 12:
+        addr_nop_8();
+        emit_int8(0x66); // size prefix
+        emit_int8(0x66); // size prefix
+        emit_int8(0x66); // size prefix
+        emit_int8((unsigned char)0x90);
+                         // nop
+        break;
+      case 11:
+        emit_int8(0x66); // size prefix
+      case 10:
+        emit_int8(0x66); // size prefix
+      case 9:
+        emit_int8(0x66); // size prefix
+      case 8:
+        addr_nop_8();
+        break;
+      case 7:
+        addr_nop_7();
+        break;
+      case 6:
+        emit_int8(0x66); // size prefix
+      case 5:
+        addr_nop_5();
+        break;
+      case 4:
+        addr_nop_4();
+        break;
+      case 3:
+        // Don't use "0x0F 0x1F 0x00" - need patching safe padding
+        emit_int8(0x66); // size prefix
+      case 2:
+        emit_int8(0x66); // size prefix
+      case 1:
+        emit_int8((unsigned char)0x90);
+                         // nop
+        break;
+      default:
+        assert(i == 0, " ");
+    }
+    return;
+  }
+
   // Using nops with size prefixes "0x66 0x90".
   // From AMD Optimization Guide:
   //  1: 0x90
--- a/src/hotspot/cpu/x86/compiledIC_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/compiledIC_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -73,6 +73,11 @@
          LP64_ONLY(15);  // movq (1+1+8); jmp (1+4)
 }
 
+int CompiledStaticCall::to_trampoline_stub_size() {
+  // x86 doesn't use trampolines.
+  return 0;
+}
+
 // Relocation entries for call stub, compiled java to interpreter.
 int CompiledStaticCall::reloc_to_interp_stub() {
   return 4; // 3 in emit_to_interp_stub + 1 in emit_call
--- a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -144,7 +144,7 @@
   TRACE_jvmci_3("relocating (foreign call)  at " PTR_FORMAT, p2i(inst));
 }
 
-void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) {
+void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &, Handle hotspot_method, jint pc_offset, TRAPS) {
 #ifdef ASSERT
   Method* method = NULL;
   // we need to check, this might also be an unresolved method
--- a/src/hotspot/cpu/x86/relocInfo_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/relocInfo_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,4 +40,10 @@
 #endif
   };
 
+ public:
+
+  // Instruct loadConP of x86_64.ad places oops in code that are not also
+  // listed in the oop section.
+  static bool mustIterateImmediateOopsInCode() { return true; }
+
 #endif // CPU_X86_VM_RELOCINFO_X86_HPP
--- a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -433,7 +433,7 @@
 
 
   //----------------------------------------------------------------------------------------------------
-  // Support for jint Atomic::xchg(jint exchange_value, volatile jint* dest)
+  // Support for int32_t Atomic::xchg(int32_t exchange_value, volatile int32_t* dest)
   //
   // xchg exists as far back as 8086, lock needed for MP only
   // Stack layout immediately after call:
--- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -611,8 +611,8 @@
     return start;
   }
 
-  // Support for jbyte atomic::atomic_cmpxchg(jbyte exchange_value, volatile jbyte* dest,
-  //                                          jbyte compare_value)
+  // Support for int8_t atomic::atomic_cmpxchg(int8_t exchange_value, volatile int8_t* dest,
+  //                                           int8_t compare_value)
   //
   // Arguments :
   //    c_rarg0: exchange_value
@@ -637,9 +637,9 @@
     return start;
   }
 
-  // Support for jlong atomic::atomic_cmpxchg(jlong exchange_value,
-  //                                          volatile jlong* dest,
-  //                                          jlong compare_value)
+  // Support for int64_t atomic::atomic_cmpxchg(int64_t exchange_value,
+  //                                            volatile int64_t* dest,
+  //                                            int64_t compare_value)
   // Arguments :
   //    c_rarg0: exchange_value
   //    c_rarg1: dest
@@ -694,8 +694,8 @@
   // Result:
   //    *dest += add_value
   //    return *dest;
-  address generate_atomic_add_ptr() {
-    StubCodeMark mark(this, "StubRoutines", "atomic_add_ptr");
+  address generate_atomic_add_long() {
+    StubCodeMark mark(this, "StubRoutines", "atomic_add_long");
     address start = __ pc();
 
     __ movptr(rax, c_rarg0); // Copy to eax we need a return value anyhow
@@ -5015,14 +5015,14 @@
     StubRoutines::_catch_exception_entry = generate_catch_exception();
 
     // atomic calls
-    StubRoutines::_atomic_xchg_entry         = generate_atomic_xchg();
-    StubRoutines::_atomic_xchg_long_entry    = generate_atomic_xchg_long();
-    StubRoutines::_atomic_cmpxchg_entry      = generate_atomic_cmpxchg();
-    StubRoutines::_atomic_cmpxchg_byte_entry = generate_atomic_cmpxchg_byte();
-    StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long();
-    StubRoutines::_atomic_add_entry          = generate_atomic_add();
-    StubRoutines::_atomic_add_ptr_entry      = generate_atomic_add_ptr();
-    StubRoutines::_fence_entry               = generate_orderaccess_fence();
+    StubRoutines::_atomic_xchg_entry          = generate_atomic_xchg();
+    StubRoutines::_atomic_xchg_long_entry     = generate_atomic_xchg_long();
+    StubRoutines::_atomic_cmpxchg_entry       = generate_atomic_cmpxchg();
+    StubRoutines::_atomic_cmpxchg_byte_entry  = generate_atomic_cmpxchg_byte();
+    StubRoutines::_atomic_cmpxchg_long_entry  = generate_atomic_cmpxchg_long();
+    StubRoutines::_atomic_add_entry           = generate_atomic_add();
+    StubRoutines::_atomic_add_long_entry      = generate_atomic_add_long();
+    StubRoutines::_fence_entry                = generate_orderaccess_fence();
 
     // platform dependent
     StubRoutines::x86::_get_previous_fp_entry = generate_get_previous_fp();
--- a/src/hotspot/cpu/x86/templateTable_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/templateTable_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -3869,7 +3869,6 @@
   Label done;
   Label initialize_header;
   Label initialize_object;  // including clearing the fields
-  Label allocate_shared;
 
   __ get_cpool_and_tags(rcx, rax);
 
@@ -3895,12 +3894,19 @@
   __ testl(rdx, Klass::_lh_instance_slow_path_bit);
   __ jcc(Assembler::notZero, slow_case);
 
+  // Allocate the instance:
+  //  If TLAB is enabled:
+  //    Try to allocate in the TLAB.
+  //    If fails, go to the slow path.
+  //  Else If inline contiguous allocations are enabled:
+  //    Try to allocate in eden.
+  //    If fails due to heap end, go to slow path.
   //
-  // Allocate the instance
-  // 1) Try to allocate in the TLAB
-  // 2) if fail and the object is large allocate in the shared Eden
-  // 3) if the above fails (or is not applicable), go to a slow case
-  // (creates a new TLAB, etc.)
+  //  If TLAB is enabled OR inline contiguous is enabled:
+  //    Initialize the allocation.
+  //    Exit.
+  //
+  //  Go to slow path.
 
   const bool allow_shared_alloc =
     Universe::heap()->supports_inline_contig_alloc();
@@ -3916,7 +3922,7 @@
     __ movptr(rax, Address(thread, in_bytes(JavaThread::tlab_top_offset())));
     __ lea(rbx, Address(rax, rdx, Address::times_1));
     __ cmpptr(rbx, Address(thread, in_bytes(JavaThread::tlab_end_offset())));
-    __ jcc(Assembler::above, allow_shared_alloc ? allocate_shared : slow_case);
+    __ jcc(Assembler::above, slow_case);
     __ movptr(Address(thread, in_bytes(JavaThread::tlab_top_offset())), rbx);
     if (ZeroTLAB) {
       // the fields have been already cleared
@@ -3925,40 +3931,40 @@
       // initialize both the header and fields
       __ jmp(initialize_object);
     }
+  } else {
+    // Allocation in the shared Eden, if allowed.
+    //
+    // rdx: instance size in bytes
+    if (allow_shared_alloc) {
+      ExternalAddress heap_top((address)Universe::heap()->top_addr());
+      ExternalAddress heap_end((address)Universe::heap()->end_addr());
+
+      Label retry;
+      __ bind(retry);
+      __ movptr(rax, heap_top);
+      __ lea(rbx, Address(rax, rdx, Address::times_1));
+      __ cmpptr(rbx, heap_end);
+      __ jcc(Assembler::above, slow_case);
+
+      // Compare rax, with the top addr, and if still equal, store the new
+      // top addr in rbx, at the address of the top addr pointer. Sets ZF if was
+      // equal, and clears it otherwise. Use lock prefix for atomicity on MPs.
+      //
+      // rax,: object begin
+      // rbx,: object end
+      // rdx: instance size in bytes
+      __ locked_cmpxchgptr(rbx, heap_top);
+
+      // if someone beat us on the allocation, try again, otherwise continue
+      __ jcc(Assembler::notEqual, retry);
+
+      __ incr_allocated_bytes(thread, rdx, 0);
+    }
   }
 
-  // Allocation in the shared Eden, if allowed.
-  //
-  // rdx: instance size in bytes
-  if (allow_shared_alloc) {
-    __ bind(allocate_shared);
-
-    ExternalAddress heap_top((address)Universe::heap()->top_addr());
-    ExternalAddress heap_end((address)Universe::heap()->end_addr());
-
-    Label retry;
-    __ bind(retry);
-    __ movptr(rax, heap_top);
-    __ lea(rbx, Address(rax, rdx, Address::times_1));
-    __ cmpptr(rbx, heap_end);
-    __ jcc(Assembler::above, slow_case);
-
-    // Compare rax, with the top addr, and if still equal, store the new
-    // top addr in rbx, at the address of the top addr pointer. Sets ZF if was
-    // equal, and clears it otherwise. Use lock prefix for atomicity on MPs.
-    //
-    // rax,: object begin
-    // rbx,: object end
-    // rdx: instance size in bytes
-    __ locked_cmpxchgptr(rbx, heap_top);
-
-    // if someone beat us on the allocation, try again, otherwise continue
-    __ jcc(Assembler::notEqual, retry);
-
-    __ incr_allocated_bytes(thread, rdx, 0);
-  }
-
-  if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) {
+  // If UseTLAB or allow_shared_alloc are true, the object is created above and
+  // there is an initialize need. Otherwise, skip and go to the slow path.
+  if (UseTLAB || allow_shared_alloc) {
     // The object is initialized before the header.  If the object size is
     // zero, go directly to the header initialization.
     __ bind(initialize_object);
--- a/src/hotspot/cpu/x86/vm_version_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/vm_version_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -628,6 +628,11 @@
   if (UseSSE < 1)
     _features &= ~CPU_SSE;
 
+  //since AVX instructions is slower than SSE in some ZX cpus, force USEAVX=0.
+  if (is_zx() && ((cpu_family() == 6) || (cpu_family() == 7))) {
+    UseAVX = 0;
+  }
+
   // first try initial setting and detect what we can support
   int use_avx_limit = 0;
   if (UseAVX > 0) {
@@ -1078,6 +1083,66 @@
   // UseXmmRegToRegMoveAll == true  --> movaps(xmm, xmm), movapd(xmm, xmm).
   // UseXmmRegToRegMoveAll == false --> movss(xmm, xmm),  movsd(xmm, xmm).
 
+
+  if (is_zx()) { // ZX cpus specific settings
+    if (FLAG_IS_DEFAULT(UseStoreImmI16)) {
+      UseStoreImmI16 = false; // don't use it on ZX cpus
+    }
+    if ((cpu_family() == 6) || (cpu_family() == 7)) {
+      if (FLAG_IS_DEFAULT(UseAddressNop)) {
+        // Use it on all ZX cpus
+        UseAddressNop = true;
+      }
+    }
+    if (FLAG_IS_DEFAULT(UseXmmLoadAndClearUpper)) {
+      UseXmmLoadAndClearUpper = true; // use movsd on all ZX cpus
+    }
+    if (FLAG_IS_DEFAULT(UseXmmRegToRegMoveAll)) {
+      if (supports_sse3()) {
+        UseXmmRegToRegMoveAll = true; // use movaps, movapd on new ZX cpus
+      } else {
+        UseXmmRegToRegMoveAll = false;
+      }
+    }
+    if (((cpu_family() == 6) || (cpu_family() == 7)) && supports_sse3()) { // new ZX cpus
+#ifdef COMPILER2
+      if (FLAG_IS_DEFAULT(MaxLoopPad)) {
+        // For new ZX cpus do the next optimization:
+        // don't align the beginning of a loop if there are enough instructions
+        // left (NumberOfLoopInstrToAlign defined in c2_globals.hpp)
+        // in current fetch line (OptoLoopAlignment) or the padding
+        // is big (> MaxLoopPad).
+        // Set MaxLoopPad to 11 for new ZX cpus to reduce number of
+        // generated NOP instructions. 11 is the largest size of one
+        // address NOP instruction '0F 1F' (see Assembler::nop(i)).
+        MaxLoopPad = 11;
+      }
+#endif // COMPILER2
+      if (FLAG_IS_DEFAULT(UseXMMForArrayCopy)) {
+        UseXMMForArrayCopy = true; // use SSE2 movq on new ZX cpus
+      }
+      if (supports_sse4_2()) { // new ZX cpus
+        if (FLAG_IS_DEFAULT(UseUnalignedLoadStores)) {
+          UseUnalignedLoadStores = true; // use movdqu on newest ZX cpus
+        }
+      }
+      if (supports_sse4_2()) {
+        if (FLAG_IS_DEFAULT(UseSSE42Intrinsics)) {
+          FLAG_SET_DEFAULT(UseSSE42Intrinsics, true);
+        }
+      } else {
+        if (UseSSE42Intrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
+          warning("SSE4.2 intrinsics require SSE4.2 instructions or higher. Intrinsics will be disabled.");
+        }
+        FLAG_SET_DEFAULT(UseSSE42Intrinsics, false);
+      }
+    }
+
+    if (FLAG_IS_DEFAULT(AllocatePrefetchInstr) && supports_3dnow_prefetch()) {
+      FLAG_SET_DEFAULT(AllocatePrefetchInstr, 3);
+    }
+  }
+
   if( is_amd() ) { // AMD cpus specific settings
     if( supports_sse2() && FLAG_IS_DEFAULT(UseAddressNop) ) {
       // Use it on new AMD cpus starting from Opteron.
@@ -1374,6 +1439,14 @@
 #endif
   }
 
+  if (is_zx() && ((cpu_family() == 6) || (cpu_family() == 7)) && supports_sse4_2()) {
+#ifdef COMPILER2
+    if (FLAG_IS_DEFAULT(UseFPUForSpilling)) {
+      FLAG_SET_DEFAULT(UseFPUForSpilling, true);
+    }
+#endif
+  }
+
 #ifdef _LP64
   // Prefetch settings
 
--- a/src/hotspot/cpu/x86/vm_version_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/x86/vm_version_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -305,6 +305,9 @@
   enum Extended_Family {
     // AMD
     CPU_FAMILY_AMD_11H       = 0x11,
+    // ZX
+    CPU_FAMILY_ZX_CORE_F6    = 6,
+    CPU_FAMILY_ZX_CORE_F7    = 7,
     // Intel
     CPU_FAMILY_INTEL_CORE    = 6,
     CPU_MODEL_NEHALEM        = 0x1e,
@@ -549,6 +552,16 @@
       }
     }
 
+    // ZX features.
+    if (is_zx()) {
+      if (_cpuid_info.ext_cpuid1_ecx.bits.lzcnt_intel != 0)
+        result |= CPU_LZCNT;
+      // for ZX, ecx.bits.misalignsse bit (bit 8) indicates support for prefetchw
+      if (_cpuid_info.ext_cpuid1_ecx.bits.misalignsse != 0) {
+        result |= CPU_3DNOW_PREFETCH;
+      }
+    }
+
     return result;
   }
 
@@ -657,6 +670,7 @@
   static bool is_P6()             { return cpu_family() >= 6; }
   static bool is_amd()            { assert_is_initialized(); return _cpuid_info.std_vendor_name_0 == 0x68747541; } // 'htuA'
   static bool is_intel()          { assert_is_initialized(); return _cpuid_info.std_vendor_name_0 == 0x756e6547; } // 'uneG'
+  static bool is_zx()             { assert_is_initialized(); return (_cpuid_info.std_vendor_name_0 == 0x746e6543) || (_cpuid_info.std_vendor_name_0 == 0x68532020); } // 'tneC'||'hS  '
   static bool is_atom_family()    { return ((cpu_family() == 0x06) && ((extended_cpu_model() == 0x36) || (extended_cpu_model() == 0x37) || (extended_cpu_model() == 0x4D))); } //Silvermont and Centerton
   static bool is_knights_family() { return ((cpu_family() == 0x06) && ((extended_cpu_model() == 0x57) || (extended_cpu_model() == 0x85))); } // Xeon Phi 3200/5200/7200 and Future Xeon Phi
 
@@ -680,6 +694,15 @@
       }
     } else if (is_amd()) {
       result = (_cpuid_info.ext_cpuid8_ecx.bits.cores_per_cpu + 1);
+    } else if (is_zx()) {
+      bool supports_topology = supports_processor_topology();
+      if (supports_topology) {
+        result = _cpuid_info.tpl_cpuidB1_ebx.bits.logical_cpus /
+                 _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
+      }
+      if (!supports_topology || result == 0) {
+        result = (_cpuid_info.dcp_cpuid4_eax.bits.cores_per_cpu + 1);
+      }
     }
     return result;
   }
@@ -688,6 +711,8 @@
     uint result = 1;
     if (is_intel() && supports_processor_topology()) {
       result = _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
+    } else if (is_zx() && supports_processor_topology()) {
+      result = _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
     } else if (_cpuid_info.std_cpuid1_edx.bits.ht != 0) {
       if (cpu_family() >= 0x17) {
         result = _cpuid_info.ext_cpuid1E_ebx.bits.threads_per_core + 1;
@@ -705,6 +730,8 @@
       result = (_cpuid_info.dcp_cpuid4_ebx.bits.L1_line_size + 1);
     } else if (is_amd()) {
       result = _cpuid_info.ext_cpuid5_ecx.bits.L1_line_size;
+    } else if (is_zx()) {
+      result = (_cpuid_info.dcp_cpuid4_ebx.bits.L1_line_size + 1);
     }
     if (result < 32) // not defined ?
       result = 32;   // 32 bytes by default on x86 and other x64
--- a/src/hotspot/cpu/zero/relocInfo_zero.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/zero/relocInfo_zero.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2007 Red Hat, Inc.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -34,4 +34,8 @@
     format_width =  1
   };
 
+ public:
+
+  static bool mustIterateImmediateOopsInCode() { return true; }
+
 #endif // CPU_ZERO_VM_RELOCINFO_ZERO_HPP
--- a/src/hotspot/cpu/zero/stubGenerator_zero.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/cpu/zero/stubGenerator_zero.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -258,7 +258,7 @@
     StubRoutines::_atomic_cmpxchg_byte_entry = ShouldNotCallThisStub();
     StubRoutines::_atomic_cmpxchg_long_entry = ShouldNotCallThisStub();
     StubRoutines::_atomic_add_entry          = ShouldNotCallThisStub();
-    StubRoutines::_atomic_add_ptr_entry      = ShouldNotCallThisStub();
+    StubRoutines::_atomic_add_long_entry     = ShouldNotCallThisStub();
     StubRoutines::_fence_entry               = ShouldNotCallThisStub();
   }
 
--- a/src/hotspot/os/aix/os_aix.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/aix/os_aix.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2017 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -1723,7 +1723,7 @@
   local_sem_post();
 }
 
-static int check_pending_signals(bool wait) {
+static int check_pending_signals() {
   Atomic::store(0, &sigint_count);
   for (;;) {
     for (int i = 0; i < NSIG + 1; i++) {
@@ -1732,9 +1732,6 @@
         return i;
       }
     }
-    if (!wait) {
-      return -1;
-    }
     JavaThread *thread = JavaThread::current();
     ThreadBlockInVM tbivm(thread);
 
@@ -1763,12 +1760,8 @@
   }
 }
 
-int os::signal_lookup() {
-  return check_pending_signals(false);
-}
-
 int os::signal_wait() {
-  return check_pending_signals(true);
+  return check_pending_signals();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
--- a/src/hotspot/os/bsd/os_bsd.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/bsd/os_bsd.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,13 +52,13 @@
 #include "runtime/orderAccess.inline.hpp"
 #include "runtime/osThread.hpp"
 #include "runtime/perfMemory.hpp"
+#include "runtime/semaphore.hpp"
 #include "runtime/sharedRuntime.hpp"
 #include "runtime/statSampler.hpp"
 #include "runtime/stubRoutines.hpp"
 #include "runtime/thread.inline.hpp"
 #include "runtime/threadCritical.hpp"
 #include "runtime/timer.hpp"
-#include "semaphore_bsd.hpp"
 #include "services/attachListener.hpp"
 #include "services/memTracker.hpp"
 #include "services/runtimeService.hpp"
@@ -91,7 +91,6 @@
 # include <time.h>
 # include <pwd.h>
 # include <poll.h>
-# include <semaphore.h>
 # include <fcntl.h>
 # include <string.h>
 # include <sys/param.h>
@@ -1829,135 +1828,28 @@
 
 // a counter for each possible signal value
 static volatile jint pending_signals[NSIG+1] = { 0 };
-
-// Bsd(POSIX) specific hand shaking semaphore.
-#ifdef __APPLE__
-typedef semaphore_t os_semaphore_t;
-
-  #define SEM_INIT(sem, value)    semaphore_create(mach_task_self(), &sem, SYNC_POLICY_FIFO, value)
-  #define SEM_WAIT(sem)           semaphore_wait(sem)
-  #define SEM_POST(sem)           semaphore_signal(sem)
-  #define SEM_DESTROY(sem)        semaphore_destroy(mach_task_self(), sem)
-#else
-typedef sem_t os_semaphore_t;
-
-  #define SEM_INIT(sem, value)    sem_init(&sem, 0, value)
-  #define SEM_WAIT(sem)           sem_wait(&sem)
-  #define SEM_POST(sem)           sem_post(&sem)
-  #define SEM_DESTROY(sem)        sem_destroy(&sem)
-#endif
-
-#ifdef __APPLE__
-// OS X doesn't support unamed POSIX semaphores, so the implementation in os_posix.cpp can't be used.
-
-static const char* sem_init_strerror(kern_return_t value) {
-  switch (value) {
-    case KERN_INVALID_ARGUMENT:  return "Invalid argument";
-    case KERN_RESOURCE_SHORTAGE: return "Resource shortage";
-    default:                     return "Unknown";
-  }
-}
-
-OSXSemaphore::OSXSemaphore(uint value) {
-  kern_return_t ret = SEM_INIT(_semaphore, value);
-
-  guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s", sem_init_strerror(ret));
-}
-
-OSXSemaphore::~OSXSemaphore() {
-  SEM_DESTROY(_semaphore);
-}
-
-void OSXSemaphore::signal(uint count) {
-  for (uint i = 0; i < count; i++) {
-    kern_return_t ret = SEM_POST(_semaphore);
-
-    assert(ret == KERN_SUCCESS, "Failed to signal semaphore");
-  }
-}
-
-void OSXSemaphore::wait() {
-  kern_return_t ret;
-  while ((ret = SEM_WAIT(_semaphore)) == KERN_ABORTED) {
-    // Semaphore was interrupted. Retry.
-  }
-  assert(ret == KERN_SUCCESS, "Failed to wait on semaphore");
-}
-
-jlong OSXSemaphore::currenttime() {
-  struct timeval tv;
-  gettimeofday(&tv, NULL);
-  return (tv.tv_sec * NANOSECS_PER_SEC) + (tv.tv_usec * 1000);
-}
-
-bool OSXSemaphore::trywait() {
-  return timedwait(0, 0);
-}
-
-bool OSXSemaphore::timedwait(unsigned int sec, int nsec) {
-  kern_return_t kr = KERN_ABORTED;
-  mach_timespec_t waitspec;
-  waitspec.tv_sec = sec;
-  waitspec.tv_nsec = nsec;
-
-  jlong starttime = currenttime();
-
-  kr = semaphore_timedwait(_semaphore, waitspec);
-  while (kr == KERN_ABORTED) {
-    jlong totalwait = (sec * NANOSECS_PER_SEC) + nsec;
-
-    jlong current = currenttime();
-    jlong passedtime = current - starttime;
-
-    if (passedtime >= totalwait) {
-      waitspec.tv_sec = 0;
-      waitspec.tv_nsec = 0;
-    } else {
-      jlong waittime = totalwait - (current - starttime);
-      waitspec.tv_sec = waittime / NANOSECS_PER_SEC;
-      waitspec.tv_nsec = waittime % NANOSECS_PER_SEC;
-    }
-
-    kr = semaphore_timedwait(_semaphore, waitspec);
-  }
-
-  return kr == KERN_SUCCESS;
-}
-
-#else
-// Use POSIX implementation of semaphores.
-
-struct timespec PosixSemaphore::create_timespec(unsigned int sec, int nsec) {
-  struct timespec ts;
-  unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec);
-
-  return ts;
-}
-
-#endif // __APPLE__
-
-static os_semaphore_t sig_sem;
-
-#ifdef __APPLE__
-static OSXSemaphore sr_semaphore;
-#else
-static PosixSemaphore sr_semaphore;
-#endif
+static Semaphore* sig_sem = NULL;
 
 void os::signal_init_pd() {
   // Initialize signal structures
   ::memset((void*)pending_signals, 0, sizeof(pending_signals));
 
   // Initialize signal semaphore
-  ::SEM_INIT(sig_sem, 0);
+  sig_sem = new Semaphore();
 }
 
 void os::signal_notify(int sig) {
-  Atomic::inc(&pending_signals[sig]);
-  ::SEM_POST(sig_sem);
+  if (sig_sem != NULL) {
+    Atomic::inc(&pending_signals[sig]);
+    sig_sem->signal();
+  } else {
+    // Signal thread is not created with ReduceSignalUsage and signal_init_pd
+    // initialization isn't called.
+    assert(ReduceSignalUsage, "signal semaphore should be created");
+  }
 }
 
-static int check_pending_signals(bool wait) {
+static int check_pending_signals() {
   Atomic::store(0, &sigint_count);
   for (;;) {
     for (int i = 0; i < NSIG + 1; i++) {
@@ -1966,9 +1858,6 @@
         return i;
       }
     }
-    if (!wait) {
-      return -1;
-    }
     JavaThread *thread = JavaThread::current();
     ThreadBlockInVM tbivm(thread);
 
@@ -1976,7 +1865,7 @@
     do {
       thread->set_suspend_equivalent();
       // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
-      ::SEM_WAIT(sig_sem);
+      sig_sem->wait();
 
       // were we externally suspended while we were waiting?
       threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
@@ -1985,7 +1874,7 @@
         // another thread suspended us. We don't want to continue running
         // while suspended because that would surprise the thread that
         // suspended us.
-        ::SEM_POST(sig_sem);
+        sig_sem->signal();
 
         thread->java_suspend_self();
       }
@@ -1993,12 +1882,8 @@
   }
 }
 
-int os::signal_lookup() {
-  return check_pending_signals(false);
-}
-
 int os::signal_wait() {
-  return check_pending_signals(true);
+  return check_pending_signals();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -2663,6 +2548,12 @@
 //
 // Currently only ever called on the VMThread or JavaThread
 //
+#ifdef __APPLE__
+static OSXSemaphore sr_semaphore;
+#else
+static PosixSemaphore sr_semaphore;
+#endif
+
 static void SR_handler(int sig, siginfo_t* siginfo, ucontext_t* context) {
   // Save and restore errno to avoid confusing native code with EINTR
   // after sigsuspend.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os/bsd/semaphore_bsd.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled/precompiled.hpp"
+#include "semaphore_bsd.hpp"
+#include "utilities/debug.hpp"
+
+#include <semaphore.h>
+
+#ifdef __APPLE__
+// OS X doesn't support unamed POSIX semaphores, so the implementation in os_posix.cpp can't be used.
+
+static const char* sem_init_strerror(kern_return_t value) {
+  switch (value) {
+    case KERN_INVALID_ARGUMENT:  return "Invalid argument";
+    case KERN_RESOURCE_SHORTAGE: return "Resource shortage";
+    default:                     return "Unknown";
+  }
+}
+
+OSXSemaphore::OSXSemaphore(uint value) {
+  kern_return_t ret = semaphore_create(mach_task_self(), &_semaphore, SYNC_POLICY_FIFO, value);
+
+  guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s", sem_init_strerror(ret));
+}
+
+OSXSemaphore::~OSXSemaphore() {
+  semaphore_destroy(mach_task_self(), _semaphore);
+}
+
+void OSXSemaphore::signal(uint count) {
+  for (uint i = 0; i < count; i++) {
+    kern_return_t ret = semaphore_signal(_semaphore);
+
+    assert(ret == KERN_SUCCESS, "Failed to signal semaphore");
+  }
+}
+
+void OSXSemaphore::wait() {
+  kern_return_t ret;
+  while ((ret = semaphore_wait(_semaphore)) == KERN_ABORTED) {
+    // Semaphore was interrupted. Retry.
+  }
+  assert(ret == KERN_SUCCESS, "Failed to wait on semaphore");
+}
+
+int64_t OSXSemaphore::currenttime() {
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+  return (tv.tv_sec * NANOSECS_PER_SEC) + (tv.tv_usec * 1000);
+}
+
+bool OSXSemaphore::trywait() {
+  return timedwait(0, 0);
+}
+
+bool OSXSemaphore::timedwait(unsigned int sec, int nsec) {
+  kern_return_t kr = KERN_ABORTED;
+  mach_timespec_t waitspec;
+  waitspec.tv_sec = sec;
+  waitspec.tv_nsec = nsec;
+
+  int64_t starttime = currenttime();
+
+  kr = semaphore_timedwait(_semaphore, waitspec);
+  while (kr == KERN_ABORTED) {
+    int64_t totalwait = (sec * NANOSECS_PER_SEC) + nsec;
+
+    int64_t current = currenttime();
+    int64_t passedtime = current - starttime;
+
+    if (passedtime >= totalwait) {
+      waitspec.tv_sec = 0;
+      waitspec.tv_nsec = 0;
+    } else {
+      int64_t waittime = totalwait - (current - starttime);
+      waitspec.tv_sec = waittime / NANOSECS_PER_SEC;
+      waitspec.tv_nsec = waittime % NANOSECS_PER_SEC;
+    }
+
+    kr = semaphore_timedwait(_semaphore, waitspec);
+  }
+
+  return kr == KERN_SUCCESS;
+}
+#endif // __APPLE__
--- a/src/hotspot/os/bsd/semaphore_bsd.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/bsd/semaphore_bsd.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,7 +53,7 @@
   bool timedwait(unsigned int sec, int nsec);
 
  private:
-  static jlong currenttime();
+  static int64_t currenttime();
 };
 
 typedef OSXSemaphore SemaphoreImpl;
--- a/src/hotspot/os/linux/os_linux.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/linux/os_linux.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -95,7 +95,6 @@
 # include <sys/wait.h>
 # include <pwd.h>
 # include <poll.h>
-# include <semaphore.h>
 # include <fcntl.h>
 # include <string.h>
 # include <syscall.h>
@@ -2479,11 +2478,11 @@
   return CAST_FROM_FN_PTR(void*, UserHandler);
 }
 
-struct timespec PosixSemaphore::create_timespec(unsigned int sec, int nsec) {
+static struct timespec create_semaphore_timespec(unsigned int sec, int nsec) {
   struct timespec ts;
   // Semaphore's are always associated with CLOCK_REALTIME
   os::Linux::clock_gettime(CLOCK_REALTIME, &ts);
-  // see unpackTime for discussion on overflow checking
+  // see os_posix.cpp for discussion on overflow checking
   if (sec >= MAX_SECS) {
     ts.tv_sec += MAX_SECS;
     ts.tv_nsec = 0;
@@ -2535,7 +2534,7 @@
 static volatile jint pending_signals[NSIG+1] = { 0 };
 
 // Linux(POSIX) specific hand shaking semaphore.
-static sem_t sig_sem;
+static Semaphore* sig_sem = NULL;
 static PosixSemaphore sr_semaphore;
 
 void os::signal_init_pd() {
@@ -2543,15 +2542,21 @@
   ::memset((void*)pending_signals, 0, sizeof(pending_signals));
 
   // Initialize signal semaphore
-  ::sem_init(&sig_sem, 0, 0);
+  sig_sem = new Semaphore();
 }
 
 void os::signal_notify(int sig) {
-  Atomic::inc(&pending_signals[sig]);
-  ::sem_post(&sig_sem);
-}
-
-static int check_pending_signals(bool wait) {
+  if (sig_sem != NULL) {
+    Atomic::inc(&pending_signals[sig]);
+    sig_sem->signal();
+  } else {
+    // Signal thread is not created with ReduceSignalUsage and signal_init_pd
+    // initialization isn't called.
+    assert(ReduceSignalUsage, "signal semaphore should be created");
+  }
+}
+
+static int check_pending_signals() {
   Atomic::store(0, &sigint_count);
   for (;;) {
     for (int i = 0; i < NSIG + 1; i++) {
@@ -2560,9 +2565,6 @@
         return i;
       }
     }
-    if (!wait) {
-      return -1;
-    }
     JavaThread *thread = JavaThread::current();
     ThreadBlockInVM tbivm(thread);
 
@@ -2570,7 +2572,7 @@
     do {
       thread->set_suspend_equivalent();
       // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
-      ::sem_wait(&sig_sem);
+      sig_sem->wait();
 
       // were we externally suspended while we were waiting?
       threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
@@ -2579,7 +2581,7 @@
         // another thread suspended us. We don't want to continue running
         // while suspended because that would surprise the thread that
         // suspended us.
-        ::sem_post(&sig_sem);
+        sig_sem->signal();
 
         thread->java_suspend_self();
       }
@@ -2587,12 +2589,8 @@
   }
 }
 
-int os::signal_lookup() {
-  return check_pending_signals(false);
-}
-
 int os::signal_wait() {
-  return check_pending_signals(true);
+  return check_pending_signals();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -4317,7 +4315,7 @@
 
   // managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED
   while (true) {
-    if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
+    if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
       break;
     } else {
       // timeout
@@ -4351,7 +4349,7 @@
 
   while (true) {
     if (sr_notify(osthread) == 0) {
-      if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
+      if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
         if (osthread->sr.is_running()) {
           return;
         }
--- a/src/hotspot/os/posix/os_posix.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/posix/os_posix.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,14 +31,8 @@
 #include "utilities/macros.hpp"
 #include "utilities/vmError.hpp"
 
-#ifndef __APPLE__
-// POSIX unamed semaphores are not supported on OS X.
-#include "semaphore_posix.hpp"
-#endif
-
 #include <dlfcn.h>
 #include <pthread.h>
-#include <semaphore.h>
 #include <signal.h>
 #include <sys/mman.h>
 #include <sys/resource.h>
@@ -1499,67 +1493,6 @@
   }
 }
 
-// POSIX unamed semaphores are not supported on OS X.
-#ifndef __APPLE__
-
-PosixSemaphore::PosixSemaphore(uint value) {
-  int ret = sem_init(&_semaphore, 0, value);
-
-  guarantee_with_errno(ret == 0, "Failed to initialize semaphore");
-}
-
-PosixSemaphore::~PosixSemaphore() {
-  sem_destroy(&_semaphore);
-}
-
-void PosixSemaphore::signal(uint count) {
-  for (uint i = 0; i < count; i++) {
-    int ret = sem_post(&_semaphore);
-
-    assert_with_errno(ret == 0, "sem_post failed");
-  }
-}
-
-void PosixSemaphore::wait() {
-  int ret;
-
-  do {
-    ret = sem_wait(&_semaphore);
-  } while (ret != 0 && errno == EINTR);
-
-  assert_with_errno(ret == 0, "sem_wait failed");
-}
-
-bool PosixSemaphore::trywait() {
-  int ret;
-
-  do {
-    ret = sem_trywait(&_semaphore);
-  } while (ret != 0 && errno == EINTR);
-
-  assert_with_errno(ret == 0 || errno == EAGAIN, "trywait failed");
-
-  return ret == 0;
-}
-
-bool PosixSemaphore::timedwait(struct timespec ts) {
-  while (true) {
-    int result = sem_timedwait(&_semaphore, &ts);
-    if (result == 0) {
-      return true;
-    } else if (errno == EINTR) {
-      continue;
-    } else if (errno == ETIMEDOUT) {
-      return false;
-    } else {
-      assert_with_errno(false, "timedwait failed");
-      return false;
-    }
-  }
-}
-
-#endif // __APPLE__
-
 
 // Shared pthread_mutex/cond based PlatformEvent implementation.
 // Not currently usable by Solaris.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os/posix/semaphore_posix.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled/precompiled.hpp"
+#ifndef __APPLE__
+#include "runtime/os.hpp"
+// POSIX unamed semaphores are not supported on OS X.
+#include "semaphore_posix.hpp"
+#include <semaphore.h>
+
+#define check_with_errno(check_type, cond, msg)                             \
+  do {                                                                      \
+    int err = errno;                                                        \
+    check_type(cond, "%s; error='%s' (errno=%s)", msg, os::strerror(err),   \
+               os::errno_name(err));                                        \
+} while (false)
+
+#define assert_with_errno(cond, msg)    check_with_errno(assert, cond, msg)
+#define guarantee_with_errno(cond, msg) check_with_errno(guarantee, cond, msg)
+
+PosixSemaphore::PosixSemaphore(uint value) {
+  int ret = sem_init(&_semaphore, 0, value);
+
+  guarantee_with_errno(ret == 0, "Failed to initialize semaphore");
+}
+
+PosixSemaphore::~PosixSemaphore() {
+  sem_destroy(&_semaphore);
+}
+
+void PosixSemaphore::signal(uint count) {
+  for (uint i = 0; i < count; i++) {
+    int ret = sem_post(&_semaphore);
+
+    assert_with_errno(ret == 0, "sem_post failed");
+  }
+}
+
+void PosixSemaphore::wait() {
+  int ret;
+
+  do {
+    ret = sem_wait(&_semaphore);
+  } while (ret != 0 && errno == EINTR);
+
+  assert_with_errno(ret == 0, "sem_wait failed");
+}
+
+bool PosixSemaphore::trywait() {
+  int ret;
+
+  do {
+    ret = sem_trywait(&_semaphore);
+  } while (ret != 0 && errno == EINTR);
+
+  assert_with_errno(ret == 0 || errno == EAGAIN, "trywait failed");
+
+  return ret == 0;
+}
+
+bool PosixSemaphore::timedwait(struct timespec ts) {
+  while (true) {
+    int result = sem_timedwait(&_semaphore, &ts);
+    if (result == 0) {
+      return true;
+    } else if (errno == EINTR) {
+      continue;
+    } else if (errno == ETIMEDOUT) {
+      return false;
+    } else {
+      assert_with_errno(false, "timedwait failed");
+      return false;
+    }
+  }
+}
+#endif // __APPLE__
+
--- a/src/hotspot/os/posix/semaphore_posix.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/posix/semaphore_posix.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,15 +45,7 @@
   void wait();
 
   bool trywait();
-  bool timedwait(unsigned int sec, int nsec) {
-    return timedwait(create_timespec(sec, nsec));
-  }
-
- private:
   bool timedwait(struct timespec ts);
-
-  // OS specific implementation to create a timespec suitable for semaphores.
-  struct timespec create_timespec(unsigned int set, int nsec);
 };
 
 typedef PosixSemaphore SemaphoreImpl;
--- a/src/hotspot/os/solaris/os_solaris.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/solaris/os_solaris.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2062,7 +2062,7 @@
   return CAST_FROM_FN_PTR(void*, UserHandler);
 }
 
-struct timespec PosixSemaphore::create_timespec(unsigned int sec, int nsec) {
+static struct timespec create_semaphore_timespec(unsigned int sec, int nsec) {
   struct timespec ts;
   unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec);
 
@@ -2100,7 +2100,7 @@
 static jint *pending_signals = NULL;
 static int *preinstalled_sigs = NULL;
 static struct sigaction *chainedsigactions = NULL;
-static sema_t sig_sem;
+static Semaphore* sig_sem = NULL;
 typedef int (*version_getting_t)();
 version_getting_t os::Solaris::get_libjsig_version = NULL;
 
@@ -2115,6 +2115,7 @@
   Sigexit = Maxsignum+1;
   assert(Maxsignum >0, "Unable to obtain max signal number");
 
+  // Initialize signal structures
   // pending_signals has one int per signal
   // The additional signal is for SIGEXIT - exit signal to signal_thread
   pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1), mtInternal);
@@ -2132,21 +2133,22 @@
 }
 
 void os::signal_init_pd() {
-  int ret;
-
-  ret = ::sema_init(&sig_sem, 0, NULL, NULL);
-  assert(ret == 0, "sema_init() failed");
-}
-
-void os::signal_notify(int signal_number) {
-  int ret;
-
-  Atomic::inc(&pending_signals[signal_number]);
-  ret = ::sema_post(&sig_sem);
-  assert(ret == 0, "sema_post() failed");
-}
-
-static int check_pending_signals(bool wait_for_signal) {
+  // Initialize signal semaphore
+  sig_sem = new Semaphore();
+}
+
+void os::signal_notify(int sig) {
+  if (sig_sem != NULL) {
+    Atomic::inc(&pending_signals[sig]);
+    sig_sem->signal();
+  } else {
+    // Signal thread is not created with ReduceSignalUsage and signal_init_pd
+    // initialization isn't called.
+    assert(ReduceSignalUsage, "signal semaphore should be created");
+  }
+}
+
+static int check_pending_signals() {
   int ret;
   while (true) {
     for (int i = 0; i < Sigexit + 1; i++) {
@@ -2155,19 +2157,13 @@
         return i;
       }
     }
-    if (!wait_for_signal) {
-      return -1;
-    }
     JavaThread *thread = JavaThread::current();
     ThreadBlockInVM tbivm(thread);
 
     bool threadIsSuspended;
     do {
       thread->set_suspend_equivalent();
-      // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
-      while ((ret = ::sema_wait(&sig_sem)) == EINTR)
-        ;
-      assert(ret == 0, "sema_wait() failed");
+      sig_sem->wait();
 
       // were we externally suspended while we were waiting?
       threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
@@ -2176,8 +2172,7 @@
         // another thread suspended us. We don't want to continue running
         // while suspended because that would surprise the thread that
         // suspended us.
-        ret = ::sema_post(&sig_sem);
-        assert(ret == 0, "sema_post() failed");
+        sig_sem->signal();
 
         thread->java_suspend_self();
       }
@@ -2185,12 +2180,8 @@
   }
 }
 
-int os::signal_lookup() {
-  return check_pending_signals(false);
-}
-
 int os::signal_wait() {
-  return check_pending_signals(true);
+  return check_pending_signals();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -3599,7 +3590,7 @@
 
   // managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED
   while (true) {
-    if (sr_semaphore.timedwait(0, 2000 * NANOSECS_PER_MILLISEC)) {
+    if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2000 * NANOSECS_PER_MILLISEC))) {
       break;
     } else {
       // timeout
@@ -3633,7 +3624,7 @@
 
   while (true) {
     if (sr_notify(osthread) == 0) {
-      if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
+      if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
         if (osthread->sr.is_running()) {
           return;
         }
--- a/src/hotspot/os/windows/os_windows.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os/windows/os_windows.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -62,7 +62,6 @@
 #include "runtime/threadCritical.hpp"
 #include "runtime/timer.hpp"
 #include "runtime/vm_version.hpp"
-#include "semaphore_windows.hpp"
 #include "services/attachListener.hpp"
 #include "services/memTracker.hpp"
 #include "services/runtimeService.hpp"
@@ -1845,36 +1844,6 @@
   return (int)error;
 }
 
-WindowsSemaphore::WindowsSemaphore(uint value) {
-  _semaphore = ::CreateSemaphore(NULL, value, LONG_MAX, NULL);
-
-  guarantee(_semaphore != NULL, "CreateSemaphore failed with error code: %lu", GetLastError());
-}
-
-WindowsSemaphore::~WindowsSemaphore() {
-  ::CloseHandle(_semaphore);
-}
-
-void WindowsSemaphore::signal(uint count) {
-  if (count > 0) {
-    BOOL ret = ::ReleaseSemaphore(_semaphore, count, NULL);
-
-    assert(ret != 0, "ReleaseSemaphore failed with error code: %lu", GetLastError());
-  }
-}
-
-void WindowsSemaphore::wait() {
-  DWORD ret = ::WaitForSingleObject(_semaphore, INFINITE);
-  assert(ret != WAIT_FAILED,   "WaitForSingleObject failed with error code: %lu", GetLastError());
-  assert(ret == WAIT_OBJECT_0, "WaitForSingleObject failed with return value: %lu", ret);
-}
-
-bool WindowsSemaphore::trywait() {
-  DWORD ret = ::WaitForSingleObject(_semaphore, 0);
-  assert(ret != WAIT_FAILED,   "WaitForSingleObject failed with error code: %lu", GetLastError());
-  return ret == WAIT_OBJECT_0;
-}
-
 // sun.misc.Signal
 // NOTE that this is a workaround for an apparent kernel bug where if
 // a signal handler for SIGBREAK is installed then that signal handler
@@ -1966,13 +1935,14 @@
 
 // a counter for each possible signal value, including signal_thread exit signal
 static volatile jint pending_signals[NSIG+1] = { 0 };
-static HANDLE sig_sem = NULL;
+static Semaphore* sig_sem = NULL;
 
 void os::signal_init_pd() {
   // Initialize signal structures
   memset((void*)pending_signals, 0, sizeof(pending_signals));
 
-  sig_sem = ::CreateSemaphore(NULL, 0, NSIG+1, NULL);
+  // Initialize signal semaphore
+  sig_sem = new Semaphore();
 
   // Programs embedding the VM do not want it to attempt to receive
   // events like CTRL_LOGOFF_EVENT, which are used to implement the
@@ -1994,17 +1964,18 @@
   }
 }
 
-void os::signal_notify(int signal_number) {
-  BOOL ret;
+void os::signal_notify(int sig) {
   if (sig_sem != NULL) {
-    Atomic::inc(&pending_signals[signal_number]);
-    ret = ::ReleaseSemaphore(sig_sem, 1, NULL);
-    assert(ret != 0, "ReleaseSemaphore() failed");
-  }
-}
-
-static int check_pending_signals(bool wait_for_signal) {
-  DWORD ret;
+    Atomic::inc(&pending_signals[sig]);
+    sig_sem->signal();
+  } else {
+    // Signal thread is not created with ReduceSignalUsage and signal_init_pd
+    // initialization isn't called.
+    assert(ReduceSignalUsage, "signal semaphore should be created");
+  }
+}
+
+static int check_pending_signals() {
   while (true) {
     for (int i = 0; i < NSIG + 1; i++) {
       jint n = pending_signals[i];
@@ -2012,10 +1983,6 @@
         return i;
       }
     }
-    if (!wait_for_signal) {
-      return -1;
-    }
-
     JavaThread *thread = JavaThread::current();
 
     ThreadBlockInVM tbivm(thread);
@@ -2024,8 +1991,7 @@
     do {
       thread->set_suspend_equivalent();
       // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
-      ret = ::WaitForSingleObject(sig_sem, INFINITE);
-      assert(ret == WAIT_OBJECT_0, "WaitForSingleObject() failed");
+      sig_sem->wait();
 
       // were we externally suspended while we were waiting?
       threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
@@ -2034,8 +2000,7 @@
         // another thread suspended us. We don't want to continue running
         // while suspended because that would surprise the thread that
         // suspended us.
-        ret = ::ReleaseSemaphore(sig_sem, 1, NULL);
-        assert(ret != 0, "ReleaseSemaphore() failed");
+        sig_sem->signal();
 
         thread->java_suspend_self();
       }
@@ -2043,12 +2008,8 @@
   }
 }
 
-int os::signal_lookup() {
-  return check_pending_signals(false);
-}
-
 int os::signal_wait() {
-  return check_pending_signals(true);
+  return check_pending_signals();
 }
 
 // Implicit OS exception handling
@@ -4394,13 +4355,49 @@
 
 // Is a (classpath) directory empty?
 bool os::dir_is_empty(const char* path) {
-  WIN32_FIND_DATA fd;
-  HANDLE f = FindFirstFile(path, &fd);
-  if (f == INVALID_HANDLE_VALUE) {
-    return true;
-  }
-  FindClose(f);
-  return false;
+  char* search_path = (char*)os::malloc(strlen(path) + 3, mtInternal);
+  if (search_path == NULL) {
+    errno = ENOMEM;
+    return false;
+  }
+  strcpy(search_path, path);
+  // Append "*", or possibly "\\*", to path
+  if (path[1] == ':' &&
+    (path[2] == '\0' ||
+    (path[2] == '\\' && path[3] == '\0'))) {
+    // No '\\' needed for cases like "Z:" or "Z:\"
+    strcat(search_path, "*");
+  }
+  else {
+    strcat(search_path, "\\*");
+  }
+  errno_t err = ERROR_SUCCESS;
+  wchar_t* wpath = create_unc_path(search_path, err);
+  if (err != ERROR_SUCCESS) {
+    if (wpath != NULL) {
+      destroy_unc_path(wpath);
+    }
+    os::free(search_path);
+    errno = err;
+    return false;
+  }
+  WIN32_FIND_DATAW fd;
+  HANDLE f = ::FindFirstFileW(wpath, &fd);
+  destroy_unc_path(wpath);
+  bool is_empty = true;
+  if (f != INVALID_HANDLE_VALUE) {
+    while (is_empty && ::FindNextFileW(f, &fd)) {
+      // An empty directory contains only the current directory file
+      // and the previous directory file.
+      if ((wcscmp(fd.cFileName, L".") != 0) &&
+          (wcscmp(fd.cFileName, L"..") != 0)) {
+        is_empty = false;
+      }
+    }
+    FindClose(f);
+  }
+  os::free(search_path);
+  return is_empty;
 }
 
 // create binary file, rewriting existing file if required
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/os/windows/semaphore_windows.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "semaphore_windows.hpp"
+#include "utilities/debug.hpp"
+
+#include <windows.h>
+#include <errno.h>
+
+WindowsSemaphore::WindowsSemaphore(uint value) {
+  _semaphore = ::CreateSemaphore(NULL, value, LONG_MAX, NULL);
+
+  guarantee(_semaphore != NULL, "CreateSemaphore failed with error code: %lu", GetLastError());
+}
+
+WindowsSemaphore::~WindowsSemaphore() {
+  ::CloseHandle(_semaphore);
+}
+
+void WindowsSemaphore::signal(uint count) {
+  if (count > 0) {
+    BOOL ret = ::ReleaseSemaphore(_semaphore, count, NULL);
+
+    assert(ret != 0, "ReleaseSemaphore failed with error code: %lu", GetLastError());
+  }
+}
+
+void WindowsSemaphore::wait() {
+  DWORD ret = ::WaitForSingleObject(_semaphore, INFINITE);
+  assert(ret != WAIT_FAILED,   "WaitForSingleObject failed with error code: %lu", GetLastError());
+  assert(ret == WAIT_OBJECT_0, "WaitForSingleObject failed with return value: %lu", ret);
+}
+
+bool WindowsSemaphore::trywait() {
+  DWORD ret = ::WaitForSingleObject(_semaphore, 0);
+  assert(ret != WAIT_FAILED,   "WaitForSingleObject failed with error code: %lu", GetLastError());
+  return ret == WAIT_OBJECT_0;
+}
--- a/src/hotspot/os_cpu/bsd_x86/atomic_bsd_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/bsd_x86/atomic_bsd_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -132,8 +132,8 @@
 
 extern "C" {
   // defined in bsd_x86.s
-  jlong _Atomic_cmpxchg_long(jlong, volatile jlong*, jlong, bool);
-  void _Atomic_move_long(const volatile jlong* src, volatile jlong* dst);
+  int64_t _Atomic_cmpxchg_long(int64_t, volatile int64_t*, int64_t, bool);
+  void _Atomic_move_long(const volatile int64_t* src, volatile int64_t* dst);
 }
 
 template<>
@@ -143,15 +143,15 @@
                                                 T compare_value,
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(8 == sizeof(T));
-  return cmpxchg_using_helper<jlong>(_Atomic_cmpxchg_long, exchange_value, dest, compare_value);
+  return cmpxchg_using_helper<int64_t>(_Atomic_cmpxchg_long, exchange_value, dest, compare_value);
 }
 
 template<>
 template<typename T>
 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
   STATIC_ASSERT(8 == sizeof(T));
-  volatile jlong dest;
-  _Atomic_move_long(reinterpret_cast<const volatile jlong*>(src), reinterpret_cast<volatile jlong*>(&dest));
+  volatile int64_t dest;
+  _Atomic_move_long(reinterpret_cast<const volatile int64_t*>(src), reinterpret_cast<volatile int64_t*>(&dest));
   return PrimitiveConversions::cast<T>(dest);
 }
 
@@ -160,7 +160,7 @@
 inline void Atomic::PlatformStore<8>::operator()(T store_value,
                                                  T volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(T));
-  _Atomic_move_long(reinterpret_cast<const volatile jlong*>(&store_value), reinterpret_cast<volatile jlong*>(dest));
+  _Atomic_move_long(reinterpret_cast<const volatile int64_t*>(&store_value), reinterpret_cast<volatile int64_t*>(dest));
 }
 
 #endif // AMD64
--- a/src/hotspot/os_cpu/bsd_x86/bsd_x86_32.s	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/bsd_x86/bsd_x86_32.s	Fri Feb 02 01:52:03 2018 +0000
@@ -633,10 +633,10 @@
         ret
 
 
-        # Support for jlong Atomic::cmpxchg(jlong exchange_value,
-        #                                   volatile jlong* dest,
-        #                                   jlong compare_value,
-        #                                   bool is_MP)
+        # Support for int64_t Atomic::cmpxchg(int64_t exchange_value,
+        #                                     volatile int64_t* dest,
+        #                                     int64_t compare_value,
+        #                                     bool is_MP)
         #
         .p2align 4,,15
         ELF_TYPE(_Atomic_cmpxchg_long,@function)
@@ -658,8 +658,8 @@
         ret
 
 
-        # Support for jlong Atomic::load and Atomic::store.
-        # void _Atomic_move_long(const volatile jlong* src, volatile jlong* dst)
+        # Support for int64_t Atomic::load and Atomic::store.
+        # void _Atomic_move_long(const volatile int64_t* src, volatile int64_t* dst)
         .p2align 4,,15
         ELF_TYPE(_Atomic_move_long,@function)
 SYMBOL(_Atomic_move_long):
--- a/src/hotspot/os_cpu/bsd_zero/atomic_bsd_zero.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/bsd_zero/atomic_bsd_zero.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -265,8 +265,8 @@
 template<typename T>
 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
   STATIC_ASSERT(8 == sizeof(T));
-  volatile jlong dest;
-  os::atomic_copy64(reinterpret_cast<const volatile jlong*>(src), reinterpret_cast<volatile jlong*>(&dest));
+  volatile int64_t dest;
+  os::atomic_copy64(reinterpret_cast<const volatile int64_t*>(src), reinterpret_cast<volatile int64_t*>(&dest));
   return PrimitiveConversions::cast<T>(dest);
 }
 
@@ -275,7 +275,7 @@
 inline void Atomic::PlatformStore<8>::operator()(T store_value,
                                                  T volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(T));
-  os::atomic_copy64(reinterpret_cast<const volatile jlong*>(&store_value), reinterpret_cast<volatile jlong*>(dest));
+  os::atomic_copy64(reinterpret_cast<const volatile int64_t*>(&store_value), reinterpret_cast<volatile int64_t*>(dest));
 }
 
 #endif // OS_CPU_BSD_ZERO_VM_ATOMIC_BSD_ZERO_HPP
--- a/src/hotspot/os_cpu/linux_arm/atomic_linux_arm.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/linux_arm/atomic_linux_arm.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -50,7 +50,7 @@
 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
   STATIC_ASSERT(8 == sizeof(T));
   return PrimitiveConversions::cast<T>(
-    (*os::atomic_load_long_func)(reinterpret_cast<const volatile jlong*>(src)));
+    (*os::atomic_load_long_func)(reinterpret_cast<const volatile int64_t*>(src)));
 }
 
 template<>
@@ -59,7 +59,7 @@
                                                  T volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(T));
   (*os::atomic_store_long_func)(
-    PrimitiveConversions::cast<jlong>(store_value), reinterpret_cast<volatile jlong*>(dest));
+    PrimitiveConversions::cast<int64_t>(store_value), reinterpret_cast<volatile int64_t*>(dest));
 }
 #endif
 
@@ -103,7 +103,7 @@
     : "memory");
   return val;
 #else
-  return add_using_helper<jint>(os::atomic_add_func, add_value, dest);
+  return add_using_helper<int32_t>(os::atomic_add_func, add_value, dest);
 #endif
 }
 
@@ -146,7 +146,7 @@
     : "memory");
   return old_val;
 #else
-  return xchg_using_helper<jint>(os::atomic_xchg_func, exchange_value, dest);
+  return xchg_using_helper<int32_t>(os::atomic_xchg_func, exchange_value, dest);
 #endif
 }
 
@@ -178,17 +178,17 @@
 
 #ifndef AARCH64
 
-inline jint reorder_cmpxchg_func(jint exchange_value,
-                                 jint volatile* dest,
-                                 jint compare_value) {
+inline int32_t reorder_cmpxchg_func(int32_t exchange_value,
+                                    int32_t volatile* dest,
+                                    int32_t compare_value) {
   // Warning:  Arguments are swapped to avoid moving them for kernel call
   return (*os::atomic_cmpxchg_func)(compare_value, exchange_value, dest);
 }
 
-inline jlong reorder_cmpxchg_long_func(jlong exchange_value,
-                                       jlong volatile* dest,
-                                       jlong compare_value) {
-  assert(VM_Version::supports_cx8(), "Atomic compare and exchange jlong not supported on this architecture!");
+inline int64_t reorder_cmpxchg_long_func(int64_t exchange_value,
+                                         int64_t volatile* dest,
+                                         int64_t compare_value) {
+  assert(VM_Version::supports_cx8(), "Atomic compare and exchange int64_t not supported on this architecture!");
   // Warning:  Arguments are swapped to avoid moving them for kernel call
   return (*os::atomic_cmpxchg_long_func)(compare_value, exchange_value, dest);
 }
@@ -221,7 +221,7 @@
     : "memory");
   return rv;
 #else
-  return cmpxchg_using_helper<jint>(reorder_cmpxchg_func, exchange_value, dest, compare_value);
+  return cmpxchg_using_helper<int32_t>(reorder_cmpxchg_func, exchange_value, dest, compare_value);
 #endif
 }
 
@@ -251,7 +251,7 @@
     : "memory");
   return rv;
 #else
-  return cmpxchg_using_helper<jlong>(reorder_cmpxchg_long_func, exchange_value, dest, compare_value);
+  return cmpxchg_using_helper<int64_t>(reorder_cmpxchg_long_func, exchange_value, dest, compare_value);
 #endif
 }
 
--- a/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -598,11 +598,11 @@
 
 #ifndef AARCH64
 
-typedef jlong cmpxchg_long_func_t(jlong, jlong, volatile jlong*);
+typedef int64_t cmpxchg_long_func_t(int64_t, int64_t, volatile int64_t*);
 
 cmpxchg_long_func_t* os::atomic_cmpxchg_long_func = os::atomic_cmpxchg_long_bootstrap;
 
-jlong os::atomic_cmpxchg_long_bootstrap(jlong compare_value, jlong exchange_value, volatile jlong* dest) {
+int64_t os::atomic_cmpxchg_long_bootstrap(int64_t compare_value, int64_t exchange_value, volatile int64_t* dest) {
   // try to use the stub:
   cmpxchg_long_func_t* func = CAST_TO_FN_PTR(cmpxchg_long_func_t*, StubRoutines::atomic_cmpxchg_long_entry());
 
@@ -612,16 +612,16 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jlong old_value = *dest;
+  int64_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
 }
-typedef jlong load_long_func_t(const volatile jlong*);
+typedef int64_t load_long_func_t(const volatile int64_t*);
 
 load_long_func_t* os::atomic_load_long_func = os::atomic_load_long_bootstrap;
 
-jlong os::atomic_load_long_bootstrap(const volatile jlong* src) {
+int64_t os::atomic_load_long_bootstrap(const volatile int64_t* src) {
   // try to use the stub:
   load_long_func_t* func = CAST_TO_FN_PTR(load_long_func_t*, StubRoutines::atomic_load_long_entry());
 
@@ -631,15 +631,15 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jlong old_value = *src;
+  int64_t old_value = *src;
   return old_value;
 }
 
-typedef void store_long_func_t(jlong, volatile jlong*);
+typedef void store_long_func_t(int64_t, volatile int64_t*);
 
 store_long_func_t* os::atomic_store_long_func = os::atomic_store_long_bootstrap;
 
-void os::atomic_store_long_bootstrap(jlong val, volatile jlong* dest) {
+void os::atomic_store_long_bootstrap(int64_t val, volatile int64_t* dest) {
   // try to use the stub:
   store_long_func_t* func = CAST_TO_FN_PTR(store_long_func_t*, StubRoutines::atomic_store_long_entry());
 
@@ -652,11 +652,11 @@
   *dest = val;
 }
 
-typedef jint  atomic_add_func_t(jint add_value, volatile jint *dest);
+typedef int32_t  atomic_add_func_t(int32_t add_value, volatile int32_t *dest);
 
 atomic_add_func_t * os::atomic_add_func = os::atomic_add_bootstrap;
 
-jint  os::atomic_add_bootstrap(jint add_value, volatile jint *dest) {
+int32_t  os::atomic_add_bootstrap(int32_t add_value, volatile int32_t *dest) {
   atomic_add_func_t * func = CAST_TO_FN_PTR(atomic_add_func_t*,
                                             StubRoutines::atomic_add_entry());
   if (func != NULL) {
@@ -664,16 +664,16 @@
     return (*func)(add_value, dest);
   }
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   *dest = old_value + add_value;
   return (old_value + add_value);
 }
 
-typedef jint  atomic_xchg_func_t(jint exchange_value, volatile jint *dest);
+typedef int32_t  atomic_xchg_func_t(int32_t exchange_value, volatile int32_t *dest);
 
 atomic_xchg_func_t * os::atomic_xchg_func = os::atomic_xchg_bootstrap;
 
-jint  os::atomic_xchg_bootstrap(jint exchange_value, volatile jint *dest) {
+int32_t  os::atomic_xchg_bootstrap(int32_t exchange_value, volatile int32_t *dest) {
   atomic_xchg_func_t * func = CAST_TO_FN_PTR(atomic_xchg_func_t*,
                                             StubRoutines::atomic_xchg_entry());
   if (func != NULL) {
@@ -681,16 +681,16 @@
     return (*func)(exchange_value, dest);
   }
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   *dest = exchange_value;
   return (old_value);
 }
 
-typedef jint cmpxchg_func_t(jint, jint, volatile jint*);
+typedef int32_t cmpxchg_func_t(int32_t, int32_t, volatile int32_t*);
 
 cmpxchg_func_t* os::atomic_cmpxchg_func = os::atomic_cmpxchg_bootstrap;
 
-jint os::atomic_cmpxchg_bootstrap(jint compare_value, jint exchange_value, volatile jint* dest) {
+int32_t os::atomic_cmpxchg_bootstrap(int32_t compare_value, int32_t exchange_value, volatile int32_t* dest) {
   // try to use the stub:
   cmpxchg_func_t* func = CAST_TO_FN_PTR(cmpxchg_func_t*, StubRoutines::atomic_cmpxchg_entry());
 
@@ -700,7 +700,7 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
--- a/src/hotspot/os_cpu/linux_arm/os_linux_arm.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/linux_arm/os_linux_arm.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -45,35 +45,35 @@
   static bool register_code_area(char *low, char *high) { return true; }
 
 #ifndef AARCH64
-  static jlong (*atomic_cmpxchg_long_func)(jlong compare_value,
-                                           jlong exchange_value,
-                                           volatile jlong *dest);
+  static int64_t (*atomic_cmpxchg_long_func)(int64_t compare_value,
+                                             int64_t exchange_value,
+                                             volatile int64_t *dest);
 
-  static jlong (*atomic_load_long_func)(const volatile jlong*);
+  static int64_t (*atomic_load_long_func)(const volatile int64_t*);
 
-  static void (*atomic_store_long_func)(jlong, volatile jlong*);
+  static void (*atomic_store_long_func)(int64_t, volatile int64_t*);
 
-  static jint  (*atomic_add_func)(jint add_value, volatile jint *dest);
+  static int32_t  (*atomic_add_func)(int32_t add_value, volatile int32_t *dest);
 
-  static jint  (*atomic_xchg_func)(jint exchange_value, volatile jint *dest);
+  static int32_t  (*atomic_xchg_func)(int32_t exchange_value, volatile int32_t *dest);
 
-  static jint  (*atomic_cmpxchg_func)(jint compare_value,
-                                      jint exchange_value,
-                                      volatile jint *dest);
+  static int32_t  (*atomic_cmpxchg_func)(int32_t compare_value,
+                                         int32_t exchange_value,
+                                         volatile int32_t *dest);
 
-  static jlong atomic_cmpxchg_long_bootstrap(jlong, jlong, volatile jlong*);
+  static int64_t atomic_cmpxchg_long_bootstrap(int64_t, int64_t, volatile int64_t*);
 
-  static jlong atomic_load_long_bootstrap(const volatile jlong*);
+  static int64_t atomic_load_long_bootstrap(const volatile int64_t*);
 
-  static void atomic_store_long_bootstrap(jlong, volatile jlong*);
+  static void atomic_store_long_bootstrap(int64_t, volatile int64_t*);
 
-  static jint  atomic_add_bootstrap(jint add_value, volatile jint *dest);
+  static int32_t  atomic_add_bootstrap(int32_t add_value, volatile int32_t *dest);
 
-  static jint  atomic_xchg_bootstrap(jint exchange_value, volatile jint *dest);
+  static int32_t  atomic_xchg_bootstrap(int32_t exchange_value, volatile int32_t *dest);
 
-  static jint  atomic_cmpxchg_bootstrap(jint compare_value,
-                                        jint exchange_value,
-                                        volatile jint *dest);
+  static int32_t  atomic_cmpxchg_bootstrap(int32_t compare_value,
+                                           int32_t exchange_value,
+                                           volatile int32_t *dest);
 #endif // !AARCH64
 
 #endif // OS_CPU_LINUX_ARM_VM_OS_LINUX_ARM_HPP
--- a/src/hotspot/os_cpu/linux_sparc/os_linux_sparc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/linux_sparc/os_linux_sparc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -28,15 +28,15 @@
   //
   // NOTE: we are back in class os here, not Linux
   //
-  static jint  (*atomic_xchg_func)        (jint,  volatile jint*);
-  static jint  (*atomic_cmpxchg_func)     (jint,  volatile jint*,  jint);
-  static jlong (*atomic_cmpxchg_long_func)(jlong, volatile jlong*, jlong);
-  static jint  (*atomic_add_func)         (jint,  volatile jint*);
+  static int32_t  (*atomic_xchg_func)        (int32_t,  volatile int32_t*);
+  static int32_t  (*atomic_cmpxchg_func)     (int32_t,  volatile int32_t*, int32_t);
+  static int64_t  (*atomic_cmpxchg_long_func)(int64_t,  volatile int64_t*, int64_t);
+  static int32_t  (*atomic_add_func)         (int32_t,  volatile int32_t*);
 
-  static jint  atomic_xchg_bootstrap        (jint,  volatile jint*);
-  static jint  atomic_cmpxchg_bootstrap     (jint,  volatile jint*,  jint);
-  static jlong atomic_cmpxchg_long_bootstrap(jlong, volatile jlong*, jlong);
-  static jint  atomic_add_bootstrap         (jint,  volatile jint*);
+  static int32_t  atomic_xchg_bootstrap        (int32_t,  volatile int32_t*);
+  static int32_t  atomic_cmpxchg_bootstrap     (int32_t,  volatile int32_t*, int32_t);
+  static int64_t  atomic_cmpxchg_long_bootstrap(int64_t,  volatile int64_t*, int64_t);
+  static int32_t  atomic_add_bootstrap         (int32_t,  volatile int32_t*);
 
   static void setup_fpu() {}
 
--- a/src/hotspot/os_cpu/linux_x86/atomic_linux_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/linux_x86/atomic_linux_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -133,8 +133,8 @@
 
 extern "C" {
   // defined in linux_x86.s
-  jlong _Atomic_cmpxchg_long(jlong, volatile jlong*, jlong);
-  void _Atomic_move_long(const volatile jlong* src, volatile jlong* dst);
+  int64_t _Atomic_cmpxchg_long(int64_t, volatile int64_t*, int64_t);
+  void _Atomic_move_long(const volatile int64_t* src, volatile int64_t* dst);
 }
 
 template<>
@@ -144,15 +144,15 @@
                                                 T compare_value,
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(8 == sizeof(T));
-  return cmpxchg_using_helper<jlong>(_Atomic_cmpxchg_long, exchange_value, dest, compare_value);
+  return cmpxchg_using_helper<int64_t>(_Atomic_cmpxchg_long, exchange_value, dest, compare_value);
 }
 
 template<>
 template<typename T>
 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
   STATIC_ASSERT(8 == sizeof(T));
-  volatile jlong dest;
-  _Atomic_move_long(reinterpret_cast<const volatile jlong*>(src), reinterpret_cast<volatile jlong*>(&dest));
+  volatile int64_t dest;
+  _Atomic_move_long(reinterpret_cast<const volatile int64_t*>(src), reinterpret_cast<volatile int64_t*>(&dest));
   return PrimitiveConversions::cast<T>(dest);
 }
 
@@ -161,7 +161,7 @@
 inline void Atomic::PlatformStore<8>::operator()(T store_value,
                                                  T volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(T));
-  _Atomic_move_long(reinterpret_cast<const volatile jlong*>(&store_value), reinterpret_cast<volatile jlong*>(dest));
+  _Atomic_move_long(reinterpret_cast<const volatile int64_t*>(&store_value), reinterpret_cast<volatile int64_t*>(dest));
 }
 
 #endif // AMD64
--- a/src/hotspot/os_cpu/linux_zero/atomic_linux_zero.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/linux_zero/atomic_linux_zero.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -30,67 +30,6 @@
 
 // Implementation of class atomic
 
-#ifdef ARM
-
-/*
- * __kernel_cmpxchg
- *
- * Atomically store newval in *ptr if *ptr is equal to oldval for user space.
- * Return zero if *ptr was changed or non-zero if no exchange happened.
- * The C flag is also set if *ptr was changed to allow for assembly
- * optimization in the calling code.
- *
- */
-
-typedef int (__kernel_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
-#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *) 0xffff0fc0)
-
-
-
-/* Perform an atomic compare and swap: if the current value of `*PTR'
-   is OLDVAL, then write NEWVAL into `*PTR'.  Return the contents of
-   `*PTR' before the operation.*/
-static inline int arm_compare_and_swap(int newval,
-                                       volatile int *ptr,
-                                       int oldval) {
-  for (;;) {
-      int prev = *ptr;
-      if (prev != oldval)
-        return prev;
-
-      if (__kernel_cmpxchg (prev, newval, ptr) == 0)
-        // Success.
-        return prev;
-
-      // We failed even though prev == oldval.  Try again.
-    }
-}
-
-/* Atomically add an int to memory.  */
-static inline int arm_add_and_fetch(int add_value, volatile int *ptr) {
-  for (;;) {
-      // Loop until a __kernel_cmpxchg succeeds.
-
-      int prev = *ptr;
-
-      if (__kernel_cmpxchg (prev, prev + add_value, ptr) == 0)
-        return prev + add_value;
-    }
-}
-
-/* Atomically write VALUE into `*PTR' and returns the previous
-   contents of `*PTR'.  */
-static inline int arm_lock_test_and_set(int newval, volatile int *ptr) {
-  for (;;) {
-      // Loop until a __kernel_cmpxchg succeeds.
-      int prev = *ptr;
-
-      if (__kernel_cmpxchg (prev, newval, ptr) == 0)
-        return prev;
-    }
-}
-#endif // ARM
-
 template<size_t byte_size>
 struct Atomic::PlatformAdd
   : Atomic::AddAndFetch<Atomic::PlatformAdd<byte_size> >
@@ -105,11 +44,7 @@
   STATIC_ASSERT(4 == sizeof(I));
   STATIC_ASSERT(4 == sizeof(D));
 
-#ifdef ARM
-  return add_using_helper<int>(arm_add_and_fetch, add_value, dest);
-#else
   return __sync_add_and_fetch(dest, add_value);
-#endif // ARM
 }
 
 template<>
@@ -117,7 +52,6 @@
 inline D Atomic::PlatformAdd<8>::add_and_fetch(I add_value, D volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(I));
   STATIC_ASSERT(8 == sizeof(D));
-
   return __sync_add_and_fetch(dest, add_value);
 }
 
@@ -126,9 +60,6 @@
 inline T Atomic::PlatformXchg<4>::operator()(T exchange_value,
                                              T volatile* dest) const {
   STATIC_ASSERT(4 == sizeof(T));
-#ifdef ARM
-  return xchg_using_helper<int>(arm_lock_test_and_set, exchange_value, dest);
-#else
   // __sync_lock_test_and_set is a bizarrely named atomic exchange
   // operation.  Note that some platforms only support this with the
   // limitation that the only valid value to store is the immediate
@@ -140,7 +71,6 @@
   // barrier.
   __sync_synchronize();
   return result;
-#endif // ARM
 }
 
 template<>
@@ -164,11 +94,7 @@
                                                 T compare_value,
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(4 == sizeof(T));
-#ifdef ARM
-  return cmpxchg_using_helper<int>(arm_compare_and_swap, exchange_value, dest, compare_value);
-#else
   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
-#endif // ARM
 }
 
 template<>
@@ -185,8 +111,8 @@
 template<typename T>
 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
   STATIC_ASSERT(8 == sizeof(T));
-  volatile jlong dest;
-  os::atomic_copy64(reinterpret_cast<const volatile jlong*>(src), reinterpret_cast<volatile jlong*>(&dest));
+  volatile int64_t dest;
+  os::atomic_copy64(reinterpret_cast<const volatile int64_t*>(src), reinterpret_cast<volatile int64_t*>(&dest));
   return PrimitiveConversions::cast<T>(dest);
 }
 
@@ -195,7 +121,7 @@
 inline void Atomic::PlatformStore<8>::operator()(T store_value,
                                                  T volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(T));
-  os::atomic_copy64(reinterpret_cast<const volatile jlong*>(&store_value), reinterpret_cast<volatile jlong*>(dest));
+  os::atomic_copy64(reinterpret_cast<const volatile int64_t*>(&store_value), reinterpret_cast<volatile int64_t*>(dest));
 }
 
 #endif // OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_HPP
--- a/src/hotspot/os_cpu/solaris_sparc/os_solaris_sparc.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/solaris_sparc/os_solaris_sparc.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -28,15 +28,15 @@
   //
   // NOTE: we are back in class os here, not Solaris
   //
-  static jint  (*atomic_xchg_func)        (jint,  volatile jint*);
-  static jint  (*atomic_cmpxchg_func)     (jint,  volatile jint*,  jint);
-  static jlong (*atomic_cmpxchg_long_func)(jlong, volatile jlong*, jlong);
-  static jint  (*atomic_add_func)         (jint,  volatile jint*);
+  static int32_t  (*atomic_xchg_func)        (int32_t,  volatile int32_t*);
+  static int32_t  (*atomic_cmpxchg_func)     (int32_t,  volatile int32_t*,  int32_t);
+  static int64_t  (*atomic_cmpxchg_long_func)(int64_t,  volatile int64_t*,  int64_t);
+  static int32_t  (*atomic_add_func)         (int32_t,  volatile int32_t*);
 
-  static jint  atomic_xchg_bootstrap        (jint,  volatile jint*);
-  static jint  atomic_cmpxchg_bootstrap     (jint,  volatile jint*,  jint);
-  static jlong atomic_cmpxchg_long_bootstrap(jlong, volatile jlong*, jlong);
-  static jint  atomic_add_bootstrap         (jint,  volatile jint*);
+  static int32_t  atomic_xchg_bootstrap        (int32_t,  volatile int32_t*);
+  static int32_t  atomic_cmpxchg_bootstrap     (int32_t,  volatile int32_t*,  int32_t);
+  static int64_t  atomic_cmpxchg_long_bootstrap(int64_t,  volatile int64_t*,  int64_t);
+  static int32_t  atomic_add_bootstrap         (int32_t,  volatile int32_t*);
 
   static void setup_fpu() {}
 
--- a/src/hotspot/os_cpu/solaris_x86/atomic_solaris_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/solaris_x86/atomic_solaris_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -28,16 +28,16 @@
 // For Sun Studio - implementation is in solaris_x86_64.il.
 
 extern "C" {
-  jint _Atomic_add(jint add_value, volatile jint* dest);
-  jlong _Atomic_add_long(jlong add_value, volatile jlong* dest);
+  int32_t _Atomic_add(int32_t add_value, volatile int32_t* dest);
+  int64_t _Atomic_add_long(int64_t add_value, volatile int64_t* dest);
 
-  jint _Atomic_xchg(jint exchange_value, volatile jint* dest);
-  jbyte _Atomic_cmpxchg_byte(jbyte exchange_value, volatile jbyte* dest,
-                             jbyte compare_value);
-  jint _Atomic_cmpxchg(jint exchange_value, volatile jint* dest,
-                       jint compare_value);
-  jlong _Atomic_cmpxchg_long(jlong exchange_value, volatile jlong* dest,
-                             jlong compare_value);
+  int32_t _Atomic_xchg(int32_t exchange_value, volatile int32_t* dest);
+  int8_t  _Atomic_cmpxchg_byte(int8_t exchange_value, volatile int8_t* dest,
+                               int8_t compare_value);
+  int32_t _Atomic_cmpxchg(int32_t exchange_value, volatile int32_t* dest,
+                          int32_t compare_value);
+  int64_t _Atomic_cmpxchg_long(int64_t exchange_value, volatile int64_t* dest,
+                               int64_t compare_value);
 }
 
 template<size_t byte_size>
@@ -55,8 +55,8 @@
   STATIC_ASSERT(4 == sizeof(I));
   STATIC_ASSERT(4 == sizeof(D));
   return PrimitiveConversions::cast<D>(
-    _Atomic_add(PrimitiveConversions::cast<jint>(add_value),
-                reinterpret_cast<jint volatile*>(dest)));
+    _Atomic_add(PrimitiveConversions::cast<int32_t>(add_value),
+                reinterpret_cast<int32_t volatile*>(dest)));
 }
 
 // Not using add_using_helper; see comment for cmpxchg.
@@ -66,8 +66,8 @@
   STATIC_ASSERT(8 == sizeof(I));
   STATIC_ASSERT(8 == sizeof(D));
   return PrimitiveConversions::cast<D>(
-    _Atomic_add_long(PrimitiveConversions::cast<jlong>(add_value),
-                     reinterpret_cast<jlong volatile*>(dest)));
+    _Atomic_add_long(PrimitiveConversions::cast<int64_t>(add_value),
+                     reinterpret_cast<int64_t volatile*>(dest)));
 }
 
 template<>
@@ -76,11 +76,11 @@
                                              T volatile* dest) const {
   STATIC_ASSERT(4 == sizeof(T));
   return PrimitiveConversions::cast<T>(
-    _Atomic_xchg(PrimitiveConversions::cast<jint>(exchange_value),
-                 reinterpret_cast<jint volatile*>(dest)));
+    _Atomic_xchg(PrimitiveConversions::cast<int32_t>(exchange_value),
+                 reinterpret_cast<int32_t volatile*>(dest)));
 }
 
-extern "C" jlong _Atomic_xchg_long(jlong exchange_value, volatile jlong* dest);
+extern "C" int64_t _Atomic_xchg_long(int64_t exchange_value, volatile int64_t* dest);
 
 template<>
 template<typename T>
@@ -88,8 +88,8 @@
                                              T volatile* dest) const {
   STATIC_ASSERT(8 == sizeof(T));
   return PrimitiveConversions::cast<T>(
-    _Atomic_xchg_long(PrimitiveConversions::cast<jlong>(exchange_value),
-                      reinterpret_cast<jlong volatile*>(dest)));
+    _Atomic_xchg_long(PrimitiveConversions::cast<int64_t>(exchange_value),
+                      reinterpret_cast<int64_t volatile*>(dest)));
 }
 
 // Not using cmpxchg_using_helper here, because some configurations of
@@ -106,9 +106,9 @@
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(1 == sizeof(T));
   return PrimitiveConversions::cast<T>(
-    _Atomic_cmpxchg_byte(PrimitiveConversions::cast<jbyte>(exchange_value),
-                         reinterpret_cast<jbyte volatile*>(dest),
-                         PrimitiveConversions::cast<jbyte>(compare_value)));
+    _Atomic_cmpxchg_byte(PrimitiveConversions::cast<int8_t>(exchange_value),
+                         reinterpret_cast<int8_t volatile*>(dest),
+                         PrimitiveConversions::cast<int8_t>(compare_value)));
 }
 
 template<>
@@ -119,9 +119,9 @@
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(4 == sizeof(T));
   return PrimitiveConversions::cast<T>(
-    _Atomic_cmpxchg(PrimitiveConversions::cast<jint>(exchange_value),
-                    reinterpret_cast<jint volatile*>(dest),
-                    PrimitiveConversions::cast<jint>(compare_value)));
+    _Atomic_cmpxchg(PrimitiveConversions::cast<int32_t>(exchange_value),
+                    reinterpret_cast<int32_t volatile*>(dest),
+                    PrimitiveConversions::cast<int32_t>(compare_value)));
 }
 
 template<>
@@ -132,9 +132,9 @@
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(8 == sizeof(T));
   return PrimitiveConversions::cast<T>(
-    _Atomic_cmpxchg_long(PrimitiveConversions::cast<jlong>(exchange_value),
-                         reinterpret_cast<jlong volatile*>(dest),
-                         PrimitiveConversions::cast<jlong>(compare_value)));
+    _Atomic_cmpxchg_long(PrimitiveConversions::cast<int64_t>(exchange_value),
+                         reinterpret_cast<int64_t volatile*>(dest),
+                         PrimitiveConversions::cast<int64_t>(compare_value)));
 }
 
 #endif // OS_CPU_SOLARIS_X86_VM_ATOMIC_SOLARIS_X86_HPP
--- a/src/hotspot/os_cpu/solaris_x86/os_solaris_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/solaris_x86/os_solaris_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -904,12 +904,12 @@
 // until initialization is complete.
 // TODO - replace with .il implementation when compiler supports it.
 
-typedef jint  xchg_func_t        (jint,  volatile jint*);
-typedef jint  cmpxchg_func_t     (jint,  volatile jint*,  jint);
-typedef jlong cmpxchg_long_func_t(jlong, volatile jlong*, jlong);
-typedef jint  add_func_t         (jint,  volatile jint*);
+typedef int32_t  xchg_func_t        (int32_t,  volatile int32_t*);
+typedef int32_t  cmpxchg_func_t     (int32_t,  volatile int32_t*,  int32_t);
+typedef int64_t  cmpxchg_long_func_t(int64_t,  volatile int64_t*,  int64_t);
+typedef int32_t  add_func_t         (int32_t,  volatile int32_t*);
 
-jint os::atomic_xchg_bootstrap(jint exchange_value, volatile jint* dest) {
+int32_t os::atomic_xchg_bootstrap(int32_t exchange_value, volatile int32_t* dest) {
   // try to use the stub:
   xchg_func_t* func = CAST_TO_FN_PTR(xchg_func_t*, StubRoutines::atomic_xchg_entry());
 
@@ -919,12 +919,12 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   *dest = exchange_value;
   return old_value;
 }
 
-jint os::atomic_cmpxchg_bootstrap(jint exchange_value, volatile jint* dest, jint compare_value) {
+int32_t os::atomic_cmpxchg_bootstrap(int32_t exchange_value, volatile int32_t* dest, int32_t compare_value) {
   // try to use the stub:
   cmpxchg_func_t* func = CAST_TO_FN_PTR(cmpxchg_func_t*, StubRoutines::atomic_cmpxchg_entry());
 
@@ -934,13 +934,13 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
 }
 
-jlong os::atomic_cmpxchg_long_bootstrap(jlong exchange_value, volatile jlong* dest, jlong compare_value) {
+int64_t os::atomic_cmpxchg_long_bootstrap(int64_t exchange_value, volatile int64_t* dest, int64_t compare_value) {
   // try to use the stub:
   cmpxchg_long_func_t* func = CAST_TO_FN_PTR(cmpxchg_long_func_t*, StubRoutines::atomic_cmpxchg_long_entry());
 
@@ -950,13 +950,13 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jlong old_value = *dest;
+  int64_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
 }
 
-jint os::atomic_add_bootstrap(jint add_value, volatile jint* dest) {
+int32_t os::atomic_add_bootstrap(int32_t add_value, volatile int32_t* dest) {
   // try to use the stub:
   add_func_t* func = CAST_TO_FN_PTR(add_func_t*, StubRoutines::atomic_add_entry());
 
--- a/src/hotspot/os_cpu/solaris_x86/os_solaris_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/solaris_x86/os_solaris_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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,15 +31,15 @@
 #ifdef AMD64
   static void setup_fpu() {}
 #else
-  static jint  (*atomic_xchg_func)        (jint,  volatile jint*);
-  static jint  (*atomic_cmpxchg_func)     (jint,  volatile jint*,  jint);
-  static jlong (*atomic_cmpxchg_long_func)(jlong, volatile jlong*, jlong);
-  static jint  (*atomic_add_func)         (jint,  volatile jint*);
+  static int32_t  (*atomic_xchg_func)        (int32_t,  volatile int32_t*);
+  static int32_t  (*atomic_cmpxchg_func)     (int32_t,  volatile int32_t*, int32_t);
+  static int64_t  (*atomic_cmpxchg_long_func)(int64_t,  volatile int64_t*, int64_t);
+  static int32_t  (*atomic_add_func)         (int32_t,  volatile int32_t*);
 
-  static jint  atomic_xchg_bootstrap        (jint,  volatile jint*);
-  static jint  atomic_cmpxchg_bootstrap     (jint,  volatile jint*,  jint);
-  static jlong atomic_cmpxchg_long_bootstrap(jlong, volatile jlong*, jlong);
-  static jint  atomic_add_bootstrap         (jint,  volatile jint*);
+  static int32_t  atomic_xchg_bootstrap        (int32_t,  volatile int32_t*);
+  static int32_t  atomic_cmpxchg_bootstrap     (int32_t,  volatile int32_t*, int32_t);
+  static int64_t  atomic_cmpxchg_long_bootstrap(int64_t,  volatile int64_t*, int64_t);
+  static int32_t  atomic_add_bootstrap         (int32_t,  volatile int32_t*);
 
   static void setup_fpu();
 #endif // AMD64
--- a/src/hotspot/os_cpu/windows_x86/atomic_windows_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/windows_x86/atomic_windows_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -54,13 +54,13 @@
 template<>
 template<typename I, typename D>
 inline D Atomic::PlatformAdd<4>::add_and_fetch(I add_value, D volatile* dest) const {
-  return add_using_helper<jint>(os::atomic_add_func, add_value, dest);
+  return add_using_helper<int32_t>(os::atomic_add_func, add_value, dest);
 }
 
 template<>
 template<typename I, typename D>
 inline D Atomic::PlatformAdd<8>::add_and_fetch(I add_value, D volatile* dest) const {
-  return add_using_helper<intptr_t>(os::atomic_add_ptr_func, add_value, dest);
+  return add_using_helper<int64_t>(os::atomic_add_long_func, add_value, dest);
 }
 
 #define DEFINE_STUB_XCHG(ByteSize, StubType, StubName)                  \
@@ -72,8 +72,8 @@
     return xchg_using_helper<StubType>(StubName, exchange_value, dest); \
   }
 
-DEFINE_STUB_XCHG(4, jint, os::atomic_xchg_func)
-DEFINE_STUB_XCHG(8, jlong, os::atomic_xchg_long_func)
+DEFINE_STUB_XCHG(4, int32_t, os::atomic_xchg_func)
+DEFINE_STUB_XCHG(8, int64_t, os::atomic_xchg_long_func)
 
 #undef DEFINE_STUB_XCHG
 
@@ -88,9 +88,9 @@
     return cmpxchg_using_helper<StubType>(StubName, exchange_value, dest, compare_value); \
   }
 
-DEFINE_STUB_CMPXCHG(1, jbyte, os::atomic_cmpxchg_byte_func)
-DEFINE_STUB_CMPXCHG(4, jint,  os::atomic_cmpxchg_func)
-DEFINE_STUB_CMPXCHG(8, jlong, os::atomic_cmpxchg_long_func)
+DEFINE_STUB_CMPXCHG(1, int8_t,  os::atomic_cmpxchg_byte_func)
+DEFINE_STUB_CMPXCHG(4, int32_t, os::atomic_cmpxchg_func)
+DEFINE_STUB_CMPXCHG(8, int64_t, os::atomic_cmpxchg_long_func)
 
 #undef DEFINE_STUB_CMPXCHG
 
@@ -162,10 +162,10 @@
                                                 T compare_value,
                                                 cmpxchg_memory_order order) const {
   STATIC_ASSERT(8 == sizeof(T));
-  jint ex_lo  = (jint)exchange_value;
-  jint ex_hi  = *( ((jint*)&exchange_value) + 1 );
-  jint cmp_lo = (jint)compare_value;
-  jint cmp_hi = *( ((jint*)&compare_value) + 1 );
+  int32_t ex_lo  = (int32_t)exchange_value;
+  int32_t ex_hi  = *( ((int32_t*)&exchange_value) + 1 );
+  int32_t cmp_lo = (int32_t)compare_value;
+  int32_t cmp_hi = *( ((int32_t*)&compare_value) + 1 );
   __asm {
     push ebx
     push edi
--- a/src/hotspot/os_cpu/windows_x86/os_windows_x86.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/windows_x86/os_windows_x86.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -218,17 +218,17 @@
 
 // Atomics and Stub Functions
 
-typedef jint      xchg_func_t            (jint,     volatile jint*);
-typedef intptr_t  xchg_long_func_t       (jlong,    volatile jlong*);
-typedef jint      cmpxchg_func_t         (jint,     volatile jint*,  jint);
-typedef jbyte     cmpxchg_byte_func_t    (jbyte,    volatile jbyte*, jbyte);
-typedef jlong     cmpxchg_long_func_t    (jlong,    volatile jlong*, jlong);
-typedef jint      add_func_t             (jint,     volatile jint*);
-typedef intptr_t  add_ptr_func_t         (intptr_t, volatile intptr_t*);
+typedef int32_t   xchg_func_t            (int32_t,  volatile int32_t*);
+typedef int64_t   xchg_long_func_t       (int64_t,  volatile int64_t*);
+typedef int32_t   cmpxchg_func_t         (int32_t,  volatile int32_t*, int32_t);
+typedef int8_t    cmpxchg_byte_func_t    (int8_t,   volatile int8_t*,  int8_t);
+typedef int64_t   cmpxchg_long_func_t    (int64_t,  volatile int64_t*, int64_t);
+typedef int32_t   add_func_t             (int32_t,  volatile int32_t*);
+typedef int64_t   add_long_func_t        (int64_t,  volatile int64_t*);
 
 #ifdef AMD64
 
-jint os::atomic_xchg_bootstrap(jint exchange_value, volatile jint* dest) {
+int32_t os::atomic_xchg_bootstrap(int32_t exchange_value, volatile int32_t* dest) {
   // try to use the stub:
   xchg_func_t* func = CAST_TO_FN_PTR(xchg_func_t*, StubRoutines::atomic_xchg_entry());
 
@@ -238,12 +238,12 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   *dest = exchange_value;
   return old_value;
 }
 
-intptr_t os::atomic_xchg_long_bootstrap(jlong exchange_value, volatile jlong* dest) {
+int64_t os::atomic_xchg_long_bootstrap(int64_t exchange_value, volatile int64_t* dest) {
   // try to use the stub:
   xchg_long_func_t* func = CAST_TO_FN_PTR(xchg_long_func_t*, StubRoutines::atomic_xchg_long_entry());
 
@@ -253,13 +253,13 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  intptr_t old_value = *dest;
+  int64_t old_value = *dest;
   *dest = exchange_value;
   return old_value;
 }
 
 
-jint os::atomic_cmpxchg_bootstrap(jint exchange_value, volatile jint* dest, jint compare_value) {
+int32_t os::atomic_cmpxchg_bootstrap(int32_t exchange_value, volatile int32_t* dest, int32_t compare_value) {
   // try to use the stub:
   cmpxchg_func_t* func = CAST_TO_FN_PTR(cmpxchg_func_t*, StubRoutines::atomic_cmpxchg_entry());
 
@@ -269,13 +269,13 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jint old_value = *dest;
+  int32_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
 }
 
-jbyte os::atomic_cmpxchg_byte_bootstrap(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) {
+int8_t os::atomic_cmpxchg_byte_bootstrap(int8_t exchange_value, volatile int8_t* dest, int8_t compare_value) {
   // try to use the stub:
   cmpxchg_byte_func_t* func = CAST_TO_FN_PTR(cmpxchg_byte_func_t*, StubRoutines::atomic_cmpxchg_byte_entry());
 
@@ -285,7 +285,7 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jbyte old_value = *dest;
+  int8_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
@@ -293,7 +293,7 @@
 
 #endif // AMD64
 
-jlong os::atomic_cmpxchg_long_bootstrap(jlong exchange_value, volatile jlong* dest, jlong compare_value) {
+int64_t os::atomic_cmpxchg_long_bootstrap(int64_t exchange_value, volatile int64_t* dest, int64_t compare_value) {
   // try to use the stub:
   cmpxchg_long_func_t* func = CAST_TO_FN_PTR(cmpxchg_long_func_t*, StubRoutines::atomic_cmpxchg_long_entry());
 
@@ -303,7 +303,7 @@
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
 
-  jlong old_value = *dest;
+  int64_t old_value = *dest;
   if (old_value == compare_value)
     *dest = exchange_value;
   return old_value;
@@ -311,7 +311,7 @@
 
 #ifdef AMD64
 
-jint os::atomic_add_bootstrap(jint add_value, volatile jint* dest) {
+int32_t os::atomic_add_bootstrap(int32_t add_value, volatile int32_t* dest) {
   // try to use the stub:
   add_func_t* func = CAST_TO_FN_PTR(add_func_t*, StubRoutines::atomic_add_entry());
 
@@ -324,12 +324,12 @@
   return (*dest) += add_value;
 }
 
-intptr_t os::atomic_add_ptr_bootstrap(intptr_t add_value, volatile intptr_t* dest) {
+int64_t os::atomic_add_long_bootstrap(int64_t add_value, volatile int64_t* dest) {
   // try to use the stub:
-  add_ptr_func_t* func = CAST_TO_FN_PTR(add_ptr_func_t*, StubRoutines::atomic_add_ptr_entry());
+  add_long_func_t* func = CAST_TO_FN_PTR(add_long_func_t*, StubRoutines::atomic_add_long_entry());
 
   if (func != NULL) {
-    os::atomic_add_ptr_func = func;
+    os::atomic_add_long_func = func;
     return (*func)(add_value, dest);
   }
   assert(Threads::number_of_threads() == 0, "for bootstrap only");
@@ -342,7 +342,7 @@
 cmpxchg_func_t*      os::atomic_cmpxchg_func      = os::atomic_cmpxchg_bootstrap;
 cmpxchg_byte_func_t* os::atomic_cmpxchg_byte_func = os::atomic_cmpxchg_byte_bootstrap;
 add_func_t*          os::atomic_add_func          = os::atomic_add_bootstrap;
-add_ptr_func_t*      os::atomic_add_ptr_func      = os::atomic_add_ptr_bootstrap;
+add_long_func_t*     os::atomic_add_long_func     = os::atomic_add_long_bootstrap;
 
 #endif // AMD64
 
--- a/src/hotspot/os_cpu/windows_x86/os_windows_x86.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/os_cpu/windows_x86/os_windows_x86.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -29,32 +29,32 @@
   // NOTE: we are back in class os here, not win32
   //
 #ifdef AMD64
-  static jint      (*atomic_xchg_func)          (jint,      volatile jint*);
-  static intptr_t  (*atomic_xchg_long_func)     (jlong,     volatile jlong*);
+  static int32_t   (*atomic_xchg_func)          (int32_t, volatile int32_t*);
+  static int64_t   (*atomic_xchg_long_func)     (int64_t, volatile int64_t*);
 
-  static jint      (*atomic_cmpxchg_func)       (jint,      volatile jint*,  jint);
-  static jbyte     (*atomic_cmpxchg_byte_func)  (jbyte,     volatile jbyte*, jbyte);
-  static jlong     (*atomic_cmpxchg_long_func)  (jlong,     volatile jlong*, jlong);
+  static int32_t   (*atomic_cmpxchg_func)       (int32_t,  volatile int32_t*, int32_t);
+  static int8_t    (*atomic_cmpxchg_byte_func)  (int8_t,   volatile int8_t*,  int8_t);
+  static int64_t   (*atomic_cmpxchg_long_func)  (int64_t,  volatile int64_t*, int64_t);
 
-  static jint      (*atomic_add_func)           (jint,      volatile jint*);
-  static intptr_t  (*atomic_add_ptr_func)       (intptr_t,  volatile intptr_t*);
+  static int32_t   (*atomic_add_func)           (int32_t,  volatile int32_t*);
+  static int64_t   (*atomic_add_long_func)      (int64_t,  volatile int64_t*);
 
-  static jint      atomic_xchg_bootstrap        (jint,      volatile jint*);
-  static intptr_t  atomic_xchg_long_bootstrap   (jlong,     volatile jlong*);
+  static int32_t   atomic_xchg_bootstrap        (int32_t,  volatile int32_t*);
+  static int64_t   atomic_xchg_long_bootstrap   (int64_t,  volatile int64_t*);
 
-  static jint      atomic_cmpxchg_bootstrap     (jint,      volatile jint*,  jint);
-  static jbyte     atomic_cmpxchg_byte_bootstrap(jbyte,     volatile jbyte*, jbyte);
+  static int32_t   atomic_cmpxchg_bootstrap     (int32_t,  volatile int32_t*, int32_t);
+  static int8_t    atomic_cmpxchg_byte_bootstrap(int8_t,   volatile int8_t*,  int8_t);
 #else
 
-  static jlong (*atomic_cmpxchg_long_func)  (jlong, volatile jlong*, jlong);
+  static int64_t (*atomic_cmpxchg_long_func)  (int64_t, volatile int64_t*, int64_t);
 
 #endif // AMD64
 
-  static jlong atomic_cmpxchg_long_bootstrap(jlong, volatile jlong*, jlong);
+  static int64_t atomic_cmpxchg_long_bootstrap(int64_t, volatile int64_t*, int64_t);
 
 #ifdef AMD64
-  static jint      atomic_add_bootstrap         (jint,      volatile jint*);
-  static intptr_t  atomic_add_ptr_bootstrap     (intptr_t,  volatile intptr_t*);
+  static int32_t  atomic_add_bootstrap         (int32_t,  volatile int32_t*);
+  static int64_t  atomic_add_long_bootstrap    (int64_t,  volatile int64_t*);
 #endif // AMD64
 
   static void setup_fpu();
--- a/src/hotspot/share/ci/ciInstanceKlass.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/ci/ciInstanceKlass.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -34,35 +34,12 @@
 #include "oops/oop.inline.hpp"
 #include "oops/fieldStreams.hpp"
 #include "runtime/fieldDescriptor.hpp"
-#if INCLUDE_ALL_GCS
-# include "gc/g1/g1SATBCardTableModRefBS.hpp"
-#endif
 
 // ciInstanceKlass
 //
 // This class represents a Klass* in the HotSpot virtual machine
 // whose Klass part in an InstanceKlass.
 
-// ------------------------------------------------------------------
-// ensure_metadata_alive
-//
-// Ensure that the metadata wrapped by the ciMetadata is kept alive by GC.
-// This is primarily useful for metadata which is considered as weak roots
-// by the GC but need to be strong roots if reachable from a current compilation.
-// InstanceKlass are created for both weak and strong metadata.  Ensuring this metadata
-// alive covers the cases where there are weak roots without performance cost.
-//
-static void ensure_metadata_alive(oop metadata_holder) {
-#if INCLUDE_ALL_GCS
-  if (!UseG1GC) {
-    return;
-  }
-  if (metadata_holder != NULL) {
-    G1SATBCardTableModRefBS::enqueue(metadata_holder);
-  }
-#endif
-}
-
 
 // ------------------------------------------------------------------
 // ciInstanceKlass::ciInstanceKlass
@@ -88,8 +65,12 @@
   _has_injected_fields = -1;
   _implementor = NULL; // we will fill these lazily
 
-  oop holder = ik->klass_holder();
-  ensure_metadata_alive(holder);
+  // Ensure that the metadata wrapped by the ciMetadata is kept alive by GC.
+  // This is primarily useful for metadata which is considered as weak roots
+  // by the GC but need to be strong roots if reachable from a current compilation.
+  // InstanceKlass are created for both weak and strong metadata.  Ensuring this metadata
+  // alive covers the cases where there are weak roots without performance cost.
+  oop holder = ik->klass_holder_phantom();
   if (ik->is_anonymous()) {
     // Though ciInstanceKlass records class loader oop, it's not enough to keep
     // VM anonymous classes alive (loader == NULL). Klass holder should be used instead.
--- a/src/hotspot/share/classfile/classFileParser.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -86,8 +86,6 @@
 
 #define JAVA_CLASSFILE_MAGIC              0xCAFEBABE
 #define JAVA_MIN_SUPPORTED_VERSION        45
-#define JAVA_MAX_SUPPORTED_VERSION        54
-#define JAVA_MAX_SUPPORTED_MINOR_VERSION  0
 
 // Used for two backward compatibility reasons:
 // - to check for new additions to the class file format in JDK1.5
@@ -110,6 +108,8 @@
 
 #define JAVA_10_VERSION                   54
 
+#define JAVA_11_VERSION                   55
+
 void ClassFileParser::set_class_bad_constant_seen(short bad_constant) {
   assert((bad_constant == 19 || bad_constant == 20) && _major_version >= JAVA_9_VERSION,
          "Unexpected bad constant pool entry");
@@ -4642,11 +4642,11 @@
 }
 
 static bool is_supported_version(u2 major, u2 minor){
-  const u2 max_version = JAVA_MAX_SUPPORTED_VERSION;
+  const u2 max_version = JVM_CLASSFILE_MAJOR_VERSION;
   return (major >= JAVA_MIN_SUPPORTED_VERSION) &&
          (major <= max_version) &&
          ((major != max_version) ||
-          (minor <= JAVA_MAX_SUPPORTED_MINOR_VERSION));
+          (minor <= JVM_CLASSFILE_MINOR_VERSION));
 }
 
 void ClassFileParser::verify_legal_field_modifiers(jint flags,
@@ -5808,8 +5808,8 @@
       _class_name->as_C_string(),
       _major_version,
       _minor_version,
-      JAVA_MAX_SUPPORTED_VERSION,
-      JAVA_MAX_SUPPORTED_MINOR_VERSION);
+      JVM_CLASSFILE_MAJOR_VERSION,
+      JVM_CLASSFILE_MINOR_VERSION);
     return;
   }
 
--- a/src/hotspot/share/classfile/classLoader.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/classLoader.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -802,6 +802,14 @@
   int end = 0;
   bool set_base_piece = true;
 
+#if INCLUDE_CDS
+  if (DumpSharedSpaces) {
+    if (!Arguments::has_jimage()) {
+      vm_exit_during_initialization("CDS is not supported in exploded JDK build", NULL);
+    }
+  }
+#endif
+
   // Iterate over class path entries
   for (int start = 0; start < len; start = end) {
     while (class_path[end] && class_path[end] != os::path_separator()[0]) {
--- a/src/hotspot/share/classfile/classLoaderData.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/classLoaderData.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -63,6 +63,7 @@
 #include "memory/metaspaceShared.hpp"
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/access.inline.hpp"
 #include "oops/objArrayOop.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/atomic.hpp"
@@ -75,9 +76,6 @@
 #include "utilities/growableArray.hpp"
 #include "utilities/macros.hpp"
 #include "utilities/ostream.hpp"
-#if INCLUDE_ALL_GCS
-#include "gc/g1/g1SATBCardTableModRefBS.hpp"
-#endif // INCLUDE_ALL_GCS
 #if INCLUDE_TRACE
 #include "trace/tracing.hpp"
 #endif
@@ -759,18 +757,9 @@
   oop* ptr = h.ptr_raw();
   if (ptr != NULL) {
     assert(_handles.contains(ptr), "Got unexpected handle " PTR_FORMAT, p2i(ptr));
-#if INCLUDE_ALL_GCS
-    // This barrier is used by G1 to remember the old oop values, so
-    // that we don't forget any objects that were live at the snapshot at
-    // the beginning.
-    if (UseG1GC) {
-      oop obj = *ptr;
-      if (obj != NULL) {
-        G1SATBCardTableModRefBS::enqueue(obj);
-      }
-    }
-#endif
-    *ptr = NULL;
+    // This root is not walked in safepoints, and hence requires an appropriate
+    // decorator that e.g. maintains the SATB invariant in SATB collectors.
+    RootAccess<IN_CONCURRENT_ROOT>::oop_store(ptr, oop(NULL));
   }
 }
 
--- a/src/hotspot/share/classfile/classLoaderData.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/classLoaderData.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -217,6 +217,7 @@
   friend class ClassLoaderDataGraphKlassIteratorAtomic;
   friend class ClassLoaderDataGraphKlassIteratorStatic;
   friend class ClassLoaderDataGraphMetaspaceIterator;
+  friend class InstanceKlass;
   friend class MetaDataFactory;
   friend class Method;
 
--- a/src/hotspot/share/classfile/defaultMethods.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/defaultMethods.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -26,6 +26,7 @@
 #include "classfile/bytecodeAssembler.hpp"
 #include "classfile/defaultMethods.hpp"
 #include "classfile/symbolTable.hpp"
+#include "classfile/systemDictionary.hpp"
 #include "logging/log.hpp"
 #include "logging/logStream.hpp"
 #include "memory/allocation.hpp"
@@ -683,10 +684,11 @@
   Symbol* _method_name;
   Symbol* _method_signature;
   StatefulMethodFamily*  _family;
+  bool _cur_class_is_interface;
 
  public:
-  FindMethodsByErasedSig(Symbol* name, Symbol* signature) :
-      _method_name(name), _method_signature(signature),
+  FindMethodsByErasedSig(Symbol* name, Symbol* signature, bool is_interf) :
+      _method_name(name), _method_signature(signature), _cur_class_is_interface(is_interf),
       _family(NULL) {}
 
   void get_discovered_family(MethodFamily** family) {
@@ -709,14 +711,17 @@
     InstanceKlass* iklass = current_class();
 
     Method* m = iklass->find_method(_method_name, _method_signature);
-    // private interface methods are not candidates for default methods
-    // invokespecial to private interface methods doesn't use default method logic
-    // private class methods are not candidates for default methods,
-    // private methods do not override default methods, so need to perform
-    // default method inheritance without including private methods
-    // The overpasses are your supertypes' errors, we do not include them
-    // future: take access controls into account for superclass methods
-    if (m != NULL && !m->is_static() && !m->is_overpass() && !m->is_private()) {
+    // Private interface methods are not candidates for default methods.
+    // invokespecial to private interface methods doesn't use default method logic.
+    // Private class methods are not candidates for default methods.
+    // Private methods do not override default methods, so need to perform
+    // default method inheritance without including private methods.
+    // The overpasses are your supertypes' errors, we do not include them.
+    // Non-public methods in java.lang.Object are not candidates for default
+    // methods.
+    // Future: take access controls into account for superclass methods
+    if (m != NULL && !m->is_static() && !m->is_overpass() && !m->is_private() &&
+     (!_cur_class_is_interface || !SystemDictionary::is_nonpublic_Object_method(m))) {
       if (_family == NULL) {
         _family = new StatefulMethodFamily();
       }
@@ -726,8 +731,8 @@
         scope->add_mark(restorer);
       } else {
         // This is the rule that methods in classes "win" (bad word) over
-        // methods in interfaces. This works because of single inheritance
-        // private methods in classes do not "win", they will be found
+        // methods in interfaces. This works because of single inheritance.
+        // Private methods in classes do not "win", they will be found
         // first on searching, but overriding for invokevirtual needs
         // to find default method candidates for the same signature
         _family->set_target_if_empty(m);
@@ -745,10 +750,10 @@
 
 static void generate_erased_defaults(
      InstanceKlass* klass, GrowableArray<EmptyVtableSlot*>* empty_slots,
-     EmptyVtableSlot* slot, TRAPS) {
+     EmptyVtableSlot* slot, bool is_intf, TRAPS) {
 
   // sets up a set of methods with the same exact erased signature
-  FindMethodsByErasedSig visitor(slot->name(), slot->signature());
+  FindMethodsByErasedSig visitor(slot->name(), slot->signature(), is_intf);
   visitor.run(klass);
 
   MethodFamily* family;
@@ -817,7 +822,7 @@
       slot->print_on(&ls);
       ls.cr();
     }
-    generate_erased_defaults(klass, empty_slots, slot, CHECK);
+    generate_erased_defaults(klass, empty_slots, slot, klass->is_interface(), CHECK);
   }
   log_debug(defaultmethods)("Creating defaults and overpasses...");
   create_defaults_and_exceptions(empty_slots, klass, CHECK);
--- a/src/hotspot/share/classfile/javaClasses.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/javaClasses.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,8 @@
 #include "code/dependencyContext.hpp"
 #include "code/pcDesc.hpp"
 #include "interpreter/interpreter.hpp"
+#include "logging/log.hpp"
+#include "logging/logStream.hpp"
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
 #include "memory/universe.inline.hpp"
@@ -104,52 +106,59 @@
 }
 
 
-static bool find_field(InstanceKlass* ik,
-                       Symbol* name_symbol, Symbol* signature_symbol,
-                       fieldDescriptor* fd,
-                       bool is_static = false, bool allow_super = false) {
-  if (allow_super || is_static) {
-    return ik->find_field(name_symbol, signature_symbol, is_static, fd) != NULL;
-  } else {
-    return ik->find_local_field(name_symbol, signature_symbol, fd);
+// Helpful routine for computing field offsets at run time rather than hardcoding them
+// Finds local fields only, including static fields.  Static field offsets are from the
+// beginning of the mirror.
+static void compute_offset(int &dest_offset,
+                           InstanceKlass* ik, Symbol* name_symbol, Symbol* signature_symbol,
+                           bool is_static = false) {
+  fieldDescriptor fd;
+  if (ik == NULL) {
+    ResourceMark rm;
+    log_error(class)("Mismatch JDK version for field: %s type: %s", name_symbol->as_C_string(), signature_symbol->as_C_string());
+    vm_exit_during_initialization("Invalid layout of preloaded class");
   }
-}
-
-// Helpful routine for computing field offsets at run time rather than hardcoding them
-static void
-compute_offset(int &dest_offset,
-               Klass* klass, Symbol* name_symbol, Symbol* signature_symbol,
-               bool is_static = false, bool allow_super = false) {
-  fieldDescriptor fd;
-  InstanceKlass* ik = InstanceKlass::cast(klass);
-  if (!find_field(ik, name_symbol, signature_symbol, &fd, is_static, allow_super)) {
+
+  if (!ik->find_local_field(name_symbol, signature_symbol, &fd) || fd.is_static() != is_static) {
     ResourceMark rm;
-    tty->print_cr("Invalid layout of %s at %s", ik->external_name(), name_symbol->as_C_string());
+    log_error(class)("Invalid layout of %s field: %s type: %s", ik->external_name(),
+                     name_symbol->as_C_string(), signature_symbol->as_C_string());
 #ifndef PRODUCT
-    ik->print();
-    tty->print_cr("all fields:");
-    for (AllFieldStream fs(ik); !fs.done(); fs.next()) {
-      tty->print_cr("  name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int());
-    }
+    // Prints all fields and offsets
+    Log(class) lt;
+    LogStream ls(lt.error());
+    ik->print_on(&ls);
 #endif //PRODUCT
     vm_exit_during_initialization("Invalid layout of preloaded class: use -Xlog:class+load=info to see the origin of the problem class");
   }
   dest_offset = fd.offset();
 }
 
+// Overloading to pass name as a string.
+static void compute_offset(int& dest_offset, InstanceKlass* ik,
+                           const char* name_string, Symbol* signature_symbol,
+                           bool is_static = false) {
+  TempNewSymbol name = SymbolTable::probe(name_string, (int)strlen(name_string));
+  if (name == NULL) {
+    ResourceMark rm;
+    log_error(class)("Name %s should be in the SymbolTable since its class is loaded", name_string);
+    vm_exit_during_initialization("Invalid layout of preloaded class", ik->external_name());
+  }
+  compute_offset(dest_offset, ik, name, signature_symbol, is_static);
+}
+
 // Same as above but for "optional" offsets that might not be present in certain JDK versions
+// Old versions should be cleaned out since Hotspot only supports the current JDK, and this
+// function should be removed.
 static void
 compute_optional_offset(int& dest_offset,
-                        Klass* klass, Symbol* name_symbol, Symbol* signature_symbol,
-                        bool allow_super = false) {
+                        InstanceKlass* ik, Symbol* name_symbol, Symbol* signature_symbol) {
   fieldDescriptor fd;
-  InstanceKlass* ik = InstanceKlass::cast(klass);
-  if (find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) {
+  if (ik->find_local_field(name_symbol, signature_symbol, &fd)) {
     dest_offset = fd.offset();
   }
 }
 
-
 int java_lang_String::value_offset  = 0;
 int java_lang_String::hash_offset   = 0;
 int java_lang_String::coder_offset  = 0;
@@ -163,10 +172,10 @@
 void java_lang_String::compute_offsets() {
   assert(!initialized, "offsets should be initialized only once");
 
-  Klass* k = SystemDictionary::String_klass();
+  InstanceKlass* k = SystemDictionary::String_klass();
   compute_offset(value_offset,           k, vmSymbols::value_name(),  vmSymbols::byte_array_signature());
-  compute_offset(hash_offset,            k, vmSymbols::hash_name(),   vmSymbols::int_signature());
-  compute_offset(coder_offset,           k, vmSymbols::coder_name(),  vmSymbols::byte_signature());
+  compute_offset(hash_offset,            k, "hash",   vmSymbols::int_signature());
+  compute_offset(coder_offset,           k, "coder",  vmSymbols::byte_signature());
 
   initialized = true;
 }
@@ -619,12 +628,12 @@
 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   assert(java_string->klass() == SystemDictionary::String_klass(),
          "must be java_string");
-  typeArrayOop value  = java_lang_String::value(java_string);
-  int          length = java_lang_String::length(java_string);
+  typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
+  int length = java_lang_String::length(java_string);
   if (length != len) {
     return false;
   }
-  bool      is_latin1 = java_lang_String::is_latin1(java_string);
+  bool is_latin1 = java_lang_String::is_latin1(java_string);
   if (!is_latin1) {
     for (int i = 0; i < len; i++) {
       if (value->char_at(i) != chars[i]) {
@@ -646,12 +655,12 @@
          "must be java String");
   assert(str2->klass() == SystemDictionary::String_klass(),
          "must be java String");
-  typeArrayOop value1  = java_lang_String::value(str1);
-  int          length1 = java_lang_String::length(str1);
-  bool       is_latin1 = java_lang_String::is_latin1(str1);
-  typeArrayOop value2  = java_lang_String::value(str2);
-  int          length2 = java_lang_String::length(str2);
-  bool       is_latin2 = java_lang_String::is_latin1(str2);
+  typeArrayOop value1    = java_lang_String::value_no_keepalive(str1);
+  int          length1   = java_lang_String::length(value1);
+  bool         is_latin1 = java_lang_String::is_latin1(str1);
+  typeArrayOop value2    = java_lang_String::value_no_keepalive(str2);
+  int          length2   = java_lang_String::length(value2);
+  bool         is_latin2 = java_lang_String::is_latin1(str2);
 
   if ((length1 != length2) || (is_latin1 != is_latin2)) {
     // Strings of different size or with different
@@ -659,7 +668,7 @@
     return false;
   }
   int blength1 = value1->length();
-  for (int i = 0; i < value1->length(); i++) {
+  for (int i = 0; i < blength1; i++) {
     if (value1->byte_at(i) != value2->byte_at(i)) {
       return false;
     }
@@ -669,7 +678,7 @@
 
 void java_lang_String::print(oop java_string, outputStream* st) {
   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
-  typeArrayOop value  = java_lang_String::value(java_string);
+  typeArrayOop value  = java_lang_String::value_no_keepalive(java_string);
 
   if (value == NULL) {
     // This can happen if, e.g., printing a String
@@ -1161,25 +1170,11 @@
   assert(!offsets_computed, "offsets should be initialized only once");
   offsets_computed = true;
 
-  Klass* k = SystemDictionary::Class_klass();
-  // The classRedefinedCount field is only present starting in 1.5,
-  // so don't go fatal.
-  compute_optional_offset(classRedefinedCount_offset,
-                          k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());
-
-  // Needs to be optional because the old build runs Queens during bootstrapping
-  // and jdk8-9 doesn't have coordinated pushes yet.
-  compute_optional_offset(_class_loader_offset,
-                 k, vmSymbols::classLoader_name(),
-                 vmSymbols::classloader_signature());
-
-  compute_offset(_component_mirror_offset,
-                 k, vmSymbols::componentType_name(),
-                 vmSymbols::class_signature());
-
-  compute_offset(_module_offset,
-                 k, vmSymbols::module_name(),
-                 vmSymbols::module_signature());
+  InstanceKlass* k = SystemDictionary::Class_klass();
+  compute_offset(classRedefinedCount_offset, k, "classRedefinedCount", vmSymbols::int_signature());
+  compute_offset(_class_loader_offset,       k, "classLoader", vmSymbols::classloader_signature());
+  compute_offset(_component_mirror_offset,   k, "componentType", vmSymbols::class_signature());
+  compute_offset(_module_offset,             k, "module", vmSymbols::module_signature());
 
   // Init lock is a C union with component_mirror.  Only instanceKlass mirrors have
   // init_lock and only ArrayKlass mirrors have component_mirror.  Since both are oops
@@ -1234,24 +1229,22 @@
 void java_lang_Thread::compute_offsets() {
   assert(_group_offset == 0, "offsets should be initialized only once");
 
-  Klass* k = SystemDictionary::Thread_klass();
+  InstanceKlass* k = SystemDictionary::Thread_klass();
   compute_offset(_name_offset,      k, vmSymbols::name_name(),      vmSymbols::string_signature());
   compute_offset(_group_offset,     k, vmSymbols::group_name(),     vmSymbols::threadgroup_signature());
-  compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
-  compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
+  compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(),
+                 vmSymbols::classloader_signature());
+  compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(),
+                 vmSymbols::accesscontrolcontext_signature());
   compute_offset(_priority_offset,  k, vmSymbols::priority_name(),  vmSymbols::int_signature());
   compute_offset(_daemon_offset,    k, vmSymbols::daemon_name(),    vmSymbols::bool_signature());
-  compute_offset(_eetop_offset,     k, vmSymbols::eetop_name(),     vmSymbols::long_signature());
-  compute_offset(_stillborn_offset, k, vmSymbols::stillborn_name(), vmSymbols::bool_signature());
-  // The stackSize field is only present starting in 1.4, so don't go fatal.
-  compute_optional_offset(_stackSize_offset, k, vmSymbols::stackSize_name(), vmSymbols::long_signature());
-  // The tid and thread_status fields are only present starting in 1.5, so don't go fatal.
-  compute_optional_offset(_tid_offset, k, vmSymbols::thread_id_name(), vmSymbols::long_signature());
-  compute_optional_offset(_thread_status_offset, k, vmSymbols::thread_status_name(), vmSymbols::int_signature());
-  // The parkBlocker field is only present starting in 1.6, so don't go fatal.
-  compute_optional_offset(_park_blocker_offset, k, vmSymbols::park_blocker_name(), vmSymbols::object_signature());
-  compute_optional_offset(_park_event_offset, k, vmSymbols::park_event_name(),
- vmSymbols::long_signature());
+  compute_offset(_eetop_offset,     k, "eetop", vmSymbols::long_signature());
+  compute_offset(_stillborn_offset, k, "stillborn", vmSymbols::bool_signature());
+  compute_offset(_stackSize_offset, k, "stackSize", vmSymbols::long_signature());
+  compute_offset(_tid_offset,       k, "tid", vmSymbols::long_signature());
+  compute_offset(_thread_status_offset, k, "threadStatus", vmSymbols::int_signature());
+  compute_offset(_park_blocker_offset,  k, "parkBlocker", vmSymbols::object_signature());
+  compute_offset(_park_event_offset,    k, "nativeParkEventPointer", vmSymbols::long_signature());
 }
 
 
@@ -1486,7 +1479,7 @@
 void java_lang_ThreadGroup::compute_offsets() {
   assert(_parent_offset == 0, "offsets should be initialized only once");
 
-  Klass* k = SystemDictionary::ThreadGroup_klass();
+  InstanceKlass* k = SystemDictionary::ThreadGroup_klass();
 
   compute_offset(_parent_offset,      k, vmSymbols::parent_name(),      vmSymbols::threadgroup_signature());
   compute_offset(_name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
@@ -1501,8 +1494,13 @@
 
 
 void java_lang_Throwable::compute_offsets() {
-  Klass* k = SystemDictionary::Throwable_klass();
-  compute_offset(depth_offset, k, vmSymbols::depth_name(), vmSymbols::int_signature());
+  InstanceKlass* k = SystemDictionary::Throwable_klass();
+  compute_offset(backtrace_offset,     k, "backtrace", vmSymbols::object_signature());
+  compute_offset(detailMessage_offset, k, "detailMessage", vmSymbols::string_signature());
+  compute_offset(stackTrace_offset,    k, "stackTrace",    vmSymbols::java_lang_StackTraceElement_array());
+  compute_offset(depth_offset,         k, "depth", vmSymbols::int_signature());
+  compute_offset(static_unassigned_stacktrace_offset, k, "UNASSIGNED_STACK", vmSymbols::java_lang_StackTraceElement_array(),
+                 /*is_static*/true);
 }
 
 oop java_lang_Throwable::unassigned_stacktrace() {
@@ -2270,23 +2268,23 @@
 }
 
 void java_lang_StackFrameInfo::compute_offsets() {
-  Klass* k = SystemDictionary::StackFrameInfo_klass();
-  compute_offset(_memberName_offset,     k, vmSymbols::memberName_name(),  vmSymbols::object_signature());
-  compute_offset(_bci_offset,            k, vmSymbols::bci_name(),         vmSymbols::short_signature());
+  InstanceKlass* k = SystemDictionary::StackFrameInfo_klass();
+  compute_offset(_memberName_offset,     k, "memberName",  vmSymbols::object_signature());
+  compute_offset(_bci_offset,            k, "bci",         vmSymbols::short_signature());
   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 }
 
 void java_lang_LiveStackFrameInfo::compute_offsets() {
-  Klass* k = SystemDictionary::LiveStackFrameInfo_klass();
-  compute_offset(_monitors_offset,   k, vmSymbols::monitors_name(),    vmSymbols::object_array_signature());
-  compute_offset(_locals_offset,     k, vmSymbols::locals_name(),      vmSymbols::object_array_signature());
-  compute_offset(_operands_offset,   k, vmSymbols::operands_name(),    vmSymbols::object_array_signature());
-  compute_offset(_mode_offset,       k, vmSymbols::mode_name(),        vmSymbols::int_signature());
+  InstanceKlass* k = SystemDictionary::LiveStackFrameInfo_klass();
+  compute_offset(_monitors_offset,   k, "monitors",    vmSymbols::object_array_signature());
+  compute_offset(_locals_offset,     k, "locals",      vmSymbols::object_array_signature());
+  compute_offset(_operands_offset,   k, "operands",    vmSymbols::object_array_signature());
+  compute_offset(_mode_offset,       k, "mode",        vmSymbols::int_signature());
 }
 
 void java_lang_reflect_AccessibleObject::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_AccessibleObject_klass();
-  compute_offset(override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature());
+  InstanceKlass* k = SystemDictionary::reflect_AccessibleObject_klass();
+  compute_offset(override_offset, k, "override", vmSymbols::bool_signature());
 }
 
 jboolean java_lang_reflect_AccessibleObject::override(oop reflect) {
@@ -2300,7 +2298,7 @@
 }
 
 void java_lang_reflect_Method::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_Method_klass();
+  InstanceKlass* k = SystemDictionary::reflect_Method_klass();
   compute_offset(clazz_offset,          k, vmSymbols::clazz_name(),          vmSymbols::class_signature());
   compute_offset(name_offset,           k, vmSymbols::name_name(),           vmSymbols::string_signature());
   compute_offset(returnType_offset,     k, vmSymbols::returnType_name(),     vmSymbols::class_signature());
@@ -2481,7 +2479,7 @@
 }
 
 void java_lang_reflect_Constructor::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_Constructor_klass();
+  InstanceKlass* k = SystemDictionary::reflect_Constructor_klass();
   compute_offset(clazz_offset,          k, vmSymbols::clazz_name(),          vmSymbols::class_signature());
   compute_offset(parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
   compute_offset(exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
@@ -2623,7 +2621,7 @@
 }
 
 void java_lang_reflect_Field::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_Field_klass();
+  InstanceKlass* k = SystemDictionary::reflect_Field_klass();
   compute_offset(clazz_offset,     k, vmSymbols::clazz_name(),     vmSymbols::class_signature());
   compute_offset(name_offset,      k, vmSymbols::name_name(),      vmSymbols::string_signature());
   compute_offset(type_offset,      k, vmSymbols::type_name(),      vmSymbols::class_signature());
@@ -2747,22 +2745,17 @@
 }
 
 void reflect_ConstantPool::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_ConstantPool_klass();
-  // This null test can be removed post beta
-  if (k != NULL) {
-    // The field is called ConstantPool* in the sun.reflect.ConstantPool class.
-    compute_offset(_oop_offset, k, vmSymbols::ConstantPool_name(), vmSymbols::object_signature());
-  }
+  InstanceKlass* k = SystemDictionary::reflect_ConstantPool_klass();
+  // The field is called ConstantPool* in the sun.reflect.ConstantPool class.
+  compute_offset(_oop_offset, k, "constantPoolOop", vmSymbols::object_signature());
 }
 
 void java_lang_reflect_Parameter::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_Parameter_klass();
-  if(NULL != k) {
-    compute_offset(name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
-    compute_offset(modifiers_offset,   k, vmSymbols::modifiers_name(),   vmSymbols::int_signature());
-    compute_offset(index_offset,       k, vmSymbols::index_name(),       vmSymbols::int_signature());
-    compute_offset(executable_offset,  k, vmSymbols::executable_name(),  vmSymbols::executable_signature());
-  }
+  InstanceKlass* k = SystemDictionary::reflect_Parameter_klass();
+  compute_offset(name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
+  compute_offset(modifiers_offset,   k, vmSymbols::modifiers_name(),   vmSymbols::int_signature());
+  compute_offset(index_offset,       k, vmSymbols::index_name(),       vmSymbols::int_signature());
+  compute_offset(executable_offset,  k, vmSymbols::executable_name(),  vmSymbols::executable_signature());
 }
 
 Handle java_lang_reflect_Parameter::create(TRAPS) {
@@ -2836,12 +2829,10 @@
 }
 
 void java_lang_Module::compute_offsets() {
-  Klass* k = SystemDictionary::Module_klass();
-  if(NULL != k) {
-    compute_offset(loader_offset,  k, vmSymbols::loader_name(),  vmSymbols::classloader_signature());
-    compute_offset(name_offset,    k, vmSymbols::name_name(),    vmSymbols::string_signature());
-    MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
-  }
+  InstanceKlass* k = SystemDictionary::Module_klass();
+  compute_offset(loader_offset,  k, vmSymbols::loader_name(),  vmSymbols::classloader_signature());
+  compute_offset(name_offset,    k, vmSymbols::name_name(),    vmSymbols::string_signature());
+  MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 }
 
 
@@ -2921,12 +2912,8 @@
 }
 
 void reflect_UnsafeStaticFieldAccessorImpl::compute_offsets() {
-  Klass* k = SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass();
-  // This null test can be removed post beta
-  if (k != NULL) {
-    compute_offset(_base_offset, k,
-                   vmSymbols::base_name(), vmSymbols::object_signature());
-  }
+  InstanceKlass* k = SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass();
+  compute_offset(_base_offset, k, "base", vmSymbols::object_signature());
 }
 
 oop java_lang_boxing_object::initialize_and_allocate(BasicType type, TRAPS) {
@@ -3084,6 +3071,13 @@
 }
 
 // Support for java_lang_ref_SoftReference
+//
+
+void java_lang_ref_SoftReference::compute_offsets() {
+  InstanceKlass* k = SystemDictionary::SoftReference_klass();
+  compute_offset(timestamp_offset,    k, "timestamp", vmSymbols::long_signature());
+  compute_offset(static_clock_offset, k, "clock",     vmSymbols::long_signature(), true);
+}
 
 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
   return ref->long_field(timestamp_offset);
@@ -3113,10 +3107,8 @@
 }
 
 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
-  Klass* k = SystemDictionary::DirectMethodHandle_klass();
-  if (k != NULL) {
-    compute_offset(_member_offset, k, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
-  }
+  InstanceKlass* k = SystemDictionary::DirectMethodHandle_klass();
+  compute_offset(_member_offset, k, "member", vmSymbols::java_lang_invoke_MemberName_signature());
 }
 
 // Support for java_lang_invoke_MethodHandle
@@ -3137,16 +3129,13 @@
 int java_lang_invoke_LambdaForm::_vmentry_offset;
 
 void java_lang_invoke_MethodHandle::compute_offsets() {
-  Klass* k = SystemDictionary::MethodHandle_klass();
-  if (k != NULL) {
-    compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature());
-    compute_offset(_form_offset, k, vmSymbols::form_name(), vmSymbols::java_lang_invoke_LambdaForm_signature());
-  }
+  InstanceKlass* k = SystemDictionary::MethodHandle_klass();
+  compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature());
+  compute_offset(_form_offset, k, "form", vmSymbols::java_lang_invoke_LambdaForm_signature());
 }
 
 void java_lang_invoke_MemberName::compute_offsets() {
-  Klass* k = SystemDictionary::MemberName_klass();
-  assert (k != NULL, "jdk mismatch");
+  InstanceKlass* k = SystemDictionary::MemberName_klass();
   compute_offset(_clazz_offset,   k, vmSymbols::clazz_name(),   vmSymbols::class_signature());
   compute_offset(_name_offset,    k, vmSymbols::name_name(),    vmSymbols::string_signature());
   compute_offset(_type_offset,    k, vmSymbols::type_name(),    vmSymbols::object_signature());
@@ -3156,15 +3145,15 @@
 }
 
 void java_lang_invoke_ResolvedMethodName::compute_offsets() {
-  Klass* k = SystemDictionary::ResolvedMethodName_klass();
+  InstanceKlass* k = SystemDictionary::ResolvedMethodName_klass();
   assert(k != NULL, "jdk mismatch");
   RESOLVEDMETHOD_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 }
 
 void java_lang_invoke_LambdaForm::compute_offsets() {
-  Klass* k = SystemDictionary::LambdaForm_klass();
+  InstanceKlass* k = SystemDictionary::LambdaForm_klass();
   assert (k != NULL, "jdk mismatch");
-  compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::java_lang_invoke_MemberName_signature());
+  compute_offset(_vmentry_offset, k, "vmentry", vmSymbols::java_lang_invoke_MemberName_signature());
 }
 
 bool java_lang_invoke_LambdaForm::is_instance(oop obj) {
@@ -3305,11 +3294,9 @@
 int java_lang_invoke_MethodType::_ptypes_offset;
 
 void java_lang_invoke_MethodType::compute_offsets() {
-  Klass* k = SystemDictionary::MethodType_klass();
-  if (k != NULL) {
-    compute_offset(_rtype_offset,  k, vmSymbols::rtype_name(),  vmSymbols::class_signature());
-    compute_offset(_ptypes_offset, k, vmSymbols::ptypes_name(), vmSymbols::class_array_signature());
-  }
+  InstanceKlass* k = SystemDictionary::MethodType_klass();
+  compute_offset(_rtype_offset,  k, "rtype",  vmSymbols::class_signature());
+  compute_offset(_ptypes_offset, k, "ptypes", vmSymbols::class_array_signature());
 }
 
 void java_lang_invoke_MethodType::print_signature(oop mt, outputStream* st) {
@@ -3392,12 +3379,10 @@
 int java_lang_invoke_CallSite::_context_offset;
 
 void java_lang_invoke_CallSite::compute_offsets() {
-  Klass* k = SystemDictionary::CallSite_klass();
-  if (k != NULL) {
-    compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature());
-    compute_offset(_context_offset, k, vmSymbols::context_name(),
-                   vmSymbols::java_lang_invoke_MethodHandleNatives_CallSiteContext_signature());
-  }
+  InstanceKlass* k = SystemDictionary::CallSite_klass();
+  compute_offset(_target_offset,  k, "target", vmSymbols::java_lang_invoke_MethodHandle_signature());
+  compute_offset(_context_offset, k, "context",
+                 vmSymbols::java_lang_invoke_MethodHandleNatives_CallSiteContext_signature());
 }
 
 oop java_lang_invoke_CallSite::context(oop call_site) {
@@ -3412,10 +3397,8 @@
 int java_lang_invoke_MethodHandleNatives_CallSiteContext::_vmdependencies_offset;
 
 void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() {
-  Klass* k = SystemDictionary::Context_klass();
-  if (k != NULL) {
-    CALLSITECONTEXT_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
-  }
+  InstanceKlass* k = SystemDictionary::Context_klass();
+  CALLSITECONTEXT_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 }
 
 DependencyContext java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) {
@@ -3434,28 +3417,12 @@
 
 void java_security_AccessControlContext::compute_offsets() {
   assert(_isPrivileged_offset == 0, "offsets should be initialized only once");
-  fieldDescriptor fd;
-  InstanceKlass* ik = SystemDictionary::AccessControlContext_klass();
-
-  if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) {
-    fatal("Invalid layout of java.security.AccessControlContext");
-  }
-  _context_offset = fd.offset();
-
-  if (!ik->find_local_field(vmSymbols::privilegedContext_name(), vmSymbols::accesscontrolcontext_signature(), &fd)) {
-    fatal("Invalid layout of java.security.AccessControlContext");
-  }
-  _privilegedContext_offset = fd.offset();
-
-  if (!ik->find_local_field(vmSymbols::isPrivileged_name(), vmSymbols::bool_signature(), &fd)) {
-    fatal("Invalid layout of java.security.AccessControlContext");
-  }
-  _isPrivileged_offset = fd.offset();
-
-  // The offset may not be present for bootstrapping with older JDK.
-  if (ik->find_local_field(vmSymbols::isAuthorized_name(), vmSymbols::bool_signature(), &fd)) {
-    _isAuthorized_offset = fd.offset();
-  }
+  InstanceKlass* k = SystemDictionary::AccessControlContext_klass();
+
+  compute_offset(_context_offset,           k, "context",      vmSymbols::protectiondomain_signature());
+  compute_offset(_privilegedContext_offset, k, "privilegedContext", vmSymbols::accesscontrolcontext_signature());
+  compute_offset(_isPrivileged_offset,      k, "isPrivileged", vmSymbols::bool_signature());
+  compute_offset(_isAuthorized_offset,      k, "isAuthorized", vmSymbols::bool_signature());
 }
 
 
@@ -3504,16 +3471,17 @@
   assert(!offsets_computed, "offsets should be initialized only once");
   offsets_computed = true;
 
-  // The field indicating parallelCapable (parallelLockMap) is only present starting in 7,
-  Klass* k1 = SystemDictionary::ClassLoader_klass();
-  compute_optional_offset(parallelCapable_offset,
-    k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature());
+  InstanceKlass* k1 = SystemDictionary::ClassLoader_klass();
+  compute_offset(parallelCapable_offset,
+    k1, "parallelLockMap", vmSymbols::concurrenthashmap_signature());
 
   compute_offset(name_offset,
     k1, vmSymbols::name_name(), vmSymbols::string_signature());
 
   compute_offset(unnamedModule_offset,
-    k1, vmSymbols::unnamedModule_name(), vmSymbols::module_signature());
+    k1, "unnamedModule", vmSymbols::module_signature());
+
+  compute_offset(parent_offset, k1, "parent", vmSymbols::classloader_signature());
 
   CLASSLOADER_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 }
@@ -3600,19 +3568,18 @@
 }
 
 // Support for java_lang_System
-int java_lang_System::in_offset_in_bytes() {
-  return (InstanceMirrorKlass::offset_of_static_fields() + static_in_offset);
-}
-
-
-int java_lang_System::out_offset_in_bytes() {
-  return (InstanceMirrorKlass::offset_of_static_fields() + static_out_offset);
-}
-
-
-int java_lang_System::err_offset_in_bytes() {
-  return (InstanceMirrorKlass::offset_of_static_fields() + static_err_offset);
-}
+//
+void java_lang_System::compute_offsets() {
+  InstanceKlass* k = SystemDictionary::System_klass();
+  compute_offset(static_in_offset,  k, "in",  vmSymbols::input_stream_signature(), true);
+  compute_offset(static_out_offset, k, "out", vmSymbols::print_stream_signature(), true);
+  compute_offset(static_err_offset, k, "err", vmSymbols::print_stream_signature(), true);
+  compute_offset(static_security_offset, k, "security", vmSymbols::security_manager_signature(), true);
+}
+
+int java_lang_System::in_offset_in_bytes() { return static_in_offset; }
+int java_lang_System::out_offset_in_bytes() { return static_out_offset; }
+int java_lang_System::err_offset_in_bytes() { return static_err_offset; }
 
 
 bool java_lang_System::has_security_manager() {
@@ -3682,7 +3649,6 @@
 int java_lang_ref_Reference::queue_offset;
 int java_lang_ref_Reference::next_offset;
 int java_lang_ref_Reference::discovered_offset;
-int java_lang_ref_Reference::number_of_fake_oop_fields;
 int java_lang_ref_SoftReference::timestamp_offset;
 int java_lang_ref_SoftReference::static_clock_offset;
 int java_lang_ClassLoader::parent_offset;
@@ -3717,6 +3683,17 @@
 
 
 // Support for java_lang_StackTraceElement
+void java_lang_StackTraceElement::compute_offsets() {
+  InstanceKlass* k = SystemDictionary::StackTraceElement_klass();
+  compute_offset(declaringClassObject_offset,  k, "declaringClassObject", vmSymbols::class_signature());
+  compute_offset(classLoaderName_offset, k, "classLoaderName", vmSymbols::string_signature());
+  compute_offset(moduleName_offset,      k, "moduleName",      vmSymbols::string_signature());
+  compute_offset(moduleVersion_offset,   k, "moduleVersion",   vmSymbols::string_signature());
+  compute_offset(declaringClass_offset,  k, "declaringClass",  vmSymbols::string_signature());
+  compute_offset(methodName_offset,      k, "methodName",      vmSymbols::string_signature());
+  compute_offset(fileName_offset,        k, "fileName",        vmSymbols::string_signature());
+  compute_offset(lineNumber_offset,      k, "lineNumber",      vmSymbols::int_signature());
+}
 
 void java_lang_StackTraceElement::set_fileName(oop element, oop value) {
   element->obj_field_put(fileName_offset, value);
@@ -3776,6 +3753,16 @@
 
 // Support for java Assertions - java_lang_AssertionStatusDirectives.
 
+void java_lang_AssertionStatusDirectives::compute_offsets() {
+  InstanceKlass* k = SystemDictionary::AssertionStatusDirectives_klass();
+  compute_offset(classes_offset,        k, "classes",        vmSymbols::string_array_signature());
+  compute_offset(classEnabled_offset,   k, "classEnabled",   vmSymbols::bool_array_signature());
+  compute_offset(packages_offset,       k, "packages",       vmSymbols::string_array_signature());
+  compute_offset(packageEnabled_offset, k, "packageEnabled", vmSymbols::bool_array_signature());
+  compute_offset(deflt_offset,          k, "deflt",          vmSymbols::bool_signature());
+}
+
+
 void java_lang_AssertionStatusDirectives::set_classes(oop o, oop val) {
   o->obj_field_put(classes_offset, val);
 }
@@ -3804,18 +3791,18 @@
 
 
 void java_nio_Buffer::compute_offsets() {
-  Klass* k = SystemDictionary::nio_Buffer_klass();
+  InstanceKlass* k = SystemDictionary::nio_Buffer_klass();
   assert(k != NULL, "must be loaded in 1.4+");
-  compute_offset(_limit_offset, k, vmSymbols::limit_name(), vmSymbols::int_signature());
+  compute_offset(_limit_offset, k, "limit", vmSymbols::int_signature());
 }
 
 void java_util_concurrent_locks_AbstractOwnableSynchronizer::initialize(TRAPS) {
   if (_owner_offset != 0) return;
 
   SystemDictionary::load_abstract_ownable_synchronizer_klass(CHECK);
-  Klass* k = SystemDictionary::abstract_ownable_synchronizer_klass();
+  InstanceKlass* k = SystemDictionary::abstract_ownable_synchronizer_klass();
   compute_offset(_owner_offset, k,
-                 vmSymbols::exclusive_owner_thread_name(), vmSymbols::thread_signature());
+                 "exclusiveOwnerThread", vmSymbols::thread_signature());
 }
 
 oop java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj(oop obj) {
@@ -3823,71 +3810,37 @@
   return obj->obj_field(_owner_offset);
 }
 
+static int member_offset(int hardcoded_offset) {
+  return (hardcoded_offset * heapOopSize) + instanceOopDesc::base_offset_in_bytes();
+}
+
 // Compute hard-coded offsets
 // Invoked before SystemDictionary::initialize, so pre-loaded classes
 // are not available to determine the offset_of_static_fields.
 void JavaClasses::compute_hard_coded_offsets() {
-  const int x = heapOopSize;
-  const int header = instanceOopDesc::base_offset_in_bytes();
-
-  // Throwable Class
-  java_lang_Throwable::backtrace_offset  = java_lang_Throwable::hc_backtrace_offset  * x + header;
-  java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header;
-  java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header;
-  java_lang_Throwable::static_unassigned_stacktrace_offset = java_lang_Throwable::hc_static_unassigned_stacktrace_offset *  x;
 
   // java_lang_boxing_object
-  java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header;
-  java_lang_boxing_object::long_value_offset = align_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong);
-
-  // java_lang_ref_Reference:
-  java_lang_ref_Reference::referent_offset = java_lang_ref_Reference::hc_referent_offset * x + header;
-  java_lang_ref_Reference::queue_offset = java_lang_ref_Reference::hc_queue_offset * x + header;
-  java_lang_ref_Reference::next_offset  = java_lang_ref_Reference::hc_next_offset * x + header;
-  java_lang_ref_Reference::discovered_offset  = java_lang_ref_Reference::hc_discovered_offset * x + header;
-  // Artificial fields for java_lang_ref_Reference
-  // The first field is for the discovered field added in 1.4
-  java_lang_ref_Reference::number_of_fake_oop_fields = 1;
-
-  // java_lang_ref_SoftReference Class
-  java_lang_ref_SoftReference::timestamp_offset = align_up((java_lang_ref_SoftReference::hc_timestamp_offset * x + header), BytesPerLong);
-  // Don't multiply static fields because they are always in wordSize units
-  java_lang_ref_SoftReference::static_clock_offset = java_lang_ref_SoftReference::hc_static_clock_offset * x;
-
-  // java_lang_ClassLoader
-  java_lang_ClassLoader::parent_offset = java_lang_ClassLoader::hc_parent_offset * x + header;
-
-  // java_lang_System
-  java_lang_System::static_in_offset  = java_lang_System::hc_static_in_offset  * x;
-  java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x;
-  java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x;
-  java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x;
-
-  // java_lang_StackTraceElement
-  java_lang_StackTraceElement::declaringClassObject_offset = java_lang_StackTraceElement::hc_declaringClassObject_offset * x + header;
-  java_lang_StackTraceElement::classLoaderName_offset = java_lang_StackTraceElement::hc_classLoaderName_offset * x + header;
-  java_lang_StackTraceElement::moduleName_offset = java_lang_StackTraceElement::hc_moduleName_offset * x + header;
-  java_lang_StackTraceElement::moduleVersion_offset = java_lang_StackTraceElement::hc_moduleVersion_offset * x + header;
-  java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset  * x + header;
-  java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
-  java_lang_StackTraceElement::fileName_offset   = java_lang_StackTraceElement::hc_fileName_offset   * x + header;
-  java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
-  java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
-  java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
-  java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
-  java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
-  java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
-
+  java_lang_boxing_object::value_offset      = member_offset(java_lang_boxing_object::hc_value_offset);
+  java_lang_boxing_object::long_value_offset = align_up(member_offset(java_lang_boxing_object::hc_value_offset), BytesPerLong);
+
+  // java_lang_ref_Reference
+  java_lang_ref_Reference::referent_offset    = member_offset(java_lang_ref_Reference::hc_referent_offset);
+  java_lang_ref_Reference::queue_offset       = member_offset(java_lang_ref_Reference::hc_queue_offset);
+  java_lang_ref_Reference::next_offset        = member_offset(java_lang_ref_Reference::hc_next_offset);
+  java_lang_ref_Reference::discovered_offset  = member_offset(java_lang_ref_Reference::hc_discovered_offset);
 }
 
 
 // Compute non-hard-coded field offsets of all the classes in this file
 void JavaClasses::compute_offsets() {
   // java_lang_Class::compute_offsets was called earlier in bootstrap
+  java_lang_System::compute_offsets();
   java_lang_ClassLoader::compute_offsets();
   java_lang_Throwable::compute_offsets();
   java_lang_Thread::compute_offsets();
   java_lang_ThreadGroup::compute_offsets();
+  java_lang_AssertionStatusDirectives::compute_offsets();
+  java_lang_ref_SoftReference::compute_offsets();
   java_lang_invoke_MethodHandle::compute_offsets();
   java_lang_invoke_DirectMethodHandle::compute_offsets();
   java_lang_invoke_MemberName::compute_offsets();
@@ -3910,6 +3863,7 @@
   reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
   java_lang_reflect_Parameter::compute_offsets();
   java_lang_Module::compute_offsets();
+  java_lang_StackTraceElement::compute_offsets();
   java_lang_StackFrameInfo::compute_offsets();
   java_lang_LiveStackFrameInfo::compute_offsets();
 
@@ -3947,62 +3901,6 @@
   }
 }
 
-
-bool JavaClasses::check_static_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
-  EXCEPTION_MARK;
-  fieldDescriptor fd;
-  TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
-  Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
-  InstanceKlass* ik = InstanceKlass::cast(k);
-  TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
-  TempNewSymbol f_sig  = SymbolTable::new_symbol(field_sig, CATCH);
-  if (!ik->find_local_field(f_name, f_sig, &fd)) {
-    tty->print_cr("Static field %s.%s not found", klass_name, field_name);
-    return false;
-  }
-  if (!fd.is_static()) {
-    tty->print_cr("Static field %s.%s appears to be nonstatic", klass_name, field_name);
-    return false;
-  }
-  if (fd.offset() == hardcoded_offset + InstanceMirrorKlass::offset_of_static_fields()) {
-    return true;
-  } else {
-    tty->print_cr("Offset of static field %s.%s is hardcoded as %d but should really be %d.", klass_name, field_name, hardcoded_offset, fd.offset() - InstanceMirrorKlass::offset_of_static_fields());
-    return false;
-  }
-}
-
-
-bool JavaClasses::check_constant(const char *klass_name, int hardcoded_constant, const char *field_name, const char* field_sig) {
-  EXCEPTION_MARK;
-  fieldDescriptor fd;
-  TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
-  Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
-  InstanceKlass* ik = InstanceKlass::cast(k);
-  TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
-  TempNewSymbol f_sig  = SymbolTable::new_symbol(field_sig, CATCH);
-  if (!ik->find_local_field(f_name, f_sig, &fd)) {
-    tty->print_cr("Static field %s.%s not found", klass_name, field_name);
-    return false;
-  }
-  if (!fd.is_static() || !fd.has_initial_value()) {
-    tty->print_cr("Static field %s.%s appears to be non-constant", klass_name, field_name);
-    return false;
-  }
-  if (!fd.initial_value_tag().is_int()) {
-    tty->print_cr("Static field %s.%s is not an int", klass_name, field_name);
-    return false;
-  }
-  jint field_value = fd.int_initial_value();
-  if (field_value == hardcoded_constant) {
-    return true;
-  } else {
-    tty->print_cr("Constant value of static field %s.%s is hardcoded as %d but should really be %d.", klass_name, field_name, hardcoded_constant, field_value);
-    return false;
-  }
-}
-
-
 // Check the hard-coded field offsets of all the classes in this file
 
 void JavaClasses::check_offsets() {
@@ -4014,31 +3912,6 @@
 #define CHECK_LONG_OFFSET(klass_name, cpp_klass_name, field_name, field_sig) \
   valid &= check_offset(klass_name, cpp_klass_name :: long_ ## field_name ## _offset, #field_name, field_sig)
 
-#define CHECK_STATIC_OFFSET(klass_name, cpp_klass_name, field_name, field_sig) \
-  valid &= check_static_offset(klass_name, cpp_klass_name :: static_ ## field_name ## _offset, #field_name, field_sig)
-
-#define CHECK_CONSTANT(klass_name, cpp_klass_name, field_name, field_sig) \
-  valid &= check_constant(klass_name, cpp_klass_name :: field_name, #field_name, field_sig)
-
-  // java.lang.String
-
-  CHECK_OFFSET("java/lang/String", java_lang_String, value, "[B");
-  CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I");
-  CHECK_OFFSET("java/lang/String", java_lang_String, coder, "B");
-
-  // java.lang.Class
-
-  // Fake fields
-  // CHECK_OFFSET("java/lang/Class", java_lang_Class, klass); // %%% this needs to be checked
-  // CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked
-
-  // java.lang.Throwable
-
-  CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, backtrace, "Ljava/lang/Object;");
-  CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, detailMessage, "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, stackTrace, "[Ljava/lang/StackTraceElement;");
-  CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, depth, "I");
-
   // Boxed primitive objects (java_lang_boxing_object)
 
   CHECK_OFFSET("java/lang/Boolean",   java_lang_boxing_object, value, "Z");
@@ -4050,28 +3923,6 @@
   CHECK_OFFSET("java/lang/Integer",   java_lang_boxing_object, value, "I");
   CHECK_LONG_OFFSET("java/lang/Long", java_lang_boxing_object, value, "J");
 
-  // java.lang.ClassLoader
-
-  CHECK_OFFSET("java/lang/ClassLoader", java_lang_ClassLoader, parent,        "Ljava/lang/ClassLoader;");
-
-  // java.lang.System
-
-  CHECK_STATIC_OFFSET("java/lang/System", java_lang_System,  in, "Ljava/io/InputStream;");
-  CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;");
-  CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;");
-  CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;");
-
-  // java.lang.StackTraceElement
-
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClassObject, "Ljava/lang/Class;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, classLoaderName, "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, moduleName,      "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, moduleVersion,   "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass,  "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName,      "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, fileName,        "Ljava/lang/String;");
-  CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, lineNumber,      "I");
-
   // java.lang.ref.Reference
 
   CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, referent, "Ljava/lang/Object;");
@@ -4080,28 +3931,6 @@
   // Fake field
   //CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;");
 
-  // java.lang.ref.SoftReference
-
-  CHECK_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, timestamp, "J");
-  CHECK_STATIC_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, clock, "J");
-
-  // java.lang.AssertionStatusDirectives
-  //
-  // The CheckAssertionStatusDirectives boolean can be removed from here and
-  // globals.hpp after the AssertionStatusDirectives class has been integrated
-  // into merlin "for some time."  Without it, the vm will fail with early
-  // merlin builds.
-
-  if (CheckAssertionStatusDirectives) {
-    const char* nm = "java/lang/AssertionStatusDirectives";
-    const char* sig = "[Ljava/lang/String;";
-    CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classes, sig);
-    CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classEnabled, "[Z");
-    CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packages, sig);
-    CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packageEnabled, "[Z");
-    CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, deflt, "Z");
-  }
-
   if (!valid) vm_exit_during_initialization("Hard-coded field offset verification failed");
 }
 
--- a/src/hotspot/share/classfile/javaClasses.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/javaClasses.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -102,6 +102,7 @@
 
   // Accessors
   static inline typeArrayOop value(oop java_string);
+  static inline typeArrayOop value_no_keepalive(oop java_string);
   static inline unsigned int hash(oop java_string);
   static inline bool is_latin1(oop java_string);
   static inline int length(oop java_string);
@@ -444,9 +445,6 @@
     hc_cause_offset         =  2,  // New since 1.4
     hc_stackTrace_offset    =  3   // New since 1.4
   };
-  enum {
-      hc_static_unassigned_stacktrace_offset = 0  // New since 1.7
-  };
   // Trace constants
   enum {
     trace_methods_offset = 0,
@@ -878,7 +876,6 @@
   static int queue_offset;
   static int next_offset;
   static int discovered_offset;
-  static int number_of_fake_oop_fields;
 
   // Accessors
   static inline oop referent(oop ref);
@@ -902,14 +899,6 @@
 
 class java_lang_ref_SoftReference: public java_lang_ref_Reference {
  public:
-  enum {
-   // The timestamp is a long field and may need to be adjusted for alignment.
-   hc_timestamp_offset  = hc_discovered_offset + 1
-  };
-  enum {
-   hc_static_clock_offset = 0
-  };
-
   static int timestamp_offset;
   static int static_clock_offset;
 
@@ -919,6 +908,8 @@
   // Accessors for statics
   static jlong clock();
   static void set_clock(jlong value);
+
+  static void compute_offsets();
 };
 
 // Interface to java.lang.invoke.MethodHandle objects
@@ -1228,10 +1219,6 @@
 
 class java_lang_ClassLoader : AllStatic {
  private:
-  // The fake offsets are added by the class loader when java.lang.Class is loaded
-  enum {
-   hc_parent_offset = 0
-  };
   static int _loader_data_offset;
   static bool offsets_computed;
   static int parent_offset;
@@ -1279,13 +1266,6 @@
 
 class java_lang_System : AllStatic {
  private:
-  enum {
-   hc_static_in_offset  = 0,
-   hc_static_out_offset = 1,
-   hc_static_err_offset = 2,
-   hc_static_security_offset = 3
-  };
-
   static int  static_in_offset;
   static int static_out_offset;
   static int static_err_offset;
@@ -1298,6 +1278,8 @@
 
   static bool has_security_manager();
 
+  static void compute_offsets();
+
   // Debugging
   friend class JavaClasses;
 };
@@ -1307,17 +1289,6 @@
 
 class java_lang_StackTraceElement: AllStatic {
  private:
-  enum {
-    hc_declaringClassObject_offset    = 0,
-    hc_classLoaderName_offset      = 1,
-    hc_moduleName_offset           = 2,
-    hc_moduleVersion_offset        = 3,
-    hc_declaringClass_offset       = 4,
-    hc_methodName_offset           = 5,
-    hc_fileName_offset             = 6,
-    hc_lineNumber_offset           = 7
-  };
-
   static int declaringClassObject_offset;
   static int classLoaderName_offset;
   static int moduleName_offset;
@@ -1344,6 +1315,8 @@
   static void fill_in(Handle element, InstanceKlass* holder, const methodHandle& method,
                       int version, int bci, Symbol* name, TRAPS);
 
+  static void compute_offsets();
+
   // Debugging
   friend class JavaClasses;
 };
@@ -1416,14 +1389,6 @@
 
 class java_lang_AssertionStatusDirectives: AllStatic {
  private:
-  enum {
-    hc_classes_offset,
-    hc_classEnabled_offset,
-    hc_packages_offset,
-    hc_packageEnabled_offset,
-    hc_deflt_offset
-  };
-
   static int classes_offset;
   static int classEnabled_offset;
   static int packages_offset;
@@ -1437,6 +1402,9 @@
   static void set_packages(oop obj, oop val);
   static void set_packageEnabled(oop obj, oop val);
   static void set_deflt(oop obj, bool val);
+
+  static void compute_offsets();
+
   // Debugging
   friend class JavaClasses;
 };
@@ -1508,9 +1476,6 @@
   static InjectedField _injected_fields[];
 
   static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
-  static bool check_static_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
-  static bool check_constant(const char *klass_name, int constant, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
-
  public:
   enum InjectedFieldID {
     ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
--- a/src/hotspot/share/classfile/javaClasses.inline.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/javaClasses.inline.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -26,6 +26,7 @@
 #define SHARE_VM_CLASSFILE_JAVACLASSES_INLINE_HPP
 
 #include "classfile/javaClasses.hpp"
+#include "oops/access.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "oops/oopsHierarchy.hpp"
 
@@ -53,6 +54,11 @@
   assert(is_instance(java_string), "must be java_string");
   return (typeArrayOop) java_string->obj_field(value_offset);
 }
+typeArrayOop java_lang_String::value_no_keepalive(oop java_string) {
+  assert(initialized && (value_offset > 0), "Must be initialized");
+  assert(is_instance(java_string), "must be java_string");
+  return (typeArrayOop) java_string->obj_field_access<AS_NO_KEEPALIVE>(value_offset);
+}
 unsigned int java_lang_String::hash(oop java_string) {
   assert(initialized && (hash_offset > 0), "Must be initialized");
   assert(is_instance(java_string), "must be java_string");
@@ -68,11 +74,11 @@
 int java_lang_String::length(oop java_string) {
   assert(initialized, "Must be initialized");
   assert(is_instance(java_string), "must be java_string");
-  typeArrayOop value_array = ((typeArrayOop)java_string->obj_field(value_offset));
-  if (value_array == NULL) {
+  typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
+  if (value == NULL) {
     return 0;
   }
-  int arr_length = value_array->length();
+  int arr_length = value->length();
   if (!is_latin1(java_string)) {
     assert((arr_length & 1) == 0, "should be even for UTF16 string");
     arr_length >>= 1; // convert number of bytes to number of elements
--- a/src/hotspot/share/classfile/stringTable.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/stringTable.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -35,6 +35,7 @@
 #include "memory/filemap.hpp"
 #include "memory/metaspaceShared.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/access.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/atomic.hpp"
 #include "runtime/mutexLocker.hpp"
@@ -43,7 +44,6 @@
 #include "utilities/macros.hpp"
 #if INCLUDE_ALL_GCS
 #include "gc/g1/g1CollectedHeap.hpp"
-#include "gc/g1/g1SATBCardTableModRefBS.hpp"
 #include "gc/g1/g1StringDedup.hpp"
 #endif
 
@@ -124,6 +124,22 @@
   }
 }
 
+oop StringTable::string_object(HashtableEntry<oop, mtSymbol>* entry) {
+  return RootAccess<ON_PHANTOM_OOP_REF>::oop_load(entry->literal_addr());
+}
+
+oop StringTable::string_object_no_keepalive(HashtableEntry<oop, mtSymbol>* entry) {
+  // The AS_NO_KEEPALIVE peeks at the oop without keeping it alive.
+  // This is *very dangerous* in general but is okay in this specific
+  // case. The subsequent oop_load keeps the oop alive if it it matched
+  // the jchar* string.
+  return RootAccess<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>::oop_load(entry->literal_addr());
+}
+
+void StringTable::set_string_object(HashtableEntry<oop, mtSymbol>* entry, oop string) {
+  RootAccess<ON_PHANTOM_OOP_REF>::oop_store(entry->literal_addr(), string);
+}
+
 oop StringTable::lookup_shared(jchar* name, int len, unsigned int hash) {
   assert(hash == java_lang_String::hash_code(name, len),
          "hash must be computed using java_lang_String::hash_code");
@@ -131,13 +147,16 @@
 }
 
 oop StringTable::lookup_in_main_table(int index, jchar* name,
-                                int len, unsigned int hash) {
+                                      int len, unsigned int hash) {
   int count = 0;
   for (HashtableEntry<oop, mtSymbol>* l = bucket(index); l != NULL; l = l->next()) {
     count++;
     if (l->hash() == hash) {
-      if (java_lang_String::equals(l->literal(), name, len)) {
-        return l->literal();
+      if (java_lang_String::equals(string_object_no_keepalive(l), name, len)) {
+        // We must perform a new load with string_object() that keeps the string
+        // alive as we must expose the oop as strongly reachable when exiting
+        // this context, in case the oop gets published.
+        return string_object(l);
       }
     }
   }
@@ -192,18 +211,6 @@
   return lookup(chars, length);
 }
 
-// Tell the GC that this string was looked up in the StringTable.
-static void ensure_string_alive(oop string) {
-  // A lookup in the StringTable could return an object that was previously
-  // considered dead. The SATB part of G1 needs to get notified about this
-  // potential resurrection, otherwise the marking might not find the object.
-#if INCLUDE_ALL_GCS
-  if (UseG1GC && string != NULL) {
-    G1SATBCardTableModRefBS::enqueue(string);
-  }
-#endif
-}
-
 oop StringTable::lookup(jchar* name, int len) {
   // shared table always uses java_lang_String::hash_code
   unsigned int hash = java_lang_String::hash_code(name, len);
@@ -217,8 +224,6 @@
   int index = the_table()->hash_to_index(hash);
   string = the_table()->lookup_in_main_table(index, name, len, hash);
 
-  ensure_string_alive(string);
-
   return string;
 }
 
@@ -238,9 +243,6 @@
 
   // Found
   if (found_string != NULL) {
-    if (found_string != string_or_null()) {
-      ensure_string_alive(found_string);
-    }
     return found_string;
   }
 
@@ -276,10 +278,6 @@
                                   hashValue, CHECK_NULL);
   }
 
-  if (added_or_found != string()) {
-    ensure_string_alive(added_or_found);
-  }
-
   return added_or_found;
 }
 
@@ -388,9 +386,9 @@
     while (entry != NULL) {
       assert(!entry->is_shared(), "CDS not used for the StringTable");
 
-      if (is_alive->do_object_b(entry->literal())) {
+      if (is_alive->do_object_b(string_object_no_keepalive(entry))) {
         if (f != NULL) {
-          f->do_oop((oop*)entry->literal_addr());
+          f->do_oop(entry->literal_addr());
         }
         p = entry->next_addr();
       } else {
@@ -429,7 +427,7 @@
   for (int i = 0; i < the_table()->table_size(); ++i) {
     HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i);
     for ( ; p != NULL; p = p->next()) {
-      oop s = p->literal();
+      oop s = string_object_no_keepalive(p);
       guarantee(s != NULL, "interned string is NULL");
       unsigned int h = hash_string(s);
       guarantee(p->hash() == h, "broken hash in string table entry");
@@ -448,10 +446,10 @@
     for (int i = 0; i < the_table()->table_size(); ++i) {
       HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i);
       for ( ; p != NULL; p = p->next()) {
-        oop s = p->literal();
-        typeArrayOop value  = java_lang_String::value(s);
-        int          length = java_lang_String::length(s);
-        bool      is_latin1 = java_lang_String::is_latin1(s);
+        oop s = string_object_no_keepalive(p);
+        typeArrayOop value     = java_lang_String::value_no_keepalive(s);
+        int          length    = java_lang_String::length(s);
+        bool         is_latin1 = java_lang_String::is_latin1(s);
 
         if (length <= 0) {
           st->print("%d: ", length);
@@ -484,8 +482,8 @@
                                       HashtableEntry<oop, mtSymbol>* e_ptr2) {
   // These entries are sanity checked by verify_and_compare_entries()
   // before this function is called.
-  oop str1 = e_ptr1->literal();
-  oop str2 = e_ptr2->literal();
+  oop str1 = string_object_no_keepalive(e_ptr1);
+  oop str2 = string_object_no_keepalive(e_ptr2);
 
   if (str1 == str2) {
     tty->print_cr("ERROR: identical oop values (0x" PTR_FORMAT ") "
@@ -505,12 +503,12 @@
 }
 
 StringTable::VerifyRetTypes StringTable::verify_entry(int bkt, int e_cnt,
-                                      HashtableEntry<oop, mtSymbol>* e_ptr,
-                                      StringTable::VerifyMesgModes mesg_mode) {
+                                                      HashtableEntry<oop, mtSymbol>* e_ptr,
+                                                      StringTable::VerifyMesgModes mesg_mode) {
 
   VerifyRetTypes ret = _verify_pass;  // be optimistic
 
-  oop str = e_ptr->literal();
+  oop str = string_object_no_keepalive(e_ptr);
   if (str == NULL) {
     if (mesg_mode == _verify_with_mesgs) {
       tty->print_cr("ERROR: NULL oop value in entry @ bucket[%d][%d]", bkt,
@@ -684,7 +682,7 @@
   assert(DumpSharedSpaces, "this function is only used with -Xshare:dump");
 
   oop new_s = NULL;
-  typeArrayOop v = java_lang_String::value(s);
+  typeArrayOop v = java_lang_String::value_no_keepalive(s);
   typeArrayOop new_v = (typeArrayOop)MetaspaceShared::archive_heap_object(v, THREAD);
   if (new_v == NULL) {
     return NULL;
@@ -708,7 +706,7 @@
   for (int i = 0; i < the_table()->table_size(); ++i) {
     HashtableEntry<oop, mtSymbol>* bucket = the_table()->bucket(i);
     for ( ; bucket != NULL; bucket = bucket->next()) {
-      oop s = bucket->literal();
+      oop s = string_object_no_keepalive(bucket);
       unsigned int hash = java_lang_String::hash_code(s);
       if (hash == 0) {
         continue;
@@ -721,7 +719,7 @@
       }
 
       // set the archived string in bucket
-      bucket->set_literal(new_s);
+      set_string_object(bucket, new_s);
 
       // add to the compact table
       writer->add(hash, new_s);
@@ -763,4 +761,3 @@
   _shared_table.oops_do(f);
 }
 #endif //INCLUDE_CDS_JAVA_HEAP
-
--- a/src/hotspot/share/classfile/stringTable.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/stringTable.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -76,6 +76,13 @@
   static unsigned int hash_string(oop string);
   static unsigned int alt_hash_string(const jchar* s, int len);
 
+  // Accessors for the string roots in the hashtable entries.
+  // Use string_object_no_keepalive() only when the value is not returned
+  // outside of a scope where a thread transition is possible.
+  static oop string_object(HashtableEntry<oop, mtSymbol>* entry);
+  static oop string_object_no_keepalive(HashtableEntry<oop, mtSymbol>* entry);
+  static void set_string_object(HashtableEntry<oop, mtSymbol>* entry, oop string);
+
   StringTable() : RehashableHashtable<oop, mtSymbol>((int)StringTableSize,
                               sizeof (HashtableEntry<oop, mtSymbol>)) {}
 
--- a/src/hotspot/share/classfile/systemDictionary.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/systemDictionary.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -173,6 +173,7 @@
   do_klass(VolatileCallSite_klass,                      java_lang_invoke_VolatileCallSite,         Pre                 ) \
   /* Note: MethodHandle must be first, and VolatileCallSite last in group */                                             \
                                                                                                                          \
+  do_klass(AssertionStatusDirectives_klass,             java_lang_AssertionStatusDirectives,       Pre                 ) \
   do_klass(StringBuffer_klass,                          java_lang_StringBuffer,                    Pre                 ) \
   do_klass(StringBuilder_klass,                         java_lang_StringBuilder,                   Pre                 ) \
   do_klass(internal_Unsafe_klass,                       jdk_internal_misc_Unsafe,                  Pre                 ) \
@@ -654,6 +655,12 @@
   static bool is_platform_class_loader(oop class_loader);
   static void clear_invoke_method_table();
 
+  // Returns TRUE if the method is a non-public member of class java.lang.Object.
+  static bool is_nonpublic_Object_method(Method* m) {
+    assert(m != NULL, "Unexpected NULL Method*");
+    return !m->is_public() && m->method_holder() == SystemDictionary::Object_klass();
+  }
+
 protected:
   static InstanceKlass* find_shared_class(Symbol* class_name);
 
--- a/src/hotspot/share/classfile/vmSymbols.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/classfile/vmSymbols.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -251,7 +251,6 @@
   template(compiledLambdaForm_name,                   "<compiledLambdaForm>")  /*fake name*/      \
   template(star_name,                                 "*") /*not really a name*/                  \
   template(invoke_name,                               "invoke")                                   \
-  template(override_name,                             "override")                                 \
   template(parameterTypes_name,                       "parameterTypes")                           \
   template(returnType_name,                           "returnType")                               \
   template(signature_name,                            "signature")                                \
@@ -265,7 +264,6 @@
   template(parameter_annotations_name,                "parameterAnnotations")                     \
   template(annotation_default_name,                   "annotationDefault")                        \
   template(reflect_ConstantPool,                      "jdk/internal/reflect/ConstantPool")        \
-  template(ConstantPool_name,                         "constantPoolOop")                          \
   template(reflect_UnsafeStaticFieldAccessorImpl,     "jdk/internal/reflect/UnsafeStaticFieldAccessorImpl")\
   template(base_name,                                 "base")                                     \
   /* Type Annotations (JDK 8 and above) */                                                        \
@@ -341,8 +339,6 @@
   template(stillborn_name,                            "stillborn")                                \
   template(group_name,                                "group")                                    \
   template(daemon_name,                               "daemon")                                   \
-  template(eetop_name,                                "eetop")                                    \
-  template(thread_status_name,                        "threadStatus")                             \
   template(run_method_name,                           "run")                                      \
   template(exit_method_name,                          "exit")                                     \
   template(add_method_name,                           "add")                                      \
@@ -376,34 +372,21 @@
   template(fillInStackTrace_name,                     "fillInStackTrace")                         \
   template(getCause_name,                             "getCause")                                 \
   template(initCause_name,                            "initCause")                                \
-  template(depth_name,                                "depth")                                    \
   template(setProperty_name,                          "setProperty")                              \
   template(getProperty_name,                          "getProperty")                              \
   template(context_name,                              "context")                                  \
-  template(privilegedContext_name,                    "privilegedContext")                        \
   template(contextClassLoader_name,                   "contextClassLoader")                       \
   template(inheritedAccessControlContext_name,        "inheritedAccessControlContext")            \
-  template(isPrivileged_name,                         "isPrivileged")                             \
-  template(isAuthorized_name,                         "isAuthorized")                             \
   template(getClassContext_name,                      "getClassContext")                          \
   template(wait_name,                                 "wait")                                     \
   template(checkPackageAccess_name,                   "checkPackageAccess")                       \
-  template(stackSize_name,                            "stackSize")                                \
-  template(thread_id_name,                            "tid")                                      \
   template(newInstance0_name,                         "newInstance0")                             \
-  template(limit_name,                                "limit")                                    \
-  template(member_name,                               "member")                                   \
   template(forName_name,                              "forName")                                  \
   template(forName0_name,                             "forName0")                                 \
   template(isJavaIdentifierStart_name,                "isJavaIdentifierStart")                    \
   template(isJavaIdentifierPart_name,                 "isJavaIdentifierPart")                     \
-  template(exclusive_owner_thread_name,               "exclusiveOwnerThread")                     \
-  template(park_blocker_name,                         "parkBlocker")                              \
-  template(park_event_name,                           "nativeParkEventPointer")                   \
   template(cache_field_name,                          "cache")                                    \
   template(value_name,                                "value")                                    \
-  template(hash_name,                                 "hash")                                     \
-  template(coder_name,                                "coder")                                    \
   template(compact_strings_name,                      "COMPACT_STRINGS")                          \
   template(numberOfLeadingZeros_name,                 "numberOfLeadingZeros")                     \
   template(numberOfTrailingZeros_name,                "numberOfTrailingZeros")                    \
@@ -420,27 +403,17 @@
   template(method_name,                               "method")                                   \
   template(vmindex_name,                              "vmindex")                                  \
   template(vmcount_name,                              "vmcount")                                  \
-  template(vmentry_name,                              "vmentry")                                  \
   template(flags_name,                                "flags")                                    \
-  template(rtype_name,                                "rtype")                                    \
-  template(ptypes_name,                               "ptypes")                                   \
-  template(form_name,                                 "form")                                     \
   template(basicType_name,                            "basicType")                                \
   template(append_name,                               "append")                                   \
   template(klass_name,                                "klass")                                    \
   template(array_klass_name,                          "array_klass")                              \
-  template(memberName_name,                           "memberName")                               \
   template(mid_name,                                  "mid")                                      \
   template(cpref_name,                                "cpref")                                    \
   template(version_name,                              "version")                                  \
-  template(bci_name,                                  "bci")                                      \
   template(methodName_name,                           "methodName")                               \
   template(fileName_name,                             "fileName")                                 \
   template(lineNumber_name,                           "lineNumber")                               \
-  template(monitors_name,                             "monitors")                                 \
-  template(locals_name,                               "locals")                                   \
-  template(operands_name,                             "operands")                                 \
-  template(mode_name,                                 "mode")                                     \
   template(oop_size_name,                             "oop_size")                                 \
   template(static_oop_field_count_name,               "static_oop_field_count")                   \
   template(protection_domain_name,                    "protection_domain")                        \
@@ -448,9 +421,11 @@
   template(loader_data_name,                          "loader_data")                              \
   template(vmdependencies_name,                       "vmdependencies")                           \
   template(loader_name,                               "loader")                                   \
-  template(module_name,                               "module")                                   \
   template(getModule_name,                            "getModule")                                \
   template(input_stream_void_signature,               "(Ljava/io/InputStream;)V")                 \
+  template(input_stream_signature,                    "Ljava/io/InputStream;")                    \
+  template(print_stream_signature,                    "Ljava/io/PrintStream;")                    \
+  template(security_manager_signature,                "Ljava/lang/SecurityManager;")              \
   template(definePackage_name,                        "definePackage")                            \
   template(definePackage_signature,                   "(Ljava/lang/String;Ljava/lang/Module;)Ljava/lang/Package;") \
   template(defineOrCheckPackage_name,                 "defineOrCheckPackage")                     \
@@ -499,6 +474,7 @@
   template(short_signature,                           "S")                                        \
   template(bool_signature,                            "Z")                                        \
   template(void_signature,                            "V")                                        \
+  template(bool_array_signature,                      "[Z")                                       \
   template(byte_array_signature,                      "[B")                                       \
   template(char_array_signature,                      "[C")                                       \
   template(int_array_signature,                       "[I")                                       \
@@ -553,6 +529,7 @@
   template(object_array_signature,                    "[Ljava/lang/Object;")                                      \
   template(class_signature,                           "Ljava/lang/Class;")                                        \
   template(string_signature,                          "Ljava/lang/String;")                                       \
+  template(string_array_signature,                    "[Ljava/lang/String;")                                      \
   template(reference_signature,                       "Ljava/lang/ref/Reference;")                                \
   template(sun_misc_Cleaner_signature,                "Lsun/misc/Cleaner;")                                       \
   template(executable_signature,                      "Ljava/lang/reflect/Executable;")                           \
@@ -579,12 +556,6 @@
   /* used by ClassFormatError when class name is not known yet */                                                 \
   template(unknown_class_name,                        "<Unknown>")                                                \
                                                                                                                   \
-  /* used to identify class loaders handling parallel class loading */                                            \
-  template(parallelCapable_name,                      "parallelLockMap")                                          \
-                                                                                                                  \
-  /* used to return a class loader's unnamed module */                                                            \
-  template(unnamedModule_name,                        "unnamedModule")                                            \
-                                                                                                                  \
   /* JVM monitoring and management support */                                                                     \
   template(java_lang_StackTraceElement_array,          "[Ljava/lang/StackTraceElement;")                          \
   template(java_lang_management_ThreadState,           "java/lang/management/ThreadState")                        \
@@ -997,8 +968,8 @@
    do_name(     montgomerySquare_name,                             "implMontgomerySquare")                              \
    do_signature(montgomerySquare_signature,                        "([I[IIJ[I)[I")                                      \
                                                                                                                         \
-  do_class(java_util_ArraysSupport, "java/util/ArraysSupport")                                                          \
-  do_intrinsic(_vectorizedMismatch, java_util_ArraysSupport, vectorizedMismatch_name, vectorizedMismatch_signature, F_S)\
+  do_class(jdk_internal_util_ArraysSupport, "jdk/internal/util/ArraysSupport")                                                          \
+  do_intrinsic(_vectorizedMismatch, jdk_internal_util_ArraysSupport, vectorizedMismatch_name, vectorizedMismatch_signature, F_S)\
    do_name(vectorizedMismatch_name, "vectorizedMismatch")                                                               \
    do_signature(vectorizedMismatch_signature, "(Ljava/lang/Object;JLjava/lang/Object;JII)I")                            \
                                                                                                                         \
--- a/src/hotspot/share/code/compiledIC.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/code/compiledIC.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -344,6 +344,7 @@
   // Code
   static address emit_to_interp_stub(CodeBuffer &cbuf, address mark = NULL);
   static int to_interp_stub_size();
+  static int to_trampoline_stub_size();
   static int reloc_to_interp_stub();
   static void emit_to_aot_stub(CodeBuffer &cbuf, address mark = NULL);
   static int to_aot_stub_size();
--- a/src/hotspot/share/code/nmethod.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/code/nmethod.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1485,16 +1485,18 @@
 
 bool nmethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) {
   // Compiled code
-  {
-  RelocIterator iter(this, low_boundary);
-  while (iter.next()) {
-    if (iter.type() == relocInfo::oop_type) {
-      if (unload_if_dead_at(&iter, is_alive, unloading_occurred)) {
-        return true;
+
+  // Prevent extra code cache walk for platforms that don't have immediate oops.
+  if (relocInfo::mustIterateImmediateOopsInCode()) {
+    RelocIterator iter(this, low_boundary);
+    while (iter.next()) {
+      if (iter.type() == relocInfo::oop_type) {
+        if (unload_if_dead_at(&iter, is_alive, unloading_occurred)) {
+          return true;
+        }
       }
     }
   }
-  }
 
   return do_unloading_scopes(is_alive, unloading_occurred);
 }
@@ -1584,18 +1586,21 @@
     // (See comment above.)
   }
 
-  RelocIterator iter(this, low_boundary);
+  // Prevent extra code cache walk for platforms that don't have immediate oops.
+  if (relocInfo::mustIterateImmediateOopsInCode()) {
+    RelocIterator iter(this, low_boundary);
 
-  while (iter.next()) {
-    if (iter.type() == relocInfo::oop_type ) {
-      oop_Relocation* r = iter.oop_reloc();
-      // In this loop, we must only follow those oops directly embedded in
-      // the code.  Other oops (oop_index>0) are seen as part of scopes_oops.
-      assert(1 == (r->oop_is_immediate()) +
-                   (r->oop_addr() >= oops_begin() && r->oop_addr() < oops_end()),
-             "oop must be found in exactly one place");
-      if (r->oop_is_immediate() && r->oop_value() != NULL) {
-        f->do_oop(r->oop_addr());
+    while (iter.next()) {
+      if (iter.type() == relocInfo::oop_type ) {
+        oop_Relocation* r = iter.oop_reloc();
+        // In this loop, we must only follow those oops directly embedded in
+        // the code.  Other oops (oop_index>0) are seen as part of scopes_oops.
+        assert(1 == (r->oop_is_immediate()) +
+               (r->oop_addr() >= oops_begin() && r->oop_addr() < oops_end()),
+               "oop must be found in exactly one place");
+        if (r->oop_is_immediate() && r->oop_value() != NULL) {
+          f->do_oop(r->oop_addr());
+        }
       }
     }
   }
@@ -1620,7 +1625,7 @@
   assert(nmethod::oops_do_marking_is_active(), "oops_do_marking_prologue must be called");
   if (_oops_do_mark_link == NULL) {
     // Claim this nmethod for this thread to mark.
-    if (Atomic::cmpxchg(NMETHOD_SENTINEL, &_oops_do_mark_link, (nmethod*)NULL) == NULL) {
+    if (Atomic::replace_if_null(NMETHOD_SENTINEL, &_oops_do_mark_link)) {
       // Atomically append this nmethod (now claimed) to the head of the list:
       nmethod* observed_mark_nmethods = _oops_do_mark_nmethods;
       for (;;) {
--- a/src/hotspot/share/code/relocInfo.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/code/relocInfo.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -910,6 +910,10 @@
   }
   // an oop in the instruction stream
   static RelocationHolder spec_for_immediate() {
+    // If no immediate oops are generated, we can skip some walks over nmethods.
+    // Assert that they don't get generated accidently!
+    assert(relocInfo::mustIterateImmediateOopsInCode(),
+           "Must return true so we will search for oops as roots etc. in the code.");
     const int oop_index = 0;
     const int offset    = 0;    // if you want an offset, use the oop pool
     RelocationHolder rh = newHolder();
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -445,9 +445,7 @@
   assert_heap_not_locked_and_not_at_safepoint();
   assert(!is_humongous(word_size), "we do not allow humongous TLABs");
 
-  uint dummy_gc_count_before;
-  uint dummy_gclocker_retry_count = 0;
-  return attempt_allocation(word_size, &dummy_gc_count_before, &dummy_gclocker_retry_count);
+  return attempt_allocation(word_size);
 }
 
 HeapWord*
@@ -455,62 +453,16 @@
                               bool*  gc_overhead_limit_was_exceeded) {
   assert_heap_not_locked_and_not_at_safepoint();
 
-  // Loop until the allocation is satisfied, or unsatisfied after GC.
-  for (uint try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) {
-    uint gc_count_before;
-
-    HeapWord* result = NULL;
-    if (!is_humongous(word_size)) {
-      result = attempt_allocation(word_size, &gc_count_before, &gclocker_retry_count);
-    } else {
-      result = attempt_allocation_humongous(word_size, &gc_count_before, &gclocker_retry_count);
-    }
-    if (result != NULL) {
-      return result;
-    }
-
-    // Create the garbage collection operation...
-    VM_G1CollectForAllocation op(gc_count_before, word_size);
-    op.set_allocation_context(AllocationContext::current());
-
-    // ...and get the VM thread to execute it.
-    VMThread::execute(&op);
-
-    if (op.prologue_succeeded() && op.pause_succeeded()) {
-      // If the operation was successful we'll return the result even
-      // if it is NULL. If the allocation attempt failed immediately
-      // after a Full GC, it's unlikely we'll be able to allocate now.
-      HeapWord* result = op.result();
-      if (result != NULL && !is_humongous(word_size)) {
-        // Allocations that take place on VM operations do not do any
-        // card dirtying and we have to do it here. We only have to do
-        // this for non-humongous allocations, though.
-        dirty_young_block(result, word_size);
-      }
-      return result;
-    } else {
-      if (gclocker_retry_count > GCLockerRetryAllocationCount) {
-        return NULL;
-      }
-      assert(op.result() == NULL,
-             "the result should be NULL if the VM op did not succeed");
-    }
-
-    // Give a warning if we seem to be looping forever.
-    if ((QueuedAllocationWarningCount > 0) &&
-        (try_count % QueuedAllocationWarningCount == 0)) {
-      log_warning(gc)("G1CollectedHeap::mem_allocate retries %d times", try_count);
-    }
+  if (is_humongous(word_size)) {
+    return attempt_allocation_humongous(word_size);
   }
-
-  ShouldNotReachHere();
-  return NULL;
+  return attempt_allocation(word_size);
 }
 
 HeapWord* G1CollectedHeap::attempt_allocation_slow(size_t word_size,
-                                                   AllocationContext_t context,
-                                                   uint* gc_count_before_ret,
-                                                   uint* gclocker_retry_count_ret) {
+                                                   AllocationContext_t context) {
+  ResourceMark rm; // For retrieving the thread names in log messages.
+
   // Make sure you read the note in attempt_allocation_humongous().
 
   assert_heap_not_locked_and_not_at_safepoint();
@@ -525,7 +477,7 @@
   // fails to perform the allocation. b) is the only case when we'll
   // return NULL.
   HeapWord* result = NULL;
-  for (int try_count = 1; /* we'll return */; try_count += 1) {
+  for (uint try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) {
     bool should_try_gc;
     uint gc_count_before;
 
@@ -536,30 +488,23 @@
         return result;
       }
 
-      if (GCLocker::is_active_and_needs_gc()) {
-        if (g1_policy()->can_expand_young_list()) {
-          // No need for an ergo verbose message here,
-          // can_expand_young_list() does this when it returns true.
-          result = _allocator->attempt_allocation_force(word_size, context);
-          if (result != NULL) {
-            return result;
-          }
-        }
-        should_try_gc = false;
-      } else {
-        // The GCLocker may not be active but the GCLocker initiated
-        // GC may not yet have been performed (GCLocker::needs_gc()
-        // returns true). In this case we do not try this GC and
-        // wait until the GCLocker initiated GC is performed, and
-        // then retry the allocation.
-        if (GCLocker::needs_gc()) {
-          should_try_gc = false;
-        } else {
-          // Read the GC count while still holding the Heap_lock.
-          gc_count_before = total_collections();
-          should_try_gc = true;
+      // If the GCLocker is active and we are bound for a GC, try expanding young gen.
+      // This is different to when only GCLocker::needs_gc() is set: try to avoid
+      // waiting because the GCLocker is active to not wait too long.
+      if (GCLocker::is_active_and_needs_gc() && g1_policy()->can_expand_young_list()) {
+        // No need for an ergo message here, can_expand_young_list() does this when
+        // it returns true.
+        result = _allocator->attempt_allocation_force(word_size, context);
+        if (result != NULL) {
+          return result;
         }
       }
+      // Only try a GC if the GCLocker does not signal the need for a GC. Wait until
+      // the GCLocker initiated GC has been performed and then retry. This includes
+      // the case when the GC Locker is not active but has not been performed.
+      should_try_gc = !GCLocker::needs_gc();
+      // Read the GC count while still holding the Heap_lock.
+      gc_count_before = total_collections();
     }
 
     if (should_try_gc) {
@@ -568,28 +513,33 @@
                                    GCCause::_g1_inc_collection_pause);
       if (result != NULL) {
         assert(succeeded, "only way to get back a non-NULL result");
+        log_trace(gc, alloc)("%s: Successfully scheduled collection returning " PTR_FORMAT,
+                             Thread::current()->name(), p2i(result));
         return result;
       }
 
       if (succeeded) {
-        // If we get here we successfully scheduled a collection which
-        // failed to allocate. No point in trying to allocate
-        // further. We'll just return NULL.
-        MutexLockerEx x(Heap_lock);
-        *gc_count_before_ret = total_collections();
+        // We successfully scheduled a collection which failed to allocate. No
+        // point in trying to allocate further. We'll just return NULL.
+        log_trace(gc, alloc)("%s: Successfully scheduled collection failing to allocate "
+                             SIZE_FORMAT " words", Thread::current()->name(), word_size);
         return NULL;
       }
+      log_trace(gc, alloc)("%s: Unsuccessfully scheduled collection allocating " SIZE_FORMAT " words",
+                           Thread::current()->name(), word_size);
     } else {
-      if (*gclocker_retry_count_ret > GCLockerRetryAllocationCount) {
-        MutexLockerEx x(Heap_lock);
-        *gc_count_before_ret = total_collections();
+      // Failed to schedule a collection.
+      if (gclocker_retry_count > GCLockerRetryAllocationCount) {
+        log_warning(gc, alloc)("%s: Retried waiting for GCLocker too often allocating "
+                               SIZE_FORMAT " words", Thread::current()->name(), word_size);
         return NULL;
       }
+      log_trace(gc, alloc)("%s: Stall until clear", Thread::current()->name());
       // The GCLocker is either active or the GCLocker initiated
       // GC has not yet been performed. Stall until it is and
       // then retry the allocation.
       GCLocker::stall_until_clear();
-      (*gclocker_retry_count_ret) += 1;
+      gclocker_retry_count += 1;
     }
 
     // We can reach here if we were unsuccessful in scheduling a
@@ -600,6 +550,7 @@
     // first attempt (without holding the Heap_lock) here and the
     // follow-on attempt will be at the start of the next loop
     // iteration (after taking the Heap_lock).
+
     result = _allocator->attempt_allocation(word_size, context);
     if (result != NULL) {
       return result;
@@ -608,8 +559,8 @@
     // Give a warning if we seem to be looping forever.
     if ((QueuedAllocationWarningCount > 0) &&
         (try_count % QueuedAllocationWarningCount == 0)) {
-      log_warning(gc)("G1CollectedHeap::attempt_allocation_slow() "
-                      "retries %d times", try_count);
+      log_warning(gc, alloc)("%s:  Retried allocation %u times for " SIZE_FORMAT " words",
+                             Thread::current()->name(), try_count, word_size);
     }
   }
 
@@ -830,9 +781,7 @@
   }
 }
 
-inline HeapWord* G1CollectedHeap::attempt_allocation(size_t word_size,
-                                                     uint* gc_count_before_ret,
-                                                     uint* gclocker_retry_count_ret) {
+inline HeapWord* G1CollectedHeap::attempt_allocation(size_t word_size) {
   assert_heap_not_locked_and_not_at_safepoint();
   assert(!is_humongous(word_size), "attempt_allocation() should not "
          "be called for humongous allocation requests");
@@ -841,10 +790,7 @@
   HeapWord* result = _allocator->attempt_allocation(word_size, context);
 
   if (result == NULL) {
-    result = attempt_allocation_slow(word_size,
-                                     context,
-                                     gc_count_before_ret,
-                                     gclocker_retry_count_ret);
+    result = attempt_allocation_slow(word_size, context);
   }
   assert_heap_not_locked();
   if (result != NULL) {
@@ -925,9 +871,9 @@
   decrease_used(size_used);
 }
 
-HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size,
-                                                        uint* gc_count_before_ret,
-                                                        uint* gclocker_retry_count_ret) {
+HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size) {
+  ResourceMark rm; // For retrieving the thread names in log messages.
+
   // The structure of this method has a lot of similarities to
   // attempt_allocation_slow(). The reason these two were not merged
   // into a single one is that such a method would require several "if
@@ -958,10 +904,11 @@
   // fails to perform the allocation. b) is the only case when we'll
   // return NULL.
   HeapWord* result = NULL;
-  for (int try_count = 1; /* we'll return */; try_count += 1) {
+  for (uint try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) {
     bool should_try_gc;
     uint gc_count_before;
 
+
     {
       MutexLockerEx x(Heap_lock);
 
@@ -975,69 +922,63 @@
         return result;
       }
 
-      if (GCLocker::is_active_and_needs_gc()) {
-        should_try_gc = false;
-      } else {
-         // The GCLocker may not be active but the GCLocker initiated
-        // GC may not yet have been performed (GCLocker::needs_gc()
-        // returns true). In this case we do not try this GC and
-        // wait until the GCLocker initiated GC is performed, and
-        // then retry the allocation.
-        if (GCLocker::needs_gc()) {
-          should_try_gc = false;
-        } else {
-          // Read the GC count while still holding the Heap_lock.
-          gc_count_before = total_collections();
-          should_try_gc = true;
-        }
-      }
+      // Only try a GC if the GCLocker does not signal the need for a GC. Wait until
+      // the GCLocker initiated GC has been performed and then retry. This includes
+      // the case when the GC Locker is not active but has not been performed.
+      should_try_gc = !GCLocker::needs_gc();
+      // Read the GC count while still holding the Heap_lock.
+      gc_count_before = total_collections();
     }
 
     if (should_try_gc) {
-      // If we failed to allocate the humongous object, we should try to
-      // do a collection pause (if we're allowed) in case it reclaims
-      // enough space for the allocation to succeed after the pause.
-
       bool succeeded;
       result = do_collection_pause(word_size, gc_count_before, &succeeded,
                                    GCCause::_g1_humongous_allocation);
       if (result != NULL) {
         assert(succeeded, "only way to get back a non-NULL result");
+        log_trace(gc, alloc)("%s: Successfully scheduled collection returning " PTR_FORMAT,
+                             Thread::current()->name(), p2i(result));
         return result;
       }
 
       if (succeeded) {
-        // If we get here we successfully scheduled a collection which
-        // failed to allocate. No point in trying to allocate
-        // further. We'll just return NULL.
-        MutexLockerEx x(Heap_lock);
-        *gc_count_before_ret = total_collections();
+        // We successfully scheduled a collection which failed to allocate. No
+        // point in trying to allocate further. We'll just return NULL.
+        log_trace(gc, alloc)("%s: Successfully scheduled collection failing to allocate "
+                             SIZE_FORMAT " words", Thread::current()->name(), word_size);
         return NULL;
       }
+      log_trace(gc, alloc)("%s: Unsuccessfully scheduled collection allocating " SIZE_FORMAT "",
+                           Thread::current()->name(), word_size);
     } else {
-      if (*gclocker_retry_count_ret > GCLockerRetryAllocationCount) {
-        MutexLockerEx x(Heap_lock);
-        *gc_count_before_ret = total_collections();
+      // Failed to schedule a collection.
+      if (gclocker_retry_count > GCLockerRetryAllocationCount) {
+        log_warning(gc, alloc)("%s: Retried waiting for GCLocker too often allocating "
+                               SIZE_FORMAT " words", Thread::current()->name(), word_size);
         return NULL;
       }
+      log_trace(gc, alloc)("%s: Stall until clear", Thread::current()->name());
       // The GCLocker is either active or the GCLocker initiated
       // GC has not yet been performed. Stall until it is and
       // then retry the allocation.
       GCLocker::stall_until_clear();
-      (*gclocker_retry_count_ret) += 1;
+      gclocker_retry_count += 1;
     }
 
+
     // We can reach here if we were unsuccessful in scheduling a
     // collection (because another thread beat us to it) or if we were
     // stalled due to the GC locker. In either can we should retry the
     // allocation attempt in case another thread successfully
-    // performed a collection and reclaimed enough space.  Give a
-    // warning if we seem to be looping forever.
+    // performed a collection and reclaimed enough space.
+    // Humongous object allocation always needs a lock, so we wait for the retry
+    // in the next iteration of the loop, unlike for the regular iteration case.
+    // Give a warning if we seem to be looping forever.
 
     if ((QueuedAllocationWarningCount > 0) &&
         (try_count % QueuedAllocationWarningCount == 0)) {
-      log_warning(gc)("G1CollectedHeap::attempt_allocation_humongous() "
-                      "retries %d times", try_count);
+      log_warning(gc, alloc)("%s: Retried allocation %u times for " SIZE_FORMAT " words",
+                             Thread::current()->name(), try_count, word_size);
     }
   }
 
@@ -1339,7 +1280,6 @@
                                     context,
                                     expect_null_mutator_alloc_region);
   if (result != NULL) {
-    assert(*gc_succeeded, "sanity");
     return result;
   }
 
@@ -1349,7 +1289,6 @@
   // do something smarter than full collection to satisfy a failed alloc.)
   result = expand_and_allocate(word_size, context);
   if (result != NULL) {
-    assert(*gc_succeeded, "sanity");
     return result;
   }
 
@@ -1401,7 +1340,6 @@
                                             succeeded);
 
   if (result != NULL) {
-    assert(*succeeded, "sanity");
     return result;
   }
 
@@ -1412,7 +1350,6 @@
   // space available is large enough for the allocation, then a more
   // complete compaction phase than we've tried so far might be
   // appropriate.
-  assert(*succeeded, "sanity");
   return NULL;
 }
 
@@ -2147,7 +2084,7 @@
   // This notify_all() will ensure that a thread that called
   // System.gc() with (with ExplicitGCInvokesConcurrent set or not)
   // and it's waiting for a full GC to finish will be woken up. It is
-  // waiting in VM_G1IncCollectionPause::doit_epilogue().
+  // waiting in VM_G1CollectForAllocation::doit_epilogue().
   FullGCCount_lock->notify_all();
 }
 
@@ -2175,13 +2112,12 @@
       // Schedule an initial-mark evacuation pause that will start a
       // concurrent cycle. We're setting word_size to 0 which means that
       // we are not requesting a post-GC allocation.
-      VM_G1IncCollectionPause op(gc_count_before,
-                                 0,     /* word_size */
-                                 true,  /* should_initiate_conc_mark */
-                                 g1_policy()->max_pause_time_ms(),
-                                 cause);
-      op.set_allocation_context(AllocationContext::current());
-
+      VM_G1CollectForAllocation op(0,     /* word_size */
+                                   gc_count_before,
+                                   cause,
+                                   true,  /* should_initiate_conc_mark */
+                                   g1_policy()->max_pause_time_ms(),
+                                   AllocationContext::current());
       VMThread::execute(&op);
       if (!op.pause_succeeded()) {
         if (old_marking_count_before == _old_marking_cycles_started) {
@@ -2204,11 +2140,12 @@
 
         // Schedule a standard evacuation pause. We're setting word_size
         // to 0 which means that we are not requesting a post-GC allocation.
-        VM_G1IncCollectionPause op(gc_count_before,
-                                   0,     /* word_size */
-                                   false, /* should_initiate_conc_mark */
-                                   g1_policy()->max_pause_time_ms(),
-                                   cause);
+        VM_G1CollectForAllocation op(0,     /* word_size */
+                                     gc_count_before,
+                                     cause,
+                                     false, /* should_initiate_conc_mark */
+                                     g1_policy()->max_pause_time_ms(),
+                                     AllocationContext::current());
         VMThread::execute(&op);
       } else {
         // Schedule a Full GC.
@@ -2619,13 +2556,12 @@
                                                bool* succeeded,
                                                GCCause::Cause gc_cause) {
   assert_heap_not_locked_and_not_at_safepoint();
-  VM_G1IncCollectionPause op(gc_count_before,
-                             word_size,
-                             false, /* should_initiate_conc_mark */
-                             g1_policy()->max_pause_time_ms(),
-                             gc_cause);
-
-  op.set_allocation_context(AllocationContext::current());
+  VM_G1CollectForAllocation op(word_size,
+                               gc_count_before,
+                               gc_cause,
+                               false, /* should_initiate_conc_mark */
+                               g1_policy()->max_pause_time_ms(),
+                               AllocationContext::current());
   VMThread::execute(&op);
 
   HeapWord* result = op.result();
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -125,7 +125,6 @@
   friend class VM_CollectForMetadataAllocation;
   friend class VM_G1CollectForAllocation;
   friend class VM_G1CollectFull;
-  friend class VM_G1IncCollectionPause;
   friend class VMStructs;
   friend class MutatorAllocRegion;
   friend class G1FullCollector;
@@ -454,35 +453,20 @@
   virtual HeapWord* mem_allocate(size_t word_size,
                                  bool*  gc_overhead_limit_was_exceeded);
 
-  // The following three methods take a gc_count_before_ret
-  // parameter which is used to return the GC count if the method
-  // returns NULL. Given that we are required to read the GC count
-  // while holding the Heap_lock, and these paths will take the
-  // Heap_lock at some point, it's easier to get them to read the GC
-  // count while holding the Heap_lock before they return NULL instead
-  // of the caller (namely: mem_allocate()) having to also take the
-  // Heap_lock just to read the GC count.
-
   // First-level mutator allocation attempt: try to allocate out of
   // the mutator alloc region without taking the Heap_lock. This
   // should only be used for non-humongous allocations.
-  inline HeapWord* attempt_allocation(size_t word_size,
-                                      uint* gc_count_before_ret,
-                                      uint* gclocker_retry_count_ret);
+  inline HeapWord* attempt_allocation(size_t word_size);
 
   // Second-level mutator allocation attempt: take the Heap_lock and
   // retry the allocation attempt, potentially scheduling a GC
   // pause. This should only be used for non-humongous allocations.
   HeapWord* attempt_allocation_slow(size_t word_size,
-                                    AllocationContext_t context,
-                                    uint* gc_count_before_ret,
-                                    uint* gclocker_retry_count_ret);
+                                    AllocationContext_t context);
 
   // Takes the Heap_lock and attempts a humongous allocation. It can
   // potentially schedule a GC pause.
-  HeapWord* attempt_allocation_humongous(size_t word_size,
-                                         uint* gc_count_before_ret,
-                                         uint* gclocker_retry_count_ret);
+  HeapWord* attempt_allocation_humongous(size_t word_size);
 
   // Allocation attempt that should be called during safepoints (e.g.,
   // at the end of a successful GC). expect_null_mutator_alloc_region
@@ -1078,6 +1062,11 @@
     return _hrm.available() == 0;
   }
 
+  // Returns whether there are any regions left in the heap for allocation.
+  bool has_regions_left_for_allocation() const {
+    return !is_maximal_no_gc() || num_free_regions() != 0;
+  }
+
   // The current number of regions in the heap.
   uint num_regions() const { return _hrm.length(); }
 
--- a/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -33,6 +33,7 @@
 #include "gc/g1/heapRegion.inline.hpp"
 #include "gc/g1/heapRegionRemSet.hpp"
 #include "memory/iterator.inline.hpp"
+#include "oops/access.inline.hpp"
 #include "runtime/prefetch.inline.hpp"
 
 template <class T>
@@ -87,13 +88,13 @@
 
 template <class T>
 inline void G1CMOopClosure::do_oop_nv(T* p) {
-  oop obj = oopDesc::load_decode_heap_oop(p);
+  oop obj = RawAccess<MO_VOLATILE>::oop_load(p);
   _task->deal_with_reference(obj);
 }
 
 template <class T>
 inline void G1RootRegionScanClosure::do_oop_nv(T* p) {
-  T heap_oop = oopDesc::load_heap_oop(p);
+  T heap_oop = RawAccess<MO_VOLATILE>::oop_load(p);
   if (oopDesc::is_null(heap_oop)) {
     return;
   }
@@ -124,7 +125,7 @@
 
 template <class T>
 inline void G1ConcurrentRefineOopClosure::do_oop_nv(T* p) {
-  T o = oopDesc::load_heap_oop(p);
+  T o = RawAccess<MO_VOLATILE>::oop_load(p);
   if (oopDesc::is_null(o)) {
     return;
   }
--- a/src/hotspot/share/gc/g1/g1SATBCardTableModRefBS.inline.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1SATBCardTableModRefBS.inline.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,6 @@
 
 #include "gc/shared/accessBarrierSupport.inline.hpp"
 #include "gc/g1/g1SATBCardTableModRefBS.hpp"
-#include "oops/oop.inline.hpp"
 
 template <DecoratorSet decorators, typename T>
 inline void G1SATBCardTableModRefBS::write_ref_field_pre(T* field) {
--- a/src/hotspot/share/gc/g1/vm_operations_g1.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/g1/vm_operations_g1.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,34 +33,21 @@
 #include "gc/shared/isGCActiveMark.hpp"
 #include "runtime/interfaceSupport.hpp"
 
-VM_G1CollectForAllocation::VM_G1CollectForAllocation(uint gc_count_before,
-                                                     size_t word_size)
-  : VM_G1OperationWithAllocRequest(gc_count_before, word_size,
-                                   GCCause::_allocation_failure) {
-  guarantee(word_size != 0, "An allocation should always be requested with this operation.");
-}
-
-void VM_G1CollectForAllocation::doit() {
-  G1CollectedHeap* g1h = G1CollectedHeap::heap();
-  GCCauseSetter x(g1h, _gc_cause);
-
-  _result = g1h->satisfy_failed_allocation(_word_size, allocation_context(), &_pause_succeeded);
-  assert(_result == NULL || _pause_succeeded,
-         "if we get back a result, the pause should have succeeded");
-}
-
 void VM_G1CollectFull::doit() {
   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   GCCauseSetter x(g1h, _gc_cause);
   g1h->do_full_collection(false /* clear_all_soft_refs */);
 }
 
-VM_G1IncCollectionPause::VM_G1IncCollectionPause(uint           gc_count_before,
-                                                 size_t         word_size,
-                                                 bool           should_initiate_conc_mark,
-                                                 double         target_pause_time_ms,
-                                                 GCCause::Cause gc_cause)
-  : VM_G1OperationWithAllocRequest(gc_count_before, word_size, gc_cause),
+VM_G1CollectForAllocation::VM_G1CollectForAllocation(size_t         word_size,
+                                                     uint           gc_count_before,
+                                                     GCCause::Cause gc_cause,
+                                                     bool           should_initiate_conc_mark,
+                                                     double         target_pause_time_ms,
+                                                     AllocationContext_t allocation_context)
+  : VM_CollectForAllocation(word_size, gc_count_before, gc_cause),
+    _pause_succeeded(false),
+    _allocation_context(allocation_context),
     _should_initiate_conc_mark(should_initiate_conc_mark),
     _target_pause_time_ms(target_pause_time_ms),
     _should_retry_gc(false),
@@ -71,8 +58,8 @@
   _gc_cause = gc_cause;
 }
 
-bool VM_G1IncCollectionPause::doit_prologue() {
-  bool res = VM_G1OperationWithAllocRequest::doit_prologue();
+bool VM_G1CollectForAllocation::doit_prologue() {
+  bool res = VM_CollectForAllocation::doit_prologue();
   if (!res) {
     if (_should_initiate_conc_mark) {
       // The prologue can fail for a couple of reasons. The first is that another GC
@@ -87,7 +74,7 @@
   return res;
 }
 
-void VM_G1IncCollectionPause::doit() {
+void VM_G1CollectForAllocation::doit() {
   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   assert(!_should_initiate_conc_mark || g1h->should_do_concurrent_full_gc(_gc_cause),
       "only a GC locker, a System.gc(), stats update, whitebox, or a hum allocation induced GC should start a cycle");
@@ -95,7 +82,7 @@
   if (_word_size > 0) {
     // An allocation has been requested. So, try to do that first.
     _result = g1h->attempt_allocation_at_safepoint(_word_size,
-                                                   allocation_context(),
+                                                   _allocation_context,
                                                    false /* expect_null_cur_alloc_region */);
     if (_result != NULL) {
       // If we can successfully allocate before we actually do the
@@ -144,27 +131,38 @@
     }
   }
 
-  _pause_succeeded =
-    g1h->do_collection_pause_at_safepoint(_target_pause_time_ms);
-  if (_pause_succeeded && _word_size > 0) {
-    // An allocation had been requested.
-    _result = g1h->attempt_allocation_at_safepoint(_word_size,
-                                                   allocation_context(),
-                                                   true /* expect_null_cur_alloc_region */);
+  // Try a partial collection of some kind.
+  _pause_succeeded = g1h->do_collection_pause_at_safepoint(_target_pause_time_ms);
+
+  if (_pause_succeeded) {
+    if (_word_size > 0) {
+      // An allocation had been requested. Do it, eventually trying a stronger
+      // kind of GC.
+      _result = g1h->satisfy_failed_allocation(_word_size, _allocation_context, &_pause_succeeded);
+    } else {
+      bool should_upgrade_to_full = !g1h->should_do_concurrent_full_gc(_gc_cause) &&
+                                    !g1h->has_regions_left_for_allocation();
+      if (should_upgrade_to_full) {
+        // There has been a request to perform a GC to free some space. We have no
+        // information on how much memory has been asked for. In case there are
+        // absolutely no regions left to allocate into, do a maximally compacting full GC.
+        log_info(gc, ergo)("Attempting maximally compacting collection");
+        _pause_succeeded = g1h->do_full_collection(false, /* explicit gc */
+                                                   true   /* clear_all_soft_refs */);
+      }
+    }
+    guarantee(_pause_succeeded, "Elevated collections during the safepoint must always succeed.");
   } else {
     assert(_result == NULL, "invariant");
-    if (!_pause_succeeded) {
-      // Another possible reason reason for the pause to not be successful
-      // is that, again, the GC locker is active (and has become active
-      // since the prologue was executed). In this case we should retry
-      // the pause after waiting for the GC locker to become inactive.
-      _should_retry_gc = true;
-    }
+    // The only reason for the pause to not be successful is that, the GC locker is
+    // active (or has become active since the prologue was executed). In this case
+    // we should retry the pause after waiting for the GC locker to become inactive.
+    _should_retry_gc = true;
   }
 }
 
-void VM_G1IncCollectionPause::doit_epilogue() {
-  VM_G1OperationWithAllocRequest::doit_epilogue();
+void VM_G1CollectForAllocation::doit_epilogue() {
+  VM_CollectForAllocation::doit_epilogue();
 
   // If the pause was initiated by a System.gc() and
   // +ExplicitGCInvokesConcurrent, we have to wait here for the cycle
--- a/src/hotspot/share/gc/g1/vm_operations_g1.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/g1/vm_operations_g1.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,26 +32,8 @@
 // VM_operations for the G1 collector.
 // VM_GC_Operation:
 //   - VM_CGC_Operation
+//   - VM_G1CollectForAllocation
 //   - VM_G1CollectFull
-//   - VM_G1OperationWithAllocRequest
-//     - VM_G1CollectForAllocation
-//     - VM_G1IncCollectionPause
-
-class VM_G1OperationWithAllocRequest : public VM_CollectForAllocation {
-protected:
-  bool      _pause_succeeded;
-  AllocationContext_t _allocation_context;
-
-public:
-  VM_G1OperationWithAllocRequest(uint           gc_count_before,
-                                 size_t         word_size,
-                                 GCCause::Cause gc_cause)
-    : VM_CollectForAllocation(word_size, gc_count_before, gc_cause),
-      _pause_succeeded(false) {}
-  bool pause_succeeded() { return _pause_succeeded; }
-  void set_allocation_context(AllocationContext_t context) { _allocation_context = context; }
-  AllocationContext_t  allocation_context() { return _allocation_context; }
-};
 
 class VM_G1CollectFull: public VM_GC_Operation {
 public:
@@ -62,41 +44,35 @@
   virtual VMOp_Type type() const { return VMOp_G1CollectFull; }
   virtual void doit();
   virtual const char* name() const {
-    return "full garbage-first collection";
+    return "G1 Full collection";
   }
 };
 
-class VM_G1CollectForAllocation: public VM_G1OperationWithAllocRequest {
-public:
-  VM_G1CollectForAllocation(uint         gc_count_before,
-                            size_t       word_size);
-  virtual VMOp_Type type() const { return VMOp_G1CollectForAllocation; }
-  virtual void doit();
-  virtual const char* name() const {
-    return "garbage-first collection to satisfy allocation";
-  }
-};
+class VM_G1CollectForAllocation: public VM_CollectForAllocation {
+private:
+  bool      _pause_succeeded;
+  AllocationContext_t _allocation_context;
 
-class VM_G1IncCollectionPause: public VM_G1OperationWithAllocRequest {
-private:
   bool         _should_initiate_conc_mark;
   bool         _should_retry_gc;
   double       _target_pause_time_ms;
   uint         _old_marking_cycles_completed_before;
 public:
-  VM_G1IncCollectionPause(uint           gc_count_before,
-                          size_t         word_size,
-                          bool           should_initiate_conc_mark,
-                          double         target_pause_time_ms,
-                          GCCause::Cause gc_cause);
-  virtual VMOp_Type type() const { return VMOp_G1IncCollectionPause; }
+  VM_G1CollectForAllocation(size_t         word_size,
+                            uint           gc_count_before,
+                            GCCause::Cause gc_cause,
+                            bool           should_initiate_conc_mark,
+                            double         target_pause_time_ms,
+                            AllocationContext_t allocation_context);
+  virtual VMOp_Type type() const { return VMOp_G1CollectForAllocation; }
   virtual bool doit_prologue();
   virtual void doit();
   virtual void doit_epilogue();
   virtual const char* name() const {
-    return "garbage-first incremental collection pause";
+    return "G1 collect for allocation";
   }
   bool should_retry_gc() const { return _should_retry_gc; }
+  bool pause_succeeded() { return _pause_succeeded; }
 };
 
 // Concurrent GC stop-the-world operations such as remark and cleanup;
--- a/src/hotspot/share/gc/parallel/gcTaskThread.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/parallel/gcTaskThread.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -77,7 +77,7 @@
   if (_time_stamps == NULL) {
     // We allocate the _time_stamps array lazily since logging can be enabled dynamically
     GCTaskTimeStamp* time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries, mtGC);
-    if (Atomic::cmpxchg(time_stamps, &_time_stamps, (GCTaskTimeStamp*)NULL) != NULL) {
+    if (!Atomic::replace_if_null(time_stamps, &_time_stamps)) {
       // Someone already setup the time stamps
       FREE_C_HEAP_ARRAY(GCTaskTimeStamp, time_stamps);
     }
--- a/src/hotspot/share/gc/shared/barrierSet.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/gc/shared/barrierSet.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -147,9 +147,8 @@
   // 3) Provide specializations for BarrierSet::GetName and BarrierSet::GetType.
   template <DecoratorSet decorators, typename BarrierSetT>
   class AccessBarrier: protected RawAccessBarrier<decorators> {
-  protected:
+  private:
     typedef RawAccessBarrier<decorators> Raw;
-    typedef typename BarrierSetT::template AccessBarrier<decorators> CRTPAccessBarrier;
 
   public:
     // Primitive heap accesses. These accessors get resolved when
--- a/src/hotspot/share/include/jvm.h	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/include/jvm.h	Fri Feb 02 01:52:03 2018 +0000
@@ -317,23 +317,18 @@
 JNIEXPORT jobject JNICALL
 JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim);
 
-/*
- * java.lang.Class and java.lang.ClassLoader
- */
-
-#define JVM_CALLER_DEPTH -1
 
 /*
  * Returns the immediate caller class of the native method invoking
  * JVM_GetCallerClass.  The Method.invoke and other frames due to
  * reflection machinery are skipped.
  *
- * The depth parameter must be -1 (JVM_DEPTH). The caller is expected
- * to be marked with sun.reflect.CallerSensitive.  The JVM will throw
- * an error if it is not marked propertly.
+ * The caller is expected to be marked with
+ * jdk.internal.reflect.CallerSensitive. The JVM will throw an
+ * error if it is not marked properly.
  */
 JNIEXPORT jclass JNICALL
-JVM_GetCallerClass(JNIEnv *env, int depth);
+JVM_GetCallerClass(JNIEnv *env);
 
 
 /*
--- a/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -699,6 +699,7 @@
   // Estimate the number of static and aot call stubs that might be emitted.
   int static_call_stubs = 0;
   int aot_call_stubs = 0;
+  int trampoline_stubs = 0;
   objArrayOop sites = this->sites();
   for (int i = 0; i < sites->length(); i++) {
     oop site = sites->obj_at(i);
@@ -710,8 +711,18 @@
             JVMCI_ERROR_0("expected Integer id, got %s", id_obj->klass()->signature_name());
           }
           jint id = id_obj->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT));
-          if (id == INVOKESTATIC || id == INVOKESPECIAL) {
+          switch (id) {
+          case INVOKEINTERFACE:
+          case INVOKEVIRTUAL:
+            trampoline_stubs++;
+            break;
+          case INVOKESTATIC:
+          case INVOKESPECIAL:
             static_call_stubs++;
+            trampoline_stubs++;
+            break;
+          default:
+            break;
           }
         }
       }
@@ -726,6 +737,7 @@
     }
   }
   int size = static_call_stubs * CompiledStaticCall::to_interp_stub_size();
+  size += trampoline_stubs * CompiledStaticCall::to_trampoline_stub_size();
 #if INCLUDE_AOT
   size += aot_call_stubs * CompiledStaticCall::to_aot_stub_size();
 #endif
@@ -1171,7 +1183,7 @@
     }
 
     TRACE_jvmci_3("method call");
-    CodeInstaller::pd_relocate_JavaMethod(hotspot_method, pc_offset, CHECK);
+    CodeInstaller::pd_relocate_JavaMethod(buffer, hotspot_method, pc_offset, CHECK);
     if (_next_call_type == INVOKESTATIC || _next_call_type == INVOKESPECIAL) {
       // Need a static call stub for transitions from compiled to interpreted.
       CompiledStaticCall::emit_to_interp_stub(buffer, _instructions->start() + pc_offset);
@@ -1282,4 +1294,3 @@
     }
   }
 }
-
--- a/src/hotspot/share/jvmci/jvmciCodeInstaller.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/jvmci/jvmciCodeInstaller.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -185,7 +185,7 @@
   void pd_patch_MetaspaceConstant(int pc_offset, Handle constant, TRAPS);
   void pd_patch_DataSectionReference(int pc_offset, int data_offset, TRAPS);
   void pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, TRAPS);
-  void pd_relocate_JavaMethod(Handle method, jint pc_offset, TRAPS);
+  void pd_relocate_JavaMethod(CodeBuffer &cbuf, Handle method, jint pc_offset, TRAPS);
   void pd_relocate_poll(address pc, jint mark, TRAPS);
 
   objArrayOop sites() { return (objArrayOop) JNIHandles::resolve(_sites_handle); }
--- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -749,8 +749,13 @@
 C2V_END
 
 C2V_VMENTRY(jobject, getImplementor, (JNIEnv *, jobject, jobject jvmci_type))
-  InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type);
-  oop implementor = CompilerToVM::get_jvmci_type(klass->implementor(), CHECK_NULL);
+  Klass* klass = CompilerToVM::asKlass(jvmci_type);
+  if (!klass->is_interface()) {
+    THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
+        err_msg("Expected interface type, got %s", klass->external_name()));
+  }
+  InstanceKlass* iklass = InstanceKlass::cast(klass);
+  oop implementor = CompilerToVM::get_jvmci_type(iklass->implementor(), CHECK_NULL);
   return JNIHandles::make_local(THREAD, implementor);
 C2V_END
 
@@ -989,8 +994,12 @@
 C2V_END
 
 C2V_VMENTRY(jobject, getClassInitializer, (JNIEnv *, jobject, jobject jvmci_type))
-  InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type);
-  oop result = CompilerToVM::get_jvmci_method(klass->class_initializer(), CHECK_NULL);
+  Klass* klass = CompilerToVM::asKlass(jvmci_type);
+  if (!klass->is_instance_klass()) {
+    return NULL;
+  }
+  InstanceKlass* iklass = InstanceKlass::cast(klass);
+  oop result = CompilerToVM::get_jvmci_method(iklass->class_initializer(), CHECK_NULL);
   return JNIHandles::make_local(THREAD, result);
 C2V_END
 
--- a/src/hotspot/share/jvmci/jvmciJavaClasses.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/jvmci/jvmciJavaClasses.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -351,7 +351,7 @@
     static type name() {                                                                                       \
       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
       InstanceKlass* ik = klassName::klass();                                                                  \
-      address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
+      address addr = ik->static_field_addr(_##name##_offset);                                                  \
       oop result = HeapAccess<>::oop_load((HeapWord*)addr);                                                    \
       return type(result);                                                                                     \
     }                                                                                                          \
@@ -359,7 +359,7 @@
       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
       assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
       InstanceKlass* ik = klassName::klass();                                                                  \
-      address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
+      address addr = ik->static_field_addr(_##name##_offset);                                                  \
       HeapAccess<>::oop_store((HeapWord*)addr, x);                                                             \
     }
 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename)                                                     \
@@ -367,13 +367,13 @@
     static jtypename name() {                                                                                  \
       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
       InstanceKlass* ik = klassName::klass();                                                                  \
-      address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
+      address addr = ik->static_field_addr(_##name##_offset);                                                  \
       return HeapAccess<>::load((jtypename*)addr);                                                             \
     }                                                                                                          \
     static void set_##name(jtypename x) {                                                                      \
       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
       InstanceKlass* ik = klassName::klass();                                                                  \
-      address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
+      address addr = ik->static_field_addr(_##name##_offset);                                                  \
       HeapAccess<>::store((jtypename*)addr, x);                                                                \
     }
 
--- a/src/hotspot/share/oops/access.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/access.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -342,7 +342,7 @@
   template <DecoratorSet expected_mo_decorators>
   static void verify_primitive_decorators() {
     const DecoratorSet primitive_decorators = (AS_DECORATOR_MASK ^ AS_NO_KEEPALIVE) | IN_HEAP |
-                                               IN_HEAP_ARRAY | MO_DECORATOR_MASK;
+                                               IN_HEAP_ARRAY;
     verify_decorators<expected_mo_decorators | primitive_decorators>();
   }
 
@@ -350,7 +350,7 @@
   static void verify_oop_decorators() {
     const DecoratorSet oop_decorators = AS_DECORATOR_MASK | IN_DECORATOR_MASK |
                                         (ON_DECORATOR_MASK ^ ON_UNKNOWN_OOP_REF) | // no unknown oop refs outside of the heap
-                                        OOP_DECORATOR_MASK | MO_DECORATOR_MASK;
+                                        OOP_DECORATOR_MASK;
     verify_decorators<expected_mo_decorators | oop_decorators>();
   }
 
@@ -358,8 +358,7 @@
   static void verify_heap_oop_decorators() {
     const DecoratorSet heap_oop_decorators = AS_DECORATOR_MASK | ON_DECORATOR_MASK |
                                              OOP_DECORATOR_MASK | (IN_DECORATOR_MASK ^
-                                                                  (IN_ROOT ^ IN_CONCURRENT_ROOT)) | // no root accesses in the heap
-                                             MO_DECORATOR_MASK;
+                                                                   (IN_ROOT | IN_CONCURRENT_ROOT)); // no root accesses in the heap
     verify_decorators<expected_mo_decorators | heap_oop_decorators>();
   }
 
--- a/src/hotspot/share/oops/access.inline.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/access.inline.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -491,11 +491,12 @@
   // not possible.
   struct PreRuntimeDispatch: AllStatic {
     template<DecoratorSet decorators>
-    static bool can_hardwire_raw() {
-      return !HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value || // primitive access
-             !HasDecorator<decorators, INTERNAL_CONVERT_COMPRESSED_OOP>::value || // don't care about compressed oops (oop* address)
-             HasDecorator<decorators, INTERNAL_RT_USE_COMPRESSED_OOPS>::value; // we can infer we use compressed oops (narrowOop* address)
-    }
+    struct CanHardwireRaw: public IntegralConstant<
+      bool,
+      !HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value || // primitive access
+      !HasDecorator<decorators, INTERNAL_CONVERT_COMPRESSED_OOP>::value || // don't care about compressed oops (oop* address)
+      HasDecorator<decorators, INTERNAL_RT_USE_COMPRESSED_OOPS>::value> // we can infer we use compressed oops (narrowOop* address)
+    {};
 
     static const DecoratorSet convert_compressed_oops = INTERNAL_RT_USE_COMPRESSED_OOPS | INTERNAL_CONVERT_COMPRESSED_OOP;
 
@@ -507,16 +508,21 @@
 
     template <DecoratorSet decorators, typename T>
     inline static typename EnableIf<
-      HasDecorator<decorators, AS_RAW>::value>::type
+      HasDecorator<decorators, AS_RAW>::value && CanHardwireRaw<decorators>::value>::type
     store(void* addr, T value) {
       typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
-      if (can_hardwire_raw<decorators>()) {
-        if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
-          Raw::oop_store(addr, value);
-        } else {
-          Raw::store(addr, value);
-        }
-      } else if (UseCompressedOops) {
+      if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
+        Raw::oop_store(addr, value);
+      } else {
+        Raw::store(addr, value);
+      }
+    }
+
+    template <DecoratorSet decorators, typename T>
+    inline static typename EnableIf<
+      HasDecorator<decorators, AS_RAW>::value && !CanHardwireRaw<decorators>::value>::type
+    store(void* addr, T value) {
+      if (UseCompressedOops) {
         const DecoratorSet expanded_decorators = decorators | convert_compressed_oops;
         PreRuntimeDispatch::store<expanded_decorators>(addr, value);
       } else {
@@ -558,16 +564,21 @@
 
     template <DecoratorSet decorators, typename T>
     inline static typename EnableIf<
-      HasDecorator<decorators, AS_RAW>::value, T>::type
+      HasDecorator<decorators, AS_RAW>::value && CanHardwireRaw<decorators>::value, T>::type
     load(void* addr) {
       typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
-      if (can_hardwire_raw<decorators>()) {
-        if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
-          return Raw::template oop_load<T>(addr);
-        } else {
-          return Raw::template load<T>(addr);
-        }
-      } else if (UseCompressedOops) {
+      if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
+        return Raw::template oop_load<T>(addr);
+      } else {
+        return Raw::template load<T>(addr);
+      }
+    }
+
+    template <DecoratorSet decorators, typename T>
+    inline static typename EnableIf<
+      HasDecorator<decorators, AS_RAW>::value && !CanHardwireRaw<decorators>::value, T>::type
+    load(void* addr) {
+      if (UseCompressedOops) {
         const DecoratorSet expanded_decorators = decorators | convert_compressed_oops;
         return PreRuntimeDispatch::load<expanded_decorators, T>(addr);
       } else {
@@ -609,16 +620,21 @@
 
     template <DecoratorSet decorators, typename T>
     inline static typename EnableIf<
-      HasDecorator<decorators, AS_RAW>::value, T>::type
+      HasDecorator<decorators, AS_RAW>::value && CanHardwireRaw<decorators>::value, T>::type
     atomic_cmpxchg(T new_value, void* addr, T compare_value) {
       typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
-      if (can_hardwire_raw<decorators>()) {
-        if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
-          return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
-        } else {
-          return Raw::atomic_cmpxchg(new_value, addr, compare_value);
-        }
-      } else if (UseCompressedOops) {
+      if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
+        return Raw::oop_atomic_cmpxchg(new_value, addr, compare_value);
+      } else {
+        return Raw::atomic_cmpxchg(new_value, addr, compare_value);
+      }
+    }
+
+    template <DecoratorSet decorators, typename T>
+    inline static typename EnableIf<
+      HasDecorator<decorators, AS_RAW>::value && !CanHardwireRaw<decorators>::value, T>::type
+    atomic_cmpxchg(T new_value, void* addr, T compare_value) {
+      if (UseCompressedOops) {
         const DecoratorSet expanded_decorators = decorators | convert_compressed_oops;
         return PreRuntimeDispatch::atomic_cmpxchg<expanded_decorators>(new_value, addr, compare_value);
       } else {
@@ -661,16 +677,21 @@
 
     template <DecoratorSet decorators, typename T>
     inline static typename EnableIf<
-      HasDecorator<decorators, AS_RAW>::value, T>::type
+      HasDecorator<decorators, AS_RAW>::value && CanHardwireRaw<decorators>::value, T>::type
     atomic_xchg(T new_value, void* addr) {
       typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
-      if (can_hardwire_raw<decorators>()) {
-        if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
-          return Raw::oop_atomic_xchg(new_value, addr);
-        } else {
-          return Raw::atomic_xchg(new_value, addr);
-        }
-      } else if (UseCompressedOops) {
+      if (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value) {
+        return Raw::oop_atomic_xchg(new_value, addr);
+      } else {
+        return Raw::atomic_xchg(new_value, addr);
+      }
+    }
+
+    template <DecoratorSet decorators, typename T>
+    inline static typename EnableIf<
+      HasDecorator<decorators, AS_RAW>::value && !CanHardwireRaw<decorators>::value, T>::type
+    atomic_xchg(T new_value, void* addr) {
+      if (UseCompressedOops) {
         const DecoratorSet expanded_decorators = decorators | convert_compressed_oops;
         return PreRuntimeDispatch::atomic_xchg<expanded_decorators>(new_value, addr);
       } else {
@@ -798,6 +819,13 @@
   }
 
   template <DecoratorSet decorators>
+  inline void store_reduce_types(narrowOop* addr, narrowOop value) {
+    const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP |
+                                             INTERNAL_RT_USE_COMPRESSED_OOPS;
+    PreRuntimeDispatch::store<expanded_decorators>(addr, value);
+  }
+
+  template <DecoratorSet decorators>
   inline void store_reduce_types(HeapWord* addr, oop value) {
     const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP;
     PreRuntimeDispatch::store<expanded_decorators>(addr, value);
@@ -816,7 +844,16 @@
   }
 
   template <DecoratorSet decorators>
-  inline oop atomic_cmpxchg_reduce_types(oop new_value, HeapWord* addr, oop compare_value) {
+  inline narrowOop atomic_cmpxchg_reduce_types(narrowOop new_value, narrowOop* addr, narrowOop compare_value) {
+    const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP |
+                                             INTERNAL_RT_USE_COMPRESSED_OOPS;
+    return PreRuntimeDispatch::atomic_cmpxchg<expanded_decorators>(new_value, addr, compare_value);
+  }
+
+  template <DecoratorSet decorators>
+  inline oop atomic_cmpxchg_reduce_types(oop new_value,
+                                         HeapWord* addr,
+                                         oop compare_value) {
     const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP;
     return PreRuntimeDispatch::atomic_cmpxchg<expanded_decorators>(new_value, addr, compare_value);
   }
@@ -835,6 +872,13 @@
   }
 
   template <DecoratorSet decorators>
+  inline narrowOop atomic_xchg_reduce_types(narrowOop new_value, narrowOop* addr) {
+    const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP |
+                                             INTERNAL_RT_USE_COMPRESSED_OOPS;
+    return PreRuntimeDispatch::atomic_xchg<expanded_decorators>(new_value, addr);
+  }
+
+  template <DecoratorSet decorators>
   inline oop atomic_xchg_reduce_types(oop new_value, HeapWord* addr) {
     const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP;
     return PreRuntimeDispatch::atomic_xchg<expanded_decorators>(new_value, addr);
@@ -846,9 +890,10 @@
   }
 
   template <DecoratorSet decorators, typename T>
-  inline oop load_reduce_types(narrowOop* addr) {
-    const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP | INTERNAL_RT_USE_COMPRESSED_OOPS;
-    return PreRuntimeDispatch::load<expanded_decorators, oop>(addr);
+  inline typename OopOrNarrowOop<T>::type load_reduce_types(narrowOop* addr) {
+    const DecoratorSet expanded_decorators = decorators | INTERNAL_CONVERT_COMPRESSED_OOP |
+                                             INTERNAL_RT_USE_COMPRESSED_OOPS;
+    return PreRuntimeDispatch::load<expanded_decorators, typename OopOrNarrowOop<T>::type>(addr);
   }
 
   template <DecoratorSet decorators, typename T>
--- a/src/hotspot/share/oops/accessBackend.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/accessBackend.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
 #include "metaprogramming/conditional.hpp"
 #include "metaprogramming/enableIf.hpp"
 #include "metaprogramming/integralConstant.hpp"
+#include "metaprogramming/isSame.hpp"
 #include "utilities/debug.hpp"
 #include "utilities/globalDefinitions.hpp"
 
@@ -54,11 +55,11 @@
     BARRIER_CLONE
   };
 
-  template <DecoratorSet decorators>
+  template <DecoratorSet decorators, typename T>
   struct MustConvertCompressedOop: public IntegralConstant<bool,
     HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value &&
-    HasDecorator<decorators, INTERNAL_CONVERT_COMPRESSED_OOP>::value &&
-    HasDecorator<decorators, INTERNAL_RT_USE_COMPRESSED_OOPS>::value> {};
+    IsSame<typename HeapOopType<decorators>::type, narrowOop>::value &&
+    IsSame<T, oop>::value> {};
 
   // This metafunction returns an appropriate oop type if the value is oop-like
   // and otherwise returns the same type T.
@@ -172,13 +173,13 @@
   // Only encode if INTERNAL_VALUE_IS_OOP
   template <DecoratorSet idecorators, typename T>
   static inline typename EnableIf<
-    AccessInternal::MustConvertCompressedOop<idecorators>::value,
+    AccessInternal::MustConvertCompressedOop<idecorators, T>::value,
     typename HeapOopType<idecorators>::type>::type
   encode_internal(T value);
 
   template <DecoratorSet idecorators, typename T>
   static inline typename EnableIf<
-    !AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+    !AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
   encode_internal(T value) {
     return value;
   }
@@ -192,12 +193,12 @@
   // Only decode if INTERNAL_VALUE_IS_OOP
   template <DecoratorSet idecorators, typename T>
   static inline typename EnableIf<
-    AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+    AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
   decode_internal(typename HeapOopType<idecorators>::type value);
 
   template <DecoratorSet idecorators, typename T>
   static inline typename EnableIf<
-    !AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+    !AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
   decode_internal(T value) {
     return value;
   }
--- a/src/hotspot/share/oops/accessBackend.inline.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/accessBackend.inline.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@
 template <DecoratorSet decorators>
 template <DecoratorSet idecorators, typename T>
 inline typename EnableIf<
-  AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+  AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
 RawAccessBarrier<decorators>::decode_internal(typename HeapOopType<idecorators>::type value) {
   if (HasDecorator<decorators, OOP_NOT_NULL>::value) {
     return oopDesc::decode_heap_oop_not_null(value);
@@ -44,7 +44,7 @@
 template <DecoratorSet decorators>
 template <DecoratorSet idecorators, typename T>
 inline typename EnableIf<
-  AccessInternal::MustConvertCompressedOop<idecorators>::value,
+  AccessInternal::MustConvertCompressedOop<idecorators, T>::value,
   typename HeapOopType<idecorators>::type>::type
 RawAccessBarrier<decorators>::encode_internal(T value) {
   if (HasDecorator<decorators, OOP_NOT_NULL>::value) {
--- a/src/hotspot/share/oops/cpCache.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/cpCache.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -177,6 +177,7 @@
       // instruction somehow links to a non-interface method (in Object).
       // In that case, the method has no itable index and must be invoked as a virtual.
       // Set a flag to keep track of this corner case.
+      assert(method->is_public(), "Calling non-public method in Object with invokeinterface");
       change_to_virtual = true;
 
       // ...and fall through as if we were handling invokevirtual:
--- a/src/hotspot/share/oops/instanceKlass.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/instanceKlass.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2265,7 +2265,8 @@
 }
 
 address InstanceKlass::static_field_addr(int offset) {
-  return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop<intptr_t>(java_mirror()));
+  assert(offset >= InstanceMirrorKlass::offset_of_static_fields(), "has already been adjusted");
+  return (address)(offset + cast_from_oop<intptr_t>(java_mirror()));
 }
 
 
@@ -3421,6 +3422,15 @@
   }
 }
 
+oop InstanceKlass::klass_holder_phantom() {
+  oop* addr;
+  if (is_anonymous()) {
+    addr = _java_mirror.ptr_raw();
+  } else {
+    addr = &class_loader_data()->_class_loader;
+  }
+  return RootAccess<IN_CONCURRENT_ROOT | ON_PHANTOM_OOP_REF>::oop_load(addr);
+}
 
 #ifdef ASSERT
 void InstanceKlass::set_init_state(ClassState state) {
--- a/src/hotspot/share/oops/instanceKlass.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/instanceKlass.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -645,6 +645,11 @@
     return is_anonymous() ? java_mirror() : class_loader();
   }
 
+  // Load the klass_holder as a phantom. This is useful when a weak Klass
+  // pointer has been "peeked" and then must be kept alive before it may
+  // be used safely.
+  oop klass_holder_phantom();
+
   bool is_contended() const                {
     return (_misc_flags & _misc_is_contended) != 0;
   }
--- a/src/hotspot/share/oops/klassVtable.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/klassVtable.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -86,13 +86,14 @@
 
   GrowableArray<Method*> new_mirandas(20);
   // compute the number of mirandas methods that must be added to the end
-  get_mirandas(&new_mirandas, all_mirandas, super, methods, NULL, local_interfaces);
+  get_mirandas(&new_mirandas, all_mirandas, super, methods, NULL, local_interfaces,
+               class_flags.is_interface());
   *num_new_mirandas = new_mirandas.length();
 
   // Interfaces do not need interface methods in their vtables
   // This includes miranda methods and during later processing, default methods
   if (!class_flags.is_interface()) {
-    vtable_length += *num_new_mirandas * vtableEntry::size();
+     vtable_length += *num_new_mirandas * vtableEntry::size();
   }
 
   if (Universe::is_bootstrapping() && vtable_length == 0) {
@@ -454,8 +455,13 @@
     } else {
       super_method = method_at(i);
     }
-    // Check if method name matches
-    if (super_method->name() == name && super_method->signature() == signature) {
+    // Check if method name matches.  Ignore match if klass is an interface and the
+    // matching method is a non-public java.lang.Object method.  (See JVMS 5.4.3.4)
+    // This is safe because the method at this slot should never get invoked.
+    // (TBD: put in a method to throw NoSuchMethodError if this slot is ever used.)
+    if (super_method->name() == name && super_method->signature() == signature &&
+        (!_klass->is_interface() ||
+         !SystemDictionary::is_nonpublic_Object_method(super_method))) {
 
       // get super_klass for method_holder for the found method
       InstanceKlass* super_klass =  super_method->method_holder();
@@ -713,7 +719,7 @@
   if (mhk->is_interface()) {
     assert(m->is_public(), "should be public");
     assert(ik()->implements_interface(method_holder) , "this class should implement the interface");
-    if (is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super())) {
+    if (is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super(), klass()->is_interface())) {
       return true;
     }
   }
@@ -738,7 +744,10 @@
 // During the first run, the current instanceKlass has not yet been
 // created, the superclasses and superinterfaces do have instanceKlasses
 // but may not have vtables, the default_methods list is empty, no overpasses.
-// This is seen by default method creation.
+// Default method generation uses the all_mirandas array as the starter set for
+// maximally-specific default method calculation.  So, for both classes and
+// interfaces, it is necessary that the first pass will find all non-private
+// interface instance methods, whether or not they are concrete.
 //
 // Pass 2: recalculated during vtable initialization: only include abstract methods.
 // The goal of pass 2 is to walk through the superinterfaces to see if any of
@@ -772,7 +781,8 @@
 // Part of the Miranda Rights in the US mean that if you do not have
 // an attorney one will be appointed for you.
 bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
-                             Array<Method*>* default_methods, const Klass* super) {
+                             Array<Method*>* default_methods, const Klass* super,
+                             bool is_interface) {
   if (m->is_static() || m->is_private() || m->is_overpass()) {
     return false;
   }
@@ -800,8 +810,11 @@
 
   for (const Klass* cursuper = super; cursuper != NULL; cursuper = cursuper->super())
   {
-     if (InstanceKlass::cast(cursuper)->find_local_method(name, signature,
-           Klass::find_overpass, Klass::skip_static, Klass::skip_private) != NULL) {
+     Method* found_mth = InstanceKlass::cast(cursuper)->find_local_method(name, signature,
+       Klass::find_overpass, Klass::skip_static, Klass::skip_private);
+     // Ignore non-public methods in java.lang.Object if klass is an interface.
+     if (found_mth != NULL && (!is_interface ||
+         !SystemDictionary::is_nonpublic_Object_method(found_mth))) {
        return false;
      }
   }
@@ -820,7 +833,7 @@
 void klassVtable::add_new_mirandas_to_lists(
     GrowableArray<Method*>* new_mirandas, GrowableArray<Method*>* all_mirandas,
     Array<Method*>* current_interface_methods, Array<Method*>* class_methods,
-    Array<Method*>* default_methods, const Klass* super) {
+    Array<Method*>* default_methods, const Klass* super, bool is_interface) {
 
   // iterate thru the current interface's method to see if it a miranda
   int num_methods = current_interface_methods->length();
@@ -839,7 +852,7 @@
     }
 
     if (!is_duplicate) { // we don't want duplicate miranda entries in the vtable
-      if (is_miranda(im, class_methods, default_methods, super)) { // is it a miranda at all?
+      if (is_miranda(im, class_methods, default_methods, super, is_interface)) { // is it a miranda at all?
         const InstanceKlass *sk = InstanceKlass::cast(super);
         // check if it is a duplicate of a super's miranda
         if (sk->lookup_method_in_all_interfaces(im->name(), im->signature(), Klass::find_defaults) == NULL) {
@@ -858,7 +871,8 @@
                                const Klass* super,
                                Array<Method*>* class_methods,
                                Array<Method*>* default_methods,
-                               Array<Klass*>* local_interfaces) {
+                               Array<Klass*>* local_interfaces,
+                               bool is_interface) {
   assert((new_mirandas->length() == 0) , "current mirandas must be 0");
 
   // iterate thru the local interfaces looking for a miranda
@@ -867,7 +881,7 @@
     InstanceKlass *ik = InstanceKlass::cast(local_interfaces->at(i));
     add_new_mirandas_to_lists(new_mirandas, all_mirandas,
                               ik->methods(), class_methods,
-                              default_methods, super);
+                              default_methods, super, is_interface);
     // iterate thru each local's super interfaces
     Array<Klass*>* super_ifs = ik->transitive_interfaces();
     int num_super_ifs = super_ifs->length();
@@ -875,7 +889,7 @@
       InstanceKlass *sik = InstanceKlass::cast(super_ifs->at(j));
       add_new_mirandas_to_lists(new_mirandas, all_mirandas,
                                 sik->methods(), class_methods,
-                                default_methods, super);
+                                default_methods, super, is_interface);
     }
   }
 }
@@ -888,7 +902,8 @@
 int klassVtable::fill_in_mirandas(int initialized) {
   GrowableArray<Method*> mirandas(20);
   get_mirandas(&mirandas, NULL, ik()->super(), ik()->methods(),
-               ik()->default_methods(), ik()->local_interfaces());
+               ik()->default_methods(), ik()->local_interfaces(),
+               klass()->is_interface());
   for (int i = 0; i < mirandas.length(); i++) {
     if (log_develop_is_enabled(Trace, vtables)) {
       Method* meth = mirandas.at(i);
--- a/src/hotspot/share/oops/klassVtable.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/klassVtable.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -144,21 +144,24 @@
   bool is_miranda_entry_at(int i);
   int fill_in_mirandas(int initialized);
   static bool is_miranda(Method* m, Array<Method*>* class_methods,
-                         Array<Method*>* default_methods, const Klass* super);
+                         Array<Method*>* default_methods, const Klass* super,
+                         bool is_interface);
   static void add_new_mirandas_to_lists(
       GrowableArray<Method*>* new_mirandas,
       GrowableArray<Method*>* all_mirandas,
       Array<Method*>* current_interface_methods,
       Array<Method*>* class_methods,
       Array<Method*>* default_methods,
-      const Klass* super);
+      const Klass* super,
+      bool is_interface);
   static void get_mirandas(
       GrowableArray<Method*>* new_mirandas,
       GrowableArray<Method*>* all_mirandas,
       const Klass* super,
       Array<Method*>* class_methods,
       Array<Method*>* default_methods,
-      Array<Klass*>* local_interfaces);
+      Array<Klass*>* local_interfaces,
+      bool is_interface);
   void verify_against(outputStream* st, klassVtable* vt, int index);
   inline InstanceKlass* ik() const;
   // When loading a class from CDS archive at run time, and no class redefintion
--- a/src/hotspot/share/oops/method.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/method.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -446,7 +446,7 @@
 
 bool Method::init_method_counters(MethodCounters* counters) {
   // Try to install a pointer to MethodCounters, return true on success.
-  return Atomic::cmpxchg(counters, &_method_counters, (MethodCounters*)NULL) == NULL;
+  return Atomic::replace_if_null(counters, &_method_counters);
 }
 
 void Method::cleanup_inline_caches() {
--- a/src/hotspot/share/oops/oop.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/oop.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -28,6 +28,7 @@
 #include "gc/shared/specialized_oop_closures.hpp"
 #include "memory/iterator.hpp"
 #include "memory/memRegion.hpp"
+#include "oops/access.hpp"
 #include "oops/metadata.hpp"
 #include "utilities/macros.hpp"
 
@@ -178,6 +179,8 @@
   static inline void encode_store_heap_oop(oop* p, oop v);
 
   // Access to fields in a instanceOop through these methods.
+  template <DecoratorSet decorator>
+  oop obj_field_access(int offset) const;
   oop obj_field(int offset) const;
   void obj_field_put(int offset, oop value);
   void obj_field_put_raw(int offset, oop value);
--- a/src/hotspot/share/oops/oop.inline.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/oops/oop.inline.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -326,7 +326,10 @@
   *p = encode_heap_oop(v);
 }
 
+template <DecoratorSet decorators>
+inline oop  oopDesc::obj_field_access(int offset) const             { return HeapAccess<decorators>::oop_load_at(as_oop(), offset); }
 inline oop  oopDesc::obj_field(int offset) const                    { return HeapAccess<>::oop_load_at(as_oop(), offset);  }
+
 inline void oopDesc::obj_field_put(int offset, oop value)           { HeapAccess<>::oop_store_at(as_oop(), offset, value); }
 
 inline jbyte oopDesc::byte_field(int offset) const                  { return HeapAccess<>::load_at(as_oop(), offset);  }
--- a/src/hotspot/share/prims/jvm.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/prims/jvm.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -678,17 +678,9 @@
 // Misc. class handling ///////////////////////////////////////////////////////////
 
 
-JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env, int depth))
+JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env))
   JVMWrapper("JVM_GetCallerClass");
 
-  // Pre-JDK 8 and early builds of JDK 8 don't have a CallerSensitive annotation; or
-  // sun.reflect.Reflection.getCallerClass with a depth parameter is provided
-  // temporarily for existing code to use until a replacement API is defined.
-  if (SystemDictionary::reflect_CallerSensitive_klass() == NULL || depth != JVM_CALLER_DEPTH) {
-    Klass* k = thread->security_get_caller_class(depth);
-    return (k == NULL) ? NULL : (jclass) JNIHandles::make_local(env, k->java_mirror());
-  }
-
   // Getting the class of the caller frame.
   //
   // The call stack at this point looks something like this:
--- a/src/hotspot/share/prims/jvmtiRawMonitor.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/prims/jvmtiRawMonitor.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -127,7 +127,7 @@
 
 int JvmtiRawMonitor::SimpleEnter (Thread * Self) {
   for (;;) {
-    if (Atomic::cmpxchg(Self, &_owner, (void*)NULL) == NULL) {
+    if (Atomic::replace_if_null(Self, &_owner)) {
        return OS_OK ;
     }
 
@@ -139,7 +139,7 @@
     Node._next  = _EntryList ;
     _EntryList  = &Node ;
     OrderAccess::fence() ;
-    if (_owner == NULL && Atomic::cmpxchg(Self, &_owner, (void*)NULL) == NULL) {
+    if (_owner == NULL && Atomic::replace_if_null(Self, &_owner)) {
         _EntryList = Node._next ;
         RawMonitor_lock->unlock() ;
         return OS_OK ;
--- a/src/hotspot/share/prims/jvmtiTagMap.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/prims/jvmtiTagMap.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -30,6 +30,7 @@
 #include "code/codeCache.hpp"
 #include "jvmtifiles/jvmtiEnv.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/access.inline.hpp"
 #include "oops/instanceMirrorKlass.hpp"
 #include "oops/objArrayKlass.hpp"
 #include "oops/objArrayOop.inline.hpp"
@@ -52,10 +53,6 @@
 #include "runtime/vm_operations.hpp"
 #include "services/serviceUtil.hpp"
 #include "utilities/macros.hpp"
-#if INCLUDE_ALL_GCS
-#include "gc/g1/g1SATBCardTableModRefBS.hpp"
-#include "gc/parallel/parallelScavengeHeap.hpp"
-#endif // INCLUDE_ALL_GCS
 
 // JvmtiTagHashmapEntry
 //
@@ -78,22 +75,31 @@
   }
 
   // constructor
-  JvmtiTagHashmapEntry(oop object, jlong tag)         { init(object, tag); }
+  JvmtiTagHashmapEntry(oop object, jlong tag) { init(object, tag); }
 
  public:
 
   // accessor methods
-  inline oop object() const                           { return _object; }
-  inline oop* object_addr()                           { return &_object; }
-  inline jlong tag() const                            { return _tag; }
+  inline oop* object_addr() { return &_object; }
+  inline oop object()       { return RootAccess<ON_PHANTOM_OOP_REF>::oop_load(object_addr()); }
+  // Peek at the object without keeping it alive. The returned object must be
+  // kept alive using a normal access if it leaks out of a thread transition from VM.
+  inline oop object_peek()  {
+    return RootAccess<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>::oop_load(object_addr());
+  }
+  inline jlong tag() const  { return _tag; }
 
   inline void set_tag(jlong tag) {
     assert(tag != 0, "can't be zero");
     _tag = tag;
   }
 
-  inline JvmtiTagHashmapEntry* next() const             { return _next; }
-  inline void set_next(JvmtiTagHashmapEntry* next)      { _next = next; }
+  inline bool equals(oop object) {
+    return object == object_peek();
+  }
+
+  inline JvmtiTagHashmapEntry* next() const        { return _next; }
+  inline void set_next(JvmtiTagHashmapEntry* next) { _next = next; }
 };
 
 
@@ -211,7 +217,7 @@
       JvmtiTagHashmapEntry* entry = _table[i];
       while (entry != NULL) {
         JvmtiTagHashmapEntry* next = entry->next();
-        oop key = entry->object();
+        oop key = entry->object_peek();
         assert(key != NULL, "jni weak reference cleared!!");
         unsigned int h = hash(key, new_size);
         JvmtiTagHashmapEntry* anchor = new_table[h];
@@ -304,7 +310,7 @@
     unsigned int h = hash(key);
     JvmtiTagHashmapEntry* entry = _table[h];
     while (entry != NULL) {
-      if (entry->object() == key) {
+      if (entry->equals(key)) {
          return entry;
       }
       entry = entry->next();
@@ -345,7 +351,7 @@
     JvmtiTagHashmapEntry* entry = _table[h];
     JvmtiTagHashmapEntry* prev = NULL;
     while (entry != NULL) {
-      if (key == entry->object()) {
+      if (entry->equals(key)) {
         break;
       }
       prev = entry;
@@ -1535,16 +1541,12 @@
   void do_entry(JvmtiTagHashmapEntry* entry) {
     for (int i=0; i<_tag_count; i++) {
       if (_tags[i] == entry->tag()) {
+        // The reference in this tag map could be the only (implicitly weak)
+        // reference to that object. If we hand it out, we need to keep it live wrt
+        // SATB marking similar to other j.l.ref.Reference referents. This is
+        // achieved by using a phantom load in the object() accessor.
         oop o = entry->object();
         assert(o != NULL && Universe::heap()->is_in_reserved(o), "sanity check");
-#if INCLUDE_ALL_GCS
-        if (UseG1GC) {
-          // The reference in this tag map could be the only (implicitly weak)
-          // reference to that object. If we hand it out, we need to keep it live wrt
-          // SATB marking similar to other j.l.ref.Reference referents.
-          G1SATBCardTableModRefBS::enqueue(o);
-        }
-#endif
         jobject ref = JNIHandles::make_local(JavaThread::current(), o);
         _object_results->append(ref);
         _tag_results->append((uint64_t)entry->tag());
@@ -3363,10 +3365,8 @@
     while (entry != NULL) {
       JvmtiTagHashmapEntry* next = entry->next();
 
-      oop* obj = entry->object_addr();
-
       // has object been GC'ed
-      if (!is_alive->do_object_b(entry->object())) {
+      if (!is_alive->do_object_b(entry->object_peek())) {
         // grab the tag
         jlong tag = entry->tag();
         guarantee(tag != 0, "checking");
@@ -3384,7 +3384,7 @@
         ++freed;
       } else {
         f->do_oop(entry->object_addr());
-        oop new_oop = entry->object();
+        oop new_oop = entry->object_peek();
 
         // if the object has moved then re-hash it and move its
         // entry to its new location.
@@ -3418,7 +3418,7 @@
   // Re-add all the entries which were kept aside
   while (delayed_add != NULL) {
     JvmtiTagHashmapEntry* next = delayed_add->next();
-    unsigned int pos = JvmtiTagHashmap::hash(delayed_add->object(), size);
+    unsigned int pos = JvmtiTagHashmap::hash(delayed_add->object_peek(), size);
     delayed_add->set_next(table[pos]);
     table[pos] = delayed_add;
     delayed_add = next;
--- a/src/hotspot/share/prims/resolvedMethodTable.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/prims/resolvedMethodTable.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -25,6 +25,7 @@
 #include "precompiled.hpp"
 #include "gc/shared/gcLocker.hpp"
 #include "memory/allocation.hpp"
+#include "oops/access.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "oops/method.hpp"
 #include "oops/symbol.hpp"
@@ -33,10 +34,20 @@
 #include "runtime/mutexLocker.hpp"
 #include "utilities/hashtable.inline.hpp"
 #include "utilities/macros.hpp"
-#if INCLUDE_ALL_GCS
-#include "gc/g1/g1SATBCardTableModRefBS.hpp"
-#endif
+
+
+oop ResolvedMethodEntry::object() {
+  return RootAccess<ON_PHANTOM_OOP_REF>::oop_load(literal_addr());
+}
 
+oop ResolvedMethodEntry::object_no_keepalive() {
+  // The AS_NO_KEEPALIVE peeks at the oop without keeping it alive.
+  // This is dangerous in general but is okay if the loaded oop does
+  // not leak out past a thread transition where a safepoint can happen.
+  // A subsequent oop_load without AS_NO_KEEPALIVE (the object() accessor)
+  // keeps the oop alive before doing so.
+  return RootAccess<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>::oop_load(literal_addr());
+}
 
 ResolvedMethodTable::ResolvedMethodTable()
   : Hashtable<oop, mtClass>(_table_size, sizeof(ResolvedMethodEntry)) { }
@@ -44,13 +55,18 @@
 oop ResolvedMethodTable::lookup(int index, unsigned int hash, Method* method) {
   for (ResolvedMethodEntry* p = bucket(index); p != NULL; p = p->next()) {
     if (p->hash() == hash) {
-      oop target = p->literal();
+
+      // Peek the object to check if it is the right target.
+      oop target = p->object_no_keepalive();
+
       // The method is in the table as a target already
       if (java_lang_invoke_ResolvedMethodName::vmtarget(target) == method) {
         ResourceMark rm;
         log_debug(membername, table) ("ResolvedMethod entry found for %s index %d",
                                        method->name_and_sig_as_C_string(), index);
-        return target;
+        // The object() accessor makes sure the target object is kept alive before
+        // leaking out.
+        return p->object();
       }
     }
   }
@@ -70,18 +86,6 @@
   return lookup(index, hash, method);
 }
 
-// Tell the GC that this oop was looked up in the table
-static void ensure_oop_alive(oop mname) {
-  // A lookup in the ResolvedMethodTable could return an object that was previously
-  // considered dead. The SATB part of G1 needs to get notified about this
-  // potential resurrection, otherwise the marking might not find the object.
-#if INCLUDE_ALL_GCS
-  if (UseG1GC && mname != NULL) {
-    G1SATBCardTableModRefBS::enqueue(mname);
-  }
-#endif
-}
-
 oop ResolvedMethodTable::basic_add(Method* method, oop rmethod_name) {
   assert_locked_or_safepoint(ResolvedMethodTable_lock);
 
@@ -91,7 +95,6 @@
   // One was added while aquiring the lock
   oop entry = lookup(index, hash, method);
   if (entry != NULL) {
-    ensure_oop_alive(entry);
     return entry;
   }
 
@@ -100,14 +103,13 @@
   ResourceMark rm;
   log_debug(membername, table) ("ResolvedMethod entry added for %s index %d",
                                  method->name_and_sig_as_C_string(), index);
-  return p->literal();
+  return rmethod_name;
 }
 
 ResolvedMethodTable* ResolvedMethodTable::_the_table = NULL;
 
 oop ResolvedMethodTable::find_method(Method* method) {
   oop entry = _the_table->lookup(method);
-  ensure_oop_alive(entry);
   return entry;
 }
 
@@ -147,12 +149,12 @@
     ResolvedMethodEntry* entry = _the_table->bucket(i);
     while (entry != NULL) {
       _oops_counted++;
-      if (is_alive->do_object_b(entry->literal())) {
+      if (is_alive->do_object_b(entry->object_no_keepalive())) {
         p = entry->next_addr();
       } else {
         _oops_removed++;
         if (log_is_enabled(Debug, membername, table)) {
-          Method* m = (Method*)java_lang_invoke_ResolvedMethodName::vmtarget(entry->literal());
+          Method* m = (Method*)java_lang_invoke_ResolvedMethodName::vmtarget(entry->object_no_keepalive());
           ResourceMark rm;
           log_debug(membername, table) ("ResolvedMethod entry removed for %s index %d",
                                            m->name_and_sig_as_C_string(), i);
@@ -185,7 +187,7 @@
     ResolvedMethodEntry* entry = bucket(i);
     while (entry != NULL) {
       tty->print("%d : ", i);
-      oop rmethod_name = entry->literal();
+      oop rmethod_name = entry->object_no_keepalive();
       rmethod_name->print();
       Method* m = (Method*)java_lang_invoke_ResolvedMethodName::vmtarget(rmethod_name);
       m->print();
@@ -203,8 +205,7 @@
   for (int i = 0; i < _the_table->table_size(); ++i) {
     ResolvedMethodEntry* entry = _the_table->bucket(i);
     while (entry != NULL) {
-
-      oop mem_name = entry->literal();
+      oop mem_name = entry->object_no_keepalive();
       Method* old_method = (Method*)java_lang_invoke_ResolvedMethodName::vmtarget(mem_name);
 
       if (old_method->is_old()) {
--- a/src/hotspot/share/prims/resolvedMethodTable.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/prims/resolvedMethodTable.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -44,6 +44,9 @@
     return (ResolvedMethodEntry**)HashtableEntry<oop, mtClass>::next_addr();
   }
 
+  oop object();
+  oop object_no_keepalive();
+
   void print_on(outputStream* st) const;
 };
 
--- a/src/hotspot/share/prims/whitebox.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/prims/whitebox.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1727,10 +1727,16 @@
 
 WB_ENTRY(jboolean, WB_IsCDSIncludedInVmBuild(JNIEnv* env))
 #if INCLUDE_CDS
+# ifdef _LP64
+    if (!UseCompressedOops || !UseCompressedClassPointers) {
+      // On 64-bit VMs, CDS is supported only with compressed oops/pointers
+      return false;
+    }
+# endif // _LP64
   return true;
 #else
   return false;
-#endif
+#endif // INCLUDE_CDS
 WB_END
 
 
--- a/src/hotspot/share/runtime/arguments.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/arguments.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -204,7 +204,9 @@
   _writeable = writeable;
 }
 
-AgentLibrary::AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) {
+AgentLibrary::AgentLibrary(const char* name, const char* options,
+               bool is_absolute_path, void* os_lib,
+               bool instrument_lib) {
   _name = AllocateHeap(strlen(name)+1, mtArguments);
   strcpy(_name, name);
   if (options == NULL) {
@@ -218,6 +220,7 @@
   _next = NULL;
   _state = agent_invalid;
   _is_static_lib = false;
+  _is_instrument_lib = instrument_lib;
 }
 
 // Check if head of 'option' matches 'name', and sets 'tail' to the remaining
@@ -294,6 +297,10 @@
   _agentList.add(new AgentLibrary(name, options, absolute_path, NULL));
 }
 
+void Arguments::add_instrument_agent(const char* name, char* options, bool absolute_path) {
+  _agentList.add(new AgentLibrary(name, options, absolute_path, NULL, true));
+}
+
 // Late-binding agents not started via arguments
 void Arguments::add_loaded_agent(AgentLibrary *agentLib) {
   _agentList.add(agentLib);
@@ -501,7 +508,7 @@
   { "MaxRAMFraction",               JDK_Version::jdk(10),  JDK_Version::undefined(), JDK_Version::undefined() },
   { "MinRAMFraction",               JDK_Version::jdk(10),  JDK_Version::undefined(), JDK_Version::undefined() },
   { "InitialRAMFraction",           JDK_Version::jdk(10),  JDK_Version::undefined(), JDK_Version::undefined() },
-  { "UseMembar",                    JDK_Version::jdk(10), JDK_Version::jdk(11), JDK_Version::jdk(12) },
+  { "UseMembar",                    JDK_Version::jdk(10), JDK_Version::undefined(), JDK_Version::undefined() },
   { "FastTLABRefill",               JDK_Version::jdk(10), JDK_Version::jdk(11), JDK_Version::jdk(12) },
   { "SafepointSpinBeforeYield",     JDK_Version::jdk(10), JDK_Version::jdk(11), JDK_Version::jdk(12) },
   { "DeferThrSuspendLoopCount",     JDK_Version::jdk(10), JDK_Version::jdk(11), JDK_Version::jdk(12) },
@@ -520,6 +527,7 @@
   { "ConvertSleepToYield",           JDK_Version::jdk(9),      JDK_Version::jdk(10), JDK_Version::jdk(11) },
   { "ConvertYieldToSleep",           JDK_Version::jdk(9),      JDK_Version::jdk(10), JDK_Version::jdk(11) },
   { "MinSleepInterval",              JDK_Version::jdk(9),      JDK_Version::jdk(10), JDK_Version::jdk(11) },
+  { "CheckAssertionStatusDirectives",JDK_Version::undefined(), JDK_Version::jdk(11), JDK_Version::jdk(12) },
   { "PermSize",                      JDK_Version::undefined(), JDK_Version::jdk(8),  JDK_Version::undefined() },
   { "MaxPermSize",                   JDK_Version::undefined(), JDK_Version::jdk(8),  JDK_Version::undefined() },
   { "SharedReadWriteSize",           JDK_Version::undefined(), JDK_Version::jdk(10), JDK_Version::undefined() },
@@ -678,6 +686,14 @@
   return false;
 }
 
+// Verifies the correctness of the entries in the special_jvm_flags table.
+// If there is a semantic error (i.e. a bug in the table) such as the obsoletion
+// version being earlier than the deprecation version, then a warning is issued
+// and verification fails - by returning false. If it is detected that the table
+// is out of date, with respect to the current version, then a warning is issued
+// but verification does not fail. This allows the VM to operate when the version
+// is first updated, without needing to update all the impacted flags at the
+// same time.
 static bool verify_special_jvm_flags() {
   bool success = true;
   for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) {
@@ -714,7 +730,6 @@
       if (!version_less_than(JDK_Version::current(), flag.obsolete_in)) {
         if (Flag::find_flag(flag.name) != NULL) {
           warning("Global variable for obsolete special flag entry \"%s\" should be removed", flag.name);
-          success = false;
         }
       }
     }
@@ -724,7 +739,6 @@
       if (!version_less_than(JDK_Version::current(), flag.expired_in)) {
         if (Flag::find_flag(flag.name) != NULL) {
           warning("Global variable for expired flag entry \"%s\" should be removed", flag.name);
-          success = false;
         }
       }
     }
@@ -2795,7 +2809,7 @@
         size_t length = strlen(tail) + 1;
         char *options = NEW_C_HEAP_ARRAY(char, length, mtArguments);
         jio_snprintf(options, length, "%s", tail);
-        add_init_agent("instrument", options, false);
+        add_instrument_agent("instrument", options, false);
         // java agents need module java.instrument
         if (!create_numbered_property("jdk.module.addmods", "java.instrument", addmods_count++)) {
           return JNI_ENOMEM;
--- a/src/hotspot/share/runtime/arguments.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/arguments.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -142,6 +142,7 @@
   void*           _os_lib;
   bool            _is_absolute_path;
   bool            _is_static_lib;
+  bool            _is_instrument_lib;
   AgentState      _state;
   AgentLibrary*   _next;
 
@@ -154,13 +155,15 @@
   void set_os_lib(void* os_lib)             { _os_lib = os_lib; }
   AgentLibrary* next() const                { return _next; }
   bool is_static_lib() const                { return _is_static_lib; }
+  bool is_instrument_lib() const            { return _is_instrument_lib; }
   void set_static_lib(bool is_static_lib)   { _is_static_lib = is_static_lib; }
   bool valid()                              { return (_state == agent_valid); }
   void set_valid()                          { _state = agent_valid; }
   void set_invalid()                        { _state = agent_invalid; }
 
   // Constructor
-  AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib);
+  AgentLibrary(const char* name, const char* options, bool is_absolute_path,
+               void* os_lib, bool instrument_lib=false);
 };
 
 // maintain an order of entry list of AgentLibrary
@@ -337,6 +340,7 @@
   // -agentlib and -agentpath arguments
   static AgentLibraryList _agentList;
   static void add_init_agent(const char* name, char* options, bool absolute_path);
+  static void add_instrument_agent(const char* name, char* options, bool absolute_path);
 
   // Late-binding agents not started via arguments
   static void add_loaded_agent(AgentLibrary *agentLib);
--- a/src/hotspot/share/runtime/atomic.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/atomic.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -45,8 +45,8 @@
 
 class Atomic : AllStatic {
 public:
-  // Atomic operations on jlong types are not available on all 32-bit
-  // platforms. If atomic ops on jlongs are defined here they must only
+  // Atomic operations on int64 types are not available on all 32-bit
+  // platforms. If atomic ops on int64 are defined here they must only
   // be used from code that verifies they are available at runtime and
   // can provide an alternative action if not - see supports_cx8() for
   // a means to test availability.
@@ -639,16 +639,16 @@
 //
 // Use the ATOMIC_SHORT_PAIR macro (see macros.hpp) to get the desired alignment.
 template<>
-struct Atomic::AddImpl<jshort, jshort> VALUE_OBJ_CLASS_SPEC {
-  jshort operator()(jshort add_value, jshort volatile* dest) const {
+struct Atomic::AddImpl<short, short> VALUE_OBJ_CLASS_SPEC {
+  short operator()(short add_value, short volatile* dest) const {
 #ifdef VM_LITTLE_ENDIAN
     assert((intx(dest) & 0x03) == 0x02, "wrong alignment");
-    jint new_value = Atomic::add(add_value << 16, (volatile jint*)(dest-1));
+    int new_value = Atomic::add(add_value << 16, (volatile int*)(dest-1));
 #else
     assert((intx(dest) & 0x03) == 0x00, "wrong alignment");
-    jint new_value = Atomic::add(add_value << 16, (volatile jint*)(dest));
+    int new_value = Atomic::add(add_value << 16, (volatile int*)(dest));
 #endif
-    return (jshort)(new_value >> 16); // preserves sign
+    return (short)(new_value >> 16); // preserves sign
   }
 };
 
@@ -807,7 +807,7 @@
   do {
     // value to swap in matches current value ...
     uint32_t new_value = cur;
-    // ... except for the one jbyte we want to update
+    // ... except for the one byte we want to update
     reinterpret_cast<uint8_t*>(&new_value)[offset] = canon_exchange_value;
 
     uint32_t res = cmpxchg(new_value, aligned_dest, cur, order);
--- a/src/hotspot/share/runtime/globals.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/globals.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -893,9 +893,6 @@
   develop(bool, TraceJavaAssertions, false,                                 \
           "Trace java language assertions")                                 \
                                                                             \
-  notproduct(bool, CheckAssertionStatusDirectives, false,                   \
-          "Temporary - see javaClasses.cpp")                                \
-                                                                            \
   notproduct(bool, PrintMallocFree, false,                                  \
           "Trace calls to C heap malloc/free allocation")                   \
                                                                             \
--- a/src/hotspot/share/runtime/init.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/init.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -131,6 +131,7 @@
   InterfaceSupport_init();
   SharedRuntime::generate_stubs();
   universe2_init();  // dependent on codeCache_init and stubRoutines_init1
+  javaClasses_init();// must happen after vtable initialization, before referenceProcessor_init
   referenceProcessor_init();
   jni_handles_init();
 #if INCLUDE_VM_STRUCTS
@@ -150,7 +151,6 @@
   if (!universe_post_init()) {
     return JNI_ERR;
   }
-  javaClasses_init();   // must happen after vtable initialization
   stubRoutines_init2(); // note: StubRoutines need 2-phase init
   MethodHandles::generate_adapters();
 
--- a/src/hotspot/share/runtime/jniHandles.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/jniHandles.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -47,6 +47,7 @@
   } else {
     Thread* thread = Thread::current();
     assert(Universe::heap()->is_in_reserved(obj), "sanity check");
+    assert(!current_thread_in_native(), "must not be in native");
     return thread->active_handles()->allocate_handle(obj);
   }
 }
@@ -59,6 +60,8 @@
     return NULL;                // ignore null handles
   } else {
     assert(Universe::heap()->is_in_reserved(obj), "sanity check");
+    assert(thread->is_Java_thread(), "not a Java thread");
+    assert(!current_thread_in_native(), "must not be in native");
     return thread->active_handles()->allocate_handle(obj);
   }
 }
@@ -70,6 +73,7 @@
   } else {
     JavaThread* thread = JavaThread::thread_from_jni_environment(env);
     assert(Universe::heap()->is_in_reserved(obj), "sanity check");
+    assert(!current_thread_in_native(), "must not be in native");
     return thread->active_handles()->allocate_handle(obj);
   }
 }
@@ -77,6 +81,7 @@
 
 jobject JNIHandles::make_global(Handle obj) {
   assert(!Universe::heap()->is_gc_active(), "can't extend the root set during GC");
+  assert(!current_thread_in_native(), "must not be in native");
   jobject res = NULL;
   if (!obj.is_null()) {
     // ignore null handles
@@ -93,6 +98,7 @@
 
 jobject JNIHandles::make_weak_global(Handle obj) {
   assert(!Universe::heap()->is_gc_active(), "can't extend the root set during GC");
+  assert(!current_thread_in_native(), "must not be in native");
   jobject res = NULL;
   if (!obj.is_null()) {
     // ignore null handles
@@ -265,6 +271,13 @@
   weak_oops_do(&verify_handle);
 }
 
+// This method is implemented here to avoid circular includes between
+// jniHandles.hpp and thread.hpp.
+bool JNIHandles::current_thread_in_native() {
+  Thread* thread = Thread::current();
+  return (thread->is_Java_thread() &&
+          JavaThread::current()->thread_state() == _thread_in_native);
+}
 
 
 void jni_handles_init() {
--- a/src/hotspot/share/runtime/jniHandles.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/jniHandles.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -48,6 +48,10 @@
   template<bool external_guard> inline static oop resolve_impl(jobject handle);
   template<bool external_guard> static oop resolve_jweak(jweak handle);
 
+  // This method is not inlined in order to avoid circular includes between
+  // this header file and thread.hpp.
+  static bool current_thread_in_native();
+
  public:
   // Low tag bit in jobject used to distinguish a jweak.  jweak is
   // type equivalent to jobject, but there are places where we need to
@@ -230,6 +234,7 @@
 template<bool external_guard>
 inline oop JNIHandles::resolve_impl(jobject handle) {
   assert(handle != NULL, "precondition");
+  assert(!current_thread_in_native(), "must not be in native");
   oop result;
   if (is_jweak(handle)) {       // Unlikely
     result = resolve_jweak<external_guard>(handle);
--- a/src/hotspot/share/runtime/mutex.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/mutex.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -467,7 +467,7 @@
   OrderAccess::fence();
 
   // Optional optimization ... try barging on the inner lock
-  if ((NativeMonitorFlags & 32) && Atomic::cmpxchg(ESelf, &_OnDeck, (ParkEvent*)NULL) == NULL) {
+  if ((NativeMonitorFlags & 32) && Atomic::replace_if_null(ESelf, &_OnDeck)) {
     goto OnDeck_LOOP;
   }
 
@@ -574,7 +574,7 @@
   // Unlike a normal lock, however, the exiting thread "locks" OnDeck,
   // picks a successor and marks that thread as OnDeck.  That successor
   // thread will then clear OnDeck once it eventually acquires the outer lock.
-  if (Atomic::cmpxchg((ParkEvent*)_LBIT, &_OnDeck, (ParkEvent*)NULL) != NULL) {
+  if (!Atomic::replace_if_null((ParkEvent*)_LBIT, &_OnDeck)) {
     return;
   }
 
--- a/src/hotspot/share/runtime/objectMonitor.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/objectMonitor.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -421,7 +421,7 @@
 int ObjectMonitor::TryLock(Thread * Self) {
   void * own = _owner;
   if (own != NULL) return 0;
-  if (Atomic::cmpxchg(Self, &_owner, (void*)NULL) == NULL) {
+  if (Atomic::replace_if_null(Self, &_owner)) {
     // Either guarantee _recursions == 0 or set _recursions = 0.
     assert(_recursions == 0, "invariant");
     assert(_owner == Self, "invariant");
@@ -529,7 +529,7 @@
   if ((SyncFlags & 16) == 0 && nxt == NULL && _EntryList == NULL) {
     // Try to assume the role of responsible thread for the monitor.
     // CONSIDER:  ST vs CAS vs { if (Responsible==null) Responsible=Self }
-    Atomic::cmpxchg(Self, &_Responsible, (Thread*)NULL);
+    Atomic::replace_if_null(Self, &_Responsible);
   }
 
   // The lock might have been released while this thread was occupied queueing
@@ -553,7 +553,7 @@
     assert(_owner != Self, "invariant");
 
     if ((SyncFlags & 2) && _Responsible == NULL) {
-      Atomic::cmpxchg(Self, &_Responsible, (Thread*)NULL);
+      Atomic::replace_if_null(Self, &_Responsible);
     }
 
     // park self
@@ -1007,7 +1007,7 @@
       // to reacquire the lock the responsibility for ensuring succession
       // falls to the new owner.
       //
-      if (Atomic::cmpxchg(THREAD, &_owner, (void*)NULL) != NULL) {
+      if (!Atomic::replace_if_null(THREAD, &_owner)) {
         return;
       }
       TEVENT(Exit - Reacquired);
@@ -1032,7 +1032,7 @@
         // B.  If the elements forming the EntryList|cxq are TSM
         //     we could simply unpark() the lead thread and return
         //     without having set _succ.
-        if (Atomic::cmpxchg(THREAD, &_owner, (void*)NULL) != NULL) {
+        if (!Atomic::replace_if_null(THREAD, &_owner)) {
           TEVENT(Inflated exit - reacquired succeeded);
           return;
         }
@@ -1714,7 +1714,7 @@
         ObjectWaiter * tail = _cxq;
         if (tail == NULL) {
           iterator->_next = NULL;
-          if (Atomic::cmpxchg(iterator, &_cxq, (ObjectWaiter*)NULL) == NULL) {
+          if (Atomic::replace_if_null(iterator, &_cxq)) {
             break;
           }
         } else {
--- a/src/hotspot/share/runtime/os.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/os.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -778,7 +778,6 @@
   static void* signal(int signal_number, void* handler);
   static void  signal_raise(int signal_number);
   static int   signal_wait();
-  static int   signal_lookup();
   static void* user_handler();
   static void  terminate_signal_thread();
   static int   sigexitnum_pd();
--- a/src/hotspot/share/runtime/safepoint.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/safepoint.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -103,7 +103,7 @@
 
   int nof_threads = Threads::number_of_threads();
 
-  log_debug(safepoint)("Safepoint synchronization initiated. (%d)", nof_threads);
+  log_debug(safepoint)("Safepoint synchronization initiated. (%d threads)", nof_threads);
 
   RuntimeService::record_safepoint_begin();
 
@@ -407,9 +407,7 @@
   // Update the count of active JNI critical regions
   GCLocker::set_jni_lock_count(_current_jni_active_count);
 
-  if (log_is_enabled(Debug, safepoint)) {
-    log_debug(safepoint)("Entering safepoint region: %s", VMThread::vm_safepoint_description());
-  }
+  log_info(safepoint)("Entering safepoint region: %s", VMThread::vm_safepoint_description());
 
   RuntimeService::record_safepoint_synchronized();
   if (PrintSafepointStatistics) {
@@ -496,14 +494,14 @@
           cur_state->restart(); // TSS _running
           SafepointMechanism::disarm_local_poll(current); // release store, local state -> polling page
         }
-        log_debug(safepoint)("Leaving safepoint region");
+        log_info(safepoint)("Leaving safepoint region");
       } else {
         // Set to not synchronized, so the threads will not go into the signal_thread_blocked method
         // when they get restarted.
         _state = _not_synchronized;
         OrderAccess::fence();
 
-        log_debug(safepoint)("Leaving safepoint region");
+        log_info(safepoint)("Leaving safepoint region");
 
         // Start suspended threads
         jtiwh.rewind();
--- a/src/hotspot/share/runtime/stubRoutines.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/stubRoutines.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -62,12 +62,11 @@
 address StubRoutines::_atomic_xchg_entry                        = NULL;
 address StubRoutines::_atomic_xchg_long_entry                   = NULL;
 address StubRoutines::_atomic_store_entry                       = NULL;
-address StubRoutines::_atomic_store_ptr_entry                   = NULL;
 address StubRoutines::_atomic_cmpxchg_entry                     = NULL;
 address StubRoutines::_atomic_cmpxchg_byte_entry                = NULL;
 address StubRoutines::_atomic_cmpxchg_long_entry                = NULL;
 address StubRoutines::_atomic_add_entry                         = NULL;
-address StubRoutines::_atomic_add_ptr_entry                     = NULL;
+address StubRoutines::_atomic_add_long_entry                    = NULL;
 address StubRoutines::_fence_entry                              = NULL;
 address StubRoutines::_d2i_wrapper                              = NULL;
 address StubRoutines::_d2l_wrapper                              = NULL;
--- a/src/hotspot/share/runtime/stubRoutines.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/stubRoutines.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -103,12 +103,11 @@
   static address _atomic_xchg_entry;
   static address _atomic_xchg_long_entry;
   static address _atomic_store_entry;
-  static address _atomic_store_ptr_entry;
   static address _atomic_cmpxchg_entry;
   static address _atomic_cmpxchg_byte_entry;
   static address _atomic_cmpxchg_long_entry;
   static address _atomic_add_entry;
-  static address _atomic_add_ptr_entry;
+  static address _atomic_add_long_entry;
   static address _fence_entry;
   static address _d2i_wrapper;
   static address _d2l_wrapper;
@@ -277,12 +276,11 @@
   static address atomic_xchg_entry()                       { return _atomic_xchg_entry; }
   static address atomic_xchg_long_entry()                  { return _atomic_xchg_long_entry; }
   static address atomic_store_entry()                      { return _atomic_store_entry; }
-  static address atomic_store_ptr_entry()                  { return _atomic_store_ptr_entry; }
   static address atomic_cmpxchg_entry()                    { return _atomic_cmpxchg_entry; }
   static address atomic_cmpxchg_byte_entry()               { return _atomic_cmpxchg_byte_entry; }
   static address atomic_cmpxchg_long_entry()               { return _atomic_cmpxchg_long_entry; }
   static address atomic_add_entry()                        { return _atomic_add_entry; }
-  static address atomic_add_ptr_entry()                    { return _atomic_add_ptr_entry; }
+  static address atomic_add_long_entry()                   { return _atomic_add_long_entry; }
   static address fence_entry()                             { return _fence_entry; }
 
   static address d2i_wrapper()                             { return _d2i_wrapper; }
--- a/src/hotspot/share/runtime/synchronizer.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/synchronizer.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -238,8 +238,7 @@
     // and last are the inflated Java Monitor (ObjectMonitor) checks.
     lock->set_displaced_header(markOopDesc::unused_mark());
 
-    if (owner == NULL &&
-        Atomic::cmpxchg(Self, &(m->_owner), (void*)NULL) == NULL) {
+    if (owner == NULL && Atomic::replace_if_null(Self, &(m->_owner))) {
       assert(m->_recursions == 0, "invariant");
       assert(m->_owner == Self, "invariant");
       return true;
--- a/src/hotspot/share/runtime/thread.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/thread.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -4039,9 +4039,16 @@
         }
         if (library == NULL) {
           const char *sub_msg = " on the library path, with error: ";
-          size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
+          const char *sub_msg2 = "\nModule java.instrument may be missing from runtime image.";
+
+          size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) +
+                       strlen(ebuf) + strlen(sub_msg2) + 1;
           char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread);
-          jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
+          if (!agent->is_instrument_lib()) {
+            jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
+          } else {
+            jio_snprintf(buf, len, "%s%s%s%s%s", msg, name, sub_msg, ebuf, sub_msg2);
+          }
           // If we can't find the agent, exit.
           vm_exit_during_initialization(buf, NULL);
           FREE_C_HEAP_ARRAY(char, buf);
--- a/src/hotspot/share/runtime/vm_operations.hpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/runtime/vm_operations.hpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,9 +67,8 @@
   template(CGC_Operation)                         \
   template(CMS_Initial_Mark)                      \
   template(CMS_Final_Remark)                      \
+  template(G1CollectForAllocation)                \
   template(G1CollectFull)                         \
-  template(G1CollectForAllocation)                \
-  template(G1IncCollectionPause)                  \
   template(HandshakeOneThread)                    \
   template(HandshakeAllThreads)                   \
   template(HandshakeFallback)                     \
--- a/src/hotspot/share/services/mallocSiteTable.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/services/mallocSiteTable.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -147,7 +147,7 @@
     if (entry == NULL) return NULL;
 
     // swap in the head
-    if (Atomic::cmpxchg(entry, &_table[index], (MallocSiteHashtableEntry*)NULL) == NULL) {
+    if (Atomic::replace_if_null(entry, &_table[index])) {
       return entry->data();
     }
 
@@ -259,5 +259,5 @@
 }
 
 bool MallocSiteHashtableEntry::atomic_insert(MallocSiteHashtableEntry* entry) {
-  return Atomic::cmpxchg(entry, &_next, (MallocSiteHashtableEntry*)NULL) == NULL;
+  return Atomic::replace_if_null(entry, &_next);
 }
--- a/src/hotspot/share/utilities/bitMap.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/utilities/bitMap.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -628,7 +628,7 @@
       table[i] = num_set_bits(i);
     }
 
-    if (Atomic::cmpxchg(table, &_pop_count_table, (BitMap::idx_t*)NULL) != NULL) {
+    if (!Atomic::replace_if_null(table, &_pop_count_table)) {
       guarantee(_pop_count_table != NULL, "invariant");
       FREE_C_HEAP_ARRAY(idx_t, table);
     }
--- a/src/hotspot/share/utilities/vmError.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/hotspot/share/utilities/vmError.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -243,11 +243,12 @@
           RegisterMap map((JavaThread*)t, false); // No update
           fr = fr.sender(&map);
         } else {
+          // is_first_C_frame() does only simple checks for frame pointer,
+          // it will pass if java compiled code has a pointer in EBP.
+          if (os::is_first_C_frame(&fr)) break;
           fr = os::get_sender_for_C_frame(&fr);
         }
       } else {
-        // is_first_C_frame() does only simple checks for frame pointer,
-        // it will pass if java compiled code has a pointer in EBP.
         if (os::is_first_C_frame(&fr)) break;
         fr = os::get_sender_for_C_frame(&fr);
       }
--- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -66,6 +66,8 @@
         }
 
         // step 2: find mount point
+        List<UnixMountEntry> procMountsEntries =
+            fs.getMountEntries("/proc/mounts");
         UnixPath parent = path.getParent();
         while (parent != null) {
             UnixFileAttributes attrs = null;
@@ -74,16 +76,23 @@
             } catch (UnixException x) {
                 x.rethrowAsIOException(parent);
             }
-            if (attrs.dev() != dev())
-                break;
+            if (attrs.dev() != dev()) {
+                // step 3: lookup mounted file systems (use /proc/mounts to
+                // ensure we find the file system even when not in /etc/mtab)
+                byte[] dir = path.asByteArray();
+                for (UnixMountEntry entry : procMountsEntries) {
+                    if (Arrays.equals(dir, entry.dir()))
+                        return entry;
+                }
+            }
             path = parent;
             parent = parent.getParent();
         }
 
-        // step 3: lookup mounted file systems (use /proc/mounts to ensure we
-        // find the file system even when not in /etc/mtab)
+        // step 3: lookup mounted file systems (use /proc/mounts to
+        // ensure we find the file system even when not in /etc/mtab)
         byte[] dir = path.asByteArray();
-        for (UnixMountEntry entry: fs.getMountEntries("/proc/mounts")) {
+        for (UnixMountEntry entry : procMountsEntries) {
             if (Arrays.equals(dir, entry.dir()))
                 return entry;
         }
--- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystem.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystem.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -75,7 +75,7 @@
     /**
      * Returns object to iterate over the mount entries in the given fstab file.
      */
-    Iterable<UnixMountEntry> getMountEntries(String fstab) {
+    List<UnixMountEntry> getMountEntries(String fstab) {
         ArrayList<UnixMountEntry> entries = new ArrayList<>();
         try {
             long fp = setmntent(Util.toBytes(fstab), Util.toBytes("r"));
@@ -101,7 +101,7 @@
      * Returns object to iterate over the mount entries in /etc/mtab
      */
     @Override
-    Iterable<UnixMountEntry> getMountEntries() {
+    List<UnixMountEntry> getMountEntries() {
         return getMountEntries("/etc/mtab");
     }
 
--- a/src/java.base/share/classes/com/sun/java/util/jar/pack/Constants.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/Constants.java	Fri Feb 02 01:52:03 2018 +0000
@@ -48,6 +48,7 @@
         1.8 to 1.8.X 52,0
         1.9 to 1.9.X 53,0
         1.10 to 1.10.X 54,0
+        1.11 to 1.11.X 55,0
     */
 
     public static final Package.Version JAVA_MIN_CLASS_VERSION =
@@ -71,6 +72,9 @@
     public static final Package.Version JAVA10_MAX_CLASS_VERSION =
             Package.Version.of(54, 00);
 
+    public static final Package.Version JAVA11_MAX_CLASS_VERSION =
+            Package.Version.of(55, 00);
+
     public static final int JAVA_PACKAGE_MAGIC = 0xCAFED00D;
 
     public static final Package.Version JAVA5_PACKAGE_VERSION =
@@ -87,7 +91,7 @@
 
     // upper limit, should point to the latest class version
     public static final Package.Version JAVA_MAX_CLASS_VERSION =
-            JAVA10_MAX_CLASS_VERSION;
+            JAVA11_MAX_CLASS_VERSION;
 
     // upper limit should point to the latest package version, for version info!.
     public static final Package.Version MAX_PACKAGE_VERSION =
--- a/src/java.base/share/classes/com/sun/java/util/jar/pack/Driver.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/Driver.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -162,11 +162,12 @@
                         engProps.put((String) me.getKey(), (String) me.getValue());
                     }
                 } else if ("--version".equals(state)) {
-                        System.out.println(MessageFormat.format(RESOURCE.getString(DriverResource.VERSION), Driver.class.getName(), "1.31, 07/05/05"));
+                        System.out.println(MessageFormat.format(RESOURCE.getString(DriverResource.VERSION),
+                                                                Driver.class.getName(), "1.31, 07/05/05"));
                     return;
                 } else if ("--help".equals(state)) {
                     printUsage(doPack, true, System.out);
-                    System.exit(1);
+                    System.exit(0);
                     return;
                 } else {
                     break;
--- a/src/java.base/share/classes/com/sun/java/util/jar/pack/DriverResource.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/DriverResource.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -89,7 +89,7 @@
                 "  -q, --quiet                     set verbosity to lowest level",
                 "  -l{F}, --log-file={F}           output to the given log file, ",
                 "                                  or '-' for System.out",
-                "  -?, -h, --help                  print this message",
+                "  -?, -h, --help                  print this help message",
                 "  -V, --version                   print program version",
                 "  -J{X}                           pass option X to underlying Java VM",
                 "",
@@ -118,7 +118,7 @@
                 "  -q, --quiet                   set verbosity to lowest level",
                 "  -l{F}, --log-file={F}         output to the given log file, or",
                 "                                '-' for System.out",
-                "  -?, -h, --help                print this message",
+                "  -?, -h, --help                print this help message",
                 "  -V, --version                 print program version",
                 "  -J{X}                         pass option X to underlying Java VM"
             }
--- a/src/java.base/share/classes/java/io/ByteArrayOutputStream.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/io/ByteArrayOutputStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,6 +27,7 @@
 
 import java.nio.charset.Charset;
 import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * This class implements an output stream in which the data is
@@ -147,10 +148,7 @@
      * @param   len   the number of bytes to write.
      */
     public synchronized void write(byte b[], int off, int len) {
-        if ((off < 0) || (off > b.length) || (len < 0) ||
-            ((off + len) - b.length > 0)) {
-            throw new IndexOutOfBoundsException();
-        }
+        Objects.checkFromIndexSize(off, len, b.length);
         ensureCapacity(count + len);
         System.arraycopy(b, off, buf, count, len);
         count += len;
--- a/src/java.base/share/classes/java/io/File.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/io/File.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2256,7 +2256,7 @@
     private transient volatile Path filePath;
 
     /**
-     * Returns a {@link Path java.nio.file.Path} object constructed from the
+     * Returns a {@link Path java.nio.file.Path} object constructed from
      * this abstract path. The resulting {@code Path} is associated with the
      * {@link java.nio.file.FileSystems#getDefault default-filesystem}.
      *
--- a/src/java.base/share/classes/java/io/InputStream.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/io/InputStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,9 @@
 
 package java.io;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -54,6 +56,103 @@
     private static final int DEFAULT_BUFFER_SIZE = 8192;
 
     /**
+     * Returns a new {@code InputStream} that reads no bytes. The returned
+     * stream is initially open.  The stream is closed by calling the
+     * {@code close()} method.  Subsequent calls to {@code close()} have no
+     * effect.
+     *
+     * <p> While the stream is open, the {@code available()}, {@code read()},
+     * {@code read(byte[])}, {@code read(byte[], int, int)},
+     * {@code readAllBytes()}, {@code readNBytes(byte[], int, int)},
+     * {@code readNBytes(int)}, {@code skip(long)}, and
+     * {@code transferTo()} methods all behave as if end of stream has been
+     * reached.  After the stream has been closed, these methods all throw
+     * {@code IOException}.
+     *
+     * <p> The {@code markSupported()} method returns {@code false}.  The
+     * {@code mark()} method does nothing, and the {@code reset()} method
+     * throws {@code IOException}.
+     *
+     * @return an {@code InputStream} which contains no bytes
+     *
+     * @since 11
+     */
+    public static InputStream nullInputStream() {
+        return new InputStream() {
+            private volatile boolean closed;
+
+            private void ensureOpen() throws IOException {
+                if (closed) {
+                    throw new IOException("Stream closed");
+                }
+            }
+
+            @Override
+            public int available () throws IOException {
+                ensureOpen();
+                return 0;
+            }
+
+            @Override
+            public int read() throws IOException {
+                ensureOpen();
+                return -1;
+            }
+
+            @Override
+            public int read(byte[] b, int off, int len) throws IOException {
+                Objects.checkFromIndexSize(off, len, b.length);
+                if (len == 0) {
+                    return 0;
+                }
+                ensureOpen();
+                return -1;
+            }
+
+            @Override
+            public byte[] readAllBytes() throws IOException {
+                ensureOpen();
+                return new byte[0];
+            }
+
+            @Override
+            public int readNBytes(byte[] b, int off, int len)
+                throws IOException {
+                Objects.checkFromIndexSize(off, len, b.length);
+                ensureOpen();
+                return 0;
+            }
+
+            @Override
+            public byte[] readNBytes(int len) throws IOException {
+                if (len < 0) {
+                    throw new IllegalArgumentException("len < 0");
+                }
+                ensureOpen();
+                return new byte[0];
+            }
+
+            @Override
+            public long skip(long n) throws IOException {
+                ensureOpen();
+                return 0L;
+            }
+
+            @Override
+            public long transferTo(OutputStream out) throws IOException {
+                Objects.requireNonNull(out);
+                ensureOpen();
+                return 0L;
+            }
+
+            @Override
+            public void close() throws IOException {
+                closed = true;
+            }
+        };
+    }
+
+    /**
      * Reads the next byte of data from the input stream. The value byte is
      * returned as an <code>int</code> in the range <code>0</code> to
      * <code>255</code>. If no byte is available because the end of the stream
@@ -144,8 +243,8 @@
      * <code>b</code> and the number of bytes read before the exception
      * occurred is returned. The default implementation of this method blocks
      * until the requested amount of input data <code>len</code> has been read,
-     * end of file is detected, or an exception is thrown. Subclasses are encouraged
-     * to provide a more efficient implementation of this method.
+     * end of file is detected, or an exception is thrown. Subclasses are
+     * encouraged to provide a more efficient implementation of this method.
      *
      * @param      b     the buffer into which the data is read.
      * @param      off   the start offset in array <code>b</code>
@@ -164,7 +263,6 @@
      * @see        java.io.InputStream#read()
      */
     public int read(byte b[], int off, int len) throws IOException {
-        Objects.requireNonNull(b);
         Objects.checkFromIndexSize(off, len, b.length);
         if (len == 0) {
             return 0;
@@ -220,39 +318,125 @@
      * It is strongly recommended that the stream be promptly closed if an I/O
      * error occurs.
      *
+     * @implSpec
+     * This method invokes {@link #readNBytes(int)} with a length of
+     * {@link Integer#MAX_VALUE}.
+     *
      * @return a byte array containing the bytes read from this input stream
      * @throws IOException if an I/O error occurs
      * @throws OutOfMemoryError if an array of the required size cannot be
-     *         allocated. For example, if an array larger than {@code 2GB} would
-     *         be required to store the bytes.
+     *         allocated.
      *
      * @since 9
      */
     public byte[] readAllBytes() throws IOException {
-        byte[] buf = new byte[DEFAULT_BUFFER_SIZE];
-        int capacity = buf.length;
-        int nread = 0;
-        int n;
-        for (;;) {
-            // read to EOF which may read more or less than initial buffer size
-            while ((n = read(buf, nread, capacity - nread)) > 0)
-                nread += n;
+        return readNBytes(Integer.MAX_VALUE);
+    }
+
+    /**
+     * Reads up to a specified number of bytes from the input stream. This
+     * method blocks until the requested number of bytes have been read, end
+     * of stream is detected, or an exception is thrown. This method does not
+     * close the input stream.
+     *
+     * <p> The length of the returned array equals the number of bytes read
+     * from the stream. If {@code len} is zero, then no bytes are read and
+     * an empty byte array is returned. Otherwise, up to {@code len} bytes
+     * are read from the stream. Fewer than {@code len} bytes may be read if
+     * end of stream is encountered.
+     *
+     * <p> When this stream reaches end of stream, further invocations of this
+     * method will return an empty byte array.
+     *
+     * <p> Note that this method is intended for simple cases where it is
+     * convenient to read the specified number of bytes into a byte array. The
+     * total amount of memory allocated by this method is proportional to the
+     * number of bytes read from the stream which is bounded by {@code len}.
+     * Therefore, the method may be safely called with very large values of
+     * {@code len} provided sufficient memory is available.
+     *
+     * <p> The behavior for the case where the input stream is <i>asynchronously
+     * closed</i>, or the thread interrupted during the read, is highly input
+     * stream specific, and therefore not specified.
+     *
+     * <p> If an I/O error occurs reading from the input stream, then it may do
+     * so after some, but not all, bytes have been read. Consequently the input
+     * stream may not be at end of stream and may be in an inconsistent state.
+     * It is strongly recommended that the stream be promptly closed if an I/O
+     * error occurs.
+     *
+     * @implNote
+     * The number of bytes allocated to read data from this stream and return
+     * the result is bounded by {@code 2*(long)len}, inclusive.
+     *
+     * @param len the maximum number of bytes to read
+     * @return a byte array containing the bytes read from this input stream
+     * @throws IllegalArgumentException if {@code length} is negative
+     * @throws IOException if an I/O error occurs
+     * @throws OutOfMemoryError if an array of the required size cannot be
+     *         allocated.
+     *
+     * @since 11
+     */
+    public byte[] readNBytes(int len) throws IOException {
+        if (len < 0) {
+            throw new IllegalArgumentException("len < 0");
+        }
 
-            // if the last call to read returned -1, then we're done
-            if (n < 0)
-                break;
+        List<byte[]> bufs = null;
+        byte[] result = null;
+        int total = 0;
+        int remaining = len;
+        int n;
+        do {
+            byte[] buf = new byte[Math.min(remaining, DEFAULT_BUFFER_SIZE)];
+            int nread = 0;
+
+            // read to EOF which may read more or less than buffer size
+            while ((n = read(buf, nread,
+                    Math.min(buf.length - nread, remaining))) > 0) {
+                nread += n;
+                remaining -= n;
+            }
 
-            // need to allocate a larger buffer
-            if (capacity <= MAX_BUFFER_SIZE - capacity) {
-                capacity = capacity << 1;
-            } else {
-                if (capacity == MAX_BUFFER_SIZE)
+            if (nread > 0) {
+                if (MAX_BUFFER_SIZE - total < nread) {
                     throw new OutOfMemoryError("Required array size too large");
-                capacity = MAX_BUFFER_SIZE;
+                }
+                total += nread;
+                if (result == null) {
+                    result = buf;
+                } else {
+                    if (bufs == null) {
+                        bufs = new ArrayList<>();
+                        bufs.add(result);
+                    }
+                    bufs.add(buf);
+                }
             }
-            buf = Arrays.copyOf(buf, capacity);
+            // if the last call to read returned -1 or the number of bytes
+            // requested have been read then break
+        } while (n >= 0 && remaining > 0);
+
+        if (bufs == null) {
+            if (result == null) {
+                return new byte[0];
+            }
+            return result.length == total ?
+                result : Arrays.copyOf(result, total);
         }
-        return (capacity == nread) ? buf : Arrays.copyOf(buf, nread);
+
+        result = new byte[total];
+        int offset = 0;
+        remaining = total;
+        for (byte[] b : bufs) {
+            int count = Math.min(b.length, remaining);
+            System.arraycopy(b, 0, result, offset, count);
+            offset += count;
+            remaining -= count;
+        }
+
+        return result;
     }
 
     /**
@@ -299,7 +483,6 @@
      * @since 9
      */
     public int readNBytes(byte[] b, int off, int len) throws IOException {
-        Objects.requireNonNull(b);
         Objects.checkFromIndexSize(off, len, b.length);
 
         int n = 0;
--- a/src/java.base/share/classes/java/io/ObjectInputStream.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/io/ObjectInputStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1296,7 +1296,6 @@
      * @throws InvalidClassException if the filter rejects creation
      */
     private void checkArray(Class<?> arrayType, int arrayLength) throws InvalidClassException {
-        Objects.requireNonNull(arrayType);
         if (! arrayType.isArray()) {
             throw new IllegalArgumentException("not an array type");
         }
--- a/src/java.base/share/classes/java/io/OutputStream.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/io/OutputStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,6 +47,51 @@
  */
 public abstract class OutputStream implements Closeable, Flushable {
     /**
+     * Returns a new {@code OutputStream} which discards all bytes.  The
+     * returned stream is initially open.  The stream is closed by calling
+     * the {@code close()} method.  Subsequent calls to {@code close()} have
+     * no effect.
+     *
+     * <p> While the stream is open, the {@code write(int)}, {@code
+     * write(byte[])}, and {@code write(byte[], int, int)} methods do nothing.
+     * After the stream has been closed, these methods all throw {@code
+     * IOException}.
+     *
+     * <p> The {@code flush()} method does nothing.
+     *
+     * @return an {@code OutputStream} which discards all bytes
+     *
+     * @since 11
+     */
+    public static OutputStream nullOutputStream() {
+        return new OutputStream() {
+            private volatile boolean closed;
+
+            private void ensureOpen() throws IOException {
+                if (closed) {
+                    throw new IOException("Stream closed");
+                }
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                ensureOpen();
+            }
+
+            @Override
+            public void write(byte b[], int off, int len) throws IOException {
+                Objects.checkFromIndexSize(off, len, b.length);
+                ensureOpen();
+            }
+
+            @Override
+            public void close() {
+                closed = true;
+            }
+        };
+    }
+
+    /**
      * Writes the specified byte to this output stream. The general
      * contract for <code>write</code> is that one byte is written
      * to the output stream. The byte to be written is the eight
@@ -106,7 +151,6 @@
      *             stream is closed.
      */
     public void write(byte b[], int off, int len) throws IOException {
-        Objects.requireNonNull(b);
         Objects.checkFromIndexSize(off, len, b.length);
         // len == 0 condition implicitly handled by loop bounds
         for (int i = 0 ; i < len ; i++) {
--- a/src/java.base/share/classes/java/lang/ClassLoader.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/ClassLoader.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1876,14 +1876,15 @@
      * value until the system is fully initialized.
      *
      * <p> The name of the built-in system class loader is {@code "app"}.
-     * The class path used by the built-in system class loader is determined
-     * by the system property "{@code java.class.path}" during early
-     * initialization of the VM. If the system property is not defined,
-     * or its value is an empty string, then there is no class path
-     * when the initial module is a module on the application module path,
-     * i.e. <em>a named module</em>. If the initial module is not on
-     * the application module path then the class path defaults to
-     * the current working directory.
+     * The system property "{@code java.class.path}" is read during early
+     * initialization of the VM to determine the class path.
+     * An empty value of "{@code java.class.path}" property is interpreted
+     * differently depending on whether the initial module (the module
+     * containing the main class) is named or unnamed:
+     * If named, the built-in system class loader will have no class path and
+     * will search for classes and resources using the application module path;
+     * otherwise, if unnamed, it will set the class path to the current
+     * working directory.
      *
      * @return  The system {@code ClassLoader}
      *
--- a/src/java.base/share/classes/java/lang/Runtime.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/Runtime.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1099,16 +1099,23 @@
                     m.group(VersionPattern.OPT_GROUP));
 
             // empty '+'
-            if ((m.group(VersionPattern.PLUS_GROUP) != null)
-                    && !build.isPresent()) {
-                if (optional.isPresent()) {
-                    if (pre.isPresent())
-                        throw new IllegalArgumentException("'+' found with"
-                            + " pre-release and optional components:'" + s
-                            + "'");
+            if (!build.isPresent()) {
+                if (m.group(VersionPattern.PLUS_GROUP) != null) {
+                    if (optional.isPresent()) {
+                        if (pre.isPresent())
+                            throw new IllegalArgumentException("'+' found with"
+                                + " pre-release and optional components:'" + s
+                                + "'");
+                    } else {
+                        throw new IllegalArgumentException("'+' found with neither"
+                            + " build or optional components: '" + s + "'");
+                    }
                 } else {
-                    throw new IllegalArgumentException("'+' found with neither"
-                        + " build or optional components: '" + s + "'");
+                    if (optional.isPresent() && !pre.isPresent()) {
+                        throw new IllegalArgumentException("optional component"
+                            + " must be preceeded by a pre-release component"
+                            + " or '+': '" + s + "'");
+                    }
                 }
             }
             return new Version(List.of(version), pre, build, optional);
--- a/src/java.base/share/classes/java/lang/System.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/System.java	Fri Feb 02 01:52:03 2018 +0000
@@ -631,7 +631,8 @@
      * <tr><th scope="row"><code>java.class.version</code></th>
      *     <td>Java class format version number</td></tr>
      * <tr><th scope="row"><code>java.class.path</code></th>
-     *     <td>Java class path</td></tr>
+     *     <td>Java class path  (refer to
+     *        {@link ClassLoader#getSystemClassLoader()} for details)</td></tr>
      * <tr><th scope="row"><code>java.library.path</code></th>
      *     <td>List of paths to search when loading libraries</td></tr>
      * <tr><th scope="row"><code>java.io.tmpdir</code></th>
--- a/src/java.base/share/classes/java/lang/VersionProps.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/VersionProps.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -166,15 +166,8 @@
      * Print version info.
      */
     private static void print(boolean err, boolean newln) {
-        boolean isHeadless = false;
         PrintStream ps = err ? System.err : System.out;
 
-        /* Report that we're running headless if the property is true */
-        String headless = System.getProperty("java.awt.headless");
-        if ( (headless != null) && (headless.equalsIgnoreCase("true")) ) {
-            isHeadless = true;
-        }
-
         /* First line: platform version. */
         if (err) {
             ps.println(launcher_name + " version \"" + java_version + "\""
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandle.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandle.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1667,6 +1667,7 @@
     /** Craft a LambdaForm customized for this particular MethodHandle */
     /*non-public*/
     void customize() {
+        final LambdaForm form = this.form;
         if (form.customized == null) {
             LambdaForm newForm = form.customize(this);
             updateForm(newForm);
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Fri Feb 02 01:52:03 2018 +0000
@@ -3766,6 +3766,7 @@
      * specified in the elements of the {@code filters} array.
      * The first element of the filter array corresponds to the {@code pos}
      * argument of the target, and so on in sequence.
+     * The filter functions are invoked in left to right order.
      * <p>
      * Null arguments in the array are treated as identity functions,
      * and the corresponding arguments left unchanged.
@@ -3836,11 +3837,12 @@
     MethodHandle filterArguments(MethodHandle target, int pos, MethodHandle... filters) {
         filterArgumentsCheckArity(target, pos, filters);
         MethodHandle adapter = target;
-        int curPos = pos-1;  // pre-incremented
-        for (MethodHandle filter : filters) {
-            curPos += 1;
+        // process filters in reverse order so that the invocation of
+        // the resulting adapter will invoke the filters in left-to-right order
+        for (int i = filters.length - 1; i >= 0; --i) {
+            MethodHandle filter = filters[i];
             if (filter == null)  continue;  // ignore null elements of filters
-            adapter = filterArgument(adapter, curPos, filter);
+            adapter = filterArgument(adapter, pos + i, filter);
         }
         return adapter;
     }
--- a/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -2521,7 +2521,7 @@
      * the {@code packageFinder} throws an {@link UncheckedIOException} then
      * {@link IOException} cause will be re-thrown. </p>
      *
-     * <p> The module descriptor is read from the buffer stating at index
+     * <p> The module descriptor is read from the buffer starting at index
      * {@code p}, where {@code p} is the buffer's {@link ByteBuffer#position()
      * position} when this method is invoked. Upon return the buffer's position
      * will be equal to {@code p + n} where {@code n} is the number of bytes
--- a/src/java.base/share/classes/java/lang/ref/Reference.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/lang/ref/Reference.java	Fri Feb 02 01:52:03 2018 +0000
@@ -141,14 +141,6 @@
     }
 
     /*
-     * system property to disable clearing before enqueuing.
-     */
-    private static final class ClearBeforeEnqueue {
-        static final boolean DISABLE =
-            Boolean.getBoolean("jdk.lang.ref.disableClearBeforeEnqueue");
-    }
-
-    /*
      * Atomically get and clear (set to null) the VM's pending list.
      */
     private static native Reference<Object> getAndClearReferencePendingList();
@@ -299,8 +291,7 @@
      *           it was not registered with a queue when it was created
      */
     public boolean enqueue() {
-        if (!ClearBeforeEnqueue.DISABLE)
-            this.referent = null;
+        this.referent = null;
         return this.queue.enqueue(this);
     }
 
--- a/src/java.base/share/classes/java/net/Inet6Address.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/net/Inet6Address.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -595,7 +595,7 @@
         }
 
         ObjectInputStream.GetField gf = s.readFields();
-        byte[] ipaddress = (byte[])gf.get("ipaddress", null);
+        byte[] ipaddress = (byte[])gf.get("ipaddress", new byte[0]);
         int scope_id = gf.get("scope_id", -1);
         boolean scope_id_set = gf.get("scope_id_set", false);
         boolean scope_ifname_set = gf.get("scope_ifname_set", false);
--- a/src/java.base/share/classes/java/net/InetSocketAddress.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/net/InetSocketAddress.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -317,10 +317,9 @@
     }
 
     /**
-     *
      * Gets the {@code InetAddress}.
      *
-     * @return the InetAdress or {@code null} if it is unresolved.
+     * @return the InetAddress or {@code null} if it is unresolved.
      */
     public final InetAddress getAddress() {
         return holder.getAddress();
--- a/src/java.base/share/classes/java/nio/Bits.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Bits.java	Fri Feb 02 01:52:03 2018 +0000
@@ -63,38 +63,38 @@
 
     // -- Unsafe access --
 
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
+    private static final Unsafe UNSAFE = Unsafe.getUnsafe();
 
     static Unsafe unsafe() {
-        return unsafe;
+        return UNSAFE;
     }
 
 
     // -- Processor and memory-system properties --
 
-    private static final ByteOrder byteOrder
-        = unsafe.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+    private static final ByteOrder BYTE_ORDER
+        = UNSAFE.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
 
     static ByteOrder byteOrder() {
-        return byteOrder;
+        return BYTE_ORDER;
     }
 
-    private static int pageSize = -1;
+    private static int PAGE_SIZE = -1;
 
     static int pageSize() {
-        if (pageSize == -1)
-            pageSize = unsafe().pageSize();
-        return pageSize;
+        if (PAGE_SIZE == -1)
+            PAGE_SIZE = unsafe().pageSize();
+        return PAGE_SIZE;
     }
 
     static int pageCount(long size) {
         return (int)(size + (long)pageSize() - 1L) / pageSize();
     }
 
-    private static boolean unaligned = unsafe.unalignedAccess();
+    private static boolean UNALIGNED = UNSAFE.unalignedAccess();
 
     static boolean unaligned() {
-        return unaligned;
+        return UNALIGNED;
     }
 
 
@@ -103,11 +103,11 @@
     // A user-settable upper limit on the maximum amount of allocatable
     // direct buffer memory.  This value may be changed during VM
     // initialization if it is launched with "-XX:MaxDirectMemorySize=<size>".
-    private static volatile long maxMemory = VM.maxDirectMemory();
-    private static final AtomicLong reservedMemory = new AtomicLong();
-    private static final AtomicLong totalCapacity = new AtomicLong();
-    private static final AtomicLong count = new AtomicLong();
-    private static volatile boolean memoryLimitSet;
+    private static volatile long MAX_MEMORY = VM.maxDirectMemory();
+    private static final AtomicLong RESERVED_MEMORY = new AtomicLong();
+    private static final AtomicLong TOTAL_CAPACITY = new AtomicLong();
+    private static final AtomicLong COUNT = new AtomicLong();
+    private static volatile boolean MEMORY_LIMIT_SET;
 
     // max. number of sleeps during try-reserving with exponentially
     // increasing delay before throwing OutOfMemoryError:
@@ -120,9 +120,9 @@
     // which a process may access.  All sizes are specified in bytes.
     static void reserveMemory(long size, int cap) {
 
-        if (!memoryLimitSet && VM.initLevel() >= 1) {
-            maxMemory = VM.maxDirectMemory();
-            memoryLimitSet = true;
+        if (!MEMORY_LIMIT_SET && VM.initLevel() >= 1) {
+            MAX_MEMORY = VM.maxDirectMemory();
+            MEMORY_LIMIT_SET = true;
         }
 
         // optimist!
@@ -200,10 +200,10 @@
         // actual memory usage, which will differ when buffers are page
         // aligned.
         long totalCap;
-        while (cap <= maxMemory - (totalCap = totalCapacity.get())) {
-            if (totalCapacity.compareAndSet(totalCap, totalCap + cap)) {
-                reservedMemory.addAndGet(size);
-                count.incrementAndGet();
+        while (cap <= MAX_MEMORY - (totalCap = TOTAL_CAPACITY.get())) {
+            if (TOTAL_CAPACITY.compareAndSet(totalCap, totalCap + cap)) {
+                RESERVED_MEMORY.addAndGet(size);
+                COUNT.incrementAndGet();
                 return true;
             }
         }
@@ -213,9 +213,9 @@
 
 
     static void unreserveMemory(long size, int cap) {
-        long cnt = count.decrementAndGet();
-        long reservedMem = reservedMemory.addAndGet(-size);
-        long totalCap = totalCapacity.addAndGet(-cap);
+        long cnt = COUNT.decrementAndGet();
+        long reservedMem = RESERVED_MEMORY.addAndGet(-size);
+        long totalCap = TOTAL_CAPACITY.addAndGet(-cap);
         assert cnt >= 0 && reservedMem >= 0 && totalCap >= 0;
     }
 
@@ -234,15 +234,15 @@
                         }
                         @Override
                         public long getCount() {
-                            return Bits.count.get();
+                            return Bits.COUNT.get();
                         }
                         @Override
                         public long getTotalCapacity() {
-                            return Bits.totalCapacity.get();
+                            return Bits.TOTAL_CAPACITY.get();
                         }
                         @Override
                         public long getMemoryUsed() {
-                            return Bits.reservedMemory.get();
+                            return Bits.RESERVED_MEMORY.get();
                         }
                     };
                 }
--- a/src/java.base/share/classes/java/nio/Buffer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Buffer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,6 +26,7 @@
 package java.nio;
 
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.Unsafe;
 
 import java.util.Spliterator;
 
@@ -181,6 +182,8 @@
  */
 
 public abstract class Buffer {
+    // Cached unsafe-access object
+    static final Unsafe UNSAFE = Bits.unsafe();
 
     /**
      * The characteristics of Spliterators that traverse and split elements
@@ -617,6 +620,14 @@
     // -- Package-private methods for bounds checking, etc. --
 
     /**
+     *
+     * @return the base reference, paired with the address
+     * field, which in combination can be used for unsafe access into a heap
+     * buffer or direct byte buffer (and views of).
+     */
+    abstract Object base();
+
+    /**
      * Checks the current position against the limit, throwing a {@link
      * BufferUnderflowException} if it is not smaller than the limit, and then
      * increments the position.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/java/nio/BufferMismatch.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2017, 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.nio;
+
+import jdk.internal.util.ArraysSupport;
+
+/**
+ * Mismatch methods for buffers
+ */
+final class BufferMismatch {
+
+    static int mismatch(ByteBuffer a, int aOff, ByteBuffer b, int bOff, int length) {
+        int i = 0;
+        if (length > 7) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + aOff,
+                    b.base(), b.address + bOff,
+                    length,
+                    ArraysSupport.LOG2_ARRAY_BYTE_INDEX_SCALE);
+            if (i >= 0) return i;
+            i = length - ~i;
+        }
+        for (; i < length; i++) {
+            if (a.get(aOff + i) != b.get(bOff + i))
+                return i;
+        }
+        return -1;
+    }
+
+    static int mismatch(CharBuffer a, int aOff, CharBuffer b, int bOff, int length) {
+        int i = 0;
+        // Ensure only heap or off-heap buffer instances use the
+        // vectorized mismatch. If either buffer is a StringCharBuffer
+        // (order is null) then the slow path is taken
+        if (length > 3 && a.charRegionOrder() == b.charRegionOrder()
+            && a.charRegionOrder() != null && b.charRegionOrder() != null) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + (aOff << ArraysSupport.LOG2_ARRAY_CHAR_INDEX_SCALE),
+                    b.base(), b.address + (bOff << ArraysSupport.LOG2_ARRAY_CHAR_INDEX_SCALE),
+                    length,
+                    ArraysSupport.LOG2_ARRAY_CHAR_INDEX_SCALE);
+            if (i >= 0) return i;
+            i = length - ~i;
+        }
+        for (; i < length; i++) {
+            if (a.get(aOff + i) != b.get(bOff + i))
+                return i;
+        }
+        return -1;
+    }
+
+    static int mismatch(ShortBuffer a, int aOff, ShortBuffer b, int bOff, int length) {
+        int i = 0;
+        if (length > 3 && a.order() == b.order()) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + (aOff << ArraysSupport.LOG2_ARRAY_SHORT_INDEX_SCALE),
+                    b.base(), b.address + (bOff << ArraysSupport.LOG2_ARRAY_SHORT_INDEX_SCALE),
+                    length,
+                    ArraysSupport.LOG2_ARRAY_SHORT_INDEX_SCALE);
+            if (i >= 0) return i;
+            i = length - ~i;
+        }
+        for (; i < length; i++) {
+            if (a.get(aOff + i) != b.get(bOff + i))
+                return i;
+        }
+        return -1;
+    }
+
+    static int mismatch(IntBuffer a, int aOff, IntBuffer b, int bOff, int length) {
+        int i = 0;
+        if (length > 1 && a.order() == b.order()) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + (aOff << ArraysSupport.LOG2_ARRAY_INT_INDEX_SCALE),
+                    b.base(), b.address + (bOff << ArraysSupport.LOG2_ARRAY_INT_INDEX_SCALE),
+                    length,
+                    ArraysSupport.LOG2_ARRAY_INT_INDEX_SCALE);
+            if (i >= 0) return i;
+            i = length - ~i;
+        }
+        for (; i < length; i++) {
+            if (a.get(aOff + i) != b.get(bOff + i))
+                return i;
+        }
+        return -1;
+    }
+
+    static int mismatch(FloatBuffer a, int aOff, FloatBuffer b, int bOff, int length) {
+        int i = 0;
+        if (length > 1 && a.order() == b.order()) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + (aOff << ArraysSupport.LOG2_ARRAY_FLOAT_INDEX_SCALE),
+                    b.base(), b.address + (bOff << ArraysSupport.LOG2_ARRAY_FLOAT_INDEX_SCALE),
+                    length,
+                    ArraysSupport.LOG2_ARRAY_FLOAT_INDEX_SCALE);
+            // Mismatched
+            if (i >= 0) {
+                // Check if mismatch is not associated with two NaN values; and
+                // is not associated with +0 and -0
+                float av = a.get(aOff + i);
+                float bv = b.get(bOff + i);
+                if (av != bv && (!Float.isNaN(av) || !Float.isNaN(bv)))
+                    return i;
+
+                // 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++) {
+            float av = a.get(aOff + i);
+            float bv = b.get(bOff + i);
+            if (av != bv && (!Float.isNaN(av) || !Float.isNaN(bv)))
+                return i;
+        }
+        return -1;
+    }
+
+    static int mismatch(LongBuffer a, int aOff, LongBuffer b, int bOff, int length) {
+        int i = 0;
+        if (length > 0 && a.order() == b.order()) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + (aOff << ArraysSupport.LOG2_ARRAY_LONG_INDEX_SCALE),
+                    b.base(), b.address + (bOff << ArraysSupport.LOG2_ARRAY_LONG_INDEX_SCALE),
+                    length,
+                    ArraysSupport.LOG2_ARRAY_LONG_INDEX_SCALE);
+            return i >= 0 ? i : -1;
+        }
+        for (; i < length; i++) {
+            if (a.get(aOff + i) != b.get(bOff + i))
+                return i;
+        }
+        return -1;
+    }
+
+    static int mismatch(DoubleBuffer a, int aOff, DoubleBuffer b, int bOff, int length) {
+        int i = 0;
+        if (length > 0 && a.order() == b.order()) {
+            i = ArraysSupport.vectorizedMismatch(
+                    a.base(), a.address + (aOff << ArraysSupport.LOG2_ARRAY_DOUBLE_INDEX_SCALE),
+                    b.base(), b.address + (bOff << ArraysSupport.LOG2_ARRAY_DOUBLE_INDEX_SCALE),
+                    length,
+                    ArraysSupport.LOG2_ARRAY_DOUBLE_INDEX_SCALE);
+            // Mismatched
+            if (i >= 0) {
+                // Check if mismatch is not associated with two NaN values; and
+                // is not associated with +0 and -0
+                double av = a.get(aOff + i);
+                double bv = b.get(bOff + i);
+                if (av != bv && (!Double.isNaN(av) || !Double.isNaN(bv)))
+                    return i;
+
+                // 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 {
+                return -1;
+            }
+        }
+        for (; i < length; i++) {
+            double av = a.get(aOff + i);
+            double bv = b.get(bOff + i);
+            if (av != bv && (!Double.isNaN(av) || !Double.isNaN(bv)))
+                return i;
+        }
+        return -1;
+    }
+}
--- a/src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -36,9 +36,6 @@
 
 #if[rw]
 
-    // Cached unsafe-access object
-    private static final Unsafe unsafe = Bits.unsafe();
-
     protected final ByteBuffer bb;
 
 #end[rw]
@@ -74,6 +71,11 @@
 #end[rw]
     }
 
+    @Override
+    Object base() {
+        return bb.hb;
+    }
+
     public $Type$Buffer slice() {
         int pos = this.position();
         int lim = this.limit();
@@ -117,20 +119,20 @@
     }
 
     public $type$ get() {
-        $memtype$ x = unsafe.get$Memtype$Unaligned(bb.hb, byteOffset(nextGetIndex()),
+        $memtype$ x = UNSAFE.get$Memtype$Unaligned(bb.hb, byteOffset(nextGetIndex()),
             {#if[boB]?true:false});
         return $fromBits$(x);
     }
 
     public $type$ get(int i) {
-        $memtype$ x = unsafe.get$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)),
+        $memtype$ x = UNSAFE.get$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)),
             {#if[boB]?true:false});
         return $fromBits$(x);
     }
 
 #if[streamableType]
    $type$ getUnchecked(int i) {
-        $memtype$ x = unsafe.get$Memtype$Unaligned(bb.hb, byteOffset(i),
+        $memtype$ x = UNSAFE.get$Memtype$Unaligned(bb.hb, byteOffset(i),
             {#if[boB]?true:false});
         return $fromBits$(x);
     }
@@ -141,7 +143,7 @@
     public $Type$Buffer put($type$ x) {
 #if[rw]
         $memtype$ y = $toBits$(x);
-        unsafe.put$Memtype$Unaligned(bb.hb, byteOffset(nextPutIndex()), y,
+        UNSAFE.put$Memtype$Unaligned(bb.hb, byteOffset(nextPutIndex()), y,
             {#if[boB]?true:false});
         return this;
 #else[rw]
@@ -152,7 +154,7 @@
     public $Type$Buffer put(int i, $type$ x) {
 #if[rw]
         $memtype$ y = $toBits$(x);
-        unsafe.put$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)), y,
+        UNSAFE.put$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)), y,
             {#if[boB]?true:false});
         return this;
 #else[rw]
@@ -241,4 +243,9 @@
 #end[boL]
     }
 
+#if[char]
+    ByteOrder charRegionOrder() {
+        return order();
+    }
+#end[char]
 }
--- a/src/java.base/share/classes/java/nio/Direct-X-Buffer-bin.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Direct-X-Buffer-bin.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -32,7 +32,7 @@
 #if[rw]
 
     private $type$ get$Type$(long a) {
-        $memtype$ x = unsafe.get$Memtype$Unaligned(null, a, bigEndian);
+        $memtype$ x = UNSAFE.get$Memtype$Unaligned(null, a, bigEndian);
         return $fromBits$(x);
     }
 
@@ -49,7 +49,7 @@
     private ByteBuffer put$Type$(long a, $type$ x) {
 #if[rw]
         $memtype$ y = $toBits$(x);
-        unsafe.put$Memtype$Unaligned(null, a, y, bigEndian);
+        UNSAFE.put$Memtype$Unaligned(null, a, y, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -81,7 +81,7 @@
         int rem = (off <= lim ? lim - off : 0);
 
         int size = rem >> $LG_BYTES_PER_VALUE$;
-        if (!unaligned && ((address + off) % $BYTES_PER_VALUE$ != 0)) {
+        if (!UNALIGNED && ((address + off) % $BYTES_PER_VALUE$ != 0)) {
             return (bigEndian
                     ? ($Type$Buffer)(new ByteBufferAs$Type$Buffer$RW$B(this,
                                                                        -1,
--- a/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,6 @@
 package java.nio;
 
 import java.io.FileDescriptor;
-import jdk.internal.misc.Unsafe;
 import jdk.internal.misc.VM;
 import jdk.internal.ref.Cleaner;
 import sun.nio.ch.DirectBuffer;
@@ -45,14 +44,11 @@
 
 #if[rw]
 
-    // Cached unsafe-access object
-    protected static final Unsafe unsafe = Bits.unsafe();
-
     // Cached array base offset
-    private static final long arrayBaseOffset = (long)unsafe.arrayBaseOffset($type$[].class);
+    private static final long ARRAY_BASE_OFFSET = UNSAFE.arrayBaseOffset($type$[].class);
 
     // Cached unaligned-access capability
-    protected static final boolean unaligned = Bits.unaligned();
+    protected static final boolean UNALIGNED = Bits.unaligned();
 
     // Base address, used in all indexing calculations
     // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress
@@ -73,8 +69,6 @@
         implements Runnable
     {
 
-        private static Unsafe unsafe = Unsafe.getUnsafe();
-
         private long address;
         private long size;
         private int capacity;
@@ -91,7 +85,7 @@
                 // Paranoia
                 return;
             }
-            unsafe.freeMemory(address);
+            UNSAFE.freeMemory(address);
             address = 0;
             Bits.unreserveMemory(size, capacity);
         }
@@ -124,12 +118,12 @@
 
         long base = 0;
         try {
-            base = unsafe.allocateMemory(size);
+            base = UNSAFE.allocateMemory(size);
         } catch (OutOfMemoryError x) {
             Bits.unreserveMemory(size, cap);
             throw x;
         }
-        unsafe.setMemory(base, size, (byte) 0);
+        UNSAFE.setMemory(base, size, (byte) 0);
         if (pa && (base % ps != 0)) {
             // Round up to page boundary
             address = base + ps - (base & (ps - 1));
@@ -206,6 +200,11 @@
 #end[rw]
     }
 
+    @Override
+    Object base() {
+        return null;
+    }
+
     public $Type$Buffer slice() {
         int pos = this.position();
         int lim = this.limit();
@@ -258,16 +257,16 @@
     }
 
     public $type$ get() {
-        return $fromBits$($swap$(unsafe.get$Swaptype$(ix(nextGetIndex()))));
+        return $fromBits$($swap$(UNSAFE.get$Swaptype$(ix(nextGetIndex()))));
     }
 
     public $type$ get(int i) {
-        return $fromBits$($swap$(unsafe.get$Swaptype$(ix(checkIndex(i)))));
+        return $fromBits$($swap$(UNSAFE.get$Swaptype$(ix(checkIndex(i)))));
     }
 
 #if[streamableType]
     $type$ getUnchecked(int i) {
-        return $fromBits$($swap$(unsafe.get$Swaptype$(ix(i))));
+        return $fromBits$($swap$(UNSAFE.get$Swaptype$(ix(i))));
     }
 #end[streamableType]
 
@@ -282,10 +281,10 @@
             if (length > rem)
                 throw new BufferUnderflowException();
 
-            long dstOffset = arrayBaseOffset + ((long)offset << $LG_BYTES_PER_VALUE$);
+            long dstOffset = ARRAY_BASE_OFFSET + ((long)offset << $LG_BYTES_PER_VALUE$);
 #if[!byte]
             if (order() != ByteOrder.nativeOrder())
-                unsafe.copySwapMemory(null,
+                UNSAFE.copySwapMemory(null,
                                       ix(pos),
                                       dst,
                                       dstOffset,
@@ -293,7 +292,7 @@
                                       (long)1 << $LG_BYTES_PER_VALUE$);
             else
 #end[!byte]
-                unsafe.copyMemory(null,
+                UNSAFE.copyMemory(null,
                                   ix(pos),
                                   dst,
                                   dstOffset,
@@ -312,7 +311,7 @@
 
     public $Type$Buffer put($type$ x) {
 #if[rw]
-        unsafe.put$Swaptype$(ix(nextPutIndex()), $swap$($toBits$(x)));
+        UNSAFE.put$Swaptype$(ix(nextPutIndex()), $swap$($toBits$(x)));
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -321,7 +320,7 @@
 
     public $Type$Buffer put(int i, $type$ x) {
 #if[rw]
-        unsafe.put$Swaptype$(ix(checkIndex(i)), $swap$($toBits$(x)));
+        UNSAFE.put$Swaptype$(ix(checkIndex(i)), $swap$($toBits$(x)));
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -347,7 +346,7 @@
 
             if (srem > rem)
                 throw new BufferOverflowException();
-            unsafe.copyMemory(sb.ix(spos), ix(pos), (long)srem << $LG_BYTES_PER_VALUE$);
+            UNSAFE.copyMemory(sb.ix(spos), ix(pos), (long)srem << $LG_BYTES_PER_VALUE$);
             sb.position(spos + srem);
             position(pos + srem);
         } else if (src.hb != null) {
@@ -380,10 +379,10 @@
             if (length > rem)
                 throw new BufferOverflowException();
 
-            long srcOffset = arrayBaseOffset + ((long)offset << $LG_BYTES_PER_VALUE$);
+            long srcOffset = ARRAY_BASE_OFFSET + ((long)offset << $LG_BYTES_PER_VALUE$);
 #if[!byte]
             if (order() != ByteOrder.nativeOrder())
-                unsafe.copySwapMemory(src,
+                UNSAFE.copySwapMemory(src,
                                       srcOffset,
                                       null,
                                       ix(pos),
@@ -391,7 +390,7 @@
                                       (long)1 << $LG_BYTES_PER_VALUE$);
             else
 #end[!byte]
-                unsafe.copyMemory(src,
+                UNSAFE.copyMemory(src,
                                   srcOffset,
                                   null,
                                   ix(pos),
@@ -413,7 +412,7 @@
         assert (pos <= lim);
         int rem = (pos <= lim ? lim - pos : 0);
 
-        unsafe.copyMemory(ix(pos), ix(0), (long)rem << $LG_BYTES_PER_VALUE$);
+        UNSAFE.copyMemory(ix(pos), ix(0), (long)rem << $LG_BYTES_PER_VALUE$);
         position(rem);
         limit(capacity());
         discardMark();
@@ -490,17 +489,22 @@
 
 #end[!byte]
 
+#if[char]
+    ByteOrder charRegionOrder() {
+        return order();
+    }
+#end[char]
 
 
 #if[byte]
 
     byte _get(int i) {                          // package-private
-        return unsafe.getByte(address + i);
+        return UNSAFE.getByte(address + i);
     }
 
     void _put(int i, byte b) {                  // package-private
 #if[rw]
-        unsafe.putByte(address + i, b);
+        UNSAFE.putByte(address + i, b);
 #else[rw]
         throw new ReadOnlyBufferException();
 #end[rw]
--- a/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -27,8 +27,6 @@
 
 package java.nio;
 
-import jdk.internal.misc.Unsafe;
-
 /**
 #if[rw]
  * A read/write Heap$Type$Buffer.
@@ -43,6 +41,11 @@
 class Heap$Type$Buffer$RW$
     extends {#if[ro]?Heap}$Type$Buffer
 {
+    // Cached array base offset
+    private static final long ARRAY_BASE_OFFSET = UNSAFE.arrayBaseOffset($type$[].class);
+
+    // Cached array base offset
+    private static final long ARRAY_INDEX_SCALE = UNSAFE.arrayIndexScale($type$[].class);
 
     // For speed these fields are actually declared in X-Buffer;
     // these declarations are here as documentation
@@ -53,16 +56,6 @@
 #end[rw]
     */
 
-#if[byte]
-
-    // Cached unsafe-access object
-    private static final Unsafe unsafe = Bits.unsafe();
-
-    // Cached array base offset
-    private static final long arrayBaseOffset = unsafe.arrayBaseOffset($type$[].class);
-
-#end[byte]
-
     Heap$Type$Buffer$RW$(int cap, int lim) {            // package-private
 #if[rw]
         super(-1, 0, lim, cap, new $type$[cap], 0);
@@ -70,13 +63,11 @@
         hb = new $type$[cap];
         offset = 0;
         */
+        this.address = ARRAY_BASE_OFFSET;
 #else[rw]
         super(cap, lim);
         this.isReadOnly = true;
 #end[rw]
-#if[byte]
-        this.address = arrayBaseOffset;
-#end[byte]
     }
 
     Heap$Type$Buffer$RW$($type$[] buf, int off, int len) { // package-private
@@ -86,13 +77,11 @@
         hb = buf;
         offset = 0;
         */
+        this.address = ARRAY_BASE_OFFSET;
 #else[rw]
         super(buf, off, len);
         this.isReadOnly = true;
 #end[rw]
-#if[byte]
-        this.address = arrayBaseOffset;
-#end[byte]
     }
 
     protected Heap$Type$Buffer$RW$($type$[] buf,
@@ -105,13 +94,11 @@
         hb = buf;
         offset = off;
         */
+        this.address = ARRAY_BASE_OFFSET + off * ARRAY_INDEX_SCALE;
 #else[rw]
         super(buf, mark, pos, lim, cap, off);
         this.isReadOnly = true;
 #end[rw]
-#if[byte]
-        this.address = arrayBaseOffset + off;
-#end[byte]
     }
 
     public $Type$Buffer slice() {
@@ -296,18 +283,18 @@
 #if[rw]
 
     public char getChar() {
-        return unsafe.getCharUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
+        return UNSAFE.getCharUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
     }
 
     public char getChar(int i) {
-        return unsafe.getCharUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
+        return UNSAFE.getCharUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
     }
 
 #end[rw]
 
     public $Type$Buffer putChar(char x) {
 #if[rw]
-        unsafe.putCharUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
+        UNSAFE.putCharUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -316,7 +303,7 @@
 
     public $Type$Buffer putChar(int i, char x) {
 #if[rw]
-        unsafe.putCharUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
+        UNSAFE.putCharUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -347,18 +334,18 @@
 #if[rw]
 
     public short getShort() {
-        return unsafe.getShortUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
+        return UNSAFE.getShortUnaligned(hb, byteOffset(nextGetIndex(2)), bigEndian);
     }
 
     public short getShort(int i) {
-        return unsafe.getShortUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
+        return UNSAFE.getShortUnaligned(hb, byteOffset(checkIndex(i, 2)), bigEndian);
     }
 
 #end[rw]
 
     public $Type$Buffer putShort(short x) {
 #if[rw]
-        unsafe.putShortUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
+        UNSAFE.putShortUnaligned(hb, byteOffset(nextPutIndex(2)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -367,7 +354,7 @@
 
     public $Type$Buffer putShort(int i, short x) {
 #if[rw]
-        unsafe.putShortUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
+        UNSAFE.putShortUnaligned(hb, byteOffset(checkIndex(i, 2)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -398,18 +385,18 @@
 #if[rw]
 
     public int getInt() {
-        return unsafe.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
+        return UNSAFE.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
     }
 
     public int getInt(int i) {
-        return unsafe.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
+        return UNSAFE.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
     }
 
 #end[rw]
 
     public $Type$Buffer putInt(int x) {
 #if[rw]
-        unsafe.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), x, bigEndian);
+        UNSAFE.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -418,7 +405,7 @@
 
     public $Type$Buffer putInt(int i, int x) {
 #if[rw]
-        unsafe.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), x, bigEndian);
+        UNSAFE.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -449,18 +436,18 @@
 #if[rw]
 
     public long getLong() {
-        return unsafe.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
+        return UNSAFE.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
     }
 
     public long getLong(int i) {
-        return unsafe.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
+        return UNSAFE.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
     }
 
 #end[rw]
 
     public $Type$Buffer putLong(long x) {
 #if[rw]
-        unsafe.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), x, bigEndian);
+        UNSAFE.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -469,7 +456,7 @@
 
     public $Type$Buffer putLong(int i, long x) {
 #if[rw]
-        unsafe.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), x, bigEndian);
+        UNSAFE.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), x, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -500,12 +487,12 @@
 #if[rw]
 
     public float getFloat() {
-        int x = unsafe.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
+        int x = UNSAFE.getIntUnaligned(hb, byteOffset(nextGetIndex(4)), bigEndian);
         return Float.intBitsToFloat(x);
     }
 
     public float getFloat(int i) {
-        int x = unsafe.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
+        int x = UNSAFE.getIntUnaligned(hb, byteOffset(checkIndex(i, 4)), bigEndian);
         return Float.intBitsToFloat(x);
     }
 
@@ -514,7 +501,7 @@
     public $Type$Buffer putFloat(float x) {
 #if[rw]
         int y = Float.floatToRawIntBits(x);
-        unsafe.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), y, bigEndian);
+        UNSAFE.putIntUnaligned(hb, byteOffset(nextPutIndex(4)), y, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -524,7 +511,7 @@
     public $Type$Buffer putFloat(int i, float x) {
 #if[rw]
         int y = Float.floatToRawIntBits(x);
-        unsafe.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), y, bigEndian);
+        UNSAFE.putIntUnaligned(hb, byteOffset(checkIndex(i, 4)), y, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -555,12 +542,12 @@
 #if[rw]
 
     public double getDouble() {
-        long x = unsafe.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
+        long x = UNSAFE.getLongUnaligned(hb, byteOffset(nextGetIndex(8)), bigEndian);
         return Double.longBitsToDouble(x);
     }
 
     public double getDouble(int i) {
-        long x = unsafe.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
+        long x = UNSAFE.getLongUnaligned(hb, byteOffset(checkIndex(i, 8)), bigEndian);
         return Double.longBitsToDouble(x);
     }
 
@@ -569,7 +556,7 @@
     public $Type$Buffer putDouble(double x) {
 #if[rw]
         long y = Double.doubleToRawLongBits(x);
-        unsafe.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), y, bigEndian);
+        UNSAFE.putLongUnaligned(hb, byteOffset(nextPutIndex(8)), y, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -579,7 +566,7 @@
     public $Type$Buffer putDouble(int i, double x) {
 #if[rw]
         long y = Double.doubleToRawLongBits(x);
-        unsafe.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), y, bigEndian);
+        UNSAFE.putLongUnaligned(hb, byteOffset(checkIndex(i, 8)), y, bigEndian);
         return this;
 #else[rw]
         throw new ReadOnlyBufferException();
@@ -643,7 +630,11 @@
     public ByteOrder order() {
         return ByteOrder.nativeOrder();
     }
+#end[!byte]
+#if[char]
 
-#end[!byte]
-
+    ByteOrder charRegionOrder() {
+        return order();
+    }
+#end[char]
 }
--- a/src/java.base/share/classes/java/nio/StringCharBuffer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/StringCharBuffer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -127,4 +127,30 @@
         return ByteOrder.nativeOrder();
     }
 
+    ByteOrder charRegionOrder() {
+        return null;
+    }
+
+    public boolean equals(Object ob) {
+        if (this == ob)
+            return true;
+        if (!(ob instanceof CharBuffer))
+            return false;
+        CharBuffer that = (CharBuffer)ob;
+        if (this.remaining() != that.remaining())
+            return false;
+        return BufferMismatch.mismatch(this, this.position(),
+                                       that, that.position(),
+                                       this.remaining()) < 0;
+    }
+
+    public int compareTo(CharBuffer that) {
+        int i = BufferMismatch.mismatch(this, this.position(),
+                                        that, that.position(),
+                                        Math.min(this.remaining(), that.remaining()));
+        if (i >= 0) {
+            return Character.compare(this.get(this.position() + i), that.get(this.position() + i));
+        }
+        return this.remaining() - that.remaining();
+    }
 }
--- a/src/java.base/share/classes/java/nio/X-Buffer.java.template	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/X-Buffer.java.template	Fri Feb 02 01:52:03 2018 +0000
@@ -36,6 +36,8 @@
 import java.util.stream.$Streamtype$Stream;
 #end[streamableType]
 
+import jdk.internal.util.ArraysSupport;
+
 /**
  * $A$ $type$ buffer.
  *
@@ -287,6 +289,11 @@
         this(mark, pos, lim, cap, null, 0);
     }
 
+    @Override
+    Object base() {
+        return hb;
+    }
+
 #if[byte]
 
     /**
@@ -1297,19 +1304,9 @@
         $Type$Buffer that = ($Type$Buffer)ob;
         if (this.remaining() != that.remaining())
             return false;
-        int p = this.position();
-        for (int i = this.limit() - 1, j = that.limit() - 1; i >= p; i--, j--)
-            if (!equals(this.get(i), that.get(j)))
-                return false;
-        return true;
-    }
-
-    private static boolean equals($type$ x, $type$ y) {
-#if[floatingPointType]
-        return (x == y) || ($Fulltype$.isNaN(x) && $Fulltype$.isNaN(y));
-#else[floatingPointType]
-        return x == y;
-#end[floatingPointType]
+        return BufferMismatch.mismatch(this, this.position(),
+                                       that, that.position(),
+                                       this.remaining()) < 0;
     }
 
     /**
@@ -1336,11 +1333,11 @@
      *          is less than, equal to, or greater than the given buffer
      */
     public int compareTo($Type$Buffer that) {
-        int n = this.position() + Math.min(this.remaining(), that.remaining());
-        for (int i = this.position(), j = that.position(); i < n; i++, j++) {
-            int cmp = compare(this.get(i), that.get(j));
-            if (cmp != 0)
-                return cmp;
+        int i = BufferMismatch.mismatch(this, this.position(),
+                                        that, that.position(),
+                                        Math.min(this.remaining(), that.remaining()));
+        if (i >= 0) {
+            return compare(this.get(this.position() + i), that.get(this.position() + i));
         }
         return this.remaining() - that.remaining();
     }
@@ -1571,6 +1568,12 @@
 
 #end[!byte]
 
+#if[char]
+    // The order or null if the buffer does not cover a memory region,
+    // such as StringCharBuffer
+    abstract ByteOrder charRegionOrder();
+#end[char]
+
 #if[byte]
 
     boolean bigEndian                                   // package-private
--- a/src/java.base/share/classes/java/nio/file/Files.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/nio/file/Files.java	Fri Feb 02 01:52:03 2018 +0000
@@ -2955,22 +2955,6 @@
     }
 
     /**
-     * Reads all bytes from an input stream and writes them to an output stream.
-     */
-    private static long copy(InputStream source, OutputStream sink)
-        throws IOException
-    {
-        long nread = 0L;
-        byte[] buf = new byte[BUFFER_SIZE];
-        int n;
-        while ((n = source.read(buf)) > 0) {
-            sink.write(buf, 0, n);
-            nread += n;
-        }
-        return nread;
-    }
-
-    /**
      * Copies all bytes from an input stream to a file. On return, the input
      * stream will be at end of stream.
      *
@@ -3082,7 +3066,7 @@
 
         // do the copy
         try (OutputStream out = ostream) {
-            return copy(in, out);
+            return in.transferTo(out);
         }
     }
 
@@ -3124,7 +3108,7 @@
         Objects.requireNonNull(out);
 
         try (InputStream in = newInputStream(source)) {
-            return copy(in, out);
+            return in.transferTo(out);
         }
     }
 
--- a/src/java.base/share/classes/java/text/DateFormatSymbols.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/text/DateFormatSymbols.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -394,6 +394,12 @@
 
     /**
      * Gets month strings. For example: "January", "February", etc.
+     * An array with either 12 or 13 elements will be returned depending
+     * on whether or not {@link java.util.Calendar#UNDECIMBER Calendar.UNDECIMBER}
+     * is supported. Use
+     * {@link java.util.Calendar#JANUARY Calendar.JANUARY},
+     * {@link java.util.Calendar#FEBRUARY Calendar.FEBRUARY},
+     * etc. to index the result array.
      *
      * <p>If the language requires different forms for formatting and
      * stand-alone usages, this method returns month names in the
@@ -405,10 +411,9 @@
      * Calendar Elements in the Unicode Locale Data Markup Language
      * (LDML) specification</a> for more details.
      *
-     * @return the month strings. Use
-     * {@link java.util.Calendar#JANUARY Calendar.JANUARY},
-     * {@link java.util.Calendar#FEBRUARY Calendar.FEBRUARY},
-     * etc. to index the result array.
+     * @implSpec This method returns 13 elements since
+     * {@link java.util.Calendar#UNDECIMBER Calendar.UNDECIMBER} is supported.
+     * @return the month strings.
      */
     public String[] getMonths() {
         return Arrays.copyOf(months, months.length);
@@ -427,6 +432,12 @@
 
     /**
      * Gets short month strings. For example: "Jan", "Feb", etc.
+     * An array with either 12 or 13 elements will be returned depending
+     * on whether or not {@link java.util.Calendar#UNDECIMBER Calendar.UNDECIMBER}
+     * is supported. Use
+     * {@link java.util.Calendar#JANUARY Calendar.JANUARY},
+     * {@link java.util.Calendar#FEBRUARY Calendar.FEBRUARY},
+     * etc. to index the result array.
      *
      * <p>If the language requires different forms for formatting and
      * stand-alone usages, this method returns short month names in
@@ -438,10 +449,9 @@
      * Calendar Elements in the Unicode Locale Data Markup Language
      * (LDML) specification</a> for more details.
      *
-     * @return the short month strings. Use
-     * {@link java.util.Calendar#JANUARY Calendar.JANUARY},
-     * {@link java.util.Calendar#FEBRUARY Calendar.FEBRUARY},
-     * etc. to index the result array.
+     * @implSpec This method returns 13 elements since
+     * {@link java.util.Calendar#UNDECIMBER Calendar.UNDECIMBER} is supported.
+     * @return the short month strings.
      */
     public String[] getShortMonths() {
         return Arrays.copyOf(shortMonths, shortMonths.length);
--- a/src/java.base/share/classes/java/time/temporal/IsoFields.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/time/temporal/IsoFields.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -708,9 +708,8 @@
                     return (R) temporal.with(WEEK_BASED_YEAR,
                             Math.addExact(temporal.get(WEEK_BASED_YEAR), amount));
                 case QUARTER_YEARS:
-                    // no overflow (256 is multiple of 4)
-                    return (R) temporal.plus(amount / 256, YEARS)
-                            .plus((amount % 256) * 3, MONTHS);
+                    return (R) temporal.plus(amount / 4, YEARS)
+                            .plus((amount % 4) * 3, MONTHS);
                 default:
                     throw new IllegalStateException("Unreachable");
             }
--- a/src/java.base/share/classes/java/util/ArrayList.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/ArrayList.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1143,6 +1143,23 @@
             return modified;
         }
 
+        public Object[] toArray() {
+            checkForComodification();
+            return Arrays.copyOfRange(root.elementData, offset, offset + size);
+        }
+
+        @SuppressWarnings("unchecked")
+        public <T> T[] toArray(T[] a) {
+            checkForComodification();
+            if (a.length < size)
+                return (T[]) Arrays.copyOfRange(
+                        root.elementData, offset, offset + size, a.getClass());
+            System.arraycopy(root.elementData, offset, a, 0, size);
+            if (a.length > size)
+                a[size] = null;
+            return a;
+        }
+
         public Iterator<E> iterator() {
             return listIterator();
         }
@@ -1550,7 +1567,6 @@
                     setBit(deathRow, i - beg);
             if (modCount != expectedModCount)
                 throw new ConcurrentModificationException();
-            expectedModCount++;
             modCount++;
             int w = beg;
             for (i = beg; i < end; i++)
--- a/src/java.base/share/classes/java/util/Arrays.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/Arrays.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,6 +26,7 @@
 package java.util;
 
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.util.ArraysSupport;
 
 import java.lang.reflect.Array;
 import java.util.concurrent.ForkJoinPool;
--- a/src/java.base/share/classes/java/util/ArraysSupport.java	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,545 +0,0 @@
-/*
- * 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/src/java.base/share/classes/java/util/Base64.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/Base64.java	Fri Feb 02 01:52:03 2018 +0000
@@ -116,8 +116,8 @@
      *
      * @param   lineLength
      *          the length of each output line (rounded down to nearest multiple
-     *          of 4). If {@code lineLength <= 0} the output will not be separated
-     *          in lines
+     *          of 4). If the rounded down line length is not a positive value,
+     *          the output will not be separated in lines
      * @param   lineSeparator
      *          the line separator for each output line
      *
@@ -135,10 +135,12 @@
                  throw new IllegalArgumentException(
                      "Illegal base64 line separator character 0x" + Integer.toString(b, 16));
          }
+         // round down to nearest multiple of 4
+         lineLength &= ~0b11;
          if (lineLength <= 0) {
              return Encoder.RFC4648;
          }
-         return new Encoder(false, lineSeparator, lineLength >> 2 << 2, true);
+         return new Encoder(false, lineSeparator, lineLength, true);
     }
 
     /**
--- a/src/java.base/share/classes/java/util/Vector.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/Vector.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1023,7 +1023,6 @@
                     setBit(deathRow, i - beg);
             if (modCount != expectedModCount)
                 throw new ConcurrentModificationException();
-            expectedModCount++;
             modCount++;
             int w = beg;
             for (i = beg; i < end; i++)
--- a/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java	Fri Feb 02 01:52:03 2018 +0000
@@ -245,8 +245,7 @@
                 Future<T> f = futures.get(i);
                 if (!f.isDone()) {
                     try { f.get(); }
-                    catch (CancellationException ignore) {}
-                    catch (ExecutionException ignore) {}
+                    catch (CancellationException | ExecutionException ignore) {}
                 }
             }
             return futures;
@@ -283,8 +282,7 @@
                 Future<T> f = futures.get(j);
                 if (!f.isDone()) {
                     try { f.get(deadline - System.nanoTime(), NANOSECONDS); }
-                    catch (CancellationException ignore) {}
-                    catch (ExecutionException ignore) {}
+                    catch (CancellationException | ExecutionException ignore) {}
                     catch (TimeoutException timedOut) {
                         break timedOut;
                     }
--- a/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -717,12 +717,12 @@
      */
     static Class<?> comparableClassFor(Object x) {
         if (x instanceof Comparable) {
-            Class<?> c; Type[] ts, as; Type t; ParameterizedType p;
+            Class<?> c; Type[] ts, as; ParameterizedType p;
             if ((c = x.getClass()) == String.class) // bypass checks
                 return c;
             if ((ts = c.getGenericInterfaces()) != null) {
-                for (int i = 0; i < ts.length; ++i) {
-                    if (((t = ts[i]) instanceof ParameterizedType) &&
+                for (Type t : ts) {
+                    if ((t instanceof ParameterizedType) &&
                         ((p = (ParameterizedType)t).getRawType() ==
                          Comparable.class) &&
                         (as = p.getActualTypeArguments()) != null &&
@@ -2328,15 +2328,15 @@
      * @param check if <0, don't check resize, if <= 1 only check if uncontended
      */
     private final void addCount(long x, int check) {
-        CounterCell[] as; long b, s;
-        if ((as = counterCells) != null ||
+        CounterCell[] cs; long b, s;
+        if ((cs = counterCells) != null ||
             !U.compareAndSetLong(this, BASECOUNT, b = baseCount, s = b + x)) {
-            CounterCell a; long v; int m;
+            CounterCell c; long v; int m;
             boolean uncontended = true;
-            if (as == null || (m = as.length - 1) < 0 ||
-                (a = as[ThreadLocalRandom.getProbe() & m]) == null ||
+            if (cs == null || (m = cs.length - 1) < 0 ||
+                (c = cs[ThreadLocalRandom.getProbe() & m]) == null ||
                 !(uncontended =
-                  U.compareAndSetLong(a, CELLVALUE, v = a.value, v + x))) {
+                  U.compareAndSetLong(c, CELLVALUE, v = c.value, v + x))) {
                 fullAddCount(x, uncontended);
                 return;
             }
@@ -2574,13 +2574,12 @@
     }
 
     final long sumCount() {
-        CounterCell[] as = counterCells; CounterCell a;
+        CounterCell[] cs = counterCells;
         long sum = baseCount;
-        if (as != null) {
-            for (int i = 0; i < as.length; ++i) {
-                if ((a = as[i]) != null)
-                    sum += a.value;
-            }
+        if (cs != null) {
+            for (CounterCell c : cs)
+                if (c != null)
+                    sum += c.value;
         }
         return sum;
     }
@@ -2595,9 +2594,9 @@
         }
         boolean collide = false;                // True if last slot nonempty
         for (;;) {
-            CounterCell[] as; CounterCell a; int n; long v;
-            if ((as = counterCells) != null && (n = as.length) > 0) {
-                if ((a = as[(n - 1) & h]) == null) {
+            CounterCell[] cs; CounterCell c; int n; long v;
+            if ((cs = counterCells) != null && (n = cs.length) > 0) {
+                if ((c = cs[(n - 1) & h]) == null) {
                     if (cellsBusy == 0) {            // Try to attach new Cell
                         CounterCell r = new CounterCell(x); // Optimistic create
                         if (cellsBusy == 0 &&
@@ -2623,21 +2622,17 @@
                 }
                 else if (!wasUncontended)       // CAS already known to fail
                     wasUncontended = true;      // Continue after rehash
-                else if (U.compareAndSetLong(a, CELLVALUE, v = a.value, v + x))
+                else if (U.compareAndSetLong(c, CELLVALUE, v = c.value, v + x))
                     break;
-                else if (counterCells != as || n >= NCPU)
+                else if (counterCells != cs || n >= NCPU)
                     collide = false;            // At max size or stale
                 else if (!collide)
                     collide = true;
                 else if (cellsBusy == 0 &&
                          U.compareAndSetInt(this, CELLSBUSY, 0, 1)) {
                     try {
-                        if (counterCells == as) {// Expand table unless stale
-                            CounterCell[] rs = new CounterCell[n << 1];
-                            for (int i = 0; i < n; ++i)
-                                rs[i] = as[i];
-                            counterCells = rs;
-                        }
+                        if (counterCells == cs) // Expand table unless stale
+                            counterCells = Arrays.copyOf(cs, n << 1);
                     } finally {
                         cellsBusy = 0;
                     }
@@ -2646,11 +2641,11 @@
                 }
                 h = ThreadLocalRandom.advanceProbe(h);
             }
-            else if (cellsBusy == 0 && counterCells == as &&
+            else if (cellsBusy == 0 && counterCells == cs &&
                      U.compareAndSetInt(this, CELLSBUSY, 0, 1)) {
                 boolean init = false;
                 try {                           // Initialize table
-                    if (counterCells == as) {
+                    if (counterCells == cs) {
                         CounterCell[] rs = new CounterCell[2];
                         rs[h & 1] = new CounterCell(x);
                         counterCells = rs;
--- a/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -2204,9 +2204,7 @@
             Collection<?> c = (Collection<?>) o;
             try {
                 return containsAll(c) && c.containsAll(this);
-            } catch (ClassCastException unused) {
-                return false;
-            } catch (NullPointerException unused) {
+            } catch (ClassCastException | NullPointerException unused) {
                 return false;
             }
         }
@@ -2331,9 +2329,7 @@
             Collection<?> c = (Collection<?>) o;
             try {
                 return containsAll(c) && c.containsAll(this);
-            } catch (ClassCastException unused) {
-                return false;
-            } catch (NullPointerException unused) {
+            } catch (ClassCastException | NullPointerException unused) {
                 return false;
             }
         }
@@ -2453,9 +2449,7 @@
             if (k == null) // pass by markers and headers
                 return true;
             int c = cpr(cmp, k, hi);
-            if (c > 0 || (c == 0 && !hiInclusive))
-                return false;
-            return true;
+            return c < 0 || (c == 0 && hiInclusive);
         }
 
         /**
--- a/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListSet.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListSet.java	Fri Feb 02 01:52:03 2018 +0000
@@ -309,9 +309,7 @@
         Collection<?> c = (Collection<?>) o;
         try {
             return containsAll(c) && c.containsAll(this);
-        } catch (ClassCastException unused) {
-            return false;
-        } catch (NullPointerException unused) {
+        } catch (ClassCastException | NullPointerException unused) {
             return false;
         }
     }
--- a/src/java.base/share/classes/java/util/concurrent/CopyOnWriteArrayList.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/CopyOnWriteArrayList.java	Fri Feb 02 01:52:03 2018 +0000
@@ -508,7 +508,7 @@
     public boolean remove(Object o) {
         Object[] snapshot = getArray();
         int index = indexOf(o, snapshot, 0, snapshot.length);
-        return (index < 0) ? false : remove(o, snapshot, index);
+        return index >= 0 && remove(o, snapshot, index);
     }
 
     /**
@@ -587,8 +587,8 @@
      */
     public boolean addIfAbsent(E e) {
         Object[] snapshot = getArray();
-        return indexOf(e, snapshot, 0, snapshot.length) >= 0 ? false :
-            addIfAbsent(e, snapshot);
+        return indexOf(e, snapshot, 0, snapshot.length) < 0
+            && addIfAbsent(e, snapshot);
     }
 
     /**
@@ -980,13 +980,10 @@
 
         List<?> list = (List<?>)o;
         Iterator<?> it = list.iterator();
-        Object[] elements = getArray();
-        for (int i = 0, len = elements.length; i < len; i++)
-            if (!it.hasNext() || !Objects.equals(elements[i], it.next()))
+        for (Object element : getArray())
+            if (!it.hasNext() || !Objects.equals(element, it.next()))
                 return false;
-        if (it.hasNext())
-            return false;
-        return true;
+        return !it.hasNext();
     }
 
     /**
--- a/src/java.base/share/classes/java/util/concurrent/LinkedBlockingDeque.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/LinkedBlockingDeque.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1353,17 +1353,16 @@
     @SuppressWarnings("unchecked")
     private boolean bulkRemove(Predicate<? super E> filter) {
         boolean removed = false;
+        final ReentrantLock lock = this.lock;
         Node<E> p = null;
-        final ReentrantLock lock = this.lock;
         Node<E>[] nodes = null;
         int n, len = 0;
         do {
             // 1. Extract batch of up to 64 elements while holding the lock.
-            long deathRow = 0;          // "bitset" of size 64
             lock.lock();
             try {
-                if (nodes == null) {
-                    if (p == null) p = first;
+                if (nodes == null) {  // first batch; initialize
+                    p = first;
                     for (Node<E> q = p; q != null; q = succ(q))
                         if (q.item != null && ++len == 64)
                             break;
@@ -1376,6 +1375,7 @@
             }
 
             // 2. Run the filter on the elements while lock is free.
+            long deathRow = 0L;       // "bitset" of size 64
             for (int i = 0; i < n; i++) {
                 final E e;
                 if ((e = nodes[i].item) != null && filter.test(e))
@@ -1393,6 +1393,7 @@
                             unlink(q);
                             removed = true;
                         }
+                        nodes[i] = null; // help GC
                     }
                 } finally {
                     lock.unlock();
--- a/src/java.base/share/classes/java/util/concurrent/LinkedBlockingQueue.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/LinkedBlockingQueue.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1060,11 +1060,10 @@
         int n, len = 0;
         do {
             // 1. Extract batch of up to 64 elements while holding the lock.
-            long deathRow = 0;          // "bitset" of size 64
             fullyLock();
             try {
-                if (nodes == null) {
-                    if (p == null) p = head.next;
+                if (nodes == null) {  // first batch; initialize
+                    p = head.next;
                     for (Node<E> q = p; q != null; q = succ(q))
                         if (q.item != null && ++len == 64)
                             break;
@@ -1077,6 +1076,7 @@
             }
 
             // 2. Run the filter on the elements while lock is free.
+            long deathRow = 0L;       // "bitset" of size 64
             for (int i = 0; i < n; i++) {
                 final E e;
                 if ((e = nodes[i].item) != null && filter.test(e))
@@ -1095,6 +1095,7 @@
                             unlink(q, ancestor);
                             removed = true;
                         }
+                        nodes[i] = null; // help GC
                     }
                 } finally {
                     fullyUnlock();
--- a/src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java	Fri Feb 02 01:52:03 2018 +0000
@@ -772,9 +772,8 @@
         Node first = null;
         restartFromHead: for (;;) {
             Node h = head, p = h;
-            for (; p != null;) {
-                final Object item;
-                if ((item = p.item) != null) {
+            while (p != null) {
+                if (p.item != null) {
                     if (p.isData) {
                         first = p;
                         break;
@@ -1602,8 +1601,7 @@
         // Read in elements until trailing null sentinel found
         Node h = null, t = null;
         for (Object item; (item = s.readObject()) != null; ) {
-            @SuppressWarnings("unchecked")
-            Node newNode = new Node((E) item);
+            Node newNode = new Node(item);
             if (h == null)
                 h = t = newNode;
             else
--- a/src/java.base/share/classes/java/util/concurrent/PriorityBlockingQueue.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/PriorityBlockingQueue.java	Fri Feb 02 01:52:03 2018 +0000
@@ -269,8 +269,8 @@
         if (a.getClass() != Object[].class)
             a = Arrays.copyOf(a, n, Object[].class);
         if (screen && (n == 1 || this.comparator != null)) {
-            for (int i = 0; i < n; ++i)
-                if (a[i] == null)
+            for (Object elt : a)
+                if (elt == null)
                     throw new NullPointerException();
         }
         this.queue = a;
--- a/src/java.base/share/classes/java/util/concurrent/SubmissionPublisher.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/SubmissionPublisher.java	Fri Feb 02 01:52:03 2018 +0000
@@ -753,8 +753,10 @@
                     else
                         pred.next = next;
                 }
-                else
+                else {
                     subs.add(b.subscriber);
+                    pred = b;
+                }
             }
         }
         return subs;
--- a/src/java.base/share/classes/java/util/concurrent/ThreadLocalRandom.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ThreadLocalRandom.java	Fri Feb 02 01:52:03 2018 +0000
@@ -67,7 +67,7 @@
  * {@code ThreadLocalRandom.current().nextX(...)} (where
  * {@code X} is {@code Int}, {@code Long}, etc).
  * When all usages are of this form, it is never possible to
- * accidently share a {@code ThreadLocalRandom} across multiple threads.
+ * accidentally share a {@code ThreadLocalRandom} across multiple threads.
  *
  * <p>This class also provides additional commonly used bounded random
  * generation methods.
--- a/src/java.base/share/classes/java/util/concurrent/ThreadPoolExecutor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/ThreadPoolExecutor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -264,13 +264,12 @@
  * assist in storage reclamation when large numbers of queued tasks
  * become cancelled.</dd>
  *
- * <dt>Finalization</dt>
+ * <dt>Reclamation</dt>
  *
  * <dd>A pool that is no longer referenced in a program <em>AND</em>
- * has no remaining threads will be {@code shutdown} automatically. If
- * you would like to ensure that unreferenced pools are reclaimed even
- * if users forget to call {@link #shutdown}, then you must arrange
- * that unused threads eventually die, by setting appropriate
+ * has no remaining threads may be reclaimed (garbage collected)
+ * without being explicity shutdown. You can configure a pool to allow
+ * all unused threads to eventually die by setting appropriate
  * keep-alive times, using a lower bound of zero core threads and/or
  * setting {@link #allowCoreThreadTimeOut(boolean)}.  </dd>
  *
@@ -361,7 +360,7 @@
      * time, but need not hit each state. The transitions are:
      *
      * RUNNING -> SHUTDOWN
-     *    On invocation of shutdown(), perhaps implicitly in finalize()
+     *    On invocation of shutdown()
      * (RUNNING or SHUTDOWN) -> STOP
      *    On invocation of shutdownNow()
      * SHUTDOWN -> TIDYING
@@ -581,9 +580,6 @@
     private static final RuntimePermission shutdownPerm =
         new RuntimePermission("modifyThread");
 
-    /** The context to be used when executing the finalizer, or null. */
-    private final AccessControlContext acc;
-
     /**
      * Class Worker mainly maintains interrupt control state for
      * threads running tasks, along with other minor bookkeeping.
@@ -1300,9 +1296,6 @@
             throw new IllegalArgumentException();
         if (workQueue == null || threadFactory == null || handler == null)
             throw new NullPointerException();
-        this.acc = (System.getSecurityManager() == null)
-            ? null
-            : AccessController.getContext();
         this.corePoolSize = corePoolSize;
         this.maximumPoolSize = maximumPoolSize;
         this.workQueue = workQueue;
@@ -1470,33 +1463,6 @@
     }
 
     /**
-     * Invokes {@code shutdown} when this executor is no longer
-     * referenced and it has no threads.
-     *
-     * <p>This method is invoked with privileges that are restricted by
-     * the security context of the caller that invokes the constructor.
-     *
-     * @deprecated The {@code finalize} method has been deprecated.
-     *     Subclasses that override {@code finalize} in order to perform cleanup
-     *     should be modified to use alternative cleanup mechanisms and
-     *     to remove the overriding {@code finalize} method.
-     *     When overriding the {@code finalize} method, its implementation must explicitly
-     *     ensure that {@code super.finalize()} is invoked as described in {@link Object#finalize}.
-     *     See the specification for {@link Object#finalize()} for further
-     *     information about migration options.
-     */
-    @Deprecated(since="9")
-    protected void finalize() {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm == null || acc == null) {
-            shutdown();
-        } else {
-            PrivilegedAction<Void> pa = () -> { shutdown(); return null; };
-            AccessController.doPrivileged(pa, acc);
-        }
-    }
-
-    /**
      * Sets the thread factory used to create new threads.
      *
      * @param threadFactory the new thread factory
--- a/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -320,7 +320,9 @@
 
         // predNext is the apparent node to unsplice. CASes below will
         // fail if not, in which case, we lost race vs another cancel
-        // or signal, so no further action is necessary.
+        // or signal, so no further action is necessary, although with
+        // a possibility that a cancelled node may transiently remain
+        // reachable.
         Node predNext = pred.next;
 
         // Can use unconditional write instead of CAS here.
@@ -912,13 +914,13 @@
      * at any time, a {@code true} return does not guarantee that any
      * other thread will ever acquire.
      *
-     * <p>In this implementation, this operation returns in
-     * constant time.
-     *
      * @return {@code true} if there may be other threads waiting to acquire
      */
     public final boolean hasQueuedThreads() {
-        return head != tail;
+        for (Node p = tail, h = head; p != h && p != null; p = p.prev)
+            if (p.waitStatus <= 0)
+                return true;
+        return false;
     }
 
     /**
@@ -1067,17 +1069,21 @@
      * @since 1.7
      */
     public final boolean hasQueuedPredecessors() {
-        // The correctness of this depends on head being initialized
-        // before tail and on head.next being accurate if the current
-        // thread is first in queue.
-        Node t = tail; // Read fields in reverse initialization order
-        Node h = head;
-        Node s;
-        return h != t &&
-            ((s = h.next) == null || s.thread != Thread.currentThread());
+        Node h, s;
+        if ((h = head) != null) {
+            if ((s = h.next) == null || s.waitStatus > 0) {
+                s = null; // traverse in case of concurrent cancellation
+                for (Node p = tail; p != h && p != null; p = p.prev) {
+                    if (p.waitStatus <= 0)
+                        s = p;
+                }
+            }
+            if (s != null && s.thread != Thread.currentThread())
+                return true;
+        }
+        return false;
     }
 
-
     // Instrumentation and monitoring methods
 
     /**
--- a/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -800,7 +800,9 @@
 
         // predNext is the apparent node to unsplice. CASes below will
         // fail if not, in which case, we lost race vs another cancel
-        // or signal, so no further action is necessary.
+        // or signal, so no further action is necessary, although with
+        // a possibility that a cancelled node may transiently remain
+        // reachable.
         Node predNext = pred.next;
 
         // Can use unconditional write instead of CAS here.
@@ -1392,13 +1394,13 @@
      * at any time, a {@code true} return does not guarantee that any
      * other thread will ever acquire.
      *
-     * <p>In this implementation, this operation returns in
-     * constant time.
-     *
      * @return {@code true} if there may be other threads waiting to acquire
      */
     public final boolean hasQueuedThreads() {
-        return head != tail;
+        for (Node p = tail, h = head; p != h && p != null; p = p.prev)
+            if (p.waitStatus <= 0)
+                return true;
+        return false;
     }
 
     /**
@@ -1547,17 +1549,21 @@
      * @since 1.7
      */
     public final boolean hasQueuedPredecessors() {
-        // The correctness of this depends on head being initialized
-        // before tail and on head.next being accurate if the current
-        // thread is first in queue.
-        Node t = tail; // Read fields in reverse initialization order
-        Node h = head;
-        Node s;
-        return h != t &&
-            ((s = h.next) == null || s.thread != Thread.currentThread());
+        Node h, s;
+        if ((h = head) != null) {
+            if ((s = h.next) == null || s.waitStatus > 0) {
+                s = null; // traverse in case of concurrent cancellation
+                for (Node p = tail; p != h && p != null; p = p.prev) {
+                    if (p.waitStatus <= 0)
+                        s = p;
+                }
+            }
+            if (s != null && s.thread != Thread.currentThread())
+                return true;
+        }
+        return false;
     }
 
-
     // Instrumentation and monitoring methods
 
     /**
--- a/src/java.base/share/classes/java/util/regex/Pattern.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/java/util/regex/Pattern.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -954,6 +954,12 @@
     private int flags;
 
     /**
+     * The temporary pattern flags used during compiling. The flags might be turn
+     * on and off by embedded flag.
+     */
+    private transient int flags0;
+
+    /**
      * Boolean indicating this Pattern is compiled; this is necessary in order
      * to lazily compile deserialized Patterns.
      */
@@ -1137,7 +1143,7 @@
      * @return  The match flags specified when this pattern was compiled
      */
     public int flags() {
-        return flags;
+        return flags0;
     }
 
     /**
@@ -1369,6 +1375,9 @@
         // Read in all fields
         s.defaultReadObject();
 
+        // reset the flags
+        flags0 = flags;
+
         // Initialize counts
         capturingGroupCount = 1;
         localCount = 0;
@@ -1400,6 +1409,9 @@
         if ((flags & UNICODE_CHARACTER_CLASS) != 0)
             flags |= UNICODE_CASE;
 
+        // 'flags' for compiling
+        flags0 = flags;
+
         // Reset group index count
         capturingGroupCount = 1;
         localCount = 0;
@@ -1841,7 +1853,7 @@
      * Indicates whether a particular flag is set or not.
      */
     private boolean has(int f) {
-        return (flags & f) != 0;
+        return (flags0 & f) != 0;
     }
 
     /**
@@ -2718,7 +2730,7 @@
                ch == 0x53 || ch == 0x73 ||    //S and s
                ch == 0x4b || ch == 0x6b ||    //K and k
                ch == 0xc5 || ch == 0xe5))) {  //A+ring
-            bits.add(ch, flags());
+            bits.add(ch, flags0);
             return null;
         }
         return single(ch);
@@ -2931,7 +2943,7 @@
         boolean capturingGroup = false;
         Node head = null;
         Node tail = null;
-        int save = flags;
+        int save = flags0;
         int saveTCNCount = topClosureNodes.size();
         root = null;
         int ch = next();
@@ -3032,7 +3044,7 @@
         }
 
         accept(')', "Unclosed group");
-        flags = save;
+        flags0 = save;
 
         // Check for quantifiers
         Node node = closure(head);
@@ -3135,28 +3147,28 @@
         for (;;) {
             switch (ch) {
             case 'i':
-                flags |= CASE_INSENSITIVE;
+                flags0 |= CASE_INSENSITIVE;
                 break;
             case 'm':
-                flags |= MULTILINE;
+                flags0 |= MULTILINE;
                 break;
             case 's':
-                flags |= DOTALL;
+                flags0 |= DOTALL;
                 break;
             case 'd':
-                flags |= UNIX_LINES;
+                flags0 |= UNIX_LINES;
                 break;
             case 'u':
-                flags |= UNICODE_CASE;
+                flags0 |= UNICODE_CASE;
                 break;
             case 'c':
-                flags |= CANON_EQ;
+                flags0 |= CANON_EQ;
                 break;
             case 'x':
-                flags |= COMMENTS;
+                flags0 |= COMMENTS;
                 break;
             case 'U':
-                flags |= (UNICODE_CHARACTER_CLASS | UNICODE_CASE);
+                flags0 |= (UNICODE_CHARACTER_CLASS | UNICODE_CASE);
                 break;
             case '-': // subFlag then fall through
                 ch = next();
@@ -3178,28 +3190,28 @@
         for (;;) {
             switch (ch) {
             case 'i':
-                flags &= ~CASE_INSENSITIVE;
+                flags0 &= ~CASE_INSENSITIVE;
                 break;
             case 'm':
-                flags &= ~MULTILINE;
+                flags0 &= ~MULTILINE;
                 break;
             case 's':
-                flags &= ~DOTALL;
+                flags0 &= ~DOTALL;
                 break;
             case 'd':
-                flags &= ~UNIX_LINES;
+                flags0 &= ~UNIX_LINES;
                 break;
             case 'u':
-                flags &= ~UNICODE_CASE;
+                flags0 &= ~UNICODE_CASE;
                 break;
             case 'c':
-                flags &= ~CANON_EQ;
+                flags0 &= ~CANON_EQ;
                 break;
             case 'x':
-                flags &= ~COMMENTS;
+                flags0 &= ~COMMENTS;
                 break;
             case 'U':
-                flags &= ~(UNICODE_CHARACTER_CLASS | UNICODE_CASE);
+                flags0 &= ~(UNICODE_CHARACTER_CLASS | UNICODE_CASE);
                 break;
             default:
                 return;
--- a/src/java.base/share/classes/jdk/internal/module/ModuleInfo.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/jdk/internal/module/ModuleInfo.java	Fri Feb 02 01:52:03 2018 +0000
@@ -64,7 +64,7 @@
 public final class ModuleInfo {
 
     private final int JAVA_MIN_SUPPORTED_VERSION = 53;
-    private final int JAVA_MAX_SUPPORTED_VERSION = 54;
+    private final int JAVA_MAX_SUPPORTED_VERSION = 55;
 
     private static final JavaLangModuleAccess JLMA
         = SharedSecrets.getJavaLangModuleAccess();
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassReader.java	Fri Feb 02 01:52:03 2018 +0000
@@ -185,7 +185,7 @@
     public ClassReader(final byte[] b, final int off, final int len) {
         this.b = b;
         // checks the class version
-        if (readShort(off + 6) > Opcodes.V10) {
+        if (readShort(off + 6) > Opcodes.V11) {
             throw new IllegalArgumentException();
         }
         // parses the constant pool
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -90,6 +90,7 @@
     int V1_8 = 0 << 16 | 52;
     int V9 = 0 << 16 | 53;
     int V10 = 0 << 16 | 54;
+    int V11 = 0 << 16 | 55;
 
     // access flags
 
--- a/src/java.base/share/classes/jdk/internal/reflect/Reflection.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/jdk/internal/reflect/Reflection.java	Fri Feb 02 01:52:03 2018 +0000
@@ -64,14 +64,6 @@
     @HotSpotIntrinsicCandidate
     public static native Class<?> getCallerClass();
 
-    /**
-     * @deprecated This method will be removed.
-     * This method is a private JDK API and retained temporarily to
-     * simplify the implementation of sun.misc.Reflection.getCallerClass.
-     */
-    @Deprecated(forRemoval=true)
-    public static native Class<?> getCallerClass(int depth);
-
     /** Retrieves the access flags written to the class file. For
         inner classes these flags may differ from those returned by
         Class.getModifiers(), which searches the InnerClasses
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,545 @@
+/*
+ * Copyright (c) 2015, 2017 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.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.
+ */
+public class ArraysSupport {
+    static final Unsafe U = Unsafe.getUnsafe();
+
+    private static final boolean BIG_ENDIAN = U.isBigEndian();
+
+    public static final int LOG2_ARRAY_BOOLEAN_INDEX_SCALE = exactLog2(Unsafe.ARRAY_BOOLEAN_INDEX_SCALE);
+    public static final int LOG2_ARRAY_BYTE_INDEX_SCALE = exactLog2(Unsafe.ARRAY_BYTE_INDEX_SCALE);
+    public static final int LOG2_ARRAY_CHAR_INDEX_SCALE = exactLog2(Unsafe.ARRAY_CHAR_INDEX_SCALE);
+    public static final int LOG2_ARRAY_SHORT_INDEX_SCALE = exactLog2(Unsafe.ARRAY_SHORT_INDEX_SCALE);
+    public static final int LOG2_ARRAY_INT_INDEX_SCALE = exactLog2(Unsafe.ARRAY_INT_INDEX_SCALE);
+    public static final int LOG2_ARRAY_LONG_INDEX_SCALE = exactLog2(Unsafe.ARRAY_LONG_INDEX_SCALE);
+    public static final int LOG2_ARRAY_FLOAT_INDEX_SCALE = exactLog2(Unsafe.ARRAY_FLOAT_INDEX_SCALE);
+    public 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
+    public 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
+
+    public 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;
+    }
+
+    public 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.
+     */
+    public 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.
+     */
+    public 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
+
+    public 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;
+    }
+
+    public 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
+
+    public 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;
+    }
+
+    public 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
+
+    public 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;
+    }
+
+    public 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
+
+    public static int mismatch(float[] a,
+                               float[] b,
+                               int length) {
+        return mismatch(a, 0, b, 0, length);
+    }
+
+    public 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
+
+    public 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;
+    }
+
+    public 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
+
+    public static int mismatch(double[] a,
+                               double[] b,
+                               int length) {
+        return mismatch(a, 0, b, 0, length);
+    }
+
+    public 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/src/java.base/share/classes/module-info.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/module-info.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -142,7 +142,7 @@
         java.instrument,
         java.logging;
     exports jdk.internal.jmod to
-        jdk.compiler,   // reflective dependency
+        jdk.compiler,
         jdk.jlink;
     exports jdk.internal.logger to
         java.logging;
@@ -172,7 +172,7 @@
         java.xml,
         jdk.attach,
         jdk.charsets,
-        jdk.compiler,   // reflective dependency
+        jdk.compiler,
         jdk.incubator.httpclient,
         jdk.jdeps,
         jdk.jlink,
--- a/src/java.base/share/classes/sun/nio/cs/DoubleByte.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/sun/nio/cs/DoubleByte.java	Fri Feb 02 01:52:03 2018 +0000
@@ -236,10 +236,8 @@
                         int b2 = src[sp++] & 0xff;
                         if (b2 < b2Min || b2 > b2Max ||
                             (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) {
-                            if (b2c[b1] == B2C_UNMAPPABLE ||  // isNotLeadingByte
-                                b2c[b2] != B2C_UNMAPPABLE ||  // isLeadingByte
-                                decodeSingle(b2) != UNMAPPABLE_DECODING) {
-                               sp--;
+                            if (crMalformedOrUnmappable(b1, b2).length() == 1) {
+                                sp--;
                             }
                         }
                     }
@@ -472,6 +470,13 @@
             b2cSB_UNMAPPABLE = new char[0x100];
             Arrays.fill(b2cSB_UNMAPPABLE, UNMAPPABLE_DECODING);
         }
+
+        // always returns unmappableForLenth(2) for doublebyte_only
+        @Override
+        protected CoderResult crMalformedOrUnmappable(int b1, int b2) {
+            return CoderResult.unmappableForLength(2);
+        }
+
         public Decoder_DBCSONLY(Charset cs, char[][] b2c, char[] b2cSB, int b2Min, int b2Max,
                                 boolean isASCIICompatible) {
             super(cs, 0.5f, 1.0f, b2c, b2cSB_UNMAPPABLE, b2Min, b2Max, isASCIICompatible);
--- a/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -523,9 +523,11 @@
 
             if (c != null) {
                 command = c;
-            } else if (collator.compare(flags, "-help") == 0 ||
-                    collator.compare(flags, "-h") == 0 ||
-                    collator.compare(flags, "-?") == 0) {
+            } else if (collator.compare(flags, "--help") == 0 ||
+                       collator.compare(flags, "-h") == 0 ||
+                       collator.compare(flags, "-?") == 0 ||
+                       // -help: legacy.
+                       collator.compare(flags, "-help") == 0) {
                 help = true;
             } else if (collator.compare(flags, "-conf") == 0) {
                 i++;
@@ -4609,6 +4611,8 @@
             }
             System.err.println();
             System.err.println(rb.getString(
+                    "Use.keytool.help.for.all.available.commands"));
+            System.err.println(rb.getString(
                     "Use.keytool.command.name.help.for.usage.of.command.name"));
         }
     }
--- a/src/java.base/share/classes/sun/security/tools/keytool/Resources.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Resources.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,12 +45,12 @@
         {"option.1.set.twice", "The %s option is specified multiple times. All except the last one will be ignored."},
         {"multiple.commands.1.2", "Only one command is allowed: both %1$s and %2$s were specified."},
         {"Use.keytool.help.for.all.available.commands",
-                 "Use \"keytool -help\" for all available commands"},
+                 "Use \"keytool -?, -h, or --help\" for this help message"},
         {"Key.and.Certificate.Management.Tool",
                  "Key and Certificate Management Tool"},
         {"Commands.", "Commands:"},
         {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "Use \"keytool -command_name -help\" for usage of command_name.\n" +
+                "Use \"keytool -command_name --help\" for usage of command_name.\n" +
                 "Use the -conf <url> option to specify a pre-configured options file."},
         // keytool: help: commands
         {"Generates.a.certificate.request",
@@ -462,7 +462,7 @@
         {"with.weak", "%s (weak)"},
         {"key.bit", "%1$d-bit %2$s key"},
         {"key.bit.weak", "%1$d-bit %2$s key (weak)"},
-        {"unknown.size.1", "unknown size %s key"},
+        {"unknown.size.1", "%s key of unknown size"},
         {".PATTERN.printX509Cert.with.weak",
                 "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t SHA1: {5}\n\t SHA256: {6}\nSignature algorithm name: {7}\nSubject Public Key Algorithm: {8}\nVersion: {9}"},
         {"PKCS.10.with.weak",
--- a/src/java.base/share/conf/security/java.security	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/conf/security/java.security	Fri Feb 02 01:52:03 2018 +0000
@@ -812,14 +812,14 @@
 #     limited:    These policy files contain more restricted cryptographic
 #                 strengths
 #
-# The default setting is determined by the value of the “crypto.policyâ€
+# The default setting is determined by the value of the "crypto.policy"
 # Security property below. If your country or usage requires the
-# traditional restrictive policy, the “limited†Java cryptographic
+# traditional restrictive policy, the "limited" Java cryptographic
 # policy is still available and may be appropriate for your environment.
 #
 # If you have restrictions that do not fit either use case mentioned
 # above, Java provides the capability to customize these policy files.
-# The “crypto.policy†security property points to a subdirectory
+# The "crypto.policy" security property points to a subdirectory
 # within <java-home>/conf/security/policy/ which can be customized.
 # Please see the <java-home>/conf/security/policy/README.txt file or consult
 # the Java Security Guide/JCA documentation for more information.
--- a/src/java.base/share/conf/security/policy/README.txt	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/conf/security/policy/README.txt	Fri Feb 02 01:52:03 2018 +0000
@@ -8,7 +8,7 @@
 Import and export control rules on cryptographic software vary from
 country to country.  The Java Cryptography Extension (JCE) architecture
 allows flexible cryptographic key strength to be configured via the
-jurisdiction policy files which are referenced by the “crypto.policyâ€
+jurisdiction policy files which are referenced by the "crypto.policy"
 security property in the <java-home>/conf/security/java.security file.
 
 By default, Java provides two different sets of cryptographic policy
@@ -20,8 +20,8 @@
     limited:    These policy files contain more restricted cryptographic
                 strengths
 
-These files reside in <java-home>/conf/security/policy in the “unlimitedâ€
-or “limited†subdirectories respectively.
+These files reside in <java-home>/conf/security/policy in the "unlimited"
+or "limited" subdirectories respectively.
 
 Each subdirectory contains a complete policy configuration,
 and subdirectories can be added/edited/removed to reflect your
--- a/src/java.base/share/native/include/classfile_constants.h	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,581 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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.
- */
-
-#ifndef CLASSFILE_CONSTANTS_H
-#define CLASSFILE_CONSTANTS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Classfile version number for this information */
-#define JVM_CLASSFILE_MAJOR_VERSION 54
-#define JVM_CLASSFILE_MINOR_VERSION 0
-
-/* Flags */
-
-enum {
-    JVM_ACC_PUBLIC        = 0x0001,
-    JVM_ACC_PRIVATE       = 0x0002,
-    JVM_ACC_PROTECTED     = 0x0004,
-    JVM_ACC_STATIC        = 0x0008,
-    JVM_ACC_FINAL         = 0x0010,
-    JVM_ACC_SYNCHRONIZED  = 0x0020,
-    JVM_ACC_SUPER         = 0x0020,
-    JVM_ACC_VOLATILE      = 0x0040,
-    JVM_ACC_BRIDGE        = 0x0040,
-    JVM_ACC_TRANSIENT     = 0x0080,
-    JVM_ACC_VARARGS       = 0x0080,
-    JVM_ACC_NATIVE        = 0x0100,
-    JVM_ACC_INTERFACE     = 0x0200,
-    JVM_ACC_ABSTRACT      = 0x0400,
-    JVM_ACC_STRICT        = 0x0800,
-    JVM_ACC_SYNTHETIC     = 0x1000,
-    JVM_ACC_ANNOTATION    = 0x2000,
-    JVM_ACC_ENUM          = 0x4000,
-    JVM_ACC_MODULE        = 0x8000
-};
-
-#define JVM_ACC_PUBLIC_BIT        0
-#define JVM_ACC_PRIVATE_BIT       1
-#define JVM_ACC_PROTECTED_BIT     2
-#define JVM_ACC_STATIC_BIT        3
-#define JVM_ACC_FINAL_BIT         4
-#define JVM_ACC_SYNCHRONIZED_BIT  5
-#define JVM_ACC_SUPER_BIT         5
-#define JVM_ACC_VOLATILE_BIT      6
-#define JVM_ACC_BRIDGE_BIT        6
-#define JVM_ACC_TRANSIENT_BIT     7
-#define JVM_ACC_VARARGS_BIT       7
-#define JVM_ACC_NATIVE_BIT        8
-#define JVM_ACC_INTERFACE_BIT     9
-#define JVM_ACC_ABSTRACT_BIT      10
-#define JVM_ACC_STRICT_BIT        11
-#define JVM_ACC_SYNTHETIC_BIT     12
-#define JVM_ACC_ANNOTATION_BIT    13
-#define JVM_ACC_ENUM_BIT          14
-
-/* Used in newarray instruction. */
-
-enum {
-    JVM_T_BOOLEAN = 4,
-    JVM_T_CHAR    = 5,
-    JVM_T_FLOAT   = 6,
-    JVM_T_DOUBLE  = 7,
-    JVM_T_BYTE    = 8,
-    JVM_T_SHORT   = 9,
-    JVM_T_INT     = 10,
-    JVM_T_LONG    = 11
-};
-
-/* Constant Pool Entries */
-
-enum {
-    JVM_CONSTANT_Utf8                   = 1,
-    JVM_CONSTANT_Unicode                = 2, /* unused */
-    JVM_CONSTANT_Integer                = 3,
-    JVM_CONSTANT_Float                  = 4,
-    JVM_CONSTANT_Long                   = 5,
-    JVM_CONSTANT_Double                 = 6,
-    JVM_CONSTANT_Class                  = 7,
-    JVM_CONSTANT_String                 = 8,
-    JVM_CONSTANT_Fieldref               = 9,
-    JVM_CONSTANT_Methodref              = 10,
-    JVM_CONSTANT_InterfaceMethodref     = 11,
-    JVM_CONSTANT_NameAndType            = 12,
-    JVM_CONSTANT_MethodHandle           = 15,  // JSR 292
-    JVM_CONSTANT_MethodType             = 16,  // JSR 292
-    JVM_CONSTANT_InvokeDynamic          = 18,
-    JVM_CONSTANT_ExternalMax            = 18
-};
-
-/* JVM_CONSTANT_MethodHandle subtypes */
-enum {
-    JVM_REF_getField                = 1,
-    JVM_REF_getStatic               = 2,
-    JVM_REF_putField                = 3,
-    JVM_REF_putStatic               = 4,
-    JVM_REF_invokeVirtual           = 5,
-    JVM_REF_invokeStatic            = 6,
-    JVM_REF_invokeSpecial           = 7,
-    JVM_REF_newInvokeSpecial        = 8,
-    JVM_REF_invokeInterface         = 9
-};
-
-/* StackMapTable type item numbers */
-
-enum {
-    JVM_ITEM_Top                = 0,
-    JVM_ITEM_Integer            = 1,
-    JVM_ITEM_Float              = 2,
-    JVM_ITEM_Double             = 3,
-    JVM_ITEM_Long               = 4,
-    JVM_ITEM_Null               = 5,
-    JVM_ITEM_UninitializedThis  = 6,
-    JVM_ITEM_Object             = 7,
-    JVM_ITEM_Uninitialized      = 8
-};
-
-/* Type signatures */
-
-enum {
-    JVM_SIGNATURE_ARRAY         = '[',
-    JVM_SIGNATURE_BYTE          = 'B',
-    JVM_SIGNATURE_CHAR          = 'C',
-    JVM_SIGNATURE_CLASS         = 'L',
-    JVM_SIGNATURE_ENDCLASS      = ';',
-    JVM_SIGNATURE_ENUM          = 'E',
-    JVM_SIGNATURE_FLOAT         = 'F',
-    JVM_SIGNATURE_DOUBLE        = 'D',
-    JVM_SIGNATURE_FUNC          = '(',
-    JVM_SIGNATURE_ENDFUNC       = ')',
-    JVM_SIGNATURE_INT           = 'I',
-    JVM_SIGNATURE_LONG          = 'J',
-    JVM_SIGNATURE_SHORT         = 'S',
-    JVM_SIGNATURE_VOID          = 'V',
-    JVM_SIGNATURE_BOOLEAN       = 'Z'
-};
-
-/* Opcodes */
-
-enum {
-    JVM_OPC_nop                 = 0,
-    JVM_OPC_aconst_null         = 1,
-    JVM_OPC_iconst_m1           = 2,
-    JVM_OPC_iconst_0            = 3,
-    JVM_OPC_iconst_1            = 4,
-    JVM_OPC_iconst_2            = 5,
-    JVM_OPC_iconst_3            = 6,
-    JVM_OPC_iconst_4            = 7,
-    JVM_OPC_iconst_5            = 8,
-    JVM_OPC_lconst_0            = 9,
-    JVM_OPC_lconst_1            = 10,
-    JVM_OPC_fconst_0            = 11,
-    JVM_OPC_fconst_1            = 12,
-    JVM_OPC_fconst_2            = 13,
-    JVM_OPC_dconst_0            = 14,
-    JVM_OPC_dconst_1            = 15,
-    JVM_OPC_bipush              = 16,
-    JVM_OPC_sipush              = 17,
-    JVM_OPC_ldc                 = 18,
-    JVM_OPC_ldc_w               = 19,
-    JVM_OPC_ldc2_w              = 20,
-    JVM_OPC_iload               = 21,
-    JVM_OPC_lload               = 22,
-    JVM_OPC_fload               = 23,
-    JVM_OPC_dload               = 24,
-    JVM_OPC_aload               = 25,
-    JVM_OPC_iload_0             = 26,
-    JVM_OPC_iload_1             = 27,
-    JVM_OPC_iload_2             = 28,
-    JVM_OPC_iload_3             = 29,
-    JVM_OPC_lload_0             = 30,
-    JVM_OPC_lload_1             = 31,
-    JVM_OPC_lload_2             = 32,
-    JVM_OPC_lload_3             = 33,
-    JVM_OPC_fload_0             = 34,
-    JVM_OPC_fload_1             = 35,
-    JVM_OPC_fload_2             = 36,
-    JVM_OPC_fload_3             = 37,
-    JVM_OPC_dload_0             = 38,
-    JVM_OPC_dload_1             = 39,
-    JVM_OPC_dload_2             = 40,
-    JVM_OPC_dload_3             = 41,
-    JVM_OPC_aload_0             = 42,
-    JVM_OPC_aload_1             = 43,
-    JVM_OPC_aload_2             = 44,
-    JVM_OPC_aload_3             = 45,
-    JVM_OPC_iaload              = 46,
-    JVM_OPC_laload              = 47,
-    JVM_OPC_faload              = 48,
-    JVM_OPC_daload              = 49,
-    JVM_OPC_aaload              = 50,
-    JVM_OPC_baload              = 51,
-    JVM_OPC_caload              = 52,
-    JVM_OPC_saload              = 53,
-    JVM_OPC_istore              = 54,
-    JVM_OPC_lstore              = 55,
-    JVM_OPC_fstore              = 56,
-    JVM_OPC_dstore              = 57,
-    JVM_OPC_astore              = 58,
-    JVM_OPC_istore_0            = 59,
-    JVM_OPC_istore_1            = 60,
-    JVM_OPC_istore_2            = 61,
-    JVM_OPC_istore_3            = 62,
-    JVM_OPC_lstore_0            = 63,
-    JVM_OPC_lstore_1            = 64,
-    JVM_OPC_lstore_2            = 65,
-    JVM_OPC_lstore_3            = 66,
-    JVM_OPC_fstore_0            = 67,
-    JVM_OPC_fstore_1            = 68,
-    JVM_OPC_fstore_2            = 69,
-    JVM_OPC_fstore_3            = 70,
-    JVM_OPC_dstore_0            = 71,
-    JVM_OPC_dstore_1            = 72,
-    JVM_OPC_dstore_2            = 73,
-    JVM_OPC_dstore_3            = 74,
-    JVM_OPC_astore_0            = 75,
-    JVM_OPC_astore_1            = 76,
-    JVM_OPC_astore_2            = 77,
-    JVM_OPC_astore_3            = 78,
-    JVM_OPC_iastore             = 79,
-    JVM_OPC_lastore             = 80,
-    JVM_OPC_fastore             = 81,
-    JVM_OPC_dastore             = 82,
-    JVM_OPC_aastore             = 83,
-    JVM_OPC_bastore             = 84,
-    JVM_OPC_castore             = 85,
-    JVM_OPC_sastore             = 86,
-    JVM_OPC_pop                 = 87,
-    JVM_OPC_pop2                = 88,
-    JVM_OPC_dup                 = 89,
-    JVM_OPC_dup_x1              = 90,
-    JVM_OPC_dup_x2              = 91,
-    JVM_OPC_dup2                = 92,
-    JVM_OPC_dup2_x1             = 93,
-    JVM_OPC_dup2_x2             = 94,
-    JVM_OPC_swap                = 95,
-    JVM_OPC_iadd                = 96,
-    JVM_OPC_ladd                = 97,
-    JVM_OPC_fadd                = 98,
-    JVM_OPC_dadd                = 99,
-    JVM_OPC_isub                = 100,
-    JVM_OPC_lsub                = 101,
-    JVM_OPC_fsub                = 102,
-    JVM_OPC_dsub                = 103,
-    JVM_OPC_imul                = 104,
-    JVM_OPC_lmul                = 105,
-    JVM_OPC_fmul                = 106,
-    JVM_OPC_dmul                = 107,
-    JVM_OPC_idiv                = 108,
-    JVM_OPC_ldiv                = 109,
-    JVM_OPC_fdiv                = 110,
-    JVM_OPC_ddiv                = 111,
-    JVM_OPC_irem                = 112,
-    JVM_OPC_lrem                = 113,
-    JVM_OPC_frem                = 114,
-    JVM_OPC_drem                = 115,
-    JVM_OPC_ineg                = 116,
-    JVM_OPC_lneg                = 117,
-    JVM_OPC_fneg                = 118,
-    JVM_OPC_dneg                = 119,
-    JVM_OPC_ishl                = 120,
-    JVM_OPC_lshl                = 121,
-    JVM_OPC_ishr                = 122,
-    JVM_OPC_lshr                = 123,
-    JVM_OPC_iushr               = 124,
-    JVM_OPC_lushr               = 125,
-    JVM_OPC_iand                = 126,
-    JVM_OPC_land                = 127,
-    JVM_OPC_ior                 = 128,
-    JVM_OPC_lor                 = 129,
-    JVM_OPC_ixor                = 130,
-    JVM_OPC_lxor                = 131,
-    JVM_OPC_iinc                = 132,
-    JVM_OPC_i2l                 = 133,
-    JVM_OPC_i2f                 = 134,
-    JVM_OPC_i2d                 = 135,
-    JVM_OPC_l2i                 = 136,
-    JVM_OPC_l2f                 = 137,
-    JVM_OPC_l2d                 = 138,
-    JVM_OPC_f2i                 = 139,
-    JVM_OPC_f2l                 = 140,
-    JVM_OPC_f2d                 = 141,
-    JVM_OPC_d2i                 = 142,
-    JVM_OPC_d2l                 = 143,
-    JVM_OPC_d2f                 = 144,
-    JVM_OPC_i2b                 = 145,
-    JVM_OPC_i2c                 = 146,
-    JVM_OPC_i2s                 = 147,
-    JVM_OPC_lcmp                = 148,
-    JVM_OPC_fcmpl               = 149,
-    JVM_OPC_fcmpg               = 150,
-    JVM_OPC_dcmpl               = 151,
-    JVM_OPC_dcmpg               = 152,
-    JVM_OPC_ifeq                = 153,
-    JVM_OPC_ifne                = 154,
-    JVM_OPC_iflt                = 155,
-    JVM_OPC_ifge                = 156,
-    JVM_OPC_ifgt                = 157,
-    JVM_OPC_ifle                = 158,
-    JVM_OPC_if_icmpeq           = 159,
-    JVM_OPC_if_icmpne           = 160,
-    JVM_OPC_if_icmplt           = 161,
-    JVM_OPC_if_icmpge           = 162,
-    JVM_OPC_if_icmpgt           = 163,
-    JVM_OPC_if_icmple           = 164,
-    JVM_OPC_if_acmpeq           = 165,
-    JVM_OPC_if_acmpne           = 166,
-    JVM_OPC_goto                = 167,
-    JVM_OPC_jsr                 = 168,
-    JVM_OPC_ret                 = 169,
-    JVM_OPC_tableswitch         = 170,
-    JVM_OPC_lookupswitch        = 171,
-    JVM_OPC_ireturn             = 172,
-    JVM_OPC_lreturn             = 173,
-    JVM_OPC_freturn             = 174,
-    JVM_OPC_dreturn             = 175,
-    JVM_OPC_areturn             = 176,
-    JVM_OPC_return              = 177,
-    JVM_OPC_getstatic           = 178,
-    JVM_OPC_putstatic           = 179,
-    JVM_OPC_getfield            = 180,
-    JVM_OPC_putfield            = 181,
-    JVM_OPC_invokevirtual       = 182,
-    JVM_OPC_invokespecial       = 183,
-    JVM_OPC_invokestatic        = 184,
-    JVM_OPC_invokeinterface     = 185,
-    JVM_OPC_invokedynamic       = 186,
-    JVM_OPC_new                 = 187,
-    JVM_OPC_newarray            = 188,
-    JVM_OPC_anewarray           = 189,
-    JVM_OPC_arraylength         = 190,
-    JVM_OPC_athrow              = 191,
-    JVM_OPC_checkcast           = 192,
-    JVM_OPC_instanceof          = 193,
-    JVM_OPC_monitorenter        = 194,
-    JVM_OPC_monitorexit         = 195,
-    JVM_OPC_wide                = 196,
-    JVM_OPC_multianewarray      = 197,
-    JVM_OPC_ifnull              = 198,
-    JVM_OPC_ifnonnull           = 199,
-    JVM_OPC_goto_w              = 200,
-    JVM_OPC_jsr_w               = 201,
-    JVM_OPC_MAX                 = 201
-};
-
-/* Opcode length initializer, use with something like:
- *   unsigned char opcode_length[JVM_OPC_MAX+1] = JVM_OPCODE_LENGTH_INITIALIZER;
- */
-#define JVM_OPCODE_LENGTH_INITIALIZER { \
-   1,   /* nop */                       \
-   1,   /* aconst_null */               \
-   1,   /* iconst_m1 */                 \
-   1,   /* iconst_0 */                  \
-   1,   /* iconst_1 */                  \
-   1,   /* iconst_2 */                  \
-   1,   /* iconst_3 */                  \
-   1,   /* iconst_4 */                  \
-   1,   /* iconst_5 */                  \
-   1,   /* lconst_0 */                  \
-   1,   /* lconst_1 */                  \
-   1,   /* fconst_0 */                  \
-   1,   /* fconst_1 */                  \
-   1,   /* fconst_2 */                  \
-   1,   /* dconst_0 */                  \
-   1,   /* dconst_1 */                  \
-   2,   /* bipush */                    \
-   3,   /* sipush */                    \
-   2,   /* ldc */                       \
-   3,   /* ldc_w */                     \
-   3,   /* ldc2_w */                    \
-   2,   /* iload */                     \
-   2,   /* lload */                     \
-   2,   /* fload */                     \
-   2,   /* dload */                     \
-   2,   /* aload */                     \
-   1,   /* iload_0 */                   \
-   1,   /* iload_1 */                   \
-   1,   /* iload_2 */                   \
-   1,   /* iload_3 */                   \
-   1,   /* lload_0 */                   \
-   1,   /* lload_1 */                   \
-   1,   /* lload_2 */                   \
-   1,   /* lload_3 */                   \
-   1,   /* fload_0 */                   \
-   1,   /* fload_1 */                   \
-   1,   /* fload_2 */                   \
-   1,   /* fload_3 */                   \
-   1,   /* dload_0 */                   \
-   1,   /* dload_1 */                   \
-   1,   /* dload_2 */                   \
-   1,   /* dload_3 */                   \
-   1,   /* aload_0 */                   \
-   1,   /* aload_1 */                   \
-   1,   /* aload_2 */                   \
-   1,   /* aload_3 */                   \
-   1,   /* iaload */                    \
-   1,   /* laload */                    \
-   1,   /* faload */                    \
-   1,   /* daload */                    \
-   1,   /* aaload */                    \
-   1,   /* baload */                    \
-   1,   /* caload */                    \
-   1,   /* saload */                    \
-   2,   /* istore */                    \
-   2,   /* lstore */                    \
-   2,   /* fstore */                    \
-   2,   /* dstore */                    \
-   2,   /* astore */                    \
-   1,   /* istore_0 */                  \
-   1,   /* istore_1 */                  \
-   1,   /* istore_2 */                  \
-   1,   /* istore_3 */                  \
-   1,   /* lstore_0 */                  \
-   1,   /* lstore_1 */                  \
-   1,   /* lstore_2 */                  \
-   1,   /* lstore_3 */                  \
-   1,   /* fstore_0 */                  \
-   1,   /* fstore_1 */                  \
-   1,   /* fstore_2 */                  \
-   1,   /* fstore_3 */                  \
-   1,   /* dstore_0 */                  \
-   1,   /* dstore_1 */                  \
-   1,   /* dstore_2 */                  \
-   1,   /* dstore_3 */                  \
-   1,   /* astore_0 */                  \
-   1,   /* astore_1 */                  \
-   1,   /* astore_2 */                  \
-   1,   /* astore_3 */                  \
-   1,   /* iastore */                   \
-   1,   /* lastore */                   \
-   1,   /* fastore */                   \
-   1,   /* dastore */                   \
-   1,   /* aastore */                   \
-   1,   /* bastore */                   \
-   1,   /* castore */                   \
-   1,   /* sastore */                   \
-   1,   /* pop */                       \
-   1,   /* pop2 */                      \
-   1,   /* dup */                       \
-   1,   /* dup_x1 */                    \
-   1,   /* dup_x2 */                    \
-   1,   /* dup2 */                      \
-   1,   /* dup2_x1 */                   \
-   1,   /* dup2_x2 */                   \
-   1,   /* swap */                      \
-   1,   /* iadd */                      \
-   1,   /* ladd */                      \
-   1,   /* fadd */                      \
-   1,   /* dadd */                      \
-   1,   /* isub */                      \
-   1,   /* lsub */                      \
-   1,   /* fsub */                      \
-   1,   /* dsub */                      \
-   1,   /* imul */                      \
-   1,   /* lmul */                      \
-   1,   /* fmul */                      \
-   1,   /* dmul */                      \
-   1,   /* idiv */                      \
-   1,   /* ldiv */                      \
-   1,   /* fdiv */                      \
-   1,   /* ddiv */                      \
-   1,   /* irem */                      \
-   1,   /* lrem */                      \
-   1,   /* frem */                      \
-   1,   /* drem */                      \
-   1,   /* ineg */                      \
-   1,   /* lneg */                      \
-   1,   /* fneg */                      \
-   1,   /* dneg */                      \
-   1,   /* ishl */                      \
-   1,   /* lshl */                      \
-   1,   /* ishr */                      \
-   1,   /* lshr */                      \
-   1,   /* iushr */                     \
-   1,   /* lushr */                     \
-   1,   /* iand */                      \
-   1,   /* land */                      \
-   1,   /* ior */                       \
-   1,   /* lor */                       \
-   1,   /* ixor */                      \
-   1,   /* lxor */                      \
-   3,   /* iinc */                      \
-   1,   /* i2l */                       \
-   1,   /* i2f */                       \
-   1,   /* i2d */                       \
-   1,   /* l2i */                       \
-   1,   /* l2f */                       \
-   1,   /* l2d */                       \
-   1,   /* f2i */                       \
-   1,   /* f2l */                       \
-   1,   /* f2d */                       \
-   1,   /* d2i */                       \
-   1,   /* d2l */                       \
-   1,   /* d2f */                       \
-   1,   /* i2b */                       \
-   1,   /* i2c */                       \
-   1,   /* i2s */                       \
-   1,   /* lcmp */                      \
-   1,   /* fcmpl */                     \
-   1,   /* fcmpg */                     \
-   1,   /* dcmpl */                     \
-   1,   /* dcmpg */                     \
-   3,   /* ifeq */                      \
-   3,   /* ifne */                      \
-   3,   /* iflt */                      \
-   3,   /* ifge */                      \
-   3,   /* ifgt */                      \
-   3,   /* ifle */                      \
-   3,   /* if_icmpeq */                 \
-   3,   /* if_icmpne */                 \
-   3,   /* if_icmplt */                 \
-   3,   /* if_icmpge */                 \
-   3,   /* if_icmpgt */                 \
-   3,   /* if_icmple */                 \
-   3,   /* if_acmpeq */                 \
-   3,   /* if_acmpne */                 \
-   3,   /* goto */                      \
-   3,   /* jsr */                       \
-   2,   /* ret */                       \
-   99,  /* tableswitch */               \
-   99,  /* lookupswitch */              \
-   1,   /* ireturn */                   \
-   1,   /* lreturn */                   \
-   1,   /* freturn */                   \
-   1,   /* dreturn */                   \
-   1,   /* areturn */                   \
-   1,   /* return */                    \
-   3,   /* getstatic */                 \
-   3,   /* putstatic */                 \
-   3,   /* getfield */                  \
-   3,   /* putfield */                  \
-   3,   /* invokevirtual */             \
-   3,   /* invokespecial */             \
-   3,   /* invokestatic */              \
-   5,   /* invokeinterface */           \
-   5,   /* invokedynamic */             \
-   3,   /* new */                       \
-   2,   /* newarray */                  \
-   3,   /* anewarray */                 \
-   1,   /* arraylength */               \
-   1,   /* athrow */                    \
-   3,   /* checkcast */                 \
-   3,   /* instanceof */                \
-   1,   /* monitorenter */              \
-   1,   /* monitorexit */               \
-   0,   /* wide */                      \
-   4,   /* multianewarray */            \
-   3,   /* ifnull */                    \
-   3,   /* ifnonnull */                 \
-   5,   /* goto_w */                    \
-   5    /* jsr_w */                     \
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-#endif /* CLASSFILE_CONSTANTS */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/native/include/classfile_constants.h.template	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,581 @@
+/*
+ * Copyright (c) 2004, 2017, 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.
+ */
+
+#ifndef CLASSFILE_CONSTANTS_H
+#define CLASSFILE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Classfile version number for this information */
+#define JVM_CLASSFILE_MAJOR_VERSION @@VERSION_CLASSFILE_MAJOR@@
+#define JVM_CLASSFILE_MINOR_VERSION @@VERSION_CLASSFILE_MINOR@@
+
+/* Flags */
+
+enum {
+    JVM_ACC_PUBLIC        = 0x0001,
+    JVM_ACC_PRIVATE       = 0x0002,
+    JVM_ACC_PROTECTED     = 0x0004,
+    JVM_ACC_STATIC        = 0x0008,
+    JVM_ACC_FINAL         = 0x0010,
+    JVM_ACC_SYNCHRONIZED  = 0x0020,
+    JVM_ACC_SUPER         = 0x0020,
+    JVM_ACC_VOLATILE      = 0x0040,
+    JVM_ACC_BRIDGE        = 0x0040,
+    JVM_ACC_TRANSIENT     = 0x0080,
+    JVM_ACC_VARARGS       = 0x0080,
+    JVM_ACC_NATIVE        = 0x0100,
+    JVM_ACC_INTERFACE     = 0x0200,
+    JVM_ACC_ABSTRACT      = 0x0400,
+    JVM_ACC_STRICT        = 0x0800,
+    JVM_ACC_SYNTHETIC     = 0x1000,
+    JVM_ACC_ANNOTATION    = 0x2000,
+    JVM_ACC_ENUM          = 0x4000,
+    JVM_ACC_MODULE        = 0x8000
+};
+
+#define JVM_ACC_PUBLIC_BIT        0
+#define JVM_ACC_PRIVATE_BIT       1
+#define JVM_ACC_PROTECTED_BIT     2
+#define JVM_ACC_STATIC_BIT        3
+#define JVM_ACC_FINAL_BIT         4
+#define JVM_ACC_SYNCHRONIZED_BIT  5
+#define JVM_ACC_SUPER_BIT         5
+#define JVM_ACC_VOLATILE_BIT      6
+#define JVM_ACC_BRIDGE_BIT        6
+#define JVM_ACC_TRANSIENT_BIT     7
+#define JVM_ACC_VARARGS_BIT       7
+#define JVM_ACC_NATIVE_BIT        8
+#define JVM_ACC_INTERFACE_BIT     9
+#define JVM_ACC_ABSTRACT_BIT      10
+#define JVM_ACC_STRICT_BIT        11
+#define JVM_ACC_SYNTHETIC_BIT     12
+#define JVM_ACC_ANNOTATION_BIT    13
+#define JVM_ACC_ENUM_BIT          14
+
+/* Used in newarray instruction. */
+
+enum {
+    JVM_T_BOOLEAN = 4,
+    JVM_T_CHAR    = 5,
+    JVM_T_FLOAT   = 6,
+    JVM_T_DOUBLE  = 7,
+    JVM_T_BYTE    = 8,
+    JVM_T_SHORT   = 9,
+    JVM_T_INT     = 10,
+    JVM_T_LONG    = 11
+};
+
+/* Constant Pool Entries */
+
+enum {
+    JVM_CONSTANT_Utf8                   = 1,
+    JVM_CONSTANT_Unicode                = 2, /* unused */
+    JVM_CONSTANT_Integer                = 3,
+    JVM_CONSTANT_Float                  = 4,
+    JVM_CONSTANT_Long                   = 5,
+    JVM_CONSTANT_Double                 = 6,
+    JVM_CONSTANT_Class                  = 7,
+    JVM_CONSTANT_String                 = 8,
+    JVM_CONSTANT_Fieldref               = 9,
+    JVM_CONSTANT_Methodref              = 10,
+    JVM_CONSTANT_InterfaceMethodref     = 11,
+    JVM_CONSTANT_NameAndType            = 12,
+    JVM_CONSTANT_MethodHandle           = 15,  // JSR 292
+    JVM_CONSTANT_MethodType             = 16,  // JSR 292
+    JVM_CONSTANT_InvokeDynamic          = 18,
+    JVM_CONSTANT_ExternalMax            = 18
+};
+
+/* JVM_CONSTANT_MethodHandle subtypes */
+enum {
+    JVM_REF_getField                = 1,
+    JVM_REF_getStatic               = 2,
+    JVM_REF_putField                = 3,
+    JVM_REF_putStatic               = 4,
+    JVM_REF_invokeVirtual           = 5,
+    JVM_REF_invokeStatic            = 6,
+    JVM_REF_invokeSpecial           = 7,
+    JVM_REF_newInvokeSpecial        = 8,
+    JVM_REF_invokeInterface         = 9
+};
+
+/* StackMapTable type item numbers */
+
+enum {
+    JVM_ITEM_Top                = 0,
+    JVM_ITEM_Integer            = 1,
+    JVM_ITEM_Float              = 2,
+    JVM_ITEM_Double             = 3,
+    JVM_ITEM_Long               = 4,
+    JVM_ITEM_Null               = 5,
+    JVM_ITEM_UninitializedThis  = 6,
+    JVM_ITEM_Object             = 7,
+    JVM_ITEM_Uninitialized      = 8
+};
+
+/* Type signatures */
+
+enum {
+    JVM_SIGNATURE_ARRAY         = '[',
+    JVM_SIGNATURE_BYTE          = 'B',
+    JVM_SIGNATURE_CHAR          = 'C',
+    JVM_SIGNATURE_CLASS         = 'L',
+    JVM_SIGNATURE_ENDCLASS      = ';',
+    JVM_SIGNATURE_ENUM          = 'E',
+    JVM_SIGNATURE_FLOAT         = 'F',
+    JVM_SIGNATURE_DOUBLE        = 'D',
+    JVM_SIGNATURE_FUNC          = '(',
+    JVM_SIGNATURE_ENDFUNC       = ')',
+    JVM_SIGNATURE_INT           = 'I',
+    JVM_SIGNATURE_LONG          = 'J',
+    JVM_SIGNATURE_SHORT         = 'S',
+    JVM_SIGNATURE_VOID          = 'V',
+    JVM_SIGNATURE_BOOLEAN       = 'Z'
+};
+
+/* Opcodes */
+
+enum {
+    JVM_OPC_nop                 = 0,
+    JVM_OPC_aconst_null         = 1,
+    JVM_OPC_iconst_m1           = 2,
+    JVM_OPC_iconst_0            = 3,
+    JVM_OPC_iconst_1            = 4,
+    JVM_OPC_iconst_2            = 5,
+    JVM_OPC_iconst_3            = 6,
+    JVM_OPC_iconst_4            = 7,
+    JVM_OPC_iconst_5            = 8,
+    JVM_OPC_lconst_0            = 9,
+    JVM_OPC_lconst_1            = 10,
+    JVM_OPC_fconst_0            = 11,
+    JVM_OPC_fconst_1            = 12,
+    JVM_OPC_fconst_2            = 13,
+    JVM_OPC_dconst_0            = 14,
+    JVM_OPC_dconst_1            = 15,
+    JVM_OPC_bipush              = 16,
+    JVM_OPC_sipush              = 17,
+    JVM_OPC_ldc                 = 18,
+    JVM_OPC_ldc_w               = 19,
+    JVM_OPC_ldc2_w              = 20,
+    JVM_OPC_iload               = 21,
+    JVM_OPC_lload               = 22,
+    JVM_OPC_fload               = 23,
+    JVM_OPC_dload               = 24,
+    JVM_OPC_aload               = 25,
+    JVM_OPC_iload_0             = 26,
+    JVM_OPC_iload_1             = 27,
+    JVM_OPC_iload_2             = 28,
+    JVM_OPC_iload_3             = 29,
+    JVM_OPC_lload_0             = 30,
+    JVM_OPC_lload_1             = 31,
+    JVM_OPC_lload_2             = 32,
+    JVM_OPC_lload_3             = 33,
+    JVM_OPC_fload_0             = 34,
+    JVM_OPC_fload_1             = 35,
+    JVM_OPC_fload_2             = 36,
+    JVM_OPC_fload_3             = 37,
+    JVM_OPC_dload_0             = 38,
+    JVM_OPC_dload_1             = 39,
+    JVM_OPC_dload_2             = 40,
+    JVM_OPC_dload_3             = 41,
+    JVM_OPC_aload_0             = 42,
+    JVM_OPC_aload_1             = 43,
+    JVM_OPC_aload_2             = 44,
+    JVM_OPC_aload_3             = 45,
+    JVM_OPC_iaload              = 46,
+    JVM_OPC_laload              = 47,
+    JVM_OPC_faload              = 48,
+    JVM_OPC_daload              = 49,
+    JVM_OPC_aaload              = 50,
+    JVM_OPC_baload              = 51,
+    JVM_OPC_caload              = 52,
+    JVM_OPC_saload              = 53,
+    JVM_OPC_istore              = 54,
+    JVM_OPC_lstore              = 55,
+    JVM_OPC_fstore              = 56,
+    JVM_OPC_dstore              = 57,
+    JVM_OPC_astore              = 58,
+    JVM_OPC_istore_0            = 59,
+    JVM_OPC_istore_1            = 60,
+    JVM_OPC_istore_2            = 61,
+    JVM_OPC_istore_3            = 62,
+    JVM_OPC_lstore_0            = 63,
+    JVM_OPC_lstore_1            = 64,
+    JVM_OPC_lstore_2            = 65,
+    JVM_OPC_lstore_3            = 66,
+    JVM_OPC_fstore_0            = 67,
+    JVM_OPC_fstore_1            = 68,
+    JVM_OPC_fstore_2            = 69,
+    JVM_OPC_fstore_3            = 70,
+    JVM_OPC_dstore_0            = 71,
+    JVM_OPC_dstore_1            = 72,
+    JVM_OPC_dstore_2            = 73,
+    JVM_OPC_dstore_3            = 74,
+    JVM_OPC_astore_0            = 75,
+    JVM_OPC_astore_1            = 76,
+    JVM_OPC_astore_2            = 77,
+    JVM_OPC_astore_3            = 78,
+    JVM_OPC_iastore             = 79,
+    JVM_OPC_lastore             = 80,
+    JVM_OPC_fastore             = 81,
+    JVM_OPC_dastore             = 82,
+    JVM_OPC_aastore             = 83,
+    JVM_OPC_bastore             = 84,
+    JVM_OPC_castore             = 85,
+    JVM_OPC_sastore             = 86,
+    JVM_OPC_pop                 = 87,
+    JVM_OPC_pop2                = 88,
+    JVM_OPC_dup                 = 89,
+    JVM_OPC_dup_x1              = 90,
+    JVM_OPC_dup_x2              = 91,
+    JVM_OPC_dup2                = 92,
+    JVM_OPC_dup2_x1             = 93,
+    JVM_OPC_dup2_x2             = 94,
+    JVM_OPC_swap                = 95,
+    JVM_OPC_iadd                = 96,
+    JVM_OPC_ladd                = 97,
+    JVM_OPC_fadd                = 98,
+    JVM_OPC_dadd                = 99,
+    JVM_OPC_isub                = 100,
+    JVM_OPC_lsub                = 101,
+    JVM_OPC_fsub                = 102,
+    JVM_OPC_dsub                = 103,
+    JVM_OPC_imul                = 104,
+    JVM_OPC_lmul                = 105,
+    JVM_OPC_fmul                = 106,
+    JVM_OPC_dmul                = 107,
+    JVM_OPC_idiv                = 108,
+    JVM_OPC_ldiv                = 109,
+    JVM_OPC_fdiv                = 110,
+    JVM_OPC_ddiv                = 111,
+    JVM_OPC_irem                = 112,
+    JVM_OPC_lrem                = 113,
+    JVM_OPC_frem                = 114,
+    JVM_OPC_drem                = 115,
+    JVM_OPC_ineg                = 116,
+    JVM_OPC_lneg                = 117,
+    JVM_OPC_fneg                = 118,
+    JVM_OPC_dneg                = 119,
+    JVM_OPC_ishl                = 120,
+    JVM_OPC_lshl                = 121,
+    JVM_OPC_ishr                = 122,
+    JVM_OPC_lshr                = 123,
+    JVM_OPC_iushr               = 124,
+    JVM_OPC_lushr               = 125,
+    JVM_OPC_iand                = 126,
+    JVM_OPC_land                = 127,
+    JVM_OPC_ior                 = 128,
+    JVM_OPC_lor                 = 129,
+    JVM_OPC_ixor                = 130,
+    JVM_OPC_lxor                = 131,
+    JVM_OPC_iinc                = 132,
+    JVM_OPC_i2l                 = 133,
+    JVM_OPC_i2f                 = 134,
+    JVM_OPC_i2d                 = 135,
+    JVM_OPC_l2i                 = 136,
+    JVM_OPC_l2f                 = 137,
+    JVM_OPC_l2d                 = 138,
+    JVM_OPC_f2i                 = 139,
+    JVM_OPC_f2l                 = 140,
+    JVM_OPC_f2d                 = 141,
+    JVM_OPC_d2i                 = 142,
+    JVM_OPC_d2l                 = 143,
+    JVM_OPC_d2f                 = 144,
+    JVM_OPC_i2b                 = 145,
+    JVM_OPC_i2c                 = 146,
+    JVM_OPC_i2s                 = 147,
+    JVM_OPC_lcmp                = 148,
+    JVM_OPC_fcmpl               = 149,
+    JVM_OPC_fcmpg               = 150,
+    JVM_OPC_dcmpl               = 151,
+    JVM_OPC_dcmpg               = 152,
+    JVM_OPC_ifeq                = 153,
+    JVM_OPC_ifne                = 154,
+    JVM_OPC_iflt                = 155,
+    JVM_OPC_ifge                = 156,
+    JVM_OPC_ifgt                = 157,
+    JVM_OPC_ifle                = 158,
+    JVM_OPC_if_icmpeq           = 159,
+    JVM_OPC_if_icmpne           = 160,
+    JVM_OPC_if_icmplt           = 161,
+    JVM_OPC_if_icmpge           = 162,
+    JVM_OPC_if_icmpgt           = 163,
+    JVM_OPC_if_icmple           = 164,
+    JVM_OPC_if_acmpeq           = 165,
+    JVM_OPC_if_acmpne           = 166,
+    JVM_OPC_goto                = 167,
+    JVM_OPC_jsr                 = 168,
+    JVM_OPC_ret                 = 169,
+    JVM_OPC_tableswitch         = 170,
+    JVM_OPC_lookupswitch        = 171,
+    JVM_OPC_ireturn             = 172,
+    JVM_OPC_lreturn             = 173,
+    JVM_OPC_freturn             = 174,
+    JVM_OPC_dreturn             = 175,
+    JVM_OPC_areturn             = 176,
+    JVM_OPC_return              = 177,
+    JVM_OPC_getstatic           = 178,
+    JVM_OPC_putstatic           = 179,
+    JVM_OPC_getfield            = 180,
+    JVM_OPC_putfield            = 181,
+    JVM_OPC_invokevirtual       = 182,
+    JVM_OPC_invokespecial       = 183,
+    JVM_OPC_invokestatic        = 184,
+    JVM_OPC_invokeinterface     = 185,
+    JVM_OPC_invokedynamic       = 186,
+    JVM_OPC_new                 = 187,
+    JVM_OPC_newarray            = 188,
+    JVM_OPC_anewarray           = 189,
+    JVM_OPC_arraylength         = 190,
+    JVM_OPC_athrow              = 191,
+    JVM_OPC_checkcast           = 192,
+    JVM_OPC_instanceof          = 193,
+    JVM_OPC_monitorenter        = 194,
+    JVM_OPC_monitorexit         = 195,
+    JVM_OPC_wide                = 196,
+    JVM_OPC_multianewarray      = 197,
+    JVM_OPC_ifnull              = 198,
+    JVM_OPC_ifnonnull           = 199,
+    JVM_OPC_goto_w              = 200,
+    JVM_OPC_jsr_w               = 201,
+    JVM_OPC_MAX                 = 201
+};
+
+/* Opcode length initializer, use with something like:
+ *   unsigned char opcode_length[JVM_OPC_MAX+1] = JVM_OPCODE_LENGTH_INITIALIZER;
+ */
+#define JVM_OPCODE_LENGTH_INITIALIZER { \
+   1,   /* nop */                       \
+   1,   /* aconst_null */               \
+   1,   /* iconst_m1 */                 \
+   1,   /* iconst_0 */                  \
+   1,   /* iconst_1 */                  \
+   1,   /* iconst_2 */                  \
+   1,   /* iconst_3 */                  \
+   1,   /* iconst_4 */                  \
+   1,   /* iconst_5 */                  \
+   1,   /* lconst_0 */                  \
+   1,   /* lconst_1 */                  \
+   1,   /* fconst_0 */                  \
+   1,   /* fconst_1 */                  \
+   1,   /* fconst_2 */                  \
+   1,   /* dconst_0 */                  \
+   1,   /* dconst_1 */                  \
+   2,   /* bipush */                    \
+   3,   /* sipush */                    \
+   2,   /* ldc */                       \
+   3,   /* ldc_w */                     \
+   3,   /* ldc2_w */                    \
+   2,   /* iload */                     \
+   2,   /* lload */                     \
+   2,   /* fload */                     \
+   2,   /* dload */                     \
+   2,   /* aload */                     \
+   1,   /* iload_0 */                   \
+   1,   /* iload_1 */                   \
+   1,   /* iload_2 */                   \
+   1,   /* iload_3 */                   \
+   1,   /* lload_0 */                   \
+   1,   /* lload_1 */                   \
+   1,   /* lload_2 */                   \
+   1,   /* lload_3 */                   \
+   1,   /* fload_0 */                   \
+   1,   /* fload_1 */                   \
+   1,   /* fload_2 */                   \
+   1,   /* fload_3 */                   \
+   1,   /* dload_0 */                   \
+   1,   /* dload_1 */                   \
+   1,   /* dload_2 */                   \
+   1,   /* dload_3 */                   \
+   1,   /* aload_0 */                   \
+   1,   /* aload_1 */                   \
+   1,   /* aload_2 */                   \
+   1,   /* aload_3 */                   \
+   1,   /* iaload */                    \
+   1,   /* laload */                    \
+   1,   /* faload */                    \
+   1,   /* daload */                    \
+   1,   /* aaload */                    \
+   1,   /* baload */                    \
+   1,   /* caload */                    \
+   1,   /* saload */                    \
+   2,   /* istore */                    \
+   2,   /* lstore */                    \
+   2,   /* fstore */                    \
+   2,   /* dstore */                    \
+   2,   /* astore */                    \
+   1,   /* istore_0 */                  \
+   1,   /* istore_1 */                  \
+   1,   /* istore_2 */                  \
+   1,   /* istore_3 */                  \
+   1,   /* lstore_0 */                  \
+   1,   /* lstore_1 */                  \
+   1,   /* lstore_2 */                  \
+   1,   /* lstore_3 */                  \
+   1,   /* fstore_0 */                  \
+   1,   /* fstore_1 */                  \
+   1,   /* fstore_2 */                  \
+   1,   /* fstore_3 */                  \
+   1,   /* dstore_0 */                  \
+   1,   /* dstore_1 */                  \
+   1,   /* dstore_2 */                  \
+   1,   /* dstore_3 */                  \
+   1,   /* astore_0 */                  \
+   1,   /* astore_1 */                  \
+   1,   /* astore_2 */                  \
+   1,   /* astore_3 */                  \
+   1,   /* iastore */                   \
+   1,   /* lastore */                   \
+   1,   /* fastore */                   \
+   1,   /* dastore */                   \
+   1,   /* aastore */                   \
+   1,   /* bastore */                   \
+   1,   /* castore */                   \
+   1,   /* sastore */                   \
+   1,   /* pop */                       \
+   1,   /* pop2 */                      \
+   1,   /* dup */                       \
+   1,   /* dup_x1 */                    \
+   1,   /* dup_x2 */                    \
+   1,   /* dup2 */                      \
+   1,   /* dup2_x1 */                   \
+   1,   /* dup2_x2 */                   \
+   1,   /* swap */                      \
+   1,   /* iadd */                      \
+   1,   /* ladd */                      \
+   1,   /* fadd */                      \
+   1,   /* dadd */                      \
+   1,   /* isub */                      \
+   1,   /* lsub */                      \
+   1,   /* fsub */                      \
+   1,   /* dsub */                      \
+   1,   /* imul */                      \
+   1,   /* lmul */                      \
+   1,   /* fmul */                      \
+   1,   /* dmul */                      \
+   1,   /* idiv */                      \
+   1,   /* ldiv */                      \
+   1,   /* fdiv */                      \
+   1,   /* ddiv */                      \
+   1,   /* irem */                      \
+   1,   /* lrem */                      \
+   1,   /* frem */                      \
+   1,   /* drem */                      \
+   1,   /* ineg */                      \
+   1,   /* lneg */                      \
+   1,   /* fneg */                      \
+   1,   /* dneg */                      \
+   1,   /* ishl */                      \
+   1,   /* lshl */                      \
+   1,   /* ishr */                      \
+   1,   /* lshr */                      \
+   1,   /* iushr */                     \
+   1,   /* lushr */                     \
+   1,   /* iand */                      \
+   1,   /* land */                      \
+   1,   /* ior */                       \
+   1,   /* lor */                       \
+   1,   /* ixor */                      \
+   1,   /* lxor */                      \
+   3,   /* iinc */                      \
+   1,   /* i2l */                       \
+   1,   /* i2f */                       \
+   1,   /* i2d */                       \
+   1,   /* l2i */                       \
+   1,   /* l2f */                       \
+   1,   /* l2d */                       \
+   1,   /* f2i */                       \
+   1,   /* f2l */                       \
+   1,   /* f2d */                       \
+   1,   /* d2i */                       \
+   1,   /* d2l */                       \
+   1,   /* d2f */                       \
+   1,   /* i2b */                       \
+   1,   /* i2c */                       \
+   1,   /* i2s */                       \
+   1,   /* lcmp */                      \
+   1,   /* fcmpl */                     \
+   1,   /* fcmpg */                     \
+   1,   /* dcmpl */                     \
+   1,   /* dcmpg */                     \
+   3,   /* ifeq */                      \
+   3,   /* ifne */                      \
+   3,   /* iflt */                      \
+   3,   /* ifge */                      \
+   3,   /* ifgt */                      \
+   3,   /* ifle */                      \
+   3,   /* if_icmpeq */                 \
+   3,   /* if_icmpne */                 \
+   3,   /* if_icmplt */                 \
+   3,   /* if_icmpge */                 \
+   3,   /* if_icmpgt */                 \
+   3,   /* if_icmple */                 \
+   3,   /* if_acmpeq */                 \
+   3,   /* if_acmpne */                 \
+   3,   /* goto */                      \
+   3,   /* jsr */                       \
+   2,   /* ret */                       \
+   99,  /* tableswitch */               \
+   99,  /* lookupswitch */              \
+   1,   /* ireturn */                   \
+   1,   /* lreturn */                   \
+   1,   /* freturn */                   \
+   1,   /* dreturn */                   \
+   1,   /* areturn */                   \
+   1,   /* return */                    \
+   3,   /* getstatic */                 \
+   3,   /* putstatic */                 \
+   3,   /* getfield */                  \
+   3,   /* putfield */                  \
+   3,   /* invokevirtual */             \
+   3,   /* invokespecial */             \
+   3,   /* invokestatic */              \
+   5,   /* invokeinterface */           \
+   5,   /* invokedynamic */             \
+   3,   /* new */                       \
+   2,   /* newarray */                  \
+   3,   /* anewarray */                 \
+   1,   /* arraylength */               \
+   1,   /* athrow */                    \
+   3,   /* checkcast */                 \
+   3,   /* instanceof */                \
+   1,   /* monitorenter */              \
+   1,   /* monitorexit */               \
+   0,   /* wide */                      \
+   4,   /* multianewarray */            \
+   3,   /* ifnull */                    \
+   3,   /* ifnonnull */                 \
+   5,   /* goto_w */                    \
+   5    /* jsr_w */                     \
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* CLASSFILE_CONSTANTS */
--- a/src/java.base/share/native/libjava/Reflection.c	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/native/libjava/Reflection.c	Fri Feb 02 01:52:03 2018 +0000
@@ -30,13 +30,7 @@
 JNIEXPORT jclass JNICALL
 Java_jdk_internal_reflect_Reflection_getCallerClass__(JNIEnv *env, jclass unused)
 {
-    return JVM_GetCallerClass(env, JVM_CALLER_DEPTH);
-}
-
-JNIEXPORT jclass JNICALL
-Java_jdk_internal_reflect_Reflection_getCallerClass__I(JNIEnv *env, jclass unused, jint depth)
-{
-    return JVM_GetCallerClass(env, depth);
+    return JVM_GetCallerClass(env);
 }
 
 JNIEXPORT jint JNICALL
--- a/src/java.base/share/native/libjava/System.c	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.base/share/native/libjava/System.c	Fri Feb 02 01:52:03 2018 +0000
@@ -119,9 +119,6 @@
 #define VENDOR_URL_BUG "http://bugreport.java.com/bugreport/"
 #endif
 
-#define JAVA_MAX_SUPPORTED_VERSION 54
-#define JAVA_MAX_SUPPORTED_MINOR_VERSION 0
-
 #ifdef JAVA_SPECIFICATION_VENDOR /* Third party may NOT overwrite this. */
   #error "ERROR: No override of JAVA_SPECIFICATION_VENDOR is allowed"
 #else
@@ -227,8 +224,8 @@
     PUTPROP(props, "java.vendor.url", VENDOR_URL);
     PUTPROP(props, "java.vendor.url.bug", VENDOR_URL_BUG);
 
-    jio_snprintf(buf, sizeof(buf), "%d.%d", JAVA_MAX_SUPPORTED_VERSION,
-                                            JAVA_MAX_SUPPORTED_MINOR_VERSION);
+    jio_snprintf(buf, sizeof(buf), "%d.%d", JVM_CLASSFILE_MAJOR_VERSION,
+                                            JVM_CLASSFILE_MINOR_VERSION);
     PUTPROP(props, "java.class.version", buf);
 
     if (sprops->awt_toolkit) {
--- a/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java	Fri Feb 02 01:52:03 2018 +0000
@@ -57,6 +57,7 @@
      * 1.8: lambda expressions and default methods
      *   9: modules, small cleanups to 1.7 and 1.8 changes
      *  10: local-variable type inference (var)
+     *  11: to be determined changes
      */
 
     /**
@@ -162,7 +163,15 @@
      *
      * @since 10
      */
-     RELEASE_10;
+     RELEASE_10,
+
+    /**
+     * The version recognized by the Java Platform, Standard Edition
+     * 11.
+     *
+     * @since 11
+     */
+     RELEASE_11;
 
     // Note that when adding constants for newer releases, the
     // behavior of latest() and latestSupported() must be updated too.
@@ -173,7 +182,7 @@
      * @return the latest source version that can be modeled
      */
     public static SourceVersion latest() {
-        return RELEASE_10;
+        return RELEASE_11;
     }
 
     private static final SourceVersion latestSupported = getLatestSupported();
@@ -183,6 +192,8 @@
             String specVersion = System.getProperty("java.specification.version");
 
             switch (specVersion) {
+                case "11":
+                    return RELEASE_11;
                 case "10":
                     return RELEASE_10;
                 case "9":
--- a/src/java.compiler/share/classes/javax/tools/FileManagerUtils.java	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2014, 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 javax.tools;
-
-import java.io.File;
-import java.nio.file.Path;
-import java.util.Iterator;
-
-/**
- * Package-private utility methods to convert between files and paths.
- *
- * @since 9
- */
-class FileManagerUtils {
-    private FileManagerUtils() { }
-
-    static Iterable<Path> asPaths(final Iterable<? extends File> files) {
-        return () -> new Iterator<Path>() {
-            Iterator<? extends File> iter = files.iterator();
-
-            @Override
-            public boolean hasNext() {
-                return iter.hasNext();
-            }
-
-            @Override
-            public Path next() {
-                return iter.next().toPath();
-            }
-        };
-    }
-
-    static Iterable<File> asFiles(final Iterable<? extends Path> paths) {
-        return () -> new Iterator<File>() {
-            Iterator<? extends Path> iter = paths.iterator();
-
-            @Override
-            public boolean hasNext() {
-                return iter.hasNext();
-            }
-
-            @Override
-            public File next() {
-                Path p = iter.next();
-                try {
-                    return p.toFile();
-                } catch (UnsupportedOperationException e) {
-                    throw new IllegalArgumentException(p.toString(), e);
-                }
-            }
-        };
-    }
-}
--- a/src/java.compiler/share/classes/javax/tools/StandardJavaFileManager.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.compiler/share/classes/javax/tools/StandardJavaFileManager.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,7 @@
 import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collection;
-
-import static javax.tools.FileManagerUtils.*;
+import java.util.Iterator;
 
 /**
  * File manager based on {@linkplain File java.io.File} and {@linkplain Path java.nio.file.Path}.
@@ -447,4 +446,42 @@
       * @since 9
       */
     default void setPathFactory(PathFactory f) { }
+
+
+    private static Iterable<Path> asPaths(final Iterable<? extends File> files) {
+        return () -> new Iterator<Path>() {
+            Iterator<? extends File> iter = files.iterator();
+
+            @Override
+            public boolean hasNext() {
+                return iter.hasNext();
+            }
+
+            @Override
+            public Path next() {
+                return iter.next().toPath();
+            }
+        };
+    }
+
+    private static Iterable<File> asFiles(final Iterable<? extends Path> paths) {
+        return () -> new Iterator<File>() {
+            Iterator<? extends Path> iter = paths.iterator();
+
+            @Override
+            public boolean hasNext() {
+                return iter.hasNext();
+            }
+
+            @Override
+            public File next() {
+                Path p = iter.next();
+                try {
+                    return p.toFile();
+                } catch (UnsupportedOperationException e) {
+                    throw new IllegalArgumentException(p.toString(), e);
+                }
+            }
+        };
+    }
 }
--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m	Fri Feb 02 01:52:03 2018 +0000
@@ -954,11 +954,6 @@
     return lastKeyWindow;
 }
 
-- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame {
-    return !NSEqualSizes(self.nsWindow.frame.size, newFrame.size);
-}
-
-
 @end // AWTWindow
 
 
--- a/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -374,7 +374,10 @@
             // And set current image since we've read it now
             currentImage = 0;
         }
-        if (seekForwardOnly) {
+        // If the image positions list is empty as in the case of a tables-only
+        // stream, then attempting to access the element at index
+        // imagePositions.size() - 1 will cause an IndexOutOfBoundsException.
+        if (seekForwardOnly && !imagePositions.isEmpty()) {
             Long pos = imagePositions.get(imagePositions.size()-1);
             iis.flushBefore(pos.longValue());
         }
@@ -492,6 +495,11 @@
         if (!tablesOnlyChecked) {
             checkTablesOnly();
         }
+        // If the image positions list is empty as in the case of a tables-only
+        // stream, then no image data can be read.
+        if (imagePositions.isEmpty()) {
+            throw new IIOException("No image data present to read");
+        }
         if (imageIndex < imagePositions.size()) {
             iis.seek(imagePositions.get(imageIndex).longValue());
         } else {
--- a/src/java.desktop/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -739,6 +739,17 @@
                     // If chunk type is 'IDAT', we've reached the image data.
                     if (imageStartPosition == -1L) {
                         /*
+                         * The PNG specification mandates that if colorType is
+                         * PNG_COLOR_PALETTE then the PLTE chunk should appear
+                         * before the first IDAT chunk.
+                         */
+                        if (colorType == PNG_COLOR_PALETTE &&
+                            !(metadata.PLTE_present))
+                        {
+                            throw new IIOException("Required PLTE chunk"
+                                    + " missing");
+                        }
+                        /*
                          * PNGs may contain multiple IDAT chunks containing
                          * a portion of image data. We store the position of
                          * the first IDAT chunk and continue with iteration
@@ -986,7 +997,9 @@
         }
 
         int inputBands = inputBandsForColorType[metadata.IHDR_colorType];
-        int bytesPerRow = (inputBands*passWidth*metadata.IHDR_bitDepth + 7)/8;
+        int bitsPerRow = Math.
+                multiplyExact((inputBands * metadata.IHDR_bitDepth), passWidth);
+        int bytesPerRow = (bitsPerRow + 7) / 8;
 
         // Read the image row-by-row
         for (int srcY = 0; srcY < passHeight; srcY++) {
@@ -1037,7 +1050,8 @@
         int bytesPerPixel = (bitDepth == 16) ? 2 : 1;
         bytesPerPixel *= inputBands;
 
-        int bytesPerRow = (inputBands*passWidth*bitDepth + 7)/8;
+        int bitsPerRow = Math.multiplyExact((inputBands * bitDepth), passWidth);
+        int bytesPerRow = (bitsPerRow + 7) / 8;
         int eltsPerRow = (bitDepth == 16) ? bytesPerRow/2 : bytesPerRow;
 
         // If no pixels need updating, just skip the input data
--- a/src/java.desktop/share/classes/java/awt/Toolkit.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/Toolkit.java	Fri Feb 02 01:52:03 2018 +0000
@@ -678,6 +678,11 @@
      * If the connection to the specified URL requires
      * either {@code URLPermission} or {@code SocketPermission},
      * then {@code URLPermission} is used for security checks.
+     * For compatibility with pre-1.2 security managers, if the access
+     * is denied with {@code FilePermission} or {@code SocketPermission},
+     * the method throws the {@code SecurityException}
+     * if the corresponding 1.1-style SecurityManager.checkXXX method
+     * also denies permission.
      * @param     url   the URL to use in fetching the pixel data.
      * @return    an image which gets its pixel data from
      *                         the specified URL.
@@ -719,6 +724,11 @@
      * If the connection to the specified URL requires
      * either {@code URLPermission} or {@code SocketPermission},
      * then {@code URLPermission} is used for security checks.
+     * For compatibility with pre-1.2 security managers, if the access
+     * is denied with {@code FilePermission} or {@code SocketPermission},
+     * the method throws {@code SecurityException}
+     * if the corresponding 1.1-style SecurityManager.checkXXX method
+     * also denies permission.
      * @param     url   the URL to use in fetching the pixel data.
      * @return    an image which gets its pixel data from
      *                         the specified URL.
--- a/src/java.desktop/share/classes/java/awt/image/BandedSampleModel.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/share/classes/java/awt/image/BandedSampleModel.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -185,7 +185,33 @@
     public DataBuffer createDataBuffer() {
         DataBuffer dataBuffer = null;
 
+        // The minimum size required to store samples of one band
         int size = scanlineStride * height;
+
+        if (numBanks == 1) {
+            /*
+             * The sample model contains a single bank of data buffer. Hence
+             * we need to compute the size required to store samples of all
+             * bands including the respective offsets.
+             */
+            int sizePerBand = size;
+            size += bandOffsets[0];
+            for (int index = 1; index < bandOffsets.length; index++) {
+                size += (bandOffsets[index] - size) + sizePerBand;
+            }
+        } else {
+            /*
+             * The sample model contains multiple banks of data buffer where
+             * each bank would correspond to a particular band. Hence we need
+             * to compute only the additional space required for band offsets.
+             */
+            int maxBandOffset = bandOffsets[0];
+            for (int index = 1; index < bandOffsets.length; index++) {
+                maxBandOffset = Math.max(maxBandOffset, bandOffsets[index]);
+            }
+            size += maxBandOffset;
+        }
+
         switch (dataType) {
         case DataBuffer.TYPE_BYTE:
             dataBuffer = new DataBufferByte(size, numBanks);
--- a/src/java.desktop/share/classes/javax/swing/tree/VariableHeightLayoutCache.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/share/classes/javax/swing/tree/VariableHeightLayoutCache.java	Fri Feb 02 01:52:03 2018 +0000
@@ -409,11 +409,10 @@
      */
     public void treeNodesChanged(TreeModelEvent e) {
         if(e != null) {
-            int               changedIndexs[];
-            TreeStateNode     changedNode;
+            int               changedIndexs[]  = e.getChildIndices();
+            TreeStateNode     changedNode = getNodeForPath(
+                    SwingUtilities2.getTreePath(e, getModel()), false, false);
 
-            changedIndexs = e.getChildIndices();
-            changedNode = getNodeForPath(SwingUtilities2.getTreePath(e, getModel()), false, false);
             if(changedNode != null) {
                 Object            changedValue = changedNode.getValue();
 
@@ -421,17 +420,12 @@
                    child indexs that are passed in. */
                 changedNode.updatePreferredSize();
                 if(changedNode.hasBeenExpanded() && changedIndexs != null) {
-                    int                counter;
-                    TreeStateNode      changedChildNode;
-
-                    for(counter = 0; counter < changedIndexs.length;
-                        counter++) {
-                        changedChildNode = (TreeStateNode)changedNode
-                                    .getChildAt(changedIndexs[counter]);
+                    for(int index : changedIndexs) {
+                        TreeStateNode changedChildNode = (TreeStateNode)changedNode
+                                    .getChildAt(index);
                         /* Reset the user object. */
                         changedChildNode.setUserObject
-                                    (treeModel.getChild(changedValue,
-                                                     changedIndexs[counter]));
+                                    (treeModel.getChild(changedValue, index));
                         changedChildNode.updatePreferredSize();
                     }
                 }
@@ -462,34 +456,26 @@
      */
     public void treeNodesInserted(TreeModelEvent e) {
         if(e != null) {
-            int               changedIndexs[];
-            TreeStateNode     changedParentNode;
-
-            changedIndexs = e.getChildIndices();
-            changedParentNode = getNodeForPath(SwingUtilities2.getTreePath(e, getModel()), false, false);
+            int               changedIndexs[] = e.getChildIndices();
+            TreeStateNode     changedParentNode = getNodeForPath(
+                    SwingUtilities2.getTreePath(e, getModel()), false, false);
             /* Only need to update the children if the node has been
                expanded once. */
             // PENDING(scott): make sure childIndexs is sorted!
             if(changedParentNode != null && changedIndexs != null &&
                changedIndexs.length > 0) {
                 if(changedParentNode.hasBeenExpanded()) {
-                    boolean            makeVisible;
-                    int                counter;
-                    Object             changedParent;
-                    TreeStateNode      newNode;
-                    int                oldChildCount = changedParentNode.
-                                          getChildCount();
+                    boolean   makeVisible =((changedParentNode == root &&
+                                            !rootVisible) ||
+                                            (changedParentNode.getRow() != -1 &&
+                                               changedParentNode.isExpanded()));
+                    int  oldChildCount = changedParentNode.getChildCount();
 
-                    changedParent = changedParentNode.getValue();
-                    makeVisible = ((changedParentNode == root &&
-                                    !rootVisible) ||
-                                   (changedParentNode.getRow() != -1 &&
-                                    changedParentNode.isExpanded()));
-                    for(counter = 0;counter < changedIndexs.length;counter++)
+                    for(int index : changedIndexs)
                     {
-                        newNode = this.createNodeAt(changedParentNode,
-                                                    changedIndexs[counter]);
+                        this.createNodeAt(changedParentNode, index);
                     }
+
                     if(oldChildCount == 0) {
                         // Update the size of the parent.
                         changedParentNode.updatePreferredSize();
@@ -643,7 +629,7 @@
                 rebuild(true);
             }
             else if(changedNode != null) {
-                int                              nodeIndex, oldRow;
+                int                              nodeIndex;
                 TreeStateNode                    newNode, parent;
                 boolean                          wasExpanded, wasVisible;
                 int                              newIndex;
@@ -925,24 +911,22 @@
       * row index, the last row index is returned.
       */
     private int getRowContainingYLocation(int location) {
+        final int rows = getRowCount();
+
+        if(rows <= 0)
+            return -1;
         if(isFixedRowHeight()) {
-            if(getRowCount() == 0)
-                return -1;
-            return Math.max(0, Math.min(getRowCount() - 1,
+            return Math.max(0, Math.min(rows - 1,
                                         location / getRowHeight()));
         }
 
-        int                    max, maxY, mid, min, minY;
-        TreeStateNode          node;
+        int max = rows, min = 0, mid = 0;
 
-        if((max = getRowCount()) <= 0)
-            return -1;
-        mid = min = 0;
         while(min < max) {
             mid = (max - min) / 2 + min;
-            node = (TreeStateNode)visibleNodes.elementAt(mid);
-            minY = node.getYOrigin();
-            maxY = minY + node.getPreferredHeight();
+            TreeStateNode node = (TreeStateNode)visibleNodes.elementAt(mid);
+            int minY = node.getYOrigin();
+            int maxY = minY + node.getPreferredHeight();
             if(location < minY) {
                 max = mid - 1;
             }
@@ -954,8 +938,8 @@
         }
         if(min == max) {
             mid = min;
-            if(mid >= getRowCount())
-                mid = getRowCount() - 1;
+            if(mid >= rows)
+                mid = rows - 1;
         }
         return mid;
     }
@@ -1008,9 +992,9 @@
             if(nodeWidth > maxWidth)
                 maxWidth = nodeWidth;
         }
+
         return maxWidth;
     }
-
     /**
       * Responsible for creating a TreeStateNode that will be used
       * to track display information about value.
@@ -1362,17 +1346,11 @@
                                                        isExpanded(),
                                                        boundsBuffer);
 
-            if(bounds == null) {
+            if(bounds == null || bounds.height == 0) {
                 xOrigin = 0;
                 preferredWidth = preferredHeight = 0;
                 updateNodeSizes = true;
-            }
-            else if(bounds.height == 0) {
-                xOrigin = 0;
-                preferredWidth = preferredHeight = 0;
-                updateNodeSizes = true;
-            }
-            else {
+            } else {
                 xOrigin = bounds.x;
                 preferredWidth = bounds.width;
                 if(isFixedRowHeight())
@@ -1477,24 +1455,14 @@
                     Object         realNode = getValue();
                     TreeModel      treeModel = getModel();
                     int            count = treeModel.getChildCount(realNode);
-
+                    int offset = originalRow == -1 ? -1 : originalRow + 1;
                     hasBeenExpanded = true;
-                    if(originalRow == -1) {
-                        for (int i = 0; i < count; i++) {
-                            newNode = createNodeForValue(treeModel.getChild
-                                                            (realNode, i));
-                            this.add(newNode);
-                            newNode.updatePreferredSize(-1);
-                        }
-                    }
-                    else {
-                        int offset = originalRow + 1;
-                        for (int i = 0; i < count; i++) {
-                            newNode = createNodeForValue(treeModel.getChild
-                                                       (realNode, i));
-                            this.add(newNode);
-                            newNode.updatePreferredSize(offset);
-                        }
+
+                    for (int i = 0; i < count; i++) {
+                        newNode = createNodeForValue(treeModel.getChild
+                                                        (realNode, i));
+                        this.add(newNode);
+                        newNode.updatePreferredSize(offset);
                     }
                 }
 
@@ -1502,14 +1470,9 @@
                 Enumeration<TreeNode> cursor = preorderEnumeration();
                 cursor.nextElement(); // don't add me, I'm already in
 
-                int newYOrigin;
+                int newYOrigin = isFixed || (this == root && !isRootVisible()) ?
+                                    0 : getYOrigin() + this.getPreferredHeight();
 
-                if(isFixed)
-                    newYOrigin = 0;
-                else if(this == root && !isRootVisible())
-                    newYOrigin = 0;
-                else
-                    newYOrigin = getYOrigin() + this.getPreferredHeight();
                 TreeStateNode   aNode;
                 if(!isFixed) {
                     while (cursor.hasMoreElements()) {
@@ -1744,14 +1707,10 @@
         protected boolean updateNextIndex() {
             // nextIndex == -1 identifies receiver, make sure is expanded
             // before descend.
-            if(nextIndex == -1 && !parent.isExpanded())
-                return false;
-
-            // Check that it can have kids
-            if(childCount == 0)
-                return false;
-            // Make sure next index not beyond child count.
-            else if(++nextIndex >= childCount)
+            if((nextIndex == -1 && !parent.isExpanded()) ||
+                childCount == 0 || // Check that it can have kids
+                ++nextIndex >= childCount) // Make sure next index not beyond
+                                             // child count.
                 return false;
 
             TreeStateNode       child = (TreeStateNode)parent.
--- a/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,7 @@
 
     public XRSurfaceData prepareSrcPict(int pixelVal) {
         if(pixelVal != curPixVal) {
-            xrCol.setColorValues(pixelVal, false);
+            xrCol.setColorValues(pixelVal, true);
             con.renderRectangle(srcPict.picture, XRUtils.PictOpSrc, xrCol, 0, 0, 1, 1);
             this.curPixVal = pixelVal;
         }
--- a/src/java.logging/share/classes/java/util/logging/LogManager.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.logging/share/classes/java/util/logging/LogManager.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -396,12 +396,6 @@
                         // Create and retain Logger for the root of the namespace.
                         owner.addLogger(root);
 
-                        // For backward compatibility: add any handlers configured using
-                        // ".handlers"
-                        owner.createLoggerHandlers("", ".handlers")
-                                .stream()
-                                .forEach(root::addHandler);
-
                         // Initialize level if not yet initialized
                         if (!root.isLevelInitialized()) {
                             root.setLevel(defaultLevel);
@@ -995,7 +989,8 @@
         }
     }
 
-    private List<Handler> createLoggerHandlers(final String name, final String handlersPropertyName)
+    private List<Handler> createLoggerHandlers(final String name,
+                                               final String handlersPropertyName)
     {
         String names[] = parseClassNames(handlersPropertyName);
         List<Handler> handlers = new ArrayList<>(names.length);
@@ -1198,7 +1193,7 @@
         }
         drainLoggerRefQueueBounded();
         LoggerContext cx = getUserContext();
-        if (cx.addLocalLogger(logger)) {
+        if (cx.addLocalLogger(logger) || forceLoadHandlers(logger)) {
             // Do we have a per logger handler too?
             // Note: this will add a 200ms penalty
             loadLoggerHandlers(logger, name, name + ".handlers");
@@ -1208,6 +1203,26 @@
         }
     }
 
+
+    // Checks whether the given logger is a special logger
+    // that still requires handler initialization.
+    // This method will only return true for the root and
+    // global loggers and only if called by the thread that
+    // performs initialization of the LogManager, during that
+    // initialization. Must only be called by addLogger.
+    @SuppressWarnings("deprecation")
+    private boolean forceLoadHandlers(Logger logger) {
+        // Called just after reading the primordial configuration, in
+        // the same thread that reads it.
+        // The root and global logger would already be present in the context
+        // by this point, but we would not have called loadLoggerHandlers
+        // yet.
+        return (logger == rootLogger ||  logger == Logger.global)
+                && !initializationDone
+                && initializedCalled
+                && configurationLock.isHeldByCurrentThread();
+    }
+
     // Private method to set a level on a logger.
     // If necessary, we raise privilege before doing the call.
     private static void doSetLevel(final Logger logger, final Level level) {
--- a/src/java.rmi/share/classes/sun/rmi/server/resources/rmid.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.rmi/share/classes/sun/rmi/server/resources/rmid.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 #
 #
-# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -50,7 +50,7 @@
 
 # {0} = the (string) illegal argument in question
 rmid.syntax.illegal.option=\
-	illegal option: {0}
+	invalid option: {0}
 
 # {0} = the (string) reason text that came with a thrown exception
 # "Activation.main" should not be translated, because it's a codepoint
--- a/src/java.scripting/share/classes/com/sun/tools/script/shell/Main.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.scripting/share/classes/com/sun/tools/script/shell/Main.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -122,7 +122,11 @@
                     }
                 }
                 continue;
-            } else if (arg.equals("-?") || arg.equals("-help")) {
+            } else if (arg.equals("-?") ||
+                       arg.equals("-h") ||
+                       arg.equals("--help") ||
+                       // -help: legacy.
+                       arg.equals("-help")) {
                 usage(EXIT_SUCCESS);
             } else if (arg.equals("-e")) {
                 seenScript = true;
--- a/src/java.scripting/share/classes/com/sun/tools/script/shell/messages.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.scripting/share/classes/com/sun/tools/script/shell/messages.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -55,8 +55,7 @@
 \  \-f <script file>     Evaluate given script file \n\
 \  \-f -                 Interactive mode, read script from standard input \n\
 \  \                     If this is used, this should be the last -f option \n\
-\  \-help                Print this usage message and exit \n\
-\  \-?                   Print this usage message and exit \n\
+\  \-? -h --help -help   Print this help message and exit \n\
 \  \-q                   List all scripting engines available and exit \n\
 \  \n\
 If [arguments..] are present and if no -e or -f option is used, then first\n\
--- a/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KeyImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -138,6 +138,12 @@
         case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
             return "aes256-cts-hmac-sha1-96";
 
+        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+            return "aes128-cts-hmac-sha256-128";
+
+        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+            return "aes256-cts-hmac-sha384-192";
+
         case EncryptedData.ETYPE_NULL:
             return "none";
 
--- a/src/java.security.jgss/share/classes/sun/security/jgss/krb5/CipherHelper.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/jgss/krb5/CipherHelper.java	Fri Feb 02 01:52:03 2018 +0000
@@ -40,6 +40,8 @@
 import java.security.GeneralSecurityException;
 import java.security.NoSuchAlgorithmException;
 import sun.security.krb5.*;
+import sun.security.krb5.internal.crypto.Aes128Sha2;
+import sun.security.krb5.internal.crypto.Aes256Sha2;
 import sun.security.krb5.internal.crypto.Des3;
 import sun.security.krb5.internal.crypto.Aes128;
 import sun.security.krb5.internal.crypto.Aes256;
@@ -101,6 +103,8 @@
 
         case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96:
         case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
+        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
             sgnAlg = -1;
             sealAlg = -1;
             break;
@@ -365,6 +369,33 @@
                 throw ge;
             }
 
+        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+            try {
+                byte[] answer = Aes128Sha2.calculateChecksum(keybytes, key_usage,
+                        buf, 0, total);
+                return answer;
+            } catch (GeneralSecurityException e) {
+                GSSException ge = new GSSException(GSSException.FAILURE, -1,
+                        "Could not use AES128 signing algorithm - " +
+                                e.getMessage());
+                ge.initCause(e);
+                throw ge;
+            }
+
+        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+            try {
+                byte[] answer = Aes256Sha2.calculateChecksum(keybytes, key_usage,
+                        buf, 0, total);
+                return answer;
+            } catch (GeneralSecurityException e) {
+                GSSException ge = new GSSException(GSSException.FAILURE, -1,
+                        "Could not use AES256 signing algorithm - " +
+                                e.getMessage());
+                ge.initCause(e);
+                throw ge;
+            }
+
+
         default:
             throw new GSSException(GSSException.FAILURE, -1,
                 "Unsupported encryption type: " + etype);
@@ -517,6 +548,11 @@
         case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
             return Aes256.getChecksumLength();
 
+        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+            return Aes128Sha2.getChecksumLength();
+        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+            return Aes256Sha2.getChecksumLength();
+
         case EncryptedData.ETYPE_ARCFOUR_HMAC:
             // only first 8 octets of HMAC Sgn_Cksum are used
             return HMAC_CHECKSUM_SIZE;
@@ -574,6 +610,14 @@
                     aes256Decrypt(token, ciphertext, cStart, cLen,
                                 plaintext, pStart, key_usage);
                     break;
+            case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+                    aes128Sha2Decrypt(token, ciphertext, cStart, cLen,
+                            plaintext, pStart, key_usage);
+                    break;
+            case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+                    aes256Sha2Decrypt(token, ciphertext, cStart, cLen,
+                            plaintext, pStart, key_usage);
+                    break;
             default:
                     throw new GSSException(GSSException.FAILURE, -1,
                         "Unsupported etype: " + etype);
@@ -654,6 +698,14 @@
                     aes256Decrypt(token, ciphertext, 0, cLen,
                                 plaintext, pStart, key_usage);
                     break;
+            case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+                    aes128Sha2Decrypt(token, ciphertext, 0, cLen,
+                            plaintext, pStart, key_usage);
+                    break;
+            case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+                    aes256Sha2Decrypt(token, ciphertext, 0, cLen,
+                            plaintext, pStart, key_usage);
+                    break;
             default:
                     throw new GSSException(GSSException.FAILURE, -1,
                         "Unsupported etype: " + etype);
@@ -720,6 +772,12 @@
             case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
                 return aes256Encrypt(confounder, tokenHeader,
                             plaintext, start, len, key_usage);
+            case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+                return aes128Sha2Encrypt(confounder, tokenHeader,
+                        plaintext, start, len, key_usage);
+            case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+                return aes256Sha2Encrypt(confounder, tokenHeader,
+                        plaintext, start, len, key_usage);
             default:
                 throw new GSSException(GSSException.FAILURE, -1,
                     "Unsupported etype: " + etype);
@@ -796,6 +854,14 @@
                     ctext = aes256Encrypt(confounder, tokenHeader,
                                 plaintext, pStart, pLen, key_usage);
                     break;
+            case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+                    ctext = aes128Sha2Encrypt(confounder, tokenHeader,
+                            plaintext, pStart, pLen, key_usage);
+                    break;
+            case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+                    ctext = aes256Sha2Encrypt(confounder, tokenHeader,
+                            plaintext, pStart, pLen, key_usage);
+                    break;
             default:
                     throw new GSSException(GSSException.FAILURE, -1,
                         "Unsupported etype: " + etype);
@@ -1317,6 +1383,38 @@
         }
     }
 
+    private byte[] aes128Sha2Encrypt(byte[] confounder, byte[] tokenHeader,
+            byte[] plaintext, int start, int len, int key_usage)
+            throws GSSException {
+
+        // encrypt { AES-plaintext-data | filler | header }
+        // AES-plaintext-data { confounder | plaintext }
+        // WrapToken = { tokenHeader |
+        //      Encrypt (confounder | plaintext | tokenHeader ) | HMAC }
+
+        byte[] all = new byte[confounder.length + len + tokenHeader.length];
+        System.arraycopy(confounder, 0, all, 0, confounder.length);
+        System.arraycopy(plaintext, start, all, confounder.length, len);
+        System.arraycopy(tokenHeader, 0, all, confounder.length+len,
+                tokenHeader.length);
+
+        // Krb5Token.debug("\naes128Sha2Encrypt:" + Krb5Token.getHexBytes(all));
+        try {
+            byte[] answer = Aes128Sha2.encryptRaw(keybytes, key_usage,
+                    ZERO_IV_AES,
+                    all, 0, all.length);
+            // Krb5Token.debug("\naes128Sha2Encrypt encrypted:" +
+            //                  Krb5Token.getHexBytes(answer));
+            return answer;
+        } catch (Exception e) {
+            // GeneralSecurityException, KrbCryptoException
+            GSSException ge = new GSSException(GSSException.FAILURE, -1,
+                    "Could not use Aes128Sha2 Cipher - " + e.getMessage());
+            ge.initCause(e);
+            throw ge;
+        }
+    }
+
     private void aes128Decrypt(WrapToken_v2 token, byte[] ciphertext,
         int cStart, int cLen, byte[] plaintext, int pStart, int key_usage)
         throws GSSException {
@@ -1354,6 +1452,43 @@
         */
     }
 
+    private void aes128Sha2Decrypt(WrapToken_v2 token, byte[] ciphertext,
+            int cStart, int cLen, byte[] plaintext, int pStart, int key_usage)
+            throws GSSException {
+
+        byte[] ptext = null;
+
+        try {
+            ptext = Aes128Sha2.decryptRaw(keybytes, key_usage,
+                    ZERO_IV_AES, ciphertext, cStart, cLen);
+        } catch (GeneralSecurityException e) {
+            GSSException ge = new GSSException(GSSException.FAILURE, -1,
+                    "Could not use AES128Sha2 Cipher - " + e.getMessage());
+            ge.initCause(e);
+            throw ge;
+        }
+
+        /*
+        Krb5Token.debug("\naes128Sha2Decrypt in: " +
+            Krb5Token.getHexBytes(ciphertext, cStart, cLen));
+        Krb5Token.debug("\naes128Sha2Decrypt plain: " +
+            Krb5Token.getHexBytes(ptext));
+        Krb5Token.debug("\naes128Sha2Decrypt ptext: " +
+            Krb5Token.getHexBytes(ptext));
+        */
+
+        // Strip out confounder and token header
+        int len = ptext.length - WrapToken_v2.CONFOUNDER_SIZE -
+                WrapToken_v2.TOKEN_HEADER_SIZE;
+        System.arraycopy(ptext, WrapToken_v2.CONFOUNDER_SIZE,
+                plaintext, pStart, len);
+
+        /*
+        Krb5Token.debug("\naes128Sha2Decrypt plaintext: " +
+            Krb5Token.getHexBytes(plaintext, pStart, len));
+        */
+    }
+
     private byte[] aes256Encrypt(byte[] confounder, byte[] tokenHeader,
         byte[] plaintext, int start, int len, int key_usage)
         throws GSSException {
@@ -1386,6 +1521,38 @@
         }
     }
 
+    private byte[] aes256Sha2Encrypt(byte[] confounder, byte[] tokenHeader,
+            byte[] plaintext, int start, int len, int key_usage)
+            throws GSSException {
+
+        // encrypt { AES-plaintext-data | filler | header }
+        // AES-plaintext-data { confounder | plaintext }
+        // WrapToken = { tokenHeader |
+        //       Encrypt (confounder | plaintext | tokenHeader ) | HMAC }
+
+        byte[] all = new byte[confounder.length + len + tokenHeader.length];
+        System.arraycopy(confounder, 0, all, 0, confounder.length);
+        System.arraycopy(plaintext, start, all, confounder.length, len);
+        System.arraycopy(tokenHeader, 0, all, confounder.length+len,
+                tokenHeader.length);
+
+        // Krb5Token.debug("\naes256Sha2Encrypt:" + Krb5Token.getHexBytes(all));
+
+        try {
+            byte[] answer = Aes256Sha2.encryptRaw(keybytes, key_usage,
+                    ZERO_IV_AES, all, 0, all.length);
+            // Krb5Token.debug("\naes256Sha2Encrypt encrypted:" +
+            //  Krb5Token.getHexBytes(answer));
+            return answer;
+        } catch (Exception e) {
+            // GeneralSecurityException, KrbCryptoException
+            GSSException ge = new GSSException(GSSException.FAILURE, -1,
+                    "Could not use Aes256Sha2 Cipher - " + e.getMessage());
+            ge.initCause(e);
+            throw ge;
+        }
+    }
+
     private void aes256Decrypt(WrapToken_v2 token, byte[] ciphertext,
         int cStart, int cLen, byte[] plaintext, int pStart, int key_usage)
         throws GSSException {
@@ -1423,6 +1590,43 @@
 
     }
 
+    private void aes256Sha2Decrypt(WrapToken_v2 token, byte[] ciphertext,
+            int cStart, int cLen, byte[] plaintext, int pStart, int key_usage)
+            throws GSSException {
+
+        byte[] ptext;
+        try {
+            ptext = Aes256Sha2.decryptRaw(keybytes, key_usage,
+                    ZERO_IV_AES, ciphertext, cStart, cLen);
+        } catch (GeneralSecurityException e) {
+            GSSException ge = new GSSException(GSSException.FAILURE, -1,
+                    "Could not use AES256Sha2 Cipher - " + e.getMessage());
+            ge.initCause(e);
+            throw ge;
+        }
+
+        /*
+        Krb5Token.debug("\naes256Sha2Decrypt in: " +
+            Krb5Token.getHexBytes(ciphertext, cStart, cLen));
+        Krb5Token.debug("\naes256Sha2Decrypt plain: " +
+            Krb5Token.getHexBytes(ptext));
+        Krb5Token.debug("\naes256Sha2Decrypt ptext: " +
+            Krb5Token.getHexBytes(ptext));
+        */
+
+        // Strip out confounder and token header
+        int len = ptext.length - WrapToken_v2.CONFOUNDER_SIZE -
+                WrapToken_v2.TOKEN_HEADER_SIZE;
+        System.arraycopy(ptext, WrapToken_v2.CONFOUNDER_SIZE,
+                plaintext, pStart, len);
+
+        /*
+        Krb5Token.debug("\naes256Sha2Decrypt plaintext: " +
+            Krb5Token.getHexBytes(plaintext, pStart, len));
+        */
+
+    }
+
     /**
      * This class provides a truncated inputstream needed by WrapToken. The
      * truncated inputstream is passed to CipherInputStream. It prevents
--- a/src/java.security.jgss/share/classes/sun/security/krb5/Checksum.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/Checksum.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -66,6 +66,10 @@
     public static final int CKSUMTYPE_HMAC_SHA1_96_AES128 = 15;        // 96
     public static final int CKSUMTYPE_HMAC_SHA1_96_AES256 = 16;        // 96
 
+    // rfc8009
+    public static final int CKSUMTYPE_HMAC_SHA256_128_AES128 = 19;        // 96
+    public static final int CKSUMTYPE_HMAC_SHA384_192_AES256 = 20;        // 96
+
     // draft-brezak-win2k-krb-rc4-hmac-04.txt
     public static final int CKSUMTYPE_HMAC_MD5_ARCFOUR = -138;
 
--- a/src/java.security.jgss/share/classes/sun/security/krb5/Config.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/Config.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,8 @@
                             if (Files.isDirectory(p)) continue;
                             String name = p.getFileName().toString();
                             if (name.matches("[a-zA-Z0-9_-]+") ||
-                                    name.endsWith(".conf")) {
+                                    (!name.startsWith(".") &&
+                                            name.endsWith(".conf"))) {
                                 // if dir is absolute, so is p
                                 readConfigFileLines(p, content, dups);
                             }
@@ -1030,11 +1031,19 @@
         } else if (input.startsWith("a") || (input.startsWith("A"))) {
             // AES
             if (input.equalsIgnoreCase("aes128-cts") ||
-                input.equalsIgnoreCase("aes128-cts-hmac-sha1-96")) {
+                    input.equalsIgnoreCase("aes128-sha1") ||
+                    input.equalsIgnoreCase("aes128-cts-hmac-sha1-96")) {
                 result = EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96;
             } else if (input.equalsIgnoreCase("aes256-cts") ||
-                input.equalsIgnoreCase("aes256-cts-hmac-sha1-96")) {
+                    input.equalsIgnoreCase("aes256-sha1") ||
+                    input.equalsIgnoreCase("aes256-cts-hmac-sha1-96")) {
                 result = EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96;
+            } else if (input.equalsIgnoreCase("aes128-sha2") ||
+                    input.equalsIgnoreCase("aes128-cts-hmac-sha256-128")) {
+                result = EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128;
+            } else if (input.equalsIgnoreCase("aes256-sha2") ||
+                    input.equalsIgnoreCase("aes256-cts-hmac-sha384-192")) {
+                result = EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192;
             // ARCFOUR-HMAC
             } else if (input.equalsIgnoreCase("arcfour-hmac") ||
                    input.equalsIgnoreCase("arcfour-hmac-md5")) {
@@ -1057,6 +1066,10 @@
             result = Checksum.CKSUMTYPE_HMAC_SHA1_96_AES128;
         } else if (input.equalsIgnoreCase("hmac-sha1-96-aes256")) {
             result = Checksum.CKSUMTYPE_HMAC_SHA1_96_AES256;
+        } else if (input.equalsIgnoreCase("hmac-sha256-128-aes128")) {
+            result = Checksum.CKSUMTYPE_HMAC_SHA256_128_AES128;
+        } else if (input.equalsIgnoreCase("hmac-sha384-192-aes256")) {
+            result = Checksum.CKSUMTYPE_HMAC_SHA384_192_AES256;
         } else if (input.equalsIgnoreCase("hmac-md5-rc4") ||
                 input.equalsIgnoreCase("hmac-md5-arcfour") ||
                 input.equalsIgnoreCase("hmac-md5-enc")) {
--- a/src/java.security.jgss/share/classes/sun/security/krb5/EncryptedData.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/EncryptedData.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -79,6 +79,12 @@
     public static final int
          ETYPE_AES256_CTS_HMAC_SHA1_96 = 18; // 16      0           16
 
+    // rfc8009
+    public static final int
+        ETYPE_AES128_CTS_HMAC_SHA256_128 = 19; // 16      0           16
+    public static final int
+        ETYPE_AES256_CTS_HMAC_SHA384_192 = 20; // 16      0           16
+
     /* used by self */
     private EncryptedData() {
     }
--- a/src/java.security.jgss/share/classes/sun/security/krb5/EncryptionKey.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/EncryptionKey.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -252,6 +252,12 @@
                 case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
                         return Aes256.stringToKey(password, salt, s2kparams);
 
+                case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+                        return Aes128Sha2.stringToKey(password, salt, s2kparams);
+
+                case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+                    return Aes256Sha2.stringToKey(password, salt, s2kparams);
+
                 default:
                         throw new IllegalArgumentException("encryption type " +
                         EType.toString(keyType) + " not supported");
@@ -293,6 +299,15 @@
                 throw new IllegalArgumentException("Algorithm " + algorithm +
                         " not enabled");
             }
+        } else if (algorithm.equalsIgnoreCase("aes128-cts-hmac-sha256-128")) {
+            keyType = EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128;
+        } else if (algorithm.equalsIgnoreCase("aes256-cts-hmac-sha384-192")) {
+            keyType = EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192;
+            // validate if AES256 is enabled
+            if (!EType.isSupported(keyType)) {
+                throw new IllegalArgumentException("Algorithm " + algorithm +
+                        " not enabled");
+            }
         } else {
             throw new IllegalArgumentException("Algorithm " + algorithm +
                 " not supported");
--- a/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsReq.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsReq.java	Fri Feb 02 01:52:03 2018 +0000
@@ -356,6 +356,8 @@
         case Checksum.CKSUMTYPE_HMAC_MD5_ARCFOUR:
         case Checksum.CKSUMTYPE_HMAC_SHA1_96_AES128:
         case Checksum.CKSUMTYPE_HMAC_SHA1_96_AES256:
+        case Checksum.CKSUMTYPE_HMAC_SHA256_128_AES128:
+        case Checksum.CKSUMTYPE_HMAC_SHA384_192_AES256:
             cksum = new Checksum(Checksum.CKSUMTYPE_DEFAULT, temp, key,
                 KeyUsage.KU_PA_TGS_REQ_CKSUM);
             break;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/Aes128CtsHmacSha2EType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto;
+
+import sun.security.krb5.KrbCryptoException;
+import sun.security.krb5.internal.*;
+import java.security.GeneralSecurityException;
+import sun.security.krb5.EncryptedData;
+import sun.security.krb5.Checksum;
+
+/*
+ * This class encapsulates the encryption type for aes128-cts-hmac-sha256-128
+ */
+
+public final class Aes128CtsHmacSha2EType extends EType {
+
+    public int eType() {
+        return EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128;
+    }
+
+    public int minimumPadSize() {
+        return 0;
+    }
+
+    public int confounderSize() {
+        return blockSize();
+    }
+
+    public int checksumType() {
+        return Checksum.CKSUMTYPE_HMAC_SHA256_128_AES128;
+    }
+
+    public int checksumSize() {
+        return Aes128Sha2.getChecksumLength();
+    }
+
+    public int blockSize() {
+        return 16;
+    }
+
+    public int keyType() {
+        return Krb5.KEYTYPE_AES;
+    }
+
+    public int keySize() {
+        return 16; // bytes
+    }
+
+    public byte[] encrypt(byte[] data, byte[] key, int usage)
+        throws KrbCryptoException {
+        byte[] ivec = new byte[blockSize()];
+        return encrypt(data, key, ivec, usage);
+    }
+
+    public byte[] encrypt(byte[] data, byte[] key, byte[] ivec, int usage)
+        throws KrbCryptoException {
+        try {
+            return Aes128Sha2.encrypt(key, usage, ivec, data, 0, data.length);
+        } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+        }
+    }
+
+    public byte[] decrypt(byte[] cipher, byte[] key, int usage)
+        throws KrbApErrException, KrbCryptoException {
+        byte[] ivec = new byte[blockSize()];
+        return decrypt(cipher, key, ivec, usage);
+    }
+
+    public byte[] decrypt(byte[] cipher, byte[] key, byte[] ivec, int usage)
+        throws KrbApErrException, KrbCryptoException {
+        try {
+            return Aes128Sha2.decrypt(key, usage, ivec, cipher, 0, cipher.length);
+        } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+        }
+    }
+
+    // Override default, because our decrypted data does not return confounder
+    // Should eventually get rid of EType.decryptedData and
+    // EncryptedData.decryptedData altogether
+    public byte[] decryptedData(byte[] data) {
+        return data;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/Aes128Sha2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto;
+
+import sun.security.krb5.internal.crypto.dk.AesSha2DkCrypto;
+import sun.security.krb5.KrbCryptoException;
+import java.security.GeneralSecurityException;
+
+/**
+ * Class with static methods for doing aes128-cts-hmac-sha256-128 operations.
+ */
+
+public class Aes128Sha2 {
+    private static final AesSha2DkCrypto CRYPTO = new AesSha2DkCrypto(128);
+
+    private Aes128Sha2() {
+    }
+
+    public static byte[] stringToKey(char[] password, String salt, byte[] params)
+        throws GeneralSecurityException {
+        return CRYPTO.stringToKey(password, salt, params);
+    }
+
+    // in bytes
+    public static int getChecksumLength() {
+        return CRYPTO.getChecksumLength();
+    }
+
+    public static byte[] calculateChecksum(byte[] baseKey, int usage,
+        byte[] input, int start, int len) throws GeneralSecurityException {
+            return CRYPTO.calculateChecksum(baseKey, usage, input, start, len);
+    }
+
+    public static byte[] encrypt(byte[] baseKey, int usage,
+        byte[] ivec, byte[] plaintext, int start, int len)
+        throws GeneralSecurityException, KrbCryptoException {
+            return CRYPTO.encrypt(baseKey, usage, ivec, null /* new_ivec */,
+                plaintext, start, len);
+    }
+
+    /* Encrypt plaintext; do not add confounder, or checksum */
+    public static byte[] encryptRaw(byte[] baseKey, int usage,
+        byte[] ivec, byte[] plaintext, int start, int len)
+        throws GeneralSecurityException, KrbCryptoException {
+        return CRYPTO.encryptRaw(baseKey, usage, ivec, plaintext, start, len);
+    }
+
+    public static byte[] decrypt(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len)
+        throws GeneralSecurityException {
+        return CRYPTO.decrypt(baseKey, usage, ivec, ciphertext, start, len);
+    }
+
+    /* Decrypt ciphertext; do not remove confounder, or check checksum */
+    public static byte[] decryptRaw(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len)
+        throws GeneralSecurityException {
+        return CRYPTO.decryptRaw(baseKey, usage, ivec, ciphertext, start, len);
+    }
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/Aes256CtsHmacSha2EType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto;
+
+import sun.security.krb5.KrbCryptoException;
+import sun.security.krb5.internal.*;
+import java.security.GeneralSecurityException;
+import sun.security.krb5.EncryptedData;
+import sun.security.krb5.Checksum;
+
+/*
+ * This class encapsulates the encryption type for aes256-cts-hmac-sha384-192
+ */
+
+public final class Aes256CtsHmacSha2EType extends EType {
+
+    public int eType() {
+        return EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192;
+    }
+
+    public int minimumPadSize() {
+        return 0;
+    }
+
+    public int confounderSize() {
+        return blockSize();
+    }
+
+    public int checksumType() {
+        return Checksum.CKSUMTYPE_HMAC_SHA384_192_AES256;
+    }
+
+    public int checksumSize() {
+        return Aes256Sha2.getChecksumLength();
+    }
+
+    public int blockSize() {
+        return 16;
+    }
+
+    public int keyType() {
+        return Krb5.KEYTYPE_AES;
+    }
+
+    public int keySize() {
+        return 32; // bytes
+    }
+
+    public byte[] encrypt(byte[] data, byte[] key, int usage)
+        throws KrbCryptoException {
+        byte[] ivec = new byte[blockSize()];
+        return encrypt(data, key, ivec, usage);
+    }
+
+    public byte[] encrypt(byte[] data, byte[] key, byte[] ivec, int usage)
+        throws KrbCryptoException {
+        try {
+            return Aes256Sha2.encrypt(key, usage, ivec, data, 0, data.length);
+        } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+        }
+    }
+
+    public byte[] decrypt(byte[] cipher, byte[] key, int usage)
+        throws KrbApErrException, KrbCryptoException {
+        byte[] ivec = new byte[blockSize()];
+        return decrypt(cipher, key, ivec, usage);
+    }
+
+    public byte[] decrypt(byte[] cipher, byte[] key, byte[] ivec, int usage)
+        throws KrbApErrException, KrbCryptoException {
+        try {
+            return Aes256Sha2.decrypt(key, usage, ivec, cipher, 0, cipher.length);
+        } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+        }
+    }
+
+    // Override default, because our decrypted data does not return confounder
+    // Should eventually get rid of EType.decryptedData and
+    // EncryptedData.decryptedData altogether
+    public byte[] decryptedData(byte[] data) {
+        return data;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/Aes256Sha2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto;
+
+import sun.security.krb5.internal.crypto.dk.AesSha2DkCrypto;
+import sun.security.krb5.KrbCryptoException;
+import java.security.GeneralSecurityException;
+
+/**
+ * Class with static methods for doing aes256-cts-hmac-sha384-192 operations.
+ */
+
+public class Aes256Sha2 {
+    private static final AesSha2DkCrypto CRYPTO = new AesSha2DkCrypto(256);
+
+    private Aes256Sha2() {
+    }
+
+    public static byte[] stringToKey(char[] password, String salt, byte[] params)
+        throws GeneralSecurityException {
+        return CRYPTO.stringToKey(password, salt, params);
+    }
+
+    // in bytes
+    public static int getChecksumLength() {
+        return CRYPTO.getChecksumLength();
+    }
+
+    public static byte[] calculateChecksum(byte[] baseKey, int usage,
+        byte[] input, int start, int len) throws GeneralSecurityException {
+            return CRYPTO.calculateChecksum(baseKey, usage, input, start, len);
+    }
+
+    public static byte[] encrypt(byte[] baseKey, int usage,
+        byte[] ivec, byte[] plaintext, int start, int len)
+        throws GeneralSecurityException, KrbCryptoException {
+            return CRYPTO.encrypt(baseKey, usage, ivec, null /* new_ivec */,
+                plaintext, start, len);
+    }
+
+    /* Encrypt plaintext; do not add confounder, padding, or checksum */
+    public static byte[] encryptRaw(byte[] baseKey, int usage,
+        byte[] ivec, byte[] plaintext, int start, int len)
+        throws GeneralSecurityException, KrbCryptoException {
+        return CRYPTO.encryptRaw(baseKey, usage, ivec, plaintext, start, len);
+    }
+
+    public static byte[] decrypt(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len)
+        throws GeneralSecurityException {
+        return CRYPTO.decrypt(baseKey, usage, ivec, ciphertext, start, len);
+    }
+
+    /*
+     * Decrypt ciphertext; do not remove confounder, padding, or check
+     * checksum
+     */
+    public static byte[] decryptRaw(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len)
+        throws GeneralSecurityException {
+        return CRYPTO.decryptRaw(baseKey, usage, ivec, ciphertext, start, len);
+    }
+};
--- a/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/EType.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/EType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -106,7 +106,19 @@
                 "sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType";
             break;
 
-        case EncryptedData.ETYPE_ARCFOUR_HMAC:
+        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+            eType = new Aes128CtsHmacSha2EType();
+            eTypeName =
+                    "sun.security.krb5.internal.crypto.Aes128CtsHmacSha2EType";
+            break;
+
+        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+            eType = new Aes256CtsHmacSha2EType();
+            eTypeName =
+                    "sun.security.krb5.internal.crypto.Aes256CtsHmacSha2EType";
+            break;
+
+            case EncryptedData.ETYPE_ARCFOUR_HMAC:
             eType = new ArcFourHmacEType();
             eTypeName = "sun.security.krb5.internal.crypto.ArcFourHmacEType";
             break;
@@ -189,20 +201,23 @@
     // is set to false.
 
     private static final int[] BUILTIN_ETYPES = new int[] {
-        EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96,
-        EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96,
-        EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD,
-        EncryptedData.ETYPE_ARCFOUR_HMAC,
-        EncryptedData.ETYPE_DES_CBC_CRC,
-        EncryptedData.ETYPE_DES_CBC_MD5,
+            EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96,
+            EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96,
+            EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192,
+            EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128,
+            EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD,
+            EncryptedData.ETYPE_ARCFOUR_HMAC,
+            EncryptedData.ETYPE_DES_CBC_CRC,
+            EncryptedData.ETYPE_DES_CBC_MD5,
     };
 
     private static final int[] BUILTIN_ETYPES_NOAES256 = new int[] {
-        EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96,
-        EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD,
-        EncryptedData.ETYPE_ARCFOUR_HMAC,
-        EncryptedData.ETYPE_DES_CBC_CRC,
-        EncryptedData.ETYPE_DES_CBC_MD5,
+            EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96,
+            EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128,
+            EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD,
+            EncryptedData.ETYPE_ARCFOUR_HMAC,
+            EncryptedData.ETYPE_DES_CBC_CRC,
+            EncryptedData.ETYPE_DES_CBC_MD5,
     };
 
 
@@ -363,7 +378,10 @@
             return "RC4 with HMAC";
         case 24:
             return "RC4 with HMAC EXP";
-
+        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+            return "AES128 CTS mode with HMAC SHA256-128";
+        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
+            return "AES256 CTS mode with HMAC SHA384-192";
         }
         return "Unknown (" + type + ")";
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/HmacSha2Aes128CksumType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto;
+
+import sun.security.krb5.Checksum;
+import sun.security.krb5.KrbCryptoException;
+import sun.security.krb5.internal.*;
+import java.security.GeneralSecurityException;
+
+/*
+ * This class encapsulates the checksum type for aes128-cts-sha256
+ */
+
+public class HmacSha2Aes128CksumType extends CksumType {
+
+    public HmacSha2Aes128CksumType() {
+    }
+
+    public int confounderSize() {
+        return 16;
+    }
+
+    public int cksumType() {
+        return Checksum.CKSUMTYPE_HMAC_SHA256_128_AES128;
+    }
+
+    public boolean isSafe() {
+        return true;
+    }
+
+    public int cksumSize() {
+        return 16;  // bytes
+    }
+
+    public int keyType() {
+        return Krb5.KEYTYPE_AES;
+    }
+
+    public int keySize() {
+        return 16;   // bytes
+    }
+
+    public byte[] calculateChecksum(byte[] data, int size) {
+        return null;
+    }
+
+    /**
+     * Calculates keyed checksum.
+     * @param data the data used to generate the checksum.
+     * @param size length of the data.
+     * @param key the key used to encrypt the checksum.
+     * @return keyed checksum.
+     */
+    public byte[] calculateKeyedChecksum(byte[] data, int size, byte[] key,
+        int usage) throws KrbCryptoException {
+
+         try {
+            return Aes128Sha2.calculateChecksum(key, usage, data, 0, size);
+         } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+         }
+    }
+
+    /**
+     * Verifies keyed checksum.
+     * @param data the data.
+     * @param size the length of data.
+     * @param key the key used to encrypt the checksum.
+     * @param checksum the checksum.
+     * @return true if verification is successful.
+     */
+    public boolean verifyKeyedChecksum(byte[] data, int size,
+        byte[] key, byte[] checksum, int usage) throws KrbCryptoException {
+
+         try {
+            byte[] newCksum = Aes128Sha2.calculateChecksum(key, usage,
+                                                        data, 0, size);
+            return isChecksumEqual(checksum, newCksum);
+         } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+         }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/HmacSha2Aes256CksumType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto;
+
+import sun.security.krb5.Checksum;
+import sun.security.krb5.KrbCryptoException;
+import sun.security.krb5.internal.*;
+import java.security.GeneralSecurityException;
+
+/*
+ * This class encapsulates the checksum type for aes256-cts-sha384
+ */
+
+public class HmacSha2Aes256CksumType extends CksumType {
+
+    public HmacSha2Aes256CksumType() {
+    }
+
+    public int confounderSize() {
+        return 16;
+    }
+
+    public int cksumType() {
+        return Checksum.CKSUMTYPE_HMAC_SHA384_192_AES256;
+    }
+
+    public boolean isSafe() {
+        return true;
+    }
+
+    public int cksumSize() {
+        return 24;  // bytes
+    }
+
+    public int keyType() {
+        return Krb5.KEYTYPE_AES;
+    }
+
+    public int keySize() {
+        return 32;   // bytes
+    }
+
+    public byte[] calculateChecksum(byte[] data, int size) {
+        return null;
+    }
+
+    /**
+     * Calculates keyed checksum.
+     * @param data the data used to generate the checksum.
+     * @param size length of the data.
+     * @param key the key used to encrypt the checksum.
+     * @return keyed checksum.
+     */
+    public byte[] calculateKeyedChecksum(byte[] data, int size, byte[] key,
+        int usage) throws KrbCryptoException {
+
+         try {
+            return Aes256Sha2.calculateChecksum(key, usage, data, 0, size);
+         } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+         }
+    }
+
+    /**
+     * Verifies keyed checksum.
+     * @param data the data.
+     * @param size the length of data.
+     * @param key the key used to encrypt the checksum.
+     * @param checksum the checksum.
+     * @return true if verification is successful.
+     */
+    public boolean verifyKeyedChecksum(byte[] data, int size,
+        byte[] key, byte[] checksum, int usage) throws KrbCryptoException {
+
+         try {
+            byte[] newCksum = Aes256Sha2.calculateChecksum(key, usage, data,
+                                                        0, size);
+            return isChecksumEqual(checksum, newCksum);
+         } catch (GeneralSecurityException e) {
+            KrbCryptoException ke = new KrbCryptoException(e.getMessage());
+            ke.initCause(e);
+            throw ke;
+         }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/dk/AesSha2DkCrypto.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,541 @@
+/*
+ * Copyright (c) 2017, 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 sun.security.krb5.internal.crypto.dk;
+
+import javax.crypto.Cipher;
+import javax.crypto.Mac;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.PBEKeySpec;
+import java.security.GeneralSecurityException;
+import sun.security.krb5.KrbCryptoException;
+import sun.security.krb5.Confounder;
+import sun.security.krb5.internal.crypto.KeyUsage;
+import java.util.Arrays;
+
+/**
+ * This class provides the implementation of AES Encryption with
+ * HMAC-SHA2 for Kerberos 5
+ * https://tools.ietf.org/html/rfc8009
+ *
+ * Algorithm profile described in [KCRYPTO]:
+ * +--------------------------------------------------------------------+
+ * |               protocol key format          128- or 256-bit string  |
+ * |                                                                    |
+ * |            string-to-key function          PBKDF2+DK with variable |
+ * |                                          iteration count (see      |
+ * |                                          above)                    |
+ * |                                                                    |
+ * |  default string-to-key parameters          00 00 80 00             |
+ * |                                                                    |
+ * |        key-generation seed length          key size                |
+ * |                                                                    |
+ * |            random-to-key function          identity function       |
+ * |                                                                    |
+ * |                  hash function, H          SHA-256 / SHA-384       |
+ * |                                                                    |
+ * |               HMAC output size, h          16/24 octets            |
+ * |                                                                    |
+ * |             message block size, m          1 octet                 |
+ * |                                                                    |
+ * |  encryption/decryption functions,          AES in CBC-CTS mode     |
+ * |  E and D                                 (cipher block size 16     |
+ * |                                          octets), with next to     |
+ * |                                          last block as CBC-style   |
+ * |                                          ivec                      |
+ * +--------------------------------------------------------------------+
+ *
+ * Supports aes128-cts-hmac-sha256-128 and aes256-cts-hmac-sha384-192
+ */
+
+public class AesSha2DkCrypto extends DkCrypto {
+
+    private static final boolean debug = false;
+
+    private static final int BLOCK_SIZE = 16;
+    private static final int DEFAULT_ITERATION_COUNT = 32768;
+    private static final byte[] ZERO_IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0,
+                                                       0, 0, 0, 0, 0, 0, 0, 0 };
+
+    private static final byte[] ETYPE_NAME_128 =
+            "aes128-cts-hmac-sha256-128".getBytes();
+    private static final byte[] ETYPE_NAME_256 =
+            "aes256-cts-hmac-sha384-192".getBytes();
+
+    private final int hashSize;
+    private final int keyLength;
+
+    public AesSha2DkCrypto(int length) {
+        keyLength = length;
+        hashSize = (length == 128?128:192)/8;
+    }
+
+    protected int getKeySeedLength() {
+        return keyLength;   // bits; AES key material
+    }
+
+    public byte[] stringToKey(char[] password, String salt, byte[] s2kparams)
+        throws GeneralSecurityException {
+
+        byte[] saltUtf8 = null;
+        try {
+            saltUtf8 = salt.getBytes("UTF-8");
+            return stringToKey(password, saltUtf8, s2kparams);
+        } catch (Exception e) {
+            return null;
+        } finally {
+            if (saltUtf8 != null) {
+                Arrays.fill(saltUtf8, (byte)0);
+            }
+        }
+    }
+
+    // https://tools.ietf.org/html/rfc8009#section-4
+    private byte[] stringToKey(char[] secret, byte[] salt, byte[] params)
+        throws GeneralSecurityException {
+
+        int iter_count = DEFAULT_ITERATION_COUNT;
+        if (params != null) {
+            if (params.length != 4) {
+                throw new RuntimeException("Invalid parameter to stringToKey");
+            }
+            iter_count = readBigEndian(params, 0, 4);
+        }
+
+        byte[] saltp = new byte[26 + 1 + salt.length];
+        if (keyLength == 128) {
+            System.arraycopy(ETYPE_NAME_128, 0, saltp, 0, 26);
+        } else {
+            System.arraycopy(ETYPE_NAME_256, 0, saltp, 0, 26);
+        }
+        System.arraycopy(salt, 0, saltp, 27, salt.length);
+        byte[] tmpKey = randomToKey(PBKDF2(secret, saltp, iter_count,
+                                        getKeySeedLength()));
+        byte[] result = dk(tmpKey, KERBEROS_CONSTANT);
+        return result;
+    }
+
+    protected byte[] randomToKey(byte[] in) {
+        // simple identity operation
+        return in;
+    }
+
+    /*
+     * https://tools.ietf.org/html/rfc8009#section-3 defines
+     * a new key derivation function:
+     *
+     * KDF-HMAC-SHA2(key, label, k) = k-truncate(K1)
+     * K1 = HMAC-SHA-256(key, 0x00000001 | label | 0x00 | k) or
+     * K1 = HMAC-SHA-384(key, 0x00000001 | label | 0x00 | k)
+     *
+     * where label is constant below.
+     */
+    protected byte[] dr(byte[] key, byte[] constant)
+            throws GeneralSecurityException {
+        byte[] result;
+        byte[] input = new byte[constant.length + 9];
+        // 0x00000001 at the beginning
+        input[3] = 1;
+        // label follows
+        System.arraycopy(constant, 0, input, 4, constant.length);
+        SecretKeySpec tkey = new SecretKeySpec(key, "HMAC");
+        Mac mac = Mac.getInstance(
+                keyLength == 128? "HmacSHA256": "HmacSHA384");
+        mac.init(tkey);
+
+        int k;
+        if (keyLength == 128) {
+            // key length for enc and hmac both 128
+            k = 128;
+        } else {
+            byte last = constant[constant.length-1];
+            if (last == (byte)0x99 || last == (byte)0x55) {
+                // 192 for hmac
+                k = 192;
+            } else {
+                // 256 for enc
+                k = 256;
+            }
+        }
+        // 0x00 and k at the end
+        input[input.length - 1] = (byte)(k);
+        input[input.length - 2] = (byte)(k / 256);
+
+        result = mac.doFinal(input);
+        return Arrays.copyOf(result, k / 8);
+    }
+
+    protected Cipher getCipher(byte[] key, byte[] ivec, int mode)
+        throws GeneralSecurityException {
+
+        // IV
+        if (ivec == null) {
+           ivec = ZERO_IV;
+        }
+        SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
+        Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
+        IvParameterSpec encIv = new IvParameterSpec(ivec, 0, ivec.length);
+        cipher.init(mode, secretKey, encIv);
+        return cipher;
+    }
+
+    // get an instance of the AES Cipher in CTS mode
+    public int getChecksumLength() {
+        return hashSize;  // bytes
+    }
+
+    /**
+     * Get the truncated HMAC
+     */
+    protected byte[] getHmac(byte[] key, byte[] msg)
+        throws GeneralSecurityException {
+
+        SecretKey keyKi = new SecretKeySpec(key, "HMAC");
+        Mac m = Mac.getInstance(keyLength == 128 ? "HmacSHA256" : "HmacSHA384");
+        m.init(keyKi);
+
+        // generate hash
+        byte[] hash = m.doFinal(msg);
+
+        // truncate hash
+        byte[] output = new byte[hashSize];
+        System.arraycopy(hash, 0, output, 0, hashSize);
+        return output;
+    }
+
+    private byte[] deriveKey(byte[] baseKey, int usage, byte type)
+            throws GeneralSecurityException {
+        byte[] constant = new byte[5];
+        constant[0] = (byte) ((usage>>24)&0xff);
+        constant[1] = (byte) ((usage>>16)&0xff);
+        constant[2] = (byte) ((usage>>8)&0xff);
+        constant[3] = (byte) (usage&0xff);
+        constant[4] = type;
+        return dk(baseKey, constant);
+    }
+
+    /**
+     * Calculate the checksum
+     */
+    public byte[] calculateChecksum(byte[] baseKey, int usage, byte[] input,
+        int start, int len) throws GeneralSecurityException {
+
+        if (!KeyUsage.isValid(usage)) {
+            throw new GeneralSecurityException("Invalid key usage number: "
+                                                + usage);
+        }
+
+        byte[] Kc = deriveKey(baseKey, usage, (byte) 0x99);  // Checksum key
+        if (debug) {
+            System.err.println("usage: " + usage);
+            traceOutput("input", input, start, Math.min(len, 32));
+            traceOutput("baseKey", baseKey, 0, baseKey.length);
+            traceOutput("Kc", Kc, 0, Kc.length);
+        }
+
+        try {
+            // Generate checksum
+            // H1 = HMAC(Kc, input)
+            byte[] hmac = getHmac(Kc, input);
+            if (debug) {
+                traceOutput("hmac", hmac, 0, hmac.length);
+            }
+            if (hmac.length == getChecksumLength()) {
+                return hmac;
+            } else if (hmac.length > getChecksumLength()) {
+                byte[] buf = new byte[getChecksumLength()];
+                System.arraycopy(hmac, 0, buf, 0, buf.length);
+                return buf;
+            } else {
+                throw new GeneralSecurityException("checksum size too short: " +
+                        hmac.length + "; expecting : " + getChecksumLength());
+            }
+        } finally {
+            Arrays.fill(Kc, 0, Kc.length, (byte)0);
+        }
+    }
+
+    /**
+     * Performs encryption using derived key; adds confounder.
+     */
+    public byte[] encrypt(byte[] baseKey, int usage,
+        byte[] ivec, byte[] new_ivec, byte[] plaintext, int start, int len)
+        throws GeneralSecurityException, KrbCryptoException {
+
+        if (!KeyUsage.isValid(usage)) {
+            throw new GeneralSecurityException("Invalid key usage number: "
+                                                 + usage);
+        }
+        byte[] output = encryptCTS(baseKey, usage, ivec, new_ivec, plaintext,
+                                        start, len, true);
+        return output;
+    }
+
+    /**
+     * Performs encryption using derived key; does not add confounder.
+     */
+    public byte[] encryptRaw(byte[] baseKey, int usage,
+        byte[] ivec, byte[] plaintext, int start, int len)
+        throws GeneralSecurityException, KrbCryptoException {
+
+        if (!KeyUsage.isValid(usage)) {
+            throw new GeneralSecurityException("Invalid key usage number: "
+                                                + usage);
+        }
+        byte[] output = encryptCTS(baseKey, usage, ivec, null, plaintext,
+                                        start, len, false);
+        return output;
+    }
+
+    /**
+     * @param baseKey key from which keys are to be derived using usage
+     * @param ciphertext  E(Ke, conf | plaintext | padding, ivec) | H1[1..h]
+     */
+    public byte[] decrypt(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len) throws GeneralSecurityException {
+
+        if (!KeyUsage.isValid(usage)) {
+            throw new GeneralSecurityException("Invalid key usage number: "
+                                                + usage);
+        }
+        byte[] output = decryptCTS(baseKey, usage, ivec, ciphertext,
+                                        start, len, true);
+        return output;
+    }
+
+    /**
+     * Decrypts data using specified key and initial vector.
+     * @param baseKey encryption key to use
+     * @param ciphertext  encrypted data to be decrypted
+     * @param usage ignored
+     */
+    public byte[] decryptRaw(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len)
+        throws GeneralSecurityException {
+
+        if (!KeyUsage.isValid(usage)) {
+            throw new GeneralSecurityException("Invalid key usage number: "
+                                                + usage);
+        }
+        byte[] output = decryptCTS(baseKey, usage, ivec, ciphertext,
+                                        start, len, false);
+        return output;
+    }
+
+    /**
+     * Encrypt AES in CBC-CTS mode using derived keys.
+     */
+    private byte[] encryptCTS(byte[] baseKey, int usage, byte[] ivec,
+        byte[] new_ivec, byte[] plaintext, int start, int len,
+        boolean confounder_exists)
+        throws GeneralSecurityException, KrbCryptoException {
+
+        byte[] Ke = null;
+        byte[] Ki = null;
+
+        if (debug) {
+            System.err.println("usage: " + usage);
+            if (ivec != null) {
+                traceOutput("old_state.ivec", ivec, 0, ivec.length);
+            }
+            traceOutput("plaintext", plaintext, start, Math.min(len, 32));
+            traceOutput("baseKey", baseKey, 0, baseKey.length);
+        }
+
+        try {
+            Ke = deriveKey(baseKey, usage, (byte) 0xaa);  // Encryption key
+
+            byte[] toBeEncrypted = null;
+            if (confounder_exists) {
+                byte[] confounder = Confounder.bytes(BLOCK_SIZE);
+                toBeEncrypted = new byte[confounder.length + len];
+                System.arraycopy(confounder, 0, toBeEncrypted,
+                                        0, confounder.length);
+                System.arraycopy(plaintext, start, toBeEncrypted,
+                                        confounder.length, len);
+            } else {
+                toBeEncrypted = new byte[len];
+                System.arraycopy(plaintext, start, toBeEncrypted, 0, len);
+            }
+
+            // encryptedData + HMAC
+            byte[] output = new byte[toBeEncrypted.length + hashSize];
+
+            // AES in JCE
+            Cipher cipher = Cipher.getInstance("AES/CTS/NoPadding");
+            SecretKeySpec secretKey = new SecretKeySpec(Ke, "AES");
+            IvParameterSpec encIv = new IvParameterSpec(ivec, 0, ivec.length);
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey, encIv);
+            cipher.doFinal(toBeEncrypted, 0, toBeEncrypted.length, output);
+
+            Ki = deriveKey(baseKey, usage, (byte) 0x55);
+            if (debug) {
+                traceOutput("Ki", Ki, 0, Ke.length);
+            }
+
+            // Generate checksum
+            // H = HMAC(Ki, IV | C)
+            byte[] msg = Arrays.copyOf(ivec, ivec.length + toBeEncrypted.length);
+            System.arraycopy(output, 0, msg, ivec.length, toBeEncrypted.length);
+            byte[] hmac = getHmac(Ki, msg);
+
+            // encryptedData + HMAC
+            System.arraycopy(hmac, 0, output, toBeEncrypted.length,
+                                hmac.length);
+            return output;
+        } finally {
+            if (Ke != null) {
+                Arrays.fill(Ke, 0, Ke.length, (byte) 0);
+            }
+            if (Ki != null) {
+                Arrays.fill(Ki, 0, Ki.length, (byte) 0);
+            }
+        }
+    }
+
+    /**
+     * Decrypt AES in CBC-CTS mode using derived keys.
+     */
+    private byte[] decryptCTS(byte[] baseKey, int usage, byte[] ivec,
+        byte[] ciphertext, int start, int len, boolean confounder_exists)
+        throws GeneralSecurityException {
+
+        byte[] Ke = null;
+        byte[] Ki = null;
+
+        try {
+            Ke = deriveKey(baseKey, usage, (byte) 0xaa);  // Encryption key
+
+            if (debug) {
+                System.err.println("usage: " + usage);
+                if (ivec != null) {
+                    traceOutput("old_state.ivec", ivec, 0, ivec.length);
+                }
+                traceOutput("ciphertext", ciphertext, start, Math.min(len, 32));
+                traceOutput("baseKey", baseKey, 0, baseKey.length);
+                traceOutput("Ke", Ke, 0, Ke.length);
+            }
+
+            // Decrypt [confounder | plaintext ] (without checksum)
+
+            // AES in JCE
+            Cipher cipher = Cipher.getInstance("AES/CTS/NoPadding");
+            SecretKeySpec secretKey = new SecretKeySpec(Ke, "AES");
+            IvParameterSpec encIv = new IvParameterSpec(ivec, 0, ivec.length);
+            cipher.init(Cipher.DECRYPT_MODE, secretKey, encIv);
+            byte[] plaintext = cipher.doFinal(ciphertext, start, len-hashSize);
+
+            if (debug) {
+                traceOutput("AES PlainText", plaintext, 0,
+                                Math.min(plaintext.length, 32));
+            }
+
+            Ki = deriveKey(baseKey, usage, (byte) 0x55);  // Integrity key
+            if (debug) {
+                traceOutput("Ki", Ki, 0, Ke.length);
+            }
+
+            // Verify checksum
+            // H = HMAC(Ki, IV | C)
+            byte[] msg = Arrays.copyOf(ivec, ivec.length + len-hashSize);
+            System.arraycopy(ciphertext, start, msg, ivec.length, len-hashSize);
+            byte[] calculatedHmac = getHmac(Ki, msg);
+            int hmacOffset = start + len - hashSize;
+            if (debug) {
+                traceOutput("calculated Hmac", calculatedHmac,
+                                0, calculatedHmac.length);
+                traceOutput("message Hmac", ciphertext, hmacOffset, hashSize);
+            }
+            boolean cksumFailed = false;
+            if (calculatedHmac.length >= hashSize) {
+                for (int i = 0; i < hashSize; i++) {
+                    if (calculatedHmac[i] != ciphertext[hmacOffset+i]) {
+                        cksumFailed = true;
+                        if (debug) {
+                            System.err.println("Checksum failed !");
+                        }
+                        break;
+                    }
+                }
+            }
+            if (cksumFailed) {
+                throw new GeneralSecurityException("Checksum failed");
+            }
+
+            if (confounder_exists) {
+                // Get rid of confounder
+                // [ confounder | plaintext ]
+                byte[] output = new byte[plaintext.length - BLOCK_SIZE];
+                System.arraycopy(plaintext, BLOCK_SIZE, output,
+                                        0, output.length);
+                return output;
+            } else {
+                return plaintext;
+            }
+        } finally {
+            if (Ke != null) {
+                Arrays.fill(Ke, 0, Ke.length, (byte) 0);
+            }
+            if (Ki != null) {
+                Arrays.fill(Ki, 0, Ki.length, (byte) 0);
+            }
+        }
+    }
+
+    /*
+     * Invoke the PKCS#5 PBKDF2 algorithm
+     */
+    private static byte[] PBKDF2(char[] secret, byte[] salt,
+        int count, int keyLength) throws GeneralSecurityException {
+
+        PBEKeySpec keySpec = new PBEKeySpec(secret, salt, count, keyLength);
+        SecretKeyFactory skf =
+                SecretKeyFactory.getInstance(keyLength == 128 ?
+                        "PBKDF2WithHmacSHA256" : "PBKDF2WithHmacSHA384");
+        SecretKey key = skf.generateSecret(keySpec);
+        byte[] result = key.getEncoded();
+
+        return result;
+    }
+
+    public static final int readBigEndian(byte[] data, int pos, int size) {
+        int retVal = 0;
+        int shifter = (size-1)*8;
+        while (size > 0) {
+            retVal += (data[pos] & 0xff) << shifter;
+            shifter -= 8;
+            pos++;
+            size--;
+        }
+        return retVal;
+    }
+
+}
--- a/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/dk/DkCrypto.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/crypto/dk/DkCrypto.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 
 /*
@@ -478,7 +478,7 @@
      *
      * DR(Key, Constant) = k-truncate(K1 | K2 | K3 | K4 ...)
      */
-    private byte[] dr(byte[] key, byte[] constant)
+    protected byte[] dr(byte[] key, byte[] constant)
         throws GeneralSecurityException {
 
         Cipher encCipher = getCipher(key, null, Cipher.ENCRYPT_MODE);
@@ -667,7 +667,7 @@
             new HexDumpEncoder().encodeBuffer(
                 new ByteArrayInputStream(output, offset, len), out);
 
-            System.err.println(traceTag + ":" + out.toString());
+            System.err.println(traceTag + ":\n" + out.toString());
         } catch (Exception e) {
         }
     }
--- a/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -137,7 +137,11 @@
                 lifetime = getTime(Config.duration(args[++i]));
             } else if (args[i].equals("-r")) {
                 renewable_lifetime = getTime(Config.duration(args[++i]));
-            } else if (args[i].equalsIgnoreCase("-help")) {
+            } else if (args[i].equalsIgnoreCase("-?") ||
+                       args[i].equalsIgnoreCase("-h") ||
+                       args[i].equalsIgnoreCase("--help") ||
+                       // -help: legacy.
+                       args[i].equalsIgnoreCase("-help")) {
                 printHelp();
                 System.exit(0);
             } else if (p == null) { // Haven't yet processed a "principal"
--- a/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/Klist.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/Klist.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -133,6 +133,12 @@
     void processArgs(String[] args) {
         Character arg;
         for (int i = 0; i < args.length; i++) {
+            if (args[i].equals("-?") ||
+                args[i].equals("-h") ||
+                args[i].equals("--help")) {
+                printHelp();
+                System.exit(0);
+            }
             if ((args[i].length() >= 2) && (args[i].startsWith("-"))) {
                 arg = Character.valueOf(args[i].charAt(1));
                 switch (arg.charValue()) {
@@ -350,7 +356,5 @@
         System.out.println("\t-t \t shows keytab entry timestamps");
         System.out.println("\t-K \t shows keytab entry key value");
         System.out.println("\t-e \t shows keytab entry key type");
-        System.out.println("\nUsage: java sun.security.krb5.tools.Klist " +
-                           "-help for help.");
     }
 }
--- a/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/Ktab.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.security.jgss/windows/classes/sun/security/krb5/internal/tools/Ktab.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -72,8 +72,14 @@
      */
     public static void main(String[] args) {
         Ktab ktab = new Ktab();
-        if ((args.length == 1) && (args[0].equalsIgnoreCase("-help"))) {
+        if ((args.length == 1) &&
+            ((args[0].equalsIgnoreCase("-?")) ||
+             (args[0].equalsIgnoreCase("-h")) ||
+             (args[0].equalsIgnoreCase("--help")) ||
+             // -help: legacy.
+             (args[0].equalsIgnoreCase("-help")))) {
             ktab.printHelp();
+            System.exit(0);
             return;
         } else if ((args == null) || (args.length == 0)) {
             ktab.action = 'l';
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/Translet.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/Translet.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,5 @@
 /*
  * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
- * @LastModified: Oct 2017
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java	Fri Feb 02 01:52:03 2018 +0000
@@ -97,7 +97,6 @@
      * the specified method is found in the specifed class.
      */
     private boolean hasMethods() {
-        LiteralExpr arg = (LiteralExpr)_arg;
 
         // Get the class name from the namespace uri
         String className = getClassNameFromUri(_namespaceOfFunct);
@@ -110,7 +109,7 @@
           int lastDotIndex = functionName.lastIndexOf('.');
           if (lastDotIndex > 0) {
             methodName = functionName.substring(lastDotIndex+1);
-            if (className != null && !className.equals(""))
+            if (className != null && className.length() != 0)
               className = className + "." + functionName.substring(0, lastDotIndex);
             else
               className = functionName.substring(0, lastDotIndex);
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java	Fri Feb 02 01:52:03 2018 +0000
@@ -66,7 +66,7 @@
     private AttributeValue _order;
     private AttributeValue _caseOrder;
     private AttributeValue _dataType;
-    private String         _lang; // bug! see 26869
+    private AttributeValue _lang; // bug! see 26869, see XALANJ-2546
 
     private String _className = null;
     private List<VariableRefBase> _closureVars = null;
@@ -154,13 +154,11 @@
         }
         _dataType = AttributeValue.create(this, val, parser);
 
-         _lang =  getAttribute("lang"); // bug! see 26869
-  // val =  getAttribute("lang");
-  // _lang = AttributeValue.create(this, val, parser);
+        val =  getAttribute("lang");
+        _lang = AttributeValue.create(this, val, parser);
         // Get the case order; default is language dependant
-    val = getAttribute("case-order");
-    _caseOrder = AttributeValue.create(this, val, parser);
-
+        val = getAttribute("case-order");
+        _caseOrder = AttributeValue.create(this, val, parser);
     }
 
     /**
@@ -179,6 +177,7 @@
         _order.typeCheck(stable);
         _caseOrder.typeCheck(stable);
         _dataType.typeCheck(stable);
+        _lang.typeCheck(stable);
         return Type.Void;
     }
 
@@ -196,16 +195,14 @@
         _order.translate(classGen, methodGen);
     }
 
-     public void translateCaseOrder(ClassGenerator classGen,
+    public void translateCaseOrder(ClassGenerator classGen,
                    MethodGenerator methodGen) {
-    _caseOrder.translate(classGen, methodGen);
+        _caseOrder.translate(classGen, methodGen);
     }
 
     public void translateLang(ClassGenerator classGen,
                    MethodGenerator methodGen) {
-    final ConstantPoolGen cpg = classGen.getConstantPool();
-    final InstructionList il = methodGen.getInstructionList();
-    il.append(new PUSH(cpg, _lang)); // bug! see 26869
+        _lang.translate(classGen, methodGen);
     }
 
     /**
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -570,7 +570,7 @@
         if (_openElementName != null) {
 
            int index;
-           if ((index =_openElementName.indexOf(":")) < 0)
+           if ((index =_openElementName.indexOf(':')) < 0)
                _dom.startElement(null, _openElementName, _openElementName, _attributes);
            else {
                 String uri =_dom.getNamespaceURI(_openElementName.substring(0,index));
@@ -682,7 +682,7 @@
     public void addAttribute(String qName, String value)
     {
         // "prefix:localpart" or "localpart"
-        int colonpos = qName.indexOf(":");
+        int colonpos = qName.indexOf(':');
         String uri = EMPTY_STRING;
         String localName = qName;
         if (colonpos >0)
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1425,8 +1425,8 @@
      * This method should only be invoked if the name attribute is an AVT
      */
     public static void checkAttribQName(String name) {
-        final int firstOccur = name.indexOf(":");
-        final int lastOccur = name.lastIndexOf(":");
+        final int firstOccur = name.indexOf(':');
+        final int lastOccur = name.lastIndexOf(':');
         final String localName = name.substring(lastOccur + 1);
 
         if (firstOccur > 0) {
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,5 @@
 /*
  * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
- * @LastModified: Oct 2017
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
--- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,5 @@
 /*
  * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
- * @LastModified: Oct 2017
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
--- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java	Fri Feb 02 01:52:03 2018 +0000
@@ -354,7 +354,7 @@
 
     while (low <= high)
     {
-      int mid = (low + high) / 2;
+      int mid = (low + high) >>> 1;
       int c = list[mid];
 
       if (c > value)
--- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/NodeVector.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/NodeVector.java	Fri Feb 02 01:52:03 2018 +0000
@@ -669,9 +669,10 @@
     /*
      *  Pick a pivot and move it out of the way
      */
-    int pivot = a[(lo + hi) / 2];
+    int mid = (lo + hi) >>> 1;
+    int pivot = a[mid];
 
-    a[(lo + hi) / 2] = a[hi];
+    a[mid] = a[hi];
     a[hi] = pivot;
 
     while (lo < hi)
--- a/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/XPathContext.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/XPathContext.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,5 @@
 /*
  * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
- * @LastModified: Oct 2017
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
--- a/src/java.xml/share/legal/xalan.md	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/java.xml/share/legal/xalan.md	Fri Feb 02 01:52:03 2018 +0000
@@ -1,4 +1,4 @@
-## Apache Xalan v2.7.1
+## Apache Xalan v2.7.2
 
 ### Apache Xalan Notice
 <pre>
@@ -11,6 +11,11 @@
    This product includes software developed by
    The Apache Software Foundation (http://www.apache.org/).
 
+   Specifically, we only include the XSLTC portion of the source from the Xalan distribution. 
+   The Xalan project has two processors: an interpretive one (Xalan Interpretive) and a 
+   compiled one (The XSLT Compiler (XSLTC)). We *only* use the XSLTC part of Xalan; We use
+   the source from the packages that are part of the XSLTC sources.
+
    Portions of this software was originally based on the following:
 
      - software copyright (c) 1999-2002, Lotus Development Corporation., http://www.lotus.com.
--- a/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Options.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Options.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -227,7 +227,7 @@
             task.options.verbose = true;
             task.options.debug = true;
         }
-    }, new Option("  --help                     Print this usage message", false, "--help") {
+    }, new Option("  -? -h --help               Print this help message", false, "--help", "-h", "-?") {
         @Override
         void process(Main task, String opt, String arg) {
             task.options.help = true;
--- a/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2015 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -46,9 +46,7 @@
     // will not be able to find all Hotspot processes.
     // Any changes to this needs to be synchronized with HotSpot.
     private static final String tmpdir = "/tmp";
-
-    // The patch to the socket file created by the target VM
-    String path;
+    String socket_path;
 
     /**
      * Attaches to the target VM
@@ -69,8 +67,9 @@
         // Find the socket file. If not found then we attempt to start the
         // attach mechanism in the target VM by sending it a QUIT signal.
         // Then we attempt to find the socket file again.
-        path = findSocketFile(pid);
-        if (path == null) {
+        File socket_file = new File(tmpdir, ".java_pid" + pid);
+        socket_path = socket_file.getPath();
+        if (!socket_file.exists()) {
             File f = createAttachFile(pid);
             try {
                 sendQuitTo(pid);
@@ -86,19 +85,19 @@
                     try {
                         Thread.sleep(delay);
                     } catch (InterruptedException x) { }
-                    path = findSocketFile(pid);
 
                     time_spend += delay;
-                    if (time_spend > timeout/2 && path == null) {
+                    if (time_spend > timeout/2 && !socket_file.exists()) {
                         // Send QUIT again to give target VM the last chance to react
                         sendQuitTo(pid);
                     }
-                } while (time_spend <= timeout && path == null);
-                if (path == null) {
+                } while (time_spend <= timeout && !socket_file.exists());
+                if (!socket_file.exists()) {
                     throw new AttachNotSupportedException(
                         String.format("Unable to open socket file %s: " +
                           "target process %d doesn't respond within %dms " +
-                          "or HotSpot VM not loaded", f.getPath(), pid, time_spend));
+                           "or HotSpot VM not loaded", socket_path, pid,
+                                      time_spend));
                 }
             } finally {
                 f.delete();
@@ -107,14 +106,14 @@
 
         // Check that the file owner/permission to avoid attaching to
         // bogus process
-        checkPermissions(path);
+        checkPermissions(socket_path);
 
         // Check that we can connect to the process
         // - this ensures we throw the permission denied error now rather than
         // later when we attempt to enqueue a command.
         int s = socket();
         try {
-            connect(s, path);
+            connect(s, socket_path);
         } finally {
             close(s);
         }
@@ -125,8 +124,8 @@
      */
     public void detach() throws IOException {
         synchronized (this) {
-            if (this.path != null) {
-                this.path = null;
+            if (socket_path != null) {
+                socket_path = null;
             }
         }
     }
@@ -144,12 +143,10 @@
         assert args.length <= 3;            // includes null
 
         // did we detach?
-        String p;
         synchronized (this) {
-            if (this.path == null) {
+            if (socket_path == null) {
                 throw new IOException("Detached from target VM");
             }
-            p = this.path;
         }
 
         // create UNIX socket
@@ -157,7 +154,7 @@
 
         // connect to target VM
         try {
-            connect(s, p);
+            connect(s, socket_path);
         } catch (IOException x) {
             close(s);
             throw x;
@@ -264,15 +261,6 @@
         }
     }
 
-    // Return the socket file for the given process.
-    private String findSocketFile(int pid) {
-        File f = new File(tmpdir, ".java_pid" + pid);
-        if (!f.exists()) {
-            return null;
-        }
-        return f.getPath();
-    }
-
     // On Solaris/Linux/Aix a simple handshake is used to start the attach mechanism
     // if not already started. The client creates a .attach_pid<pid> file in the
     // target VM's working directory (or temp directory), and the SIGQUIT handler
--- a/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -47,10 +47,7 @@
     // will not be able to find all Hotspot processes.
     // Any changes to this needs to be synchronized with HotSpot.
     private static final String tmpdir = "/tmp";
-
-    // The patch to the socket file created by the target VM
-    String path;
-
+    String socket_path;
     /**
      * Attaches to the target VM
      */
@@ -73,8 +70,9 @@
         // Find the socket file. If not found then we attempt to start the
         // attach mechanism in the target VM by sending it a QUIT signal.
         // Then we attempt to find the socket file again.
-        path = findSocketFile(pid, ns_pid);
-        if (path == null) {
+        File socket_file = findSocketFile(pid, ns_pid);
+        socket_path = socket_file.getPath();
+        if (!socket_file.exists()) {
             File f = createAttachFile(pid, ns_pid);
             try {
                 sendQuitTo(pid);
@@ -90,19 +88,19 @@
                     try {
                         Thread.sleep(delay);
                     } catch (InterruptedException x) { }
-                    path = findSocketFile(pid, ns_pid);
 
                     time_spend += delay;
-                    if (time_spend > timeout/2 && path == null) {
+                    if (time_spend > timeout/2 && !socket_file.exists()) {
                         // Send QUIT again to give target VM the last chance to react
                         sendQuitTo(pid);
                     }
-                } while (time_spend <= timeout && path == null);
-                if (path == null) {
+                } while (time_spend <= timeout && !socket_file.exists());
+                if (!socket_file.exists()) {
                     throw new AttachNotSupportedException(
                         String.format("Unable to open socket file %s: " +
                           "target process %d doesn't respond within %dms " +
-                          "or HotSpot VM not loaded", f.getPath(), pid, time_spend));
+                          "or HotSpot VM not loaded", socket_path, pid,
+                                      time_spend));
                 }
             } finally {
                 f.delete();
@@ -111,14 +109,14 @@
 
         // Check that the file owner/permission to avoid attaching to
         // bogus process
-        checkPermissions(path);
+        checkPermissions(socket_path);
 
         // Check that we can connect to the process
         // - this ensures we throw the permission denied error now rather than
         // later when we attempt to enqueue a command.
         int s = socket();
         try {
-            connect(s, path);
+            connect(s, socket_path);
         } finally {
             close(s);
         }
@@ -129,8 +127,8 @@
      */
     public void detach() throws IOException {
         synchronized (this) {
-            if (this.path != null) {
-                this.path = null;
+            if (socket_path != null) {
+                socket_path = null;
             }
         }
     }
@@ -148,12 +146,10 @@
         assert args.length <= 3;                // includes null
 
         // did we detach?
-        String p;
         synchronized (this) {
-            if (this.path == null) {
+            if (socket_path == null) {
                 throw new IOException("Detached from target VM");
             }
-            p = this.path;
         }
 
         // create UNIX socket
@@ -161,7 +157,7 @@
 
         // connect to target VM
         try {
-            connect(s, p);
+            connect(s, socket_path);
         } catch (IOException x) {
             close(s);
             throw x;
@@ -257,8 +253,9 @@
             if ((off < 0) || (off > bs.length) || (len < 0) ||
                 ((off + len) > bs.length) || ((off + len) < 0)) {
                 throw new IndexOutOfBoundsException();
-            } else if (len == 0)
+            } else if (len == 0) {
                 return 0;
+            }
 
             return VirtualMachineImpl.read(s, bs, off, len);
         }
@@ -269,16 +266,12 @@
     }
 
     // Return the socket file for the given process.
-    private String findSocketFile(int pid, int ns_pid) {
+    private File findSocketFile(int pid, int ns_pid) {
         // A process may not exist in the same mount namespace as the caller.
         // Instead, attach relative to the target root filesystem as exposed by
         // procfs regardless of namespaces.
         String root = "/proc/" + pid + "/root/" + tmpdir;
-        File f = new File(root, ".java_pid" + ns_pid);
-        if (!f.exists()) {
-            return null;
-        }
-        return f.getPath();
+        return new File(root, ".java_pid" + ns_pid);
     }
 
     // On Solaris/Linux a simple handshake is used to start the attach mechanism
--- a/src/jdk.attach/macosx/classes/sun/tools/attach/VirtualMachineImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.attach/macosx/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -45,9 +45,7 @@
     // the latter can be changed by the user.
     // Any changes to this needs to be synchronized with HotSpot.
     private static final String tmpdir;
-
-    // The patch to the socket file created by the target VM
-    String path;
+    String socket_path;
 
     /**
      * Attaches to the target VM
@@ -68,8 +66,9 @@
         // Find the socket file. If not found then we attempt to start the
         // attach mechanism in the target VM by sending it a QUIT signal.
         // Then we attempt to find the socket file again.
-        path = findSocketFile(pid);
-        if (path == null) {
+        File socket_file = new File(tmpdir, ".java_pid" + pid);
+        socket_path = socket_file.getPath();
+        if (!socket_file.exists()) {
             File f = createAttachFile(pid);
             try {
                 sendQuitTo(pid);
@@ -85,19 +84,19 @@
                     try {
                         Thread.sleep(delay);
                     } catch (InterruptedException x) { }
-                    path = findSocketFile(pid);
 
                     time_spend += delay;
-                    if (time_spend > timeout/2 && path == null) {
+                    if (time_spend > timeout/2 && !socket_file.exists()) {
                         // Send QUIT again to give target VM the last chance to react
                         sendQuitTo(pid);
                     }
-                } while (time_spend <= timeout && path == null);
-                if (path == null) {
+                } while (time_spend <= timeout && !socket_file.exists());
+                if (!socket_file.exists()) {
                     throw new AttachNotSupportedException(
                         String.format("Unable to open socket file %s: " +
-                          "target process %d doesn't respond within %dms " +
-                          "or HotSpot VM not loaded", f.getPath(), pid, time_spend));
+                                      "target process %d doesn't respond within %dms " +
+                                      "or HotSpot VM not loaded", socket_path,
+                                      pid, time_spend));
                 }
             } finally {
                 f.delete();
@@ -106,14 +105,14 @@
 
         // Check that the file owner/permission to avoid attaching to
         // bogus process
-        checkPermissions(path);
+        checkPermissions(socket_path);
 
         // Check that we can connect to the process
         // - this ensures we throw the permission denied error now rather than
         // later when we attempt to enqueue a command.
         int s = socket();
         try {
-            connect(s, path);
+            connect(s, socket_path);
         } finally {
             close(s);
         }
@@ -124,8 +123,8 @@
      */
     public void detach() throws IOException {
         synchronized (this) {
-            if (this.path != null) {
-                this.path = null;
+            if (socket_path != null) {
+                socket_path = null;
             }
         }
     }
@@ -143,12 +142,10 @@
         assert args.length <= 3;                // includes null
 
         // did we detach?
-        String p;
         synchronized (this) {
-            if (this.path == null) {
+            if (socket_path == null) {
                 throw new IOException("Detached from target VM");
             }
-            p = this.path;
         }
 
         // create UNIX socket
@@ -156,7 +153,7 @@
 
         // connect to target VM
         try {
-            connect(s, p);
+            connect(s, socket_path);
         } catch (IOException x) {
             close(s);
             throw x;
@@ -264,14 +261,6 @@
         }
     }
 
-    // Return the socket file for the given process.
-    // Checks temp directory for .java_pid<pid>.
-    private String findSocketFile(int pid) {
-        String fn = ".java_pid" + pid;
-        File f = new File(tmpdir, fn);
-        return f.exists() ? f.getPath() : null;
-    }
-
     /*
      * Write/sends the given to the target VM. String is transmitted in
      * UTF-8 encoding.
@@ -282,7 +271,7 @@
             try {
                 b = s.getBytes("UTF-8");
             } catch (java.io.UnsupportedEncodingException x) {
-                throw new InternalError();
+                throw new InternalError(x);
             }
             VirtualMachineImpl.write(fd, b, 0, b.length);
         }
--- a/src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -86,6 +86,10 @@
     private void loadAgentLibrary(String agentLibrary, boolean isAbsolute, String options)
         throws AgentLoadException, AgentInitializationException, IOException
     {
+        if (agentLibrary == null) {
+            throw new NullPointerException("agentLibrary cannot be null");
+        }
+
         String msgPrefix = "return code: ";
         InputStream in = execute("load",
                                  agentLibrary,
@@ -131,6 +135,10 @@
     public void loadAgent(String agent, String options)
         throws AgentLoadException, AgentInitializationException, IOException
     {
+        if (agent == null) {
+            throw new NullPointerException("agent cannot be null");
+        }
+
         String args = agent;
         if (options != null) {
             args = args + "=" + options;
--- a/src/jdk.attach/solaris/classes/sun/tools/attach/VirtualMachineImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.attach/solaris/classes/sun/tools/attach/VirtualMachineImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -47,6 +47,7 @@
 
     // door descriptor;
     private int fd = -1;
+    String socket_path;
 
     /**
      * Attaches to the target VM
@@ -60,7 +61,7 @@
         try {
             pid = Integer.parseInt(vmid);
         } catch (NumberFormatException x) {
-            throw new AttachNotSupportedException("invalid process identifier");
+            throw new AttachNotSupportedException("Invalid process identifier");
         }
 
         // Opens the door file to the target VM. If the file is not
@@ -100,7 +101,7 @@
                     throw new AttachNotSupportedException(
                         String.format("Unable to open door %s: " +
                           "target process %d doesn't respond within %dms " +
-                          "or HotSpot VM not loaded", f.getPath(), pid, time_spend));
+                          "or HotSpot VM not loaded", socket_path, pid, time_spend));
                 }
             } finally {
                 f.delete();
@@ -210,13 +211,13 @@
 
     // The door is attached to .java_pid<pid> in the temporary directory.
     private int openDoor(int pid) throws IOException {
-        String path = tmpdir + "/.java_pid" + pid;;
-        fd = open(path);
+        socket_path = tmpdir + "/.java_pid" + pid;
+        fd = open(socket_path);
 
         // Check that the file owner/permission to avoid attaching to
         // bogus process
         try {
-            checkPermissions(path);
+            checkPermissions(socket_path);
         } catch (IOException ioe) {
             close(fd);
             throw ioe;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java	Fri Feb 02 01:52:03 2018 +0000
@@ -633,6 +633,7 @@
         boolean haveSourcePath = includeSourcePath && fileManager.hasLocation(SOURCE_PATH);
 
         if (verbose && verbosePath) {
+            verbosePath = false; // print once per compile
             if (fileManager instanceof StandardJavaFileManager) {
                 StandardJavaFileManager fm = (StandardJavaFileManager)fileManager;
                 if (haveSourcePath && wantSourceFiles) {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java	Fri Feb 02 01:52:03 2018 +0000
@@ -78,8 +78,11 @@
     /** 1.9 modularity. */
     JDK9("9"),
 
-    /** 1.10 covers the to be determined language features that will be added in JDK 10. */
-    JDK10("10");
+    /** 1.10 local-variable type inference (var). */
+    JDK10("10"),
+
+    /** 1.11 covers the to be determined language features that will be added in JDK 11. */
+    JDK11("11");
 
     private static final Context.Key<Source> sourceKey = new Context.Key<>();
 
@@ -108,6 +111,7 @@
         tab.put("1.8", JDK8); // Make 8 an alias for 1.8
         tab.put("1.9", JDK9); // Make 9 an alias for 1.9
         tab.put("1.10", JDK10); // Make 10 an alias for 1.10
+        // Decline to make 1.11 an alias for 11.
     }
 
     private Source(String name) {
@@ -125,6 +129,7 @@
     }
 
     public Target requiredTarget() {
+        if (this.compareTo(JDK11) >= 0) return Target.JDK1_11;
         if (this.compareTo(JDK10) >= 0) return Target.JDK1_10;
         if (this.compareTo(JDK9) >= 0) return Target.JDK1_9;
         if (this.compareTo(JDK8) >= 0) return Target.JDK1_8;
@@ -247,6 +252,8 @@
             return RELEASE_9;
         case JDK10:
             return RELEASE_10;
+        case JDK11:
+            return RELEASE_11;
         default:
             return null;
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1628,9 +1628,6 @@
         /** The parameters of the method. */
         public List<VarSymbol> params = null;
 
-        /** The names of the parameters */
-        public List<Name> savedParameterNames;
-
         /** For an annotation type element, its default value if any.
          *  The value is null if none appeared in the method
          *  declaration.
@@ -1886,59 +1883,20 @@
         public List<VarSymbol> params() {
             owner.complete();
             if (params == null) {
-                // If ClassReader.saveParameterNames has been set true, then
-                // savedParameterNames will be set to a list of names that
-                // matches the types in type.getParameterTypes().  If any names
-                // were not found in the class file, those names in the list will
-                // be set to the empty name.
-                // If ClassReader.saveParameterNames has been set false, then
-                // savedParameterNames will be null.
-                List<Name> paramNames = savedParameterNames;
-                savedParameterNames = null;
-                // discard the provided names if the list of names is the wrong size.
-                if (paramNames == null || paramNames.size() != type.getParameterTypes().size()) {
-                    paramNames = List.nil();
-                }
-                ListBuffer<VarSymbol> buf = new ListBuffer<>();
-                List<Name> remaining = paramNames;
-                // assert: remaining and paramNames are both empty or both
-                // have same cardinality as type.getParameterTypes()
+                ListBuffer<VarSymbol> newParams = new ListBuffer<>();
                 int i = 0;
                 for (Type t : type.getParameterTypes()) {
-                    Name paramName;
-                    if (remaining.isEmpty()) {
-                        // no names for any parameters available
-                        paramName = createArgName(i, paramNames);
-                    } else {
-                        paramName = remaining.head;
-                        remaining = remaining.tail;
-                        if (paramName.isEmpty()) {
-                            // no name for this specific parameter
-                            paramName = createArgName(i, paramNames);
-                        }
-                    }
-                    buf.append(new VarSymbol(PARAMETER, paramName, t, this));
+                    Name paramName = name.table.fromString("arg" + i);
+                    VarSymbol param = new VarSymbol(PARAMETER, paramName, t, this);
+                    newParams.append(param);
                     i++;
                 }
-                params = buf.toList();
+                params = newParams.toList();
             }
+            Assert.checkNonNull(params);
             return params;
         }
 
-        // Create a name for the argument at position 'index' that is not in
-        // the exclude list. In normal use, either no names will have been
-        // provided, in which case the exclude list is empty, or all the names
-        // will have been provided, in which case this method will not be called.
-        private Name createArgName(int index, List<Name> exclude) {
-            String prefix = "arg";
-            while (true) {
-                Name argName = name.table.fromString(prefix + index);
-                if (!exclude.contains(argName))
-                    return argName;
-                prefix += "$";
-            }
-        }
-
         public Symbol asMemberOf(Type site, Types types) {
             return new MethodSymbol(flags_field, name, types.memberType(site, this), owner);
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java	Fri Feb 02 01:52:03 2018 +0000
@@ -2107,9 +2107,8 @@
                 List<Type> prevBounds = bounds.get(ib);
                 if (bound == qtype) return;
                 for (Type b : prevBounds) {
-                    //check for redundancy - use strict version of isSameType on tvars
-                    //(as the standard version will lead to false positives w.r.t. clones ivars)
-                    if (types.isSameType(b, bound2, true)) return;
+                    //check for redundancy - do not add same bound twice
+                    if (types.isSameType(b, bound2)) return;
                 }
                 bounds.put(ib, prevBounds.prepend(bound2));
                 notifyBoundChange(ib, bound2, false);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1291,12 +1291,9 @@
      * lists are of different length, return false.
      */
     public boolean isSameTypes(List<Type> ts, List<Type> ss) {
-        return isSameTypes(ts, ss, false);
-    }
-    public boolean isSameTypes(List<Type> ts, List<Type> ss, boolean strict) {
         while (ts.tail != null && ss.tail != null
                /*inlined: ts.nonEmpty() && ss.nonEmpty()*/ &&
-               isSameType(ts.head, ss.head, strict)) {
+               isSameType(ts.head, ss.head)) {
             ts = ts.tail;
             ss = ss.tail;
         }
@@ -1325,15 +1322,15 @@
      * Is t the same type as s?
      */
     public boolean isSameType(Type t, Type s) {
-        return isSameType(t, s, false);
-    }
-    public boolean isSameType(Type t, Type s, boolean strict) {
-        return strict ?
-                isSameTypeStrict.visit(t, s) :
-                isSameTypeLoose.visit(t, s);
+        return isSameTypeVisitor.visit(t, s);
     }
     // where
-        abstract class SameTypeVisitor extends TypeRelation {
+
+        /**
+         * Type-equality relation - type variables are considered
+         * equals if they share the same object identity.
+         */
+        TypeRelation isSameTypeVisitor = new TypeRelation() {
 
             public Boolean visitType(Type t, Type s) {
                 if (t.equalsIgnoreMetadata(s))
@@ -1350,7 +1347,7 @@
                     if (s.hasTag(TYPEVAR)) {
                         //type-substitution does not preserve type-var types
                         //check that type var symbols and bounds are indeed the same
-                        return sameTypeVars((TypeVar)t, (TypeVar)s);
+                        return t == s;
                     }
                     else {
                         //special case for s == ? super X, where upper(s) = u
@@ -1365,8 +1362,6 @@
                 }
             }
 
-            abstract boolean sameTypeVars(TypeVar tv1, TypeVar tv2);
-
             @Override
             public Boolean visitWildcardType(WildcardType t, Type s) {
                 if (!s.hasTag(WILDCARD)) {
@@ -1374,7 +1369,7 @@
                 } else {
                     WildcardType t2 = (WildcardType)s;
                     return (t.kind == t2.kind || (t.isExtendsBound() && s.isExtendsBound())) &&
-                            isSameType(t.type, t2.type, true);
+                            isSameType(t.type, t2.type);
                 }
             }
 
@@ -1411,10 +1406,8 @@
                 }
                 return t.tsym == s.tsym
                     && visit(t.getEnclosingType(), s.getEnclosingType())
-                    && containsTypes(t.getTypeArguments(), s.getTypeArguments());
-            }
-
-            abstract protected boolean containsTypes(List<Type> ts1, List<Type> ts2);
+                    && containsTypeEquivalent(t.getTypeArguments(), s.getTypeArguments());
+            }
 
             @Override
             public Boolean visitArrayType(ArrayType t, Type s) {
@@ -1471,70 +1464,6 @@
             public Boolean visitErrorType(ErrorType t, Type s) {
                 return true;
             }
-        }
-
-        /**
-         * Standard type-equality relation - type variables are considered
-         * equals if they share the same type symbol.
-         */
-        TypeRelation isSameTypeLoose = new LooseSameTypeVisitor();
-
-        private class LooseSameTypeVisitor extends SameTypeVisitor {
-
-            /** cache of the type-variable pairs being (recursively) tested. */
-            private Set<TypePair> cache = new HashSet<>();
-
-            @Override
-            boolean sameTypeVars(TypeVar tv1, TypeVar tv2) {
-                return tv1.tsym == tv2.tsym && checkSameBounds(tv1, tv2);
-            }
-            @Override
-            protected boolean containsTypes(List<Type> ts1, List<Type> ts2) {
-                return containsTypeEquivalent(ts1, ts2);
-            }
-
-            /**
-             * Since type-variable bounds can be recursive, we need to protect against
-             * infinite loops - where the same bounds are checked over and over recursively.
-             */
-            private boolean checkSameBounds(TypeVar tv1, TypeVar tv2) {
-                TypePair p = new TypePair(tv1, tv2, true);
-                if (cache.add(p)) {
-                    try {
-                        return visit(tv1.getUpperBound(), tv2.getUpperBound());
-                    } finally {
-                        cache.remove(p);
-                    }
-                } else {
-                    return false;
-                }
-            }
-        };
-
-        /**
-         * Strict type-equality relation - type variables are considered
-         * equals if they share the same object identity.
-         */
-        TypeRelation isSameTypeStrict = new SameTypeVisitor() {
-            @Override
-            boolean sameTypeVars(TypeVar tv1, TypeVar tv2) {
-                return tv1 == tv2;
-            }
-            @Override
-            protected boolean containsTypes(List<Type> ts1, List<Type> ts2) {
-                return isSameTypes(ts1, ts2, true);
-            }
-
-            @Override
-            public Boolean visitWildcardType(WildcardType t, Type s) {
-                if (!s.hasTag(WILDCARD)) {
-                    return false;
-                } else {
-                    WildcardType t2 = (WildcardType)s;
-                    return t.kind == t2.kind &&
-                            isSameType(t.type, t2.type, true);
-                }
-            }
         };
 
     // </editor-fold>
@@ -3848,17 +3777,11 @@
     // where
         class TypePair {
             final Type t1;
-            final Type t2;
-            boolean strict;
+            final Type t2;;
 
             TypePair(Type t1, Type t2) {
-                this(t1, t2, false);
-            }
-
-            TypePair(Type t1, Type t2, boolean strict) {
                 this.t1 = t1;
                 this.t2 = t2;
-                this.strict = strict;
             }
             @Override
             public int hashCode() {
@@ -3869,8 +3792,8 @@
                 if (!(obj instanceof TypePair))
                     return false;
                 TypePair typePair = (TypePair)obj;
-                return isSameType(t1, typePair.t1, strict)
-                    && isSameType(t2, typePair.t2, strict);
+                return isSameType(t1, typePair.t1)
+                    && isSameType(t2, typePair.t2);
             }
         }
         Set<TypePair> mergeCache = new HashSet<>();
@@ -4460,7 +4383,7 @@
                 Type tmpLower = Si.lower.hasTag(UNDETVAR) ? ((UndetVar)Si.lower).qtype : Si.lower;
                 if (!Si.bound.hasTag(ERROR) &&
                     !Si.lower.hasTag(ERROR) &&
-                    isSameType(tmpBound, tmpLower, false)) {
+                    isSameType(tmpBound, tmpLower)) {
                     currentS.head = Si.bound;
                 }
             }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java	Fri Feb 02 01:52:03 2018 +0000
@@ -366,7 +366,9 @@
 
         @Override
         Type speculativeType(Symbol msym, MethodResolutionPhase phase) {
-            if (pertinentToApplicability) {
+            if (notPertinentToApplicability.contains(msym)) {
+                return super.speculativeType(msym, phase);
+            } else {
                 for (Map.Entry<ResultInfo, Type> _entry : speculativeTypes.entrySet()) {
                     DeferredAttrContext deferredAttrContext = _entry.getKey().checkContext.deferredAttrContext();
                     if (deferredAttrContext.phase == phase && deferredAttrContext.msym == msym) {
@@ -374,14 +376,14 @@
                     }
                 }
                 return Type.noType;
-            } else {
-                return super.speculativeType(msym, phase);
             }
         }
 
         @Override
         JCTree speculativeTree(DeferredAttrContext deferredAttrContext) {
-            return pertinentToApplicability ? speculativeTree : super.speculativeTree(deferredAttrContext);
+            return notPertinentToApplicability.contains(deferredAttrContext.msym) ?
+                    super.speculativeTree(deferredAttrContext) :
+                    speculativeTree;
         }
 
         /**
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1976,8 +1976,8 @@
                          types.covariantReturnType(rt2, rt1, types.noWarnings)) ||
                          checkCommonOverriderIn(s1,s2,site);
                     if (!compat) {
-                        log.error(pos, Errors.TypesIncompatibleDiffRet(t1, t2, s2.name +
-                                "(" + types.memberType(t2, s2).getParameterTypes() + ")"));
+                        log.error(pos, Errors.TypesIncompatible(t1, t2,
+                                Fragments.IncompatibleDiffRet(s2.name, types.memberType(t2, s2).getParameterTypes())));
                         return s2;
                     }
                 } else if (checkNameClash((ClassSymbol)site.tsym, s1, s2) &&
@@ -2563,20 +2563,22 @@
                         //strong semantics - issue an error if two sibling interfaces
                         //have two override-equivalent defaults - or if one is abstract
                         //and the other is default
-                        String errKey;
+                        Fragment diagKey;
                         Symbol s1 = defaults.first();
                         Symbol s2;
                         if (defaults.size() > 1) {
-                            errKey = "types.incompatible.unrelated.defaults";
                             s2 = defaults.toList().tail.head;
+                            diagKey = Fragments.IncompatibleUnrelatedDefaults(Kinds.kindName(site.tsym), site,
+                                    m.name, types.memberType(site, m).getParameterTypes(),
+                                    s1.location(), s2.location());
+
                         } else {
-                            errKey = "types.incompatible.abstract.default";
                             s2 = abstracts.first();
+                            diagKey = Fragments.IncompatibleAbstractDefault(Kinds.kindName(site.tsym), site,
+                                    m.name, types.memberType(site, m).getParameterTypes(),
+                                    s1.location(), s2.location());
                         }
-                        log.error(pos, errKey,
-                                Kinds.kindName(site.tsym), site,
-                                m.name, types.memberType(site, m).getParameterTypes(),
-                                s1.location(), s2.location());
+                        log.error(pos, Errors.TypesIncompatible(s1.location().type, s2.location().type, diagKey));
                         break;
                     }
                 }
@@ -3462,6 +3464,7 @@
                      types.hasSameArgs(sym.type, byName.type) ||
                      types.hasSameArgs(types.erasure(sym.type), types.erasure(byName.type)))) {
                 if ((sym.flags() & VARARGS) != (byName.flags() & VARARGS)) {
+                    sym.flags_field |= CLASH;
                     varargsDuplicateError(pos, sym, byName);
                     return true;
                 } else if (sym.kind == MTH && !types.hasSameArgs(sym.type, byName.type, false)) {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Fri Feb 02 01:52:03 2018 +0000
@@ -200,7 +200,7 @@
         public JCExpression tree;
         Env<AttrContext> env;
         AttrMode mode;
-        boolean pertinentToApplicability = true;
+        Set<Symbol> notPertinentToApplicability = new HashSet<>();
         SpeculativeCache speculativeCache;
 
         DeferredType(JCExpression tree, Env<AttrContext> env) {
@@ -319,7 +319,7 @@
                     resultInfo.checkContext.deferredAttrContext();
             Assert.check(deferredAttrContext != emptyDeferredAttrContext);
             if (deferredStuckPolicy.isStuck()) {
-                pertinentToApplicability = false;
+                notPertinentToApplicability.add(deferredAttrContext.msym);
                 deferredAttrContext.addDeferredAttrNode(this, resultInfo, deferredStuckPolicy);
                 return Type.noType;
             } else {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -565,7 +565,7 @@
                                             List<Type> argtypes) {
         final Type restype;
 
-        if (spMethod == null || types.isSameType(spMethod.getReturnType(), syms.objectType, true)) {
+        if (spMethod == null || types.isSameType(spMethod.getReturnType(), syms.objectType)) {
             // The return type of the polymorphic signature is polymorphic,
             // and is computed from the enclosing tree E, as follows:
             // if E is a cast, then use the target type of the cast expression
@@ -1227,8 +1227,8 @@
             } else {
                 IncorporationBinaryOp that = (IncorporationBinaryOp)o;
                 return opKind == that.opKind &&
-                        types.isSameType(op1, that.op1, true) &&
-                        types.isSameType(op2, that.op2, true);
+                        types.isSameType(op1, that.op1) &&
+                        types.isSameType(op2, that.op2);
             }
         }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1618,19 +1618,30 @@
                 if ((m1.flags() & BRIDGE) != (m2.flags() & BRIDGE))
                     return ((m1.flags() & BRIDGE) != 0) ? m2 : m1;
 
+                if (m1.baseSymbol() == m2.baseSymbol()) {
+                    // this is the same imported symbol which has been cloned twice.
+                    // Return the first one (either will do).
+                    return m1;
+                }
+
                 // if one overrides or hides the other, use it
                 TypeSymbol m1Owner = (TypeSymbol)m1.owner;
                 TypeSymbol m2Owner = (TypeSymbol)m2.owner;
-                if (types.asSuper(m1Owner.type, m2Owner) != null &&
-                    ((m1.owner.flags_field & INTERFACE) == 0 ||
-                     (m2.owner.flags_field & INTERFACE) != 0) &&
-                    m1.overrides(m2, m1Owner, types, false))
-                    return m1;
-                if (types.asSuper(m2Owner.type, m1Owner) != null &&
-                    ((m2.owner.flags_field & INTERFACE) == 0 ||
-                     (m1.owner.flags_field & INTERFACE) != 0) &&
-                    m2.overrides(m1, m2Owner, types, false))
-                    return m2;
+                // the two owners can never be the same if the target methods are compiled from source,
+                // but we need to protect against cases where the methods are defined in some classfile
+                // and make sure we issue an ambiguity error accordingly (by skipping the logic below).
+                if (m1Owner != m2Owner) {
+                    if (types.asSuper(m1Owner.type, m2Owner) != null &&
+                        ((m1.owner.flags_field & INTERFACE) == 0 ||
+                         (m2.owner.flags_field & INTERFACE) != 0) &&
+                        m1.overrides(m2, m1Owner, types, false))
+                        return m1;
+                    if (types.asSuper(m2Owner.type, m1Owner) != null &&
+                        ((m2.owner.flags_field & INTERFACE) == 0 ||
+                         (m1.owner.flags_field & INTERFACE) != 0) &&
+                        m2.overrides(m1, m2Owner, types, false))
+                        return m2;
+                }
                 boolean m1Abstract = (m1.flags() & ABSTRACT) != 0;
                 boolean m2Abstract = (m2.flags() & ABSTRACT) != 0;
                 if (m1Abstract && !m2Abstract) return m2;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -788,7 +788,7 @@
             JCTypeCast typeCast = newExpression.hasTag(Tag.TYPECAST)
                 ? (JCTypeCast) newExpression
                 : null;
-            tree.expr = typeCast != null && types.isSameType(typeCast.type, originalTarget, true)
+            tree.expr = typeCast != null && types.isSameType(typeCast.type, originalTarget)
                 ? typeCast.expr
                 : newExpression;
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.module.Configuration;
+import java.lang.module.ModuleFinder;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -77,11 +79,6 @@
 import com.sun.tools.javac.util.DefinedBy.Api;
 import com.sun.tools.javac.util.List;
 import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.util.JDK9Wrappers.Configuration;
-import com.sun.tools.javac.util.JDK9Wrappers.Layer;
-import com.sun.tools.javac.util.JDK9Wrappers.ModuleFinder;
-import com.sun.tools.javac.util.JDK9Wrappers.Module;
-import com.sun.tools.javac.util.JDK9Wrappers.ServiceLoaderHelper;
 
 import static java.nio.file.FileVisitOption.FOLLOW_LINKS;
 
@@ -980,14 +977,14 @@
     public <S> ServiceLoader<S> getServiceLoader(Location location, Class<S> service) throws IOException {
         nullCheck(location);
         nullCheck(service);
-        Module.getModule(getClass()).addUses(service);
+        getClass().getModule().addUses(service);
         if (location.isModuleOrientedLocation()) {
             Collection<Path> paths = locations.getLocation(location);
             ModuleFinder finder = ModuleFinder.of(paths.toArray(new Path[paths.size()]));
-            Layer bootLayer = Layer.boot();
+            ModuleLayer bootLayer = ModuleLayer.boot();
             Configuration cf = bootLayer.configuration().resolveAndBind(ModuleFinder.of(), finder, Collections.emptySet());
-            Layer layer = bootLayer.defineModulesWithOneLoader(cf, ClassLoader.getSystemClassLoader());
-            return ServiceLoaderHelper.load(layer, service);
+            ModuleLayer layer = bootLayer.defineModulesWithOneLoader(cf, ClassLoader.getSystemClassLoader());
+            return ServiceLoader.load(layer, service);
         } else {
             return ServiceLoader.load(service, getClassLoader(location));
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -77,6 +77,8 @@
 import javax.tools.StandardJavaFileManager.PathFactory;
 import javax.tools.StandardLocation;
 
+import jdk.internal.jmod.JmodFile;
+
 import com.sun.tools.javac.code.Lint;
 import com.sun.tools.javac.code.Lint.LintCategory;
 import com.sun.tools.javac.main.Option;
@@ -84,7 +86,6 @@
 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
 import com.sun.tools.javac.util.DefinedBy;
 import com.sun.tools.javac.util.DefinedBy.Api;
-import com.sun.tools.javac.util.JDK9Wrappers;
 import com.sun.tools.javac.util.ListBuffer;
 import com.sun.tools.javac.util.Log;
 import com.sun.tools.javac.jvm.ModuleNameReader;
@@ -1451,7 +1452,7 @@
                 if (p.getFileName().toString().endsWith(".jmod")) {
                     try {
                         // check if the JMOD file is valid
-                        JDK9Wrappers.JmodFile.checkMagic(p);
+                        JmodFile.checkMagic(p);
 
                         // No JMOD file system.  Use JarFileSystem to
                         // workaround for now
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java	Fri Feb 02 01:52:03 2018 +0000
@@ -111,7 +111,8 @@
         V51(51, 0),   // JDK 1.7
         V52(52, 0),   // JDK 1.8: lambda, type annos, param names
         V53(53, 0),   // JDK 1.9: modules, indy string concat
-        V54(54, 0);   // JDK 10
+        V54(54, 0),   // JDK 10
+        V55(55, 0);   // JDK 11: constant dynamic
         Version(int major, int minor) {
             this.major = major;
             this.minor = minor;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Fri Feb 02 01:52:03 2018 +0000
@@ -193,6 +193,26 @@
     int[] parameterNameIndices;
 
     /**
+     * A table to hold annotations for method parameters.
+     */
+    ParameterAnnotations[] parameterAnnotations;
+
+    /**
+     * A holder for parameter annotations.
+     */
+    static class ParameterAnnotations {
+        List<CompoundAnnotationProxy> proxies;
+
+        void add(List<CompoundAnnotationProxy> newAnnotations) {
+            if (proxies == null) {
+                proxies = newAnnotations;
+            } else {
+                proxies = proxies.prependList(newAnnotations);
+            }
+        }
+    }
+
+    /**
      * Whether or not any parameter names have been found.
      */
     boolean haveParameterNameIndices;
@@ -1218,7 +1238,7 @@
 
             new AttributeReader(names.RuntimeInvisibleParameterAnnotations, V49, CLASS_OR_MEMBER_ATTRIBUTE) {
                 protected void read(Symbol sym, int attrLen) {
-                    attachParameterAnnotations(sym);
+                    readParameterAnnotations(sym);
                 }
             },
 
@@ -1230,7 +1250,7 @@
 
             new AttributeReader(names.RuntimeVisibleParameterAnnotations, V49, CLASS_OR_MEMBER_ATTRIBUTE) {
                 protected void read(Symbol sym, int attrLen) {
-                    attachParameterAnnotations(sym);
+                    readParameterAnnotations(sym);
                 }
             },
 
@@ -1288,10 +1308,14 @@
                         int numEntries = nextByte();
                         parameterNameIndices = new int[numEntries];
                         haveParameterNameIndices = true;
+                        int index = 0;
                         for (int i = 0; i < numEntries; i++) {
                             int nameIndex = nextChar();
                             int flags = nextChar();
-                            parameterNameIndices[i] = nameIndex;
+                            if ((flags & (Flags.MANDATED | Flags.SYNTHETIC)) != 0) {
+                                continue;
+                            }
+                            parameterNameIndices[index++] = nameIndex;
                         }
                     }
                     bp = newbp;
@@ -1580,65 +1604,82 @@
  * Reading Java-language annotations
  ***********************************************************************/
 
+    /**
+     * Save annotations.
+     */
+    List<CompoundAnnotationProxy> readAnnotations() {
+        int numAttributes = nextChar();
+        ListBuffer<CompoundAnnotationProxy> annotations = new ListBuffer<>();
+        for (int i = 0; i < numAttributes; i++) {
+            annotations.append(readCompoundAnnotation());
+        }
+        return annotations.toList();
+    }
+
     /** Attach annotations.
      */
     void attachAnnotations(final Symbol sym) {
-        int numAttributes = nextChar();
-        if (numAttributes != 0) {
-            ListBuffer<CompoundAnnotationProxy> proxies = new ListBuffer<>();
-            for (int i = 0; i<numAttributes; i++) {
-                CompoundAnnotationProxy proxy = readCompoundAnnotation();
-                if (proxy.type.tsym == syms.proprietaryType.tsym)
-                    sym.flags_field |= PROPRIETARY;
-                else if (proxy.type.tsym == syms.profileType.tsym) {
-                    if (profile != Profile.DEFAULT) {
-                        for (Pair<Name,Attribute> v: proxy.values) {
-                            if (v.fst == names.value && v.snd instanceof Attribute.Constant) {
-                                Attribute.Constant c = (Attribute.Constant) v.snd;
-                                if (c.type == syms.intType && ((Integer) c.value) > profile.value) {
-                                    sym.flags_field |= NOT_IN_PROFILE;
-                                }
+        attachAnnotations(sym, readAnnotations());
+    }
+
+    /**
+     * Attach annotations.
+     */
+    void attachAnnotations(final Symbol sym, List<CompoundAnnotationProxy> annotations) {
+        if (annotations.isEmpty()) {
+            return;
+        }
+        ListBuffer<CompoundAnnotationProxy> proxies = new ListBuffer<>();
+        for (CompoundAnnotationProxy proxy : annotations) {
+            if (proxy.type.tsym == syms.proprietaryType.tsym)
+                sym.flags_field |= PROPRIETARY;
+            else if (proxy.type.tsym == syms.profileType.tsym) {
+                if (profile != Profile.DEFAULT) {
+                    for (Pair<Name, Attribute> v : proxy.values) {
+                        if (v.fst == names.value && v.snd instanceof Attribute.Constant) {
+                            Attribute.Constant c = (Attribute.Constant)v.snd;
+                            if (c.type == syms.intType && ((Integer)c.value) > profile.value) {
+                                sym.flags_field |= NOT_IN_PROFILE;
                             }
                         }
                     }
-                } else {
-                    if (proxy.type.tsym == syms.annotationTargetType.tsym) {
-                        target = proxy;
-                    } else if (proxy.type.tsym == syms.repeatableType.tsym) {
-                        repeatable = proxy;
-                    } else if (proxy.type.tsym == syms.deprecatedType.tsym) {
-                        sym.flags_field |= (DEPRECATED | DEPRECATED_ANNOTATION);
-                        for (Pair<Name, Attribute> v : proxy.values) {
-                            if (v.fst == names.forRemoval && v.snd instanceof Attribute.Constant) {
-                                Attribute.Constant c = (Attribute.Constant) v.snd;
-                                if (c.type == syms.booleanType && ((Integer) c.value) != 0) {
-                                    sym.flags_field |= DEPRECATED_REMOVAL;
-                                }
+                }
+            } else {
+                if (proxy.type.tsym == syms.annotationTargetType.tsym) {
+                    target = proxy;
+                } else if (proxy.type.tsym == syms.repeatableType.tsym) {
+                    repeatable = proxy;
+                } else if (proxy.type.tsym == syms.deprecatedType.tsym) {
+                    sym.flags_field |= (DEPRECATED | DEPRECATED_ANNOTATION);
+                    for (Pair<Name, Attribute> v : proxy.values) {
+                        if (v.fst == names.forRemoval && v.snd instanceof Attribute.Constant) {
+                            Attribute.Constant c = (Attribute.Constant)v.snd;
+                            if (c.type == syms.booleanType && ((Integer)c.value) != 0) {
+                                sym.flags_field |= DEPRECATED_REMOVAL;
                             }
                         }
                     }
-
-                    proxies.append(proxy);
                 }
+                proxies.append(proxy);
             }
-            annotate.normal(new AnnotationCompleter(sym, proxies.toList()));
         }
+        annotate.normal(new AnnotationCompleter(sym, proxies.toList()));
     }
 
-    /** Attach parameter annotations.
+    /** Read parameter annotations.
      */
-    void attachParameterAnnotations(final Symbol method) {
-        final MethodSymbol meth = (MethodSymbol)method;
+    void readParameterAnnotations(Symbol meth) {
         int numParameters = buf[bp++] & 0xFF;
-        List<VarSymbol> parameters = meth.params();
-        int pnum = 0;
-        while (parameters.tail != null) {
-            attachAnnotations(parameters.head);
-            parameters = parameters.tail;
-            pnum++;
+        if (parameterAnnotations == null) {
+            parameterAnnotations = new ParameterAnnotations[numParameters];
+        } else if (parameterAnnotations.length != numParameters) {
+            throw badClassFile("bad.runtime.invisible.param.annotations", meth);
         }
-        if (pnum != numParameters) {
-            throw badClassFile("bad.runtime.invisible.param.annotations", meth);
+        for (int pnum = 0; pnum < numParameters; pnum++) {
+            if (parameterAnnotations[pnum] == null) {
+                parameterAnnotations[pnum] = new ParameterAnnotations();
+            }
+            parameterAnnotations[pnum].add(readAnnotations());
         }
     }
 
@@ -2403,8 +2444,7 @@
         } finally {
             currentOwner = prevOwner;
         }
-        if (saveParameterNames)
-            setParameterNames(m, type);
+        setParameters(m, type);
 
         if ((flags & VARARGS) != 0) {
             final Type last = type.getParameterTypes().last();
@@ -2457,22 +2497,17 @@
     }
 
     /**
-     * Set the parameter names for a symbol from the name index in the
-     * parameterNameIndicies array. The type of the symbol may have changed
-     * while reading the method attributes (see the Signature attribute).
-     * This may be because of generic information or because anonymous
-     * synthetic parameters were added.   The original type (as read from
-     * the method descriptor) is used to help guess the existence of
+     * Set the parameters for a method symbol, including any names and
+     * annotations that were read.
+     *
+     * <p>The type of the symbol may have changed while reading the
+     * method attributes (see the Signature attribute). This may be
+     * because of generic information or because anonymous synthetic
+     * parameters were added.   The original type (as read from the
+     * method descriptor) is used to help guess the existence of
      * anonymous synthetic parameters.
-     * On completion, sym.savedParameter names will either be null (if
-     * no parameter names were found in the class file) or will be set to a
-     * list of names, one per entry in sym.type.getParameterTypes, with
-     * any missing names represented by the empty name.
      */
-    void setParameterNames(MethodSymbol sym, Type jvmType) {
-        // if no names were found in the class file, there's nothing more to do
-        if (!haveParameterNameIndices)
-            return;
+    void setParameters(MethodSymbol sym, Type jvmType) {
         // If we get parameter names from MethodParameters, then we
         // don't need to skip.
         int firstParam = 0;
@@ -2483,16 +2518,16 @@
             // make a corresponding allowance here for the position of
             // the first parameter.  Note that this assumes the
             // skipped parameter has a width of 1 -- i.e. it is not
-        // a double width type (long or double.)
-        if (sym.name == names.init && currentOwner.hasOuterInstance()) {
-            // Sometimes anonymous classes don't have an outer
-            // instance, however, there is no reliable way to tell so
-            // we never strip this$n
-            if (!currentOwner.name.isEmpty())
-                firstParam += 1;
-        }
+            // a double width type (long or double.)
+            if (sym.name == names.init && currentOwner.hasOuterInstance()) {
+                // Sometimes anonymous classes don't have an outer
+                // instance, however, there is no reliable way to tell so
+                // we never strip this$n
+                if (!currentOwner.name.isEmpty())
+                    firstParam += 1;
+            }
 
-        if (sym.type != jvmType) {
+            if (sym.type != jvmType) {
                 // reading the method attributes has caused the
                 // symbol's type to be changed. (i.e. the Signature
                 // attribute.)  This may happen if there are hidden
@@ -2502,21 +2537,55 @@
                 // at the beginning, and so skip over them. The
                 // primary case for this is two hidden parameters
                 // passed into Enum constructors.
-            int skip = Code.width(jvmType.getParameterTypes())
-                    - Code.width(sym.type.getParameterTypes());
-            firstParam += skip;
-        }
+                int skip = Code.width(jvmType.getParameterTypes())
+                        - Code.width(sym.type.getParameterTypes());
+                firstParam += skip;
+            }
         }
         List<Name> paramNames = List.nil();
-        int index = firstParam;
+        ListBuffer<VarSymbol> params = new ListBuffer<>();
+        int nameIndex = firstParam;
+        int annotationIndex = 0;
         for (Type t: sym.type.getParameterTypes()) {
-            int nameIdx = (index < parameterNameIndices.length
-                    ? parameterNameIndices[index] : 0);
-            Name name = nameIdx == 0 ? names.empty : readName(nameIdx);
+            Name name = parameterName(nameIndex, paramNames);
             paramNames = paramNames.prepend(name);
-            index += sawMethodParameters ? 1 : Code.width(t);
+            VarSymbol param = new VarSymbol(PARAMETER, name, t, sym);
+            params.append(param);
+            if (parameterAnnotations != null) {
+                ParameterAnnotations annotations = parameterAnnotations[annotationIndex];
+                if (annotations != null && annotations.proxies != null
+                        && !annotations.proxies.isEmpty()) {
+                    annotate.normal(new AnnotationCompleter(param, annotations.proxies));
+                }
+            }
+            nameIndex += sawMethodParameters ? 1 : Code.width(t);
+            annotationIndex++;
+        }
+        if (parameterAnnotations != null && parameterAnnotations.length != annotationIndex) {
+            throw badClassFile("bad.runtime.invisible.param.annotations", sym);
         }
-        sym.savedParameterNames = paramNames.reverse();
+        Assert.checkNull(sym.params);
+        sym.params = params.toList();
+        parameterAnnotations = null;
+        parameterNameIndices = null;
+    }
+
+
+    // Returns the name for the parameter at position 'index', either using
+    // names read from the MethodParameters, or by synthesizing a name that
+    // is not on the 'exclude' list.
+    private Name parameterName(int index, List<Name> exclude) {
+        if (parameterNameIndices != null && index < parameterNameIndices.length
+                && parameterNameIndices[index] != 0) {
+            return readName(parameterNameIndices[index]);
+        }
+        String prefix = "arg";
+        while (true) {
+            Name argName = names.fromString(prefix + exclude.size());
+            if (!exclude.contains(argName))
+                return argName;
+            prefix += "$";
+        }
     }
 
     /**
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1678,7 +1678,7 @@
         try {
             writeClassFile(out, c);
             if (verbose)
-                log.printVerbose("wrote.file", outFile);
+                log.printVerbose("wrote.file", outFile.getName());
             out.close();
             out = null;
         } finally {
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Profile.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Profile.java	Fri Feb 02 01:52:03 2018 +0000
@@ -40,9 +40,9 @@
  *  deletion without notice.</b>
  */
 public enum Profile {
-    COMPACT1("compact1", 1, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10),
-    COMPACT2("compact2", 2, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10),
-    COMPACT3("compact3", 3, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10),
+    COMPACT1("compact1", 1, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11),
+    COMPACT2("compact2", 2, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11),
+    COMPACT3("compact3", 3, Target.JDK1_8, Target.JDK1_9, Target.JDK1_10, Target.JDK1_11),
 
     DEFAULT {
         @Override
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java	Fri Feb 02 01:52:03 2018 +0000
@@ -64,7 +64,10 @@
     JDK1_9("1.9", 53, 0),
 
     /** JDK 10. */
-    JDK1_10("1.10", 54, 0);
+    JDK1_10("1.10", 54, 0),
+
+    /** JDK 11. */
+    JDK1_11("11", 55, 0);
 
     private static final Context.Key<Target> targetKey = new Context.Key<>();
 
@@ -95,6 +98,7 @@
         tab.put("8", JDK1_8);
         tab.put("9", JDK1_9);
         tab.put("10", JDK1_10);
+        tab.put("11", JDK1_11);
     }
 
     public final String name;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
 
 import java.io.FileWriter;
 import java.io.PrintWriter;
+import java.lang.module.ModuleDescriptor;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -47,6 +48,8 @@
 
 import javax.lang.model.SourceVersion;
 
+import jdk.internal.misc.VM;
+
 import com.sun.tools.doclint.DocLint;
 import com.sun.tools.javac.code.Lint;
 import com.sun.tools.javac.code.Lint.LintCategory;
@@ -57,7 +60,6 @@
 import com.sun.tools.javac.platform.PlatformProvider;
 import com.sun.tools.javac.processing.JavacProcessingEnvironment;
 import com.sun.tools.javac.util.Assert;
-import com.sun.tools.javac.util.JDK9Wrappers;
 import com.sun.tools.javac.util.Log;
 import com.sun.tools.javac.util.Log.PrefixKind;
 import com.sun.tools.javac.util.Log.WriterKind;
@@ -360,7 +362,7 @@
     },
 
     // Note: -h is already taken for "native header output directory".
-    HELP("--help -help", "opt.help", STANDARD, INFO) {
+    HELP("--help -help -?", "opt.help", STANDARD, INFO) {
         @Override
         public void process(OptionHelper helper, String option) throws InvalidValueException {
             Log log = helper.getLog();
@@ -650,21 +652,11 @@
             if (arg.isEmpty()) {
                 throw helper.newInvalidValueException("err.no.value.for.option", option);
             } else {
+                // use official parser if available
                 try {
-                    Class.forName(JDK9Wrappers.ModuleDescriptor.Version.CLASSNAME);
-                    // use official parser if available
-                    try {
-                        JDK9Wrappers.ModuleDescriptor.Version.parse(arg);
-                    } catch (IllegalArgumentException e) {
-                        throw helper.newInvalidValueException("err.bad.value.for.option", option, arg);
-                    }
-                } catch (ClassNotFoundException ex) {
-                    // fall-back to simplistic rules when running on older platform
-                    if (!(arg.charAt(0) >= '0' && arg.charAt(0) <= '9') ||
-                        arg.endsWith("-") ||
-                        arg.endsWith("+")) {
-                        throw helper.newInvalidValueException("err.bad.value.for.option", option, arg);
-                    }
+                    ModuleDescriptor.Version.parse(arg);
+                } catch (IllegalArgumentException e) {
+                    throw helper.newInvalidValueException("err.bad.value.for.option", option, arg);
                 }
             }
             super.process(helper, option, arg);
@@ -717,41 +709,36 @@
             HIDDEN, BASIC) {
         @Override
         public void process(OptionHelper helper, String option) throws InvalidValueException {
-            try {
-                Class.forName(JDK9Wrappers.VMHelper.CLASSNAME);
-                String[] runtimeArgs = JDK9Wrappers.VMHelper.getRuntimeArguments();
-                for (String arg : runtimeArgs) {
-                    // Handle any supported runtime options; ignore all others.
-                    // The runtime arguments always use the single token form, e.g. "--name=value".
-                    for (Option o : getSupportedRuntimeOptions()) {
-                        if (o.matches(arg)) {
-                            switch (o) {
-                                case ADD_MODULES:
-                                    int eq = arg.indexOf('=');
-                                    Assert.check(eq > 0, () -> ("invalid runtime option:" + arg));
-                                    // --add-modules=ALL-DEFAULT is not supported at compile-time
-                                    // so remove it from list, and only process the rest
-                                    // if the set is non-empty.
-                                    // Note that --add-modules=ALL-DEFAULT is automatically added
-                                    // by the standard javac launcher.
-                                    String mods = Arrays.stream(arg.substring(eq + 1).split(","))
-                                            .filter(s -> !s.isEmpty() && !s.equals("ALL-DEFAULT"))
-                                            .collect(Collectors.joining(","));
-                                    if (!mods.isEmpty()) {
-                                        String updatedArg = arg.substring(0, eq + 1) + mods;
-                                        o.handleOption(helper, updatedArg, Collections.emptyIterator());
-                                    }
-                                    break;
-                                default:
-                                    o.handleOption(helper, arg, Collections.emptyIterator());
-                                    break;
-                            }
-                            break;
+            String[] runtimeArgs = VM.getRuntimeArguments();
+            for (String arg : runtimeArgs) {
+                // Handle any supported runtime options; ignore all others.
+                // The runtime arguments always use the single token form, e.g. "--name=value".
+                for (Option o : getSupportedRuntimeOptions()) {
+                    if (o.matches(arg)) {
+                        switch (o) {
+                            case ADD_MODULES:
+                                int eq = arg.indexOf('=');
+                                Assert.check(eq > 0, () -> ("invalid runtime option:" + arg));
+                                // --add-modules=ALL-DEFAULT is not supported at compile-time
+                                // so remove it from list, and only process the rest
+                                // if the set is non-empty.
+                                // Note that --add-modules=ALL-DEFAULT is automatically added
+                                // by the standard javac launcher.
+                                String mods = Arrays.stream(arg.substring(eq + 1).split(","))
+                                        .filter(s -> !s.isEmpty() && !s.equals("ALL-DEFAULT"))
+                                        .collect(Collectors.joining(","));
+                                if (!mods.isEmpty()) {
+                                    String updatedArg = arg.substring(0, eq + 1) + mods;
+                                    o.handleOption(helper, updatedArg, Collections.emptyIterator());
+                                }
+                                break;
+                            default:
+                                o.handleOption(helper, arg, Collections.emptyIterator());
+                                break;
                         }
+                        break;
                     }
                 }
-            } catch (ClassNotFoundException | SecurityException e) {
-                throw helper.newInvalidValueException("err.cannot.access.runtime.env");
             }
         }
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacFiler.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacFiler.java	Fri Feb 02 01:52:03 2018 +0000
@@ -712,20 +712,20 @@
     }
 
     private void checkNameAndExistence(ModuleSymbol mod, String typename, boolean allowUnnamedPackageInfo) throws FilerException {
-        // TODO: Check if type already exists on source or class path?
-        // If so, use warning message key proc.type.already.exists
         checkName(typename, allowUnnamedPackageInfo);
-        ClassSymbol existing;
+        ClassSymbol existing = elementUtils.getTypeElement(typename);
         boolean alreadySeen = aggregateGeneratedSourceNames.contains(Pair.of(mod, typename)) ||
                               aggregateGeneratedClassNames.contains(Pair.of(mod, typename)) ||
                               initialClassNames.contains(typename) ||
-                              ((existing = elementUtils.getTypeElement(typename)) != null &&
-                               initialInputs.contains(existing.sourcefile));
+                              (existing != null && initialInputs.contains(existing.sourcefile));
         if (alreadySeen) {
             if (lint)
                 log.warning(Warnings.ProcTypeRecreate(typename));
             throw new FilerException("Attempt to recreate a file for type " + typename);
         }
+        if (lint && existing != null) {
+            log.warning("proc.type.already.exists", typename);
+        }
         if (!mod.isUnnamed() && !typename.contains(".")) {
             throw new FilerException("Attempt to create a type in unnamed package of a named module: " + typename);
         }
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -82,7 +82,6 @@
 import com.sun.tools.javac.util.DefinedBy.Api;
 import com.sun.tools.javac.util.Iterators;
 import com.sun.tools.javac.util.JCDiagnostic;
-import com.sun.tools.javac.util.JDK9Wrappers.Module;
 import com.sun.tools.javac.util.JavacMessages;
 import com.sun.tools.javac.util.List;
 import com.sun.tools.javac.util.Log;
@@ -267,7 +266,7 @@
                     : fileManager.getClassLoader(CLASS_PATH);
 
                 if (options.isSet("accessInternalAPI"))
-                    ModuleHelper.addExports(Module.getModule(getClass()), Module.getUnnamedModule(processorClassLoader));
+                    ModuleHelper.addExports(getClass().getModule(), processorClassLoader.getUnnamedModule());
 
                 if (processorClassLoader != null && processorClassLoader instanceof Closeable) {
                     compiler.closeables = compiler.closeables.prepend((Closeable) processorClassLoader);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -55,7 +55,7 @@
  * deletion without notice.</b>
  */
 @SupportedAnnotationTypes("*")
-@SupportedSourceVersion(SourceVersion.RELEASE_10)
+@SupportedSourceVersion(SourceVersion.RELEASE_11)
 public class PrintingProcessor extends AbstractProcessor {
     PrintWriter writer;
 
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1144,16 +1144,21 @@
 compiler.err.type.var.more.than.once.in.result=\
     type variable {0} occurs more than once in type of {1}; cannot be left uninstantiated
 
-# 0: type, 1: type, 2: string
-compiler.err.types.incompatible.diff.ret=\
-    types {0} and {1} are incompatible; both define {2}, but with unrelated return types
+# 0: type, 1: type, 2: fragment
+compiler.err.types.incompatible=\
+    types {0} and {1} are incompatible;\n\
+    {2}
+
+# 0: name, 1: list of type
+compiler.misc.incompatible.diff.ret=\
+    both define {0}({1}), but with unrelated return types
 
 # 0: kind name, 1: type, 2: name, 3: list of type, 4: symbol, 5: symbol
-compiler.err.types.incompatible.unrelated.defaults=\
+compiler.misc.incompatible.unrelated.defaults=\
     {0} {1} inherits unrelated defaults for {2}({3}) from types {4} and {5}
 
 # 0: kind name, 1: type, 2: name, 3: list of type, 4: symbol, 5: symbol
-compiler.err.types.incompatible.abstract.default=\
+compiler.misc.incompatible.abstract.default=\
     {0} {1} inherits abstract and default for {2}({3}) from types {4} and {5}
 
 # 0: name, 1: kind name, 2: symbol
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -374,8 +374,6 @@
     not a directory: {0}
 javac.err.file.not.file=\
     not a file: {0}
-javac.err.cannot.access.runtime.env=\
-    cannot access runtime environment
 javac.err.two.class.loaders.1=\
     javac is split between multiple class loaders: check your configuration
 javac.err.two.class.loaders.2=\
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/JDK9Wrappers.java	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,460 +0,0 @@
-/*
- * Copyright (c) 2015, 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
- * 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 com.sun.tools.javac.util;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.nio.file.Path;
-import java.util.Collection;
-import java.util.ServiceLoader;
-
-/**
- *  This class provides wrappers for classes and methods that are new in JDK 9, and which are not
- *  available on older versions of the platform on which javac may be compiled and run.
- *  In future releases, when javac is always compiled on JDK 9 or later, the use of these wrappers
- *  can be replaced by use of the real underlying classes.
- *
- *  <p>Wrapper classes provide a subset of the API of the wrapped classes, as needed for use
- *  in javac. Wrapper objects contain an {@code Object} reference to the underlying runtime object,
- *  and {@code Class} and {@code Method} objects for obtaining or using such instances via
- *  runtime reflection.  The {@code Class} and {@code Method} objects are set up on a per-class
- *  basis, by an {@code init} method, which is called from static methods on the wrapper class,
- *  or in the constructor, when instances are created.
- *  <p>
- *
- *  <p><b>This is NOT part of any supported API.
- *  If you write code that depends on this, you do so at your own risk.
- *  This code and its internal interfaces are subject to change or
- *  deletion without notice.</b>
- */
-public class JDK9Wrappers {
-
-    /**
-     * Helper class for new method in java.util.ServiceLoader.
-     */
-    public static final class ServiceLoaderHelper {
-        @SuppressWarnings("unchecked")
-        public static <S> ServiceLoader<S> load(Layer layer, Class<S> service) {
-            try {
-                init();
-                Object result = loadMethod.invoke(null, layer.theRealLayer, service);
-                return (ServiceLoader<S>)result;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------
-
-        private static Method loadMethod = null;
-
-        private static void init() {
-            if (loadMethod == null) {
-                try {
-                    Class<?> layerClass = Layer.layerClass;
-                    loadMethod = ServiceLoader.class.getDeclaredMethod("load", layerClass, Class.class);
-                } catch (NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-
-    /**
-     * Wrapper class for java.lang.module.ModuleDescriptor and ModuleDescriptor.Version.
-     */
-    public static class ModuleDescriptor {
-        public static class Version {
-            public static final String CLASSNAME = "java.lang.module.ModuleDescriptor$Version";
-            private final Object theRealVersion;
-
-            private Version(Object version) {
-                this.theRealVersion = version;
-            }
-
-            public static Version parse(String v) {
-                try {
-                    init();
-                    Object result = parseMethod.invoke(null, v);
-                    Version version = new Version(result);
-                    return version;
-                } catch (InvocationTargetException ex) {
-                    if (ex.getCause() instanceof IllegalArgumentException) {
-                        throw (IllegalArgumentException) ex.getCause();
-                    } else {
-                        throw new Abort(ex);
-                    }
-                } catch (IllegalAccessException | IllegalArgumentException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-
-            @Override
-            public String toString() {
-                return theRealVersion.toString();
-            }
-
-            // -----------------------------------------------------------------------------------------
-
-            private static Class<?> versionClass = null;
-            private static Method parseMethod = null;
-
-            private static void init() {
-                if (versionClass == null) {
-                    try {
-                        versionClass = Class.forName(CLASSNAME, false, null);
-                        parseMethod = versionClass.getDeclaredMethod("parse", String.class);
-                    } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                        throw new Abort(ex);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Wrapper class for java.lang.module.ModuleFinder.
-     */
-    public static class ModuleFinder {
-        private final Object theRealModuleFinder;
-
-        private ModuleFinder(Object moduleFinder) {
-            this.theRealModuleFinder = moduleFinder;
-            init();
-        }
-
-        public static ModuleFinder of(Path... dirs) {
-            try {
-                init();
-                Object result = ofMethod.invoke(null, (Object)dirs);
-                ModuleFinder mFinder = new ModuleFinder(result);
-                return mFinder;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------
-
-        private static Class<?> moduleFinderClass = null;
-        private static Method ofMethod;
-
-        static final Class<?> getModuleFinderClass() {
-            init();
-            return moduleFinderClass;
-        }
-
-        private static void init() {
-            if (moduleFinderClass == null) {
-                try {
-                    moduleFinderClass = Class.forName("java.lang.module.ModuleFinder", false, null);
-                    ofMethod = moduleFinderClass.getDeclaredMethod("of", Path[].class);
-                } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-
-    /**
-     * Wrapper class for java.lang.Module. To materialize a handle use the static factory
-     * methods Module#getModule(Class<?>) or Module#getUnnamedModule(ClassLoader).
-     */
-    public static class Module {
-
-        private final Object theRealModule;
-
-        private Module(Object module) {
-            this.theRealModule = module;
-            init();
-        }
-
-        public static Module getModule(Class<?> clazz) {
-            try {
-                init();
-                Object result = getModuleMethod.invoke(clazz, new Object[0]);
-                return new Module(result);
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        public static Module getUnnamedModule(ClassLoader classLoader) {
-            try {
-                init();
-                Object result = getUnnamedModuleMethod.invoke(classLoader, new Object[0]);
-                return new Module(result);
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        public Module addExports(String pn, Module other) {
-            try {
-                addExportsMethod.invoke(theRealModule, new Object[] { pn, other.theRealModule});
-            } catch (IllegalAccessException | InvocationTargetException ex) {
-                throw new Abort(ex);
-            }
-            return this;
-        }
-
-        public Module addUses(Class<?> st) {
-            try {
-                addUsesMethod.invoke(theRealModule, new Object[] { st });
-            } catch (IllegalAccessException | InvocationTargetException ex) {
-                throw new Abort(ex);
-            }
-            return this;
-        }
-
-        // -----------------------------------------------------------------------------------------
-        // on java.lang.Module
-        private static Method addExportsMethod = null;
-        // on java.lang.Module
-        private static Method addUsesMethod = null;
-        // on java.lang.Class
-        private static Method getModuleMethod;
-        // on java.lang.ClassLoader
-        private static Method getUnnamedModuleMethod;
-
-        private static void init() {
-            if (addExportsMethod == null) {
-                try {
-                    Class<?> moduleClass = Class.forName("java.lang.Module", false, null);
-                    addUsesMethod = moduleClass.getDeclaredMethod("addUses", new Class<?>[] { Class.class });
-                    addExportsMethod = moduleClass.getDeclaredMethod("addExports",
-                                                        new Class<?>[] { String.class, moduleClass });
-                    getModuleMethod = Class.class.getDeclaredMethod("getModule", new Class<?>[0]);
-                    getUnnamedModuleMethod = ClassLoader.class.getDeclaredMethod("getUnnamedModule", new Class<?>[0]);
-                } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-
-    /**
-     * Wrapper class for java.lang.module.Configuration.
-     */
-    public static final class Configuration {
-        private final Object theRealConfiguration;
-
-        private Configuration(Object configuration) {
-            this.theRealConfiguration = configuration;
-            init();
-        }
-
-        public Configuration resolveAndBind(
-                ModuleFinder beforeFinder,
-                ModuleFinder afterFinder,
-                Collection<String> roots) {
-            try {
-                Object result = resolveAndBindMethod.invoke(theRealConfiguration,
-                                    beforeFinder.theRealModuleFinder,
-                                    afterFinder.theRealModuleFinder,
-                                    roots
-                                );
-                Configuration configuration = new Configuration(result);
-                return configuration;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------
-
-        private static Class<?> configurationClass = null;
-        private static Method resolveAndBindMethod;
-
-        static final Class<?> getConfigurationClass() {
-            init();
-            return configurationClass;
-        }
-
-        private static void init() {
-            if (configurationClass == null) {
-                try {
-                    configurationClass = Class.forName("java.lang.module.Configuration", false, null);
-                    Class<?> moduleFinderInterface = ModuleFinder.getModuleFinderClass();
-                    resolveAndBindMethod = configurationClass.getDeclaredMethod("resolveAndBind",
-                                moduleFinderInterface,
-                                moduleFinderInterface,
-                                Collection.class
-                    );
-                } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-
-    /**
-     * Wrapper class for java.lang.ModuleLayer.
-     */
-    public static final class Layer {
-        private final Object theRealLayer;
-
-        private Layer(Object layer) {
-            this.theRealLayer = layer;
-        }
-
-        public static Layer boot() {
-            try {
-                init();
-                Object result = bootMethod.invoke(null);
-                Layer layer = new Layer(result);
-                return layer;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        public Configuration configuration() {
-            try {
-                Object result = configurationMethod.invoke(theRealLayer);
-                Configuration configuration = new Configuration(result);
-                return configuration;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        public Layer defineModulesWithOneLoader(Configuration configuration, ClassLoader parentClassLoader) {
-            try {
-                Object result = defineModulesWithOneLoaderMethod.invoke(
-                        theRealLayer, configuration.theRealConfiguration, parentClassLoader);
-                Layer layer = new Layer(result);
-                return layer;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------
-
-        private static Class<?> layerClass = null;
-        private static Method bootMethod;
-        private static Method defineModulesWithOneLoaderMethod;
-        private static Method configurationMethod;
-
-        private static void init() {
-            if (layerClass == null) {
-                try {
-                    layerClass = Class.forName("java.lang.ModuleLayer", false, null);
-                    bootMethod = layerClass.getDeclaredMethod("boot");
-                    defineModulesWithOneLoaderMethod = layerClass.getDeclaredMethod("defineModulesWithOneLoader",
-                                Configuration.getConfigurationClass(),
-                                ClassLoader.class);
-                    configurationMethod = layerClass.getDeclaredMethod("configuration");
-                } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Helper class for new method in jdk.internal.misc.VM.
-     */
-    public static final class VMHelper {
-        public static final String CLASSNAME = "jdk.internal.misc.VM";
-
-        @SuppressWarnings("unchecked")
-        public static String[] getRuntimeArguments() {
-            try {
-                init();
-                Object result = getRuntimeArgumentsMethod.invoke(null);
-                return (String[])result;
-            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                    | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------
-
-        private static Class<?> vmClass = null;
-        private static Method getRuntimeArgumentsMethod = null;
-
-        private static void init() {
-            if (vmClass == null) {
-                try {
-                    vmClass = Class.forName(CLASSNAME, false, null);
-                    getRuntimeArgumentsMethod = vmClass.getDeclaredMethod("getRuntimeArguments");
-                } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-
-    /**
-     * Helper class for new method in jdk.internal.jmod.JmodFile
-     */
-    public static final class JmodFile {
-        public static final String JMOD_FILE_CLASSNAME = "jdk.internal.jmod.JmodFile";
-
-        public static void checkMagic(Path file) throws IOException {
-            try {
-                init();
-                checkMagicMethod.invoke(null, file);
-            } catch (InvocationTargetException ex) {
-                if (ex.getCause() instanceof IOException) {
-                    throw IOException.class.cast(ex.getCause());
-                }
-                throw new Abort(ex);
-            } catch (IllegalAccessException | IllegalArgumentException | SecurityException ex) {
-                throw new Abort(ex);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------
-
-        private static Class<?> jmodFileClass = null;
-        private static Method checkMagicMethod = null;
-
-        private static void init() {
-            if (jmodFileClass == null) {
-                try {
-                    jmodFileClass = Class.forName(JMOD_FILE_CLASSNAME, false, null);
-                    checkMagicMethod = jmodFileClass.getDeclaredMethod("checkMagic", Path.class);
-                } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) {
-                    throw new Abort(ex);
-                }
-            }
-        }
-    }
-}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/ModuleHelper.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/ModuleHelper.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,6 @@
 
 package com.sun.tools.javac.util;
 
-import com.sun.tools.javac.util.JDK9Wrappers.Module;
-
 public class ModuleHelper {
 
     private static final String[] javacInternalPackages = new String[] {
--- a/src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java	Fri Feb 02 01:52:03 2018 +0000
@@ -116,7 +116,7 @@
         if(clazz.isArray()) {
             // Some languages won't have a notion of manipulating collections. Exposing "length" on arrays as an
             // explicit property is beneficial for them.
-            setPropertyGetter("length", MethodHandles.arrayLength(clazz), ValidationType.EXACT_CLASS);
+            setPropertyGetter("length", GET_ARRAY_LENGTH, ValidationType.IS_ARRAY);
         } else if(Collection.class.isAssignableFrom(clazz)) {
             setPropertyGetter("length", GET_COLLECTION_LENGTH, ValidationType.INSTANCE_OF);
         } else if(Map.class.isAssignableFrom(clazz)) {
@@ -546,6 +546,9 @@
     private static final MethodHandle GET_MAP_LENGTH = Lookup.PUBLIC.findVirtual(Map.class, "size",
             MethodType.methodType(int.class));
 
+    private static final MethodHandle GET_ARRAY_LENGTH = Lookup.PUBLIC.findStatic(Array.class, "getLength",
+            MethodType.methodType(int.class, Object.class));
+
     private static void assertParameterCount(final CallSiteDescriptor descriptor, final int paramCount) {
         if(descriptor.getMethodType().parameterCount() != paramCount) {
             throw new BootstrapMethodError(descriptor.getOperation() + " must have exactly " + paramCount + " parameters.");
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1607,7 +1607,9 @@
                             if (!all) return;
                         }
                     }
-                    out.println("Couldn't find thread " + name);
+                    if (!all) {
+                        out.println("Couldn't find thread " + name);
+                    }
                 }
             }
         },
--- a/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java	Fri Feb 02 01:52:03 2018 +0000
@@ -135,8 +135,9 @@
     /**
      * Gets the implementor for the interface class {@code type}.
      *
-     * @return the implementor if there is a single implementor, 0 if there is no implementor, or
-     *         {@code type} itself if there is more than one implementor
+     * @return the implementor if there is a single implementor, {@code null} if there is no
+     *         implementor, or {@code type} itself if there is more than one implementor
+     * @throws IllegalArgumentException if type is not an interface type
      */
     native HotSpotResolvedObjectTypeImpl getImplementor(HotSpotResolvedObjectTypeImpl type);
 
@@ -256,14 +257,13 @@
     native void resolveInvokeHandleInPool(HotSpotConstantPool constantPool, int cpi);
 
     /**
-     * If {@code cpi} denotes an entry representing a resolved dynamic adapter
-     * (see {@code resolveInvokeDynamicInPool} and {@code resolveInvokeHandleInPool}),
-     * return the opcode of the instruction for which the resolution was performed
-     * ({@code invokedynamic} or {@code invokevirtual}}, or {@code -1} otherwise.
+     * If {@code cpi} denotes an entry representing a resolved dynamic adapter (see
+     * {@code resolveInvokeDynamicInPool} and {@code resolveInvokeHandleInPool}), return the opcode
+     * of the instruction for which the resolution was performed ({@code invokedynamic} or
+     * {@code invokevirtual}}, or {@code -1} otherwise.
      */
     native int isResolvedInvokeHandleInPool(HotSpotConstantPool constantPool, int cpi);
 
-
     /**
      * Gets the list of type names (in the format of {@link JavaType#getName()}) denoting the
      * classes that define signature polymorphic methods.
@@ -388,7 +388,7 @@
     /**
      * Gets the static initializer of {@code type}.
      *
-     * @return 0 if {@code type} has no static initializer
+     * @return {@code null} if {@code type} has no static initializer
      */
     native HotSpotResolvedJavaMethodImpl getClassInitializer(HotSpotResolvedObjectTypeImpl type);
 
@@ -468,7 +468,8 @@
     native long getLocalVariableTableStart(HotSpotResolvedJavaMethodImpl method);
 
     /**
-     * Sets flags on {@code method} indicating that it should never be inlined or compiled by the VM.
+     * Sets flags on {@code method} indicating that it should never be inlined or compiled by the
+     * VM.
      */
     native void setNotInlinableOrCompilable(HotSpotResolvedJavaMethodImpl method);
 
--- a/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -922,7 +922,10 @@
     }
 
     public ResolvedJavaMethod getClassInitializer() {
-        return compilerToVM().getClassInitializer(this);
+        if (!isArray()) {
+            return compilerToVM().getClassInitializer(this);
+        }
+        return null;
     }
 
     @Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/Classfile.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/Classfile.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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
@@ -46,8 +46,8 @@
     private final ResolvedJavaType type;
     private final List<ClassfileBytecode> codeAttributes;
 
-    private static final int MAJOR_VERSION_JAVA7 = 51;
-    private static final int MAJOR_VERSION_JAVA10 = 54;
+    private static final int MAJOR_VERSION_JAVA_MIN = 51;
+    private static final int MAJOR_VERSION_JAVA_MAX = 55;
     private static final int MAGIC = 0xCAFEBABE;
 
     /**
@@ -65,7 +65,7 @@
 
         int minor = stream.readUnsignedShort();
         int major = stream.readUnsignedShort();
-        if (major < MAJOR_VERSION_JAVA7 || major > MAJOR_VERSION_JAVA10) {
+        if (major < MAJOR_VERSION_JAVA_MIN || major > MAJOR_VERSION_JAVA_MAX) {
             throw new UnsupportedClassVersionError("Unsupported class file version: " + major + "." + minor);
         }
 
--- a/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -457,9 +457,11 @@
                 showcerts = true;
             } else if (collator.compare(flags, "-strict") ==0) {
                 strict = true;
-            } else if (collator.compare(flags, "-h") == 0 ||
-                        collator.compare(flags, "-?") == 0 ||
-                        collator.compare(flags, "-help") == 0) {
+            } else if (collator.compare(flags, "-?") == 0 ||
+                       collator.compare(flags, "-h") == 0 ||
+                       collator.compare(flags, "--help") == 0 ||
+                       // -help: legacy.
+                       collator.compare(flags, "-help") == 0) {
                 fullusage();
             } else {
                 System.err.println(
@@ -648,6 +650,9 @@
         System.out.println(rb.getString
                 (".conf.url.specify.a.pre.configured.options.file"));
         System.out.println();
+        System.out.println(rb.getString
+                (".print.this.help.message"));
+        System.out.println();
 
         System.exit(0);
     }
--- a/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Resources.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Resources.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -118,8 +118,10 @@
                 "[-strict]                   treat warnings as errors"},
         {".conf.url.specify.a.pre.configured.options.file",
                 "[-conf <url>]               specify a pre-configured options file"},
+        {".print.this.help.message",
+                "[-? -h --help]              Print this help message"},
         {"Option.lacks.argument", "Option lacks argument"},
-        {"Please.type.jarsigner.help.for.usage", "Please type jarsigner -help for usage"},
+        {"Please.type.jarsigner.help.for.usage", "Please type jarsigner --help for usage"},
         {"Please.specify.jarfile.name", "Please specify jarfile name"},
         {"Please.specify.alias.name", "Please specify alias name"},
         {"Only.one.alias.can.be.specified", "Only one alias can be specified"},
--- a/src/jdk.jartool/share/classes/sun/tools/jar/GNUStyleOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jartool/share/classes/sun/tools/jar/GNUStyleOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -200,7 +200,7 @@
             },
 
             // Other options
-            new Option(true, true, OptionType.OTHER, "--help", "-h") {
+            new Option(true, true, OptionType.OTHER, "--help", "-h", "-?") {
                 void process(Main jartool, String opt, String arg) throws BadArgs {
                     if (jartool.info == null) {
                         if (arg == null) {
--- a/src/jdk.jartool/share/classes/sun/tools/jar/resources/jar.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jartool/share/classes/sun/tools/jar/resources/jar.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -286,7 +286,7 @@
 main.help.opt.other=\
 \ Other options:\n
 main.help.opt.other.help=\
-\  -h, --help[:compat]        Give this, or optionally the compatibility, help
+\  -?, -h, --help[:compat]    Give this, or optionally the compatibility, help
 main.help.opt.other.help-extra=\
 \      --help-extra           Give help on extra options
 main.help.opt.other.version=\
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/resources/javadoc.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
 \  -protected                       Show protected/public classes and members (default)\n\
 \  -package                         Show package/protected/public classes and members\n\
 \  -private                         Show all classes and members\n\
-\  -help                            Display command line options and exit\n\
+\  --help                           Display command line options and exit\n\
 \  -doclet <class>                  Generate output via alternate doclet\n\
 \  -docletpath <path>               Specify where to find doclet class files\n\
 \  --module-source-path <path>      Specify where to find input source files for multiple modules\n\
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -358,6 +358,6 @@
             }
         }
         buf.append(")");
-        return foundTypeVariable ? configuration.links.getName(buf.toString()) : null;
+        return foundTypeVariable ? writer.links.getName(buf.toString()) : null;
     }
 }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -90,7 +90,7 @@
         this.utils = configuration.utils;
         this.contents = configuration.contents;
         this.resources = configuration.resources;
-        this.links = configuration.links;
+        this.links = writer.links;
     }
 
     public AbstractMemberWriter(SubWriterHolderWriter writer) {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeFieldWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeFieldWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,6 @@
 
 import jdk.javadoc.internal.doclets.formats.html.markup.Table;
 
-import java.util.Arrays;
-
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.TypeElement;
@@ -292,7 +290,7 @@
      */
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
-            return Links.createLink(
+            return links.createLink(
                     SectionName.ANNOTATION_TYPE_FIELD_SUMMARY,
                     contents.navField);
         } else {
@@ -305,7 +303,7 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.ANNOTATION_TYPE_FIELD_DETAIL,
                     contents.navField));
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -159,7 +159,7 @@
     @Override
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
-            return Links.createLink(
+            return links.createLink(
                     SectionName.ANNOTATION_TYPE_OPTIONAL_ELEMENT_SUMMARY,
                     contents.navAnnotationTypeOptionalMember);
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,9 +27,6 @@
 
 import jdk.javadoc.internal.doclets.formats.html.markup.Table;
 
-import java.util.Arrays;
-import java.util.List;
-
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.TypeElement;
@@ -308,7 +305,7 @@
      */
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
-            return Links.createLink(
+            return links.createLink(
                     SectionName.ANNOTATION_TYPE_REQUIRED_ELEMENT_SUMMARY,
                     contents.navAnnotationTypeRequiredMember);
         } else {
@@ -321,7 +318,7 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.ANNOTATION_TYPE_ELEMENT_DETAIL,
                     contents.navAnnotationTypeMember));
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -109,7 +109,7 @@
      */
     @Override
     protected Content getNavLinkPackage() {
-        Content linkContent = Links.createLink(DocPaths.PACKAGE_SUMMARY,
+        Content linkContent = links.createLink(DocPaths.PACKAGE_SUMMARY,
                 contents.packageLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
@@ -133,7 +133,7 @@
      */
     @Override
     protected Content getNavLinkClassUse() {
-        Content linkContent = Links.createLink(DocPaths.CLASS_USE.resolve(filename), contents.useLabel);
+        Content linkContent = links.createLink(DocPaths.CLASS_USE.resolve(filename), contents.useLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
     }
@@ -347,7 +347,7 @@
      */
     @Override
     protected Content getNavLinkTree() {
-        Content treeLinkContent = Links.createLink(DocPaths.PACKAGE_TREE,
+        Content treeLinkContent = links.createLink(DocPaths.PACKAGE_TREE,
                 contents.treeLabel, "", "");
         Content li = HtmlTree.LI(treeLinkContent);
         return li;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -515,7 +515,7 @@
      */
     protected Content getNavLinkPackage() {
         Content linkContent =
-                Links.createLink(DocPath.parent.resolve(DocPaths.PACKAGE_SUMMARY), contents.packageLabel);
+                links.createLink(DocPath.parent.resolve(DocPaths.PACKAGE_SUMMARY), contents.packageLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
     }
@@ -550,8 +550,8 @@
      */
     protected Content getNavLinkTree() {
         Content linkContent = utils.isEnclosingPackageIncluded(typeElement)
-                ? Links.createLink(DocPath.parent.resolve(DocPaths.PACKAGE_TREE), contents.treeLabel)
-                : Links.createLink(pathToRoot.resolve(DocPaths.OVERVIEW_TREE), contents.treeLabel);
+                ? links.createLink(DocPath.parent.resolve(DocPaths.PACKAGE_TREE), contents.treeLabel)
+                : links.createLink(pathToRoot.resolve(DocPaths.OVERVIEW_TREE), contents.treeLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
     }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,7 @@
      */
     @Override
     protected Content getNavLinkPackage() {
-        Content linkContent = Links.createLink(DocPaths.PACKAGE_SUMMARY,
+        Content linkContent = links.createLink(DocPaths.PACKAGE_SUMMARY,
                 contents.packageLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
@@ -144,7 +144,7 @@
      */
     @Override
     protected Content getNavLinkClassUse() {
-        Content linkContent = Links.createLink(DocPaths.CLASS_USE.resolve(filename), contents.useLabel);
+        Content linkContent = links.createLink(DocPaths.CLASS_USE.resolve(filename), contents.useLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
     }
@@ -660,7 +660,7 @@
      */
     @Override
     protected Content getNavLinkTree() {
-        Content treeLinkContent = Links.createLink(DocPaths.PACKAGE_TREE,
+        Content treeLinkContent = links.createLink(DocPaths.PACKAGE_TREE,
                 contents.treeLabel, "", "");
         Content li = HtmlTree.LI(treeLinkContent);
         return li;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstantsSummaryWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstantsSummaryWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -135,13 +135,13 @@
         //add link to summary
         Content link;
         if (pkg.isUnnamed()) {
-            link = Links.createLink(SectionName.UNNAMED_PACKAGE_ANCHOR,
+            link = links.createLink(SectionName.UNNAMED_PACKAGE_ANCHOR,
                     contents.defaultPackageLabel, "", "");
         } else {
             String parsedPackageName = utils.parsePackageName(pkg);
             Content packageNameContent = getPackageLabel(parsedPackageName);
             packageNameContent.addContent(".*");
-            link = Links.createLink(DocLink.fragment(parsedPackageName),
+            link = links.createLink(DocLink.fragment(parsedPackageName),
                     packageNameContent, "", "");
             PackageElement abbrevPkg = configuration.workArounds.getAbbreviatedPackageElement(pkg);
             printedPackageHeaders.add(abbrevPkg);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstructorWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstructorWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -300,7 +300,7 @@
     @Override
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
-            return Links.createLink(SectionName.CONSTRUCTOR_SUMMARY,
+            return links.createLink(SectionName.CONSTRUCTOR_SUMMARY,
                     contents.navConstructor);
         } else {
             return contents.navConstructor;
@@ -313,7 +313,7 @@
     @Override
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.CONSTRUCTOR_DETAIL,
                     contents.navConstructor));
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/EnumConstantWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/EnumConstantWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -281,7 +281,7 @@
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
             if (typeElement == null) {
-                return Links.createLink(SectionName.ENUM_CONSTANT_SUMMARY,
+                return links.createLink(SectionName.ENUM_CONSTANT_SUMMARY,
                         contents.navEnum);
             } else {
                 return links.createLink(
@@ -299,7 +299,7 @@
     @Override
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.ENUM_CONSTANT_DETAIL,
                     contents.navEnum));
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FieldWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FieldWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -310,7 +310,7 @@
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
             if (typeElement == null) {
-                return Links.createLink(
+                return links.createLink(
                         SectionName.FIELD_SUMMARY,
                         contents.navField);
             } else {
@@ -329,7 +329,7 @@
     @Override
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.FIELD_DETAIL,
                     contents.navField));
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HelpWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HelpWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
 import jdk.javadoc.internal.doclets.toolkit.Content;
 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
@@ -54,6 +53,7 @@
 
     /**
      * Constructor to construct HelpWriter object.
+     * @param configuration the configuration
      * @param filename File to be generated.
      */
     public HelpWriter(HtmlConfiguration configuration,
@@ -67,6 +67,7 @@
      * will get generated if and only if "-helpfile" and "-nohelp" is not used
      * on the command line.
      *
+     * @param configuration the configuration
      * @throws DocFileIOException if there is a problem while generating the documentation
      */
     public static void generate(HtmlConfiguration configuration) throws DocFileIOException {
@@ -133,7 +134,7 @@
                     ? HtmlTree.SECTION(overviewHeading)
                     : HtmlTree.LI(HtmlStyle.blockList, overviewHeading);
             Content line3 = contents.getContent("doclet.Help_line_3",
-                    Links.createLink(DocPaths.overviewSummary(configuration.frames),
+                    links.createLink(DocPaths.overviewSummary(configuration.frames),
                     configuration.getText("doclet.Overview")));
             Content overviewPara = HtmlTree.P(line3);
             htmlTree.addContent(overviewPara);
@@ -283,7 +284,7 @@
                     ? HtmlTree.SECTION(treeHead)
                     : HtmlTree.LI(HtmlStyle.blockList, treeHead);
             Content line17 = contents.getContent("doclet.Help_line_17_with_tree_link",
-                    Links.createLink(DocPaths.OVERVIEW_TREE,
+                    links.createLink(DocPaths.OVERVIEW_TREE,
                     configuration.getText("doclet.Class_Hierarchy")),
                     HtmlTree.CODE(new StringContent("java.lang.Object")));
             Content treePara = HtmlTree.P(line17);
@@ -308,7 +309,7 @@
                     ? HtmlTree.SECTION(dHead)
                     : HtmlTree.LI(HtmlStyle.blockList, dHead);
             Content line20 = contents.getContent("doclet.Help_line_20_with_deprecated_api_link",
-                    Links.createLink(DocPaths.DEPRECATED_LIST,
+                    links.createLink(DocPaths.DEPRECATED_LIST,
                     configuration.getText("doclet.Deprecated_API")));
             Content dPara = HtmlTree.P(line20);
             htmlTree.addContent(dPara);
@@ -321,10 +322,10 @@
         if (configuration.createindex) {
             Content indexlink;
             if (configuration.splitindex) {
-                indexlink = Links.createLink(DocPaths.INDEX_FILES.resolve(DocPaths.indexN(1)),
+                indexlink = links.createLink(DocPaths.INDEX_FILES.resolve(DocPaths.indexN(1)),
                         configuration.getText("doclet.Index"));
             } else {
-                indexlink = Links.createLink(DocPaths.INDEX_ALL,
+                indexlink = links.createLink(DocPaths.INDEX_ALL,
                         configuration.getText("doclet.Index"));
             }
             Content indexHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
@@ -378,7 +379,7 @@
                 ? HtmlTree.SECTION(allclassesHead)
                 : HtmlTree.LI(HtmlStyle.blockList, allclassesHead);
         Content line27 = contents.getContent("doclet.Help_line_27",
-                Links.createLink(DocPaths.AllClasses(configuration.frames),
+                links.createLink(DocPaths.AllClasses(configuration.frames),
                 resources.getText("doclet.All_Classes")));
         Content allclassesPara = HtmlTree.P(line27);
         htmlTree.addContent(allclassesPara);
@@ -406,7 +407,7 @@
                 ? HtmlTree.SECTION(constHead)
                 : HtmlTree.LI(HtmlStyle.blockList, constHead);
         Content line29 = contents.getContent("doclet.Help_line_29",
-                Links.createLink(DocPaths.CONSTANT_VALUES,
+                links.createLink(DocPaths.CONSTANT_VALUES,
                 resources.getText("doclet.Constants_Summary")));
         Content constPara = HtmlTree.P(line29);
         htmlTree.addContent(constPara);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java	Fri Feb 02 01:52:03 2018 +0000
@@ -245,8 +245,6 @@
 
     protected final Messages messages;
 
-    protected Links links;
-
     /**
      * Creates an object to hold the configuration for a doclet.
      *
@@ -363,7 +361,6 @@
         setTopFile(docEnv);
         workArounds.initDocLint(doclintOpts.values(), tagletManager.getCustomTagNames(),
                 Utils.toLowerCase(htmlVersion.name()));
-        links = new Links(htmlVersion);
         return true;
     }
 
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -197,7 +197,7 @@
         this.contents = configuration.contents;
         this.messages = configuration.messages;
         this.resources = configuration.resources;
-        this.links = configuration.links;
+        this.links = new Links(path, configuration.htmlVersion);
         this.utils = configuration.utils;
         this.path = path;
         this.pathToRoot = path.parent().invert();
@@ -371,7 +371,7 @@
      */
     public Content getTargetPackageLink(PackageElement pkg, String target,
             Content label) {
-        return Links.createLink(pathString(pkg, DocPaths.PACKAGE_SUMMARY), label, "", target);
+        return links.createLink(pathString(pkg, DocPaths.PACKAGE_SUMMARY), label, "", target);
     }
 
     /**
@@ -385,7 +385,7 @@
      */
     public Content getTargetModulePackageLink(PackageElement pkg, String target,
             Content label, ModuleElement mdle) {
-        return Links.createLink(pathString(pkg, DocPaths.PACKAGE_SUMMARY),
+        return links.createLink(pathString(pkg, DocPaths.PACKAGE_SUMMARY),
                 label, "", target);
     }
 
@@ -398,7 +398,7 @@
      * @return a content for the target module link
      */
     public Content getTargetModuleLink(String target, Content label, ModuleElement mdle) {
-        return Links.createLink(pathToRoot.resolve(
+        return links.createLink(pathToRoot.resolve(
                 DocPaths.moduleSummary(mdle)), label, "", target);
     }
 
@@ -509,7 +509,7 @@
                 //WCAG - Hyperlinks should contain text or an image with alt text - for AT tools
                 navDiv.addContent(a);
                 Content skipLinkContent = HtmlTree.DIV(HtmlStyle.skipNav,
-                        Links.createLink(SectionName.SKIP_NAVBAR_TOP, skipNavLinks,
+                        links.createLink(SectionName.SKIP_NAVBAR_TOP, skipNavLinks,
                         skipNavLinks.toString(), ""));
                 navDiv.addContent(skipLinkContent);
             } else {
@@ -519,7 +519,7 @@
                 Content a = links.createAnchor(SectionName.NAVBAR_BOTTOM);
                 navDiv.addContent(a);
                 Content skipLinkContent = HtmlTree.DIV(HtmlStyle.skipNav,
-                        Links.createLink(SectionName.SKIP_NAVBAR_BOTTOM, skipNavLinks,
+                        links.createLink(SectionName.SKIP_NAVBAR_BOTTOM, skipNavLinks,
                         skipNavLinks.toString(), ""));
                 navDiv.addContent(skipLinkContent);
             }
@@ -651,7 +651,7 @@
      * @return a content tree for the link
      */
     protected Content getNavLinkContents() {
-        Content linkContent = Links.createLink(pathToRoot.resolve(DocPaths.overviewSummary(configuration.frames)),
+        Content linkContent = links.createLink(pathToRoot.resolve(DocPaths.overviewSummary(configuration.frames)),
                 contents.overviewLabel, "", "");
         Content li = HtmlTree.LI(linkContent);
         return li;
@@ -720,7 +720,7 @@
     public Content getNavLinkPrevious(DocPath prev) {
         Content li;
         if (prev != null) {
-            li = HtmlTree.LI(Links.createLink(prev, contents.prevLabel, "", ""));
+            li = HtmlTree.LI(links.createLink(prev, contents.prevLabel, "", ""));
         }
         else
             li = HtmlTree.LI(contents.prevLabel);
@@ -737,7 +737,7 @@
     public Content getNavLinkNext(DocPath next) {
         Content li;
         if (next != null) {
-            li = HtmlTree.LI(Links.createLink(next, contents.nextLabel, "", ""));
+            li = HtmlTree.LI(links.createLink(next, contents.nextLabel, "", ""));
         }
         else
             li = HtmlTree.LI(contents.nextLabel);
@@ -752,7 +752,7 @@
      */
     protected Content getNavShowLists(DocPath link) {
         DocLink dl = new DocLink(link, path.getPath(), null);
-        Content framesContent = Links.createLink(dl, contents.framesLabel, "", "_top");
+        Content framesContent = links.createLink(dl, contents.framesLabel, "", "_top");
         Content li = HtmlTree.LI(framesContent);
         return li;
     }
@@ -773,7 +773,7 @@
      * @return a content tree for the link
      */
     protected Content getNavHideLists(DocPath link) {
-        Content noFramesContent = Links.createLink(link, contents.noFramesLabel, "", "_top");
+        Content noFramesContent = links.createLink(link, contents.noFramesLabel, "", "_top");
         Content li = HtmlTree.LI(noFramesContent);
         return li;
     }
@@ -791,7 +791,7 @@
         DocPath docPath = packages.size() == 1 && configuration.getSpecifiedTypeElements().isEmpty()
                 ? pathString(packages.get(0), DocPaths.PACKAGE_TREE)
                 : pathToRoot.resolve(DocPaths.OVERVIEW_TREE);
-        return HtmlTree.LI(Links.createLink(docPath, contents.treeLabel, "", ""));
+        return HtmlTree.LI(links.createLink(docPath, contents.treeLabel, "", ""));
     }
 
     /**
@@ -801,7 +801,7 @@
      * @return a content tree for the link
      */
     protected Content getNavLinkMainTree(String label) {
-        Content mainTreeContent = Links.createLink(pathToRoot.resolve(DocPaths.OVERVIEW_TREE),
+        Content mainTreeContent = links.createLink(pathToRoot.resolve(DocPaths.OVERVIEW_TREE),
                 new StringContent(label));
         Content li = HtmlTree.LI(mainTreeContent);
         return li;
@@ -823,7 +823,7 @@
      * @return a content tree for the link
      */
     protected Content getNavLinkDeprecated() {
-        Content linkContent = Links.createLink(pathToRoot.resolve(DocPaths.DEPRECATED_LIST),
+        Content linkContent = links.createLink(pathToRoot.resolve(DocPaths.DEPRECATED_LIST),
                 contents.deprecatedLabel, "", "");
         Content li = HtmlTree.LI(linkContent);
         return li;
@@ -837,7 +837,7 @@
      * @return a content tree for the link
      */
     protected Content getNavLinkClassIndex() {
-        Content allClassesContent = Links.createLink(pathToRoot.resolve(
+        Content allClassesContent = links.createLink(pathToRoot.resolve(
                 DocPaths.AllClasses(configuration.frames)),
                 contents.allClassesLabel, "", "");
         Content li = HtmlTree.LI(allClassesContent);
@@ -850,7 +850,7 @@
      * @return a content tree for the link
      */
     protected Content getNavLinkIndex() {
-        Content linkContent = Links.createLink(pathToRoot.resolve(
+        Content linkContent = links.createLink(pathToRoot.resolve(
                 (configuration.splitindex
                     ? DocPaths.INDEX_FILES.resolve(DocPaths.indexN(1))
                     : DocPaths.INDEX_ALL)),
@@ -875,7 +875,7 @@
             DocFile file = DocFile.createFileForInput(configuration, helpfile);
             helpfilenm = DocPath.create(file.getName());
         }
-        Content linkContent = Links.createLink(pathToRoot.resolve(helpfilenm),
+        Content linkContent = links.createLink(pathToRoot.resolve(helpfilenm),
                 contents.helpLabel, "", "");
         Content li = HtmlTree.LI(linkContent);
         return li;
@@ -999,12 +999,12 @@
             }
         }
         if (included || packageElement == null) {
-            return Links.createLink(pathString(packageElement, DocPaths.PACKAGE_SUMMARY),
+            return links.createLink(pathString(packageElement, DocPaths.PACKAGE_SUMMARY),
                     label);
         } else {
             DocLink crossPkgLink = getCrossPackageLink(utils.getPackageName(packageElement));
             if (crossPkgLink != null) {
-                return Links.createLink(crossPkgLink, label);
+                return links.createLink(crossPkgLink, label);
             } else {
                 return label;
             }
@@ -1021,7 +1021,7 @@
     public Content getModuleLink(ModuleElement mdle, Content label) {
         boolean included = utils.isIncluded(mdle);
         return (included)
-                ? Links.createLink(pathToRoot.resolve(DocPaths.moduleSummary(mdle)), label, "", "")
+                ? links.createLink(pathToRoot.resolve(DocPaths.moduleSummary(mdle)), label, "", "")
                 : label;
     }
 
@@ -1051,7 +1051,7 @@
         DocPath href = pathToRoot
                 .resolve(DocPaths.SOURCE_OUTPUT)
                 .resolve(DocPath.forClass(utils, te));
-        Content linkContent = Links.createLink(href
+        Content linkContent = links.createLink(href
                 .fragment(SourceToHTMLConverter.getAnchorName(utils, typeElement)), label, "", "");
         htmltree.addContent(linkContent);
     }
@@ -1115,7 +1115,7 @@
                 */
                 DocLink link = configuration.extern.getExternalLink(packageName, pathToRoot,
                                 className + ".html", refMemName);
-                return Links.createLink(link,
+                return links.createLink(link,
                     (label == null) || label.isEmpty() ? defaultLabel : label,
                     strong,
                     resources.getText("doclet.Href_Class_Or_Interface_Title", packageName),
@@ -1422,7 +1422,7 @@
                         ? getCrossModuleLink(refClassName) : getCrossPackageLink(refClassName);
                 if (elementCrossLink != null) {
                     // Element cross link found
-                    return Links.createLink(elementCrossLink,
+                    return links.createLink(elementCrossLink,
                             (label.isEmpty() ? text : label), true);
                 } else if ((classCrossLink = getCrossClassLink(refClassName,
                         refMemName, label, false, !isLinkPlain)) != null) {
@@ -1752,8 +1752,9 @@
                     result.addContent(sb);
                     Content docRootContent = new ContentBuilder();
 
+                    boolean isHRef = inAnAtag() && node.getName().toString().equalsIgnoreCase("href");
                     for (DocTree dt : node.getValue()) {
-                        if (utils.isText(dt) && inAnAtag()) {
+                        if (utils.isText(dt) && isHRef) {
                             String text = ((TextTree) dt).getBody();
                             if (text.startsWith("/..") && !configuration.docrootparent.isEmpty()) {
                                 result.addContent(configuration.docrootparent);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,7 +33,6 @@
 import javax.lang.model.type.TypeMirror;
 
 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
 import jdk.javadoc.internal.doclets.toolkit.Content;
 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
@@ -93,7 +92,7 @@
                 DocPath filename = getPath(classLinkInfo);
                 if (linkInfo.linkToSelf ||
                                 !(DocPath.forName(utils, typeElement)).equals(m_writer.filename)) {
-                        link.addContent(Links.createLink(
+                        link.addContent(m_writer.links.createLink(
                                 filename.fragment(classLinkInfo.where),
                                 label,
                                 classLinkInfo.isStrong,
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -432,7 +432,7 @@
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
             if (typeElement == null) {
-                return Links.createLink(
+                return links.createLink(
                         SectionName.METHOD_SUMMARY,
                         contents.navMethod);
             } else {
@@ -451,7 +451,7 @@
     @Override
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.METHOD_DETAIL, contents.navMethod));
         } else {
             liNav.addContent(contents.navMethod);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -101,7 +101,7 @@
                 ? HtmlTree.MAIN()
                 : body;
         Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, HtmlStyle.bar,
-                Links.createLink(DocPaths.moduleSummary(moduleElement), mdlLabel, "", "classFrame"));
+                mdlgen.links.createLink(DocPaths.moduleSummary(moduleElement), mdlLabel, "", "classFrame"));
         htmlTree.addContent(heading);
         HtmlTree div = new HtmlTree(HtmlTag.DIV);
         div.setStyle(HtmlStyle.indexContainer);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -152,7 +152,7 @@
      * @param ul the Content object to which the all classes link should be added
      */
     protected void addAllClassesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.ALLCLASSES_FRAME,
+        Content linkContent = links.createLink(DocPaths.ALLCLASSES_FRAME,
                 contents.allClassesLabel, "", "packageFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
@@ -165,7 +165,7 @@
      * @param ul the Content object to which the all packages link should be added
      */
     protected void addAllPackagesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.OVERVIEW_FRAME,
+        Content linkContent = links.createLink(DocPaths.OVERVIEW_FRAME,
                 contents.allPackagesLabel, "", "packageListFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -143,12 +143,12 @@
         Content pkgLabel;
         if (!pkg.isUnnamed()) {
             pkgLabel = getPackageLabel(utils.getPackageName(pkg));
-            packageLinkContent = Links.createLink(pathString(pkg,
+            packageLinkContent = links.createLink(pathString(pkg,
                      DocPaths.PACKAGE_FRAME), pkgLabel, "",
                     "packageFrame");
         } else {
             pkgLabel = new StringContent("<unnamed package>");
-            packageLinkContent = Links.createLink(DocPaths.PACKAGE_FRAME,
+            packageLinkContent = links.createLink(DocPaths.PACKAGE_FRAME,
                     pkgLabel, "", "packageFrame");
         }
         Content li = HtmlTree.LI(packageLinkContent);
@@ -189,7 +189,7 @@
      * @param ul the Content object to which the all classes link should be added
      */
     protected void addAllClassesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.ALLCLASSES_FRAME,
+        Content linkContent = links.createLink(DocPaths.ALLCLASSES_FRAME,
                 contents.allClassesLabel, "", "packageFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
@@ -202,7 +202,7 @@
      * @param ul the Content object to which the all packages link should be added
      */
     protected void addAllPackagesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.OVERVIEW_FRAME,
+        Content linkContent = links.createLink(DocPaths.OVERVIEW_FRAME,
                 contents.allPackagesLabel, "", "packageListFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
@@ -215,7 +215,7 @@
      * @param ul the Content object to which the all modules link should be added
      */
     protected void addAllModulesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.MODULE_OVERVIEW_FRAME,
+        Content linkContent = links.createLink(DocPaths.MODULE_OVERVIEW_FRAME,
                 contents.allModulesLabel, "", "packageListFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -951,20 +951,20 @@
         Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
         Content liNav = new HtmlTree(HtmlTag.LI);
         liNav.addContent(!utils.getFullBody(mdle).isEmpty() && !configuration.nocomment
-                ? Links.createLink(SectionName.MODULE_DESCRIPTION, contents.navModuleDescription)
+                ? links.createLink(SectionName.MODULE_DESCRIPTION, contents.navModuleDescription)
                 : contents.navModuleDescription);
         addNavGap(liNav);
         liNav.addContent((display(requires) || display(indirectModules))
-                ? Links.createLink(SectionName.MODULES, contents.navModules)
+                ? links.createLink(SectionName.MODULES, contents.navModules)
                 : contents.navModules);
         addNavGap(liNav);
         liNav.addContent((display(packages)
                 || display(indirectPackages) || display(indirectOpenPackages))
-                ? Links.createLink(SectionName.PACKAGES, contents.navPackages)
+                ? links.createLink(SectionName.PACKAGES, contents.navPackages)
                 : contents.navPackages);
         addNavGap(liNav);
         liNav.addContent((displayServices(uses, usesTrees) || displayServices(provides.keySet(), providesTrees))
-                ? Links.createLink(SectionName.SERVICES, contents.navServices)
+                ? links.createLink(SectionName.SERVICES, contents.navServices)
                 : contents.navServices);
         ulNav.addContent(liNav);
         return ulNav;
@@ -1056,7 +1056,7 @@
         if (prevModule == null) {
             li = HtmlTree.LI(contents.prevModuleLabel);
         } else {
-            li = HtmlTree.LI(Links.createLink(pathToRoot.resolve(DocPaths.moduleSummary(
+            li = HtmlTree.LI(links.createLink(pathToRoot.resolve(DocPaths.moduleSummary(
                     prevModule)), contents.prevModuleLabel, "", ""));
         }
         return li;
@@ -1073,7 +1073,7 @@
         if (nextModule == null) {
             li = HtmlTree.LI(contents.nextModuleLabel);
         } else {
-            li = HtmlTree.LI(Links.createLink(pathToRoot.resolve(DocPaths.moduleSummary(
+            li = HtmlTree.LI(links.createLink(pathToRoot.resolve(DocPaths.moduleSummary(
                     nextModule)), contents.nextModuleLabel, "", ""));
         }
         return li;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/NestedClassWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/NestedClassWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -213,7 +213,7 @@
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
             if (typeElement == null) {
-                return Links.createLink(
+                return links.createLink(
                         SectionName.NESTED_CLASS_SUMMARY,
                         contents.navNested);
             } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexFrameWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexFrameWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,6 @@
 
 package jdk.javadoc.internal.doclets.formats.html;
 
-import java.util.Collection;
-
 import javax.lang.model.element.PackageElement;
 
 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
@@ -110,11 +108,11 @@
         Content packageLabel;
         if (pe.isUnnamed()) {
             packageLabel = new StringContent("<unnamed package>");
-            packageLinkContent = Links.createLink(DocPaths.PACKAGE_FRAME,
+            packageLinkContent = links.createLink(DocPaths.PACKAGE_FRAME,
                     packageLabel, "", "packageFrame");
         } else {
             packageLabel = getPackageLabel(pe.getQualifiedName());
-            packageLinkContent = Links.createLink(pathString(pe,
+            packageLinkContent = links.createLink(pathString(pe,
                      DocPaths.PACKAGE_FRAME), packageLabel, "",
                     "packageFrame");
         }
@@ -153,7 +151,7 @@
      */
     @Override
     protected void addAllClassesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.ALLCLASSES_FRAME,
+        Content linkContent = links.createLink(DocPaths.ALLCLASSES_FRAME,
                 contents.allClassesLabel, "", "packageFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
@@ -167,7 +165,7 @@
      */
     @Override
     protected void addAllModulesLink(Content ul) {
-        Content linkContent = Links.createLink(DocPaths.MODULE_OVERVIEW_FRAME,
+        Content linkContent = links.createLink(DocPaths.MODULE_OVERVIEW_FRAME,
                 contents.allModulesLabel, "", "packageListFrame");
         Content li = HtmlTree.LI(linkContent);
         ul.addContent(li);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageTreeWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -232,7 +232,7 @@
      */
     @Override
     protected Content getNavLinkPackage() {
-        Content linkContent = Links.createLink(DocPaths.PACKAGE_SUMMARY,
+        Content linkContent = links.createLink(DocPaths.PACKAGE_SUMMARY,
                 contents.packageLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageUseWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -223,7 +223,7 @@
                 DocPath dp = pathString(te,
                         DocPaths.CLASS_USE.resolve(DocPath.forName(utils, te)));
                 Content stringContent = new StringContent(utils.getSimpleName(te));
-                Content typeContent = Links.createLink(dp.fragment(getPackageAnchorName(usingPackage)),
+                Content typeContent = links.createLink(dp.fragment(getPackageAnchorName(usingPackage)),
                         stringContent);
                 Content summary = new ContentBuilder();
                 addIndexComment(te, summary);
@@ -288,7 +288,7 @@
      */
     @Override
     protected Content getNavLinkPackage() {
-        Content linkContent = Links.createLink(DocPaths.PACKAGE_SUMMARY,
+        Content linkContent = links.createLink(DocPaths.PACKAGE_SUMMARY,
                 contents.packageLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
@@ -312,7 +312,7 @@
      */
     @Override
     protected Content getNavLinkTree() {
-        Content linkContent = Links.createLink(DocPaths.PACKAGE_TREE,
+        Content linkContent = links.createLink(DocPaths.PACKAGE_TREE,
                 contents.treeLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -385,7 +385,7 @@
      */
     @Override
     protected Content getNavLinkClassUse() {
-        Content useLink = Links.createLink(DocPaths.PACKAGE_USE,
+        Content useLink = links.createLink(DocPaths.PACKAGE_USE,
                 contents.useLabel, "", "");
         Content li = HtmlTree.LI(useLink);
         return li;
@@ -403,7 +403,7 @@
             li = HtmlTree.LI(contents.prevPackageLabel);
         } else {
             DocPath p = DocPath.relativePath(packageElement, prev);
-            li = HtmlTree.LI(Links.createLink(p.resolve(DocPaths.PACKAGE_SUMMARY),
+            li = HtmlTree.LI(links.createLink(p.resolve(DocPaths.PACKAGE_SUMMARY),
                 contents.prevPackageLabel, "", ""));
         }
         return li;
@@ -421,7 +421,7 @@
             li = HtmlTree.LI(contents.nextPackageLabel);
         } else {
             DocPath p = DocPath.relativePath(packageElement, next);
-            li = HtmlTree.LI(Links.createLink(p.resolve(DocPaths.PACKAGE_SUMMARY),
+            li = HtmlTree.LI(links.createLink(p.resolve(DocPaths.PACKAGE_SUMMARY),
                 contents.nextPackageLabel, "", ""));
         }
         return li;
@@ -435,7 +435,7 @@
      */
     @Override
     protected Content getNavLinkTree() {
-        Content useLink = Links.createLink(DocPaths.PACKAGE_TREE,
+        Content useLink = links.createLink(DocPaths.PACKAGE_TREE,
                 contents.treeLabel, "", "");
         Content li = HtmlTree.LI(useLink);
         return li;
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -332,7 +332,7 @@
     protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
         if (link) {
             if (typeElement == null) {
-                return Links.createLink(
+                return links.createLink(
                         SectionName.PROPERTY_SUMMARY,
                         contents.navProperty);
             } else {
@@ -351,7 +351,7 @@
     @Override
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(Links.createLink(
+            liNav.addContent(links.createLink(
                     SectionName.PROPERTY_DETAIL,
                     contents.navProperty));
         } else {
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -177,7 +177,7 @@
     protected void addLinksForIndexes(Content contentTree) {
         for (int i = 0; i < indexElements.size(); i++) {
             int j = i + 1;
-            contentTree.addContent(Links.createLink(DocPaths.indexN(j),
+            contentTree.addContent(links.createLink(DocPaths.indexN(j),
                     new StringContent(indexElements.get(i).toString())));
             contentTree.addContent(Contents.SPACE);
         }
@@ -195,7 +195,7 @@
             return HtmlTree.LI(prevletterLabel);
         }
         else {
-            Content prevLink = Links.createLink(DocPaths.indexN(prev),
+            Content prevLink = links.createLink(DocPaths.indexN(prev),
                     prevletterLabel);
             return HtmlTree.LI(prevLink);
         }
@@ -213,7 +213,7 @@
             return HtmlTree.LI(nextletterLabel);
         }
         else {
-            Content nextLink = Links.createLink(DocPaths.indexN(next),
+            Content nextLink = links.createLink(DocPaths.indexN(next),
                     nextletterLabel);
             return HtmlTree.LI(nextLink);
         }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -106,7 +106,7 @@
         }
         String desc = ch.getText(itt.getDescription());
 
-        String anchorName = configuration.links.getName(tagText);
+        String anchorName = htmlWriter.links.getName(tagText);
         Content result = HtmlTree.A_ID(HtmlStyle.searchTagResult, anchorName, new StringContent(tagText));
         if (configuration.createindex && !tagText.isEmpty()) {
             SearchIndexItem si = new SearchIndexItem();
@@ -288,7 +288,7 @@
                     ((ClassWriterImpl) htmlWriter).getTypeElement().getQualifiedName() + "." +
                     utils.getSimpleName(holder);
             DocLink link = constantsPath.fragment(whichConstant);
-            body.addContent(Links.createLink(link,
+            body.addContent(htmlWriter.links.createLink(link,
                     new StringContent(configuration.getText("doclet.Constants_Summary"))));
         }
         if (utils.isClass(holder) && utils.isSerializable((TypeElement)holder)) {
@@ -298,7 +298,7 @@
                 appendSeparatorIfNotEmpty(body);
                 DocPath serialPath = htmlWriter.pathToRoot.resolve(DocPaths.SERIALIZED_FORM);
                 DocLink link = serialPath.fragment(utils.getFullyQualifiedName(holder));
-                body.addContent(Links.createLink(link,
+                body.addContent(htmlWriter.links.createLink(link,
                         new StringContent(configuration.getText("doclet.Serialized_Form"))));
             }
         }
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TreeWriter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -162,7 +162,7 @@
                     continue;
                 }
                 DocPath link = pathString(pkg, DocPaths.PACKAGE_TREE);
-                Content li = HtmlTree.LI(Links.createLink(link,
+                Content li = HtmlTree.LI(links.createLink(link,
                         new StringContent(utils.getPackageName(pkg))));
                 if (i < packages.size() - 1) {
                     li.addContent(", ");
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Links.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Links.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,17 +46,20 @@
  */
 public class Links {
 
+    private final DocPath file;
     private final HtmlVersion version;
 
     /**
-     * Creates a {@code Links} object for a specific HTML version.
+     * Creates a {@code Links} object for a specific file, to be written in a specific HTML version.
      * The version is used by the {@link #getName(String) getName} method
      * to help determine valid HTML names (ids), and to determine whether
      * to use an {@code id} or {@code name} attribute when creating anchors.
      *
+     * @param file the file
      * @param version the HTML version
      */
-    public Links(HtmlVersion version) {
+    public Links(DocPath file, HtmlVersion version) {
+        this.file = file;
         this.version = version;
     }
 
@@ -118,7 +121,7 @@
      */
     public Content createLink(String where, Content label) {
         DocLink l = DocLink.fragment(getName(where));
-        return Links.createLink(l, label, "", "");
+        return createLink(l, label, "", "");
     }
 
     /**
@@ -128,9 +131,9 @@
      * @param label         the content for the link
      * @return a content tree for the link
      */
-    public static Content createLink(SectionName sectionName, Content label) {
+    public Content createLink(SectionName sectionName, Content label) {
         DocLink l =  DocLink.fragment(sectionName.getName());
-        return Links.createLink(l, label, "", "");
+        return createLink(l, label, "", "");
     }
 
     /**
@@ -145,7 +148,7 @@
      */
     public Content createLink(SectionName sectionName, String where, Content label) {
         DocLink l =  DocLink.fragment(sectionName.getName() + getName(where));
-        return Links.createLink(l, label, "", "");
+        return createLink(l, label, "", "");
     }
 
     /**
@@ -157,7 +160,7 @@
      * @param target    the target for the link, or null
      * @return a content tree for the link
      */
-    public static Content createLink(SectionName sectionName, Content label, String title, String target) {
+    public Content createLink(SectionName sectionName, Content label, String title, String target) {
         DocLink l = DocLink.fragment(sectionName.getName());
         return createLink(l, label, title, target);
     }
@@ -169,8 +172,8 @@
      * @param label  the content for the link
      * @return a content tree for the link
      */
-    public static Content createLink(DocPath path, String label) {
-        return Links.createLink(path, new StringContent(label), false, "", "");
+    public Content createLink(DocPath path, String label) {
+        return createLink(path, new StringContent(label), false, "", "");
     }
 
     /**
@@ -180,8 +183,8 @@
      * @param label  the content for the link
      * @return a content tree for the link
      */
-    public static Content createLink(DocPath path, Content label) {
-        return Links.createLink(path, label, "", "");
+    public Content createLink(DocPath path, Content label) {
+        return createLink(path, label, "", "");
     }
 
     /**
@@ -196,7 +199,7 @@
      * @param target    the target for the link, or null
      * @return a content tree for the link
      */
-    public static Content createLink(DocPath path, Content label, boolean strong,
+    public Content createLink(DocPath path, Content label, boolean strong,
             String title, String target) {
         return createLink(new DocLink(path), label, strong, title, target);
     }
@@ -210,8 +213,8 @@
      * @param target    the target for the link, or null
      * @return a content tree for the link
      */
-    public static Content createLink(DocPath path, Content label, String title, String target) {
-        return Links.createLink(new DocLink(path), label, title, target);
+    public Content createLink(DocPath path, Content label, String title, String target) {
+        return createLink(new DocLink(path), label, title, target);
     }
 
     /**
@@ -221,8 +224,8 @@
      * @param label     the content for the link
      * @return a content tree for the link
      */
-    public static Content createLink(DocLink link, Content label) {
-        return Links.createLink(link, label, "", "");
+    public Content createLink(DocLink link, Content label) {
+        return createLink(link, label, "", "");
     }
 
     /**
@@ -234,8 +237,8 @@
      * @param target    the target for the link, or null
      * @return a content tree for the link
      */
-    public static Content createLink(DocLink link, Content label, String title, String target) {
-        HtmlTree anchor = HtmlTree.A(link.toString(), label);
+    public Content createLink(DocLink link, Content label, String title, String target) {
+        HtmlTree anchor = HtmlTree.A(link.relativizeAgainst(file).toString(), label);
         if (title != null && title.length() != 0) {
             anchor.addAttr(HtmlAttr.TITLE, title);
         }
@@ -257,7 +260,7 @@
      * @param target    the target for the link, or null
      * @return a content tree for the link
      */
-    public static Content createLink(DocLink link, Content label, boolean strong,
+    public Content createLink(DocLink link, Content label, boolean strong,
             String title, String target) {
         return createLink(link, label, strong, title, target, false);
     }
@@ -275,13 +278,13 @@
      * @param isExternal is the link external to the generated documentation
      * @return a content tree for the link
      */
-    public static Content createLink(DocLink link, Content label, boolean strong,
+    public Content createLink(DocLink link, Content label, boolean strong,
             String title, String target, boolean isExternal) {
         Content body = label;
         if (strong) {
             body = HtmlTree.SPAN(HtmlStyle.typeNameLink, body);
         }
-        HtmlTree l = HtmlTree.A(link.toString(), body);
+        HtmlTree l = HtmlTree.A(link.relativizeAgainst(file).toString(), body);
         if (title != null && title.length() != 0) {
             l.addAttr(HtmlAttr.TITLE, title);
         }
@@ -302,13 +305,12 @@
      * @param isExternal is the link external to the generated documentation
      * @return a content tree for the link
      */
-    public static Content createLink(DocLink link, Content label, boolean isExternal) {
-        HtmlTree anchor = HtmlTree.A(link.toString(), label);
+    public Content createLink(DocLink link, Content label, boolean isExternal) {
+        HtmlTree anchor = HtmlTree.A(link.relativizeAgainst(file).toString(), label);
         anchor.setStyle(HtmlStyle.externalLink);
         return anchor;
     }
 
-
     /**
      * Converts a name to a valid HTML name (id).
      * This depends on the HTML version specified when the {@code Links} object was created.
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocLink.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocLink.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,51 +39,101 @@
  *
  */
 public class DocLink {
-    final String path;
+    final DocPath path;
     final String query;
     final String fragment;
 
-    /** Create a DocLink representing the URI {@code #fragment}. */
+    /**
+     * Creates a DocLink representing the URI {@code #fragment}.
+     * @param fragment the fragment
+     * @return the DocLink
+     */
     public static DocLink fragment(String fragment) {
-        return new DocLink((String) null, (String) null, fragment);
-    }
-
-    /** Create a DocLink representing the URI {@code path}. */
-    public DocLink(DocPath path) {
-        this(path.getPath(), null, null);
+        return new DocLink((DocPath) null, (String) null, fragment);
     }
 
     /**
-     * Create a DocLink representing the URI {@code path?query#fragment}.
-     * query and fragment may be null.
+     * Creates a DocLink representing the URI {@code path}.
+     * @param path the path
      */
-    public DocLink(DocPath path, String query, String fragment) {
-        this(path.getPath(), query, fragment);
+    public DocLink(DocPath path) {
+        this(path, null, null);
     }
 
     /**
-     * Create a DocLink representing the URI {@code path?query#fragment}.
+     * Creates a DocLink representing the URI {@code path?query#fragment}.
      * Any of the component parts may be null.
+     * @param path the path
+     * @param query the query
+     * @param fragment the fragment
      */
-    public DocLink(String path, String query, String fragment) {
+    public DocLink(DocPath path, String query, String fragment) {
         this.path = path;
         this.query = query;
         this.fragment = fragment;
     }
 
     /**
-     * Return the link in the form "path?query#fragment", omitting any empty
+     * Creates a DocLink representing the URI {@code path?query#fragment}.
+     * Any of the component parts may be null.
+     * @param path the path
+     * @param query the query
+     * @param fragment the fragment
+     */
+    public DocLink(String path, String query, String fragment) {
+        this(DocPath.create(path), query, fragment);
+    }
+
+    /**
+     * Creates a DocLink formed by relativizing the path against a given base.
+     * @param base the base
+     * @return the DocLink
+     */
+    public DocLink relativizeAgainst(DocPath base) {
+        if (base.isEmpty() || path == null) {
+            return this;
+        }
+
+        // The following guards against the (ugly) use-case of using DocPath to contain a URL
+        if (isAbsoluteURL(path)) {
+            return this;
+        }
+
+        DocPath newPath = base.relativize(path);
+        // avoid generating an empty link by using the basename of the path if necessary
+        if (newPath.isEmpty() && isEmpty(query) && isEmpty(fragment)) {
+            newPath = path.basename();
+        }
+        return new DocLink(newPath, query, fragment);
+    }
+
+    // return true if the path begins <letters>://
+    private boolean isAbsoluteURL(DocPath path) {
+        String s = path.getPath();
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (Character.isLetter(c)) {
+                continue;
+            }
+            return (c == ':' && i + 2 < s.length() && s.charAt(i + 1)== '/' && s.charAt(i + 2)== '/');
+        }
+        return false;
+    }
+
+    /**
+     * Returns the link in the form "path?query#fragment", omitting any empty
      * components.
+     * @return the string
      */
     @Override
     public String toString() {
         // common fast path
         if (path != null && isEmpty(query) && isEmpty(fragment))
-            return path;
+            return path.getPath();
 
         StringBuilder sb = new StringBuilder();
         if (path != null)
-            sb.append(path);
+            sb.append(path.getPath());
         if (!isEmpty(query))
             sb.append("?").append(query);
         if (!isEmpty(fragment))
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,11 @@
 
 package jdk.javadoc.internal.doclets.toolkit.util;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 import javax.lang.model.element.ModuleElement;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
@@ -48,16 +53,21 @@
     public static final DocPath parent = new DocPath("..");
 
     /**
-     * Create a path from a string.
+     * Creates a path from a string.
+     * @param p the string
+     * @return the path
      */
     public static DocPath create(String p) {
         return (p == null) || p.isEmpty() ? empty : new DocPath(p);
     }
 
     /**
-     * Return the path for a class.
+     * Returns the path for a class.
      * For example, if the class is java.lang.Object,
      * the path is java/lang/Object.html.
+     * @param utils utility class for handling type elements
+     * @param typeElement the type element
+     * @return the path
      */
     public static DocPath forClass(Utils utils, TypeElement typeElement) {
         return (typeElement == null)
@@ -66,14 +76,24 @@
     }
 
     /**
-     * Return the path for the simple name of the class.
+     * Returns the path for the simple name of a class.
      * For example, if the class is java.lang.Object,
      * the path is Object.html.
+     * @param utils utility class for handling type elements
+     * @param typeElement the type element
+     * @return the path
      */
     public static DocPath forName(Utils utils, TypeElement typeElement) {
         return (typeElement == null) ? empty : new DocPath(utils.getSimpleName(typeElement) + ".html");
     }
 
+    /**
+     * Returns the path for the name of a module.
+     * For example, if the module is java.base,
+     * the path is java.base.
+     * @param mdle the module element
+     * @return the path
+     */
     public static DocPath forModule(ModuleElement mdle) {
         return mdle == null || mdle.isUnnamed()
                 ? empty
@@ -81,18 +101,23 @@
     }
 
     /**
-     * Return the path for the package of a class.
+     * Returns the path for the package of a class.
      * For example, if the class is java.lang.Object,
      * the path is java/lang.
+     * @param utils utility class for handling type elements
+     * @param typeElement the type element
+     * @return the path
      */
     public static DocPath forPackage(Utils utils, TypeElement typeElement) {
         return (typeElement == null) ? empty : forPackage(utils.containingPackage(typeElement));
     }
 
     /**
-     * Return the path for a package.
+     * Returns the path for a package.
      * For example, if the package is java.lang,
      * the path is java/lang.
+     * @param pkgElement the package element
+     * @return the path
      */
     public static DocPath forPackage(PackageElement pkgElement) {
         return pkgElement == null || pkgElement.isUnnamed()
@@ -101,9 +126,11 @@
     }
 
     /**
-     * Return the inverse path for a package.
+     * Returns the inverse path for a package.
      * For example, if the package is java.lang,
      * the inverse path is ../...
+     * @param pkgElement the package element
+     * @return the path
      */
     public static DocPath forRoot(PackageElement pkgElement) {
         String name = (pkgElement == null || pkgElement.isUnnamed())
@@ -113,7 +140,10 @@
     }
 
     /**
-     * Return the relative path from one package to another.
+     * Returns the relative path from one package to another.
+     * @param from the initial package
+     * @param to the target package
+     * @return the path
      */
     public static DocPath relativePath(PackageElement from, PackageElement to) {
         return forRoot(from).resolve(forPackage(to));
@@ -146,7 +176,9 @@
     }
 
     /**
-     * Return the path formed by appending the specified string to the current path.
+     * Returns the path formed by appending the specified string to the current path.
+     * @param p the string
+     * @return the path
      */
     public DocPath resolve(String p) {
         if (p == null || p.isEmpty())
@@ -157,7 +189,9 @@
     }
 
     /**
-     * Return the path by appending the specified path to the current path.
+     * Returns the path by appending the specified path to the current path.
+     * @param p the path
+     * @return the path
      */
     public DocPath resolve(DocPath p) {
         if (p == null || p.isEmpty())
@@ -170,28 +204,121 @@
     /**
      * Return the inverse path for this path.
      * For example, if the path is a/b/c, the inverse path is ../../..
+     * @return the path
      */
     public DocPath invert() {
         return new DocPath(path.replaceAll("[^/]+", ".."));
     }
 
     /**
+     * Returns the path formed by eliminating empty components,
+     * '.' components, and redundant name/.. components.
+     * @return the path
+     */
+    public DocPath normalize() {
+        return path.isEmpty()
+                ? this
+                : new DocPath(String.join("/", normalize(path)));
+    }
+
+    private static List<String> normalize(String path) {
+        return normalize(Arrays.asList(path.split("/")));
+    }
+
+    private static List<String> normalize(List<String> parts) {
+        if (parts.stream().noneMatch(s -> s.isEmpty() || s.equals(".") || s.equals(".."))) {
+            return parts;
+        }
+        List<String> normalized = new ArrayList<>();
+        for (String part : parts) {
+            switch (part) {
+                case "":
+                case ".":
+                    break;
+                case "..":
+                    int n = normalized.size();
+                    if (n > 0 && !normalized.get(n - 1).equals("..")) {
+                        normalized.remove(n - 1);
+                    } else {
+                        normalized.add(part);
+                    }
+                    break;
+                default:
+                    normalized.add(part);
+            }
+        }
+        return normalized;
+    }
+
+    /**
+     * Normalize and relativize a path against this path,
+     * assuming that this path is for a file (not a directory),
+     * in which the other path will appear.
+     *
+     * @param other the path to be relativized.
+     * @return the simplified path
+     */
+    public DocPath relativize(DocPath other) {
+        if (other == null || other.path.isEmpty()) {
+            return this;
+        }
+
+        if (path.isEmpty()) {
+            return other;
+        }
+
+        List<String> originParts = normalize(path);
+        int sep = path.lastIndexOf("/");
+        List<String> destParts = sep == -1
+                ? normalize(other.path)
+                : normalize(path.substring(0, sep + 1) + other.path);
+        int common = 0;
+        while (common < originParts.size()
+                && common < destParts.size()
+                && originParts.get(common).equals(destParts.get(common))) {
+            common++;
+        }
+
+        List<String> newParts;
+        if (common == originParts.size()) {
+            newParts = destParts.subList(common, destParts.size());
+        } else {
+            newParts = new ArrayList<>();
+            newParts.addAll(Collections.nCopies(originParts.size() - common - 1, ".."));
+            newParts.addAll(destParts.subList(common, destParts.size()));
+        }
+        return new DocPath(String.join("/", newParts));
+    }
+
+    /**
      * Return true if this path is empty.
+     * @return true if this path is empty
      */
     public boolean isEmpty() {
         return path.isEmpty();
     }
 
+    /**
+     * Creates a DocLink formed from this path and a fragment identifier.
+     * @param fragment the fragment
+     * @return the link
+     */
     public DocLink fragment(String fragment) {
         return new DocLink(path, null, fragment);
     }
 
+    /**
+     * Creates a DocLink formed from this path and a query string.
+     * @param query the query string
+     * @return the link
+     */
     public DocLink query(String query) {
         return new DocLink(path, query, null);
     }
 
     /**
-     * Return this path as a string.
+     * Returns this path as a string.
+     * @return the path
      */
     // This is provided instead of using toString() to help catch
     // unintended use of toString() in string concatenation sequences.
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Extern.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Extern.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -180,10 +180,11 @@
         if (fnd == null)
             return null;
 
+        // The following is somewhat questionable since we are using DocPath
+        // to contain external URLs!
         DocPath p = fnd.relative ?
                 relativepath.resolve(fnd.path).resolve(filename) :
                 DocPath.create(fnd.path).resolve(filename);
-
         return new DocLink(p, "is-external=true", memberName);
     }
 
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java	Fri Feb 02 01:52:03 2018 +0000
@@ -346,7 +346,7 @@
 
     // ----- help options -----
 
-    HELP("--help -help", STANDARD) {
+    HELP("--help -help -? -h", STANDARD) {
         @Override
         public void process(Helper helper) throws OptionException {
             throw new OptionException(OK, helper::usage);
--- a/src/jdk.jcmd/share/classes/sun/tools/jcmd/Arguments.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jcmd/Arguments.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,7 +50,11 @@
             return;
         }
 
-        if (args[0].equals("-h") || args[0].equals("-help") ) {
+        if (args[0].equals("-?") ||
+            args[0].equals("-h") ||
+            args[0].equals("--help") ||
+            // -help: legacy.
+            args[0].equals("-help")) {
             showUsage = true;
             return;
         }
@@ -116,6 +120,6 @@
         System.out.println("  PerfCounter.print display the counters exposed by this process  ");
         System.out.println("  -f  read and execute commands from the file                     ");
         System.out.println("  -l  list JVM processes on the local machine                     ");
-        System.out.println("  -h  this help                                                   ");
+        System.out.println("  -? -h --help print this help message                            ");
     }
 }
--- a/src/jdk.jcmd/share/classes/sun/tools/jcmd/JCmd.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jcmd/JCmd.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -62,7 +62,7 @@
 
         if (arg.isShowUsage()) {
             Arguments.usage();
-            System.exit(1);
+            System.exit(0);
         }
 
         ProcessArgumentMatcher ap = null;
--- a/src/jdk.jcmd/share/classes/sun/tools/jinfo/JInfo.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jinfo/JInfo.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -63,7 +63,11 @@
 
             optionCount++;
 
-            if (arg.equals("-help") || arg.equals("-h")) {
+            if (arg.equals("-?") ||
+                arg.equals("-h") ||
+                arg.equals("--help") ||
+                // -help: legacy.
+                arg.equals("-help")) {
                 usage(0);
             }
 
@@ -255,7 +259,7 @@
         System.err.println("    -flags               to print VM flags");
         System.err.println("    -sysprops            to print Java system properties");
         System.err.println("    <no option>          to print both VM flags and system properties");
-        System.err.println("    -h | -help           to print this help message");
+        System.err.println("    -? | -h | --help | -help to print this help message");
         System.exit(exit);
     }
 }
--- a/src/jdk.jcmd/share/classes/sun/tools/jmap/JMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jmap/JMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,11 @@
             if (!arg.startsWith("-")) {
                 break;
             }
-            if (arg.equals("-help") || arg.equals("-h")) {
+            if (arg.equals("-?") ||
+                arg.equals("-h") ||
+                arg.equals("--help") ||
+                // -help: legacy. Undocumented.
+                arg.equals("-help")) {
                 usage(0);
             } else {
                 if (option != null) {
@@ -247,6 +251,8 @@
         System.err.println("        if the \"live\" suboption is specified, only count live objects");
         System.err.println("    jmap -dump:<dump-options> <pid>");
         System.err.println("        to connect to running process and dump java heap");
+        System.err.println("    jmap -? -h --help");
+        System.err.println("        to print this help message");
         System.err.println("");
         System.err.println("    dump-options:");
         System.err.println("      live         dump only live objects; if not specified,");
--- a/src/jdk.jcmd/share/classes/sun/tools/jps/Arguments.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jps/Arguments.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,11 +52,12 @@
     private HostIdentifier hostId;
 
     public static void printUsage(PrintStream ps) {
-      ps.println("usage: jps [-help]");
+      ps.println("usage: jps [--help]");
       ps.println("       jps [-q] [-mlvV] [<hostid>]");
       ps.println();
       ps.println("Definitions:");
       ps.println("    <hostid>:      <hostname>[:<port>]");
+      ps.println("    -? -h --help -help: Print this help message and exit.");
     }
 
     public Arguments(String[] args) throws IllegalArgumentException {
@@ -64,7 +65,10 @@
 
         if (args.length == 1) {
             if ((args[0].compareTo("-?") == 0)
-                    || (args[0].compareTo("-help")== 0)) {
+                || (args[0].compareTo("-h")== 0)
+                || (args[0].compareTo("--help")== 0)
+                // -help: legacy.
+                || (args[0].compareTo("-help")== 0)) {
               help = true;
               return;
             }
--- a/src/jdk.jcmd/share/classes/sun/tools/jstack/JStack.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jstack/JStack.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,7 +56,11 @@
             if (!arg.startsWith("-")) {
                 break;
             }
-            if (arg.equals("-help") || arg.equals("-h")) {
+            if (arg.equals("-?")     ||
+                arg.equals("-h")     ||
+                arg.equals("--help") ||
+                // -help: legacy.
+                arg.equals("-help")) {
                 usage(0);
             }
             else {
@@ -171,7 +175,7 @@
         System.err.println("");
         System.err.println("Options:");
         System.err.println("    -l  long listing. Prints additional information about locks");
-        System.err.println("    -h or -help to print this help message");
+        System.err.println("    -? -h --help -help to print this help message");
         System.exit(exit);
     }
 }
--- a/src/jdk.jcmd/share/classes/sun/tools/jstat/Arguments.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jcmd/share/classes/sun/tools/jstat/Arguments.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -73,7 +73,7 @@
     private VmIdentifier vmId;
 
     public static void printUsage(PrintStream ps) {
-        ps.println("Usage: jstat -help|-options");
+        ps.println("Usage: jstat --help|-options");
         ps.println("       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]");
         ps.println();
         ps.println("Definitions:");
@@ -93,6 +93,8 @@
         ps.println("                milliseconds(\"ms\") or seconds(\"s\"). The default units are \"ms\".");
         ps.println("  <count>       Number of samples to take before terminating.");
         ps.println("  -J<flag>      Pass <flag> directly to the runtime system.");
+        ps.println("  -? -h --help  Prints this help message.");
+        ps.println("  -help         Prints this help message.");
 
         // undocumented options:
         //   -list [<vmid>]  - list counter names
@@ -103,6 +105,7 @@
         //   -v              - verbose output  (-snap)
         //   -constants      - output constants with -name output
         //   -strings        - output strings with -name output
+        //   -help           - same as -? ...
     }
 
     private static int toMillis(String s) throws IllegalArgumentException {
@@ -147,6 +150,9 @@
         }
 
         if ((args[0].compareTo("-?") == 0)
+                || (args[0].compareTo("-h") == 0)
+                || (args[0].compareTo("--help") == 0)
+                // -help: legacy.
                 || (args[0].compareTo("-help") == 0)) {
             help = true;
             return;
--- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/JavapTask.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/JavapTask.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -123,7 +123,7 @@
 
     static final Option[] recognizedOptions = {
 
-        new Option(false, "-help", "--help", "-?") {
+        new Option(false, "-help", "--help", "-?", "-h") {
             @Override
             void process(JavapTask task, String opt, String arg) {
                 task.options.help = true;
--- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/javap.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 main.usage.summary=\
 Usage: {0} <options> <classes>\n\
-use -help for a list of possible options
+use --help for a list of possible options
 
 warn.prefix=Warning:
 warn.unexpected.class=File {0} does not contain class {1}
@@ -33,7 +33,7 @@
 
 main.usage.summary=\
 Usage: {0} <options> <classes>\n\
-use -help for a list of possible options
+use --help for a list of possible options
 
 main.usage=\
 Usage: {0} <options> <classes>\n\
@@ -41,7 +41,7 @@
 
 
 main.opt.help=\
-\  -help  --help  -?                Print this usage message
+\  -? -h --help -help               Print this help message
 
 main.opt.version=\
 \  -version                         Version information
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/LoadProc.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/LoadProc.java	Fri Feb 02 01:52:03 2018 +0000
@@ -50,7 +50,7 @@
 
 import javax.tools.Diagnostic;
 
-import static javax.lang.model.SourceVersion.RELEASE_10;
+import static javax.lang.model.SourceVersion.RELEASE_11;
 
 /**
  * Annotation processor for the Deprecation Scanner tool.
@@ -58,7 +58,7 @@
  *
  */
 @SupportedAnnotationTypes("java.lang.Deprecated")
-@SupportedSourceVersion(RELEASE_10)
+@SupportedSourceVersion(RELEASE_11)
 public class LoadProc extends AbstractProcessor {
     Elements elements;
     Messager messager;
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/Main.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/Main.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -106,7 +106,7 @@
     // Keep these updated manually until there's a compiler API
     // that allows querying of supported releases.
     final Set<String> releasesWithoutForRemoval = Set.of("6", "7", "8");
-    final Set<String> releasesWithForRemoval = Set.of("9", "10");
+    final Set<String> releasesWithForRemoval = Set.of("9", "10", "11");
 
     final Set<String> validReleases;
     {
@@ -358,14 +358,15 @@
      * Process classes from a particular JDK release, using only information
      * in this JDK.
      *
-     * @param release "6", "7", "8", "9", or "10"
+     * @param release "6", "7", "8", "9", "10", or "11"
      * @param classes collection of classes to process, may be empty
      * @return success value
      */
     boolean processRelease(String release, Collection<String> classes) throws IOException {
         options.addAll(List.of("--release", release));
 
-        if (release.equals("9") || release.equals("10")) {
+        if (release.equals("9") || release.equals("10") ||
+            release.equals("11")) {
             List<String> rootMods = List.of("java.se", "java.se.ee");
             TraverseProc proc = new TraverseProc(rootMods);
             JavaCompiler.CompilationTask task =
@@ -481,7 +482,7 @@
         String dir = null;
         String jar = null;
         String jdkHome = null;
-        String release = "10";
+        String release = "11";
         List<String> loadClasses = new ArrayList<>();
         String csvFile = null;
 
@@ -505,10 +506,11 @@
                             return false;
                         case "--help":
                         case "-h":
+                        case "-?":
                             out.println(Messages.get("main.usage"));
                             out.println();
                             out.println(Messages.get("main.help"));
-                            return false;
+                            return true;
                         case "-l":
                         case "--list":
                             require(scanMode == ScanMode.ARGS);
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/resources/jdeprscan.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/resources/jdeprscan.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -2,14 +2,14 @@
 Usage: jdeprscan [options] '{dir|jar|class}' ...\n\
 \n\
 options:\n\
-\       --class-path PATH\n\
-\       --for-removal\n\
-\       --full-version\n\
-\  -h   --help\n\
-\  -l   --list\n\
-\       --release 6|7|8|9|10\n\
-\  -v   --verbose\n\
-\       --version
+\        --class-path PATH\n\
+\        --for-removal\n\
+\        --full-version\n\
+\  -? -h --help\n\
+\  -l    --list\n\
+\        --release 6|7|8|9|10\n\
+\  -v    --verbose\n\
+\        --version
 
 main.help=\
 Scans each argument for usages of deprecated APIs. An argument\n\
@@ -28,7 +28,7 @@
 \n\
 The --full-version option prints out the full version string of the tool.\n\
 \n\
-The --help option prints out a full help message.\n\
+The --help (-? -h) option prints out a full help message.\n\
 \n\
 The --list (-l) option prints out the set of deprecated APIs. No scanning is done,\n\
 so no directory, jar, or class arguments should be provided.\n\
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/JdepsTask.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1144,7 +1144,7 @@
         for (Option o : recognizedOptions) {
             String name = o.aliases[0].substring(1); // there must always be at least one name
             name = name.charAt(0) == '-' ? name.substring(1) : name;
-            if (o.isHidden() || name.equals("h") || name.startsWith("filter:")) {
+            if (o.isHidden() || name.startsWith("filter:")) {
                 continue;
             }
             log.println(getMessage("main.opt." + name));
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/jdeps.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/jdeps.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
 main.usage.summary=\
 Usage: {0} <options> <path ...>]\n\
-use -h, -?, -help, or --help for a list of possible options
+use --help for a list of possible options
 
 main.usage=\
 Usage: {0} <options> <path ...>]\n\
@@ -12,8 +12,7 @@
 warn.prefix=Warning:
 
 main.opt.h=\
-\  -h -? -help\n\
-\  --help                        Print this usage message
+\  -h -? --help                  Print this help message
 
 main.opt.version=\
 \  -version --version            Version information
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -791,7 +791,7 @@
     private static void usage() {
         MessageOutput.println("zz usage text", new Object [] {progname,
                                                      File.pathSeparator});
-        System.exit(1);
+        System.exit(0);
     }
 
     static void usageError(String messageKey) {
@@ -1007,7 +1007,11 @@
                     return;
                 }
                 connectSpec = argv[++i];
-            } else if (token.equals("-help")) {
+            } else if (token.equals("-?") ||
+                       token.equals("-h") ||
+                       token.equals("--help") ||
+                       // -help: legacy.
+                       token.equals("-help")) {
                 usage();
             } else if (token.equals("-version")) {
                 Commands evaluator = new Commands();
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTYResources.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -426,7 +426,7 @@
              "Usage: {0} <options> <class> <arguments>\n" +
              "\n" +
              "where options include:\n" +
-             "    -help             print out this message and exit\n" +
+             "    -? -h --help -help print this help message and exit\n" +
              "    -sourcepath <directories separated by \"{1}\">\n" +
              "                      directories in which to look for source files\n" +
              "    -attach <address>\n" +
--- a/src/jdk.jdi/share/classes/com/sun/tools/jdi/InvokableTypeImpl.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jdi/share/classes/com/sun/tools/jdi/InvokableTypeImpl.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -77,9 +77,6 @@
      * a member of this type, if the size of the argument list
      * does not match the number of declared arguments for the method, or
      * if the method is not static or is a static initializer.
-     * @throws InvalidTypeException if any argument in the
-     * argument list is not assignable to the corresponding method argument
-     * type.
      * @throws ClassNotLoadedException if any argument type has not yet been loaded
      * through the appropriate class loader.
      * @throws IncompatibleThreadStateException if the specified thread has not
--- a/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,7 +70,7 @@
 
         new Option<JImageTask>(false, (task, option, arg) -> {
             task.options.help = true;
-        }, "--help", "-h"),
+        }, "--help", "-h", "-?"),
 
         new Option<JImageTask>(false, (task, option, arg) -> {
             task.options.verbose = true;
--- a/src/jdk.jlink/share/classes/jdk/tools/jimage/resources/jimage.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jimage/resources/jimage.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -60,23 +60,23 @@
 warn.prefix=Warning:
 
 main.opt.dir=\
-\       --dir                        Target directory for extract directive
+\          --dir                        Target directory for extract directive
 
 main.opt.include=\
-\       --include <pattern-list>     Pattern list for filtering entries.
+\          --include <pattern-list>     Pattern list for filtering entries.
 
 main.opt.full-version=\
-\       --full-version               Print full version information
+\          --full-version               Print full version information
 
 main.opt.help=\
-\  -h,  --help                       Print usage message
+\  -?, -h, --help                       Print this help message
 
 main.opt.verbose=\
-\       --verbose                    Listing prints entry size and offset\n\
-\                                    attributes
+\          --verbose                    Listing prints entry size and offset\n\
+\                                       attributes
 
 main.opt.version=\
-\       --version                    Print version information
+\          --version                    Print version information
 
 main.command.files=\
 \       @<filename>                  Read options from file
--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,8 +43,6 @@
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
@@ -88,7 +86,7 @@
     private static final Option<?>[] recognizedOptions = {
         new Option<JlinkTask>(false, (task, opt, arg) -> {
             task.options.help = true;
-        }, "--help", "-h"),
+        }, "--help", "-h", "-?"),
         new Option<JlinkTask>(true, (task, opt, arg) -> {
             // if used multiple times, the last one wins!
             // So, clear previous values, if any.
@@ -231,7 +229,8 @@
         try {
             List<String> remaining = optionsHelper.handleOptions(this, args);
             if (remaining.size() > 0 && !options.suggestProviders) {
-                throw taskHelper.newBadArgs("err.orphan.arguments", toString(remaining))
+                throw taskHelper.newBadArgs("err.orphan.arguments",
+                                            remaining.stream().collect(Collectors.joining(" ")))
                                 .showUsage(true);
             }
             if (options.help) {
@@ -659,9 +658,12 @@
         throws BadArgs
     {
         if (args.size() > 1) {
-            throw taskHelper.newBadArgs("err.orphan.argument",
-                                        toString(args.subList(1, args.size())))
-                            .showUsage(true);
+            List<String> arguments = args.get(0).startsWith("-")
+                                        ? args
+                                        : args.subList(1, args.size());
+            throw taskHelper.newBadArgs("err.invalid.arg.for.option",
+                                        "--suggest-providers",
+                                        arguments.stream().collect(Collectors.joining(" ")));
         }
 
         if (options.bindServices) {
@@ -714,7 +716,7 @@
                  .forEach(names::remove);
             if (!names.isEmpty()) {
                 log.println(taskHelper.getMessage("warn.provider.notfound",
-                                                  toString(names)));
+                    names.stream().sorted().collect(Collectors.joining(","))));
             }
 
             String msg = String.format("%n%s:", taskHelper.getMessage("suggested.providers.header"));
@@ -722,11 +724,6 @@
         }
     }
 
-    private static String toString(Collection<String> collection) {
-        return collection.stream().sorted()
-                         .collect(Collectors.joining(","));
-    }
-
     private String getSaveOpts() {
         StringBuilder sb = new StringBuilder();
         sb.append('#').append(new Date()).append("\n");
--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/TaskHelper.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/TaskHelper.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -101,6 +101,7 @@
         final boolean hidden;
         final String name;
         final String shortname;
+        final String shortname2;
         final boolean terminalOption;
 
         public Option(boolean hasArg,
@@ -108,6 +109,7 @@
                       boolean hidden,
                       String name,
                       String shortname,
+                      String shortname2,
                       boolean isTerminal)
         {
             if (!name.startsWith("--")) {
@@ -122,19 +124,33 @@
             this.hidden = hidden;
             this.name = name;
             this.shortname = shortname;
+            this.shortname2 = shortname2;
             this.terminalOption = isTerminal;
         }
+        public Option(boolean hasArg,
+                      Processing<T> processing,
+                      boolean hidden,
+                      String name,
+                      String shortname,
+                      boolean isTerminal)
+        {
+            this(hasArg, processing, false, name, shortname, "", isTerminal);
+        }
 
         public Option(boolean hasArg, Processing<T> processing, String name, String shortname, boolean isTerminal) {
-            this(hasArg, processing, false, name, shortname, isTerminal);
+            this(hasArg, processing, false, name, shortname, "", isTerminal);
+        }
+
+        public Option(boolean hasArg, Processing<T> processing, String name, String shortname, String shortname2) {
+            this(hasArg, processing, false, name, shortname, shortname2, false);
         }
 
         public Option(boolean hasArg, Processing<T> processing, String name, String shortname) {
-            this(hasArg, processing, false, name, shortname, false);
+            this(hasArg, processing, false, name, shortname, "", false);
         }
 
         public Option(boolean hasArg, Processing<T> processing, boolean hidden, String name) {
-            this(hasArg, processing, hidden, name, "", false);
+            this(hasArg, processing, hidden, name, "", "", false);
         }
 
         public Option(boolean hasArg, Processing<T> processing, String name) {
@@ -152,6 +168,7 @@
         public boolean matches(String opt) {
             return opt.equals(name) ||
                    opt.equals(shortname) ||
+                   opt.equals(shortname2) ||
                    hasArg && opt.startsWith("--") && opt.startsWith(name + "=");
          }
 
--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@
 \Possible options include:
 
 main.opt.help=\
-\  -h, --help                            Print this help message
+\  -h, --help, -?                        Print this help message
 
 main.opt.version=\
 \      --version                         Version information
@@ -128,7 +128,7 @@
 err.unknown.option=unknown option: {0}
 err.missing.arg=no value given for {0}
 err.internal.error=internal error: {0} {1} {2}
-err.invalid.arg.for.option=invalid argument for option: {0}
+err.invalid.arg.for.option={0} does not accept \"{1}\" argument
 err.option.after.class=option must be specified before classes: {0}
 err.option.unsupported={0} not supported: {1}
 err.orphan.arguments=invalid argument: {0}
--- a/src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1309,7 +1309,7 @@
                         .withValuesConvertedBy(new PatternConverter());
 
         OptionSpec<Void> help
-                = parser.acceptsAll(Set.of("h", "help"), getMessage("main.opt.help"))
+                = parser.acceptsAll(Set.of("h", "help", "?"), getMessage("main.opt.help"))
                         .forHelp();
 
         OptionSpec<Void> helpExtra
--- a/src/jdk.jlink/share/classes/jdk/tools/jmod/resources/jmod.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jlink/share/classes/jdk/tools/jmod/resources/jmod.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -46,7 +46,7 @@
 main.opt.mode.hash=\
 \hash      - Records hashes of tied modules.
 
-main.opt.help=Print this usage message
+main.opt.help=Print this help message
 main.opt.help-extra=Print help on extra options
 main.opt.version=Version information
 main.opt.class-path=Application jar files|dir containing classes
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -515,7 +515,7 @@
         private final OptionSpecBuilder argV = parser.accepts("v");
         private final OptionSpec<String> argR = parser.accepts("R").withRequiredArg();
         private final OptionSpec<String> argC = parser.accepts("C").withRequiredArg();
-        private final OptionSpecBuilder argHelp = parser.acceptsAll(asList("h", "help"));
+        private final OptionSpecBuilder argHelp = parser.acceptsAll(asList("?", "h", "help"));
         private final OptionSpecBuilder argVersion = parser.accepts("version");
         private final OptionSpecBuilder argFullVersion = parser.accepts("full-version");
         private final OptionSpecBuilder argShowVersion = parser.accepts("show-version");
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -216,7 +216,7 @@
 \                            Use one -C for each compiler flag or flag argument\n\
 \    --version             Print version information and exit\n\
 \    --show-version        Print version information and continue\n\
-\    --help                Print this synopsis of standard options and exit\n\
+\    --help, -?, -h        Print this synopsis of standard options and exit\n\
 \    --help-extra, -X      Print help on non-standard options and exit\n\
 \n\
 A file argument may be a file name, or one of the predefined file names: DEFAULT,\n\
--- a/src/jdk.jshell/share/classes/jdk/jshell/Eval.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Eval.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,6 +36,7 @@
 import com.sun.source.tree.ArrayTypeTree;
 import com.sun.source.tree.AssignmentTree;
 import com.sun.source.tree.ClassTree;
+import com.sun.source.tree.ExpressionStatementTree;
 import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.MethodTree;
@@ -43,6 +44,7 @@
 import com.sun.source.tree.NewClassTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
+import com.sun.source.util.TreeScanner;
 import com.sun.tools.javac.tree.JCTree;
 import com.sun.tools.javac.tree.Pretty;
 import java.io.IOException;
@@ -52,6 +54,8 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 import jdk.jshell.ExpressionToTypeInfo.ExpressionInfo;
+import jdk.jshell.ExpressionToTypeInfo.ExpressionInfo.AnonymousDescription;
+import jdk.jshell.ExpressionToTypeInfo.ExpressionInfo.AnonymousDescription.VariableDesc;
 import jdk.jshell.Key.ErroneousKey;
 import jdk.jshell.Key.MethodKey;
 import jdk.jshell.Key.TypeDeclKey;
@@ -60,6 +64,7 @@
 import jdk.jshell.TaskFactory.AnalyzeTask;
 import jdk.jshell.TaskFactory.BaseTask;
 import jdk.jshell.TaskFactory.ParseTask;
+import jdk.jshell.Util.Pair;
 import jdk.jshell.Wrap.CompoundWrap;
 import jdk.jshell.Wrap.Range;
 import jdk.jshell.Snippet.Status;
@@ -74,6 +79,7 @@
 import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toSet;
 import static java.util.Collections.singletonList;
+import com.sun.tools.javac.code.Symbol.TypeSymbol;
 import static jdk.internal.jshell.debug.InternalDebugControl.DBG_GEN;
 import static jdk.jshell.Util.DOIT_METHOD_NAME;
 import static jdk.jshell.Util.PREFIX_PATTERN;
@@ -98,6 +104,11 @@
 
     private int varNumber = 0;
 
+    /* The number of anonymous innerclasses seen so far. Used to generate unique
+     * names of these classes.
+     */
+    private int anonCount = 0;
+
     private final JShell state;
 
     // The set of names of methods on Object
@@ -203,7 +214,7 @@
                 case VARIABLE:
                     return processVariables(userSource, units, compileSourceInt, pt);
                 case EXPRESSION_STATEMENT:
-                    return processExpression(userSource, compileSourceInt);
+                    return processExpression(userSource, unitTree, compileSourceInt, pt);
                 case CLASS:
                     return processClass(userSource, unitTree, compileSourceInt, SubKind.CLASS_SUBKIND, pt);
                 case ENUM:
@@ -285,15 +296,19 @@
             String name = vt.getName().toString();
             String typeName;
             String fullTypeName;
+            String displayType;
+            boolean hasEnhancedType = false;
             TreeDependencyScanner tds = new TreeDependencyScanner();
             Wrap typeWrap;
             Wrap anonDeclareWrap = null;
             Wrap winit = null;
+            boolean enhancedDesugaring = false;
+            Set<String> anonymousClasses = Collections.emptySet();
             StringBuilder sbBrackets = new StringBuilder();
             Tree baseType = vt.getType();
             if (baseType != null) {
                 tds.scan(baseType); // Not dependent on initializer
-                fullTypeName = typeName = EvalPretty.prettyExpr((JCTree) vt.getType(), false);
+                fullTypeName = displayType = typeName = EvalPretty.prettyExpr((JCTree) vt.getType(), false);
                 while (baseType instanceof ArrayTypeTree) {
                     //TODO handle annotations too
                     baseType = ((ArrayTypeTree) baseType).getType();
@@ -311,83 +326,27 @@
                     Range rinit = dis.treeToRange(init);
                     String initCode = rinit.part(compileSource);
                     ExpressionInfo ei =
-                            ExpressionToTypeInfo.localVariableTypeForInitializer(initCode, state);
-                    typeName = ei == null ? "java.lang.Object" : ei.typeName;
-                    fullTypeName = ei == null ? "java.lang.Object" : ei.fullTypeName;
-                    if (ei != null && init.getKind() == Tree.Kind.NEW_CLASS &&
-                        ((NewClassTree) init).getClassBody() != null) {
-                        NewClassTree nct = (NewClassTree) init;
-                        StringBuilder constructor = new StringBuilder();
-                        constructor.append(fullTypeName).append("(");
-                        String sep = "";
-                        if (ei.enclosingInstanceType != null) {
-                            constructor.append(ei.enclosingInstanceType);
-                            constructor.append(" encl");
-                            sep = ", ";
-                        }
-                        int idx = 0;
-                        for (String type : ei.parameterTypes) {
-                            constructor.append(sep);
-                            constructor.append(type);
-                            constructor.append(" ");
-                            constructor.append("arg" + idx++);
-                            sep = ", ";
-                        }
-                        if (ei.enclosingInstanceType != null) {
-                            constructor.append(") { encl.super (");
-                        } else {
-                            constructor.append(") { super (");
-                        }
-                        sep = "";
-                        for (int i = 0; i < idx; i++) {
-                            constructor.append(sep);
-                            constructor.append("arg" + i++);
-                            sep = ", ";
-                        }
-                        constructor.append("); }");
-                        List<? extends Tree> members = nct.getClassBody().getMembers();
-                        Range bodyRange = dis.treeListToRange(members);
-                        Wrap bodyWrap;
+                            ExpressionToTypeInfo.localVariableTypeForInitializer(initCode, state, false);
+                    if (ei != null) {
+                        typeName = ei.declareTypeName;
+                        fullTypeName = ei.fullTypeName;
+                        displayType = ei.displayTypeName;
+
+                        hasEnhancedType = !typeName.equals(fullTypeName);
 
-                        if (bodyRange != null) {
-                            bodyWrap = Wrap.rangeWrap(compileSource, bodyRange);
-                        } else {
-                            bodyWrap = Wrap.simpleWrap(" ");
-                        }
-
-                        Range argRange = dis.treeListToRange(nct.getArguments());
-                        Wrap argWrap;
-
-                        if (argRange != null) {
-                            argWrap = Wrap.rangeWrap(compileSource, argRange);
-                        } else {
-                            argWrap = Wrap.simpleWrap(" ");
-                        }
+                        enhancedDesugaring = !ei.isPrimitiveType;
 
-                        if (ei.enclosingInstanceType != null) {
-                            Range enclosingRanges =
-                                    dis.treeToRange(nct.getEnclosingExpression());
-                            Wrap enclosingWrap = Wrap.rangeWrap(compileSource, enclosingRanges);
-                            argWrap = argRange != null ? new CompoundWrap(enclosingWrap,
-                                                                          Wrap.simpleWrap(","),
-                                                                          argWrap)
-                                                       : enclosingWrap;
-                        }
-                        Wrap hwrap = Wrap.simpleWrap("public static class " + fullTypeName +
-                                                     (ei.isClass ? " extends " : " implements ") +
-                                                     typeName + " { " + constructor);
-                        anonDeclareWrap = new CompoundWrap(hwrap, bodyWrap, Wrap.simpleWrap("}"));
-                        winit = new CompoundWrap("new " + fullTypeName + "(", argWrap, ")");
-
-                        String superType = typeName;
-
-                        typeName = fullTypeName;
-                        fullTypeName = ei.isClass ? "<anonymous class extending " + superType + ">"
-                                                  : "<anonymous class implementing " + superType + ">";
+                        Pair<Wrap, Wrap> anonymous2Member =
+                                anonymous2Member(ei, compileSource, rinit, dis, init);
+                        anonDeclareWrap = anonymous2Member.first;
+                        winit = anonymous2Member.second;
+                        anonymousClasses = ei.anonymousClasses.stream().map(ad -> ad.declareTypeName).collect(Collectors.toSet());
+                    } else {
+                        displayType = fullTypeName = typeName = "java.lang.Object";
                     }
                     tds.scan(init);
                 } else {
-                    fullTypeName = typeName = "java.lang.Object";
+                    displayType = fullTypeName = typeName = "java.lang.Object";
                 }
                 typeWrap = Wrap.identityWrap(typeName);
             }
@@ -411,17 +370,193 @@
             int nameEnd = nameStart + name.length();
             Range rname = new Range(nameStart, nameEnd);
             Wrap guts = Wrap.varWrap(compileSource, typeWrap, sbBrackets.toString(), rname,
-                                     winit, anonDeclareWrap);
-                        DiagList modDiag = modifierDiagnostics(vt.getModifiers(), dis, true);
+                                     winit, enhancedDesugaring, anonDeclareWrap);
+            DiagList modDiag = modifierDiagnostics(vt.getModifiers(), dis, true);
             Snippet snip = new VarSnippet(state.keyMap.keyForVariable(name), userSource, guts,
-                    name, subkind, fullTypeName,
+                    name, subkind, displayType, hasEnhancedType ? fullTypeName : null, anonymousClasses,
                     tds.declareReferences(), modDiag);
             snippets.add(snip);
         }
         return snippets;
     }
 
-    private List<Snippet> processExpression(String userSource, String compileSource) {
+    /**Convert anonymous classes in "init" to member classes, based
+     * on the additional information from ExpressionInfo.anonymousClasses.
+     *
+     * This means:
+     * -if the code in the anonymous class captures any variables from the
+     *  enclosing context, create fields for them
+     * -creating an explicit constructor that:
+     * --if the new class expression has a base/enclosing expression, make it an
+     *   explicit constructor parameter "encl" and use "encl.super" when invoking
+     *   the supertype constructor
+     * --if the (used) supertype constructor has any parameters, declare them
+     *   as explicit parameters of the constructor, and pass them to the super
+     *   constructor
+     * --if the code in the anonymous class captures any variables from the
+     *   enclosing context, make them an explicit paramters of the constructor
+     *   and assign to respective fields.
+     * --if there are any explicit fields with initializers in the anonymous class,
+     *   move the initializers at the end of the constructor (after the captured fields
+     *   are assigned, so that the initializers of these fields can use them).
+     * -from the captured variables fields, constructor, and existing members
+     *  (with cleared field initializers), create an explicit class that extends or
+     *  implements the supertype of the anonymous class.
+     *
+     * This method returns two wraps: the first contains the class declarations for the
+     * converted classes, the first one should be used instead of "init" in the variable
+     * declaration.
+     */
+    private Pair<Wrap, Wrap> anonymous2Member(ExpressionInfo ei,
+                                              String compileSource,
+                                              Range rinit,
+                                              TreeDissector dis,
+                                              Tree init) {
+        List<Wrap> anonymousDeclarations = new ArrayList<>();
+        List<Wrap> partitionedInit = new ArrayList<>();
+        int lastPos = rinit.begin;
+        com.sun.tools.javac.util.List<NewClassTree> toConvert =
+                ExpressionToTypeInfo.listAnonymousClassesToConvert(init);
+        com.sun.tools.javac.util.List<AnonymousDescription> descriptions =
+                ei.anonymousClasses;
+        while (toConvert.nonEmpty() && descriptions.nonEmpty()) {
+            NewClassTree node = toConvert.head;
+            AnonymousDescription ad = descriptions.head;
+
+            toConvert = toConvert.tail;
+            descriptions = descriptions.tail;
+
+            List<Object> classBodyParts = new ArrayList<>();
+            //declarations of the captured variables:
+            for (VariableDesc vd : ad.capturedVariables) {
+                classBodyParts.add(vd.type + " " + vd.name + ";\n");
+            }
+
+            List<Object> constructorParts = new ArrayList<>();
+            constructorParts.add(ad.declareTypeName + "(");
+            String sep = "";
+            //add the parameter for the base/enclosing expression, if any:
+            if (ad.enclosingInstanceType != null) {
+                constructorParts.add(ad.enclosingInstanceType + " encl");
+                sep = ", ";
+            }
+            int idx = 0;
+            //add parameters of the super constructor, if any:
+            for (String type : ad.parameterTypes) {
+                constructorParts.add(sep);
+                constructorParts.add(type + " " + "arg" + idx++);
+                sep = ", ";
+            }
+            //add parameters for the captured variables:
+            for (VariableDesc vd : ad.capturedVariables) {
+                constructorParts.add(sep);
+                constructorParts.add(vd.type + " " + "cap$" + vd.name);
+                sep = ", ";
+            }
+            //construct super constructor call:
+            if (ad.enclosingInstanceType != null) {
+                //if there's an enclosing instance, call super on it:
+                constructorParts.add(") { encl.super (");
+            } else {
+                constructorParts.add(") { super (");
+            }
+            sep = "";
+            for (int i = 0; i < idx; i++) {
+                constructorParts.add(sep);
+                constructorParts.add("arg" + i);
+                sep = ", ";
+            }
+            constructorParts.add(");");
+            //initialize the captured variables:
+            for (VariableDesc vd : ad.capturedVariables) {
+                constructorParts.add("this." + vd.name + " = " + "cap$" + vd.name + ";\n");
+            }
+            List<? extends Tree> members =
+                    node.getClassBody().getMembers();
+            for (Tree member : members) {
+                if (member.getKind() == Tree.Kind.VARIABLE) {
+                    VariableTree vt = (VariableTree) member;
+
+                    if (vt.getInitializer() != null) {
+                        //for variables with initializer, explicitly move the initializer
+                        //to the constructor after the captured variables as assigned
+                        //(the initializers would otherwise run too early):
+                        Range wholeVar = dis.treeToRange(vt);
+                        int name = ((JCTree) vt).pos;
+                        classBodyParts.add(new CompoundWrap(Wrap.rangeWrap(compileSource,
+                                                                      new Range(wholeVar.begin, name)),
+                                                       vt.getName().toString(),
+                                                       ";\n"));
+                        constructorParts.add(Wrap.rangeWrap(compileSource,
+                                                            new Range(name, wholeVar.end)));
+                        continue;
+                    }
+                }
+                classBodyParts.add(Wrap.rangeWrap(compileSource,
+                                             dis.treeToRange(member)));
+            }
+
+            constructorParts.add("}");
+
+            //construct the member class:
+            classBodyParts.add(new CompoundWrap(constructorParts.toArray()));
+
+            Wrap classBodyWrap = new CompoundWrap(classBodyParts.toArray());
+
+            anonymousDeclarations.add(new CompoundWrap("public static class ", ad.declareTypeName,
+                                         (ad.isClass ? " extends " : " implements "),
+                                         ad.superTypeName, " { ", classBodyWrap, "}"));
+
+            //change the new class expression to use the newly created member type:
+            Range argRange = dis.treeListToRange(node.getArguments());
+            Wrap argWrap;
+
+            if (argRange != null) {
+                argWrap = Wrap.rangeWrap(compileSource, argRange);
+            } else {
+                argWrap = Wrap.simpleWrap(" ");
+            }
+
+            if (ad.enclosingInstanceType != null) {
+                //if there's an enclosing expression, set it as the first parameter:
+                Range enclosingRanges =
+                        dis.treeToRange(node.getEnclosingExpression());
+                Wrap enclosingWrap = Wrap.rangeWrap(compileSource, enclosingRanges);
+                argWrap = argRange != null ? new CompoundWrap(enclosingWrap,
+                                                              Wrap.simpleWrap(","),
+                                                              argWrap)
+                                           : enclosingWrap;
+            }
+
+            Range current = dis.treeToRange(node);
+            String capturedArgs;
+            if (!ad.capturedVariables.isEmpty()) {
+                capturedArgs = (ad.parameterTypes.isEmpty() ? "" : ", ") +
+                               ad.capturedVariables.stream()
+                                                   .map(vd -> vd.name)
+                                                   .collect(Collectors.joining(","));
+            } else {
+                capturedArgs = "";
+            }
+            if (lastPos < current.begin)
+                partitionedInit.add(Wrap.rangeWrap(compileSource,
+                                                   new Range(lastPos, current.begin)));
+            partitionedInit.add(new CompoundWrap("new " + ad.declareTypeName + "(",
+                                                 argWrap,
+                                                 capturedArgs,
+                                                 ")"));
+            lastPos = current.end;
+        }
+
+        if (lastPos < rinit.end)
+            partitionedInit.add(Wrap.rangeWrap(compileSource, new Range(lastPos, rinit.end)));
+
+        return new Pair<>(new CompoundWrap(anonymousDeclarations.toArray()),
+                          new CompoundWrap(partitionedInit.toArray()));
+    }
+
+    private List<Snippet> processExpression(String userSource, Tree tree, String compileSource, ParseTask pt) {
+        ExpressionStatementTree expr = (ExpressionStatementTree) tree;
         String name = null;
         ExpressionInfo ei = ExpressionToTypeInfo.expressionInfo(compileSource, state);
         ExpressionTree assignVar;
@@ -453,10 +588,31 @@
                         name = "$" + ++varNumber;
                     }
                 }
-                guts = Wrap.tempVarWrap(compileSource, ei.accessibleTypeName, name);
+                TreeDissector dis = TreeDissector.createByFirstClass(pt);
+                ExpressionInfo varEI =
+                        ExpressionToTypeInfo.localVariableTypeForInitializer(compileSource, state, true);
+                String declareTypeName;
+                String fullTypeName;
+                String displayTypeName;
+                Set<String> anonymousClasses;
+                if (varEI != null) {
+                    declareTypeName = varEI.declareTypeName;
+                    fullTypeName = varEI.fullTypeName;
+                    displayTypeName = varEI.displayTypeName;
+
+                    Pair<Wrap, Wrap> anonymous2Member =
+                            anonymous2Member(varEI, compileSource, new Range(0, compileSource.length()), dis, expr.getExpression());
+                    guts = Wrap.tempVarWrap(anonymous2Member.second.wrapped(), declareTypeName, name, anonymous2Member.first);
+                    anonymousClasses = varEI.anonymousClasses.stream().map(ad -> ad.declareTypeName).collect(Collectors.toSet());
+                } else {
+                    declareTypeName = ei.accessibleTypeName;
+                    displayTypeName = fullTypeName = typeName;
+                    guts = Wrap.tempVarWrap(compileSource, declareTypeName, name, null);
+                    anonymousClasses = Collections.emptySet();
+                }
                 Collection<String> declareReferences = null; //TODO
                 snip = new VarSnippet(state.keyMap.keyForVariable(name), userSource, guts,
-                        name, SubKind.TEMP_VAR_EXPRESSION_SUBKIND, typeName, declareReferences, null);
+                        name, SubKind.TEMP_VAR_EXPRESSION_SUBKIND, displayTypeName, fullTypeName, anonymousClasses, declareReferences, null);
             } else {
                 guts = Wrap.methodReturnWrap(compileSource);
                 snip = new ExpressionSnippet(state.keyMap.keyForExpression(name, typeName), userSource, guts,
@@ -1059,4 +1215,7 @@
                 : new DiagList(new ModifierDiagnostic(list, fatal));
     }
 
+    String computeDeclareName(TypeSymbol ts) {
+        return Util.JSHELL_ANONYMOUS + "$" + Long.toUnsignedString(anonCount++);
+    }
 }
--- a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,21 @@
 
 package jdk.jshell;
 
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.VariableElement;
 import com.sun.source.tree.ReturnTree;
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
 import com.sun.source.tree.ConditionalExpressionTree;
-import com.sun.source.tree.ExpressionStatementTree;
 import com.sun.source.tree.ExpressionTree;
+import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.MethodInvocationTree;
 import com.sun.source.tree.MethodTree;
 import com.sun.source.tree.NewClassTree;
@@ -39,13 +48,21 @@
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
 import com.sun.source.util.TreePathScanner;
+import com.sun.source.util.TreeScanner;
 import com.sun.tools.javac.code.Flags;
 import com.sun.tools.javac.code.Symbol;
+import com.sun.tools.javac.code.Symbol.TypeSymbol;
 import com.sun.tools.javac.code.Symtab;
 import com.sun.tools.javac.code.Type;
 import com.sun.tools.javac.code.Types;
+import com.sun.tools.javac.tree.JCTree.JCClassDecl;
+import com.sun.tools.javac.tree.TreeInfo;
 import com.sun.tools.javac.util.List;
+import com.sun.tools.javac.util.ListBuffer;
+import jdk.jshell.ExpressionToTypeInfo.ExpressionInfo.AnonymousDescription;
+import jdk.jshell.ExpressionToTypeInfo.ExpressionInfo.AnonymousDescription.VariableDesc;
 import jdk.jshell.TaskFactory.AnalyzeTask;
+import jdk.jshell.TypePrinter.AnonymousTypeKind;
 
 /**
  * Compute information about an expression string, particularly its type name.
@@ -57,26 +74,75 @@
     final AnalyzeTask at;
     final CompilationUnitTree cu;
     final JShell state;
+    final boolean computeEnhancedInfo;
+    final boolean enhancedTypesAccessible;
     final Symtab syms;
     final Types types;
+    final Map<TypeSymbol, String> anon2Name = new HashMap<>();
 
-    private ExpressionToTypeInfo(AnalyzeTask at, CompilationUnitTree cu, JShell state) {
+    private ExpressionToTypeInfo(AnalyzeTask at, CompilationUnitTree cu, JShell state,
+                                 boolean computeEnhancedInfo, boolean enhancedTypesAccessible) {
         this.at = at;
         this.cu = cu;
         this.state = state;
+        this.computeEnhancedInfo = computeEnhancedInfo;
+        this.enhancedTypesAccessible = enhancedTypesAccessible;
         this.syms = Symtab.instance(at.context);
         this.types = Types.instance(at.context);
     }
 
     public static class ExpressionInfo {
         ExpressionTree tree;
+        boolean isPrimitiveType;
         String typeName;
         String accessibleTypeName;
+        /* In result of localVariableTypeForInitializer, the type that should be used
+         * as a declaration type of the field. This does not include intersection types,
+         * but does contain references to anonymous types converted to member types.
+         */
+        String declareTypeName;
+        /* In result of localVariableTypeForInitializer, the apparent/infered type of
+         * the variable. This includes intersection types, and references to anonymous
+         * types converted to member types.
+         */
         String fullTypeName;
-        List<String> parameterTypes;
-        String enclosingInstanceType;
-        boolean isClass;
+        /* In result of localVariableTypeForInitializer, the human readable type of
+         * the variable. This includes intersection types, and human readable descriptions
+         * of anonymous types.
+         */
+        String displayTypeName;
         boolean isNonVoid;
+        /* In result of localVariableTypeForInitializer, description of important anonymous
+         * classes.
+         */
+        List<AnonymousDescription> anonymousClasses = List.nil();
+
+        /* A description of an anonymous class. */
+        static class AnonymousDescription {
+            /* Parameter types of the invoked super constructor.*/
+            List<String> parameterTypes;
+            /* Type of the base/enclosing expression, if any.*/
+            String enclosingInstanceType;
+            /* The denotable name of the supertype.*/
+            String superTypeName;
+            /* The human-readable name of this class.*/
+            String declareTypeName;
+            /* If the supertype of this anonymous is a class. */
+            boolean isClass;
+            /* Variables captured by this anonymous class*/
+            List<VariableDesc> capturedVariables;
+
+            static class VariableDesc {
+                String type;
+                String name;
+
+                public VariableDesc(String type, String name) {
+                    this.type = type;
+                    this.name = name;
+                }
+
+            }
+        }
     }
 
     // return mechanism and other general structure from TreePath.getPath()
@@ -173,7 +239,7 @@
                 if (at.hasErrors() || cu == null) {
                     return null;
                 }
-                return new ExpressionToTypeInfo(at, cu, state).typeOfExpression();
+                return new ExpressionToTypeInfo(at, cu, state, false, false).typeOfExpression();
             });
         } catch (Exception ex) {
             return null;
@@ -187,7 +253,7 @@
      * @param state a JShell instance
      * @return type information
      */
-    public static ExpressionInfo localVariableTypeForInitializer(String code, JShell state) {
+    public static ExpressionInfo localVariableTypeForInitializer(String code, JShell state, boolean onlyAccessible) {
         if (code == null || code.isEmpty()) {
             return null;
         }
@@ -198,13 +264,37 @@
                 if (at.hasErrors() || cu == null) {
                     return null;
                 }
-                return new ExpressionToTypeInfo(at, cu, state).typeOfExpression();
+                return new ExpressionToTypeInfo(at, cu, state, true, onlyAccessible)
+                        .typeOfExpression();
             });
         } catch (Exception ex) {
             return null;
         }
     }
 
+    /**List (in a stable order) all NewClassTree instances under {@code from} that should be
+     * converted to member classes
+     *
+     * @param from tree to inspect
+     * @return NewClassTree instances that should be converted to member classes
+     */
+    public static List<NewClassTree> listAnonymousClassesToConvert(Tree from) {
+        ListBuffer<NewClassTree> classes = new ListBuffer<>();
+
+        new TreeScanner<Void, Void>() {
+            @Override
+            public Void visitNewClass(NewClassTree node, Void p) {
+                if (node.getClassBody() != null) {
+                    classes.append(node);
+                    return null;
+                }
+                return super.visitNewClass(node, p);
+            }
+        }.scan(from, null);
+
+        return classes.toList();
+    }
+
     private ExpressionInfo typeOfExpression() {
         return treeToInfo(findExpressionPath());
     }
@@ -256,23 +346,31 @@
      * @return the type, if it is accessible, otherwise a superclass or
      * interface which is
      */
-    private Type findAccessibleSupertype(Type type) {
+    private List<Type> findAccessibleSupertypes(Type type) {
+        List<Type> accessible = List.nil();
+        Type accessibleSuper = syms.objectType;
         // Iterate up the superclasses, see if any are accessible
         for (Type sup = type; !types.isSameType(sup, syms.objectType); sup = supertype(sup)) {
             if (isAccessible(sup)) {
-                return sup;
+                accessible = accessible.prepend(sup);
+                accessibleSuper = sup;
+                break;
             }
         }
-        // Failing superclasses, look through superclasses for accessible interfaces
-        for (Type sup = type; !types.isSameType(sup, syms.objectType); sup = supertype(sup)) {
+        // then look through superclasses for accessible interfaces
+        for (Type sup = type; !types.isSameType(sup, accessibleSuper); sup = supertype(sup)) {
             for (Type itf : types.interfaces(sup)) {
                 if (isAccessible(itf)) {
-                    return itf;
+                    accessible = accessible.prepend(itf);
                 }
             }
         }
-        // Punt, return Object which is the supertype of everything
-        return syms.objectType;
+        if (accessible.isEmpty()) {
+            // Punt, use Object which is the supertype of everything
+            accessible = accessible.prepend(syms.objectType);
+        }
+
+        return accessible.reverse();
     }
 
     private ExpressionInfo treeToInfo(TreePath tp) {
@@ -298,48 +396,125 @@
                             break;
                         default: {
                             ei.isNonVoid = true;
-                            ei.typeName = varTypeName(type, false);
-                            ei.accessibleTypeName = varTypeName(findAccessibleSupertype(type), false);
-                            ei.fullTypeName = varTypeName(type, true);
+                            ei.isPrimitiveType = type.isPrimitive();
+                            ei.typeName = varTypeName(type, false, AnonymousTypeKind.SUPER);
+                            List<Type> accessibleTypes = findAccessibleSupertypes(type);
+                            ei.accessibleTypeName =
+                                    varTypeName(accessibleTypes.head, false, AnonymousTypeKind.SUPER);
+                            if (computeEnhancedInfo) {
+                                Type accessibleType = accessibleTypes.size() == 1 ? accessibleTypes.head
+                                            : types.makeIntersectionType(accessibleTypes);
+                                ei.declareTypeName =
+                                        varTypeName(accessibleType, false, AnonymousTypeKind.DECLARE);
+                                ei.fullTypeName =
+                                        varTypeName(enhancedTypesAccessible ? accessibleType : type,
+                                                    true, AnonymousTypeKind.DECLARE);
+                                ei.displayTypeName =
+                                        varTypeName(type, true, AnonymousTypeKind.DISPLAY);
+                            }
                             break;
                         }
                     }
                 }
-                if (tree.getKind() == Tree.Kind.VARIABLE) {
+                if (tree.getKind() == Tree.Kind.VARIABLE && computeEnhancedInfo) {
                     Tree init = ((VariableTree) tree).getInitializer();
-                    if (init.getKind() == Tree.Kind.NEW_CLASS &&
-                        ((NewClassTree) init).getClassBody() != null) {
-                        NewClassTree nct = (NewClassTree) init;
-                        ClassTree clazz = nct.getClassBody();
-                        MethodTree constructor = (MethodTree) clazz.getMembers().get(0);
-                        ExpressionStatementTree superCallStatement =
-                                (ExpressionStatementTree) constructor.getBody().getStatements().get(0);
+                    for (NewClassTree node : listAnonymousClassesToConvert(init)) {
+                        Set<VariableElement> captured = capturedVariables(at,
+                                                                          tp.getCompilationUnit(),
+                                                                          node);
+                        JCClassDecl clazz = (JCClassDecl) node.getClassBody();
                         MethodInvocationTree superCall =
-                                (MethodInvocationTree) superCallStatement.getExpression();
-                        TreePath superCallPath =
-                                at.trees().getPath(tp.getCompilationUnit(), superCall.getMethodSelect());
+                                clazz.getMembers()
+                                     .stream()
+                                     .map(TreeInfo::firstConstructorCall)
+                                     .findAny()
+                                     .get();
+                        TreePath superCallPath
+                                = at.trees().
+                                        getPath(tp.getCompilationUnit(), superCall.
+                                                getMethodSelect());
                         Type constrType = pathToType(superCallPath);
-                        ei.parameterTypes = constrType.getParameterTypes()
-                                                      .stream()
-                                                      .map(t -> varTypeName(t, false))
-                                                      .collect(List.collector());
-                        if (nct.getEnclosingExpression() != null) {
-                            TreePath enclPath = new TreePath(tp, nct.getEnclosingExpression());
-                            ei.enclosingInstanceType = varTypeName(pathToType(enclPath), false);
+                        AnonymousDescription desc = new AnonymousDescription();
+                        desc.parameterTypes = constrType.getParameterTypes().
+                                stream().
+                                map(t -> varTypeName(t, false, AnonymousTypeKind.DECLARE)).
+                                collect(List.collector());
+                        if (node.getEnclosingExpression() != null) {
+                            TreePath enclPath = new TreePath(tp,
+                                                             node.getEnclosingExpression());
+                            desc.enclosingInstanceType = varTypeName(pathToType(enclPath),
+                                                                     false,
+                                                                     AnonymousTypeKind.DECLARE);
                         }
-                        ei.isClass = at.task.getTypes().directSupertypes(type).size() == 1;
+                        TreePath currentPath = at.trees()
+                                                 .getPath(tp.getCompilationUnit(),
+                                                          node);
+                        Type nodeType = pathToType(currentPath, node);
+                        desc.superTypeName = varTypeName(nodeType,
+                                                         false,
+                                                         AnonymousTypeKind.SUPER);
+                        desc.declareTypeName = varTypeName(nodeType,
+                                                           true, AnonymousTypeKind.DECLARE);
+                        desc.capturedVariables =
+                                captured.stream()
+                                        .map(ve -> new VariableDesc(varTypeName((Type) ve.asType(),
+                                                                                false,
+                                                                                AnonymousTypeKind.DECLARE),
+                                                                    ve.getSimpleName().toString()))
+                                        .collect(List.collector());
+
+                        desc.isClass = at.task.getTypes().directSupertypes(nodeType).size() == 1;
+                        ei.anonymousClasses = ei.anonymousClasses.prepend(desc);
                     }
+                    ei.anonymousClasses = ei.anonymousClasses.reverse();
                 }
                 return ei;
             }
         }
         return null;
     }
+    //where:
+        private static Set<VariableElement> capturedVariables(AnalyzeTask at,
+                                                              CompilationUnitTree topLevel,
+                                                              Tree tree) {
+            Set<VariableElement> capturedVars = new HashSet<>();
+            new TreeScanner<Void, Void>() {
+                Set<VariableElement> declaredLocalVars = new HashSet<>();
+                @Override
+                public Void visitVariable(VariableTree node, Void p) {
+                    TreePath currentPath = at.trees()
+                                             .getPath(topLevel, node);
+                    declaredLocalVars.add((VariableElement) at.trees().getElement(currentPath));
+                    return super.visitVariable(node, p);
+                }
 
-    private String varTypeName(Type type, boolean printIntersectionTypes) {
+                @Override
+                public Void visitIdentifier(IdentifierTree node, Void p) {
+                    TreePath currentPath = at.trees()
+                                             .getPath(topLevel, node);
+                    Element el = at.trees().getElement(currentPath);
+                    if (el != null &&
+                        LOCAL_VARIABLES.contains(el.getKind()) &&
+                        !declaredLocalVars.contains(el)) {
+                        capturedVars.add((VariableElement) el);
+                    }
+                    return super.visitIdentifier(node, p);
+                }
+            }.scan(tree, null);
+
+            return capturedVars;
+        }
+        private static final Set<ElementKind> LOCAL_VARIABLES =
+                EnumSet.of(ElementKind.EXCEPTION_PARAMETER, ElementKind.LOCAL_VARIABLE,
+                           ElementKind.PARAMETER, ElementKind.RESOURCE_VARIABLE);
+
+    private String varTypeName(Type type, boolean printIntersectionTypes, AnonymousTypeKind anonymousTypesKind) {
         try {
+            Function<TypeSymbol, String> anonymousClass2DeclareName =
+                    cs -> anon2Name.computeIfAbsent(cs, state.eval::computeDeclareName);
             TypePrinter tp = new TypePrinter(at.messages(),
-                    state.maps::fullClassNameAndPackageToClass, printIntersectionTypes);
+                    state.maps::fullClassNameAndPackageToClass, anonymousClass2DeclareName,
+                    printIntersectionTypes, anonymousTypesKind);
             List<Type> captures = types.captures(type);
             String res = tp.toString(types.upward(type, captures));
 
--- a/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,24 +61,33 @@
 import java.lang.Runtime.Version;
 import java.nio.CharBuffer;
 import java.util.function.BiFunction;
+import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.util.TaskEvent;
 import com.sun.source.util.TaskListener;
 import com.sun.tools.javac.api.JavacTaskPool;
 import com.sun.tools.javac.code.ClassFinder;
 import com.sun.tools.javac.code.Kinds;
+import com.sun.tools.javac.code.Symbol;
 import com.sun.tools.javac.code.Symbol.ClassSymbol;
 import com.sun.tools.javac.code.Symbol.PackageSymbol;
+import com.sun.tools.javac.code.Symbol.TypeSymbol;
 import com.sun.tools.javac.code.Symbol.VarSymbol;
 import com.sun.tools.javac.code.Symtab;
+import com.sun.tools.javac.code.Type;
 import com.sun.tools.javac.comp.Attr;
+import com.sun.tools.javac.comp.AttrContext;
+import com.sun.tools.javac.comp.Enter;
+import com.sun.tools.javac.comp.Env;
+import com.sun.tools.javac.comp.Resolve;
 import com.sun.tools.javac.parser.Parser;
 import com.sun.tools.javac.parser.ParserFactory;
-import com.sun.tools.javac.tree.JCTree.JCClassDecl;
 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
 import com.sun.tools.javac.tree.JCTree.JCExpression;
 import com.sun.tools.javac.tree.JCTree.JCTypeCast;
+import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
 import com.sun.tools.javac.tree.JCTree.Tag;
+import com.sun.tools.javac.util.Context.Factory;
 import com.sun.tools.javac.util.Log;
 import com.sun.tools.javac.util.Log.DiscardDiagnosticHandler;
 import com.sun.tools.javac.util.Names;
@@ -197,6 +206,7 @@
                                          compilationUnits, task -> {
                  JavacTaskImpl jti = (JavacTaskImpl) task;
                  Context context = jti.getContext();
+                 DisableAccessibilityResolve.preRegister(context);
                  jti.addTaskListener(new TaskListenerImpl(context, state));
                  try {
                      return worker.withTask(creator.apply(jti, diagnostics));
@@ -578,10 +588,25 @@
         }
     }
 
+    /**The variable types inferred for "var"s may be non-denotable.
+     * jshell desugars these variables into fields, and fields must have
+     * a denotable type. So these fields are declared with some simpler denotable
+     * type, and the listener here enhances the types of the fields to be the full
+     * inferred types. This is mainly when the inferred type contains:
+     * -intersection types (e.g. <Z extends Runnable&CharSequence> Z get() {...} var z = get();)
+     * -types that are inaccessible at the given place
+     *
+     * This type enhancement does not need to do anything about anonymous classes, as these
+     * are desugared into member classes.
+     */
     private static final class TaskListenerImpl implements TaskListener {
 
         private final Context context;
         private final JShell state;
+        /* Keep the original (declaration) types of the fields that were enhanced.
+         * The declaration types need to be put back before writing the fields
+         * into classfiles.*/
+        private final Map<VarSymbol, Type> var2OriginalType = new HashMap<>();
 
         public TaskListenerImpl(Context context, JShell state) {
             this.context = context;
@@ -589,43 +614,85 @@
         }
 
         @Override
+        public void started(TaskEvent e) {
+            if (e.getKind() != TaskEvent.Kind.GENERATE)
+                return ;
+            //clear enhanced types in fields we are about to write to the classfiles:
+            for (Tree clazz : e.getCompilationUnit().getTypeDecls()) {
+                ClassTree ct = (ClassTree) clazz;
+
+                for (Tree member : ct.getMembers()) {
+                    if (member.getKind() != Tree.Kind.VARIABLE)
+                        continue;
+                    VarSymbol vsym = ((JCVariableDecl) member).sym;
+                    Type original = var2OriginalType.remove(vsym);
+                    if (original != null) {
+                        vsym.type = original;
+                    }
+                }
+            }
+        }
+
+        private boolean variablesSet = false;
+
+        @Override
         public void finished(TaskEvent e) {
-            if (e.getKind() != TaskEvent.Kind.ENTER)
+            if (e.getKind() != TaskEvent.Kind.ENTER || variablesSet)
                 return ;
             state.maps
                  .snippetList()
                  .stream()
                  .filter(s -> s.status() == Status.VALID)
                  .filter(s -> s.kind() == Snippet.Kind.VAR)
-                 .filter(s -> s.subKind() == Snippet.SubKind.VAR_DECLARATION_WITH_INITIALIZER_SUBKIND)
-                 .forEach(s -> setVariableType((JCCompilationUnit) e.getCompilationUnit(), (VarSnippet) s));
+                 .filter(s -> s.subKind() == Snippet.SubKind.VAR_DECLARATION_WITH_INITIALIZER_SUBKIND ||
+                              s.subKind() == Snippet.SubKind.TEMP_VAR_EXPRESSION_SUBKIND)
+                 .forEach(s -> setVariableType((VarSnippet) s));
+            variablesSet = true;
         }
 
-        private void setVariableType(JCCompilationUnit root, VarSnippet s) {
+        /* If the snippet contain enhanced types, enhance the type of
+         * the variable from snippet s to be the enhanced type.
+         */
+        private void setVariableType(VarSnippet s) {
+            String typeName = s.fullTypeName;
+
+            if (typeName == null)
+                return ;
+
             Symtab syms = Symtab.instance(context);
             Names names = Names.instance(context);
             Log log  = Log.instance(context);
             ParserFactory parserFactory = ParserFactory.instance(context);
             Attr attr = Attr.instance(context);
+            Enter enter = Enter.instance(context);
+            DisableAccessibilityResolve rs = (DisableAccessibilityResolve) Resolve.instance(context);
 
+            //find the variable:
             ClassSymbol clazz = syms.getClass(syms.unnamedModule, names.fromString(s.classFullName()));
             if (clazz == null || !clazz.isCompleted())
                 return;
             VarSymbol field = (VarSymbol) clazz.members().findFirst(names.fromString(s.name()), sym -> sym.kind == Kinds.Kind.VAR);
-            if (field != null) {
+
+            if (field != null && !var2OriginalType.containsKey(field)) {
+                //if it was not enhanced yet:
+                //ignore any errors:
                 JavaFileObject prev = log.useSource(null);
                 DiscardDiagnosticHandler h = new DiscardDiagnosticHandler(log);
                 try {
-                    String typeName = s.typeName();
+                    //parse the type as a cast, i.e. "(<typeName>) x". This is to support
+                    //intersection types:
                     CharBuffer buf = CharBuffer.wrap(("(" + typeName +")x\u0000").toCharArray(), 0, typeName.length() + 3);
                     Parser parser = parserFactory.newParser(buf, false, false, false);
                     JCExpression expr = parser.parseExpression();
                     if (expr.hasTag(Tag.TYPECAST)) {
+                        //if parsed OK, attribute and set the type:
+                        var2OriginalType.put(field, field.type);
+
                         JCTypeCast tree = (JCTypeCast) expr;
-                        if (tree.clazz.hasTag(Tag.TYPEINTERSECTION)) {
+                        rs.runWithoutAccessChecks(() -> {
                             field.type = attr.attribType(tree.clazz,
-                                                         ((JCClassDecl) root.getTypeDecls().head).sym);
-                        }
+                                                         enter.getEnvs().iterator().next().enclClass.sym);
+                        });
                     }
                 } finally {
                     log.popDiagnosticHandler(h);
@@ -635,4 +702,48 @@
         }
     }
 
+    private static final class DisableAccessibilityResolve extends Resolve {
+
+        public static void preRegister(Context context) {
+            if (context.get(Marker.class) == null) {
+                context.put(resolveKey, ((Factory<Resolve>) c -> new DisableAccessibilityResolve(c)));
+                context.put(Marker.class, new Marker());
+            }
+        }
+
+        private boolean noAccessChecks;
+
+        public DisableAccessibilityResolve(Context context) {
+            super(context);
+        }
+
+        /**Run the given Runnable with all access checks disabled.
+         *
+         * @param r Runnnable to run
+         */
+        public void runWithoutAccessChecks(Runnable r) {
+            boolean prevNoAccessCheckes = noAccessChecks;
+            try {
+                noAccessChecks = true;
+                r.run();
+            } finally {
+                noAccessChecks = prevNoAccessCheckes;
+            }
+        }
+
+        @Override
+        public boolean isAccessible(Env<AttrContext> env, TypeSymbol c, boolean checkInner) {
+            if (noAccessChecks) return true;
+            return super.isAccessible(env, c, checkInner);
+        }
+
+        @Override
+        public boolean isAccessible(Env<AttrContext> env, Type site, Symbol sym, boolean checkInner) {
+            if (noAccessChecks) return true;
+            return super.isAccessible(env, site, sym, checkInner);
+        }
+
+        private static final class Marker {}
+    }
+
 }
--- a/src/jdk.jshell/share/classes/jdk/jshell/TreeDissector.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/TreeDissector.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,6 +48,7 @@
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 import javax.lang.model.type.TypeMirror;
+import jdk.jshell.TypePrinter.AnonymousTypeKind;
 import jdk.jshell.Util.Pair;
 
 /**
@@ -227,7 +228,7 @@
         Type typeImpl = (Type) type;
         try {
             TypePrinter tp = new TypePrinter(at.messages(),
-                    state.maps::fullClassNameAndPackageToClass, true);
+                    state.maps::fullClassNameAndPackageToClass, true, AnonymousTypeKind.DISPLAY);
             return tp.toString(typeImpl);
         } catch (Exception ex) {
             return null;
--- a/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,14 +30,17 @@
 import com.sun.tools.javac.code.Symbol;
 import com.sun.tools.javac.code.Symbol.ClassSymbol;
 import com.sun.tools.javac.code.Symbol.PackageSymbol;
+import com.sun.tools.javac.code.Symbol.TypeSymbol;
 import com.sun.tools.javac.code.Type;
 import com.sun.tools.javac.code.Type.ClassType;
 import com.sun.tools.javac.code.Type.IntersectionClassType;
 import com.sun.tools.javac.util.JavacMessages;
 import java.util.Locale;
 import java.util.function.BinaryOperator;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
+
 /**
  * Print types in source form.
  */
@@ -47,14 +50,44 @@
 
     private final JavacMessages messages;
     private final BinaryOperator<String> fullClassNameAndPackageToClass;
-    private final boolean printEnhancedTypes;
+    private final Function<TypeSymbol, String> anonymousToName;
+    private final boolean printIntersectionTypes;
+    private final AnonymousTypeKind anonymousTypesKind;
 
+    /**Create a TypePrinter.
+     *
+     * @param messages javac's messages
+     * @param fullClassNameAndPackageToClass convertor to convert full class names to
+     *                                       simple class names.
+     * @param printIntersectionTypes whether intersection types should be printed
+     * @param anonymousTypesKind how the anonymous types should be printed
+     */
     TypePrinter(JavacMessages messages,
                 BinaryOperator<String> fullClassNameAndPackageToClass,
-                boolean printEnhancedTypes) {
+                boolean printIntersectionTypes, AnonymousTypeKind anonymousTypesKind) {
+        this(messages, fullClassNameAndPackageToClass, cs -> cs.flatName().toString(),
+             printIntersectionTypes, anonymousTypesKind);
+    }
+
+    /**Create a TypePrinter.
+     *
+     * @param messages javac's messages
+     * @param fullClassNameAndPackageToClass convertor to convert full class names to
+     *                                       simple class names.
+     * @param anonymousToName convertor from anonymous classes to name that should be printed
+     *                        if anonymousTypesKind == AnonymousTypeKind.DECLARE
+     * @param printIntersectionTypes whether intersection types should be printed
+     * @param anonymousTypesKind how the anonymous types should be printed
+     */
+    TypePrinter(JavacMessages messages,
+                BinaryOperator<String> fullClassNameAndPackageToClass,
+                Function<TypeSymbol, String> anonymousToName,
+                boolean printIntersectionTypes, AnonymousTypeKind anonymousTypesKind) {
         this.messages = messages;
         this.fullClassNameAndPackageToClass = fullClassNameAndPackageToClass;
-        this.printEnhancedTypes = printEnhancedTypes;
+        this.anonymousToName = anonymousToName;
+        this.printIntersectionTypes = printIntersectionTypes;
+        this.anonymousTypesKind = anonymousTypesKind;
     }
 
     String toString(Type t) {
@@ -96,9 +129,9 @@
      */
     @Override
     protected String className(ClassType t, boolean longform, Locale locale) {
-        Symbol sym = t.tsym;
+        TypeSymbol sym = t.tsym;
         if (sym.name.length() == 0 && (sym.flags() & COMPOUND) != 0) {
-            if (printEnhancedTypes) {
+            if (printIntersectionTypes) {
                 return ((IntersectionClassType) t).getExplicitComponents()
                                                   .stream()
                                                   .map(i -> visit(i, locale))
@@ -107,18 +140,26 @@
                 return OBJECT;
             }
         } else if (sym.name.length() == 0) {
-            if (printEnhancedTypes) {
-                return t.tsym.flatName().toString().substring(t.tsym.outermostClass().flatName().length());
+            if (anonymousTypesKind == AnonymousTypeKind.DECLARE) {
+                return anonymousToName.apply(sym);
             }
             // Anonymous
             String s;
+            boolean isClass;
             ClassType norm = (ClassType) t.tsym.type;
             if (norm == null) {
                 s = OBJECT;
+                isClass = true;
             } else if (norm.interfaces_field != null && norm.interfaces_field.nonEmpty()) {
                 s = visit(norm.interfaces_field.head, locale);
+                isClass = false;
             } else {
                 s = visit(norm.supertype_field, locale);
+                isClass = true;
+            }
+            if (anonymousTypesKind == AnonymousTypeKind.DISPLAY) {
+                s = isClass ? "<anonymous class extending " + s + ">"
+                            : "<anonymous class implementing " + s + ">";
             }
             return s;
         } else if (longform) {
@@ -152,4 +193,14 @@
                 : s.fullname.toString();
     }
 
+    /** Specifies how the anonymous classes should be handled. */
+    public enum AnonymousTypeKind {
+        /* The anonymous class is printed as the name of its supertype. */
+        SUPER,
+        /* The anonymous class is printed as converted by the anonymousToName
+         * convertor. */
+        DECLARE,
+        /* The anonymous class is printed in a human readable form. */
+        DISPLAY;
+    }
 }
--- a/src/jdk.jshell/share/classes/jdk/jshell/Util.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Util.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,11 @@
     static final String DOIT_METHOD_NAME = "do_it$";
 
     /**
+     * The prefix for all anonymous classes upgraded to member classes.
+     */
+    static final String JSHELL_ANONYMOUS = "$JShell$anonymous$";
+
+    /**
      * A pattern matching the full or simple class name of a wrapper class.
      */
     static final Pattern PREFIX_PATTERN = Pattern.compile(
--- a/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,8 @@
 package jdk.jshell;
 
 import java.util.Collection;
+import java.util.Set;
+import java.util.stream.Collectors;
 import jdk.jshell.Key.VarKey;
 
 /**
@@ -41,15 +43,30 @@
  */
 public class VarSnippet extends DeclarationSnippet {
 
+    /**A human readable type of the variable. May include intersection types
+     * and human readable description of anonymous classes.
+     */
     final String typeName;
 
+    /**The full type inferred for "var" variables. May include intersection types
+     * and inaccessible types. {@literal null} if enhancing the type is not necessary.
+     */
+    final String fullTypeName;
+
+    /**The anonymous class declared in the initializer of the "var" variable.
+     * These are automatically statically imported when the field is imported.
+     */
+    final Set<String> anonymousClasses;
+
      VarSnippet(VarKey key, String userSource, Wrap guts,
-            String name, SubKind subkind, String typeName,
-            Collection<String> declareReferences,
+            String name, SubKind subkind, String typeName, String fullTypeName,
+            Set<String> anonymousClasses, Collection<String> declareReferences,
             DiagList syntheticDiags) {
         super(key, userSource, guts, name, subkind, null, declareReferences,
                 null, syntheticDiags);
         this.typeName = typeName;
+        this.fullTypeName = fullTypeName;
+        this.anonymousClasses = anonymousClasses;
     }
 
     /**
@@ -59,4 +76,13 @@
     public String typeName() {
         return typeName;
     }
+
+    @Override
+    String importLine(JShell state) {
+        return "import static " + classFullName() + "." + name() + ";\n" +
+               anonymousClasses.stream()
+                               .map(c -> "import static " + classFullName() + "." + c + ";\n")
+                               .collect(Collectors.joining());
+    }
+
 }
--- a/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,9 @@
 
 package jdk.jshell;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import static java.util.stream.Collectors.joining;
 import static jdk.jshell.Util.DOIT_METHOD_NAME;
 
@@ -66,37 +68,76 @@
         return "\n" + indent(n);
     }
 
-    /**
+    /**Create a stub of a compilable representation of a variable snippet.
+     * The variable is always represented by a field. If the variable
+     * in the snippet has an initializer, the field is initialized by
+     * calling the DOIT_METHOD_NAME method.
      *
-     * @param in
-     * @param rname
-     * @param rinit Initializer or null
-     * @param rdecl Type name and name
-     * @return
+     * In some cases, the real inferred type of the variable may be non-denotable
+     * (e.g. intersection types). The declared type of the field must always
+     * be denotable (i.e. such that it can be written into the classfile), but
+     * if the real type is potentially non-denotable, the {@code enhanced} parameter
+     * must be true.
+     *
+     * @param source the snippet's masked source code
+     * @param wtype variable's denotable type suitable for field declaration
+     * @param brackets any [] that should be appended to the type
+     * @param rname range in source that denotes the name of the
+     * @param winit Initializer or null
+     * @param enhanced if the real inferred type of the variable is potentially
+     *                 non-denotable, this must be true
+     * @return a Wrap that declares the given variable, potentially with
+     *         an initialization method
      */
     public static Wrap varWrap(String source, Wrap wtype, String brackets,
-                               Range rname, Wrap winit, Wrap anonDeclareWrap) {
+                               Range rname, Wrap winit, boolean enhanced,
+                               Wrap anonDeclareWrap) {
         RangeWrap wname = new RangeWrap(source, rname);
-        Wrap wVarDecl = new VarDeclareWrap(wtype, brackets, wname);
+        List<Object> components = new ArrayList<>();
+        components.add(new VarDeclareWrap(wtype, brackets, wname));
         Wrap wmeth;
 
         if (winit == null) {
             wmeth = new CompoundWrap(new NoWrap(" "), "   return null;\n");
         } else {
-        // int x = y
-            // int x_ = y; return x = x_;
-            // decl + "_ = " + init ; + "return " + name + "=" + name + "_ ;"
-            wmeth = new CompoundWrap(
-                    wtype, brackets + " ", wname, "_ =\n        ", winit, semi(winit),
-                    "        return ", wname, " = ", wname, "_;\n"
-            );
+            // int x = y
+            if (enhanced) {
+                // private static <Z> Z do_itAux() {
+                //     wtype x_ = y;
+                //     @SuppressWarnings("unchecked")
+                //     Z x__ = (Z) x_;
+                //     return x__;
+                // }
+                // in do_it method:
+                //return do_itAux();
+                Wrap waux = new CompoundWrap(
+                        "    private static <Z> Z ", DOIT_METHOD_NAME + "Aux", "() throws Throwable {\n",
+                        wtype, brackets + " ", wname, "_ =\n        ", winit, semi(winit),
+                        "        @SuppressWarnings(\"unchecked\") Z ", wname, "__ = (Z)", wname, "_;\n",
+                        "        return ", wname, "__;\n",
+                        "}"
+                );
+                components.add(waux);
+                wmeth = new CompoundWrap(
+                        "        return ", wname, " = ", DOIT_METHOD_NAME + "Aux", "();\n"
+                );
+            } else {
+                // int x_ = y; return x = x_;
+                // decl + "_ = " + init ; + "return " + name + "= " + name + "_ ;"
+                wmeth = new CompoundWrap(
+                        wtype, brackets + " ", wname, "_ =\n        ", winit, semi(winit),
+                        "        return ", wname, " = ", wname, "_;\n"
+                );
+            }
         }
-        Wrap wInitMeth = new DoitMethodWrap(wmeth);
-        return anonDeclareWrap != null ? new CompoundWrap(wVarDecl, wInitMeth, anonDeclareWrap)
-                                       : new CompoundWrap(wVarDecl, wInitMeth);
+        components.add(new DoitMethodWrap(wmeth));
+        if (anonDeclareWrap != null) {
+            components.add(anonDeclareWrap);
+        }
+        return new CompoundWrap(components.toArray());
     }
 
-    public static Wrap tempVarWrap(String source, String typename, String name) {
+    public static Wrap tempVarWrap(String source, String typename, String name, Wrap anonDeclareWrap) {
         RangeWrap winit = new NoWrap(source);
         // y
         // return $1 = y;
@@ -105,7 +146,8 @@
         Wrap wInitMeth = new DoitMethodWrap(wmeth);
 
         String varDecl = "    public static\n    " + typename + " " + name + ";\n";
-        return new CompoundWrap(varDecl, wInitMeth);
+        return anonDeclareWrap != null ? new CompoundWrap(varDecl, wInitMeth, anonDeclareWrap)
+                                       : new CompoundWrap(varDecl, wInitMeth);
     }
 
     public static Wrap simpleWrap(String source) {
--- a/src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,8 @@
     private static boolean startRegistry = true;
 
     private static void printUsage() {
-        System.err.println("usage: jstatd [-nr] [-p port] [-n rminame]");
+        System.err.println("usage: jstatd [-nr] [-p port] [-n rminame]\n" +
+                           "       jstatd -?|-h|--help");
     }
 
     static void bind(String name, RemoteHostImpl remoteHost)
@@ -78,7 +79,12 @@
         for ( ; (argc < args.length) && (args[argc].startsWith("-")); argc++) {
             String arg = args[argc];
 
-            if (arg.compareTo("-nr") == 0) {
+            if (arg.compareTo("-?") == 0 ||
+                arg.compareTo("-h") == 0 ||
+                arg.compareTo("--help") == 0) {
+                printUsage();
+                System.exit(0);
+            } else if (arg.compareTo("-nr") == 0) {
                 startRegistry = false;
             } else if (arg.startsWith("-p")) {
                 if (arg.compareTo("-p") != 0) {
--- a/src/jdk.pack/share/native/unpack200/main.cpp	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.pack/share/native/unpack200/main.cpp	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,7 +153,7 @@
     "  -q, --quiet                   set verbosity to lowest level\n" \
     "  -l{F}, --log-file={F}         output to the given log file,\n" \
     "                                or '-' for standard output (default)\n" \
-    "  -?, -h, --help                print this message\n" \
+    "  -?, -h, --help                print this help message\n" \
     "  -V, --version                 print program version\n" \
     "\n" \
     "Exit Status:\n" \
@@ -313,7 +313,7 @@
     case 'h':
     case '?':
       usage(&u, argv[0], true);
-      exit(1);
+      exit(0);
 
     default:
       const char* inenv = isenvarg? " in ${UNPACK200_FLAGS}": "";
--- a/src/jdk.rmic/share/classes/sun/tools/java/RuntimeConstants.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.rmic/share/classes/sun/tools/java/RuntimeConstants.java	Fri Feb 02 01:52:03 2018 +0000
@@ -67,7 +67,7 @@
     /* Class File Constants */
     int JAVA_MAGIC                   = 0xcafebabe;
     int JAVA_MIN_SUPPORTED_VERSION   = 45;
-    int JAVA_MAX_SUPPORTED_VERSION   = 54;
+    int JAVA_MAX_SUPPORTED_VERSION   = 55;
     int JAVA_MAX_SUPPORTED_MINOR_VERSION = 0;
 
     /* Generate class file version for 1.1  by default */
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IRTranslator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IRTranslator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -473,9 +473,9 @@
     @Override
     public boolean enterClassNode(final ClassNode classNode) {
         assert !classNode.isStatement(): "should not reach here for class declaration";
-
+        final IdentNode className = classNode.getIdent();
         curExpr = new ClassExpressionTreeImpl(classNode,
-            translateIdent(classNode.getIdent()),
+            className != null? translateIdent(className) : null,
             translateExpr(classNode.getClassHeritage()),
             translateProperty(classNode.getConstructor()),
             translateProperties(classNode.getClassElements()));
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1083,7 +1083,7 @@
 
         // Simply invoke super.finalize()
         mv.visitVarInsn(ALOAD, 0);
-        mv.checkcast(Type.getType(generatedClassName));
+        mv.checkcast(Type.getType('L' + generatedClassName + ';'));
         mv.invokespecial(superClassName, "finalize", VOID_METHOD_DESCRIPTOR, false);
 
         mv.visitInsn(RETURN);
--- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -66,9 +66,9 @@
 ## At least short_name or name needs to be in place for an argument descriptor to be valid.
 
 nashorn.option.help = {                       \
-    name="-help",                             \
+    name="--help",                            \
     short_name="-h",                          \
-    desc="Print help for command line flags." \
+    desc="Print this help message."           \
 }
 
 nashorn.option.xhelp = {                               \
--- a/src/jdk.unsupported/share/classes/sun/reflect/Reflection.java	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2001, 2017, 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 sun.reflect;
-
-public class Reflection {
-
-    private Reflection() { }
-
-    /**
-     * @deprecated This method is an internal API and will be removed.
-     * Use {@link StackWalker} to walk the stack and obtain the caller class
-     * with {@link StackWalker.StackFrame#getDeclaringClass} instead.
-     */
-    @Deprecated(forRemoval=true)
-    @SuppressWarnings("removal") // Reflection.getCallerClass
-    public static Class<?> getCallerClass(int depth) {
-        if (depth < 0)
-            throw new InternalError("depth must be positive");
-
-        // increase depth to account for delegation to the internal impl
-        return jdk.internal.reflect.Reflection.getCallerClass(depth + 1);
-    }
-}
--- a/src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -109,7 +109,9 @@
      */
     private Function<byte[],byte[]> createVersionedLinks(int version) {
         HashMap<IndexNode,byte[]> aliasMap = new HashMap<>();
-        getVersionMap(version, getInode(getBytes("/META-INF/versions"))).values()
+        IndexNode verdir = getInode(getBytes("/META-INF/versions"));
+        if (verdir != null) {
+            getVersionMap(version, verdir).values()
                 .forEach(versionNode -> {   // for each META-INF/versions/{n} directory
                     // put all the leaf inodes, i.e. entries, into the alias map
                     // possibly shadowing lower versioned entries
@@ -124,6 +126,7 @@
                         }
                     });
                 });
+        }
         return path -> aliasMap.get(IndexNode.keyOf(path));
     }
 
--- a/src/utils/LogCompilation/src/main/java/com/sun/hotspot/tools/compiler/CallSite.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/utils/LogCompilation/src/main/java/com/sun/hotspot/tools/compiler/CallSite.java	Fri Feb 02 01:52:03 2018 +0000
@@ -105,6 +105,11 @@
     private List<UncommonTrap> traps;
 
     /**
+     * The name of the intrinsic at this call site.
+     */
+    private String intrinsicName;
+
+    /**
      * Default constructor: used to create an instance that represents the top
      * scope of a compilation.
      */
@@ -179,6 +184,7 @@
         } else {
             stream.print("  @ " + getBci() + " " + m + " " + getReason());
         }
+        stream.print(getIntrinsicOrEmptyString());
         stream.printf(" (end time: %6.4f", getTimeStamp());
         if (getEndNodes() > 0) {
             stream.printf(" nodes: %d live: %d", getEndNodes(), getEndLiveNodes());
@@ -368,4 +374,19 @@
     public void setInlineId(long inlineId) {
         this.inlineId = inlineId;
     }
+
+    public String getIntrinsicName() {
+        return intrinsicName;
+    }
+
+    public void setIntrinsicName(String name) {
+        this.intrinsicName = name;
+    }
+
+    public String getIntrinsicOrEmptyString() {
+        if (intrinsicName != null) {
+            return " (intrinsic: " + getIntrinsicName() + ")";
+        }
+        return "";
+    }
 }
--- a/src/utils/LogCompilation/src/main/java/com/sun/hotspot/tools/compiler/LogParser.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/src/utils/LogCompilation/src/main/java/com/sun/hotspot/tools/compiler/LogParser.java	Fri Feb 02 01:52:03 2018 +0000
@@ -975,6 +975,12 @@
                 // track of it but don't add it to the list yet.
                 methodHandleSite = site;
             }
+        } else if (qname.equals("intrinsic")) {
+            String id = atts.getValue("id");
+            assert id != null : "intrinsic id is null";
+            CallSite cs = (site != null) ? site : scopes.peek();
+            assert cs != null : "no CallSite?";
+            cs.setIntrinsicName(id);
         } else if (qname.equals("regalloc")) {
             compile.setAttempts(Integer.parseInt(search(atts, "attempts")));
         } else if (qname.equals("inline_fail")) {
--- a/test/TestCommon.gmk	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/TestCommon.gmk	Fri Feb 02 01:52:03 2018 +0000
@@ -332,9 +332,47 @@
   TEST_SELECTION = $(TESTDIRS)
 endif
 
-ifdef CONCURRENCY
-  JTREG_BASIC_OPTIONS += -concurrency:$(CONCURRENCY)
+ifeq ($(UNAME_S), SunOS)
+  NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line)
+endif
+ifeq ($(UNAME_S), Linux)
+  NUM_CORES := $(shell cat /proc/cpuinfo  | grep -c processor)
+endif
+ifeq ($(UNAME_S), Darwin)
+  NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
+endif
+ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN)
+  ifneq ($(NUMBER_OF_PROCESSORS), )
+    NUM_CORES := $(NUMBER_OF_PROCESSORS)
+  else
+    ifneq ($(HOTSPOT_BUILD_JOBS), )
+      NUM_CORES := $(HOTSPOT_BUILD_JOBS)
+    else
+      NUM_CORES := 1 # fallback
+    endif
+  endif
 endif
+
+ifndef CONCURRENCY_FACTOR
+  CONCURRENCY_FACTOR = 1
+endif
+
+# Concurrency based on min(cores / 2, 12) * CONCURRENCY_FACTOR
+CONCURRENCY := $(shell $(AWK) \
+  'BEGIN { \
+    c = $(NUM_CORES) / 2; \
+    if (c > 12) c = 12; \
+    c = c * $(CONCURRENCY_FACTOR); \
+    if (c < 1) c = 1; \
+    printf "%.0f", c; \
+  }')
+JTREG_BASIC_OPTIONS += -concurrency:$(CONCURRENCY)
+
+# Make sure MaxRAMPercentage is low enough to not cause OOM or swapping since
+# we may end up with a lot of JVM's
+MAX_RAM_PERCENTAGE := $(shell expr 25 / $(CONCURRENCY))
+JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMPercentage=$(MAX_RAM_PERCENTAGE)
+
 ifdef EXTRA_JTREG_OPTIONS
   JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS)
 endif
--- a/test/hotspot/jtreg/Makefile	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/Makefile	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -38,45 +38,6 @@
 
 IGNORE_MARKED_TESTS := true
 
-# Get OS name from uname (Cygwin inexplicably adds _NT-5.1)
-UNAME_S := $(shell uname -s | cut -f1 -d_)
-
-ifeq ($(UNAME_S), SunOS)
-  NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line)
-endif
-ifeq ($(UNAME_S), Linux)
-  NUM_CORES := $(shell cat /proc/cpuinfo  | grep -c processor)
-endif
-ifeq ($(UNAME_S), Darwin)
-  NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
-endif
-ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN)
-  ifneq ($(NUMBER_OF_PROCESSORS), )
-    NUM_CORES := $(NUMBER_OF_PROCESSORS)
-  else
-    ifneq ($(HOTSPOT_BUILD_JOBS), )
-      NUM_CORES := $(HOTSPOT_BUILD_JOBS)
-    else
-      NUM_CORES := 1 # fallback
-    endif
-  endif
-endif
-
-ifndef CONCURRENCY_FACTOR
-  CONCURRENCY_FACTOR = 1
-endif
-
-# Concurrency based on min(cores / 2, 12)
-CONCURRENCY := $(shell awk 'BEGIN { printf "%.0f", $(NUM_CORES) / 2 * $(CONCURRENCY_FACTOR) }')
-ifeq ($(CONCURRENCY), 0)
-  CONCURRENCY := 1
-else ifeq ($(shell expr $(CONCURRENCY) \> 12), 1)
-  CONCURRENCY := 12
-endif
-
-# Make sure MaxRAMPercentage is high enough to not cause OOM or swapping since we may end up with a lot of JVM's
-JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMPercentage=$(shell expr 25 / $(CONCURRENCY))
-
 # Include the common base file with most of the logic
 include ../../TestCommon.gmk
 
--- a/test/hotspot/jtreg/ProblemList.txt	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/ProblemList.txt	Fri Feb 02 01:52:03 2018 +0000
@@ -71,6 +71,7 @@
 gc/stress/gclocker/TestGCLockerWithParallel.java 8180622 generic-all
 gc/stress/gclocker/TestGCLockerWithG1.java 8179226 generic-all
 gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterMinorGC.java 8177765 generic-all
+gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java 8192647 generic-all
 
 #############################################################################
 
--- a/test/hotspot/jtreg/TEST.ROOT	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/TEST.ROOT	Fri Feb 02 01:52:03 2018 +0000
@@ -58,7 +58,7 @@
     docker.support
 
 # Minimum jtreg version
-requiredVersion=4.2 b08
+requiredVersion=4.2 b11
 
 # Path to libraries in the topmost test directory. This is needed so @library
 # does not need ../../../ notation to reach them
--- a/test/hotspot/jtreg/compiler/jvmci/compilerToVM/GetImplementorTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/compiler/jvmci/compilerToVM/GetImplementorTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -103,6 +103,14 @@
         HotSpotResolvedObjectType resolvedIface = CompilerToVMHelper
                 .lookupTypeHelper(Utils.toJVMTypeSignature(tcase.anInterface),
                         getClass(), /* resolve = */ true);
+        if (!resolvedIface.isInterface()) {
+            try {
+                CompilerToVMHelper.getImplementor(resolvedIface);
+                Asserts.fail("Expected " + IllegalArgumentException.class.getName());
+            } catch (IllegalArgumentException e) {
+            }
+            return;
+        }
         HotSpotResolvedObjectType resolvedImplementer = CompilerToVMHelper
                 .getImplementor(resolvedIface);
         HotSpotResolvedObjectType resolvedExpected = null;
--- a/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -473,6 +473,20 @@
         metaAccess.lookupJavaType(ConcreteTransitiveImplementor1.class);
         metaAccess.lookupJavaType(ConcreteTransitiveImplementor2.class);
         assertEquals(aSai2, iSai2.getSingleImplementor());
+
+        for (Class<?> c : classes) {
+            ResolvedJavaType type = metaAccess.lookupJavaType(c);
+            try {
+                type.getSingleImplementor();
+                if (!c.isInterface()) {
+                    throw new AssertionError("Expected exception for calling getSingleImplmentor on " + c.getName());
+                }
+            } catch (JVMCIError e) {
+                if (c.isInterface()) {
+                    throw new AssertionError("Unexpected exception", e);
+                }
+            }
+        }
     }
 
     @Test(expected = JVMCIError.class)
@@ -830,6 +844,10 @@
         assertNull(metaAccess.lookupJavaType(C.class).getClassInitializer());
         assertNull(metaAccess.lookupJavaType(int.class).getClassInitializer());
         assertNull(metaAccess.lookupJavaType(void.class).getClassInitializer());
+        for (Class<?> c : classes) {
+            ResolvedJavaType type = metaAccess.lookupJavaType(c);
+            type.getClassInitializer();
+        }
     }
 
     @Test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/g1/TestConcurrentSystemGC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test TestConcurrentSystemGC
+ * @bug 8195158
+ * @summary Test that a System.gc() with -XX:+ExplicitGCInvokesConcurrent
+ *          is *not* upgraded to STW full GC
+ * @key gc
+ * @requires vm.gc.G1
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ * @run main/othervm -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -Xmx8m -Xms8m -XX:G1HeapRegionSize=1m TestConcurrentSystemGC
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestConcurrentSystemGC {
+    public static List<char[]> memory;
+    public static void main(String[] args) throws Exception {
+        memory = new ArrayList<>();
+        try {
+            while (true) {
+                memory.add(new char[1024 * 128]);
+                System.gc(); // should not trigger any assertions
+            }
+        } catch (OutOfMemoryError e) {
+            memory = null;
+            System.gc();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, SAP SE 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test TestJNIBlockFullGC
+ * @summary Check that in G1 a Full GC to reclaim space can not be blocked out by the GC locker.
+ * @key gc
+ * @requires vm.gc.G1
+ * @run main/othervm/native -Xmx64m -XX:+UseG1GC -Xlog:gc=info,gc+alloc=trace -XX:MaxGCPauseMillis=10 TestJNIBlockFullGC 10 10000 10000 10000 30000 10000 0.7
+ */
+
+import java.lang.ref.SoftReference;
+
+public class TestJNIBlockFullGC {
+
+    static {
+        System.loadLibrary("TestJNIBlockFullGC");
+    }
+
+    public static volatile Object tmp;
+
+    public static volatile boolean hadError = false;
+
+    private static native int TestCriticalArray0(int[] x);
+
+    public static class Node {
+        public SoftReference<Node> next;
+        long payload1;
+        long payload2;
+        long payload3;
+        long payload4;
+
+        public Node(int load) {
+            payload1 = payload2 = payload3 = payload4 = load;
+        }
+    }
+
+    public static void warmUp(long warmupEndTime, int size) {
+        // First let the GC assume most of our objects will die.
+        Node[] roots = new Node[size];
+
+        while (System.currentTimeMillis() < warmupEndTime) {
+            int index = (int) (Math.random() * roots.length);
+            roots[index] = new Node(1);
+        }
+
+        // Make sure the young generation is empty.
+        for (int i = 0; i < roots.length; ++i) {
+            roots[i] = null;
+        }
+    }
+
+    public static void runTest(long endTime, int size, double alive) {
+        final int length = 10000;
+        int[] array1 = new int[length];
+        for (int x = 1; x < length; x++) {
+            array1[x] = x;
+        }
+
+        Node[] roots = new Node[size];
+        try {
+            int index = 0;
+            roots[0] = new Node(0);
+
+            while (!hadError && (System.currentTimeMillis() < endTime)) {
+                int test_val1 = TestCriticalArray0(array1);
+
+                if (Math.random() > alive) {
+                    tmp = new Node(test_val1);
+                } else {
+                    index = (int) (Math.random() * roots.length);
+
+                    if (roots[index] != null) {
+                        Node node = new Node(test_val1);
+                        node.next = new SoftReference<Node>(roots[index]);
+                        roots[index] = node;
+                    } else {
+                        roots[index] = new Node(test_val1);
+                    }
+                }
+            }
+        } catch (OutOfMemoryError e) {
+            hadError = true;
+            e.printStackTrace();
+        }
+    }
+
+    private static void joinThreads(Thread[] threads) throws Exception {
+        for (int i = 0; i < threads.length; i++) {
+            try {
+                if (threads[i] != null) {
+                  threads[i].join();
+                }
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+                throw e;
+            }
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        if (args.length < 7){
+            System.out.println("Usage: java TestJNIBlockFullGC <warmupThreads> <warmup-time-in-millis> <warmup iterations> <threads> <time-in-millis> <iterations> <aliveFrac>");
+            System.exit(0);
+        }
+
+        int warmupThreads = Integer.parseInt(args[0]);
+        System.out.println("# Warmup Threads = " + warmupThreads);
+
+        int warmupDuration = Integer.parseInt(args[1]);
+        System.out.println("WarmUp Duration = " + warmupDuration);
+        int warmupIterations = Integer.parseInt(args[2]);
+        System.out.println("# Warmup Iterations = "+ warmupIterations);
+
+        int mainThreads = Integer.parseInt(args[3]);
+        System.out.println("# Main Threads = " + mainThreads);
+        int mainDuration = Integer.parseInt(args[4]);
+        System.out.println("Main Duration = " + mainDuration);
+        int mainIterations = Integer.parseInt(args[5]);
+        System.out.println("# Main Iterations = " + mainIterations);
+
+        double liveFrac = Double.parseDouble(args[6]);
+        System.out.println("Live Fraction = " + liveFrac);
+
+        Thread threads[] = new Thread[Math.max(warmupThreads, mainThreads)];
+
+        System.out.println("Start warm-up threads!");
+        long warmupStartTime = System.currentTimeMillis();
+        for (int i = 0; i < warmupThreads; i++) {
+            threads[i] = new Thread() {
+                public void run() {
+                    warmUp(warmupStartTime + warmupDuration, warmupIterations);
+                };
+            };
+            threads[i].start();
+        }
+
+        joinThreads(threads);
+
+        System.gc();
+        System.out.println("Keep alive a lot");
+
+        long startTime = System.currentTimeMillis();
+        for (int i = 0; i < mainThreads; i++) {
+            threads[i] = new Thread() {
+                public void run() {
+                    runTest(startTime + mainDuration, mainIterations, liveFrac);
+                };
+            };
+            threads[i].start();
+        }
+        System.out.println("All threads started");
+
+        joinThreads(threads);
+
+        if (hadError) {
+            throw new RuntimeException("Experienced an OoME during execution.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/libTestJNIBlockFullGC.c	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, SAP SE 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include "jni.h"
+
+JNIEXPORT jint JNICALL
+Java_TestJNIBlockFullGC_TestCriticalArray0(JNIEnv *env, jclass jCls, jintArray jIn) {
+  jint *bufIn = NULL;
+  jint jInLen = (*env)->GetArrayLength(env, jIn);
+  jint result = 0;
+  jint i;
+
+  if (jInLen != 0) {
+    bufIn = (jint*)(*env)->GetPrimitiveArrayCritical(env, jIn, 0);
+  }
+
+  for (i = 0; i < jInLen; ++i) {
+    result += bufIn[i]; // result = sum of all array elements
+  }
+
+  if (bufIn != NULL) {
+    (*env)->ReleasePrimitiveArrayCritical(env, jIn, bufIn, 0);
+  }
+
+  return result;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/stress/TestReclaimStringsLeaksMemory.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test TestReclaimStringsLeaksMemory
+ * @bug 8180048
+ * @summary Ensure that during a Full GC interned string memory is reclaimed completely.
+ * @requires vm.gc=="null"
+ * @requires !vm.debug
+ * @key gc
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @run main/othervm TestReclaimStringsLeaksMemory
+ * @run main/othervm TestReclaimStringsLeaksMemory -XX:+UseSerialGC
+ * @run main/othervm TestReclaimStringsLeaksMemory -XX:+UseParallelGC
+ * @run main/othervm TestReclaimStringsLeaksMemory -XX:+UseParallelGC -XX:-UseParallelOldGC
+ * @run main/othervm TestReclaimStringsLeaksMemory -XX:+UseConcMarkSweepGC
+ * @run main/othervm TestReclaimStringsLeaksMemory -XX:+UseG1GC
+ */
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+import jdk.test.lib.Asserts;
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+
+public class TestReclaimStringsLeaksMemory {
+
+    // The amount of memory in kB reserved in the "Symbol" category that indicates a memory leak for
+    // this test.
+    public static final int ReservedThreshold = 70000;
+
+    public static void main(String[] args) throws Exception {
+        ArrayList<String> baseargs = new ArrayList(Arrays.asList( "-Xms256M",
+                                                                  "-Xmx256M",
+                                                                  "-Xlog:gc*",
+                                                                  "-XX:NativeMemoryTracking=summary",
+                                                                  "-XX:+UnlockDiagnosticVMOptions",
+                                                                  "-XX:+PrintNMTStatistics" ));
+        baseargs.addAll(Arrays.asList(args));
+        baseargs.add(GCTest.class.getName());
+        ProcessBuilder pb_default =
+            ProcessTools.createJavaProcessBuilder(baseargs.toArray(new String[] {}));
+        verifySymbolMemoryUsageNotTooHigh(new OutputAnalyzer(pb_default.start()));
+    }
+
+    private static void verifySymbolMemoryUsageNotTooHigh(OutputAnalyzer output) throws Exception {
+        String stdout = output.getStdout();
+        System.out.println(stdout);
+
+        Pattern p = Pattern.compile("Symbol \\(reserved=(\\d*)");
+        Matcher m = p.matcher(stdout);
+
+        if (!m.find()) {
+            throw new RuntimeException("Could not find Symbol memory usage in NMT output");
+        }
+
+        int reserved = Integer.parseInt(m.group(1));
+        Asserts.assertLT(reserved, ReservedThreshold, "Reserved memory size is " + reserved + "KB which is greater than or equal to " + ReservedThreshold + "KB indicating a memory leak");
+
+        output.shouldHaveExitValue(0);
+    }
+
+    static class GCTest {
+        public static final String BaseName = "SomeRandomBaseString";
+        public static volatile String lastString;
+
+        public static void main(String [] args) {
+            for (int iterations = 0; iterations < 20;) {
+                for (int i = 0; i < 1000000; i++) {
+                    lastString = (BaseName + i).intern();
+                }
+                if (++iterations % 5 == 0) {
+                   System.gc();
+                }
+            }
+        }
+    }
+}
+
--- a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -47,10 +47,6 @@
         {"InitialRAMFraction",        "64"},
         {"AssumeMP",                  "false"},
         {"UseMembar",                 "true"},
-        {"FastTLABRefill",            "false"},
-        {"DeferPollingPageLoopCount", "-1"},
-        {"SafepointSpinBeforeYield",  "2000"},
-        {"DeferThrSuspendLoopCount",  "4000"},
 
         // deprecated alias flags (see also aliased_jvm_flags):
         {"DefaultMaxRAMFraction", "4"},
@@ -110,6 +106,5 @@
         testDeprecated(DEPRECATED_OPTIONS);  // Make sure that each deprecated option is mentioned in the output.
         testDeprecatedDiagnostic("UnsyncloadClass", "false");
         testDeprecatedDiagnostic("IgnoreUnverifiableClassesDuringDump", "false");
-        testDeprecatedExperimental("UseCGroupMemoryLimitForHeap", "true");
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/ErrorHandling/BadNativeStackInErrorHandlingTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.regex.Pattern;
+
+import jdk.test.lib.Platform;
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+
+/*
+ * @test
+ * @bug 8194652
+ * @summary Printing native stack shows an "error occurred during error reporting".
+ * @modules java.base/jdk.internal.misc
+ * @library /test/lib
+ */
+
+// This test was adapted from SafeFetchInErrorHandlingTest.java.
+public class BadNativeStackInErrorHandlingTest {
+  public static void main(String[] args) throws Exception {
+    if (!Platform.isDebugBuild() || Platform.isZero()) {
+      return;
+    }
+
+    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+        "-XX:+UnlockDiagnosticVMOptions",
+        "-Xmx100M",
+        "-XX:ErrorHandlerTest=14",
+        "-XX:-CreateCoredumpOnCrash",
+        "-version");
+
+    OutputAnalyzer output_detail = new OutputAnalyzer(pb.start());
+
+    // we should have crashed with a SIGSEGV
+    output_detail.shouldMatch("# A fatal error has been detected by the Java Runtime Environment:.*");
+    output_detail.shouldMatch("# +(?:SIGSEGV|EXCEPTION_ACCESS_VIOLATION).*");
+
+    // extract hs-err file
+    String hs_err_file = output_detail.firstMatch("# *(\\S*hs_err_pid\\d+\\.log)", 1);
+    if (hs_err_file == null) {
+        throw new RuntimeException("Did not find hs-err file in output.\n");
+    }
+
+    File f = new File(hs_err_file);
+    if (!f.exists()) {
+        throw new RuntimeException("hs-err file missing at " +
+                                   f.getAbsolutePath() + ".\n");
+    }
+
+    System.out.println("Found hs_err file. Scanning...");
+
+    FileInputStream fis = new FileInputStream(f);
+    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
+    String line = null;
+
+    // The failing line looks like this:
+    // [error occurred during error reporting (printing native stack), id 0xb]
+    Pattern pattern =
+        Pattern.compile("\\[error occurred during error reporting \\(printing native stack\\), id .*\\]");
+
+    String lastLine = null;
+    while ((line = br.readLine()) != null) {
+        if (pattern.matcher(line).matches()) {
+            System.out.println("Found: " + line + ".");
+            throw new RuntimeException("hs-err file should not contain: '" +
+                                       pattern + "'");
+        }
+        lastLine = line;
+    }
+    br.close();
+
+    if (!lastLine.equals("END.")) {
+        throw new RuntimeException("hs-err file incomplete (missing END marker.)");
+    } else {
+        System.out.println("End marker found.");
+    }
+
+    System.out.println("OK.");
+  }
+}
--- a/test/hotspot/jtreg/runtime/NMT/PrintNMTStatistics.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/NMT/PrintNMTStatistics.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,7 +46,6 @@
     OutputAnalyzer output_detail = new OutputAnalyzer(pb.start());
     output_detail.shouldContain("Virtual memory map:");
     output_detail.shouldContain("Details:");
-    output_detail.shouldNotContain("error");
     output_detail.shouldHaveExitValue(0);
 
     // Make sure memory reserved for Module processing is recorded.
@@ -62,7 +61,6 @@
     output_summary.shouldContain("Java Heap (reserved=");
     output_summary.shouldNotContain("Virtual memory map:");
     output_summary.shouldNotContain("Details:");
-    output_summary.shouldNotContain("error");
     output_summary.shouldHaveExitValue(0);
     }
 }
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/ArchiveDoesNotExist.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/ArchiveDoesNotExist.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  *          attempting to use CDS archive. JVM should exit gracefully
  *          when sharing mode is ON, and continue w/o sharing if sharing
  *          mode is AUTO.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
  * @test
  * @requires vm.cds & !vm.graal.enabled
  * @summary Testing -Xbootclasspath/a support for CDS
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsDifferentCompactStrings.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsDifferentCompactStrings.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @requires vm.cds
  * @summary CDS (class data sharing) requires the same -XX:[+-]CompactStrings
  *          setting between archive creation time and load time.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsDifferentObjectAlignment.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsDifferentObjectAlignment.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,7 @@
  *          This is a negative test; using  object alignment for loading that
  *          is different from object alignment for creating a CDS file
  *          should fail when loading.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @bug 8025642
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsSameObjectAlignment.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsSameObjectAlignment.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @requires vm.cds
  * @summary Testing CDS (class data sharing) using varying object alignment.
  *          Using same object alignment for each dump/load pair
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/DefaultUseWithClient.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/DefaultUseWithClient.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 /*
  * @test DefaultUseWithClient
  * @summary Test default behavior of sharing with -client
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/DumpSharedDictionary.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/DumpSharedDictionary.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  * Feature support: compressed oops/kptrs, 64-bit os, not on windows
  * @requires vm.cds
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  * @run main DumpSharedDictionary
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/NonBootLoaderClasses.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/NonBootLoaderClasses.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 /*
  * @test NonBootLoaderClasses
  * @summary Test to ensure platform and app classes are not being archived
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/PrintSharedArchiveAndExit.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/PrintSharedArchiveAndExit.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @requires vm.cds
  * @bug 8066670
  * @summary Testing -XX:+PrintSharedArchiveAndExit option
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SASymbolTableTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SASymbolTableTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
  * @test SASymbolTableTest
  * @requires vm.cds
  * @summary Walk symbol table using SA, with and without CDS.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.hotspot.agent/sun.jvm.hotspot.oops
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedArchiveFile.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedArchiveFile.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @requires vm.cds
  * @bug 8014138
  * @summary Testing new -XX:SharedArchiveFile=<file-name> option
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedBaseAddress.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedBaseAddress.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @requires vm.cds
  * @summary Test variety of values for SharedBaseAddress, making sure
  *          VM handles normal values as well as edge values w/o a crash.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStrings.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStrings.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  *          are actually shared
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsDedup.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsDedup.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Test -Xshare:auto with shared strings and -XX:+UseStringDeduplication
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsRunAuto.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsRunAuto.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Test -Xshare:auto with shared strings.
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedSymbolTableBucketSize.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedSymbolTableBucketSize.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @requires vm.cds
  * @bug 8059510
  * @summary Test SharedSymbolTableBucketSize option
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/SpaceUtilizationCheck.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/SpaceUtilizationCheck.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
  * @test SpaceUtilizationCheck
  * @requires vm.cds
  * @summary Check if the space utilization for shared spaces is adequate
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/TestInterpreterMethodEntries.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/TestInterpreterMethodEntries.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @bug 8169711
  * @summary Test interpreter method entries for intrinsics with CDS (class data sharing)
  *          and different settings of the intrinsic flag during dump/use of the archive.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformInterfaceAndImplementor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformInterfaceAndImplementor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Exercise initial transformation (ClassFileLoadHook)
  *  with CDS with Interface/Implementor pair
  * @library /test/lib /runtime/SharedArchiveFile /testlibrary/jvmti
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperAndSubClasses.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperAndSubClasses.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  * @summary Exercise initial transformation (ClassFileLoadHook)
  *  with CDS with SubClass and SuperClass
  * @library /test/lib /runtime/SharedArchiveFile /testlibrary/jvmti
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperSubTwoPckgs.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperSubTwoPckgs.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  * @summary Exercise initial transformation (ClassFileLoadHook)
  *  with CDS with SubClass and SuperClass, each lives in own separate package
  * @library /test/lib /runtime/SharedArchiveFile /testlibrary/jvmti
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/AppendClasspath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/AppendClasspath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary At run time, it is OK to append new elements to the classpath that was used at dump time.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/BootClassPathMismatch.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/BootClassPathMismatch.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary bootclasspath mismatch test.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/CaseSensitiveClassPath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/CaseSensitiveClassPath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @test
  * @summary Test case sensitive aspect of comparing class paths
  *     between dump time and archive use time
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/ClassLoaderTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ClassLoaderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Initiating and defining classloader test.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/ClassPathAttr.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ClassPathAttr.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Class-Path: attribute in MANIFEST file
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/CommandLineFlagCombo.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/CommandLineFlagCombo.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,8 +24,8 @@
 
 /*
  * @test CommandLineFlagCombo
- * AppCDS does not support uncompressed oops
- * @requires (vm.gc=="null") & ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true))
+ * @requires vm.cds
+ * @requires (vm.gc=="null")
  * @summary Test command line flag combinations that
  *          could likely affect the behaviour of AppCDS
  * @library /test/lib
--- a/test/hotspot/jtreg/runtime/appcds/CommandLineFlagComboNegative.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/CommandLineFlagComboNegative.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,7 @@
  *          the dump and execute steps, in such way that they cause errors
  *          E.g. use compressed oops for creating and archive, but then
  *               execute w/o compressed oops
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/DirClasspathTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/DirClasspathTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary AppCDS handling of directories in -cp
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @run main DirClasspathTest
  */
@@ -34,8 +33,13 @@
 import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
 
 public class DirClasspathTest {
+    private static final int MAX_PATH = 260;
+
     public static void main(String[] args) throws Exception {
         File dir = new File(System.getProperty("user.dir"));
         File emptydir = new File(dir, "emptydir");
@@ -43,15 +47,36 @@
 
         // Empty dir in -cp: should be OK
         OutputAnalyzer output;
-        if (!Platform.isWindows()) {
-            // This block fails on Windows because of JDK-8192927
-            output = TestCommon.dump(emptydir.getPath(), TestCommon.list("DoesntMatter"), "-Xlog:class+path=info");
-            TestCommon.checkDump(output);
+        String classList[] = {"java/lang/Object"};
+        output = TestCommon.dump(emptydir.getPath(), classList, "-Xlog:class+path=info");
+        TestCommon.checkDump(output);
+
+        // Long path to empty dir in -cp: should be OK
+        Path classDir = Paths.get(System.getProperty("test.classes"));
+        Path destDir = classDir;
+        int subDirLen = MAX_PATH - classDir.toString().length() - 2;
+        if (subDirLen > 0) {
+            char[] chars = new char[subDirLen];
+            Arrays.fill(chars, 'x');
+            String subPath = new String(chars);
+            destDir = Paths.get(System.getProperty("test.classes"), subPath);
         }
+        File longDir = destDir.toFile();
+        longDir.mkdir();
+        File subDir = new File(longDir, "subdir");
+        subDir.mkdir();
+        output = TestCommon.dump(subDir.getPath(), classList, "-Xlog:class+path=info");
+        TestCommon.checkDump(output);
 
         // Non-empty dir in -cp: should fail
         // <dir> is not empty because it has at least one subdirectory, i.e., <emptydir>
-        output = TestCommon.dump(dir.getPath(), TestCommon.list("DoesntMatter"), "-Xlog:class+path=info");
+        output = TestCommon.dump(dir.getPath(), classList, "-Xlog:class+path=info");
+        output.shouldNotHaveExitValue(0);
+        output.shouldContain("CDS allows only empty directories in archived classpaths");
+
+        // Long path to non-empty dir in -cp: should fail
+        // <dir> is not empty because it has at least one subdirectory, i.e., <emptydir>
+        output = TestCommon.dump(longDir.getPath(), classList, "-Xlog:class+path=info");
         output.shouldNotHaveExitValue(0);
         output.shouldContain("CDS allows only empty directories in archived classpaths");
     }
--- a/test/hotspot/jtreg/runtime/appcds/DumpClassList.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/DumpClassList.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @test
  * @summary DumpLoadedClassList should exclude generated classes, classes in bootclasspath/a and
  *          --patch-module.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Adding extra symbols into CDS archive using -XX:SharedArchiveConfigFile
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/FieldAnnotationsTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/FieldAnnotationsTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Test for field annotations.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/FreeUnusedMetadata.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/FreeUnusedMetadata.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Unused metadata created during dump time should be freed from the CDS archive.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules jdk.jartool/sun.tools.jar
  * @compile test-classes/MethodNoReturn.jasm test-classes/Hello.java
--- a/test/hotspot/jtreg/runtime/appcds/HelloExtTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/HelloExtTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary a simple test for loading a class using the ext class loader in AppCDS
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/HelloTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/HelloTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Hello World test for AppCDS
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
@@ -36,7 +35,6 @@
  */
 
 public class HelloTest {
-
   public static void main(String[] args) throws Exception {
       TestCommon.test(JarBuilder.getOrCreateHelloJar(),
           TestCommon.list("Hello"), "Hello");
--- a/test/hotspot/jtreg/runtime/appcds/IgnoreEmptyClassPaths.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/IgnoreEmptyClassPaths.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Test the -XX:+IgnoreEmptyClassPaths flag
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/JvmtiAddPath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/JvmtiAddPath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary JvmtiEnv::AddToBootstrapClassLoaderSearch and JvmtiEnv::AddToSystemClassLoaderSearch should disable AppCDS
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @bug 8060592
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/MismatchedUseAppCDS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/MismatchedUseAppCDS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Try different combination of mismatched UseAppCDS between dump time and run time.
- * (Note: AppCDS does not support uncompressed oops.)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/MissingSuperTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/MissingSuperTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,8 @@
 /*
  * @test
  * @summary When super class is missing during dumping, no crash should happen.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ *
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/MultiProcessSharing.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/MultiProcessSharing.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,8 @@
 /*
  * @test
  * @summary Run multiple processes with the same archive, ensure they share
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ *
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/MultiReleaseJars.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/MultiReleaseJars.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test MultiReleaseJars
  * @bug 8170105
  * @summary Test multi-release jar with AppCDS.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/OldClassTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/OldClassTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary classes with major version < JDK_1.5 (48) should not be included in CDS
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.org.objectweb.asm
  *          java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/PackageSealing.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/PackageSealing.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary AppCDS handling of package.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/ParallelLoad2.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ParallelLoad2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Load app classes from CDS archive in parallel threads. Similar to ParallelLoad.java, but each class in its own JAR
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/ParallelLoadTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ParallelLoadTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,9 +25,8 @@
 /*
  * @test
  * @summary Load app classes from CDS archive in parallel threads
- * AppCDS does not support uncompressed oops
  * @library /test/lib
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @modules java.base/jdk.internal.misc
  *          java.management
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/PrintSharedArchiveAndExit.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/PrintSharedArchiveAndExit.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary test the -XX:+PrintSharedArchiveAndExit flag
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/ProhibitedPackage.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ProhibitedPackage.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary AppCDS handling of prohibited package.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary AppCDS handling of protection domain.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/RewriteBytecodesTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/RewriteBytecodesTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Use ClassLoader.defineClass() to load a class with rewritten bytecode. Make sure
  *          the archived class with the same name is not loaded.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,20 +23,19 @@
  */
 
 /*
- *  @test
- *  @summary SharedArchiveConsistency
- *   AppCDS does not support uncompressed oops
- *  @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
- *  @library /test/lib
- *  @modules java.base/jdk.internal.misc
- *           java.compiler
- *           java.management
- *           jdk.jartool/sun.tools.jar
- *           jdk.internal.jvmstat/sun.jvmstat.monitor
- *  @build sun.hotspot.WhiteBox
- *  @compile test-classes/Hello.java
- *  @run main ClassFileInstaller sun.hotspot.WhiteBox
- *  @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI SharedArchiveConsistency
+ * @test
+ * @summary SharedArchiveConsistency
+ * @requires vm.cds
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.compiler
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ *          jdk.internal.jvmstat/sun.jvmstat.monitor
+ * @build sun.hotspot.WhiteBox
+ * @compile test-classes/Hello.java
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI SharedArchiveConsistency
  */
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.Utils;
--- a/test/hotspot/jtreg/runtime/appcds/SharedArchiveFile.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/SharedArchiveFile.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,8 +24,7 @@
 /*
  * @test
  * @summary The diagnostic option, -XX:SharedArchiveFile can be unlocked using -XX:+UseAppCDS
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/SharedBaseAddress.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/SharedBaseAddress.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,8 +27,7 @@
  * @summary Test variety of values for SharedBaseAddress, in AppCDS mode,
  *          making sure VM handles normal values as well as edge values
  *          w/o a crash.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/SharedPackages.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/SharedPackages.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary AppCDS handling of package.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/SignedJar.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/SignedJar.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary AppCDS handling of signed JAR.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/SpecifySysLoaderProp.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/SpecifySysLoaderProp.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,17 +23,16 @@
  */
 
 /*
- *  @test
- *  @summary If -Djava.system.class.loader=xxx is specified in command-line, disable UseAppCDS
- *  AppCDS does not support uncompressed oops
- *  @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
- *  @library /test/lib
- *  @modules java.base/jdk.internal.misc
+ * @test
+ * @summary If -Djava.system.class.loader=xxx is specified in command-line, disable UseAppCDS
+ * @requires vm.cds
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
  *      jdk.jartool/sun.tools.jar
- *  @compile test-classes/TestClassLoader.java
- *  @compile test-classes/ReportMyLoader.java
- *  @compile test-classes/TrySwitchMyLoader.java
- *  @run main SpecifySysLoaderProp
+ * @compile test-classes/TestClassLoader.java
+ * @compile test-classes/ReportMyLoader.java
+ * @compile test-classes/TrySwitchMyLoader.java
+ * @run main SpecifySysLoaderProp
  */
 
 import java.io.*;
--- a/test/hotspot/jtreg/runtime/appcds/TraceLongClasspath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/TraceLongClasspath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary ensure -XX:+TraceClassPaths showing entire expecting app classpath
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/UseAppCDS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/UseAppCDS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Testing use of UseAppCDS flag
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/VerifierTest_0.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_0.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Unverfiable app classes should not be archived.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  * @modules jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/VerifierTest_1A.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_1A.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Unverfiable app classes should not be archived.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  * @modules jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/VerifierTest_1B.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_1B.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Unverfiable app classes should not be archived.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  * @modules jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/VerifierTest_2.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Unverfiable app classes should not be archived.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  * @modules jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/WideIloadTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/WideIloadTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /**
  * @test
  * @summary Test 'iload_w' bytecode in shared class
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/WrongClasspath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/WrongClasspath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary classpath mismatch between dump time and execution time
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/XShareAutoWithChangedJar.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/XShareAutoWithChangedJar.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Test -Xshare:auto for AppCDS
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferences.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferences.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Test resolved_references
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @test
  * @summary Dump time should not crash if any class with shared strings fails verification due to missing dependencies.
  * @bug 8186789
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/OpenArchiveRegion.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/OpenArchiveRegion.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Test open archive heap regions
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/RangeNotWithinHeap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/RangeNotWithinHeap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  *          mapped due to out of range, and -Xshare:on should not fail. Test on
  *          linux 64-bit only since the HeapBaseMinAddress value is platform specific.
  *          The value used in the test may cause different behavior on other platforms.
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires (os.family == "linux") & (os.arch == "amd64") & (sun.arch.data.model == "64")
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @test
  * @summary Redefine shared class. GC should not cause crash with cached resolved_references.
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes /test/hotspot/jtreg/runtime/appcds/jvmti
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @requires vm.flavor != "minimal"
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatA.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatA.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Tests the format checking of class list format.
  *
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatB.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatB.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
  *
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatC.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
  *
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatD.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatD.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
  *
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatE.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatE.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
  *
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/HelloCustom.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/HelloCustom.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Hello World test for AppCDS custom loader support
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/LoaderSegregationTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/LoaderSegregationTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Check that during dumping, the classes for BOOT/EXT/APP loaders are segregated from the
  *          custom loader classes.
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestMultiFP.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestMultiFP.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Load classes from CDS archive into multiple custom loader using parallel threads
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestSingleFP.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestSingleFP.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Load classes from CDS archive into a single custom loader using parallel threads (finger print)
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ProhibitedPackageNamesTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ProhibitedPackageNamesTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Make sure prohibited packages cannot be stored into archive for custom loaders.
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/ProtectionDomain.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ProtectionDomain.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary AppCDS handling of protection domain in custom loaders.
  *
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  *
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/SameNameInTwoLoadersTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/SameNameInTwoLoadersTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Testing the loading of a class with the same name in two different class loaders.
  *
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  *
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/UnintendedLoadersTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/UnintendedLoadersTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Make sure classes intended for custom loaders cannot be loaded by BOOT/EXT/APP loaders
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/UnloadUnregisteredLoaderTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/UnloadUnregisteredLoaderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Test the behavior when shared classes loaded by custom loaders are
  *          unloaded.
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.cds.custom.loaders
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/testlibrary
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/customLoader/UnsupportedPlatforms.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/UnsupportedPlatforms.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,6 @@
 /*
  * @test
  * @summary Ensure that support for AppCDS custom class loaders are not enabled on unsupported platforms.
- * (NOTE: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
  * @requires vm.cds
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary test the ability to archive array classes and load them from the archive
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules jdk.jartool/sun.tools.jar
  * @compile ArrayTestHelper.java
--- a/test/hotspot/jtreg/runtime/appcds/javaldr/CheckAnonymousClass.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/CheckAnonymousClass.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary ensure no anonymous class is being dumped into the CDS archive
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules jdk.jartool/sun.tools.jar
  * @compile ../test-classes/Hello.java
--- a/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDump.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDump.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @test
  * @summary When dumping the CDS archive, try to cause garbage collection while classes are being loaded.
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDump.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDump.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  *          option for testing the interaction with GC and shared strings.
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @requires vm.gc.G1
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/CheckUnsupportedDumpingOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/CheckUnsupportedDumpingOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Abort dumping if any of the new jigsaw vm options is specified.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib ..
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/JigsawOptionsCombo.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/JigsawOptionsCombo.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Test combinations of jigsaw options that affect the use of AppCDS
  *
- * AppCDS does not support uncompressed oops
- * @requires ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)) & !vm.graal.enabled
+ * @requires vm.cds & !vm.graal.enabled
  * @library /test/lib ..
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/AppClassInCP.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/AppClassInCP.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary a test to demonstrate that an application class in the -cp
  *          will be archived although --patch-module is specified. The class in
  *          the -cp has no dependencies on the class in the --patch-module.
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/CustomPackage.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/CustomPackage.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary if a class is defined to a package which is not defined to any
  *          module in the jimage, the class will not be found during dump
  *          time but it will be used during run time.
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/MismatchedPatchModule.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/MismatchedPatchModule.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary different settings of --patch-module at dump time and runtime are
  *          acceptable. The class found in runtime --patch-module entry should
  *          be used.
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchDir.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchDir.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary a simple test to ensure that a directory in the --patch-module
  *          option does not affect dump process
  * @library ../..
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchJavaBase.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchJavaBase.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary sharing is disabled if java.base is patch at runtime
  * @library ../..
  * @library /test/hotspot/jtreg/testlibrary
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/Simple.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/Simple.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary a simple test to ensure that class is loaded from jar file in --patch-module at runtime
  * @library ../..
  * @library /test/hotspot/jtreg/testlibrary
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/SubClassOfPatchedClass.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/SubClassOfPatchedClass.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary the class in the -cp is a subclass of the class in --patch-module. The
  *          patched class should be used at runtime.
  * @library ../..
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/TwoJars.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/TwoJars.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /*
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @summary a patched class found in --patch-module should be used at runtime
  * @library ../..
  * @library /test/hotspot/jtreg/testlibrary
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/BootAppendTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/BootAppendTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /**
  * @test
  * @summary AppCDS tests for testing -Xbootclasspath/a
- * @requires ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)) & !vm.graal.enabled
+ * @requires vm.cds & !vm.graal.enabled
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/ClassPathTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/ClassPathTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /**
  * @test
- * @requires ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)) & !vm.graal.enabled
+ * @requires vm.cds & !vm.graal.enabled
  * @library ../..
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,8 +25,7 @@
 /*
  * @test
  * @summary Ensure that classes found in jimage takes precedence over classes found in -Xbootclasspath/a.
- * AppCDS does not support uncompressed oops
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.activation
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,7 @@
  *     2) app loader will load the class from the jimage by default;
  *        app loader will load the class from the bootclasspath if the
  *        "--limit-modules java.base" option is specified
- * @requires ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)) & !vm.graal.enabled
+ * @requires vm.cds & !vm.graal.enabled
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/limitmods/LimitModsTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/limitmods/LimitModsTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /**
  * @test
- * @requires ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)) & !vm.graal.enabled
+ * @requires vm.cds & !vm.graal.enabled
  * @library ../..
  * @library /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/OverrideTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/OverrideTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 
 /**
  * @test
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @modules java.base/jdk.internal.misc
  * @library ../..
  * @library /test/lib
--- a/test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHookTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHookTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @test
  * @summary Test jvmti class file loader hook interaction with AppCDS
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
  *          java.management
--- a/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Exercise the java.lang.instrument.Instrumentation APIs on classes archived
  *          using CDS/AppCDSv1/AppCDSv2.
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelLoadAndTransformTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelLoadAndTransformTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,7 @@
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  *     /test/hotspot/jtreg/runtime/appcds/test-classes /test/hotspot/jtreg/runtime/appcds/jvmti
  *     /test/hotspot/jtreg/testlibrary/jvmti
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @modules java.base/jdk.internal.misc
  *          java.management
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformInterfaceImplementorAppCDS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformInterfaceImplementorAppCDS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -32,7 +32,7 @@
  *     /test/hotspot/jtreg/runtime/SharedArchiveFile /test/hotspot/jtreg/testlibrary/jvmti
  *     /test/hotspot/jtreg/runtime/appcds/customLoader
  *     /test/hotspot/jtreg/runtime/appcds/customLoader/test-classes
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformSuperSubAppCDS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformSuperSubAppCDS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -32,7 +32,7 @@
  *     /test/hotspot/jtreg/runtime/SharedArchiveFile /test/hotspot/jtreg/testlibrary/jvmti
  *     /test/hotspot/jtreg/runtime/appcds/customLoader
  *     /test/hotspot/jtreg/runtime/appcds/customLoader/test-classes
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.flavor != "minimal"
  * @modules java.base/jdk.internal.misc
  *          jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasicTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasicTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Run /runtime/RedefineTests/RedefineRunningMethods in AppCDS mode to
  *          make sure class redefinition works with CDS.
- *          (Note: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib /test/hotspot/jtreg/runtime/RedefineTests /test/hotspot/jtreg/runtime/appcds
  * @modules java.compiler
  *          java.instrument
--- a/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_Shared.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_Shared.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,8 +26,7 @@
  * @test
  * @summary Run /runtime/RedefineTests/RedefineRunningMethods in AppCDS mode to
  *          make sure class redefinition works with CDS.
- *          (Note: AppCDS does not support uncompressed oops)
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @library /test/lib /test/hotspot/jtreg/runtime/RedefineTests /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
  * @modules java.compiler
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/ExerciseGC.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/ExerciseGC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Exercise GC with shared strings
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
  * @library /test/hotspot/jtreg/runtime/appcds /test/lib
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/FlagCombo.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/FlagCombo.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,7 @@
 /*
  * @test
  * @summary Test relevant combinations of command line flags with shared strings
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  *          Also test mismatch in oops encoding between dump time and run time
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/InternSharedString.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/InternSharedString.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Test shared strings together with string intern operation
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/hotspot/jtreg/runtime/appcds /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/InvalidFileFormat.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/InvalidFileFormat.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Check most common errors in file format
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/LargePages.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/LargePages.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Basic shared string test with large pages
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockSharedStrings.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockSharedStrings.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Test locking on shared strings
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/hotspot/jtreg/runtime/appcds /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Basic test for shared strings
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/hotspot/jtreg/runtime/appcds /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasicPlus.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasicPlus.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Basic plus test for shared strings
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/hotspot/jtreg/runtime/appcds /test/lib
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsStress.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsStress.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Write a lots of shared strings.
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/hotspot/jtreg/runtime/appcds /test/lib
  * @modules jdk.jartool/sun.tools.jar
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWbTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWbTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary White box test for shared strings
  * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
  * @requires (sun.arch.data.model != "32") & (os.family != "windows")
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/SysDictCrash.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SysDictCrash.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,7 @@
  * @test
  * @summary Regression test for JDK-8098821
  * @bug 8098821
- * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.cds
  * @requires vm.gc.G1
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
  * @modules java.base/jdk.internal.misc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/classFileParserBug/Class55.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8173382
+ * @summary Check that the JVM accepts class files with version 55
+ * @run main Class55
+ */
+
+super public class Class55 version 55:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 0 locals 1 {
+        return;
+    }
+
+} // end Class Class55
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/AbstractClone.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that invokeinterface of clone() works properly where clone() is
+ *          an abstract method in a superinterface and also overridden locally.
+ * @run main AbstractClone
+ */
+
+public class AbstractClone {
+
+    interface I1 {
+        Object clone();
+    }
+
+    interface I2 extends I1 { }
+
+    static class C implements I2 {
+        public Object clone() {
+            return "In C's clone()";
+        }
+    }
+
+    static Object test(I2 i) { return i.clone(); }
+
+    public static void main(String[] args) {
+        String s = (String)test(new C());
+        if (!s.equals("In C's clone()")) {
+            throw new RuntimeException("Wrong clone() called");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/AbstractNoClones.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that invokeinterface of clone() works properly where clone() is
+ *          an abstract method in a superinterface and not overridden locally.
+ * @compile AbstractNoClones.jasm
+ * @run main AbstractNoClones
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class AbstractNoClones {
+//
+//     interface I1 {
+//         Object clone();
+//     }
+//
+//     interface I2 extends I1 { }
+//
+//     static class C implements I2 { }
+//
+//     static Object test(I2 i) { return i.clone(); }
+//
+//     public static void main(String[] args) {
+//         try {
+//             String s = (String)test(new C());
+//             throw new RuntimeException("Expected IAE not thrown");
+//         } catch (java.lang.IllegalAccessError e) {
+//             if (!e.toString().contains("C.clone")) {
+//                 throw new RuntimeException("Wrong IllegalAccessError exception thrown");
+//             }
+//         }
+//     }
+// }
+
+
+interface  AbstractNoClones$I1 version 53:0 {
+
+    public abstract Method clone:"()Ljava/lang/Object;";
+
+    static abstract interface InnerClass I1=class AbstractNoClones$I1 of class AbstractNoClones;
+
+} // end Class AbstractNoClones$I1
+
+
+interface  AbstractNoClones$I2 implements AbstractNoClones$I1 version 53:0 {
+
+    static abstract interface InnerClass I2=class AbstractNoClones$I2 of class AbstractNoClones;
+    static abstract interface InnerClass I1=class AbstractNoClones$I1 of class AbstractNoClones;
+
+} // end Class AbstractNoClones$I2
+
+
+super class AbstractNoClones$C implements AbstractNoClones$I2 version 53:0 {
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static InnerClass C=class AbstractNoClones$C of class AbstractNoClones;
+    static abstract interface InnerClass I2=class AbstractNoClones$I2 of class AbstractNoClones;
+
+} // end Class AbstractNoClones$C
+
+
+super public class AbstractNoClones version 53:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LAbstractNoClones$I2;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokeinterface    InterfaceMethod AbstractNoClones$I2.clone:"()Ljava/lang/Object;",  1;
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        try t0;
+        new    class AbstractNoClones$C;
+        dup;
+        invokespecial    Method AbstractNoClones$C."<init>":"()V";
+        invokestatic    Method test:"(LAbstractNoClones$I2;)Ljava/lang/Object;";
+        checkcast    class java/lang/String;
+        astore_1;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Expected IAE not thrown";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+        endtry t0;
+        catch t0 java/lang/IllegalAccessError;
+        stack_frame_type stack1;
+        stack_map class java/lang/IllegalAccessError;
+        astore_1;
+        aload_1;
+        invokevirtual    Method java/lang/IllegalAccessError.toString:"()Ljava/lang/String;";
+        ldc    String "C.clone";
+        invokevirtual    Method java/lang/String.contains:"(Ljava/lang/CharSequence;)Z";
+        ifne    L47;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong IllegalAccessError exception thrown";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L47:    stack_frame_type same;
+        return;
+    }
+
+    static InnerClass C=class AbstractNoClones$C of class AbstractNoClones;
+    static abstract interface InnerClass I2=class AbstractNoClones$I2 of class AbstractNoClones;
+    static abstract interface InnerClass I1=class AbstractNoClones$I1 of class AbstractNoClones;
+
+} // end Class AbstractNoClones
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/DefaultClone.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that a default method named clone() does not get masked by
+ *          java.lang.Object.clone() during resolution.
+ * @compile DefaultClone.jasm
+ * @run main DefaultClone
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class DefaultClone {
+//
+//     interface I1 {
+//         default Object clone() {
+//             return "In I1's clone()";
+//         }
+//     }
+// 
+//
+//     interface I2 extends I1 { }
+// 
+//
+//     static class C implements I2 {
+//         public Object clone() {
+//             return "In C's clone()";
+//         }
+//     }
+// 
+// 
+//     static Object test(I2 i) { return i.clone(); }
+//
+//     public static void main(String[] args) {
+//         String s = (String)test(new C());
+//         if (!s.equals("In C's clone()")) {
+//             throw new RuntimeException("Wrong clone() called");
+//         }
+//     }
+// }
+
+
+interface  DefaultClone$I1 version 53:0 {
+
+    public Method clone:"()Ljava/lang/Object;" stack 1 locals 1 {
+        ldc    String "In I1\'s clone()";
+        areturn;
+    }
+
+    static abstract interface InnerClass I1=class DefaultClone$I1 of class DefaultClone;
+
+} // end Class DefaultClone$I1
+
+
+
+interface  DefaultClone$I2 implements DefaultClone$I1 version 53:0 {
+
+    static abstract interface InnerClass I2=class DefaultClone$I2 of class DefaultClone;
+    static abstract interface InnerClass I1=class DefaultClone$I1 of class DefaultClone;
+
+} // end Class DefaultClone$I2
+
+
+super class DefaultClone$C implements DefaultClone$I2 version 53:0 {
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    public Method clone:"()Ljava/lang/Object;" stack 1 locals 1 {
+        ldc    String "In C\'s clone()";
+        areturn;
+    }
+
+    static InnerClass C=class DefaultClone$C of class DefaultClone;
+    static abstract interface InnerClass I2=class DefaultClone$I2 of class DefaultClone;
+
+} // end Class DefaultClone$C
+
+
+super public class DefaultClone version 53:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LDefaultClone$I2;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokeinterface    InterfaceMethod DefaultClone$I2.clone:"()Ljava/lang/Object;",  1;
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        new    class DefaultClone$C;
+        dup;
+        invokespecial    Method DefaultClone$C."<init>":"()V";
+        invokestatic    Method test:"(LDefaultClone$I2;)Ljava/lang/Object;";
+        checkcast    class java/lang/String;
+        astore_1;
+        aload_1;
+        ldc    String "In C\'s clone()";
+        invokevirtual    Method java/lang/String.equals:"(Ljava/lang/Object;)Z";
+        ifne    L33;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong clone() called";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+    L33:    stack_frame_type append;
+        locals_map class java/lang/String;
+        return;
+    }
+
+    static InnerClass C=class DefaultClone$C of class DefaultClone;
+    static abstract interface InnerClass I2=class DefaultClone$I2 of class DefaultClone;
+    static abstract interface InnerClass I1=class DefaultClone$I1 of class DefaultClone;
+
+} // end Class DefaultClone
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/DefaultFinalize.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that a default method named finalize() does not get masked by
+ *          java.lang.Object.finalize() during resolution.
+ * @compile DefaultFinalize.jasm
+ * @run main DefaultFinalize
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class DefaultFinalize {
+//
+//     static String res;
+//
+//     interface I1 {
+//         default void finalize() {
+//             res = "In I1's finalize()";
+//         }
+//     }
+//
+//     interface I2 extends I1 { }
+//
+//     static class C implements I2 {
+//         public void finalize() {
+//             res = "In C's finalize()";
+//         }
+//     }
+//
+//     static void test(I2 i) { i.finalize(); }
+//
+//     public static void main(String[] args) {
+//         test(new C());
+//         if (!res.equals("In C's finalize()")) {
+//             throw new RuntimeException("Wrong finalize() method called");
+//         }
+//     }
+// }
+
+
+interface  DefaultFinalize$I1 version 54:0 {
+
+    public Method finalize:"()V" stack 1 locals 1 {
+        ldc    String "In I1\'s finalize()";
+        putstatic    Field DefaultFinalize.res:"Ljava/lang/String;";
+        return;
+    }
+
+    static abstract interface InnerClass I1=class DefaultFinalize$I1 of class DefaultFinalize;
+
+} // end Class DefaultFinalize$I1
+
+
+interface  DefaultFinalize$I2 implements DefaultFinalize$I1 version 54:0 {
+
+    static abstract interface InnerClass I2=class DefaultFinalize$I2 of class DefaultFinalize;
+    static abstract interface InnerClass I1=class DefaultFinalize$I1 of class DefaultFinalize;
+
+} // end Class DefaultFinalize$I2
+
+
+super class DefaultFinalize$C implements DefaultFinalize$I2 version 54:0 {
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    public Method finalize:"()V" stack 1 locals 1 {
+        ldc    String "In C\'s finalize()";
+        putstatic    Field DefaultFinalize.res:"Ljava/lang/String;";
+        return;
+    }
+
+    static InnerClass C=class DefaultFinalize$C of class DefaultFinalize;
+    static abstract interface InnerClass I2=class DefaultFinalize$I2 of class DefaultFinalize;
+
+} // end Class DefaultFinalize$C
+
+
+super public class DefaultFinalize version 54:0 {
+
+    static Field res:"Ljava/lang/String;";
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LDefaultFinalize$I2;)V" stack 1 locals 1 {
+        aload_0;
+        invokeinterface    InterfaceMethod DefaultFinalize$I2.finalize:"()V",  1;
+        return;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 1 {
+        new    class DefaultFinalize$C;
+        dup;
+        invokespecial   Method DefaultFinalize$C."<init>":"()V";
+        invokestatic    Method test:"(LDefaultFinalize$I2;)V";
+        getstatic       Field res:"Ljava/lang/String;";
+        ldc    String "In C\'s finalize()";
+        invokevirtual   Method java/lang/String.equals:"(Ljava/lang/Object;)Z";
+        ifne    L31;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong finalize() method called";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L31:    stack_frame_type same;
+        return;
+    }
+
+    static InnerClass C=class DefaultFinalize$C of class DefaultFinalize;
+    static abstract interface InnerClass I2=class DefaultFinalize$I2 of class DefaultFinalize;
+    static abstract interface InnerClass I1=class DefaultFinalize$I1 of class DefaultFinalize;
+
+} // end Class DefaultFinalize
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/DefaultHashCode.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that invokeinterface calls the right hashCode() method when
+ *          there is both a local method named hashCode() and a default method
+ *          named hashCode().
+ * @compile DefaultHashCode.jasm
+ * @run main DefaultHashCode
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class DefaultHashCode {
+//
+//     interface I2 {
+//         default int hashCode() {
+//             return 5;
+//         }
+//     }
+//
+//     static class C implements I2 {
+//         public int hashCode() {
+//             return 4;
+//         }
+//     }
+//
+//     static int test(I2 i) { return i.hashCode(); }
+//
+//     public static void main(String[] args) {
+//         if (test(new C()) != 4) {
+//             throw new RuntimeException("Wrong hashCode() function called");
+//         }
+//     }
+// }
+
+
+interface  DefaultHashCode$I2 version 53:0 {
+
+    public Method hashCode:"()I" stack 1 locals 1 {
+        iconst_5;
+        ireturn;
+    }
+
+    static abstract interface InnerClass I2=class DefaultHashCode$I2 of class DefaultHashCode;
+
+} // end Class DefaultHashCode$I2
+
+
+super class DefaultHashCode$C implements DefaultHashCode$I2 version 53:0 {
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    public Method hashCode:"()I" stack 1 locals 1 {
+        iconst_4;
+        ireturn;
+    }
+
+    static InnerClass C=class DefaultHashCode$C of class DefaultHashCode;
+    static abstract interface InnerClass I2=class DefaultHashCode$I2 of class DefaultHashCode;
+
+} // end Class DefaultHashCode$C
+
+
+super public class DefaultHashCode version 53:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LDefaultHashCode$I2;)I" stack 1 locals 1 {
+        aload_0;
+        invokeinterface InterfaceMethod DefaultHashCode$I2.hashCode:"()I",  1;
+        ireturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 1 {
+        new    class DefaultHashCode$C;
+        dup;
+        invokespecial    Method DefaultHashCode$C."<init>":"()V";
+        invokestatic    Method test:"(LDefaultHashCode$I2;)I";
+        iconst_4;
+        if_icmpeq    L24;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong hashCode() function called";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L24:    stack_frame_type same;
+        return;
+    }
+
+    static InnerClass C=class DefaultHashCode$C of class DefaultHashCode;
+    static abstract interface InnerClass I2=class DefaultHashCode$I2 of class DefaultHashCode;
+
+} // end Class DefaultHashCode
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/DefaultNoCloneInC.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that calling clone() with an invokeinterface opcode throws an IAE
+ *          even if there is a default method named clone() in a super interface.
+ * @compile DefaultNoCloneInC.jasm
+ * @run main DefaultNoCloneInC
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class DefaultNoCloneInC {
+//
+//     interface I1 {
+//         default Object clone() {
+//             return "In I1's clone()";
+//         }
+//     }
+//
+//
+//     interface I2 extends I1 { }
+//
+//
+//     static class C implements I2 { }
+//
+//
+//     static Object test(I2 i) { return i.clone(); }
+//
+//     public static void main(String[] args) {
+//         try {
+//             String s = (String)test(new C());
+//             throw new RuntimeException("Expected IAE not thrown");
+//         } catch (java.lang.IllegalAccessError e) {
+//             if (!e.toString().contains("C.clone")) {
+//                 throw new RuntimeException("Wrong IllegalAccessError exception thrown");
+//             }
+//        }
+//     }
+// }
+
+
+interface  DefaultNoCloneInC$I1 version 53:0 {
+
+    public Method clone:"()Ljava/lang/Object;" stack 1 locals 1 {
+        ldc     String "In I1\'s clone()";
+        areturn;
+    }
+
+    static abstract interface InnerClass I1=class DefaultNoCloneInC$I1 of class DefaultNoCloneInC;
+
+} // end Class DefaultNoCloneInC$I1
+
+
+interface  DefaultNoCloneInC$I2 implements DefaultNoCloneInC$I1 version 53:0 {
+
+    static abstract interface InnerClass I2=class DefaultNoCloneInC$I2 of class DefaultNoCloneInC;
+    static abstract interface InnerClass I1=class DefaultNoCloneInC$I1 of class DefaultNoCloneInC;
+
+} // end Class DefaultNoCloneInC$I2
+
+
+super class DefaultNoCloneInC$C implements DefaultNoCloneInC$I2 version 53:0 {
+
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static InnerClass C=class DefaultNoCloneInC$C of class DefaultNoCloneInC;
+    static abstract interface InnerClass I2=class DefaultNoCloneInC$I2 of class DefaultNoCloneInC;
+
+} // end Class DefaultNoCloneInC$C
+
+
+super public class DefaultNoCloneInC version 53:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial   Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LDefaultNoCloneInC$I2;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokeinterface InterfaceMethod DefaultNoCloneInC$I2.clone:"()Ljava/lang/Object;",  1;
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        try t0;
+        new     class DefaultNoCloneInC$C;
+        dup;
+        invokespecial   Method DefaultNoCloneInC$C."<init>":"()V";
+        invokestatic    Method test:"(LDefaultNoCloneInC$I2;)Ljava/lang/Object;";
+        checkcast       class java/lang/String;
+        astore_1;
+        new     class java/lang/RuntimeException;
+        dup;
+        ldc     String "Expected IAE not thrown";
+        invokespecial   Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+        endtry t0;
+        catch t0 java/lang/IllegalAccessError;
+        stack_frame_type stack1;
+        stack_map class java/lang/IllegalAccessError;
+        astore_1;
+        aload_1;
+        invokevirtual   Method java/lang/IllegalAccessError.toString:"()Ljava/lang/String;";
+        ldc     String "C.clone";
+        invokevirtual   Method java/lang/String.contains:"(Ljava/lang/CharSequence;)Z";
+        ifne    L47;
+        new     class java/lang/RuntimeException;
+        dup;
+        ldc     String "Wrong IllegalAccessError exception thrown";
+        invokespecial   Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L47:    stack_frame_type same;
+        return;
+    }
+
+    static InnerClass C=class DefaultNoCloneInC$C of class DefaultNoCloneInC;
+    static abstract interface InnerClass I2=class DefaultNoCloneInC$I2 of class DefaultNoCloneInC;
+    static abstract interface InnerClass I1=class DefaultNoCloneInC$I1 of class DefaultNoCloneInC;
+
+} // end Class DefaultNoCloneInC
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/LocalClone.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that method resolution for invokeinterface of clone() fails
+ *          if it cannot find a public method named clone().
+ * @compile LocalClone.jasm
+ * @run main LocalClone
+ */
+
+// The below .jasm code implements the following java code:
+//
+// interface I1 { }
+//
+//
+// public class LocalClone {
+//
+//    interface I2 extends I1 { }
+//
+//
+//    static class C implements I2 {
+//        public Object clone() {
+//            return "In C's clone()";
+//        }
+//    }
+//
+//    static Object test(I2 i) { return i.clone(); }
+//
+//    public static void main(String[] args) {
+//        try {
+//            String s = (String)test(new C());
+//            throw new RuntimeException("Expected NSME not thrown");
+//        } catch (java.lang.NoSuchMethodError e) {
+//            if (!e.toString().contains("I2.clone")) {
+//                throw new RuntimeException("Wrong NoSuchMethodError exception thrown");
+//            }
+//        }
+//    }
+// }
+
+
+interface I1 version 53:0 { } // end Class I1
+
+
+interface  LocalClone$I2 implements I1 version 53:0 {
+
+    static abstract interface InnerClass I2=class LocalClone$I2 of class LocalClone;
+
+} // end Class LocalClone$I2
+
+
+super class LocalClone$C implements LocalClone$I2 version 53:0 {
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    public Method clone:"()Ljava/lang/Object;" stack 1 locals 1 {
+        ldc    String "In C\'s clone()";
+        areturn;
+    }
+
+    static InnerClass C=class LocalClone$C of class LocalClone;
+    static abstract interface InnerClass I2=class LocalClone$I2 of class LocalClone;
+
+} // end Class LocalClone$C
+
+
+super public class LocalClone version 53:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LLocalClone$I2;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokeinterface    InterfaceMethod LocalClone$I2.clone:"()Ljava/lang/Object;",  1;
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        try t0;
+        new    class LocalClone$C;
+        dup;
+        invokespecial    Method LocalClone$C."<init>":"()V";
+        invokestatic    Method test:"(LLocalClone$I2;)Ljava/lang/Object;";
+        checkcast    class java/lang/String;
+        astore_1;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Expected NSME not thrown";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+        endtry t0;
+        catch t0 java/lang/NoSuchMethodError;
+        stack_frame_type stack1;
+        stack_map class java/lang/NoSuchMethodError;
+        astore_1;
+        aload_1;
+        invokevirtual    Method java/lang/NoSuchMethodError.toString:"()Ljava/lang/String;";
+        ldc    String "I2.clone";
+        invokevirtual    Method java/lang/String.contains:"(Ljava/lang/CharSequence;)Z";
+        ifne    L47;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong NoSuchMethodError exception thrown";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L47:  stack_frame_type same;
+        return;
+    }
+
+    static InnerClass C=class LocalClone$C of class LocalClone;
+    static abstract interface InnerClass I2=class LocalClone$I2 of class LocalClone;
+
+} // end Class LocalClone
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/NoClones.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that a NoSuchMethodError exception gets thrown if invokeinterface
+ *          calls clone() and there is no public implementation of clone().
+ * @compile NoClones.jasm
+ * @run main NoClones
+ */
+
+// The below .jasm code implements the following java code:
+//
+// interface I1 { }
+//
+//
+// public class NoClones {
+//
+//    interface I2 extends I1 { }
+//
+//    static class C implements I2 { }
+//
+//    static Object test(I2 i) { return i.clone(); }
+//
+//    public static void main(String[] args) {
+//        try {
+//            String s = (String)test(new C());
+//            throw new RuntimeException("Expected NSME not thrown");
+//        } catch (java.lang.NoSuchMethodError e) {
+//            if (!e.toString().contains("I2.clone")) {
+//                throw new RuntimeException("Wrong NoSuchMethodError exception thrown");
+//            }
+//        }
+//    }
+// }
+
+
+interface I1 version 53:0 { } // end Class I1
+
+
+interface  NoClones$I2 implements I1 version 53:0 {
+
+    static abstract interface InnerClass I2=class NoClones$I2 of class NoClones;
+
+} // end Class NoClones$I2
+
+
+super class NoClones$C implements NoClones$I2 version 53:0 {
+
+    Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static InnerClass C=class NoClones$C of class NoClones;
+    static abstract interface InnerClass I2=class NoClones$I2 of class NoClones;
+
+} // end Class NoClones$C
+
+
+super public class NoClones version 53:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LNoClones$I2;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokeinterface    InterfaceMethod NoClones$I2.clone:"()Ljava/lang/Object;",  1;
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        try t0;
+        new    class NoClones$C;
+        dup;
+        invokespecial    Method NoClones$C."<init>":"()V";
+        invokestatic    Method test:"(LNoClones$I2;)Ljava/lang/Object;";
+        checkcast    class java/lang/String;
+        astore_1;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Expected NSME not thrown";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+        endtry t0;
+        catch t0 java/lang/NoSuchMethodError;
+        stack_frame_type stack1;
+        stack_map class java/lang/NoSuchMethodError;
+        astore_1;
+        aload_1;
+        invokevirtual    Method java/lang/NoSuchMethodError.toString:"()Ljava/lang/String;";
+        ldc    String "I2.clone";
+        invokevirtual    Method java/lang/String.contains:"(Ljava/lang/CharSequence;)Z";
+        ifne    L47;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong NoSuchMethodError exception thrown";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L47:  stack_frame_type same;
+        return;
+    }
+
+    static InnerClass C=class NoClones$C of class NoClones;
+    static abstract interface InnerClass I2=class NoClones$I2 of class NoClones;
+
+} // end Class NoClones
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/DefMethClone.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+interface DefMethClone version 54:0 {
+
+    public Method clone:"()Ljava/lang/Object;" stack 1 locals 1 {
+        ldc String "In DefMethClone\'s clone()";
+        areturn;
+    }
+
+} // end Class DefMethClone
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/HasLocalClone.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that invokevirtual of clone() finds the clone() method that
+ *          is local to the calling class.
+ * @compile DefMethClone.jasm SuperClass.jasm I1.java HasLocalClone.jasm
+ * @run main/othervm -noverify HasLocalClone
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class HasLocalClone extends SuperClass implements I1 {
+//
+//     public Object clone() {
+//         return "In HasLocalClone's clone()";
+//     }
+//
+//     static Object test(SuperClass a) { return a.clone(); }
+//
+//     public static void main(String[] args) {
+//         String s = (String)test(new HasLocalClone());
+//         if (!s.equals("In HasLocalCloneC's clone()")) {
+//             throw new RuntimeException("Wrong clone() called: " + s);
+//         }
+//     }
+// }
+
+
+super public class HasLocalClone extends SuperClass implements I1 version 54:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method SuperClass."<init>":"()V";
+        return;
+    }
+
+    public Method clone:"()Ljava/lang/Object;" stack 1 locals 1 {
+        ldc    String "In HasLocalClone\'s clone()";
+        areturn;
+    }
+
+    static Method test:"(LSuperClass;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokevirtual    Method SuperClass.clone:"()Ljava/lang/Object;";
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        new    class HasLocalClone;
+        dup;
+        invokespecial    Method "<init>":"()V";
+        invokestatic    Method test:"(LSuperClass;)Ljava/lang/Object;";
+        checkcast    class java/lang/String;
+        astore_1;
+        aload_1;
+        ldc    String "In HasLocalClone\'s clone()";
+        invokevirtual    Method java/lang/String.equals:"(Ljava/lang/Object;)Z";
+        ifne    L37;
+        new    class java/lang/RuntimeException;
+        dup;
+        aload_1;
+        invokedynamic    InvokeDynamic REF_invokeStatic:java/lang/invoke/StringConcatFactory.makeConcatWithConstants:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;":makeConcatWithConstants:"(Ljava/lang/String;)Ljava/lang/String;" String "Wrong clone() called: ";
+        invokespecial    Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L37:    stack_frame_type append;
+        locals_map class java/lang/String;
+        return;
+    }
+
+    public static final InnerClass Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles;
+
+} // end Class HasLocalClone
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/I1.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+interface I1 extends DefMethClone { }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/I1Abstr.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+interface I1Abstr extends DefMethClone {
+    Object clone();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalClone.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that invokevirtual of clone() calls java.lang.Object.clone()
+ *          even if a superinterface has a default method named clone().
+ * @compile DefMethClone.jasm SuperClass.jasm I1.java NoLocalClone.jasm
+ * @run main/othervm -noverify NoLocalClone
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class NoLocalClone extends SuperClass implements Cloneable,I1 {
+//
+//     static Object test(SuperClass a) { return a.clone(); }
+//
+//     public static void main(String[] args) {
+//         Object obj = test(new NoLocalClone());
+//         if (!(obj instanceof NoLocalClone)) {
+//             throw new RuntimeException("Wrong clone() called.");
+//         }
+//     }
+// }
+
+super public class NoLocalClone extends SuperClass implements java/lang/Cloneable, I1 version 54:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method SuperClass."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LSuperClass;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokevirtual    Method SuperClass.clone:"()Ljava/lang/Object;";
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        new    class NoLocalClone;
+        dup;
+        invokespecial Method "<init>":"()V";
+        invokestatic Method test:"(LSuperClass;)Ljava/lang/Object;";
+        astore_1;
+        aload_1;
+        instanceof  class NoLocalClone;
+        ifne    L31;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong clone() called.";
+        invokespecial Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L31:    stack_frame_type append;
+        locals_map class java/lang/Object;
+        return;
+    }
+
+} // end Class NoLocalClone
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/NoLocalCloneAbstr.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8154587
+ * @summary Check that invokevirtual of clone() calls java.lang.Object.clone()
+ *          even if a superinterface has an abstract method named clone().
+ * @compile DefMethClone.jasm SuperClass.jasm I1Abstr.java NoLocalCloneAbstr.jasm
+ * @run main/othervm -noverify NoLocalCloneAbstr
+ */
+
+// The below .jasm code implements the following java code:
+//
+// public class NoLocalCloneAbstr extends SuperClass implements Cloneable,I1Abstr {
+//
+//     static Object test(SuperClass a) { return a.clone(); }
+//
+//     public static void main(String[] args) {
+//         Object obj = test(new NoLocalCloneAbstr());
+//         if (!(obj instanceof NoLocalCloneAbstr)) {
+//             throw new RuntimeException("Wrong clone() called.");
+//         }
+//     }
+// }
+
+super public class NoLocalCloneAbstr extends SuperClass implements java/lang/Cloneable, I1Abstr version 54:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial    Method SuperClass."<init>":"()V";
+        return;
+    }
+
+    static Method test:"(LSuperClass;)Ljava/lang/Object;" stack 1 locals 1 {
+        aload_0;
+        invokevirtual    Method SuperClass.clone:"()Ljava/lang/Object;";
+        areturn;
+    }
+
+    public static Method main:"([Ljava/lang/String;)V" stack 3 locals 2 {
+        new    class NoLocalCloneAbstr;
+        dup;
+        invokespecial Method "<init>":"()V";
+        invokestatic Method test:"(LSuperClass;)Ljava/lang/Object;";
+        astore_1;
+        aload_1;
+        instanceof  class NoLocalCloneAbstr;
+        ifne    L31;
+        new    class java/lang/RuntimeException;
+        dup;
+        ldc    String "Wrong clone() called.";
+        invokespecial Method java/lang/RuntimeException."<init>":"(Ljava/lang/String;)V";
+        athrow;
+      L31:    stack_frame_type append;
+        locals_map class java/lang/Object;
+        return;
+    }
+
+} // end Class NoLocalCloneAbstr
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/clone/invokevirtual/SuperClass.jasm	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ *
+ */
+
+super public class SuperClass implements DefMethClone version 54:0 {
+
+    public Method "<init>":"()V" stack 1 locals 1 {
+        aload_0;
+        invokespecial   Method java/lang/Object."<init>":"()V";
+        return;
+    }
+
+} // end Class SuperClass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/os/TestUseCpuAllocPath.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ */
+
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+
+/**
+ * @test
+ * @summary If #processors > 1024 os_linux.cpp uses special coding.
+ *   Excercise this by forcing usage of this coding. If this fails, this
+ *   VM was either compiled on a platform which does not define CPU_ALLOC,
+ *   or it is executed on a platform that does not support it.
+ * @requires os.family == "linux"
+ * @modules java.base/jdk.internal.misc
+ * @library /test/lib
+ * @run driver TestUseCpuAllocPath
+ */
+public class TestUseCpuAllocPath {
+
+    static final String SUCCESS_STRING = "active_processor_count: using dynamic path (forced)";
+
+    public static void main(String[] args) throws Exception {
+        ProcessBuilder pb =
+            ProcessTools.createJavaProcessBuilder(false,
+                                                  "-Xlog:os=trace",
+                                                  "-XX:+UnlockDiagnosticVMOptions",
+                                                  "-XX:+UseCpuAllocPath",
+                                                  "-version");
+
+        OutputAnalyzer output = new OutputAnalyzer(pb.start());
+        output.shouldContain(SUCCESS_STRING);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbThread.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import jdk.test.lib.apps.LingeredApp;
+
+/*
+ * @test
+ * @bug 8193352
+ * @summary Test clhsdb 'thread' and 'threads' commands
+ * @library /test/lib
+ * @run main/othervm ClhsdbThread
+ */
+
+public class ClhsdbThread {
+
+    public static void main(String[] args) throws Exception {
+        System.out.println("Starting ClhsdbThread test");
+
+        LingeredApp theApp = null;
+        try {
+            ClhsdbLauncher test = new ClhsdbLauncher();
+            theApp = LingeredApp.startApp();
+            System.out.println("Started LingeredApp with pid " + theApp.getPid());
+
+            List<String> cmds = List.of("thread", "thread -a", "threads");
+
+            Map<String, List<String>> expStrMap = new HashMap<>();
+            // Check for the presence of the usage string
+            expStrMap.put("thread", List.of( "Usage: thread { -a | id }"));
+            expStrMap.put("thread -a", List.of(
+                "State: BLOCKED",
+                "Stack in use by Java",
+                "Base of Stack",
+                "Last_Java_SP:",
+                "Address"));
+            expStrMap.put("threads", List.of(
+                "Finalizer",
+                "Signal Dispatcher",
+                "Common-Cleaner",
+                "Stack in use by Java:",
+                "State:",
+                "Base of Stack:",
+                "main"));
+            Map<String, List<String>> unExpStrMap = new HashMap<>();
+            unExpStrMap.put(
+                "thread -a",
+                List.of("Couldn't find thread -a"));
+
+            String consolidatedOutput = test.run(
+                theApp.getPid(),
+                cmds,
+                expStrMap,
+                unExpStrMap);
+
+            if (consolidatedOutput == null) {
+                // Output could be null due to attach permission issues.
+                System.out.println(
+                    "Output is empty. Probably due to attach permission issues.");
+                LingeredApp.stopApp(theApp);
+                return;
+            }
+
+            // Test the thread <id> command now. Obtain <id> from the
+            // output of the previous 'threads' command. The word before
+            // the token 'Finalizer' should denote the thread id of the
+            // 'Finalizer' thread.
+
+            String[] snippets = consolidatedOutput.split("Finalizer");
+            String[] wordTokens = snippets[0].split(" ");
+            String threadIdObtained = wordTokens[wordTokens.length - 1];
+
+            // Weed out newlines and blurb before that.
+            if (threadIdObtained.contains("\n")) {
+                String[] threadIdTokens = threadIdObtained.split("\n");
+                threadIdObtained = threadIdTokens[threadIdTokens.length - 1];
+            }
+
+            expStrMap = new HashMap<>();
+            System.out.println("Thread Id obtained is: " + threadIdObtained);
+
+            String cmd = "thread " + threadIdObtained;
+            expStrMap.put(cmd, List.of(
+                "Base of Stack:",
+                "State:",
+                "Last_Java_SP"));
+            cmds = List.of(cmd);
+            test.run(theApp.getPid(), cmds, expStrMap, null);
+        } catch (Exception ex) {
+            throw new RuntimeException("Test ERROR " + ex, ex);
+        } finally {
+            LingeredApp.stopApp(theApp);
+        }
+        System.out.println("Test PASSED");
+    }
+}
--- a/test/jaxp/TEST.ROOT	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jaxp/TEST.ROOT	Fri Feb 02 01:52:03 2018 +0000
@@ -23,7 +23,7 @@
 groups=TEST.groups
 
 # Minimum jtreg version
-requiredVersion=4.2 b08
+requiredVersion=4.2 b11
 
 # Path to libraries in the topmost test directory. This is needed so @library
 # does not need ../../ notation to reach them
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/SortTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 transform.sort;
+
+import static jaxp.library.JAXPTestUtilities.getSystemProperty;
+import java.io.StringWriter;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+
+/*
+ * @test
+ * @bug 8193830
+ * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
+ * @run testng/othervm -DrunSecMngr=true transform.sort.SortTest
+ * @run testng/othervm transform.sort.SortTest
+ * @summary verify xsl:sort lang attribute
+ */
+@Listeners({jaxp.library.FilePolicy.class})
+public class SortTest {
+
+    static final String LAND_EN = "en";
+    static final String LAND_PL = "pl";
+    static final String LAND_RU = "ru";
+
+    String filepath;
+    String slash = "";
+
+    @BeforeClass
+    public void setUpClass() throws Exception {
+        String file1 = getClass().getResource("sort-alphabet-english.xml").getFile();
+        if (getSystemProperty("os.name").contains("Windows")) {
+            filepath = file1.substring(1, file1.lastIndexOf("/") + 1);
+            slash = "/";
+        } else {
+            filepath = file1.substring(0, file1.lastIndexOf("/") + 1);
+        }
+    }
+
+    /*
+     * DataProvider fields:
+     * lang, xml, xsl, gold file
+     */
+    @DataProvider(name = "parameters")
+    public Object[][] getParameters() {
+
+        return new Object[][]{
+            {LAND_EN, "sort-alphabet-english.xml", "sort-alphabet-english.xsl", "sort-alphabet-english.out"},
+            {LAND_PL, "sort-alphabet-polish.xml", "sort-alphabet-polish.xsl", "sort-alphabet-polish.out"},
+            {LAND_RU, "sort-alphabet-russian.xml", "sort-alphabet-russian.xsl", "sort-alphabet-russian.out"},};
+    }
+
+    @Test(dataProvider = "parameters")
+    public final void testTransform(String lang, String xml, String xsl, String gold)
+            throws Exception {
+
+        StringWriter sw = new StringWriter();
+        // Create transformer factory
+        TransformerFactory factory = TransformerFactory.newInstance();
+
+        // Use the factory to create a template containing the xsl file
+        Templates template = factory.newTemplates(new StreamSource(getClass().getResourceAsStream(xsl)));
+        // Use the template to create a transformer
+        Transformer xformer = template.newTransformer();
+        xformer.setParameter("lang", lang);
+        // Prepare the input and output files
+        Source source = new StreamSource(getClass().getResourceAsStream(xml));
+
+        /*
+             * The following may be used to produce gold files.
+             * Using however the original gold files, and compare without considering
+             * the format
+         */
+        //String output = getClass().getResource(gold).getPath();
+        //Result result = new StreamResult(new FileOutputStream(output));
+        // use the following to verify the output against the pre-generated one
+        Result result = new StreamResult(sw);
+
+        // Apply the xsl file to the source file and write the result to the
+        // output file
+        xformer.transform(source, result);
+
+        String out = sw.toString();
+
+        List<String> lines = Files.readAllLines(Paths.get(filepath + gold));
+        String[] resultLines = out.split("\n");
+        int i = 0;
+
+        // the purpose is to test sort, so ignore the format of the output
+        for (String line : lines) {
+            Assert.assertEquals(resultLines[i++].trim(), line.trim());
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-english.out	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?><root>
+<p>lang: en</p>
+<ul>
+<li>A</li>
+<li>C</li>
+<li>D</li>
+<li>E</li>
+<li>F</li>
+<li>G</li>
+<li>H</li>
+<li>I</li>
+<li>J</li>
+<li>K</li>
+<li>L</li>
+<li>M</li>
+<li>N</li>
+<li>O</li>
+<li>P</li>
+<li>Q</li>
+<li>R</li>
+<li>S</li>
+<li>T</li>
+<li>U</li>
+<li>V</li>
+<li>W</li>
+<li>X</li>
+<li>Y</li>
+<li>Z</li>
+</ul>
+</root>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-english.xml	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements. See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership. The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the  "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+  -->
+<alphabet language="en">
+  <character>A</character>
+  <character>E</character>
+  <character>C</character>
+  <character>D</character>
+  <character>F</character>
+  <character>G</character>
+  <character>H</character>
+  <character>I</character>
+  <character>J</character>
+  <character>K</character>
+  <character>L</character>
+  <character>M</character>
+  <character>N</character>
+  <character>Y</character>
+  <character>O</character>
+  <character>P</character>
+  <character>Q</character>
+  <character>U</character>
+  <character>R</character>
+  <character>S</character>
+  <character>V</character>
+  <character>W</character>
+  <character>T</character>
+  <character>X</character>
+  <character>Z</character>
+</alphabet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-english.xsl	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements. See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership. The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the  "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+  -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes" xml:space="preserve" />
+  <!-- <xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/strict.dtd" doctype-public="-//W3C//DTD HTML 
+    4.01//EN" version="4.0" encoding="UTF-8" indent="yes" xml:lang="$lang" omit-xml-declaration="no"/> -->
+  <xsl:param name="lang" />
+  <xsl:template match="alphabet">
+    <root>
+      <p>lang: <xsl:value-of select="$lang" /></p>
+      <ul>
+        <xsl:apply-templates select="character">
+          <xsl:sort select="." lang="{$lang}" order="ascending" />
+        </xsl:apply-templates>
+      </ul>
+    </root>
+  </xsl:template>
+  <xsl:template match="character">
+    <li>
+      <xsl:value-of select="text()" />
+    </li>
+  </xsl:template>
+</xsl:stylesheet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-polish.out	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?><root>
+<p>lang: pl</p>
+<ul>
+<li>A</li>
+<li>Ä„</li>
+<li>B</li>
+<li>C</li>
+<li>Ć</li>
+<li>D</li>
+<li>E</li>
+<li>Ę</li>
+<li>F</li>
+<li>G</li>
+<li>H</li>
+<li>I</li>
+<li>J</li>
+<li>K</li>
+<li>L</li>
+<li>Å</li>
+<li>M</li>
+<li>N</li>
+<li>Ń</li>
+<li>O</li>
+<li>Ó</li>
+<li>P</li>
+<li>R</li>
+<li>S</li>
+<li>Åš</li>
+<li>T</li>
+<li>U</li>
+<li>W</li>
+<li>Y</li>
+<li>Z</li>
+<li>Ź</li>
+<li>Å»</li>
+</ul>
+</root>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-polish.xml	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements. See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership. The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the  "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+  -->
+<alphabet language="pl">
+  <character>A</character>
+  <character>Å»</character>
+  <character>B</character>
+  <character>C</character>
+  <character>Ć</character>
+  <character>D</character>
+  <character>Å</character>
+  <character>E</character>
+  <character>Ę</character>
+  <character>F</character>
+  <character>G</character>
+  <character>H</character>
+  <character>I</character>
+  <character>J</character>
+  <character>K</character>
+  <character>L</character>
+  <character>Z</character>
+  <character>Ź</character>
+  <character>M</character>
+  <character>N</character>
+  <character>Ń</character>
+  <character>O</character>
+  <character>Ó</character>
+  <character>P</character>
+  <character>R</character>
+  <character>S</character>
+  <character>Åš</character>
+  <character>T</character>
+  <character>U</character>
+  <character>W</character>
+  <character>Ä„</character>
+  <character>Y</character>
+</alphabet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-polish.xsl	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements. See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership. The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the  "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+  -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes" xml:space="preserve" />
+  <!-- <xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/strict.dtd" doctype-public="-//W3C//DTD HTML 
+    4.01//EN" version="4.0" encoding="UTF-8" indent="yes" xml:lang="$lang" omit-xml-declaration="no"/> -->
+  <xsl:param name="lang" />
+  <xsl:template match="alphabet">
+    <root>
+      <p>lang: <xsl:value-of select="$lang" /></p>
+      <ul>
+        <xsl:apply-templates select="character">
+          <xsl:sort select="." lang="{$lang}" order="ascending" />
+        </xsl:apply-templates>
+      </ul>
+    </root>
+  </xsl:template>
+  <xsl:template match="character">
+    <li>
+      <xsl:value-of select="text()" />
+    </li>
+  </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-russian.out	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?><root>
+<p>lang: ru</p>
+<ul>
+<li>Ð</li>
+<li>Б</li>
+<li>Ð’</li>
+<li>Г</li>
+<li>Д</li>
+<li>Е</li>
+<li>Ð</li>
+<li>Ж</li>
+<li>З</li>
+<li>И</li>
+<li>Й</li>
+<li>К</li>
+<li>Л</li>
+<li>М</li>
+<li>Ð</li>
+<li>О</li>
+<li>П</li>
+<li>Р</li>
+<li>С</li>
+<li>Т</li>
+<li>У</li>
+<li>Ф</li>
+<li>Ð¥</li>
+<li>Ц</li>
+<li>Ч</li>
+<li>Ш</li>
+<li>Щ</li>
+<li>Ъ</li>
+<li>Ы</li>
+<li>Ь</li>
+<li>Э</li>
+<li>Ю</li>
+<li>Я</li>
+</ul>
+</root>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-russian.xml	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements. See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership. The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the  "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+  -->
+<alphabet language="ru">
+  <character>Ð</character>
+  <character>Б</character>
+  <character>Ð’</character>
+  <character>Г</character>
+  <character>Д</character>
+  <character>Е</character>
+  <character>Ð</character>
+  <character>Ж</character>
+  <character>З</character>
+  <character>Й</character>
+  <character>П</character>
+  <character>Я</character>
+  <character>К</character>
+  <character>Л</character>
+  <character>С</character>
+  <character>М</character>
+  <character>Ð</character>
+  <character>О</character>
+  <character>Р</character>
+  <character>И</character>
+  <character>Т</character>
+  <character>Ф</character>
+  <character>Ð¥</character>
+  <character>Ц</character>
+  <character>У</character>
+  <character>Ш</character>
+  <character>Щ</character>
+  <character>Ъ</character>
+  <character>Ы</character>
+  <character>Ч</character>
+  <character>Ь</character>
+  <character>Э</character>
+  <character>Ю</character>
+</alphabet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/sort-alphabet-russian.xsl	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements. See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership. The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the  "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+  -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes" xml:space="preserve" />
+  <!-- <xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/strict.dtd" doctype-public="-//W3C//DTD HTML 
+    4.01//EN" version="4.0" encoding="UTF-8" indent="yes" xml:lang="$lang" omit-xml-declaration="no"/> -->
+  <xsl:param name="lang" />
+  <xsl:template match="alphabet">
+    <root>
+      <p>lang: <xsl:value-of select="$lang" /></p>
+      <ul>
+        <xsl:apply-templates select="character">
+          <xsl:sort select="." lang="{$lang}" order="ascending" />
+        </xsl:apply-templates>
+      </ul>
+    </root>
+  </xsl:template>
+  <xsl:template match="character">
+    <li>
+      <xsl:value-of select="text()" />
+    </li>
+  </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
--- a/test/jdk/ProblemList.txt	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/ProblemList.txt	Fri Feb 02 01:52:03 2018 +0000
@@ -217,6 +217,8 @@
 
 java/net/DatagramSocket/SendDatagramToBadAddress.java           7143960 macosx-all
 
+java/net/httpclient/SplitResponseSSL.java                       8194151 windows-all
+
 ############################################################################
 
 # jdk_nio
@@ -252,7 +254,8 @@
 # jdk_security
 
 sun/security/pkcs11/ec/TestKeyFactory.java                      8026976 generic-all
-sun/security/pkcs11/KeyStore/SecretKeysBasic.sh                 8186098 linux-all
+sun/security/pkcs11/Secmod/AddTrustedCert.java                  8180837 generic-all
+sun/security/pkcs11/tls/TestKeyMaterial.java                    8180837 generic-all
 
 sun/security/tools/keytool/ListKeychainStore.sh                 8156889 macosx-all
 
@@ -348,8 +351,6 @@
 
 # svc_tools
 
-sun/tools/jcmd/TestJcmdSanity.java                              8031482 windows-all
-
 sun/tools/jstat/jstatClassloadOutput1.sh                        8173942 generic-all
 
 sun/jvmstat/monitor/MonitoredVm/MonitorVmStartTerminate.java    8057732 generic-all
--- a/test/jdk/TEST.ROOT	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/TEST.ROOT	Fri Feb 02 01:52:03 2018 +0000
@@ -40,7 +40,7 @@
     vm.cds
 
 # Minimum jtreg version
-requiredVersion=4.2 b09
+requiredVersion=4.2 b11
 
 # Path to libraries in the topmost test directory. This is needed so @library
 # does not need ../../ notation to reach them
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/Color/XRenderTranslucentColorDrawTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug      8176795
+ * @summary  Test verifies that we get proper color when we draw translucent
+ *           color over an opaque color using X Render extension in Linux.
+ * @requires (os.family == "linux")
+ * @run      main XRenderTranslucentColorDrawTest -Dsun.java2d.xrender=true
+ */
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.image.BufferedImage;
+import java.awt.image.VolatileImage;
+
+public class XRenderTranslucentColorDrawTest {
+
+    public static void main(String[] args) throws Exception {
+        GraphicsEnvironment env = GraphicsEnvironment.
+                getLocalGraphicsEnvironment();
+        GraphicsConfiguration translucentGC = null;
+        SCREENS: for (GraphicsDevice screen : env.getScreenDevices()) {
+            for (GraphicsConfiguration gc : screen.getConfigurations()) {
+                if (gc.isTranslucencyCapable()) {
+                    translucentGC = gc;
+                    break SCREENS;
+                }
+            }
+        }
+        if (translucentGC == null) {
+            throw new RuntimeException("No suitable gc found.");
+        }
+        int width = 10;
+        int height = 10;
+        VolatileImage image = translucentGC.
+                createCompatibleVolatileImage(width, height);
+        Graphics2D g = image.createGraphics();
+        // draw opaque black color
+        g.setColor(new Color(0xff000000, true));
+        g.fillRect(0, 0, width, height);
+        // draw translucent white color over opaque black color
+        g.setColor(new Color(0x80ffffff, true));
+        g.fillRect(0, 0, width, height);
+        g.dispose();
+        // Get snapshot of VolatileImage to pick color and verify the same
+        BufferedImage snapshot = image.getSnapshot();
+        int argb = snapshot.getRGB(width / 2, height / 2);
+        // we expect the resultant rgb hex value to be ff808080
+        if (!(Integer.toHexString(argb).equals("ff808080"))) {
+            throw new RuntimeException("Using X Render extension for drawing"
+                    + " translucent color is not giving expected results.");
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/Window/WindowResizing/DoubleClickTitleBarTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @key headful
+ * @bug 8190192
+ * @requires os.family=="mac"
+ * @summary Double click on the title bar no longer repositions the window
+ * @run main DoubleClickTitleBarTest
+ */
+
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import java.awt.Robot;
+import java.awt.Point;
+import java.awt.event.InputEvent;
+import java.awt.AWTException;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowStateListener;
+
+public class DoubleClickTitleBarTest {
+    private static Point position = null;
+    private static JFrame frame = null;
+    private static boolean windowMinimizedState = false, windowMaximizedState = false;
+    //offset from top left to some place on title bar
+    final private static int X_OFFSET = 100, Y_OFFSET = 7;
+
+    public static void main(String[] args) throws Exception {
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    doTest();
+                }
+            });
+
+            Robot robot = new Robot();
+            robot.delay(500);
+
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    position = frame.getLocationOnScreen();
+                }
+            });
+
+            //offset from the top left
+            robot.mouseMove(position.x + X_OFFSET,
+                                position.y + Y_OFFSET);
+
+            //do resize
+            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+            robot.mouseMove(frame.getLocationOnScreen().x + 200,
+                                frame.getLocationOnScreen().y + 200);
+            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+            robot.delay(500);
+
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    position = frame.getLocationOnScreen();
+                }
+            });
+
+            //after resize, do offset from top left
+            robot.mouseMove(position.x + X_OFFSET,
+                                position.y + Y_OFFSET);
+            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+
+            //wait till maximizing the window
+            robot.delay(1000);
+
+            if(!(windowMinimizedState && windowMaximizedState)) {
+                throw new RuntimeException("Test failed:");
+            }
+        } finally {
+            if(frame != null) {
+                frame.dispose();
+            }
+        }
+    }
+
+    private static void doTest() {
+        frame = new JFrame();
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.pack();
+
+        WindowStateListener listener = new WindowAdapter() {
+            public void windowStateChanged(WindowEvent evt) {
+                int oldState = evt.getOldState();
+                int newState = evt.getNewState();
+
+                if((oldState & JFrame.MAXIMIZED_BOTH) != 0 &&
+                    (newState & JFrame.MAXIMIZED_BOTH) == 0) {
+                    windowMinimizedState = true;
+                }
+                else if(windowMinimizedState &&
+                         (oldState & JFrame.MAXIMIZED_BOTH) == 0 &&
+                         (newState & JFrame.MAXIMIZED_BOTH) != 0) {
+                    windowMaximizedState = true;
+                }
+            }
+        };
+
+        frame.addWindowStateListener(listener);
+        frame.setSize(200, 200);
+        frame.setLocation(100, 100);
+        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
+        frame.setResizable(true);
+        frame.setVisible(true);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/image/BandedSampleModel/BandedSampleModelSizeTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8194489
+ * @summary The test checks whether BandedSampleModel computes appropriate
+ *          size for allocating memory in DataBuffer.
+ * @run main BandedSampleModelSizeTest
+ */
+import java.awt.image.BandedSampleModel;
+import java.awt.image.DataBuffer;
+import java.util.Arrays;
+
+public class BandedSampleModelSizeTest {
+    // Constants
+    private static final int TEST_NUM_BANDS = 3;
+    private static final int TEST_SRC_IMG_DIM = 10;
+
+    // Required sample models
+    private static BandedSampleModel singleBankModel = null;
+    private static BandedSampleModel multiBankModel = null;
+
+    private static void initTest() {
+        int[] bandOffsets = new int[TEST_NUM_BANDS];
+        int[] bankIndices = new int[TEST_NUM_BANDS];
+
+        /*
+         * Create a BandedSampleModel to store samples of all bands in one
+         * bank of DataBuffer.
+         */
+        bandOffsets[0] = 0;
+        bandOffsets[1] = 120;
+        bandOffsets[2] = 240;
+        bankIndices[0] = 0;
+        bankIndices[1] = 0;
+        bankIndices[2] = 0;
+
+        singleBankModel = new BandedSampleModel(DataBuffer.TYPE_BYTE,
+                TEST_SRC_IMG_DIM, TEST_SRC_IMG_DIM, TEST_SRC_IMG_DIM,
+                bankIndices, bandOffsets);
+
+        /*
+         * Create a BandedSampleModel to store samples of all bands in
+         * different banks of DataBuffer.
+         */
+        bandOffsets[0] = 0;
+        bandOffsets[1] = 20;
+        bandOffsets[2] = 40;
+        bankIndices[0] = 0;
+        bankIndices[1] = 1;
+        bankIndices[2] = 2;
+
+        multiBankModel = new BandedSampleModel(DataBuffer.TYPE_BYTE,
+                TEST_SRC_IMG_DIM, TEST_SRC_IMG_DIM, TEST_SRC_IMG_DIM,
+                bankIndices, bandOffsets);
+    }
+
+    private static void testSingleBankModel() {
+        int[] srcSamples = new int[TEST_NUM_BANDS];
+        int[] resSamples = new int[TEST_NUM_BANDS];
+
+        // Create image buffer for the requried sample model
+        DataBuffer imgBuffer = singleBankModel.createDataBuffer();
+
+        // Test the sample model by setting a pixel value & inspecting the same.
+        Arrays.fill(srcSamples, 125);
+        singleBankModel.setPixel(0, 0, srcSamples, imgBuffer);
+        singleBankModel.getPixel(0, 0, resSamples, imgBuffer);
+        if (!Arrays.equals(srcSamples, resSamples)) {
+            throw new RuntimeException("Test Failed. Incorrect samples found"
+                    + " in the image");
+        }
+
+        Arrays.fill(srcSamples, 250);
+        singleBankModel.setPixel(9, 9, srcSamples, imgBuffer);
+        singleBankModel.getPixel(9, 9, resSamples, imgBuffer);
+        if (!Arrays.equals(srcSamples, resSamples)) {
+            throw new RuntimeException("Test Failed. Incorrect samples found"
+                    + " in the image");
+        }
+    }
+
+    private static void testMultiBankModel() {
+        int[] srcSamples = new int[TEST_NUM_BANDS];
+        int[] resSamples = new int[TEST_NUM_BANDS];
+
+        // Create image buffer for the required sample model
+        DataBuffer imgBuffer = multiBankModel.createDataBuffer();
+
+        // Test the sample model by setting a pixel value & inspecting the same.
+        Arrays.fill(srcSamples, 125);
+        multiBankModel.setPixel(0, 0, srcSamples, imgBuffer);
+        multiBankModel.getPixel(0, 0, resSamples, imgBuffer);
+        if (!Arrays.equals(srcSamples, resSamples)) {
+            throw new RuntimeException("Test Failed. Incorrect samples found"
+                    + " in the image");
+        }
+
+        Arrays.fill(srcSamples, 250);
+        multiBankModel.setPixel(9, 9, srcSamples, imgBuffer);
+        multiBankModel.getPixel(9, 9, resSamples, imgBuffer);
+        if (!Arrays.equals(srcSamples, resSamples)) {
+            throw new RuntimeException("Test Failed. Incorrect samples found"
+                    + " in the image");
+        }
+    }
+
+    public static void main(String args[]) {
+        // Initialize the test
+        initTest();
+
+        // Test banded sample model with single bank of data buffer
+        testSingleBankModel();
+
+        // Test banded sample model with multiple banks of data buffer
+        testMultiBankModel();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/io/InputStream/NullInputStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,229 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.BeforeGroups;
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+/*
+ * @test
+ * @bug 4358774 8139206
+ * @run testng NullInputStream
+ * @summary Check for expected behavior of InputStream.nullInputStream().
+ */
+public class NullInputStream {
+    private static InputStream openStream;
+    private static InputStream closedStream;
+
+    @BeforeGroups(groups="open")
+    public static void openStream() {
+        openStream = InputStream.nullInputStream();
+    }
+
+    @BeforeGroups(groups="closed")
+    public static void openAndCloseStream() {
+        closedStream = InputStream.nullInputStream();
+        try {
+           closedStream.close();
+        } catch (IOException e) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @AfterGroups(groups="open")
+    public static void closeStream() {
+        try {
+            openStream.close();
+        } catch (IOException e) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testOpen() {
+        assertNotNull(openStream, "InputStream.nullInputStream() returned null");
+    }
+
+    @Test(groups = "open")
+    public static void testAvailable() {
+        try {
+            assertEquals(0, openStream.available(), "available() != 0");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testRead() {
+        try {
+            assertEquals(-1, openStream.read(), "read() != -1");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testReadBII() {
+        try {
+            assertEquals(-1, openStream.read(new byte[1], 0, 1),
+                "read(byte[],int,int) != -1");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testReadAllBytes() {
+        try {
+            assertEquals(0, openStream.readAllBytes().length,
+                "readAllBytes().length != 0");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testReadNBytes() {
+        try {
+            assertEquals(0, openStream.readNBytes(new byte[1], 0, 1),
+                "readNBytes(byte[],int,int) != 0");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testReadNBytesWithLength() {
+        try {
+            assertEquals(0, openStream.readNBytes(-1).length,
+                "readNBytes(-1) != 0");
+            fail("Expected IllegalArgumentException not thrown");
+        } catch (IllegalArgumentException iae) {
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+        try {
+            assertEquals(0, openStream.readNBytes(0).length,
+                "readNBytes(0, false) != 0");
+            assertEquals(0, openStream.readNBytes(1).length,
+                "readNBytes(1, false) != 0");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testSkip() {
+        try {
+            assertEquals(0, openStream.skip(1), "skip() != 0");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "open")
+    public static void testTransferTo() {
+        try {
+            assertEquals(0, openStream.transferTo(new ByteArrayOutputStream(7)),
+                "transferTo() != 0");
+        } catch (IOException ioe) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testAvailableClosed() {
+        try {
+            closedStream.available();
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testReadClosed() {
+        try {
+            closedStream.read();
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testReadBIIClosed() {
+        try {
+            closedStream.read(new byte[1], 0, 1);
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testReadAllBytesClosed() {
+        try {
+            closedStream.readAllBytes();
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testReadNBytesClosed() {
+        try {
+            closedStream.readNBytes(new byte[1], 0, 1);
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testReadNBytesWithLengthClosed() {
+        try {
+            closedStream.readNBytes(1);
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testSkipClosed() {
+        try {
+            closedStream.skip(1);
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups = "closed")
+    public static void testTransferToClosed() {
+        try {
+            closedStream.transferTo(new ByteArrayOutputStream(7));
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+}
--- a/test/jdk/java/io/InputStream/ReadAllBytes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/io/InputStream/ReadAllBytes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -31,7 +31,7 @@
 
 /*
  * @test
- * @bug 8080835
+ * @bug 8080835 8193832
  * @library /test/lib
  * @build jdk.test.lib.RandomFactory
  * @run main ReadAllBytes
@@ -47,15 +47,11 @@
         test(new byte[]{});
         test(new byte[]{1, 2, 3});
         test(createRandomBytes(1024));
-        test(createRandomBytes((1 << 13) - 1));
-        test(createRandomBytes((1 << 13)));
-        test(createRandomBytes((1 << 13) + 1));
-        test(createRandomBytes((1 << 15) - 1));
-        test(createRandomBytes((1 << 15)));
-        test(createRandomBytes((1 << 15) + 1));
-        test(createRandomBytes((1 << 17) - 1));
-        test(createRandomBytes((1 << 17)));
-        test(createRandomBytes((1 << 17) + 1));
+        for (int shift : new int[] {13, 14, 15, 17}) {
+            for (int offset : new int[] {-1, 0, 1}) {
+                test(createRandomBytes((1 << shift) + offset));
+            }
+        }
     }
 
     static void test(byte[] expectedBytes) throws IOException {
--- a/test/jdk/java/io/InputStream/ReadNBytes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/io/InputStream/ReadNBytes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,7 +31,7 @@
 
 /*
  * @test
- * @bug 8080835
+ * @bug 8080835 8139206
  * @library /test/lib
  * @build jdk.test.lib.RandomFactory
  * @run main ReadNBytes
@@ -46,15 +46,19 @@
     public static void main(String[] args) throws IOException {
         test(new byte[]{1, 2, 3});
         test(createRandomBytes(1024));
-        test(createRandomBytes((1 << 13) - 1));
-        test(createRandomBytes((1 << 13)));
-        test(createRandomBytes((1 << 13) + 1));
-        test(createRandomBytes((1 << 15) - 1));
-        test(createRandomBytes((1 << 15)));
-        test(createRandomBytes((1 << 15) + 1));
-        test(createRandomBytes((1 << 17) - 1));
-        test(createRandomBytes((1 << 17)));
-        test(createRandomBytes((1 << 17) + 1));
+        for (int shift : new int[] {13, 15, 17}) {
+            for (int offset : new int[] {-1, 0, 1}) {
+                test(createRandomBytes((1 << shift) + offset));
+            }
+        }
+
+        test(-1);
+        test(0);
+        for (int shift : new int[] {13, 15, 17}) {
+            for (int offset : new int[] {-1, 0, 1}) {
+                test((1 << shift) + offset);
+            }
+        }
     }
 
     static void test(byte[] inputBytes) throws IOException {
@@ -91,6 +95,46 @@
         check(!in.isClosed(), "Stream unexpectedly closed");
     }
 
+    static void test(int max) throws IOException {
+        byte[] inputBytes = max <= 0 ? new byte[0] : createRandomBytes(max);
+        WrapperInputStream in =
+            new WrapperInputStream(new ByteArrayInputStream(inputBytes));
+
+        if (max < 0) {
+            try {
+                in.readNBytes(max);
+                check(false, "Expected IllegalArgumentException not thrown");
+            } catch (IllegalArgumentException iae) {
+                return;
+            }
+        } else if (max == 0) {
+            int x;
+            check((x = in.readNBytes(max).length) == 0,
+                  "Expected zero bytes, got " + x);
+            return;
+        }
+
+        int off = Math.toIntExact(in.skip(generator.nextInt(max/2)));
+        int len = generator.nextInt(max - 1 - off);
+        byte[] readBytes = in.readNBytes(len);
+        check(readBytes.length == len,
+              "Expected " + len + " bytes, got " + readBytes.length);
+        check(Arrays.equals(inputBytes, off, off + len, readBytes, 0, len),
+              "Expected[" + Arrays.copyOfRange(inputBytes, off, off + len) +
+              "], got:[" + readBytes + "]");
+
+        int remaining = max - (off + len);
+        readBytes = in.readNBytes(remaining);
+        check(readBytes.length == remaining,
+              "Expected " + remaining + "bytes, got " + readBytes.length);
+        check(Arrays.equals(inputBytes, off + len, max,
+              readBytes, 0, remaining),
+          "Expected[" + Arrays.copyOfRange(inputBytes, off + len, max) +
+          "], got:[" + readBytes + "]");
+
+        check(!in.isClosed(), "Stream unexpectedly closed");
+    }
+
     static byte[] createRandomBytes(int size) {
         byte[] bytes = new byte[size];
         generator.nextBytes(bytes);
--- a/test/jdk/java/io/InputStream/ReadParams.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/io/InputStream/ReadParams.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4008296 4008293 4190090 4193729
+ * @bug 4008296 4008293 4190090 4193729 4358774
  * @summary Check for correct handling of parameters to
  *          XXXXInputStream.read(b, off, len).
  *
@@ -197,6 +197,11 @@
         doTest1(ifs);
         ifs.close();
 
+        InputStream nis = InputStream.nullInputStream();
+        doTest(nis);
+        doTest1(nis);
+        nis.close();
+
         /* cleanup */
         fn.delete();
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/io/OutputStream/NullOutputStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+import java.io.IOException;
+import java.io.OutputStream;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.BeforeGroups;
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+/*
+ * @test
+ * @bug 4358774
+ * @run testng NullOutputStream
+ * @summary Check for expected behavior of OutputStream.nullOutputStream().
+ */
+public class NullOutputStream {
+    private static OutputStream openStream;
+    private static OutputStream closedStream;
+
+    @BeforeGroups(groups="open")
+    public static void openStream() {
+        openStream = OutputStream.nullOutputStream();
+    }
+
+    @BeforeGroups(groups="closed")
+    public static void openAndCloseStream() {
+        closedStream = OutputStream.nullOutputStream();
+        try {
+           closedStream.close();
+        } catch (IOException e) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @AfterGroups(groups="open")
+    public static void closeStream() {
+        try {
+            openStream.close();
+        } catch (IOException e) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups="open")
+    public static void testOpen() {
+        assertNotNull(openStream,
+            "OutputStream.nullOutputStream() returned null");
+    }
+
+    @Test(groups="open")
+    public static void testWrite() {
+        try {
+            openStream.write(62832);
+        } catch (IOException e) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups="open")
+    public static void testWriteBII() {
+        try {
+            openStream.write(new byte[] {(byte)6}, 0, 1);
+        } catch (Exception e) {
+            fail("Unexpected IOException");
+        }
+    }
+
+    @Test(groups="closed")
+    public static void testWriteClosed() {
+        try {
+            closedStream.write(62832);
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+
+    @Test(groups="closed")
+    public static void testWriteBIIClosed() {
+        try {
+            closedStream.write(new byte[] {(byte)6}, 0, 1);
+            fail("Expected IOException not thrown");
+        } catch (IOException e) {
+        }
+    }
+}
--- a/test/jdk/java/io/OutputStream/WriteParams.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/io/OutputStream/WriteParams.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 1267039 1267043 4193729
+ * @bug 1267039 1267043 4193729 4358774
  * @summary Check for correct handling of parameters to
  *          XXXXOutputStream.write(b, off, len).
  *
@@ -152,6 +152,11 @@
         doTest1(dfos);
         dfos.close();
 
+        OutputStream nos = OutputStream.nullOutputStream();
+        doTest(nos);
+        doTest1(nos);
+        nos.close();
+
         /* cleanup */
         fn.delete();
 
--- a/test/jdk/java/lang/Runtime/Version/Basic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/lang/Runtime/Version/Basic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 /*
  * @test
  * @summary Unit test for java.lang.Runtime.Version
- * @bug 8072379 8144062 8161236 8160956
+ * @bug 8072379 8144062 8161236 8160956 8194879
  */
 
 import java.lang.Runtime.Version;
@@ -115,6 +115,7 @@
         tryCatch("9-pre+-opt", IAE);
         tryCatch("1.4142+-",   IAE);
         tryCatch("2.9979+-%",  IAE);
+        tryCatch("10--ea",     IAE);
 
         //// Test for Runtime.version()
         testVersion();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/invoke/FilterArgumentsTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8194554
+ * @run testng/othervm test.java.lang.invoke.FilterArgumentsTest
+ */
+
+package test.java.lang.invoke;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
+import java.util.List;
+
+import static java.lang.invoke.MethodHandles.*;
+import static java.lang.invoke.MethodType.methodType;
+
+import org.testng.annotations.*;
+import static org.testng.Assert.*;
+
+public class FilterArgumentsTest {
+
+    @Test
+    public static void testFilterA_B_C() throws Throwable {
+        FilterTest test = new FilterTest(
+            filterArguments(MH_TEST, 0, MH_FILTER_A, MH_FILTER_B, MH_FILTER_C));
+        test.run(List.of("A", "B", "C"));
+    }
+
+    @Test
+    public static void testFilterA_B() throws Throwable {
+        FilterTest test = new FilterTest(
+            filterArguments(MH_TEST, 0, MH_FILTER_A, MH_FILTER_B));
+        test.run(List.of("A", "B"));
+    }
+
+    @Test
+    public static void testFilterB_C() throws Throwable {
+        FilterTest test = new FilterTest(
+            filterArguments(MH_TEST, 1, MH_FILTER_B, MH_FILTER_C));
+        test.run(List.of("B", "C"));
+    }
+
+    @Test
+    public static void testFilterB() throws Throwable {
+        FilterTest test = new FilterTest(filterArguments(MH_TEST, 1, MH_FILTER_B));
+        test.run(List.of("B"));
+    }
+
+    @Test
+    public static void testFilterC() throws Throwable {
+        FilterTest test = new FilterTest(filterArguments(MH_TEST, 2, MH_FILTER_C));
+        test.run(List.of("C"));
+    }
+
+    static class FilterTest {
+        static List<String> filters = new ArrayList<>();
+
+        final MethodHandle mh;
+        FilterTest(MethodHandle mh) {
+            this.mh = mh;
+        }
+
+        void run(List<String> expected) throws Throwable {
+            filters.clear();
+            assertEquals("x-0-z", (String)mh.invokeExact("x", 0, 'z'));
+            assertEquals(expected, filters);
+        }
+
+        static String filterA(String s) {
+            filters.add("A");
+            return s;
+        }
+
+        static int filterB(int value) {
+            filters.add("B");
+            return value;
+        }
+
+        static char filterC(char c) {
+            filters.add("C");
+            return c;
+        }
+
+        static String test(String s, int i, char c) {
+            return s + "-" + i + "-" + c;
+        }
+    }
+
+    static final MethodHandle MH_TEST;
+    static final MethodHandle MH_FILTER_A;
+    static final MethodHandle MH_FILTER_B;
+    static final MethodHandle MH_FILTER_C;
+    static final Lookup LOOKUP = MethodHandles.lookup();
+
+    static {
+        try {
+            MH_TEST = LOOKUP.findStatic(FilterTest.class, "test",
+                methodType(String.class, String.class, int.class, char.class));
+            MH_FILTER_A = LOOKUP.findStatic(FilterTest.class, "filterA",
+                methodType(String.class, String.class));
+            MH_FILTER_B = LOOKUP.findStatic(FilterTest.class, "filterB",
+                methodType(int.class, int.class));
+            MH_FILTER_C = LOOKUP.findStatic(FilterTest.class, "filterC",
+                methodType(char.class, char.class));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
--- a/test/jdk/java/lang/module/ClassFileVersionsTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/lang/module/ClassFileVersionsTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -54,6 +54,8 @@
                 { 53,   0,  Set.of(STATIC, TRANSITIVE) },
 
                 { 54,   0,  Set.of() },                      // JDK 10
+
+                { 55,   0,  Set.of()},                       // JDK 11
         };
     }
 
@@ -69,7 +71,11 @@
                 { 54,   0,  Set.of(TRANSITIVE) },
                 { 54,   0,  Set.of(STATIC, TRANSITIVE) },
 
-                { 55,   0,  Set.of()},                       // JDK 11
+                { 55,   0,  Set.of(STATIC) },                // JDK 11
+                { 55,   0,  Set.of(TRANSITIVE) },
+                { 55,   0,  Set.of(STATIC, TRANSITIVE) },
+
+                { 56,   0,  Set.of()},                       // JDK 12
         };
     }
 
--- a/test/jdk/java/lang/ref/ReferenceEnqueue.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/lang/ref/ReferenceEnqueue.java	Fri Feb 02 01:52:03 2018 +0000
@@ -25,7 +25,6 @@
  * @bug 4268317 8132306 8175797
  * @summary Test if Reference.enqueue() works properly with GC
  * @run main ReferenceEnqueue
- * @run main/othervm -Djdk.lang.ref.disableClearBeforeEnqueue=true ReferenceEnqueue
  */
 
 import java.lang.ref.*;
@@ -87,8 +86,6 @@
         final ReferenceQueue<Object> queue = new ReferenceQueue<>();
         final List<Reference<Object>> refs = new ArrayList<>();
         final int iterations = 1000;
-        final boolean disableClearBeforeEnqueue =
-            Boolean.getBoolean("jdk.lang.ref.disableClearBeforeEnqueue");
 
         ExplicitEnqueue() {
             this.refs.add(new SoftReference<>(new Object(), queue));
@@ -101,10 +98,7 @@
                 if (ref.enqueue() == false) {
                     throw new RuntimeException("Error: enqueue failed");
                 }
-                if (disableClearBeforeEnqueue && ref.get() == null) {
-                    throw new RuntimeException("Error: clearing should be disabled");
-                }
-                if (!disableClearBeforeEnqueue && ref.get() != null) {
+                if (ref.get() != null) {
                     throw new RuntimeException("Error: referent must be cleared");
                 }
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/Inet6Address/serialize/Inet6AddressSerTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamConstants;
+import static java.io.ObjectStreamConstants.STREAM_MAGIC;
+import static java.io.ObjectStreamConstants.TC_CLASSDESC;
+import static java.io.ObjectStreamConstants.TC_ENDBLOCKDATA;
+import static java.io.ObjectStreamConstants.TC_NULL;
+import static java.io.ObjectStreamConstants.TC_OBJECT;
+import java.net.Inet6Address;
+/**
+ * @test
+ * @bug 8194676
+ * @summary NullPointerException is thrown if ipaddress is not set.
+ * @run main Inet6AddressSerTest
+ */
+public class Inet6AddressSerTest implements ObjectStreamConstants {
+
+    static class PayloadTest {
+
+        private static byte[] serialize(String className) throws IOException {
+            try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                    DataOutputStream dos = new DataOutputStream(baos)) {
+                // stream headers
+                dos.writeShort(STREAM_MAGIC);
+                dos.writeShort(5); // version
+
+                // Inet6Address
+                dos.writeByte(TC_OBJECT);
+                dos.writeByte(TC_CLASSDESC);
+                dos.writeUTF(className);
+                dos.writeLong(6880410070516793377L);
+                dos.writeByte(2);
+                dos.writeShort(0);
+                dos.writeByte(TC_ENDBLOCKDATA);
+                dos.writeByte(TC_NULL);
+                return baos.toByteArray();
+            }
+        }
+
+        private static Object deserialize(final byte[] buffer)
+                throws IOException, ClassNotFoundException {
+            try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
+                return ois.readObject();
+            }
+        }
+
+        void test(String className) throws IOException, ClassNotFoundException {
+            deserialize(serialize(className));
+        }
+    }
+
+    public static void main(String[] args) throws IOException, ClassNotFoundException {
+        try {
+            new PayloadTest().test(Inet6Address.class.getName());
+            throw new RuntimeException("Expected exception not raised");
+        } catch (InvalidObjectException ioe) {
+            if (ioe.getMessage().contains("invalid address length")) {
+                System.out.println(String.format("Got expected exception: %s", ioe));
+            } else {
+                throw new RuntimeException("Expected exception not raised");
+            }
+        } catch (RuntimeException re) {
+            throw new RuntimeException("Expected exception not raised");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/nio/Buffer/EqualsCompareTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,686 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ */
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.CharBuffer;
+import java.nio.DoubleBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.ShortBuffer;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.LongFunction;
+import java.util.stream.IntStream;
+
+/*
+ * @test
+ * @bug 8193085
+ * @summary tests for buffer equals and compare
+ * @run testng EqualsCompareTest
+ */
+
+public class EqualsCompareTest {
+
+    // Maximum width in bits
+    static final int MAX_WIDTH = 512;
+
+    static final Map<Class, Integer> typeToWidth;
+
+    static {
+        typeToWidth = new HashMap<>();
+        typeToWidth.put(byte.class, Byte.SIZE);
+        typeToWidth.put(short.class, Short.SIZE);
+        typeToWidth.put(char.class, Character.SIZE);
+        typeToWidth.put(int.class, Integer.SIZE);
+        typeToWidth.put(long.class, Long.SIZE);
+        typeToWidth.put(float.class, Float.SIZE);
+        typeToWidth.put(double.class, Double.SIZE);
+    }
+
+    static int arraySizeFor(Class<?> type) {
+        assert type.isPrimitive();
+        return 4 * MAX_WIDTH / typeToWidth.get(type);
+    }
+
+    enum BufferKind {
+        HEAP,
+        HEAP_VIEW,
+        DIRECT;
+    }
+
+    static abstract class BufferType<T extends Buffer, E> {
+        final BufferKind k;
+        final Class<?> bufferType;
+        final Class<?> elementType;
+
+        final MethodHandle eq;
+        final MethodHandle cmp;
+
+        final MethodHandle getter;
+        final MethodHandle setter;
+
+        BufferType(BufferKind k, Class<T> bufferType, Class<?> elementType) {
+            this.k = k;
+            this.bufferType = bufferType;
+            this.elementType = elementType;
+
+            var lookup = MethodHandles.lookup();
+            try {
+                eq = lookup.findVirtual(bufferType, "equals", MethodType.methodType(boolean.class, Object.class));
+                cmp = lookup.findVirtual(bufferType, "compareTo", MethodType.methodType(int.class, bufferType));
+
+                getter = lookup.findVirtual(bufferType, "get", MethodType.methodType(elementType, int.class));
+                setter = lookup.findVirtual(bufferType, "put", MethodType.methodType(bufferType, int.class, elementType));
+            }
+            catch (Exception e) {
+                throw new AssertionError(e);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return bufferType.getName() + " " + k;
+        }
+
+        T construct(int length) {
+            return construct(length, ByteOrder.BIG_ENDIAN);
+        }
+
+        abstract T construct(int length, ByteOrder bo);
+
+        @SuppressWarnings("unchecked")
+        T slice(T a, int from, int to) {
+            return (T) a.position(from).limit(to).slice();
+        }
+
+        @SuppressWarnings("unchecked")
+        E get(T a, int i) {
+            try {
+                return (E) getter.invoke(a, i);
+            }
+            catch (RuntimeException | Error e) {
+                throw e;
+            }
+            catch (Throwable t) {
+                throw new Error(t);
+            }
+        }
+
+        void set(T a, int i, Object v) {
+            try {
+                setter.invoke(a, i, convert(v));
+            }
+            catch (RuntimeException | Error e) {
+                throw e;
+            }
+            catch (Throwable t) {
+                throw new Error(t);
+            }
+        }
+
+        abstract Object convert(Object o);
+
+        boolean equals(T a, T b) {
+            try {
+                return (boolean) eq.invoke(a, b);
+            }
+            catch (RuntimeException | Error e) {
+                throw e;
+            }
+            catch (Throwable t) {
+                throw new Error(t);
+            }
+        }
+
+        int compare(T a, T b) {
+            try {
+                return (int) cmp.invoke(a, b);
+            }
+            catch (RuntimeException | Error e) {
+                throw e;
+            }
+            catch (Throwable t) {
+                throw new Error(t);
+            }
+        }
+
+        boolean pairWiseEquals(T a, T b) {
+            if (a.remaining() != b.remaining())
+                return false;
+            int p = a.position();
+            for (int i = a.limit() - 1, j = b.limit() - 1; i >= p; i--, j--)
+                if (!get(a, i).equals(get(b, j)))
+                    return false;
+            return true;
+        }
+
+        static class Bytes extends BufferType<ByteBuffer, Byte> {
+            Bytes(BufferKind k) {
+                super(k, ByteBuffer.class, byte.class);
+            }
+
+            @Override
+            ByteBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length).order(bo);
+                    default:
+                    case HEAP_VIEW:
+                    case HEAP:
+                        return ByteBuffer.allocate(length).order(bo);
+                }
+            }
+
+            @Override
+            Object convert(Object o) {
+                return o instanceof Integer
+                       ? ((Integer) o).byteValue()
+                       : o;
+            }
+        }
+
+        static class Chars extends BufferType<CharBuffer, Character> {
+            Chars(BufferKind k) {
+                super(k, CharBuffer.class, char.class);
+            }
+
+            @Override
+            CharBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length * Character.BYTES).
+                                order(bo).
+                                asCharBuffer();
+                    case HEAP_VIEW:
+                        return ByteBuffer.allocate(length * Character.BYTES).
+                                order(bo).
+                                asCharBuffer();
+                    default:
+                    case HEAP:
+                        return CharBuffer.allocate(length);
+                }
+            }
+
+            @Override
+            Object convert(Object o) {
+                return o instanceof Integer
+                       ? (char) ((Integer) o).intValue()
+                       : o;
+            }
+
+            CharBuffer transformToStringBuffer(CharBuffer c) {
+                char[] chars = new char[c.remaining()];
+                c.get(chars);
+                return CharBuffer.wrap(new String(chars));
+            }
+        }
+
+        static class Shorts extends BufferType<ShortBuffer, Short> {
+            Shorts(BufferKind k) {
+                super(k, ShortBuffer.class, short.class);
+            }
+
+            @Override
+            ShortBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length * Short.BYTES).
+                                order(bo).
+                                asShortBuffer();
+                    case HEAP_VIEW:
+                        return ByteBuffer.allocate(length * Short.BYTES).
+                                order(bo).
+                                asShortBuffer();
+                    default:
+                    case HEAP:
+                        return ShortBuffer.allocate(length);
+                }
+            }
+
+            @Override
+            Object convert(Object o) {
+                return o instanceof Integer
+                       ? ((Integer) o).shortValue()
+                       : o;
+            }
+        }
+
+        static class Ints extends BufferType<IntBuffer, Integer> {
+            Ints(BufferKind k) {
+                super(k, IntBuffer.class, int.class);
+            }
+
+            @Override
+            IntBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length * Integer.BYTES).
+                                order(bo).
+                                asIntBuffer();
+                    case HEAP_VIEW:
+                        return ByteBuffer.allocate(length * Integer.BYTES).
+                                order(bo).
+                                asIntBuffer();
+                    default:
+                    case HEAP:
+                        return IntBuffer.allocate(length);
+                }
+            }
+
+            Object convert(Object o) {
+                return o;
+            }
+        }
+
+        static class Floats extends BufferType<FloatBuffer, Float> {
+            Floats(BufferKind k) {
+                super(k, FloatBuffer.class, float.class);
+            }
+
+            @Override
+            FloatBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length * Float.BYTES).
+                                order(bo).
+                                asFloatBuffer();
+                    case HEAP_VIEW:
+                        return ByteBuffer.allocate(length * Float.BYTES).
+                                order(bo).
+                                asFloatBuffer();
+                    default:
+                    case HEAP:
+                        return FloatBuffer.allocate(length);
+                }
+            }
+
+            @Override
+            Object convert(Object o) {
+                return o instanceof Integer
+                       ? ((Integer) o).floatValue()
+                       : o;
+            }
+
+            @Override
+            boolean pairWiseEquals(FloatBuffer a, FloatBuffer b) {
+                if (a.remaining() != b.remaining())
+                    return false;
+                int p = a.position();
+                for (int i = a.limit() - 1, j = b.limit() - 1; i >= p; i--, j--) {
+                    float av = a.get(i);
+                    float bv = b.get(j);
+                    if (av != bv && (!Float.isNaN(av) || !Float.isNaN(bv)))
+                        return false;
+                }
+                return true;
+            }
+        }
+
+        static class Longs extends BufferType<LongBuffer, Long> {
+            Longs(BufferKind k) {
+                super(k, LongBuffer.class, long.class);
+            }
+
+            @Override
+            LongBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length * Long.BYTES).
+                                order(bo).
+                                asLongBuffer();
+                    case HEAP_VIEW:
+                        return ByteBuffer.allocate(length * Long.BYTES).
+                                order(bo).
+                                asLongBuffer();
+                    default:
+                    case HEAP:
+                        return LongBuffer.allocate(length);
+                }
+            }
+
+            @Override
+            Object convert(Object o) {
+                return o instanceof Integer
+                       ? ((Integer) o).longValue()
+                       : o;
+            }
+        }
+
+        static class Doubles extends BufferType<DoubleBuffer, Double> {
+            Doubles(BufferKind k) {
+                super(k, DoubleBuffer.class, double.class);
+            }
+
+            @Override
+            DoubleBuffer construct(int length, ByteOrder bo) {
+                switch (k) {
+                    case DIRECT:
+                        return ByteBuffer.allocateDirect(length * Double.BYTES).
+                                order(bo).
+                                asDoubleBuffer();
+                    case HEAP_VIEW:
+                        return ByteBuffer.allocate(length * Double.BYTES).
+                                order(bo).
+                                asDoubleBuffer();
+                    default:
+                    case HEAP:
+                        return DoubleBuffer.allocate(length);
+                }
+            }
+
+            @Override
+            Object convert(Object o) {
+                return o instanceof Integer
+                       ? ((Integer) o).doubleValue()
+                       : o;
+            }
+
+            @Override
+            boolean pairWiseEquals(DoubleBuffer a, DoubleBuffer b) {
+                if (a.remaining() != b.remaining())
+                    return false;
+                int p = a.position();
+                for (int i = a.limit() - 1, j = b.limit() - 1; i >= p; i--, j--) {
+                    double av = a.get(i);
+                    double bv = b.get(j);
+                    if (av != bv && (!Double.isNaN(av) || !Double.isNaN(bv)))
+                        return false;
+                }
+                return true;
+            }
+        }
+    }
+
+
+    static Object[][] bufferTypes;
+
+    @DataProvider
+    public static Object[][] bufferTypesProvider() {
+        if (bufferTypes == null) {
+            bufferTypes = new Object[][]{
+                    {new BufferType.Bytes(BufferKind.HEAP)},
+                    {new BufferType.Bytes(BufferKind.DIRECT)},
+                    {new BufferType.Chars(BufferKind.HEAP)},
+                    {new BufferType.Chars(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Chars(BufferKind.DIRECT)},
+                    {new BufferType.Shorts(BufferKind.HEAP)},
+                    {new BufferType.Shorts(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Shorts(BufferKind.DIRECT)},
+                    {new BufferType.Ints(BufferKind.HEAP)},
+                    {new BufferType.Ints(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Ints(BufferKind.DIRECT)},
+                    {new BufferType.Floats(BufferKind.HEAP)},
+                    {new BufferType.Floats(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Floats(BufferKind.DIRECT)},
+                    {new BufferType.Longs(BufferKind.HEAP)},
+                    {new BufferType.Longs(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Longs(BufferKind.DIRECT)},
+                    {new BufferType.Doubles(BufferKind.HEAP)},
+                    {new BufferType.Doubles(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Doubles(BufferKind.DIRECT)},
+            };
+        }
+        return bufferTypes;
+    }
+
+
+    static Object[][] floatbufferTypes;
+
+    @DataProvider
+    public static Object[][] floatBufferTypesProvider() {
+        if (floatbufferTypes == null) {
+            LongFunction<Object> bTof = rb -> Float.intBitsToFloat((int) rb);
+            LongFunction<Object> bToD = Double::longBitsToDouble;
+
+            floatbufferTypes = new Object[][]{
+                    // canonical and non-canonical NaNs
+                    // If conversion is a signalling NaN it may be subject to conversion to a
+                    // quiet NaN on some processors, even if a copy is performed
+                    // The tests assume that if conversion occurs it does not convert to the
+                    // canonical NaN
+                    new Object[]{new BufferType.Floats(BufferKind.HEAP), 0x7fc00000L, 0x7f800001L, bTof},
+                    new Object[]{new BufferType.Floats(BufferKind.HEAP_VIEW), 0x7fc00000L, 0x7f800001L, bTof},
+                    new Object[]{new BufferType.Floats(BufferKind.DIRECT), 0x7fc00000L, 0x7f800001L, bTof},
+                    new Object[]{new BufferType.Doubles(BufferKind.HEAP), 0x7ff8000000000000L, 0x7ff0000000000001L, bToD},
+                    new Object[]{new BufferType.Doubles(BufferKind.HEAP_VIEW), 0x7ff8000000000000L, 0x7ff0000000000001L, bToD},
+                    new Object[]{new BufferType.Doubles(BufferKind.DIRECT), 0x7ff8000000000000L, 0x7ff0000000000001L, bToD},
+
+                    // +0.0 and -0.0
+                    new Object[]{new BufferType.Floats(BufferKind.HEAP), 0x0L, 0x80000000L, bTof},
+                    new Object[]{new BufferType.Floats(BufferKind.HEAP_VIEW), 0x0L, 0x80000000L, bTof},
+                    new Object[]{new BufferType.Floats(BufferKind.DIRECT), 0x0L, 0x80000000L, bTof},
+                    new Object[]{new BufferType.Doubles(BufferKind.HEAP), 0x0L, 0x8000000000000000L, bToD},
+                    new Object[]{new BufferType.Doubles(BufferKind.HEAP_VIEW), 0x0L, 0x8000000000000000L, bToD},
+                    new Object[]{new BufferType.Doubles(BufferKind.DIRECT), 0x0L, 0x8000000000000000L, bToD},
+            };
+        }
+        return floatbufferTypes;
+    }
+
+
+    static Object[][] charBufferTypes;
+
+    @DataProvider
+    public static Object[][] charBufferTypesProvider() {
+        if (charBufferTypes == null) {
+            charBufferTypes = new Object[][]{
+                    {new BufferType.Chars(BufferKind.HEAP)},
+                    {new BufferType.Chars(BufferKind.HEAP_VIEW)},
+                    {new BufferType.Chars(BufferKind.DIRECT)},
+            };
+        }
+        return charBufferTypes;
+    }
+
+
+    // Tests all primitive buffers
+    @Test(dataProvider = "bufferTypesProvider")
+    <E>
+    void testBuffers(BufferType<Buffer, E> bufferType) {
+        // Test with buffers of the same byte order (BE)
+        BiFunction<BufferType<Buffer, E>, Integer, Buffer> constructor = (at, s) -> {
+            Buffer a = at.construct(s);
+            for (int x = 0; x < s; x++) {
+                at.set(a, x, x % 8);
+            }
+            return a;
+        };
+
+        testBufferType(bufferType, constructor, constructor);
+
+        // Test with buffers of different byte order
+        if (bufferType.elementType != byte.class &&
+            (bufferType.k == BufferKind.HEAP_VIEW ||
+             bufferType.k == BufferKind.DIRECT)) {
+
+            BiFunction<BufferType<Buffer, E>, Integer, Buffer> leConstructor = (at, s) -> {
+                Buffer a = at.construct(s, ByteOrder.LITTLE_ENDIAN);
+                for (int x = 0; x < s; x++) {
+                    at.set(a, x, x % 8);
+                }
+                return a;
+            };
+            testBufferType(bufferType, constructor, leConstructor);
+        }
+    }
+
+    // Tests float and double buffers with edge-case values (NaN, -0.0, +0.0)
+    @Test(dataProvider = "floatBufferTypesProvider")
+    public void testFloatBuffers(
+            BufferType<Buffer, Float> bufferType,
+            long rawBitsA, long rawBitsB,
+            LongFunction<Object> bitsToFloat) {
+        Object av = bitsToFloat.apply(rawBitsA);
+        Object bv = bitsToFloat.apply(rawBitsB);
+
+        BiFunction<BufferType<Buffer, Float>, Integer, Buffer> allAs = (at, s) -> {
+            Buffer b = at.construct(s);
+            for (int x = 0; x < s; x++) {
+                at.set(b, x, av);
+            }
+            return b;
+        };
+
+        BiFunction<BufferType<Buffer, Float>, Integer, Buffer> allBs = (at, s) -> {
+            Buffer b = at.construct(s);
+            for (int x = 0; x < s; x++) {
+                at.set(b, x, bv);
+            }
+            return b;
+        };
+
+        BiFunction<BufferType<Buffer, Float>, Integer, Buffer> halfBs = (at, s) -> {
+            Buffer b = at.construct(s);
+            for (int x = 0; x < s / 2; x++) {
+                at.set(b, x, bv);
+            }
+            for (int x = s / 2; x < s; x++) {
+                at.set(b, x, 1);
+            }
+            return b;
+        };
+
+        // Sanity check
+        int size = arraySizeFor(bufferType.elementType);
+        Assert.assertTrue(bufferType.pairWiseEquals(allAs.apply(bufferType, size),
+                                                    allBs.apply(bufferType, size)));
+        Assert.assertTrue(bufferType.equals(allAs.apply(bufferType, size),
+                                            allBs.apply(bufferType, size)));
+
+        testBufferType(bufferType, allAs, allBs);
+        testBufferType(bufferType, allAs, halfBs);
+    }
+
+    // Tests CharBuffer for region sources and CharSequence sources
+    @Test(dataProvider = "charBufferTypesProvider")
+    public void testCharBuffers(BufferType.Chars charBufferType) {
+
+        BiFunction<BufferType.Chars, Integer, CharBuffer> constructor = (at, s) -> {
+            CharBuffer a = at.construct(s);
+            for (int x = 0; x < s; x++) {
+                at.set(a, x, x % 8);
+            }
+            return a;
+        };
+
+        BiFunction<BufferType.Chars, Integer, CharBuffer> constructorX = constructor.
+                andThen(charBufferType::transformToStringBuffer);
+
+        testBufferType(charBufferType, constructor, constructorX);
+    }
+
+
+    <B extends Buffer, E, BT extends BufferType<B, E>>
+    void testBufferType(BT bt,
+                        BiFunction<BT, Integer, B> aConstructor,
+                        BiFunction<BT, Integer, B> bConstructor) {
+        int n = arraySizeFor(bt.elementType);
+
+        for (int s : ranges(0, n)) {
+            B a = aConstructor.apply(bt, s);
+            B b = bConstructor.apply(bt, s);
+
+            for (int aFrom : ranges(0, s)) {
+                for (int aTo : ranges(aFrom, s)) {
+                    int aLength = aTo - aFrom;
+
+                    B as = aLength != s
+                           ? bt.slice(a, aFrom, aTo)
+                           : a;
+
+                    for (int bFrom : ranges(0, s)) {
+                        for (int bTo : ranges(bFrom, s)) {
+                            int bLength = bTo - bFrom;
+
+                            B bs = bLength != s
+                                   ? bt.slice(b, bFrom, bTo)
+                                   : b;
+
+                            boolean eq = bt.pairWiseEquals(as, bs);
+                            Assert.assertEquals(bt.equals(as, bs), eq);
+                            Assert.assertEquals(bt.equals(bs, as), eq);
+                            if (eq) {
+                                Assert.assertEquals(bt.compare(as, bs), 0);
+                                Assert.assertEquals(bt.compare(bs, as), 0);
+                            }
+                            else {
+                                int aCb = bt.compare(as, bs);
+                                int bCa = bt.compare(bs, as);
+                                int v = Integer.signum(aCb) * Integer.signum(bCa);
+                                Assert.assertTrue(v == -1);
+                            }
+                        }
+                    }
+
+                    if (aLength > 0 && !a.isReadOnly()) {
+                        for (int i = aFrom; i < aTo; i++) {
+                            B c = aConstructor.apply(bt, a.capacity());
+                            B cs = aLength != s
+                                   ? bt.slice(c, aFrom, aTo)
+                                   : c;
+
+                            // Create common prefix with a length of i - aFrom
+                            bt.set(c, i, -1);
+
+                            Assert.assertFalse(bt.equals(c, a));
+
+                            int cCa = bt.compare(cs, as);
+                            int aCc = bt.compare(as, cs);
+                            int v = Integer.signum(cCa) * Integer.signum(aCc);
+                            Assert.assertTrue(v == -1);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    static int[] ranges(int from, int to) {
+        int width = to - from;
+        switch (width) {
+            case 0:
+                return new int[]{};
+            case 1:
+                return new int[]{from, to};
+            case 2:
+                return new int[]{from, from + 1, to};
+            case 3:
+                return new int[]{from, from + 1, from + 2, to};
+            default:
+                return IntStream.of(from, from + 1, from + 2, to / 2 - 1, to / 2, to / 2 + 1, to - 2, to - 1, to)
+                        .filter(i -> i >= from && i <= to)
+                        .distinct().toArray();
+        }
+    }
+}
--- a/test/jdk/java/rmi/testlibrary/RMID.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/rmi/testlibrary/RMID.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,11 +44,12 @@
     private static final long TIMEOUT_DESTROY_MS  = 10_000L;
     private static final long STARTTIME_MS        = 15_000L;
     private static final long POLLTIME_MS         = 100L;
+    private static final long TIMEOUT_BASE        = 240_000L;
 
     // when restart rmid, it may take more time than usual because of
     // "port in use" by a possible interloper (check JDK-8168975),
-    // so need to set a longer timeout for restart.
-    private static long restartTimeout;
+    // so need to set a longer timeout than STARTTIME_MS for restart.
+    private static final long RESTART_TIMEOUT = (long)(TIMEOUT_BASE * 0.9);
     // Same reason to inheritedChannel in RMIDSelectorProvider.
     // Put it here rather than in RMIDSelectorProvider to adjust
     // both timeout values together.
@@ -264,8 +265,7 @@
     {
         super(classname, options, args, out, err);
         this.port = port;
-        long waitTime = (long)(240_000 * TestLibrary.getTimeoutFactor());
-        restartTimeout = (long)(waitTime * 0.9);
+        long waitTime = (long)(TIMEOUT_BASE * TestLibrary.getTimeoutFactor());
         inheritedChannelTimeout = (long)(waitTime * 0.8);
     }
 
@@ -406,7 +406,7 @@
         options = makeOptions(port, true, true);
         args = makeArgs();
 
-        start(restartTimeout);
+        start(RESTART_TIMEOUT);
     }
 
     /**
--- a/test/jdk/java/rmi/testlibrary/TestLibrary.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/rmi/testlibrary/TestLibrary.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -186,9 +186,7 @@
      * Maximum timeout (before multipliers are applied) is one hour.
      */
     public static long computeDeadline(long timestamp, long timeout) {
-        final long MAX_TIMEOUT_MS = 3_600_000L;
-
-        if (timeout < 0L || timeout > MAX_TIMEOUT_MS) {
+        if (timeout < 0L) {
             throw new IllegalArgumentException("timeout " + timeout + "ms out of range");
         }
 
--- a/test/jdk/java/security/Provider/ProviderVersionCheck.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/security/Provider/ProviderVersionCheck.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
 
 /*
  * @test
- * @bug 8030823 8130696
+ * @bug 8030823 8130696 8196414
  * @run main/othervm ProviderVersionCheck
  * @summary Verify all providers in the default Providers list have the proper
  * version for the release
@@ -42,7 +42,8 @@
 
         for (Provider p: Security.getProviders()) {
             System.out.print(p.getName() + " ");
-            if (p.getVersion() != 10.0d) {
+            String specVersion = System.getProperty("java.specification.version");
+            if (p.getVersion() != Double.parseDouble(specVersion)) {
                 System.out.println("failed. " + "Version received was " +
                         p.getVersion());
                 failure = true;
--- a/test/jdk/java/time/test/java/time/TestLocalDate.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/time/test/java/time/TestLocalDate.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,6 +67,7 @@
 import java.time.LocalDate;
 import java.time.Month;
 import java.time.temporal.ChronoUnit;
+import java.time.temporal.IsoFields;
 
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
@@ -444,4 +445,40 @@
         }
     }
 
+    @DataProvider(name="quarterYearsToAdd")
+    Object[][] provider_quarterYearsToAdd() {
+        return new Object[][] {
+            {Long.valueOf(-1000000000)},
+            {Long.valueOf(-256)},
+            {Long.valueOf(-255)},
+            {Long.valueOf(-1)},
+            {Long.valueOf(0)},
+            {Long.valueOf(1)},
+            {Long.valueOf(255)},
+            {Long.valueOf(256)},
+            {Long.valueOf(1000000000)},
+        };
+    }
+
+    @Test(dataProvider="quarterYearsToAdd")
+    public void test_plus_QuarterYears(long quarterYears) {
+        LocalDate t0 = TEST_2007_07_15
+                .plus(quarterYears, IsoFields.QUARTER_YEARS);
+        LocalDate t1 = TEST_2007_07_15
+                .plus(quarterYears, ChronoUnit.MONTHS)
+                .plus(quarterYears, ChronoUnit.MONTHS)
+                .plus(quarterYears, ChronoUnit.MONTHS);
+        assertEquals(t0, t1);
+    }
+
+    @Test(dataProvider="quarterYearsToAdd")
+    public void test_minus_QuarterYears(long quarterYears) {
+        LocalDate t0 = TEST_2007_07_15
+                .minus(quarterYears, IsoFields.QUARTER_YEARS);
+        LocalDate t1 = TEST_2007_07_15
+                .minus(quarterYears, ChronoUnit.MONTHS)
+                .minus(quarterYears, ChronoUnit.MONTHS)
+                .minus(quarterYears, ChronoUnit.MONTHS);
+        assertEquals(t0, t1);
+    }
 }
--- a/test/jdk/java/util/AbstractCollection/ToString.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractCollection/ToString.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,8 +29,13 @@
  * @author Josh Bloch, Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.AbstractCollection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Vector;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 public class ToString {
     private static void realMain(String[] args) {
--- a/test/jdk/java/util/AbstractList/CheckForComodification.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractList/CheckForComodification.java	Fri Feb 02 01:52:03 2018 +0000
@@ -30,7 +30,9 @@
  * @ignore Bug fix temporarily removed as it uncovered other bugs (4992226)
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+import java.util.List;
 
 public class CheckForComodification {
     private static final int LENGTH = 10;
--- a/test/jdk/java/util/AbstractList/FailFastIterator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractList/FailFastIterator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,10 @@
  *          *after* the set/add/remove operations were performed.
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+import java.util.List;
+import java.util.ListIterator;
 
 public class FailFastIterator {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/AbstractList/HasNextAfterException.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractList/HasNextAfterException.java	Fri Feb 02 01:52:03 2018 +0000
@@ -30,7 +30,10 @@
  * @author Konstantin Kladko
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
 
 public class HasNextAfterException {
     public static void main(String[] args) {
--- a/test/jdk/java/util/AbstractMap/AbstractMapClone.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractMap/AbstractMapClone.java	Fri Feb 02 01:52:03 2018 +0000
@@ -30,7 +30,10 @@
  * @author Konstantin Kladko
  */
 
-import java.util.*;
+import java.util.AbstractMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 
 public class AbstractMapClone extends AbstractMap implements Cloneable {
 
--- a/test/jdk/java/util/AbstractMap/Equals.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractMap/Equals.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,12 @@
  * questions.
  */
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 /**
  * @test
--- a/test/jdk/java/util/AbstractMap/SimpleEntries.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractMap/SimpleEntries.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,9 +28,10 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
-import static java.util.AbstractMap.*;
+import java.util.Map;
+
+import static java.util.AbstractMap.SimpleEntry;
+import static java.util.AbstractMap.SimpleImmutableEntry;
 
 public class SimpleEntries {
     private static String k = "foo";
--- a/test/jdk/java/util/AbstractMap/ToString.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractMap/ToString.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,8 @@
  * @author Josh Bloch
  */
 
-import java.util.*;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 public class ToString {
     public static void main(String[] args) {
--- a/test/jdk/java/util/AbstractSequentialList/AddAll.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/AbstractSequentialList/AddAll.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,11 @@
  * @summary AddAll(int, Collection) intersperses the Collection with this List.
  */
 
-import java.util.*;
+import java.util.AbstractSequentialList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ListIterator;
 
 public class AddAll {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/ArrayList/AddAll.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/ArrayList/AddAll.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,12 @@
  * @author  Josh Bloch
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import java.util.WeakHashMap;
 
 public class AddAll {
     public static void main(String[] args) {
--- a/test/jdk/java/util/ArrayList/Bug6533203.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/ArrayList/Bug6533203.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,9 @@
  * @summary AbstractList.ListItr.add might corrupt iterator state if enclosing add throws
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
 
 @SuppressWarnings({"serial","unchecked"})
 public class Bug6533203 {
--- a/test/jdk/java/util/ArrayList/IteratorMicroBenchmark.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/ArrayList/IteratorMicroBenchmark.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,9 +27,12 @@
  * @run main IteratorMicroBenchmark iterations=1 size=8 warmup=0
  */
 
+import static java.util.stream.Collectors.toList;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
@@ -165,16 +168,11 @@
     }
 
     private static Job[] filter(Pattern filter, Job[] jobs) {
-        if (filter == null) return jobs;
-        Job[] newJobs = new Job[jobs.length];
-        int n = 0;
-        for (Job job : jobs)
-            if (filter.matcher(job.name()).find())
-                newJobs[n++] = job;
-        // Arrays.copyOf not available in JDK 5
-        Job[] ret = new Job[n];
-        System.arraycopy(newJobs, 0, ret, 0, n);
-        return ret;
+        return (filter == null) ? jobs
+            : Arrays.stream(jobs)
+            .filter(job -> filter.matcher(job.name()).find())
+            .collect(toList())
+            .toArray(new Job[0]);
     }
 
     private static void deoptimize(int sum) {
@@ -644,6 +642,24 @@
                         for (Object o : a)
                             sum[0] += (Integer) o;
                         check.sum(sum[0]);}}},
+            new Job("ArrayList subList .toArray()") {
+                public void work() throws Throwable {
+                    int[] sum = new int[1];
+                    for (int i = 0; i < iterations; i++) {
+                        sum[0] = 0;
+                        for (Object o : asSubList(al).toArray())
+                            sum[0] += (Integer) o;
+                        check.sum(sum[0]);}}},
+            new Job("ArrayList subList .toArray(a)") {
+                public void work() throws Throwable {
+                    Integer[] a = new Integer[size];
+                    int[] sum = new int[1];
+                    for (int i = 0; i < iterations; i++) {
+                        sum[0] = 0;
+                        asSubList(al).toArray(a);
+                        for (Object o : a)
+                            sum[0] += (Integer) o;
+                        check.sum(sum[0]);}}},
             new Job("ArrayDeque.toArray()") {
                 public void work() throws Throwable {
                     int[] sum = new int[1];
--- a/test/jdk/java/util/ArrayList/RangeCheckMicroBenchmark.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/ArrayList/RangeCheckMicroBenchmark.java	Fri Feb 02 01:52:03 2018 +0000
@@ -32,9 +32,14 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
 import java.util.regex.Pattern;
-import java.util.concurrent.CountDownLatch;
+
+import static java.util.stream.Collectors.toList;
 
 public class RangeCheckMicroBenchmark {
     abstract static class Job {
@@ -133,16 +138,11 @@
     }
 
     private static Job[] filter(Pattern filter, Job[] jobs) {
-        if (filter == null) return jobs;
-        Job[] newJobs = new Job[jobs.length];
-        int n = 0;
-        for (Job job : jobs)
-            if (filter.matcher(job.name()).find())
-                newJobs[n++] = job;
-        // Arrays.copyOf not available in JDK 5
-        Job[] ret = new Job[n];
-        System.arraycopy(newJobs, 0, ret, 0, n);
-        return ret;
+        return (filter == null) ? jobs
+            : Arrays.stream(jobs)
+            .filter(job -> filter.matcher(job.name()).find())
+            .collect(toList())
+            .toArray(new Job[0]);
     }
 
     private static void deoptimize(ArrayList<Integer> list) {
--- a/test/jdk/java/util/Base64/Base64GetEncoderTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Base64/Base64GetEncoderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -34,23 +34,23 @@
 
 /**
  * @test
- * @bug 8007799
+ * @bug 8007799 8176379
  * @summary test Encoder with linemax == 0, line separator should not appear in encoded data
  */
 
 public class Base64GetEncoderTest {
 
     public static void main(String args[]) throws Throwable {
-        final Base64.Encoder encoder = Base64.getMimeEncoder(0, "$$$".getBytes(US_ASCII));
 
-        testEncodeToString(encoder);
+        for (int maxlen = -4; maxlen < 4; maxlen++) {
+
+            final Base64.Encoder encoder = Base64.getMimeEncoder(maxlen, "$$$".getBytes(US_ASCII));
 
-        testWrapEncode1(encoder);
-
-        testEncodeToStringWithLongInputData(encoder);
-
-        testWrapEncode2(encoder);
-
+            testEncodeToString(encoder);
+            testWrapEncode1(encoder);
+            testEncodeToStringWithLongInputData(encoder);
+            testWrapEncode2(encoder);
+        }
     }
 
     private static void testWrapEncode2(final Base64.Encoder encoder)
--- a/test/jdk/java/util/Base64/TestBase64.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Base64/TestBase64.java	Fri Feb 02 01:52:03 2018 +0000
@@ -24,7 +24,7 @@
 /**
  * @test
  * @bug 4235519 8004212 8005394 8007298 8006295 8006315 8006530 8007379 8008925
- *      8014217 8025003 8026330 8028397 8129544 8165243
+ *      8014217 8025003 8026330 8028397 8129544 8165243 8176379
  * @summary tests java.util.Base64
  * @library /test/lib
  * @build jdk.test.lib.RandomFactory
@@ -78,6 +78,21 @@
                  numRuns, numBytes);
         }
 
+        // test mime case with < 4 length
+        for (int len = 0; len < 4; len++) {
+            test(Base64.getMimeEncoder(len, nl_1),
+                 Base64.getMimeDecoder(),
+                 numRuns, numBytes);
+
+            test(Base64.getMimeEncoder(len, nl_2),
+                 Base64.getMimeDecoder(),
+                 numRuns, numBytes);
+
+            test(Base64.getMimeEncoder(len, nl_3),
+                 Base64.getMimeDecoder(),
+                 numRuns, numBytes);
+        }
+
         testNull(Base64.getEncoder());
         testNull(Base64.getUrlEncoder());
         testNull(Base64.getMimeEncoder());
--- a/test/jdk/java/util/Collection/BiggernYours.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collection/BiggernYours.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,9 +28,27 @@
  * @author Martin Buchholz
  */
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.NavigableMap;
+import java.util.NavigableSet;
+import java.util.Objects;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.LinkedTransferQueue;
+import java.util.concurrent.PriorityBlockingQueue;
 
 @SuppressWarnings("unchecked")
 public class BiggernYours {
@@ -152,7 +170,7 @@
     static int randomize(int size) { return rnd.nextInt(size + 2); }
 
     @SuppressWarnings("serial")
-    private static void realMain(String[] args) throws Throwable {
+    private static void realMain(String[] args) {
         testNavigableMaps(
             new ConcurrentSkipListMap(),
             new ConcurrentSkipListMap() {
@@ -232,7 +250,7 @@
     static void arrayEqual(Object[] x, Object[] y) {
         if (x == null ? y == null : Arrays.equals(x, y)) pass();
         else fail(Arrays.toString(x) + " not equal to " + Arrays.toString(y));}
-    public static void main(String[] args) throws Throwable {
+    public static void main(String[] args) {
         try {realMain(args);} catch (Throwable t) {unexpected(t);}
         System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
         if (failed > 0) throw new AssertionError("Some tests failed");}
--- a/test/jdk/java/util/Collection/HotPotatoes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collection/HotPotatoes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,9 +28,16 @@
  * @author Martin Buchholz
  */
 
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.concurrent.*;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.PriorityQueue;
+import java.util.Vector;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.PriorityBlockingQueue;
 
 @SuppressWarnings("unchecked")
 public class HotPotatoes {
--- a/test/jdk/java/util/Collection/IteratorAtEnd.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collection/IteratorAtEnd.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,34 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.PriorityQueue;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.WeakHashMap;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.LinkedTransferQueue;
 
 @SuppressWarnings("unchecked")
 public class IteratorAtEnd {
--- a/test/jdk/java/util/Collection/IteratorMicroBenchmark.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collection/IteratorMicroBenchmark.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,10 +28,10 @@
  */
 
 import static java.util.stream.Collectors.summingInt;
+import static java.util.stream.Collectors.toCollection;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayDeque;
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -46,6 +46,7 @@
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.LinkedTransferQueue;
@@ -55,6 +56,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.regex.Pattern;
+import java.util.stream.Stream;
 
 /**
  * Usage: [iterations=N] [size=N] [filter=REGEXP] [warmup=SECONDS]
@@ -79,7 +81,7 @@
     final int size;             // number of elements in collections
     final double warmupSeconds;
     final long warmupNanos;
-    final Pattern filter;       // select subset of Jobs to run
+    final Pattern nameFilter;   // select subset of Jobs to run
     final boolean reverse;      // reverse order of Jobs
     final boolean shuffle;      // randomize order of Jobs
 
@@ -87,7 +89,7 @@
         iterations    = intArg(args, "iterations", 10_000);
         size          = intArg(args, "size", 1000);
         warmupSeconds = doubleArg(args, "warmup", 7.0);
-        filter        = patternArg(args, "filter");
+        nameFilter    = patternArg(args, "filter");
         reverse       = booleanArg(args, "reverse");
         shuffle       = booleanArg(args, "shuffle");
 
@@ -204,15 +206,6 @@
         throw new IllegalArgumentException(val);
     }
 
-    private static List<Job> filter(Pattern filter, List<Job> jobs) {
-        if (filter == null) return jobs;
-        ArrayList<Job> newJobs = new ArrayList<>();
-        for (Job job : jobs)
-            if (filter.matcher(job.name()).find())
-                newJobs.add(job);
-        return newJobs;
-    }
-
     private static void deoptimize(int sum) {
         if (sum == 42)
             System.out.println("the answer");
@@ -251,7 +244,7 @@
     void run() throws Throwable {
 //         System.out.printf(
 //             "iterations=%d size=%d, warmup=%1g, filter=\"%s\"%n",
-//             iterations, size, warmupSeconds, filter);
+//             iterations, size, warmupSeconds, nameFilter);
 
         final ArrayList<Integer> al = new ArrayList<>(size);
 
@@ -270,34 +263,48 @@
             abq.add(abq.remove());
         }
 
-        ArrayList<Job> jobs = new ArrayList<>(Arrays.asList());
-
-        List.of(al, ad, abq,
+        ArrayList<Job> jobs = Stream.<Collection<Integer>>of(
+                al, ad, abq,
                 new LinkedList<>(al),
                 new PriorityQueue<>(al),
                 new Vector<>(al),
+                new CopyOnWriteArrayList<>(al),
                 new ConcurrentLinkedQueue<>(al),
                 new ConcurrentLinkedDeque<>(al),
                 new LinkedBlockingQueue<>(al),
                 new LinkedBlockingDeque<>(al),
                 new LinkedTransferQueue<>(al),
                 new PriorityBlockingQueue<>(al))
-            .stream()
-            .forEach(x -> {
-                         jobs.addAll(collectionJobs(x));
-                         if (x instanceof Deque)
-                             jobs.addAll(dequeJobs((Deque<Integer>)x));
-                     });
+            .flatMap(x -> jobs(x))
+            .filter(job ->
+                nameFilter == null || nameFilter.matcher(job.name()).find())
+            .collect(toCollection(ArrayList::new));
 
         if (reverse) Collections.reverse(jobs);
         if (shuffle) Collections.shuffle(jobs);
 
-        time(filter(filter, jobs));
+        time(jobs);
+    }
+
+    @SafeVarargs @SuppressWarnings("varargs")
+    private <T> Stream<T> concatStreams(Stream<T> ... streams) {
+        return Stream.of(streams).flatMap(s -> s);
     }
 
-    List<Job> collectionJobs(Collection<Integer> x) {
+    Stream<Job> jobs(Collection<Integer> x) {
+        return concatStreams(
+            collectionJobs(x),
+            (x instanceof Deque)
+            ? dequeJobs((Deque<Integer>)x)
+            : Stream.empty(),
+            (x instanceof List)
+            ? listJobs((List<Integer>)x)
+            : Stream.empty());
+    }
+
+    Stream<Job> collectionJobs(Collection<Integer> x) {
         String klazz = x.getClass().getSimpleName();
-        return List.of(
+        return Stream.of(
             new Job(klazz + " iterate for loop") {
                 public void work() throws Throwable {
                     for (int i = 0; i < iterations; i++) {
@@ -438,9 +445,9 @@
                         check.sum(sum[0]);}}});
     }
 
-    List<Job> dequeJobs(Deque<Integer> x) {
+    Stream<Job> dequeJobs(Deque<Integer> x) {
         String klazz = x.getClass().getSimpleName();
-        return List.of(
+        return Stream.of(
             new Job(klazz + " descendingIterator() loop") {
                 public void work() throws Throwable {
                     for (int i = 0; i < iterations; i++) {
@@ -457,4 +464,50 @@
                         x.descendingIterator().forEachRemaining(n -> sum[0] += n);
                         check.sum(sum[0]);}}});
     }
+
+    Stream<Job> listJobs(List<Integer> x) {
+        String klazz = x.getClass().getSimpleName();
+        return Stream.of(
+            new Job(klazz + " subList toArray()") {
+                public void work() throws Throwable {
+                    int size = x.size();
+                    for (int i = 0; i < iterations; i++) {
+                        int total = Stream.of(x.subList(0, size / 2),
+                                              x.subList(size / 2, size))
+                            .mapToInt(subList -> {
+                                int sum = 0;
+                                for (Object o : subList.toArray())
+                                    sum += (Integer) o;
+                                return sum; })
+                            .sum();
+                        check.sum(total);}}},
+            new Job(klazz + " subList toArray(a)") {
+                public void work() throws Throwable {
+                    int size = x.size();
+                    for (int i = 0; i < iterations; i++) {
+                        int total = Stream.of(x.subList(0, size / 2),
+                                              x.subList(size / 2, size))
+                            .mapToInt(subList -> {
+                                int sum = 0;
+                                Integer[] a = new Integer[subList.size()];
+                                for (Object o : subList.toArray(a))
+                                    sum += (Integer) o;
+                                return sum; })
+                            .sum();
+                        check.sum(total);}}},
+            new Job(klazz + " subList toArray(empty)") {
+                public void work() throws Throwable {
+                    int size = x.size();
+                    Integer[] empty = new Integer[0];
+                    for (int i = 0; i < iterations; i++) {
+                        int total = Stream.of(x.subList(0, size / 2),
+                                              x.subList(size / 2, size))
+                            .mapToInt(subList -> {
+                                int sum = 0;
+                                for (Object o : subList.toArray(empty))
+                                    sum += (Integer) o;
+                                return sum; })
+                            .sum();
+                        check.sum(total);}}});
+    }
 }
--- a/test/jdk/java/util/Collection/RemoveMicroBenchmark.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collection/RemoveMicroBenchmark.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,6 +27,8 @@
  * @run main RemoveMicroBenchmark iterations=1 size=8 warmup=0
  */
 
+import static java.util.stream.Collectors.toList;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
@@ -202,12 +204,10 @@
     }
 
     private static List<Job> filter(Pattern filter, List<Job> jobs) {
-        if (filter == null) return jobs;
-        ArrayList<Job> newJobs = new ArrayList<>();
-        for (Job job : jobs)
-            if (filter.matcher(job.name()).find())
-                newJobs.add(job);
-        return newJobs;
+        return (filter == null) ? jobs
+            : jobs.stream()
+            .filter(job -> filter.matcher(job.name()).find())
+            .collect(toList());
     }
 
     private static void deoptimize(int sum) {
@@ -271,8 +271,7 @@
             new LinkedBlockingQueue<>(),
             new LinkedBlockingDeque<>(),
             new LinkedTransferQueue<>(),
-            new PriorityBlockingQueue<>())
-            .stream().forEach(
+            new PriorityBlockingQueue<>()).forEach(
                 x -> {
                     String klazz = x.getClass().getSimpleName();
                     jobs.addAll(collectionJobs(klazz, () -> x, al));
--- a/test/jdk/java/util/Collections/AddAll.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/AddAll.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,15 @@
  * @key randomness
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
 
 public class AddAll {
     static final int N = 100;
--- a/test/jdk/java/util/Collections/BigBinarySearch.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/BigBinarySearch.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,13 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
+import java.util.AbstractList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.RandomAccess;
 
 public class BigBinarySearch {
 
--- a/test/jdk/java/util/Collections/BinarySearchNullComparator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/BinarySearchNullComparator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,9 @@
  * @summary Test Collections.binarySearch() with a null comparator
  */
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 
 public class BinarySearchNullComparator {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Collections/CheckedIdentityMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/CheckedIdentityMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,14 +28,15 @@
  * @summary Checked collections with underlying maps with identity comparisons
  */
 
-import java.util.*;
-import static java.util.Collections.*;
+import org.testng.annotations.Test;
 
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+import static java.util.Collections.checkedMap;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotEquals;
 
-import org.testng.annotations.Test;
-
 public class CheckedIdentityMap {
 
     @Test
--- a/test/jdk/java/util/Collections/CheckedListBash.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/CheckedListBash.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,13 @@
  * @key randomness
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Random;
 
 public class CheckedListBash {
     static Random rnd = new Random();
--- a/test/jdk/java/util/Collections/CheckedMapBash.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/CheckedMapBash.java	Fri Feb 02 01:52:03 2018 +0000
@@ -30,10 +30,20 @@
  * @key randomness
  */
 
-import java.util.*;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeMap;
 import java.util.function.Supplier;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
 
 import static org.testng.Assert.fail;
 
--- a/test/jdk/java/util/Collections/CheckedNull.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/CheckedNull.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,8 +27,18 @@
  * @summary Test behavior of nulls in checked collections
  */
 
-import java.util.*;
-import static java.util.Collections.*;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.TreeSet;
+
+import static java.util.Collections.singleton;
+import static java.util.Collections.singletonMap;
 
 @SuppressWarnings({"unchecked","serial"})
 public class CheckedNull {
--- a/test/jdk/java/util/Collections/CheckedSetBash.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/CheckedSetBash.java	Fri Feb 02 01:52:03 2018 +0000
@@ -30,13 +30,23 @@
  * @key randomness
  */
 
-import java.util.*;
-import java.util.function.Supplier;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.function.Supplier;
+
+import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
-import static org.testng.Assert.assertTrue;
 
 public class CheckedSetBash {
     static final int numItr = 100;
--- a/test/jdk/java/util/Collections/Disjoint.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/Disjoint.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,11 @@
  * @key randomness
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
 
 public class Disjoint {
     static final int N = 20;
--- a/test/jdk/java/util/Collections/EmptyCollectionSerialization.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/EmptyCollectionSerialization.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,14 +29,22 @@
  * @run testng EmptyCollectionSerialization
  */
 
-import java.util.*;
-import java.util.function.Supplier;
-import java.io.*;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.function.Supplier;
+
+import static org.testng.Assert.assertSame;
 import static org.testng.Assert.fail;
-import static org.testng.Assert.assertSame;
 
 public class EmptyCollectionSerialization {
     private static Object patheticDeepCopy(Object o) throws Exception {
--- a/test/jdk/java/util/Collections/EmptyIterator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/EmptyIterator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,10 +27,25 @@
  * @summary Test empty iterators, enumerations, and collections
  */
 
-import static java.util.Collections.*;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.concurrent.SynchronousQueue;
 
+import static java.util.Collections.emptyEnumeration;
+import static java.util.Collections.emptyIterator;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.emptyListIterator;
+import static java.util.Collections.emptyMap;
+import static java.util.Collections.emptySet;
+import static java.util.Collections.nCopies;
+import static java.util.Collections.unmodifiableMap;
+
 public class EmptyIterator {
 
     void test(String[] args) throws Throwable {
--- a/test/jdk/java/util/Collections/EmptyNavigableMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/EmptyNavigableMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,6 +27,12 @@
  * @summary Unit test for Collections.emptyNavigableMap
  * @run testng EmptyNavigableMap
  */
+
+import org.testng.Assert;
+import org.testng.Assert.ThrowingRunnable;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
 import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Collection;
@@ -37,13 +43,8 @@
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.testng.Assert;
-import org.testng.Assert.ThrowingRunnable;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-
+import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.assertFalse;
 
 public class EmptyNavigableMap {
 
@@ -124,10 +125,9 @@
      */
     @Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)
     public void testContainsRequiresComparable(String description, NavigableMap<?,?> navigableMap) {
-        assertThrowsCCE(() -> {
-            navigableMap.containsKey(new Object());
-        },
-            description + ": Compareable should be required");
+        assertThrowsCCE(
+            () -> navigableMap.containsKey(new Object()),
+            description + ": Comparable should be required");
     }
 
     /**
@@ -252,9 +252,7 @@
         Object last = (BigInteger.ZERO == first) ? BigInteger.TEN : BigInteger.ZERO;
 
             assertThrowsIAE(
-                () -> {
-                    navigableMap.subMap(last, true, first, false);
-                },
+                () -> navigableMap.subMap(last, true, first, false),
                 description + ": Must throw IllegalArgumentException when fromElement is not less than toElement.");
 
         navigableMap.subMap(first, true, last, false);
@@ -273,9 +271,8 @@
         // slightly smaller
         NavigableMap ns = subMap.subMap(first, false, last, false);
         // slight expansion
-        assertThrowsIAE(() -> {
-            ns.subMap(first, true, last, true);
-        },
+        assertThrowsIAE(
+            () -> ns.subMap(first, true, last, true),
             description + ": Expansion should not be allowed");
 
         // much smaller
@@ -293,9 +290,8 @@
         NavigableMap ns = subMap.headMap(BigInteger.ONE, false);
 
         // slight expansion
-        assertThrowsIAE(() -> {
-            ns.headMap(BigInteger.ONE, true);
-        },
+        assertThrowsIAE(
+            () -> ns.headMap(BigInteger.ONE, true),
             description + ": Expansion should not be allowed");
 
         // much smaller
@@ -313,9 +309,8 @@
         NavigableMap ns = subMap.tailMap(BigInteger.ONE, false);
 
         // slight expansion
-        assertThrowsIAE(() -> {
-            ns.tailMap(BigInteger.ONE, true);
-        },
+        assertThrowsIAE(
+            () -> ns.tailMap(BigInteger.ONE, true),
             description + ": Expansion should not be allowed");
 
         // much smaller
@@ -327,14 +322,12 @@
      */
     @Test(dataProvider = "NavigableMap<?,?>", dataProviderClass = EmptyNavigableMap.class)
     public void testTailMap(String description, NavigableMap navigableMap) {
-        assertThrowsNPE(() -> {
-            navigableMap.tailMap(null);
-        },
+        assertThrowsNPE(
+            () -> navigableMap.tailMap(null),
             description + ": Must throw NullPointerException for null element");
 
-        assertThrowsCCE(() -> {
-            navigableMap.tailMap(new Object());
-        },
+        assertThrowsCCE(
+            () -> navigableMap.tailMap(new Object()),
             description);
 
         NavigableMap ss = navigableMap.tailMap("1", true);
--- a/test/jdk/java/util/Collections/EmptyNavigableSet.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/EmptyNavigableSet.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,22 +27,23 @@
  * @summary Unit test for Collections.emptyNavigableSet
  * @run testng EmptyNavigableSet
  */
+
+import org.testng.Assert;
+import org.testng.Assert.ThrowingRunnable;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
 import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
+import java.util.NavigableSet;
 import java.util.NoSuchElementException;
-import java.util.NavigableSet;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.testng.Assert;
-import org.testng.Assert.ThrowingRunnable;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertSame;
 import static org.testng.Assert.assertTrue;
@@ -130,10 +131,9 @@
      */
     @Test(dataProvider = "NavigableSet<?>", dataProviderClass = EmptyNavigableSet.class)
     public void testContainsRequiresComparable(String description, NavigableSet<?> navigableSet) {
-        assertThrowsCCE(() -> {
-            navigableSet.contains(new Object());
-        },
-            description + ": Compareable should be required");
+        assertThrowsCCE(
+            () -> navigableSet.contains(new Object()),
+            description + ": Comparable should be required");
     }
 
     /**
@@ -182,9 +182,7 @@
      */
     @Test(dataProvider = "NavigableSet<?>", dataProviderClass = EmptyNavigableSet.class)
     public void testFirst(String description, NavigableSet<?> navigableSet) {
-        assertThrowsNSEE(() -> {
-            navigableSet.first();
-        }, description);
+        assertThrowsNSEE(navigableSet::first, description);
     }
 
     /**
@@ -210,9 +208,7 @@
      */
     @Test(dataProvider = "NavigableSet<?>", dataProviderClass = EmptyNavigableSet.class)
     public void testLast(String description, NavigableSet<?> navigableSet) {
-        assertThrowsNSEE(() -> {
-            navigableSet.last();
-        }, description);
+        assertThrowsNSEE(navigableSet::last, description);
     }
 
     /**
@@ -277,9 +273,7 @@
         Object last = (BigInteger.ZERO == first) ? BigInteger.TEN : BigInteger.ZERO;
 
             assertThrowsIAE(
-                () -> {
-                    navigableSet.subSet(last, true, first, false);
-                },
+                () -> navigableSet.subSet(last, true, first, false),
                 description
                 + ": Must throw IllegalArgumentException when fromElement is not less than toElement.");
 
@@ -299,9 +293,8 @@
         // slightly smaller
         NavigableSet ns = subSet.subSet(first, false, last, false);
         // slight expansion
-        assertThrowsIAE(() -> {
-            ns.subSet(first, true, last, true);
-        },
+        assertThrowsIAE(
+            () -> ns.subSet(first, true, last, true),
             description + ": Expansion should not be allowed");
 
         // much smaller
@@ -319,9 +312,8 @@
         NavigableSet ns = subSet.headSet(BigInteger.ONE, false);
 
         // slight expansion
-        assertThrowsIAE(() -> {
-            ns.headSet(BigInteger.ONE, true);
-        },
+        assertThrowsIAE(
+            () -> ns.headSet(BigInteger.ONE, true),
             description + ": Expansion should not be allowed");
 
         // much smaller
@@ -339,9 +331,8 @@
         NavigableSet ns = subSet.tailSet(BigInteger.ONE, false);
 
         // slight expansion
-        assertThrowsIAE(() -> {
-            ns.tailSet(BigInteger.ONE, true);
-        },
+        assertThrowsIAE(
+            () -> ns.tailSet(BigInteger.ONE, true),
             description + ": Expansion should not be allowed");
 
         // much smaller
@@ -353,14 +344,13 @@
      */
     @Test(dataProvider = "NavigableSet<?>", dataProviderClass = EmptyNavigableSet.class)
     public void testTailSet(String description, NavigableSet navigableSet) {
-        assertThrowsNPE(() -> {
-            navigableSet.tailSet(null);
-        },
+        assertThrowsNPE(
+            () -> navigableSet.tailSet(null),
             description + ": Must throw NullPointerException for null element");
 
-        assertThrowsCCE(() -> {
-            navigableSet.tailSet(new Object());
-        }, description);
+        assertThrowsCCE(
+            () -> navigableSet.tailSet(new Object()),
+            description);
 
         NavigableSet ss = navigableSet.tailSet("1", true);
 
--- a/test/jdk/java/util/Collections/Enum.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/Enum.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,9 @@
  * @summary Basic test for new Enumeration -> List converter
  */
 
-import java.util.*;
+import java.util.Collections;
+import java.util.List;
+import java.util.Vector;
 
 public class Enum {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Collections/FindSubList.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/FindSubList.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,12 @@
  * @summary Basic test for Collections.indexOfSubList/lastIndexOfSubList
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Vector;
 
 public class FindSubList {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Collections/Frequency.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/Frequency.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,10 @@
  * @author  Josh Bloch
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
 
 public class Frequency {
     static final int N = 100;
--- a/test/jdk/java/util/Collections/MinMax.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/MinMax.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,9 @@
  * @author Josh Bloch
  */
 
-import java.util.*;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 public class MinMax {
     public static void main(String[] args) {
--- a/test/jdk/java/util/Collections/NCopies.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/NCopies.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,8 @@
  * @author  Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Collections;
+import java.util.List;
 
 public class NCopies {
     static volatile int passed = 0, failed = 0;
--- a/test/jdk/java/util/Collections/NullComparator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/NullComparator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,10 @@
  * @summary A null Comparator is now specified to indicate natural ordering.
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 
 public class NullComparator {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Collections/RacingCollections.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/RacingCollections.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,9 +28,46 @@
  * @author Martin Buchholz
  */
 
-import static java.util.Collections.*;
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.LinkedTransferQueue;
+
+import static java.util.Collections.asLifoQueue;
+import static java.util.Collections.checkedList;
+import static java.util.Collections.checkedMap;
+import static java.util.Collections.checkedSet;
+import static java.util.Collections.newSetFromMap;
+import static java.util.Collections.synchronizedList;
+import static java.util.Collections.synchronizedMap;
+import static java.util.Collections.synchronizedSet;
+import static java.util.Collections.unmodifiableList;
+import static java.util.Collections.unmodifiableMap;
+import static java.util.Collections.unmodifiableSet;
 
 public class RacingCollections {
     /**
--- a/test/jdk/java/util/Collections/ReplaceAll.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/ReplaceAll.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,11 @@
  * @summary Basic test for new replaceAll algorithm
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Vector;
 
 public class ReplaceAll {
     static final int SIZE = 20;
--- a/test/jdk/java/util/Collections/ReverseOrder.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/ReverseOrder.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,14 @@
  * @author Josh Bloch
  */
 
-import java.util.*;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 public class ReverseOrder {
     static byte[] serialBytes(Object o) {
--- a/test/jdk/java/util/Collections/ReverseOrder2.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/ReverseOrder2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,17 @@
  * @author  Josh Bloch, Martin Buchholz
  */
 
-import java.util.*;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
 
 public class ReverseOrder2 {
     static final int N = 100;
--- a/test/jdk/java/util/Collections/Rotate.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/Rotate.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,12 @@
  * @key randomness
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+import java.util.Vector;
 
 public class Rotate {
     // Should have lots of distinct factors and be > ROTATE_THRESHOLD
--- a/test/jdk/java/util/Collections/RotateEmpty.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/RotateEmpty.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,9 @@
  * @summary Collections.rotate(...) returns ArithmeticException
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 public class RotateEmpty {
 
--- a/test/jdk/java/util/Collections/Ser.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/Ser.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,13 @@
  *          nCopies and singleton were spec'd to be serializable, but weren't.
  */
 
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
 
 public class Ser {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Collections/SetFromMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/SetFromMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,10 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.Set;
 
 public class SetFromMap {
     static volatile int passed = 0, failed = 0;
--- a/test/jdk/java/util/Collections/Swap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/Swap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,9 @@
  * @author  Josh Bloch
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 public class Swap {
     static final int SIZE = 100;
--- a/test/jdk/java/util/Collections/T5078378.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/T5078378.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 5078378
  * @summary REGRESSION: Some calls to Collections.binarySearch no longer compile
@@ -30,7 +30,9 @@
  * @compile T5078378.java
  * @compile/fail -Xlint:unchecked -Werror T5078378.java
  */
-import java.util.*;
+
+import java.util.Collections;
+import java.util.List;
 
 class T5078378 {
     public static boolean contains(List l, Object o) {
--- a/test/jdk/java/util/Collections/T6433170.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/T6433170.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,8 +27,16 @@
  * @summary CheckedCollection.addAll should be all-or-nothing
  */
 
-import java.util.*;
-import static java.util.Collections.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Vector;
+
+import static java.util.Collections.checkedCollection;
+import static java.util.Collections.checkedList;
+import static java.util.Collections.checkedSet;
 
 @SuppressWarnings("unchecked")
 public class T6433170 {
--- a/test/jdk/java/util/Collections/ViewSynch.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/ViewSynch.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,11 @@
  *          (Got that?)
  */
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 public class ViewSynch {
     static final Integer ZERO = new Integer(0);
--- a/test/jdk/java/util/Collections/WrappedNull.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Collections/WrappedNull.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,16 @@
  *          rather than later
  */
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 public class WrappedNull {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/HashMap/KeySetRemove.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/HashMap/KeySetRemove.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,9 @@
  *          false if the Map previously mapped k to null.
  */
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
 
 public class KeySetRemove {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/HashMap/SetValue.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/HashMap/SetValue.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,8 @@
  * @author jbloch
  */
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
 
 public class SetValue {
     static final String key      = "key";
--- a/test/jdk/java/util/HashMap/ToString.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/HashMap/ToString.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,8 @@
  *          contained null keys or values.
  */
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
 
 public class ToString {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Hashtable/EqualsCast.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Hashtable/EqualsCast.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,8 +29,8 @@
  *          unnecessarily.  (java.security.Provider tickled this sensitivity.)
  */
 
-import java.util.*;
 import java.security.Provider;
+import java.util.Map;
 
 public class EqualsCast {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Hashtable/HashCode.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Hashtable/HashCode.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,8 @@
  * @author Josh Bloch
  */
 
-import java.util.*;
+import java.util.Hashtable;
+import java.util.Map;
 
 public class HashCode {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Hashtable/IllegalLoadFactor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Hashtable/IllegalLoadFactor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,7 +26,12 @@
    @summary Test for an illegalargumentexception on loadFactor
 */
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
 
 /**
  * This class tests to see if creating a hash table with an
--- a/test/jdk/java/util/Hashtable/ReadObject.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Hashtable/ReadObject.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,18 +21,18 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4652911
  * @summary test Hashtable readObject for invocation of overridable put method
  */
-import java.util.Hashtable;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
 import java.io.Serializable;
+import java.util.Hashtable;
 
 /**
  * Class that extends Hashtable to demonstrate bug when
@@ -52,7 +52,7 @@
         Object getValue() {
             return mValue;
         }
-    };
+    }
 
     public Object get(Object key) {
         ValueWrapper valueWrapper = (ValueWrapper)super.get(key);
--- a/test/jdk/java/util/Hashtable/SelfRef.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Hashtable/SelfRef.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,8 +29,11 @@
  * @author Josh Bloch, Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 public class SelfRef {
     public static void main(String[] args) {
--- a/test/jdk/java/util/IdentityHashMap/ToArray.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/IdentityHashMap/ToArray.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,11 @@
  * @author  Josh Bloch, Martin Buchholz
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public class ToArray {
     public static void main(String[] args) {
--- a/test/jdk/java/util/IdentityHashMap/ToString.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/IdentityHashMap/ToString.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,10 @@
  * @author  Josh Bloch
  */
 
-import java.util.*;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
 
 public class ToString {
     public static void main(String[] args) {
--- a/test/jdk/java/util/LinkedHashMap/Basic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedHashMap/Basic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,9 +27,21 @@
  * @summary Basic test for LinkedHashMap.  (Based on MapBash)
  */
 
-import java.util.*;
-import java.util.function.*;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Random;
+import java.util.Set;
+import java.util.function.BiFunction;
 
 public class Basic {
     static final Random rnd = new Random(666);
--- a/test/jdk/java/util/LinkedHashMap/Cache.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedHashMap/Cache.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,8 @@
  * @summary Basic test of removeEldestElement method.
  */
 
-import java.util.*;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 public class Cache {
     private static final int MAP_SIZE = 10;
--- a/test/jdk/java/util/LinkedHashMap/EmptyMapIterator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedHashMap/EmptyMapIterator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,12 +27,14 @@
  * @summary iterators on collection views of empty map weren't fail-fast.
  */
 
-import java.util.*;
+import java.util.ConcurrentModificationException;
+import java.util.HashMap;
+import java.util.Iterator;
 
 public class EmptyMapIterator {
     public static void main(String[] args) throws Exception {
         HashMap map = new HashMap();
-        Iterator iter = iter = map.entrySet().iterator();
+        Iterator iter = map.entrySet().iterator();
         map.put("key", "value");
 
         try {
--- a/test/jdk/java/util/LinkedHashSet/Basic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedHashSet/Basic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,8 +27,15 @@
  * @summary Basic test for LinkedHashSet.  (Based on SetBash)
  */
 
-import java.util.*;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Random;
+import java.util.Set;
 
 public class Basic {
     static Random rnd = new Random(666);
--- a/test/jdk/java/util/LinkedList/AddAll.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedList/AddAll.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,10 @@
  * @summary AddAll was prepending instead of appending!
  */
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
 
 public class AddAll {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/LinkedList/Clone.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedList/Clone.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,9 @@
  *          TreeMap.
  */
 
-import java.util.*;
+import java.util.LinkedList;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 public class Clone {
     public static void main(String[] args) {
--- a/test/jdk/java/util/LinkedList/ComodifiedRemove.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/LinkedList/ComodifiedRemove.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,9 +29,10 @@
  * @author Konstantin Kladko
  */
 
-import java.util.*;
+import java.util.ConcurrentModificationException;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.ListIterator;
-import java.util.ConcurrentModificationException;
 
 public class ComodifiedRemove {
     public static
--- a/test/jdk/java/util/List/LockStep.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/List/LockStep.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,10 +29,23 @@
  * @key randomness
  */
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
-import static java.util.Collections.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Random;
+import java.util.Vector;
 
 @SuppressWarnings("unchecked")
 public class LockStep {
--- a/test/jdk/java/util/Locale/bcp47u/FormatTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Locale/bcp47u/FormatTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 /*
  *
  * @test
- * @bug 8176841
+ * @bug 8176841 8194148
  * @summary Tests *Format class deals with Unicode extensions
  *      correctly.
  * @modules jdk.localedata
@@ -73,6 +73,7 @@
     private static final String NUM_SINH = "\u0de7\u0de8,\u0de9\u0dea\u0deb.\u0dec\u0ded\u0dee\u0def";
 
     private static final Date testDate = new Calendar.Builder()
+                                        .setCalendarType("gregory")
                                         .setDate(2017, 7, 10)
                                         .setTimeOfDay(15, 15, 0)
                                         .setTimeZone(AMLA)
--- a/test/jdk/java/util/Locale/bcp47u/SymbolsTests.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Locale/bcp47u/SymbolsTests.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,11 +24,11 @@
 /*
  *
  * @test
- * @bug 8176841
+ * @bug 8176841 8194148
  * @summary Tests *FormatSymbols class deals with Unicode extensions
  *      correctly.
  * @modules jdk.localedata
- * @run testng/othervm -Djava.locale.providers=CLDR FormatTests
+ * @run testng/othervm -Djava.locale.providers=CLDR SymbolsTests
  */
 
 import static org.testng.Assert.assertEquals;
@@ -66,11 +66,11 @@
         return new Object[][] {
             // Locale, expected decimal separator, expected grouping separator
 
-            {RG_AT, ",", "."},
-            {Locale.US, ".", ","},
+            {RG_AT, ',', '.'},
+            {Locale.US, '.', ','},
 
             // -nu & -rg mixed. -nu should win
-            {Locale.forLanguageTag("ar-EG-u-nu-latn-rg-mazzzz"), ".", ","},
+            {Locale.forLanguageTag("ar-EG-u-nu-latn-rg-mazzzz"), '.', ','},
         };
     }
 
--- a/test/jdk/java/util/Map/Defaults.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Map/Defaults.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,6 +28,11 @@
  * @author Mike Duigou
  * @run testng Defaults
  */
+
+import org.testng.Assert.ThrowingRunnable;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
 import java.util.AbstractMap;
 import java.util.AbstractSet;
 import java.util.ArrayList;
@@ -36,36 +41,31 @@
 import java.util.Collections;
 import java.util.EnumMap;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Hashtable;
-import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.TreeMap;
-import java.util.Set;
 import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentSkipListMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
-import org.testng.Assert.ThrowingRunnable;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-
 import static java.util.Objects.requireNonNull;
-
-import static org.testng.Assert.fail;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertSame;
 import static org.testng.Assert.assertThrows;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 public class Defaults {
 
@@ -730,7 +730,7 @@
         e90, e91, e92, e93, e94, e95, e96, e97, e98, e99,
         EXTRA_KEY;
         public static final int SIZE = values().length;
-    };
+    }
     private static final int TEST_SIZE = IntegerEnum.SIZE - 1;
     /**
      * Realized keys ensure that there is always a hard ref to all test objects.
--- a/test/jdk/java/util/Map/Get.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Map/Get.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,10 +28,18 @@
  * @author Martin Buchholz
  */
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentSkipListMap;
 
 public class Get {
 
--- a/test/jdk/java/util/Map/LockStep.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Map/LockStep.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,20 @@
  * @key randomness
  */
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.TreeMap;
+import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
 
 /**
  * Based on the strange scenario required to reproduce
--- a/test/jdk/java/util/NavigableMap/LockStep.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/NavigableMap/LockStep.java	Fri Feb 02 01:52:03 2018 +0000
@@ -32,10 +32,35 @@
  * @key randomness
  */
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
-import static java.util.Collections.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NavigableMap;
+import java.util.NavigableSet;
+import java.util.NoSuchElementException;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ConcurrentSkipListSet;
+
+import static java.util.Collections.reverseOrder;
+import static java.util.Collections.singleton;
+import static java.util.Collections.singletonMap;
 
 @SuppressWarnings("unchecked")
 public class LockStep {
--- a/test/jdk/java/util/PriorityQueue/AddNonComparable.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/PriorityQueue/AddNonComparable.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,6 +27,8 @@
  * @run testng AddNonComparable
  */
 
+import org.testng.annotations.Test;
+
 import java.util.PriorityQueue;
 import java.util.Queue;
 import java.util.SortedMap;
@@ -39,8 +41,8 @@
 import java.util.function.BiConsumer;
 import java.util.function.Supplier;
 
-import static org.testng.Assert.*;
-import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 
 public class AddNonComparable {
 
--- a/test/jdk/java/util/PriorityQueue/NoNulls.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/PriorityQueue/NoNulls.java	Fri Feb 02 01:52:03 2018 +0000
@@ -38,8 +38,8 @@
  */
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Comparator;
-import java.util.Collection;
 import java.util.PriorityQueue;
 import java.util.SortedSet;
 import java.util.TreeSet;
--- a/test/jdk/java/util/PriorityQueue/PriorityQueueSort.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/PriorityQueue/PriorityQueueSort.java	Fri Feb 02 01:52:03 2018 +0000
@@ -42,18 +42,14 @@
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.PriorityQueue;
 import java.util.Queue;
-import java.util.PriorityQueue;
 
 public class PriorityQueueSort {
 
     static class MyComparator implements Comparator<Integer> {
         public int compare(Integer x, Integer y) {
-            int i = x.intValue();
-            int j = y.intValue();
-            if (i < j) return -1;
-            if (i > j) return 1;
-            return 0;
+            return Integer.compare(x.intValue(), y.intValue());
         }
     }
 
--- a/test/jdk/java/util/PriorityQueue/RemoveContains.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/PriorityQueue/RemoveContains.java	Fri Feb 02 01:52:03 2018 +0000
@@ -37,8 +37,8 @@
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.LinkedTransferQueue;
 import java.util.concurrent.PriorityBlockingQueue;
-import java.util.concurrent.LinkedTransferQueue;
 
 public class RemoveContains {
     static volatile int passed = 0, failed = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/BlankLines.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4218776
+ * @summary Test loading of properties files with blank lines
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * This class tests to see if a properties object correctly handles blank
+ * lines in a properties file
+ */
+public class BlankLines {
+    public static void main(String []args)
+    {
+        try {
+            // create test file
+            File file = new File("test.properties");
+
+            // write a single space to the test file
+            FileOutputStream fos = new FileOutputStream(file);
+            fos.write(' ');
+            fos.close();
+
+            // test empty properties
+            Properties prop1 = new Properties();
+
+            // now load the file we just created, into a
+            // properties object.
+            // the properties object should have no elements,
+            // but due to a bug, it has an empty key/value.
+            // key = "", value = ""
+            Properties prop2 = new Properties();
+            InputStream is = new FileInputStream(file);
+            try {
+                prop2.load(is);
+            } finally {
+                is.close();
+            }
+            if (!prop1.equals(prop2))
+                throw new RuntimeException("Incorrect properties loading.");
+
+            // cleanup
+            file.delete();
+        }
+        catch(IOException e) {}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/CloseXMLStream.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 6270682
+ * @summary Test the input stream is closed after loadtoXML returns.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Properties;
+
+public class CloseXMLStream {
+    public static void main(String[] args) throws Throwable {
+        class ExpectedClosingException extends RuntimeException {};
+        Properties props = new Properties();
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        props.storeToXML(out, null);
+        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()) {
+            public void close() {
+                throw new ExpectedClosingException();
+            }
+        };
+        try {
+            props.loadFromXML(in);
+            throw new Exception("Failed: loadFromXML does not close the is!");
+        } catch (ExpectedClosingException ex) { /*OK*/ }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/EscapeSpace.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4219644
+ * @summary Escaping of spaces required only for leading spaces in the value
+ *          part of the property.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class EscapeSpace {
+
+    static String props =
+        "key1=\\ \\ Value1, has leading and trailing spaces\\  \n" +
+        "key2=Value2,\\ does not have\\ leading or trailing\\ spaces\n" +
+        "key3=Value3,has,no,spaces\n" +
+        "key4=Value4, does not have leading spaces\\  \n" +
+        "key5=\\t\\ \\ Value5, has leading tab and no trailing spaces\n" +
+        "key6=\\ \\ Value6,doesnothaveembeddedspaces\\ \\ \n" +
+        "\\ key1\\ test\\ =key1, has leading and trailing spaces  \n" +
+        "key2\\ test=key2, does not have leading or trailing spaces\n" +
+        "key3test=key3,has,no,spaces\n" +
+        "key4\\ test\\ =key4, does not have leading spaces  \n" +
+        "\\t\\ key5\\ test=key5, has leading tab and no trailing spaces\n" +
+        "\\ \\ key6\\ \\ =\\  key6,doesnothaveembeddedspaces  ";
+    static void load(Properties p, String file) throws Exception
+    {
+        FileInputStream     fis = null;
+        BufferedInputStream bis = null;
+
+        try {
+            fis = new FileInputStream(file);
+            bis = new BufferedInputStream( fis );
+
+            p.load(bis);
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e.getMessage());
+        } finally {
+            if (fis != null)
+                fis.close();
+        }
+    }
+
+    static void store(Properties p, String file) throws Exception
+    {
+
+        FileOutputStream     fos = null;
+        BufferedOutputStream bos = null;
+
+        try {
+            fos = new FileOutputStream(file);
+            bos = new BufferedOutputStream( fos );
+
+            p.store( bos, "Omitting escape characters for non leading space \" \" in properties");
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e.getMessage());
+        } finally {
+            if (fos != null)
+                fos.close();
+        }
+    }
+
+    public static void main( String args[] ) throws Exception
+    {
+        ByteArrayInputStream bais = new ByteArrayInputStream(props.getBytes());
+        Properties props0 = new Properties();
+        // Load properties with escape character '\' before space characters
+        try {
+            props0.load(bais);
+        } catch (IOException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+
+        Properties props1 = new Properties();
+        /*
+         * Put the same properties, but without the escape char for space in
+         * value part.
+         */
+        props1.put( "key1", "  Value1, has leading and trailing spaces  " );
+        props1.put( "key2",
+            "Value2, does not have leading or trailing spaces" );
+        props1.put( "key3", "Value3,has,no,spaces" );
+        props1.put( "key4", "Value4, does not have leading spaces  " );
+        props1.put( "key5",
+            "\t  Value5, has leading tab and no trailing spaces" );
+        props1.put( "key6", "  Value6,doesnothaveembeddedspaces  " );
+        props1.put( " key1 test ", "key1, has leading and trailing spaces  " );
+        props1.put( "key2 test",
+            "key2, does not have leading or trailing spaces" );
+        props1.put( "key3test", "key3,has,no,spaces" );
+        props1.put( "key4 test ", "key4, does not have leading spaces  " );
+        props1.put( "\t key5 test",
+            "key5, has leading tab and no trailing spaces" );
+        props1.put( "  key6  ", "  key6,doesnothaveembeddedspaces  " );
+
+        // Check if both the properties match
+        if (!props0.equals(props1))
+            throw new RuntimeException("Test failed");
+
+
+        // Also store the new properties to a file
+        store(props1, "out1.props");
+
+        Properties props2 = new Properties();
+        // Reread the properties from the file
+        load(props2, "out1.props");
+
+        // Make sure that the properties match
+        if (!props1.equals(props2))
+            throw new RuntimeException("Test failed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/GenerifiedUses.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 5060820 5054615 5056707 5061476
+ * @modules java.desktop
+ *          java.naming
+ * @compile GenerifiedUses.java
+ */
+
+import java.awt.image.CropImageFilter;
+import java.awt.image.ImageFilter;
+import java.awt.image.PixelGrabber;
+import java.awt.image.ReplicateScaleFilter;
+import java.util.Properties;
+import javax.naming.InitialContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.spi.NamingManager;
+
+public class GenerifiedUses {
+
+    static void foo() throws Exception {
+
+        Properties props = new Properties();
+
+        // 5060820
+        new InitialDirContext(props);
+
+        // 5054615
+        new InitialContext(props);
+
+        // 5056707
+        NamingManager.getObjectInstance(null, null, null, props);
+
+        // 5061476
+        new CropImageFilter(0, 0, 0, 0).setProperties(props);
+        new ImageFilter().setProperties(props);
+        new PixelGrabber(null, 0, 0, 0, 0, false).setProperties(props);
+        new ReplicateScaleFilter(1, 1).setProperties(props);
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/LoadParsing.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4115936 4385195 4972297
+ * @summary checks for processing errors in properties.load
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Properties;
+
+public class LoadParsing {
+    public static void main(String[] argv) throws Exception {
+        File f = new File(System.getProperty("test.src", "."), "input.txt");
+        FileInputStream myIn = new FileInputStream(f);
+        Properties myProps = new Properties();
+        int size = 0;
+        try {
+            myProps.load(myIn);
+        } finally {
+            myIn.close();
+        }
+
+        if (!myProps.getProperty("key1").equals("value1"))
+            throw new RuntimeException("Bad comment parsing");
+        if (!myProps.getProperty("key2").equals("abc\\defg\\"))
+            throw new RuntimeException("Bad slash parsing");
+        if (!myProps.getProperty("key3").equals("value3"))
+            throw new RuntimeException("Adds spaces to key");
+        if (!myProps.getProperty("key4").equals(":value4"))
+            throw new RuntimeException("Bad separator parsing");
+        if (myProps.getProperty("#") != null)
+            throw new RuntimeException(
+                "Does not recognize comments with leading spaces");
+        if ((size=myProps.size()) != 4)
+            throw new RuntimeException(
+                 "Wrong number of keys in Properties; expected 4, got " +
+                size + ".");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/LoadParsing2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4881291 4094886
+ * @summary checks for processing errors in properties.load
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Properties;
+
+public class LoadParsing2 {
+    public static void main(String[] argv) throws Exception {
+        for (int i = 0; i < dfiles.length; i++) {
+            test(dfiles[i], keys[i], values[i], true);
+            test(dfiles[i], keys[i], values[i], false);
+        }
+    }
+
+    private static Properties getLoadedProperties(InputStream is,
+                                                  boolean doStream)
+        throws Exception
+    {
+        Properties props = new Properties();
+        if (doStream)
+            props.load(is);
+        else
+            props.load(new InputStreamReader(is, "UTF-8"));
+        return props;
+    }
+
+    private static void test(String fnData,
+                             String[] keys,
+                             String[] values,
+                             boolean doStream)
+        throws Exception
+    {
+        File f = new File(System.getProperty("test.src", "."), fnData);
+        FileInputStream myIn = new FileInputStream(f);
+        Properties myProps = getLoadedProperties(myIn, doStream);
+        for (int i = 0; i < keys.length; i++) {
+            if (!myProps.getProperty(keys[i]).equals(values[i])) {
+                throw new RuntimeException("Test1: Bad parsing at " + i);
+            }
+        }
+    }
+
+    static String[] keys1 = {
+        "\\",
+        "\\:key12",
+        "key16 b",
+        "key14_asdfa",
+        "\\\\",
+        "key8notassign",
+        "key17",
+        "key15",
+        "keyabcdef",
+        "key13dialog.3",
+        "key7",
+        "key6",
+        "key5",
+        "key3",
+        "key2",
+        "key1",
+        "key9 Term",
+        "key0"
+    };
+
+    static String[] keys2 = {
+        "key1",
+        "key2"
+    };
+
+    static String[] keys3 = {
+        "key1",
+        "key2"
+    };
+
+    static String[] values1 = {
+        "key10=bar",
+        "bar2",
+        " abcdef",
+        "",
+        "key11=bar2",
+        "abcdef",
+        "#barbaz",
+        " abcdef",
+        "",
+        "",
+        "Symbol,SYMBOL_CHARSET ",
+        "WingDings,SYMBOL_CHARSET \\abc",
+        "==Arial,ANSI_CHARSET",
+        "",
+        "= abcde",
+        "value1",
+        "ABCDE",
+        "abcd"
+    };
+
+    static String[] values2 = {
+        "-monotype-timesnewroman-regular-r---*-%d-*-*-p-*-iso8859-1serif.1a-monotype-timesnewroman-regular-r-normal--*-%d-*-*-p-*-iso8859-2serif.2a-b&h-LucidaBrightLat4-Normal-r-normal--*-%d-*-*-p-*-iso8859-4serif.3a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-5serif.4a-monotype-timesnewromangreek-regular-r-normal--*-%d-*-*-p-*-iso8859-7serif.5a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-9serif.6a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-15serif.7a-hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1serif.8a-sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0serif.9a-ricoh-hgminchol-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0serif.10a-ricoh-hgminchol-medium-r-normal--*-%d-*-*-m-*-jisx0208.1983-0serif.11a-ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0serif.12a-hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3serif.13a-urw-itczapfdingbats-medium-r-normal--*-%d-*-*-p-*-sun-fontspecificserif.14a-*-symbol-medium-r-normal--*-%d-*-*-p-*-sun-fontspecificbserif.italic.0=-monotype-timesbnewbroman-regular-i---*-%d-*-*-p-*-iso8859-1bserif.italic.1=-monotype-timesbnewbroman-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-2",
+        "-b&h-LucidaBrightLat4-normal-i-normal-Italic-*-%d-*-*-p-*-iso8859-4"
+    };
+
+    static String[] values3 = {
+        "-monotype-times new roman-regular-r---*-%d-*-*-p-*-iso8859-1, -monotype-times new roman-regular-r-normal--*-%d-*-*-p-*-iso8859-2, -b&h-LucidaBrightLat4-Normal-r-normal--*-%d-*-*-p-*-iso8859-4, -monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-5, -monotype-times new roman greek-regular-r-normal--*-%d-*-*-p-*-iso8859-7, -monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-9, -monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-15, -hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1, -sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0, -ricoh-hg gothic b-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0, -ricoh-hg gothic b-medium-r-normal-*-*-%d-*-*-m-*-jisx0208.1983-0, -ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0, -hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3",
+        "-monotype-times new roman-regular-i---*-%d-*-*-p-*-iso8859-1, -monotype-times new roman-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-2, -b&h-LucidaBrightLat4-normal-i-normal-Italic-*-%d-*-*-p-*-iso8859-4, -monotype-times-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-5, -monotype-times new roman greek-regular-i-normal--*-%d-*-*-p-*-iso8859-7, -monotype-times-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-9, -monotype-times-regular-i-normal--*-%d-*-*-p-*-iso8859-15, -hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1, -sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0, -ricoh-hg gothic b-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0, -ricoh-hg gothic b-medium-r-normal-*-*-%d-*-*-m-*-jisx0208.1983-0, -ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0, -hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3"
+    };
+
+    static String[][] keys = {keys1, keys1, keys2, keys2, keys3};
+    static String[][] values = {values1, values1, values2, values2, values3};
+    static String[] dfiles = {
+        "testData1",
+        "testData1.dos",
+        "testData2",
+        "testData2.dos",
+        "testData3.dos"
+    };
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/LoadSeparators.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4192678
+ * @summary Test loading of values that are key value separators
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * This class tests to see if a properties object can successfully save and
+ * load properties with a non-escaped value that is also a key value separator
+ *
+ */
+public class LoadSeparators {
+    public static void main(String[] argv) throws Exception {
+        try {
+            // Destroy old test file if any
+            // Create a properties file
+            File propFile = new File("testout");
+            propFile.delete();
+
+            // Create a properties file
+            FileOutputStream myOut = new FileOutputStream(propFile);
+            String testProperty = "Test3==";
+            myOut.write(testProperty.getBytes());
+            myOut.close();
+
+            // Load the properties set
+            FileInputStream myIn = new FileInputStream("testout");
+            Properties myNewProps = new Properties();
+            try {
+                myNewProps.load(myIn);
+            } finally {
+                myIn.close();
+            }
+
+            // Read in the test property
+            String equalSign = myNewProps.getProperty("Test3");
+
+            // Clean up
+            propFile.delete();
+
+            if (!equalSign.equals("="))
+                throw new Exception("Cannot read key-value separators.");
+        } catch (IOException e) {
+            System.err.println(e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/PropertiesTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,494 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @summary tests the load and store methods of Properties class
+ * @author Xueming Shen
+ * @bug 4094886
+ * @modules jdk.charsets
+ * @key randomness
+ */
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Properties;
+import java.util.Random;
+
+public class PropertiesTest {
+
+    private static boolean failure = false;
+    private static int failCount = 0;
+
+    /**
+     * Main to interpret arguments and run several tests.
+     *
+     */
+    public static void main(String[] args) throws Exception {
+        BlankLines();
+        EscapeSpace();
+        LoadParsing();
+        SaveEncoding();
+        SaveLoadBasher();
+        SaveSeparator();
+        SaveClose();
+        SaveComments();
+        UnicodeEscape();
+
+        if (failure)
+            throw new RuntimeException("Failure in Properties testing.");
+        else
+            System.err.println("OKAY: All tests passed.");
+    }
+
+    private static void report(String testName) {
+        int spacesToAdd = 30 - testName.length();
+        StringBuffer paddedNameBuffer = new StringBuffer(testName);
+        for (int i=0; i<spacesToAdd; i++)
+            paddedNameBuffer.append(" ");
+        String paddedName = paddedNameBuffer.toString();
+        System.err.println(paddedName + ": " +
+                           (failCount==0 ? "Passed":"Failed("+failCount+")"));
+        if (failCount > 0)
+            failure = true;
+        failCount = 0;
+    }
+
+    private static void check(Properties prop1, Properties prop2) {
+        if (!prop1.equals(prop2))
+            failCount++;
+    }
+
+    private static Reader getReader(String src, String csn)
+        throws Exception {
+        return new InputStreamReader(
+                   new ByteArrayInputStream(src.getBytes()),
+                   csn);
+    }
+
+    private static OutputStream getFOS(String name)
+        throws Exception
+    {
+        return new FileOutputStream(name);
+    }
+
+    private static Writer getFOSW(String name, String csn)
+        throws Exception
+    {
+        return new OutputStreamWriter(
+                   new FileOutputStream(name),
+                   csn);
+    }
+
+    private static Reader getReader(byte[] src, String csn)
+        throws Exception {
+        return new InputStreamReader(new ByteArrayInputStream(src), csn);
+    }
+
+    private static InputStream getInputStream(String src) {
+        return new ByteArrayInputStream(src.getBytes());
+    }
+
+    private static InputStream getInputStream(byte[] src) {
+        return new ByteArrayInputStream(src);
+    }
+
+    private static void BlankLines() throws Exception {
+        // write a single space to the output stream
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        baos.write(' ');
+        // test empty properties
+        Properties prop1 = new Properties();
+
+        // now load the file we just created, into a properties object.
+        // the properties object should have no elements, but due to a
+        // bug, it has an empty key/value. key = "", value = ""
+        Properties prop2 = new Properties();
+        prop2.load(getInputStream(baos.toByteArray()));
+        check(prop1, prop2);
+
+        // test reader
+        prop2 = new Properties();
+        prop2.load(getReader(baos.toByteArray(), "UTF-8"));
+        check(prop1, prop2);
+
+        report("BlinkLine");
+    }
+
+    private static void EscapeSpace() throws Exception {
+        String propsCases =
+            "key1=\\ \\ Value\\u4e001, has leading and trailing spaces\\  \n" +
+            "key2=Value\\u4e002,\\ does not have\\ leading or trailing\\ spaces\n" +
+            "key3=Value\\u4e003,has,no,spaces\n" +
+            "key4=Value\\u4e004, does not have leading spaces\\  \n" +
+            "key5=\\t\\ \\ Value\\u4e005, has leading tab and no trailing spaces\n" +
+            "key6=\\ \\ Value\\u4e006,doesnothaveembeddedspaces\\ \\ \n" +
+            "\\ key1\\ test\\ =key1, has leading and trailing spaces  \n" +
+            "key2\\ test=key2, does not have leading or trailing spaces\n" +
+            "key3test=key3,has,no,spaces\n" +
+            "key4\\ test\\ =key4, does not have leading spaces  \n" +
+            "\\t\\ key5\\ test=key5, has leading tab and no trailing spaces\n" +
+            "\\ \\ key6\\ \\ =\\  key6,doesnothaveembeddedspaces  ";
+
+        // Put the same properties, but without the escape char for space in
+        // value part.
+        Properties props = new Properties();
+        props.put("key1", "  Value\u4e001, has leading and trailing spaces  ");
+        props.put("key2", "Value\u4e002, does not have leading or trailing spaces");
+        props.put("key3", "Value\u4e003,has,no,spaces");
+        props.put("key4", "Value\u4e004, does not have leading spaces  ");
+        props.put("key5", "\t  Value\u4e005, has leading tab and no trailing spaces");
+        props.put("key6", "  Value\u4e006,doesnothaveembeddedspaces  ");
+        props.put(" key1 test ", "key1, has leading and trailing spaces  ");
+        props.put("key2 test", "key2, does not have leading or trailing spaces");
+        props.put("key3test", "key3,has,no,spaces");
+        props.put("key4 test ", "key4, does not have leading spaces  ");
+        props.put("\t key5 test", "key5, has leading tab and no trailing spaces");
+        props.put("  key6  ", "  key6,doesnothaveembeddedspaces  ");
+
+        // Load properties with escape character '\' before space characters
+        Properties props1 = new Properties();
+        props1.load(getInputStream(propsCases));
+        check(props1, props);
+
+        // Test Reader
+        props1 = new Properties();
+        props1.load(getReader(propsCases, "UTF-8"));
+        check(props1, props);
+
+        // Also store the new properties to a storage
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        props.store(baos, "EscapeSpace Test");
+
+        props1 = new Properties();
+        props1.load(getInputStream(baos.toByteArray()));
+        check(props1, props);
+
+        // Reader should work as well
+        props1 = new Properties();
+        props1.load(getReader(baos.toByteArray(), "UTF-8"));
+        check(props1, props);
+
+        // Try Writer
+        baos = new ByteArrayOutputStream();
+        props.store(new OutputStreamWriter(baos, "UTF-8"),
+                     "EscapeSpace Test");
+
+        props1 = new Properties();
+        props1.load(getReader(baos.toByteArray(), "UTF-8"));
+        check(props1, props);
+
+        report("EscapeSpace");
+    }
+
+    private static void LoadParsing() throws Exception {
+        File f = new File(System.getProperty("test.src", "."), "input.txt");
+        FileInputStream myIn = new FileInputStream(f);
+        Properties myProps = new Properties();
+        int size = 0;
+        try {
+            myProps.load(myIn);
+        } finally {
+            myIn.close();
+        }
+
+        if (!myProps.getProperty("key1").equals("value1")      || // comment
+            !myProps.getProperty("key2").equals("abc\\defg\\") || // slash
+            !myProps.getProperty("key3").equals("value3")      || // spaces in key
+            !myProps.getProperty("key4").equals(":value4")     || // separator
+            // Does not recognize comments with leading spaces
+            (myProps.getProperty("#") != null)                 ||
+            // Wrong number of keys in Properties
+            ((size=myProps.size()) != 4))
+            failCount++;
+        report("LoadParsing");
+    }
+
+    private static void SaveEncoding() throws Exception {
+        // Create a properties object to save
+        Properties props = new Properties();
+        props.put("signal", "val\u0019");
+        props.put("ABC 10", "value0");
+        props.put("\uff10test", "value\u0020");
+        props.put("key with spaces", "value with spaces");
+        props.put("key with space and Chinese_\u4e00", "valueWithChinese_\u4e00");
+        props.put(" special#=key ", "value3");
+
+        // Save the properties and check output
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        props.store(baos,"A test");
+
+        // Read properties file and verify \u0019
+        BufferedReader in = new BufferedReader(
+                                new InputStreamReader(
+                                    new ByteArrayInputStream(
+                                        baos.toByteArray())));
+        String firstLine = "foo";
+        while (!firstLine.startsWith("signal"))
+            firstLine = in.readLine();
+        if (firstLine.length() != 16)
+            failCount++;
+
+        // Load the properties set
+        Properties newProps = new Properties();
+        newProps.load(getInputStream(baos.toByteArray()));
+        check(newProps, props);
+
+        // Store(Writer)/Load(Reader)
+        baos = new ByteArrayOutputStream();
+        props.store(new OutputStreamWriter(baos, "EUC_JP"), "A test");
+        newProps = new Properties();
+        newProps.load(getReader(baos.toByteArray(), "EUC_JP"));
+        check(newProps, props);
+
+        report("SaveEncoding");
+    }
+
+   /**
+    * This class tests to see if a properties object
+    * can successfully save and load properties
+    * using character encoding
+    */
+    private static void SaveLoadBasher() throws Exception {
+        String keyValueSeparators = "=: \t\r\n\f#!\\";
+
+        Properties originalProps = new Properties();
+        Properties loadedProps = new Properties();
+
+        // Generate a unicode key and value
+        Random generator = new Random();
+        int achar=0;
+        StringBuffer aKeyBuffer = new StringBuffer(120);
+        StringBuffer aValueBuffer = new StringBuffer(120);
+        String aKey;
+        String aValue;
+        int maxKeyLen = 100;
+        int maxValueLen = 100;
+        int maxPropsNum = 300;
+        for (int x=0; x<maxPropsNum; x++) {
+            for(int y=0; y<maxKeyLen; y++) {
+                achar = generator.nextInt();
+                char test;
+                if(achar < 99999) {
+                    test = (char)(achar);
+                }
+                else {
+                    int zz = achar % 10;
+                    test = keyValueSeparators.charAt(zz);
+                }
+                if (Character.isHighSurrogate(test)) {
+                    aKeyBuffer.append(test);
+                    aKeyBuffer.append('\udc00');
+                    y++;
+                } else if (Character.isLowSurrogate(test)) {
+                    aKeyBuffer.append('\ud800');
+                    aKeyBuffer.append(test);
+                    y++;
+                } else
+                    aKeyBuffer.append(test);
+            }
+            aKey = aKeyBuffer.toString();
+            for(int y=0; y<maxValueLen; y++) {
+                achar = generator.nextInt();
+                char test = (char)(achar);
+                if (Character.isHighSurrogate(test)) {
+                    aKeyBuffer.append(test);
+                    aKeyBuffer.append('\udc00');
+                    y++;
+                } else if (Character.isLowSurrogate(test)) {
+                    aKeyBuffer.append('\ud800');
+                    aKeyBuffer.append(test);
+                    y++;
+                } else {
+                    aValueBuffer.append(test);
+                }
+            }
+            aValue = aValueBuffer.toString();
+
+            // Attempt to add to original
+            try {
+                originalProps.put(aKey, aValue);
+            }
+            catch (IllegalArgumentException e) {
+                System.err.println("disallowing...");
+            }
+            aKeyBuffer.setLength(0);
+            aValueBuffer.setLength(0);
+        }
+
+        // Store(OutputStream)/Load(InputStream)
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        originalProps.store(baos, "test properties");
+        loadedProps.load(getInputStream(baos.toByteArray()));
+        check(loadedProps, originalProps);
+
+        // Store(Writer)/Load(Reader)
+        baos = new ByteArrayOutputStream();
+        originalProps.store(new OutputStreamWriter(baos, "UTF-8"),
+                            "test properties");
+        loadedProps.load(getReader(baos.toByteArray(), "UTF-8"));
+        check(loadedProps, originalProps);
+
+        report("SaveLoadBasher");
+    }
+
+
+    /* Note: this regression test only detects incorrect line
+     * separator on platform running the test
+     */
+    private static void SaveSeparator() throws Exception {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Properties props = new Properties();
+        props.store(baos, "A test");
+
+        // Examine the result to verify that line.separator was used
+        String theSeparator = System.getProperty("line.separator");
+        String content = baos.toString();
+        if (!content.endsWith(theSeparator))
+            failCount++;
+
+        // store(Writer)
+        baos = new ByteArrayOutputStream();
+        props.store(new OutputStreamWriter(baos, "UTF-8"), "A test");
+        content = baos.toString();
+        if (!content.endsWith(theSeparator))
+            failCount++;
+
+        report("SaveSeparator");
+    }
+
+    // Ensure that the save method doesn't close its output stream
+    private static void SaveClose() throws Exception {
+        Properties p = new Properties();
+        p.put("Foo", "Bar");
+        class MyOS extends ByteArrayOutputStream {
+            boolean closed = false;
+            public void close() throws IOException {
+                this.closed = true;
+            }
+        }
+        MyOS myos = new MyOS();
+        p.store(myos, "Test");
+        if (myos.closed)
+            failCount++;
+
+        p.store(new OutputStreamWriter(myos, "UTF-8"), "Test");
+        if (myos.closed)
+            failCount++;
+
+        report ("SaveClose");
+    }
+
+    private static void UnicodeEscape() throws Exception {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        OutputStreamWriter osw = new OutputStreamWriter(baos);
+        osw.write("a=b\nb=\\u0\n");
+        osw.close();
+        Properties props = new Properties();
+        boolean failed = true;
+        try {
+            props.load(getInputStream(baos.toByteArray()));
+        } catch (IllegalArgumentException iae) {
+            failed = false;
+        }
+        if (failed)
+            failCount++;
+
+        failed = true;
+        props = new Properties();
+        try {
+            props.load(getReader(baos.toByteArray(), "UTF-8"));
+        } catch (IllegalArgumentException iae) {
+            failed = false;
+        }
+        if (failed)
+            failCount++;
+        report("UnicodeEscape");
+    }
+
+    private static void SaveComments() throws Exception {
+        String ls = System.getProperty("line.separator");
+        String[] input = new String[] {
+          "Comments with \u4e2d\u6587\u6c49\u5b57 included",
+          "Comments with \n Second comments line",
+          "Comments with \n# Second comments line",
+          "Comments with \n! Second comments line",
+          "Comments with last character is \n",
+          "Comments with last character is \r\n",
+          "Comments with last two characters are \n\n",
+          "Comments with last four characters are \r\n\r\n",
+          "Comments with \nkey4=value4",
+          "Comments with \n#key4=value4"};
+
+        String[] output = new String[] {
+          "#Comments with \\u4E2D\\u6587\\u6C49\\u5B57 included" + ls,
+          "#Comments with " + ls + "# Second comments line" + ls,
+          "#Comments with " + ls + "# Second comments line" + ls,
+          "#Comments with " + ls + "! Second comments line" + ls,
+          "#Comments with last character is " + ls+"#"+ls,
+          "#Comments with last character is " + ls+"#"+ls,
+          "#Comments with last two characters are " + ls+"#"+ls+"#"+ls,
+          "#Comments with last four characters are " + ls+"#"+ls+"#"+ls};
+
+        Properties props = new Properties();
+        ByteArrayOutputStream baos;
+        int i = 0;
+        for (i = 0; i < output.length; i++) {
+            baos = new ByteArrayOutputStream();
+            props.store(baos, input[i]);
+            String result = baos.toString("iso8859-1");
+            if (result.indexOf(output[i]) == -1) {
+                failCount++;
+            }
+        }
+        props.put("key1", "value1");
+        props.put("key2", "value2");
+        props.put("key3", "value3");
+        for (; i < input.length; i++) {
+            baos = new ByteArrayOutputStream();
+            props.store(baos, input[i]);
+            Properties propsNew = new Properties();
+            propsNew.load(getInputStream(baos.toByteArray()));
+            check(propsNew, props);
+
+            baos = new ByteArrayOutputStream();
+            props.store(new OutputStreamWriter(baos, "UTF-8"),
+                        input[i]);
+            propsNew = new Properties();
+            propsNew.load(getReader(baos.toByteArray(), "UTF-8"));
+            check(propsNew, props);
+        }
+        report("SaveComments");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/Save.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4034428
+ * @summary Test for leading space in values output from properties
+ */
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * This class tests to see if the properties object saves
+ * leading space in the value of a property as it should
+ * do according to the JLS
+ */
+public class Save {
+
+    public static void main(String argv[]) {
+        int testSucceeded=0;
+        FileOutputStream myOutput;
+
+        // create a properties object to save
+        Properties myProperties = new Properties();
+        String value = "   spacesfirst";
+        myProperties.put("atest", value);
+
+        try {
+            // save the object and check output
+            myOutput = new FileOutputStream("testout");
+            myProperties.store(myOutput,"A test");
+            myOutput.close();
+
+            //load the properties set
+            FileInputStream myIn = new FileInputStream("testout");
+            Properties myNewProps = new Properties();
+            try {
+                myNewProps.load(myIn);
+            } finally {
+                myIn.close();
+            }
+
+            //check the results
+            String newValue = (String) myNewProps.get("atest");
+            if (!newValue.equals(value))
+                throw new RuntimeException(
+                    "Properties does not save leading spaces in values correctly.");
+         } catch (IOException e) { //do nothing
+         }
+     }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/SaveClose.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4095273
+ * @summary Ensure that the save method doesn't close its output stream
+ * @author Mark Reinhold
+ */
+
+import java.util.Properties;
+import java.io.OutputStream;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+
+
+public class SaveClose {
+
+
+    static class O extends FilterOutputStream {
+
+        boolean closed = false;
+
+        O(OutputStream o) {
+            super(o);
+        }
+
+        public void close() throws IOException {
+            this.closed = true;
+        }
+
+    }
+
+
+    public static void main(String argv[]) throws Exception {
+        Properties p = new Properties();
+        p.put("Foo", "Bar");
+        O o = new O(System.err);
+        p.store(o, "Test");
+        if (o.closed)
+            throw new Exception("Properties.save closed its output stream");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/SaveComments.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 5087448
+ * @summary Verify that property.save saves comments correctly
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class SaveComments {
+
+    public static void main(String[] argv) throws IOException {
+        String ls = System.getProperty("line.separator");
+        String[] input = new String[] {
+          "Comments with \u4e2d\u6587\u6c49\u5b57 included",
+          "Comments with \n Second comments line",
+          "Comments with \n# Second comments line",
+          "Comments with \n! Second comments line",
+          "Comments with last character is \n",
+          "Comments with last character is \r\n",
+          "Comments with last two characters are \n\n",
+          "Comments with last four characters are \r\n\r\n",
+          "Comments with \nkey4=value4",
+          "Comments with \n#key4=value4"};
+
+        String[] output = new String[] {
+          "#Comments with \\u4E2D\\u6587\\u6C49\\u5B57 included" + ls,
+          "#Comments with " + ls + "# Second comments line" + ls,
+          "#Comments with " + ls + "# Second comments line" + ls,
+          "#Comments with " + ls + "! Second comments line" + ls,
+          "#Comments with last character is " + ls+"#"+ls,
+          "#Comments with last character is " + ls+"#"+ls,
+          "#Comments with last two characters are " + ls+"#"+ls+"#"+ls,
+          "#Comments with last four characters are " + ls+"#"+ls+"#"+ls};
+
+        Properties props = new Properties();
+        boolean failed = false;
+        int i = 0;
+        for (i = 0; i < output.length; i++) {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(200);
+            props.store(baos, input[i]);
+            String result = baos.toString("iso8859-1");
+            if (result.indexOf(output[i]) == -1) {
+                System.out.println("Wrong \"store()\" output:");
+                System.out.println(result);
+                failed = true;
+            }
+        }
+
+        props.put("key1", "value1");
+        props.put("key2", "value2");
+        props.put("key3", "value3");
+        for (; i < input.length; i++) {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(200);
+            props.store(baos, input[i]);
+            Properties propsNew = new Properties();
+            propsNew.load(new ByteArrayInputStream(baos.toByteArray()));
+            /*
+            Set<Map.Entry<Object, Object>> kvsetNew = propsNew.entrySet();
+            Set<Map.Entry<Object, Object>> kvset = props.entrySet();
+            if (!kvsetNew.containsAll(kvset) || !kvset.containsAll(kvsetNew)) {
+            */
+            if (!props.equals (propsNew)) {
+                System.out.println("Wrong output:");
+                System.out.println(baos.toString("iso8859-1"));
+                failed = true;
+            }
+        }
+        if (failed)
+            throw new RuntimeException("Incorrect Properties Comment Output.");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/SaveEncoding.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+ /*
+  * @test
+  * @bug 4026910 4011163 4077980 4096786 4213537
+  * @summary Test for saving and loading encoded keys and values
+  */
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Properties;
+
+/**
+ * This class tests to see if the properties object saves
+ * and loads keys and values properly
+ */
+public class SaveEncoding {
+
+    public static void main(String argv[]) {
+        int testSucceeded=0;
+        FileOutputStream myOutput;
+
+        // Create a properties object to save
+        Properties myProperties = new Properties();
+        myProperties.put("signal", "val\u0019");
+        myProperties.put("ABC 10", "value0");
+        myProperties.put("\uff10test", "value\u0020");
+        myProperties.put("key with spaces", "value with spaces");
+        myProperties.put(" special#=key ", "value3");
+
+        try {
+            // Destroy old test file if any
+            File myFile = new File("testout");
+            myFile.delete();
+
+            // Save the object and check output
+            myOutput = new FileOutputStream("testout");
+            myProperties.store(myOutput,"A test");
+            myOutput.close();
+
+            // Read properties file and verify \u0019
+            FileInputStream inFile = new FileInputStream("testout");
+            BufferedReader in = new BufferedReader(
+                                new InputStreamReader(inFile));
+            String firstLine = "foo";
+            while (!firstLine.startsWith("signal"))
+                firstLine = in.readLine();
+            inFile.close();
+            if (firstLine.length() != 16)
+                throw new RuntimeException(
+                    "Incorrect storage of values < 32.");
+
+            // Load the properties set
+            FileInputStream myIn = new FileInputStream("testout");
+            Properties myNewProps = new Properties();
+            try {
+                myNewProps.load(myIn);
+            } finally {
+                myIn.close();
+            }
+
+            // Check the results
+            if (!myNewProps.equals(myProperties))
+                throw new RuntimeException(
+                    "Properties is not character encoding safe.");
+        } catch (IOException e) { // Do nothing
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/SaveLoadBasher.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4077980 4011163 4096786 4075955
+ * @summary Test properties save and load methods
+ * @key randomness
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+import java.util.Random;
+
+/**
+ * This class tests to see if a properties object
+ * can successfully save and load properties
+ * using character encoding
+ */
+public class SaveLoadBasher {
+
+    private static String keyValueSeparators = "=: \t\r\n\f#!\\";
+
+    public static void main(String[] args) throws Exception {
+
+        Properties originalProps = new Properties();
+        Properties loadedProps = new Properties();
+
+        // Generate a unicode key and value
+        Random generator = new Random();
+        int achar=0;
+        StringBuffer aKeyBuffer = new StringBuffer(120);
+        StringBuffer aValueBuffer = new StringBuffer(120);
+        String aKey;
+        String aValue;
+        for (int x=0; x<300; x++) {
+            for(int y=0; y<100; y++) {
+                achar = generator.nextInt();
+                char test;
+                if(achar < 99999) {
+                    test = (char)(achar);
+                }
+                else {
+                    int zz = achar % 10;
+                    test = keyValueSeparators.charAt(zz);
+                }
+                aKeyBuffer.append(test);
+            }
+            aKey = aKeyBuffer.toString();
+            for(int y=0; y<100; y++) {
+                achar = generator.nextInt();
+                char test = (char)(achar);
+                aValueBuffer.append(test);
+            }
+            aValue = aValueBuffer.toString();
+
+            // Attempt to add to original
+            try {
+                originalProps.put(aKey, aValue);
+            }
+            catch (IllegalArgumentException e) {
+                System.err.println("disallowing...");
+            }
+            aKeyBuffer.setLength(0);
+            aValueBuffer.setLength(0);
+        }
+
+        // Destroy old test file if it exists
+        File oldTestFile = new File("props3");
+        oldTestFile.delete();
+
+        // Save original
+        System.out.println("Saving...");
+        OutputStream out = new FileOutputStream("props3");
+        originalProps.store(out, "test properties");
+        out.close();
+
+        // Load in the set
+        System.out.println("Loading...");
+        InputStream in = new FileInputStream("props3");
+        try {
+            loadedProps.load(in);
+        } finally {
+            in.close();
+        }
+
+        // Compare results
+        if (!originalProps.equals(loadedProps))
+           throw new RuntimeException("Properties load and save failed");
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/SaveSeparator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4062657
+ * @summary Verify that property.save uses local lineseparator
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+/* Note: this regression test only detects incorrect line
+ * separator on platform running the test
+ */
+
+public class SaveSeparator {
+
+    public static void main(String[] argv) throws IOException {
+        // Save a property set
+        Properties myProps = new Properties();
+        ByteArrayOutputStream myOut = new ByteArrayOutputStream(40);
+        myProps.store(myOut, "A test");
+
+        // Examine the result to verify that line.separator was used
+        String theSeparator = System.getProperty("line.separator");
+        String content = myOut.toString();
+        if (!content.endsWith(theSeparator))
+            throw new RuntimeException("Incorrect Properties line separator.");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/StoreDeadlock.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 6199320
+ * @summary Properties.store() causes deadlock when concurrently calling TimeZone apis
+ * @run main/timeout=20 StoreDeadlock
+ * @author Xueming Shen
+ */
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.TimeZone;
+
+public class StoreDeadlock {
+    public StoreDeadlock() {
+        Properties sysproperty = System.getProperties();
+        Thread1 t1 = new Thread1(sysproperty);
+        Thread2 t2 = new Thread2();
+        t1.start();
+        t2.start();
+    }
+    public static void main(String[] args) {
+        StoreDeadlock deadlock = new StoreDeadlock();
+    }
+    class Thread1 extends Thread {
+        Properties sp;
+        public Thread1(Properties p) {
+            sp = p;
+        }
+        public void run() {
+            try {
+                sp.store(System.out, null);
+            } catch (IOException e) {
+                System.out.println("IOException : " + e);
+            }
+        }
+    }
+    class Thread2 extends Thread {
+        public void run() {
+            System.out.println("tz=" + TimeZone.getTimeZone("PST"));
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/StringPropertyNames.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug     6253413 8059361
+ * @summary Test for Properties.stringPropertyNames() if the system
+ *          properties contain another list of properties as the defaults.
+ * @author  Mandy Chung
+ *
+ * @run build StringPropertyNames
+ * @run main  StringPropertyNames
+ */
+
+import java.util.Properties;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Set;
+
+public class StringPropertyNames {
+    private static int NUM_SHARE_PROPS = 2;
+    private static int NUM_PROPS1 = 3;
+    private static int NUM_PROPS2 = 5;
+    private static String KEY = "good.property.";
+    private static String VALUE = "good.value.";
+    public static void main(String[] argv) throws Exception {
+        Properties props1 = new Properties();
+        Properties props2 = new Properties(props1);
+
+        // add several new properties
+        for (int i = 0; i < NUM_PROPS1; i++) {
+            props1.put(KEY + "1." + i, VALUE + "1." + i);
+        }
+        for (int i = 0; i < NUM_PROPS2; i++) {
+            props2.put(KEY + "2." + i, VALUE + "2." + i);
+        }
+
+        // add the same properties in both props1 and props2
+        for (int i = 0; i < NUM_SHARE_PROPS; i++) {
+            props1.put(KEY + i, VALUE + "1." + i);
+            props2.put(KEY + i, VALUE + "2." + i);
+        }
+        checkProperties(props1,
+                        NUM_PROPS1 + NUM_SHARE_PROPS, // size of props1
+                        NUM_PROPS1 + NUM_SHARE_PROPS, // num of string keys
+                        NUM_PROPS1 + NUM_SHARE_PROPS, // num of keys in propertyName(),
+                        false);
+        checkProperties(props2,
+                        NUM_PROPS2 + NUM_SHARE_PROPS, // size of props2
+                        NUM_PROPS1 + NUM_PROPS2 + NUM_SHARE_PROPS, // num of string keys
+                        NUM_PROPS1 + NUM_PROPS2 + NUM_SHARE_PROPS, // num of keys in propertyName(),
+                        false);
+
+        // Add non-String value
+        props1.put(KEY + "9", new Integer(4));
+        checkProperties(props1,
+                        NUM_PROPS1 + NUM_SHARE_PROPS + 1, // size of props1
+                        NUM_PROPS1 + NUM_SHARE_PROPS, // num of string keys
+                        NUM_PROPS1 + NUM_SHARE_PROPS + 1, // num of keys in propertyName(),
+                        false);
+        checkProperties(props2,
+                        NUM_PROPS2 + NUM_SHARE_PROPS, // size of props2
+                        NUM_PROPS1 + NUM_PROPS2 + NUM_SHARE_PROPS, // num of string keys
+                        NUM_PROPS1 + NUM_PROPS2 + NUM_SHARE_PROPS + 1, // num of keys in propertyName(),
+                        false);
+        Object v = props1.remove(KEY + "9");
+        if (v == null) {
+            throw new RuntimeException("Test Failed: " +
+                "Key " + KEY + "9" + " not found");
+        }
+
+        // Add a non-String key
+        props1.put(new Integer(5), "good.value.5");
+        props2.put(new Object(), new Object());
+        checkProperties(props1,
+                        NUM_PROPS1 + NUM_SHARE_PROPS + 1, // size of props1
+                        NUM_PROPS1 + NUM_SHARE_PROPS, // num of string keys
+                        NUM_PROPS1 + NUM_SHARE_PROPS + 1, // num of keys in propertyName(),
+                        true);
+        checkProperties(props2,
+                        NUM_PROPS2 + NUM_SHARE_PROPS + 1, // size of props2
+                        NUM_PROPS1 + NUM_PROPS2 + NUM_SHARE_PROPS, // num of string keys
+                        NUM_PROPS1 + NUM_PROPS2 + NUM_SHARE_PROPS + 2, // num of keys in propertyName(),
+                        true);
+        System.out.println("Test passed.");
+    }
+
+    private static void checkProperties(Properties props,
+                                        int propSize,
+                                        int numStringKeys,
+                                        int enumerateSize,
+                                        boolean hasNonStringKeys) {
+        // check the size of the properties
+        if (props.size() != propSize) {
+            throw new RuntimeException("Test Failed: " +
+                "Expected number of properties = " +
+                propSize + " but found = " + props.size());
+        }
+
+        // check the number of properties whose key and value
+        // are both strings
+        Set<String> keys = props.stringPropertyNames();
+        if (keys.size() != numStringKeys) {
+            throw new RuntimeException("Test Failed: " +
+                "Expected number of String keys = " +
+                numStringKeys + " but found = " + keys.size());
+        }
+        boolean cceThrown = false;
+        try {
+            // check the number of properties whose key are strings
+            // but its value can be anything in the current impl
+            int count = 0;
+            Enumeration<?> e = props.propertyNames();
+            for (;e.hasMoreElements(); e.nextElement()) {
+                count++;
+            }
+            if (count != enumerateSize) {
+                throw new RuntimeException("Test Failed: " +
+                    "Expected number of enumerated keys = " +
+                    enumerateSize + " but found = " + count);
+            }
+        } catch (ClassCastException e) {
+            if (!hasNonStringKeys) {
+                RuntimeException re = new RuntimeException("Test Failed: " +
+                    "ClassCastException is expected not to be thrown");
+                re.initCause(e);
+                throw re;
+            }
+            cceThrown = true;
+        }
+
+        if ((hasNonStringKeys && !cceThrown)) {
+            throw new RuntimeException("Test Failed: " +
+                "ClassCastException is expected to be thrown");
+        }
+
+        // make sure the set cannot be modified
+        try {
+            keys.add("xyzzy");
+            throw new RuntimeException("Test Failed: " +
+                "add() should have thrown UnsupportedOperationException");
+        } catch (UnsupportedOperationException ignore) { }
+
+        Iterator<String> it = keys.iterator();
+        if (it.hasNext()) {
+            try {
+                keys.remove(it.next());
+                throw new RuntimeException("Test Failed: " +
+                    "remove() should have thrown UnsupportedOperationException");
+            } catch (UnsupportedOperationException ignore) { }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/UnicodeEscape.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4792682
+ * @summary Test for correct exception with a short unicode escape
+*/
+
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class UnicodeEscape {
+
+    public static void main(String argv[]) throws Exception {
+        save();
+        load();
+    }
+
+    private static void save() throws Exception {
+        FileWriter out = new FileWriter("a.properties");
+        out.write("a=b\nb=\\u0\n");
+        out.close();
+    }
+
+    private static void load() throws Exception {
+        Properties properties = new Properties();
+        InputStream in = new FileInputStream("a.properties");
+        try {
+            properties.load(in);
+        } catch (IllegalArgumentException iae) {
+            // Correct result
+        } finally {
+            in.close();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/XMLSaveLoadBasher.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4749531 5015114 5055738
+ * @summary Test properties XML save and load methods
+ * @key randomness
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+import java.util.Random;
+
+/**
+ * This class tests to see if a properties object
+ * can successfully save and load properties in XML
+ */
+public class XMLSaveLoadBasher {
+
+    private static final int MAX_KEY_SIZE = 120;
+    private static final int MIN_KEY_SIZE = 1;
+    private static final int MAX_VALUE_SIZE = 120;
+    private static final int MIN_VALUE_SIZE = 0;
+
+    public static void main(String[] args) throws Exception {
+        testSaveLoad("UTF-8", "test save");
+        testSaveLoad("UTF-8", null);
+        testSaveLoad("ISO-8859-1", "test save");
+        testSaveLoad("KOI8-R", "test save");
+    }
+
+    private static void testSaveLoad(String encoding, String comment)
+        throws Exception
+    {
+        Properties originalProps = new Properties();
+        Properties loadedProps = new Properties();
+
+        // Generate a unicode key and value
+        Random generator = new Random();
+
+        for (int x=0; x<10; x++) {
+            String aKey;
+            String aValue;
+
+            // Assumes MAX_KEY_SIZE >> MIN_KEY_SIZE
+            int keyLen = generator.nextInt(MAX_KEY_SIZE - MIN_KEY_SIZE + 1) +
+                         MIN_KEY_SIZE;
+            int valLen = generator.nextInt(
+                MAX_VALUE_SIZE - MIN_VALUE_SIZE + 1) + MIN_VALUE_SIZE;
+
+            StringBuffer aKeyBuffer = new StringBuffer(keyLen);
+            StringBuffer aValueBuffer = new StringBuffer(valLen);
+
+            for(int y=0; y<keyLen; y++) {
+                char test = (char)(generator.nextInt(6527) + 32);
+                aKeyBuffer.append(test);
+            }
+            aKey = aKeyBuffer.toString();
+
+            for(int y=0; y<valLen; y++) {
+                char test = (char)(generator.nextInt(6527) + 32);
+                aValueBuffer.append(test);
+            }
+            aValue = aValueBuffer.toString();
+
+            // Attempt to add to original
+            try {
+                originalProps.setProperty(aKey, aValue);
+            } catch (IllegalArgumentException e) {
+                System.err.println("disallowing...");
+            }
+        }
+
+        //originalProps.put("squid", "kraken");
+        //originalProps.put("demon", "furnace");
+
+        // Destroy old test file if it exists
+        File oldTestFile = new File("props3");
+        oldTestFile.delete();
+
+        // Save original
+        System.err.println("Saving...");
+        try (OutputStream out = new FileOutputStream("props3")) {
+            originalProps.storeToXML(out, comment, encoding);
+        }
+
+        // Load in the set
+        System.err.println("Loading...");
+        try (InputStream in = new FileInputStream("props3")) {
+            loadedProps.loadFromXML(in);
+        }
+
+        // Compare results
+        if (!originalProps.equals(loadedProps))
+           throw new RuntimeException("Properties load and save failed");
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/input.txt	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,10 @@
+# this input file is used for the LoadParsing.java test
+# comment ending with slash \
+key1 = value1
+key2 = abc\\\
+def\
+g\\
+   key3 =   value3
+key4 = :value4
+ # comment with leading space
+#key = comment without line terminator
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/testData1	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,35 @@
+# testcases
+key0=abcd\
+
+\
+key1=value1
+
+key2 \= abcde
+key3
+
+   #key4=abcde
+key5 ===Arial,ANSI_CHARSET
+key6= WingDings,SYMBOL_CHARSET \\\
+ abc
+key7 Symbol,SYMBOL_CHARSET \
+
+	keyabcdef
+
+key8notassign   abcdef
+key9\ Term=ABCDE
+
+\\:key10=bar
+
+\\\\:key11=bar2
+
+\\\:key12=bar2
+
+key13dialog.3=
+key14_asdfa    
+key15  \ abcdef
+key16\ b=  \ abcdef
+key17=\
+#bar\
+baz
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/testData1.dos	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,35 @@
+# testcases
+key0=abcd\
+
+\
+key1=value1
+
+key2 \= abcde
+key3
+
+   #key4=abcde
+key5 ===Arial,ANSI_CHARSET
+key6= WingDings,SYMBOL_CHARSET \\\
+ abc
+key7 Symbol,SYMBOL_CHARSET \
+
+	keyabcdef
+
+key8notassign   abcdef
+key9\ Term=ABCDE
+
+\\:key10=bar
+
+\\\\:key11=bar2
+
+\\\:key12=bar2
+
+key13dialog.3=
+key14_asdfa    
+key15  \ abcdef
+key16\ b=  \ abcdef
+key17=\
+#bar\
+baz
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/testData2	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,4 @@
+#
+key1=-monotype-timesnewroman-regular-r---*-%d-*-*-p-*-iso8859-1serif.1a-monotype-timesnewroman-regular-r-normal--*-%d-*-*-p-*-iso8859-2serif.2a-b&h-LucidaBrightLat4-Normal-r-normal--*-%d-*-*-p-*-iso8859-4serif.3a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-5serif.4a-monotype-timesnewromangreek-regular-r-normal--*-%d-*-*-p-*-iso8859-7serif.5a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-9serif.6a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-15serif.7a-hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1serif.8a-sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0serif.9a-ricoh-hgminchol-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0serif.10a-ricoh-hgminchol-medium-r-normal--*-%d-*-*-m-*-jisx0208.1983-0serif.11a-ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0serif.12a-hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3serif.13a-urw-itczapfdingbats-medium-r-normal--*-%d-*-*-p-*-sun-fontspecificserif.14a-*-symbol-medium-r-normal--*-%d-*-*-p-*-sun-fontspecificbserif.italic.0=-monotype-timesbnewbroman-regular-i---*-%d-*-*-p-*-iso8859-1bserif.italic.1=-monotype-timesbnewbroman-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-2
+
+key2=-b&h-LucidaBrightLat4-normal-i-normal-Italic-*-%d-*-*-p-*-iso8859-4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/testData2.dos	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,4 @@
+#
+key1=-monotype-timesnewroman-regular-r---*-%d-*-*-p-*-iso8859-1serif.1a-monotype-timesnewroman-regular-r-normal--*-%d-*-*-p-*-iso8859-2serif.2a-b&h-LucidaBrightLat4-Normal-r-normal--*-%d-*-*-p-*-iso8859-4serif.3a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-5serif.4a-monotype-timesnewromangreek-regular-r-normal--*-%d-*-*-p-*-iso8859-7serif.5a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-9serif.6a-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-15serif.7a-hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1serif.8a-sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0serif.9a-ricoh-hgminchol-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0serif.10a-ricoh-hgminchol-medium-r-normal--*-%d-*-*-m-*-jisx0208.1983-0serif.11a-ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0serif.12a-hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3serif.13a-urw-itczapfdingbats-medium-r-normal--*-%d-*-*-p-*-sun-fontspecificserif.14a-*-symbol-medium-r-normal--*-%d-*-*-p-*-sun-fontspecificbserif.italic.0=-monotype-timesbnewbroman-regular-i---*-%d-*-*-p-*-iso8859-1bserif.italic.1=-monotype-timesbnewbroman-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-2
+
+key2=-b&h-LucidaBrightLat4-normal-i-normal-Italic-*-%d-*-*-p-*-iso8859-4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/testData3.dos	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,29 @@
+key1=\
+-monotype-times new roman-regular-r---*-%d-*-*-p-*-iso8859-1, \
+-monotype-times new roman-regular-r-normal--*-%d-*-*-p-*-iso8859-2, \
+-b&h-LucidaBrightLat4-Normal-r-normal--*-%d-*-*-p-*-iso8859-4, \
+-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-5, \
+-monotype-times new roman greek-regular-r-normal--*-%d-*-*-p-*-iso8859-7, \
+-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-9, \
+-monotype-times-regular-r-normal--*-%d-*-*-p-*-iso8859-15, \
+-hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1, \
+-sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0, \
+-ricoh-hg gothic b-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0, \
+-ricoh-hg gothic b-medium-r-normal-*-*-%d-*-*-m-*-jisx0208.1983-0, \
+-ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0, \
+-hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3
+
+key2=\
+-monotype-times new roman-regular-i---*-%d-*-*-p-*-iso8859-1, \
+-monotype-times new roman-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-2, \
+-b&h-LucidaBrightLat4-normal-i-normal-Italic-*-%d-*-*-p-*-iso8859-4, \
+-monotype-times-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-5, \
+-monotype-times new roman greek-regular-i-normal--*-%d-*-*-p-*-iso8859-7, \
+-monotype-times-regular-i-normal-italic-*-%d-*-*-p-*-iso8859-9, \
+-monotype-times-regular-i-normal--*-%d-*-*-p-*-iso8859-15, \
+-hanyi-ming-medium-r-normal--*-%d-*-*-m-*-big5-1, \
+-sun-song-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0, \
+-ricoh-hg gothic b-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0, \
+-ricoh-hg gothic b-medium-r-normal-*-*-%d-*-*-m-*-jisx0208.1983-0, \
+-ricoh-heiseimin-w3-r-normal--*-%d-*-*-m-*-jisx0212.1990-0, \
+-hanyang-myeongjo-medium-r-normal--*-%d-*-*-m-*-ksc5601.1992-3
--- a/test/jdk/java/util/Random/NextBytes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Random/NextBytes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,8 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.Random;
 
 public class NextBytes {
     private static void realMain(String[] args) throws Throwable {
--- a/test/jdk/java/util/TimSort/SortPerf.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TimSort/SortPerf.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,8 +21,6 @@
  * questions.
  */
 
-import java.util.Arrays;
-
 public class SortPerf {
     private static final int NUM_SETS = 5;
     private static final int[] lengths = { 10, 100, 1000, 10000, 1000000 };
--- a/test/jdk/java/util/TreeMap/ContainsValue.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TreeMap/ContainsValue.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,8 @@
  * @summary TreeMap.containsValue throws NullPointerExc for empty TreeMap
  */
 
-import java.util.*;
+import java.util.Map;
+import java.util.TreeMap;
 
 public class ContainsValue {
     public static void main(String[] args) {
--- a/test/jdk/java/util/TreeMap/HeadTailTypeError.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TreeMap/HeadTailTypeError.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,10 @@
  *          valid range in the backing array
  */
 
-import java.util.*;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 public class HeadTailTypeError {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/TreeMap/NullAtEnd.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TreeMap/NullAtEnd.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,8 +28,9 @@
  * @author  Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Comparator;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 public class NullAtEnd {
     static volatile int passed = 0, failed = 0;
--- a/test/jdk/java/util/TreeMap/NullPermissiveComparator.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TreeMap/NullPermissiveComparator.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,10 +28,9 @@
  * @author Martin Buchholz
  */
 
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-import java.lang.reflect.*;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.TreeMap;
 
 @SuppressWarnings("unchecked")
 public class NullPermissiveComparator {
--- a/test/jdk/java/util/TreeMap/SubMap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TreeMap/SubMap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,11 @@
  * @summary The firstKey and lastKey
  */
 
-import java.util.*;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 public class SubMap {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/TreeMap/SubMapClear.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/TreeMap/SubMapClear.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,9 @@
  * @author  Josh Bloch
  */
 
-import java.util.*;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 public class SubMapClear {
     public static void main(String[] args) {
--- a/test/jdk/java/util/Vector/ComodifiedRemoveAllElements.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Vector/ComodifiedRemoveAllElements.java	Fri Feb 02 01:52:03 2018 +0000
@@ -29,7 +29,9 @@
  * @author Konstantin Kladko
  */
 
-import java.util.*;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Vector;
 
 public class ComodifiedRemoveAllElements {
     public static void main(String[] args) {
--- a/test/jdk/java/util/Vector/CopyInto.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Vector/CopyInto.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,10 +28,7 @@
  * @author Martin Buchholz
  */
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
+import java.util.Vector;
 
 public class CopyInto {
     private static void realMain(String[] args) throws Throwable {
--- a/test/jdk/java/util/Vector/IllegalConstructorArgs.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Vector/IllegalConstructorArgs.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,7 @@
  * @summary Test for illegal argument exception
  */
 
-import java.util.*;
+import java.util.Vector;
 
 /**
  * This is a simple test class created to check for
--- a/test/jdk/java/util/Vector/LastIndexOf.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Vector/LastIndexOf.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,7 @@
  *          valid range in the backing array
  */
 
-import java.util.*;
+import java.util.Vector;
 
 public class LastIndexOf {
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/Vector/SyncLastIndexOf.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/Vector/SyncLastIndexOf.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,7 +27,8 @@
  * @summary Vector's lastIndexOf(Object) was lacking synchronization
  * @author Konstantin Kladko
  */
-import java.util.*;
+
+import java.util.Vector;
 
 public class SyncLastIndexOf {
 
--- a/test/jdk/java/util/WeakHashMap/GCDuringIteration.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/WeakHashMap/GCDuringIteration.java	Fri Feb 02 01:52:03 2018 +0000
@@ -32,7 +32,7 @@
  * @key randomness
  */
 
-import static java.util.concurrent.TimeUnit.SECONDS;
+import jdk.test.lib.RandomFactory;
 
 import java.lang.ref.WeakReference;
 import java.util.Arrays;
@@ -43,7 +43,8 @@
 import java.util.WeakHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.function.BooleanSupplier;
-import jdk.test.lib.RandomFactory;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
 
 public class GCDuringIteration {
 
--- a/test/jdk/java/util/WeakHashMap/Iteration.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/WeakHashMap/Iteration.java	Fri Feb 02 01:52:03 2018 +0000
@@ -28,7 +28,9 @@
  * @author  Josh Bloch
  */
 
-import java.util.*;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 public class Iteration {
     public static void main(String[] args) {
--- a/test/jdk/java/util/WeakHashMap/ZeroInitCap.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/WeakHashMap/ZeroInitCap.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,8 @@
  * questions.
  */
 
-import java.util.*;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 /*
  * @test
--- a/test/jdk/java/util/concurrent/ArrayBlockingQueue/WhiteBox.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ArrayBlockingQueue/WhiteBox.java	Fri Feb 02 01:52:03 2018 +0000
@@ -39,7 +39,7 @@
  */
 
 import static org.testng.Assert.*;
-import org.testng.annotations.DataProvider;
+
 import org.testng.annotations.Test;
 
 import java.lang.ref.WeakReference;
--- a/test/jdk/java/util/concurrent/BlockingQueue/DrainToFails.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/BlockingQueue/DrainToFails.java	Fri Feb 02 01:52:03 2018 +0000
@@ -78,9 +78,7 @@
             pseudodelay = i;
         }
         public int compareTo(PDelay other) {
-            int a = this.pseudodelay;
-            int b = other.pseudodelay;
-            return (a < b) ? -1 : (a > b) ? 1 : 0;
+            return Integer.compare(this.pseudodelay, other.pseudodelay);
         }
         public int compareTo(Delayed y) {
             return compareTo((PDelay)y);
--- a/test/jdk/java/util/concurrent/BlockingQueue/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/BlockingQueue/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/BlockingQueue/OfferDrainToLoops.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/BlockingQueue/OfferDrainToLoops.java	Fri Feb 02 01:52:03 2018 +0000
@@ -79,7 +79,7 @@
         final long timeoutMillis = 10L * 1000L;
         final SplittableRandom rnd = new SplittableRandom();
 
-        /** Poor man's bounded buffer. */
+        // Poor man's bounded buffer.
         final AtomicLong approximateCount = new AtomicLong(0L);
 
         abstract class CheckedThread extends Thread {
--- a/test/jdk/java/util/concurrent/CompletableFuture/Basic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/CompletableFuture/Basic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -151,11 +151,11 @@
         // runAsync tests
         //----------------------------------------------------------------
         try {
-            CompletableFuture<Void> cf = runAsync(() -> { });
+            CompletableFuture<Void> cf = runAsync(() -> {});
             checkCompletedNormally(cf, cf.join());
-            cf = runAsync(() -> { }, commonPool());
+            cf = runAsync(() -> {}, commonPool());
             checkCompletedNormally(cf, cf.join());
-            cf = runAsync(() -> { }, executor);
+            cf = runAsync(() -> {}, executor);
             checkCompletedNormally(cf, cf.join());
             cf = runAsync(() -> { throw new RuntimeException(); });
             checkCompletedExceptionally(cf);
@@ -200,32 +200,32 @@
         try {
             CompletableFuture<Integer> cf2;
             CompletableFuture<String> cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenApply((x) -> { if (x.equals("a test string")) return 1; else return 0; });
+            cf2 = cf1.thenApply(x -> x.equals("a test string") ? 1 : 0);
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, 1);
 
             cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenApplyAsync((x) -> { if (x.equals("a test string")) return 1; else return 0; });
+            cf2 = cf1.thenApplyAsync(x -> x.equals("a test string") ? 1 : 0);
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, 1);
 
             cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenApplyAsync((x) -> { if (x.equals("a test string")) return 1; else return 0; }, executor);
+            cf2 = cf1.thenApplyAsync(x -> x.equals("a test string") ? 1 : 0, executor);
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, 1);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenApply((x) -> { return 0; } );
+            cf2 = cf1.thenApply(x -> 0);
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenApplyAsync((x) -> { return 0; } );
+            cf2 = cf1.thenApplyAsync(x -> 0);
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenApplyAsync((x) -> { return 0; }, executor);
+            cf2 = cf1.thenApplyAsync(x -> 0, executor);
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
         } catch (Throwable t) { unexpected(t); }
@@ -237,40 +237,40 @@
             CompletableFuture<Void> cf2;
             int before = atomicInt.get();
             CompletableFuture<String> cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenAccept((x) -> { if (x.equals("a test string")) { atomicInt.incrementAndGet(); return; } throw new RuntimeException(); });
+            cf2 = cf1.thenAccept(x -> { if (x.equals("a test string")) { atomicInt.incrementAndGet(); return; } throw new RuntimeException(); });
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, null);
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenAcceptAsync((x) -> { if (x.equals("a test string")) { atomicInt.incrementAndGet(); return; } throw new RuntimeException(); });
+            cf2 = cf1.thenAcceptAsync(x -> { if (x.equals("a test string")) { atomicInt.incrementAndGet(); return; } throw new RuntimeException(); });
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, null);
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenAcceptAsync((x) -> { if (x.equals("a test string")) { atomicInt.incrementAndGet(); return; } throw new RuntimeException(); }, executor);
+            cf2 = cf1.thenAcceptAsync(x -> { if (x.equals("a test string")) { atomicInt.incrementAndGet(); return; } throw new RuntimeException(); }, executor);
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, null);
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenAccept((x) -> { atomicInt.incrementAndGet(); } );
+            cf2 = cf1.thenAccept(x -> atomicInt.incrementAndGet());
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenAcceptAsync((x) -> { atomicInt.incrementAndGet(); } );
+            cf2 = cf1.thenAcceptAsync(x -> atomicInt.incrementAndGet());
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenAcceptAsync((x) -> { atomicInt.incrementAndGet(); }, executor );
+            cf2 = cf1.thenAcceptAsync(x -> atomicInt.incrementAndGet(), executor );
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
@@ -283,40 +283,40 @@
             CompletableFuture<Void> cf2;
             int before = atomicInt.get();
             CompletableFuture<String> cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenRun(() -> { atomicInt.incrementAndGet(); });
+            cf2 = cf1.thenRun(() -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, null);
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenRunAsync(() -> { atomicInt.incrementAndGet(); });
+            cf2 = cf1.thenRunAsync(() -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, null);
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = supplyAsync(() -> "a test string");
-            cf2 = cf1.thenRunAsync(() -> { atomicInt.incrementAndGet(); }, executor);
+            cf2 = cf1.thenRunAsync(() -> atomicInt.incrementAndGet(), executor);
             checkCompletedNormally(cf1, "a test string");
             checkCompletedNormally(cf2, null);
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenRun(() -> { atomicInt.incrementAndGet(); });
+            cf2 = cf1.thenRun(() -> atomicInt.incrementAndGet());
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenRunAsync(() -> { atomicInt.incrementAndGet(); });
+            cf2 = cf1.thenRunAsync(() -> atomicInt.incrementAndGet());
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenRunAsync(() -> { atomicInt.incrementAndGet(); }, executor);
+            cf2 = cf1.thenRunAsync(() -> atomicInt.incrementAndGet(), executor);
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
@@ -329,42 +329,42 @@
             CompletableFuture<Integer> cf3;
             CompletableFuture<Integer> cf1 = supplyAsync(() -> 1);
             CompletableFuture<Integer> cf2 = supplyAsync(() -> 1);
-            cf3 = cf1.thenCombine(cf2, (x, y) -> { return x + y; });
+            cf3 = cf1.thenCombine(cf2, (x, y) -> x + y);
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 1);
             checkCompletedNormally(cf3, 2);
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> 1);
-            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> { return x + y; });
+            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> x + y);
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 1);
             checkCompletedNormally(cf3, 2);
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> 1);
-            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> { return x + y; }, executor);
+            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> x + y, executor);
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 1);
             checkCompletedNormally(cf3, 2);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> 1);
-            cf3 = cf1.thenCombine(cf2, (x, y) -> { return 0; });
+            cf3 = cf1.thenCombine(cf2, (x, y) -> 0);
             checkCompletedExceptionally(cf1);
             checkCompletedNormally(cf2, 1);
             checkCompletedExceptionally(cf3);
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> { return 0; });
+            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> 0);
             checkCompletedNormally(cf1, 1);
             checkCompletedExceptionally(cf2);
             checkCompletedExceptionally(cf3);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> { return 0; }, executor);
+            cf3 = cf1.thenCombineAsync(cf2, (x, y) -> 0, executor);
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             checkCompletedExceptionally(cf3);
@@ -405,7 +405,7 @@
             before = atomicInt.get();
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> 1);
-            cf3 = cf1.thenAcceptBoth(cf2, (x, y) -> { atomicInt.incrementAndGet(); });
+            cf3 = cf1.thenAcceptBoth(cf2, (x, y) -> atomicInt.incrementAndGet());
             checkCompletedExceptionally(cf1);
             checkCompletedNormally(cf2, 1);
             checkCompletedExceptionally(cf3);
@@ -413,7 +413,7 @@
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.thenAcceptBothAsync(cf2, (x, y) -> { atomicInt.incrementAndGet(); });
+            cf3 = cf1.thenAcceptBothAsync(cf2, (x, y) -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf1, 1);
             checkCompletedExceptionally(cf2);
             checkCompletedExceptionally(cf3);
@@ -421,7 +421,7 @@
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.thenAcceptBothAsync(cf2, (x, y) -> { atomicInt.incrementAndGet(); }, executor);
+            cf3 = cf1.thenAcceptBothAsync(cf2, (x, y) -> atomicInt.incrementAndGet(), executor);
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             checkCompletedExceptionally(cf3);
@@ -463,7 +463,7 @@
             before = atomicInt.get();
             CompletableFuture<Integer> cf4 = supplyAsync(() -> { throw new RuntimeException(); });
             CompletableFuture<Integer> cf5 = supplyAsync(() -> 1);
-            cf3 = cf5.runAfterBothAsync(cf4, () -> { atomicInt.incrementAndGet(); }, executor);
+            cf3 = cf5.runAfterBothAsync(cf4, () -> atomicInt.incrementAndGet(), executor);
             checkCompletedExceptionally(cf4);
             checkCompletedNormally(cf5, 1);
             checkCompletedExceptionally(cf3);
@@ -472,7 +472,7 @@
             before = atomicInt.get();
             cf4 = supplyAsync(() -> 1);
             cf5 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf5.runAfterBothAsync(cf4, () -> { atomicInt.incrementAndGet(); });
+            cf3 = cf5.runAfterBothAsync(cf4, () -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf4, 1);
             checkCompletedExceptionally(cf5);
             checkCompletedExceptionally(cf3);
@@ -481,7 +481,7 @@
             before = atomicInt.get();
             cf4 = supplyAsync(() -> { throw new RuntimeException(); });
             cf5 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf5.runAfterBoth(cf4, () -> { atomicInt.incrementAndGet(); });
+            cf3 = cf5.runAfterBoth(cf4, () -> atomicInt.incrementAndGet());
             checkCompletedExceptionally(cf4);
             checkCompletedExceptionally(cf5);
             checkCompletedExceptionally(cf3);
@@ -495,46 +495,46 @@
             CompletableFuture<Integer> cf3;
             CompletableFuture<Integer> cf1 = supplyAsync(() -> 1);
             CompletableFuture<Integer> cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.applyToEither(cf2, (x) -> { check(x == 1 || x == 2); return x; });
+            cf3 = cf1.applyToEither(cf2, x -> { check(x == 1 || x == 2); return x; });
             checkCompletedNormally(cf3, new Object[] {1, 2});
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.applyToEitherAsync(cf2, (x) -> { check(x == 1 || x == 2); return x; });
+            cf3 = cf1.applyToEitherAsync(cf2, x -> { check(x == 1 || x == 2); return x; });
             checkCompletedNormally(cf3, new Object[] {1, 2});
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.applyToEitherAsync(cf2, (x) -> { check(x == 1 || x == 2); return x; }, executor);
+            cf3 = cf1.applyToEitherAsync(cf2, x -> { check(x == 1 || x == 2); return x; }, executor);
             checkCompletedNormally(cf3, new Object[] {1, 2});
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.applyToEither(cf2, (x) -> { check(x == 2); return x; });
+            cf3 = cf1.applyToEither(cf2, x -> { check(x == 2); return x; });
             try { check(cf3.join() == 2); } catch (CompletionException x) { pass(); }
             check(cf3.isDone());
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.applyToEitherAsync(cf2, (x) -> { check(x == 1); return x; });
+            cf3 = cf1.applyToEitherAsync(cf2, x -> { check(x == 1); return x; });
             try { check(cf3.join() == 1); } catch (CompletionException x) { pass(); }
             check(cf3.isDone());
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.applyToEitherAsync(cf2, (x) -> { fail(); return x; });
+            cf3 = cf1.applyToEitherAsync(cf2, x -> { fail(); return x; });
             checkCompletedExceptionally(cf3);
             check(cf1.isDone() || cf2.isDone());
 
             final Phaser cf3Done = new Phaser(2);
             cf1 = supplyAsync(() -> { cf3Done.arriveAndAwaitAdvance(); return 1; });
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.applyToEither(cf2, (x) -> { check(x == 2); return x; });
+            cf3 = cf1.applyToEither(cf2, x -> { check(x == 2); return x; });
             checkCompletedNormally(cf3, 2);
             checkCompletedNormally(cf2, 2);
             check(!cf1.isDone());
@@ -544,7 +544,7 @@
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> { cf3Done.arriveAndAwaitAdvance(); return 2; });
-            cf3 = cf1.applyToEitherAsync(cf2, (x) -> { check(x == 1); return x; });
+            cf3 = cf1.applyToEitherAsync(cf2, x -> { check(x == 1); return x; });
             checkCompletedNormally(cf3, 1);
             checkCompletedNormally(cf1, 1);
             check(!cf2.isDone());
@@ -561,7 +561,7 @@
             int before = atomicInt.get();
             CompletableFuture<Integer> cf1 = supplyAsync(() -> 1);
             CompletableFuture<Integer> cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.acceptEither(cf2, (x) -> { check(x == 1 || x == 2); atomicInt.incrementAndGet(); });
+            cf3 = cf1.acceptEither(cf2, x -> { check(x == 1 || x == 2); atomicInt.incrementAndGet(); });
             checkCompletedNormally(cf3, null);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == (before + 1));
@@ -569,7 +569,7 @@
             before = atomicInt.get();
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.acceptEitherAsync(cf2, (x) -> { check(x == 1 || x == 2); atomicInt.incrementAndGet(); });
+            cf3 = cf1.acceptEitherAsync(cf2, x -> { check(x == 1 || x == 2); atomicInt.incrementAndGet(); });
             checkCompletedNormally(cf3, null);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == (before + 1));
@@ -577,35 +577,35 @@
             before = atomicInt.get();
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf2.acceptEitherAsync(cf1, (x) -> { check(x == 1 || x == 2); atomicInt.incrementAndGet(); }, executor);
+            cf3 = cf2.acceptEitherAsync(cf1, x -> { check(x == 1 || x == 2); atomicInt.incrementAndGet(); }, executor);
             checkCompletedNormally(cf3, null);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == (before + 1));
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf2.acceptEitherAsync(cf1, (x) -> { check(x == 2); }, executor);
+            cf3 = cf2.acceptEitherAsync(cf1, x -> { check(x == 2); }, executor);
             try { check(cf3.join() == null); } catch (CompletionException x) { pass(); }
             check(cf3.isDone());
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf2.acceptEitherAsync(cf1, (x) -> { check(x == 1); });
+            cf3 = cf2.acceptEitherAsync(cf1, x -> { check(x == 1); });
             try { check(cf3.join() == null); } catch (CompletionException x) { pass(); }
             check(cf3.isDone());
             check(cf1.isDone() || cf2.isDone());
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
             cf2 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf2.acceptEitherAsync(cf1, (x) -> { fail(); });
+            cf3 = cf2.acceptEitherAsync(cf1, x -> { fail(); });
             checkCompletedExceptionally(cf3);
             check(cf1.isDone() || cf2.isDone());
 
             final Phaser cf3Done = new Phaser(2);
             cf1 = supplyAsync(() -> { cf3Done.arriveAndAwaitAdvance(); return 1; });
             cf2 = supplyAsync(() -> 2);
-            cf3 = cf1.acceptEither(cf2, (x) -> { check(x == 2); });
+            cf3 = cf1.acceptEither(cf2, x -> { check(x == 2); });
             checkCompletedNormally(cf3, null);
             checkCompletedNormally(cf2, 2);
             check(!cf1.isDone());
@@ -615,7 +615,7 @@
 
             cf1 = supplyAsync(() -> 1);
             cf2 = supplyAsync(() -> { cf3Done.arriveAndAwaitAdvance(); return 2; });
-            cf3 = cf1.acceptEitherAsync(cf2, (x) -> { check(x == 1); });
+            cf3 = cf1.acceptEitherAsync(cf2, x -> { check(x == 1); });
             checkCompletedNormally(cf3, null);
             checkCompletedNormally(cf1, 1);
             check(!cf2.isDone());
@@ -630,33 +630,33 @@
         try {
             CompletableFuture<Void> cf3;
             int before = atomicInt.get();
-            CompletableFuture<Void> cf1 = runAsync(() -> { });
-            CompletableFuture<Void> cf2 = runAsync(() -> { });
-            cf3 = cf1.runAfterEither(cf2, () -> { atomicInt.incrementAndGet(); });
+            CompletableFuture<Void> cf1 = runAsync(() -> {});
+            CompletableFuture<Void> cf2 = runAsync(() -> {});
+            cf3 = cf1.runAfterEither(cf2, () -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf3, null);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
-            cf1 = runAsync(() -> { });
-            cf2 = runAsync(() -> { });
-            cf3 = cf1.runAfterEitherAsync(cf2, () -> { atomicInt.incrementAndGet(); });
+            cf1 = runAsync(() -> {});
+            cf2 = runAsync(() -> {});
+            cf3 = cf1.runAfterEitherAsync(cf2, () -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf3, null);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
-            cf1 = runAsync(() -> { });
-            cf2 = runAsync(() -> { });
-            cf3 = cf2.runAfterEitherAsync(cf1, () -> { atomicInt.incrementAndGet(); }, executor);
+            cf1 = runAsync(() -> {});
+            cf2 = runAsync(() -> {});
+            cf3 = cf2.runAfterEitherAsync(cf1, () -> atomicInt.incrementAndGet(), executor);
             checkCompletedNormally(cf3, null);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == (before + 1));
 
             before = atomicInt.get();
             cf1 = runAsync(() -> { throw new RuntimeException(); });
-            cf2 = runAsync(() -> { });
-            cf3 = cf2.runAfterEither(cf1, () -> { atomicInt.incrementAndGet(); });
+            cf2 = runAsync(() -> {});
+            cf3 = cf2.runAfterEither(cf1, () -> atomicInt.incrementAndGet());
             try {
                 check(cf3.join() == null);
                 check(atomicInt.get() == (before + 1));
@@ -665,9 +665,9 @@
             check(cf1.isDone() || cf2.isDone());
 
             before = atomicInt.get();
-            cf1 = runAsync(() -> { });
+            cf1 = runAsync(() -> {});
             cf2 = runAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf1.runAfterEitherAsync(cf2, () -> { atomicInt.incrementAndGet(); });
+            cf3 = cf1.runAfterEitherAsync(cf2, () -> atomicInt.incrementAndGet());
             try {
                 check(cf3.join() == null);
                 check(atomicInt.get() == (before + 1));
@@ -678,16 +678,16 @@
             before = atomicInt.get();
             cf1 = runAsync(() -> { throw new RuntimeException(); });
             cf2 = runAsync(() -> { throw new RuntimeException(); });
-            cf3 = cf2.runAfterEitherAsync(cf1, () -> { atomicInt.incrementAndGet(); }, executor);
+            cf3 = cf2.runAfterEitherAsync(cf1, () -> atomicInt.incrementAndGet(), executor);
             checkCompletedExceptionally(cf3);
             check(cf1.isDone() || cf2.isDone());
             check(atomicInt.get() == before);
 
             final Phaser cf3Done = new Phaser(2);
             before = atomicInt.get();
-            cf1 = runAsync(() -> { cf3Done.arriveAndAwaitAdvance(); });
-            cf2 = runAsync(() -> { });
-            cf3 = cf1.runAfterEither(cf2, () -> { atomicInt.incrementAndGet(); });
+            cf1 = runAsync(() -> cf3Done.arriveAndAwaitAdvance());
+            cf2 = runAsync(() -> {});
+            cf3 = cf1.runAfterEither(cf2, () -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf3, null);
             checkCompletedNormally(cf2, null);
             check(!cf1.isDone());
@@ -697,9 +697,9 @@
             checkCompletedNormally(cf3, null);
 
             before = atomicInt.get();
-            cf1 = runAsync(() -> { });
-            cf2 = runAsync(() -> { cf3Done.arriveAndAwaitAdvance(); });
-            cf3 = cf1.runAfterEitherAsync(cf2, () -> { atomicInt.incrementAndGet(); });
+            cf1 = runAsync(() -> {});
+            cf2 = runAsync(() -> cf3Done.arriveAndAwaitAdvance());
+            cf3 = cf1.runAfterEitherAsync(cf2, () -> atomicInt.incrementAndGet());
             checkCompletedNormally(cf3, null);
             checkCompletedNormally(cf1, null);
             check(!cf2.isDone());
@@ -715,35 +715,35 @@
         try {
             CompletableFuture<Integer> cf2;
             CompletableFuture<Integer> cf1 = supplyAsync(() -> 1);
-            cf2 = cf1.thenCompose((x) -> { check(x ==1); return CompletableFuture.completedFuture(2); });
+            cf2 = cf1.thenCompose(x -> { check(x == 1); return CompletableFuture.completedFuture(2); });
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 2);
 
             cf1 = supplyAsync(() -> 1);
-            cf2 = cf1.thenComposeAsync((x) -> { check(x ==1); return CompletableFuture.completedFuture(2); });
+            cf2 = cf1.thenComposeAsync(x -> { check(x == 1); return CompletableFuture.completedFuture(2); });
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 2);
 
             cf1 = supplyAsync(() -> 1);
-            cf2 = cf1.thenComposeAsync((x) -> { check(x ==1); return CompletableFuture.completedFuture(2); }, executor);
+            cf2 = cf1.thenComposeAsync(x -> { check(x == 1); return CompletableFuture.completedFuture(2); }, executor);
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 2);
 
             int before = atomicInt.get();
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenCompose((x) -> { atomicInt.incrementAndGet(); return CompletableFuture.completedFuture(2); });
+            cf2 = cf1.thenCompose(x -> { atomicInt.incrementAndGet(); return CompletableFuture.completedFuture(2); });
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
 
             cf1 = supplyAsync(() -> { throw new RuntimeException(); });
-            cf2 = cf1.thenComposeAsync((x) -> { atomicInt.incrementAndGet(); return CompletableFuture.completedFuture(2); });
+            cf2 = cf1.thenComposeAsync(x -> { atomicInt.incrementAndGet(); return CompletableFuture.completedFuture(2); });
             checkCompletedExceptionally(cf1);
             checkCompletedExceptionally(cf2);
             check(atomicInt.get() == before);
 
             cf1 = supplyAsync(() -> 1);
-            cf2 = cf1.thenComposeAsync((x) -> { throw new RuntimeException(); }, executor);
+            cf2 = cf1.thenComposeAsync(x -> { throw new RuntimeException(); }, executor);
             checkCompletedNormally(cf1, 1);
             checkCompletedExceptionally(cf2);
         } catch (Throwable t) { unexpected(t); }
@@ -787,13 +787,13 @@
         try {
             CompletableFuture<Integer> cf2;
             CompletableFuture<Integer> cf1 = supplyAsync(() -> 1);
-            cf2 = cf1.exceptionally((t) -> { fail("function should never be called"); return 2;});
+            cf2 = cf1.exceptionally(t -> { fail("function should never be called"); return 2;});
             checkCompletedNormally(cf1, 1);
             checkCompletedNormally(cf2, 1);
 
             final RuntimeException t = new RuntimeException();
             cf1 = supplyAsync(() -> { throw t; });
-            cf2 = cf1.exceptionally((x) -> { check(x.getCause() == t); return 2;});
+            cf2 = cf1.exceptionally(x -> { check(x.getCause() == t); return 2;});
             checkCompletedExceptionally(cf1);
             checkCompletedNormally(cf2, 2);
         } catch (Throwable t) { unexpected(t); }
--- a/test/jdk/java/util/concurrent/ConcurrentHashMap/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ConcurrentHashMap/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/ConcurrentHashMap/MapCheck.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ConcurrentHashMap/MapCheck.java	Fri Feb 02 01:52:03 2018 +0000
@@ -109,14 +109,12 @@
 
     static Map newMap(Class cl) {
         try {
-            Map m = (Map)cl.newInstance();
-            return m;
+            return (Map)cl.newInstance();
         } catch (Exception e) {
             throw new RuntimeException("Can't instantiate " + cl + ": " + e);
         }
     }
 
-
     static void runTest(Map s, Object[] key) {
         shuffle(key);
         int size = key.length;
@@ -137,7 +135,6 @@
         //        System.gc();
     }
 
-
     static void t1(String nm, int n, Map s, Object[] key, int expect) {
         int sum = 0;
         int iters = 4;
--- a/test/jdk/java/util/concurrent/ConcurrentLinkedQueue/WhiteBox.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ConcurrentLinkedQueue/WhiteBox.java	Fri Feb 02 01:52:03 2018 +0000
@@ -55,7 +55,6 @@
 import java.util.concurrent.ThreadLocalRandom;
 import static java.util.stream.Collectors.toList;
 import java.util.function.Consumer;
-import java.util.function.Function;
 
 @Test
 public class WhiteBox {
--- a/test/jdk/java/util/concurrent/ConcurrentQueues/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ConcurrentQueues/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/ConcurrentQueues/OfferRemoveLoops.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ConcurrentQueues/OfferRemoveLoops.java	Fri Feb 02 01:52:03 2018 +0000
@@ -81,7 +81,7 @@
         final CountDownLatch done = new CountDownLatch(3);
         final SplittableRandom rnd = new SplittableRandom();
 
-        /** Poor man's bounded buffer; prevents unbounded queue expansion. */
+        // Poor man's bounded buffer; prevents unbounded queue expansion.
         final Semaphore offers = new Semaphore(maxQueueSize);
 
         abstract class CheckedThread extends Thread {
--- a/test/jdk/java/util/concurrent/Exchanger/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/Exchanger/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/ExecutorCompletionService/ExecutorCompletionServiceLoops.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ExecutorCompletionService/ExecutorCompletionServiceLoops.java	Fri Feb 02 01:52:03 2018 +0000
@@ -52,7 +52,7 @@
     static final ExecutorService pool =
         Executors.newFixedThreadPool(POOLSIZE);
     static final ExecutorCompletionService<Integer> ecs =
-        new ExecutorCompletionService<Integer>(pool);
+        new ExecutorCompletionService<>(pool);
     static boolean print = false;
 
     public static void main(String[] args) throws Exception {
--- a/test/jdk/java/util/concurrent/ExecutorCompletionService/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/ExecutorCompletionService/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/FutureTask/BlockingTaskExecutor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/FutureTask/BlockingTaskExecutor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -26,21 +26,25 @@
  * @bug 6431315
  * @summary ExecutorService.invokeAll might hang
  * @author Martin Buchholz
+ * @library /lib/testlibrary/
  */
 
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.TimeUnit;
+import jdk.testlibrary.Utils;
 
 /**
  * Adapted from Doug Lea, which was...
  * adapted from a posting by Tom Sugden tom at epcc.ed.ac.uk
  */
 public class BlockingTaskExecutor {
+    static final long LONG_DELAY_MS = Utils.adjustTimeout(10_000);
 
     static void realMain(String[] args) throws Throwable {
         for (int i = 1; i <= 100; i++) {
@@ -75,15 +79,19 @@
         // are blocked.  This should cause the tasks to be
         // interrupted.
         executor.shutdownNow();
-        if (! executor.awaitTermination(5L, TimeUnit.SECONDS))
-            throw new Error("Executor stuck");
+        if (! executor.awaitTermination(LONG_DELAY_MS, MILLISECONDS))
+            throw new Error(
+                String.format("Executor termination timed out after %d ms",
+                              LONG_DELAY_MS));
 
         // Wait for the invocation thread to complete.
-        thread.join(5000);
+        thread.join(LONG_DELAY_MS);
         if (thread.isAlive()) {
             thread.interrupt();
-            thread.join(5000);
-            throw new Error("invokeAll stuck");
+            thread.join(LONG_DELAY_MS);
+            throw new Error(
+                String.format("invokeAll timed out after %d ms",
+                              LONG_DELAY_MS));
         }
     }
 
--- a/test/jdk/java/util/concurrent/FutureTask/ExplicitSet.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/FutureTask/ExplicitSet.java	Fri Feb 02 01:52:03 2018 +0000
@@ -60,7 +60,7 @@
                     public Boolean call() {
                         fail("The task should never be run!");
                         return null;
-                    };
+                    }
                 });
         }
 
--- a/test/jdk/java/util/concurrent/FutureTask/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/FutureTask/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/FutureTask/NegativeTimeout.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/FutureTask/NegativeTimeout.java	Fri Feb 02 01:52:03 2018 +0000
@@ -38,7 +38,7 @@
 
 public class NegativeTimeout {
     public static void main(String[] args) throws Exception {
-        FutureTask<Void> task = new FutureTask<>( () -> { return null; } );
+        FutureTask<Void> task = new FutureTask<>(() -> null);
         try {
             task.get(Long.MIN_VALUE, TimeUnit.NANOSECONDS);
         } catch (TimeoutException success) {}
--- a/test/jdk/java/util/concurrent/LinkedTransferQueue/WhiteBox.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/LinkedTransferQueue/WhiteBox.java	Fri Feb 02 01:52:03 2018 +0000
@@ -56,7 +56,6 @@
 import java.util.concurrent.TimeUnit;
 import static java.util.stream.Collectors.toList;
 import java.util.function.Consumer;
-import java.util.function.Function;
 
 @Test
 public class WhiteBox {
--- a/test/jdk/java/util/concurrent/atomic/AtomicUpdaters.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/atomic/AtomicUpdaters.java	Fri Feb 02 01:52:03 2018 +0000
@@ -89,9 +89,9 @@
 
             // Would like to test a public volatile in a class in another
             // package - but of course there aren't any
-            new Config(AtomicInteger.class, "value", "private", hasSM ? false : true, false, "private int field of class in different package", TYPE.INT),
-            new Config(AtomicLong.class, "value", "private", hasSM ? false : true, false, "private long field of class in different package", TYPE.LONG),
-            new Config(AtomicReference.class, "value", "private", hasSM ? false : true, false, "private reference field of class in different package", TYPE.REF),
+            new Config(AtomicInteger.class, "value", "private", !hasSM, false, "private int field of class in different package", TYPE.INT),
+            new Config(AtomicLong.class, "value", "private", !hasSM, false, "private long field of class in different package", TYPE.LONG),
+            new Config(AtomicReference.class, "value", "private", !hasSM, false, "private reference field of class in different package", TYPE.REF),
         };
     }
 
--- a/test/jdk/java/util/concurrent/locks/Lock/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/locks/Lock/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/locks/ReentrantLock/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/locks/ReentrantLock/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/locks/ReentrantReadWriteLock/LoopHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/locks/ReentrantReadWriteLock/LoopHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -95,7 +95,7 @@
         String num = Long.toString(n);
         if (num.length() >= field.length())
             return num;
-        StringBuffer b = new StringBuffer(field);
+        StringBuilder b = new StringBuilder(field);
         b.replace(b.length()-num.length(), b.length(), num);
         return b.toString();
     }
--- a/test/jdk/java/util/concurrent/tck/AbstractQueueTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/AbstractQueueTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -80,7 +80,7 @@
     }
 
     /**
-     * add throws IllegalStateException true if offer fails
+     * add throws IllegalStateException if offer fails
      */
     public void testAddF() {
         Fail q = new Fail();
@@ -106,7 +106,7 @@
      */
     public void testRemoveS() {
         Succeed q = new Succeed();
-        q.remove();
+        assertSame(one, q.remove());
     }
 
     /**
@@ -125,7 +125,7 @@
      */
     public void testElementS() {
         Succeed q = new Succeed();
-        q.element();
+        assertSame(one, q.element());
     }
 
     /**
--- a/test/jdk/java/util/concurrent/tck/AbstractQueuedSynchronizerTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/AbstractQueuedSynchronizerTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1289,11 +1289,10 @@
     }
 
     /**
-     * Disabled demo test for (unfixed as of 2017-11)
      * JDK-8191483: AbstractQueuedSynchronizer cancel/cancel race
      * ant -Djsr166.tckTestClass=AbstractQueuedSynchronizerTest -Djsr166.methodFilter=testCancelCancelRace -Djsr166.runsPerTest=100 tck
      */
-    public void DISABLED_testCancelCancelRace() throws InterruptedException {
+    public void testCancelCancelRace() throws InterruptedException {
         class Sync extends AbstractQueuedSynchronizer {
             protected boolean tryAcquire(int acquires) {
                 return !hasQueuedPredecessors() && compareAndSetState(0, 1);
--- a/test/jdk/java/util/concurrent/tck/ArrayDeque8Test.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ArrayDeque8Test.java	Fri Feb 02 01:52:03 2018 +0000
@@ -110,14 +110,13 @@
             assertEquals((Integer) 1, q.peekLast());
             assertEquals(maxArraySize - 1, q.size());
 
-            ArrayDeque qq = q;
             ArrayDeque smallish = new ArrayDeque(
                 Collections.nCopies(Integer.MAX_VALUE - q.size() + 1, e));
             assertThrows(
                 IllegalStateException.class,
-                () -> qq.addAll(qq),
-                () -> qq.addAll(smallish),
-                () -> smallish.addAll(qq));
+                () -> q.addAll(q),
+                () -> q.addAll(smallish),
+                () -> smallish.addAll(q));
         }
     }
 
--- a/test/jdk/java/util/concurrent/tck/AtomicReferenceArrayTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/AtomicReferenceArrayTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -84,7 +84,7 @@
      */
     public void testConstructorSubClassArray() {
         Integer[] a = { two, one, three, four, seven };
-        AtomicReferenceArray<Number> aa = new AtomicReferenceArray<Number>(a);
+        AtomicReferenceArray<Number> aa = new AtomicReferenceArray<>(a);
         assertEquals(a.length, aa.length());
         for (int i = 0; i < a.length; i++) {
             assertSame(a[i], aa.get(i));
--- a/test/jdk/java/util/concurrent/tck/BlockingQueueTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/BlockingQueueTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -216,18 +216,20 @@
     public void testDrainToNonPositiveMaxElements() {
         final BlockingQueue q = emptyCollection();
         final int[] ns = { 0, -1, -42, Integer.MIN_VALUE };
-        for (int n : ns)
-            assertEquals(0, q.drainTo(new ArrayList(), n));
+        final ArrayList sink = new ArrayList();
+        for (int n : ns) {
+            assertEquals(0, q.drainTo(sink, n));
+            assertTrue(sink.isEmpty());
+        }
         if (q.remainingCapacity() > 0) {
             // Not SynchronousQueue, that is
             Object one = makeElement(1);
             q.add(one);
-            ArrayList c = new ArrayList();
             for (int n : ns)
-                assertEquals(0, q.drainTo(new ArrayList(), n));
+                assertEquals(0, q.drainTo(sink, n));
             assertEquals(1, q.size());
             assertSame(one, q.poll());
-            assertTrue(c.isEmpty());
+            assertTrue(sink.isEmpty());
         }
     }
 
--- a/test/jdk/java/util/concurrent/tck/CompletableFutureTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/CompletableFutureTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -357,7 +357,7 @@
      * toString indicates current completion state
      */
     public void testToString_incomplete() {
-        CompletableFuture<String> f = new CompletableFuture<String>();
+        CompletableFuture<String> f = new CompletableFuture<>();
         assertTrue(f.toString().matches(".*\\[.*Not completed.*\\]"));
         if (testImplementationDetails)
             assertEquals(identityString(f) + "[Not completed]",
@@ -365,7 +365,7 @@
     }
 
     public void testToString_normal() {
-        CompletableFuture<String> f = new CompletableFuture<String>();
+        CompletableFuture<String> f = new CompletableFuture<>();
         assertTrue(f.complete("foo"));
         assertTrue(f.toString().matches(".*\\[.*Completed normally.*\\]"));
         if (testImplementationDetails)
@@ -374,7 +374,7 @@
     }
 
     public void testToString_exception() {
-        CompletableFuture<String> f = new CompletableFuture<String>();
+        CompletableFuture<String> f = new CompletableFuture<>();
         assertTrue(f.completeExceptionally(new IndexOutOfBoundsException()));
         assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]"));
         if (testImplementationDetails)
@@ -384,7 +384,7 @@
 
     public void testToString_cancelled() {
         for (boolean mayInterruptIfRunning : new boolean[] { true, false }) {
-            CompletableFuture<String> f = new CompletableFuture<String>();
+            CompletableFuture<String> f = new CompletableFuture<>();
             assertTrue(f.cancel(mayInterruptIfRunning));
             assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]"));
             if (testImplementationDetails)
--- a/test/jdk/java/util/concurrent/tck/ConcurrentHashMap8Test.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ConcurrentHashMap8Test.java	Fri Feb 02 01:52:03 2018 +0000
@@ -212,7 +212,7 @@
      */
     public void testReplaceAll() {
         ConcurrentHashMap<Integer, String> map = map5();
-        map.replaceAll((x, y) -> { return x > 3 ? "Z" : y; });
+        map.replaceAll((x, y) -> (x > 3) ? "Z" : y);
         assertEquals("A", map.get(one));
         assertEquals("B", map.get(two));
         assertEquals("C", map.get(three));
--- a/test/jdk/java/util/concurrent/tck/ConcurrentHashMapTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ConcurrentHashMapTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -83,17 +83,12 @@
         return map;
     }
 
-    /** Re-implement Integer.compare for old java versions */
-    static int compare(int x, int y) {
-        return (x < y) ? -1 : (x > y) ? 1 : 0;
-    }
-
     // classes for testing Comparable fallbacks
     static class BI implements Comparable<BI> {
         private final int value;
         BI(int value) { this.value = value; }
         public int compareTo(BI other) {
-            return compare(value, other.value);
+            return Integer.compare(value, other.value);
         }
         public boolean equals(Object x) {
             return (x instanceof BI) && ((BI)x).value == value;
@@ -127,7 +122,7 @@
                     break;
             }
             if (r == 0)
-                r = compare(size(), other.size());
+                r = Integer.compare(size(), other.size());
             return r;
         }
         private static final long serialVersionUID = 0;
@@ -155,8 +150,7 @@
      */
     public void testComparableFamily() {
         int size = 500;         // makes measured test run time -> 60ms
-        ConcurrentHashMap<BI, Boolean> m =
-            new ConcurrentHashMap<BI, Boolean>();
+        ConcurrentHashMap<BI, Boolean> m = new ConcurrentHashMap<>();
         for (int i = 0; i < size; i++) {
             assertNull(m.put(new CI(i), true));
         }
@@ -172,13 +166,12 @@
      */
     public void testGenericComparable() {
         int size = 120;         // makes measured test run time -> 60ms
-        ConcurrentHashMap<Object, Boolean> m =
-            new ConcurrentHashMap<Object, Boolean>();
+        ConcurrentHashMap<Object, Boolean> m = new ConcurrentHashMap<>();
         for (int i = 0; i < size; i++) {
             BI bi = new BI(i);
             BS bs = new BS(String.valueOf(i));
-            LexicographicList<BI> bis = new LexicographicList<BI>(bi);
-            LexicographicList<BS> bss = new LexicographicList<BS>(bs);
+            LexicographicList<BI> bis = new LexicographicList<>(bi);
+            LexicographicList<BS> bss = new LexicographicList<>(bs);
             assertNull(m.putIfAbsent(bis, true));
             assertTrue(m.containsKey(bis));
             if (m.putIfAbsent(bss, true) == null)
@@ -197,14 +190,13 @@
      */
     public void testGenericComparable2() {
         int size = 500;         // makes measured test run time -> 60ms
-        ConcurrentHashMap<Object, Boolean> m =
-            new ConcurrentHashMap<Object, Boolean>();
+        ConcurrentHashMap<Object, Boolean> m = new ConcurrentHashMap<>();
         for (int i = 0; i < size; i++) {
             m.put(Collections.singletonList(new BI(i)), true);
         }
 
         for (int i = 0; i < size; i++) {
-            LexicographicList<BI> bis = new LexicographicList<BI>(new BI(i));
+            LexicographicList<BI> bis = new LexicographicList<>(new BI(i));
             assertTrue(m.containsKey(bis));
         }
     }
@@ -215,8 +207,7 @@
      */
     public void testMixedComparable() {
         int size = 1200;        // makes measured test run time -> 35ms
-        ConcurrentHashMap<Object, Object> map =
-            new ConcurrentHashMap<Object, Object>();
+        ConcurrentHashMap<Object, Object> map = new ConcurrentHashMap<>();
         Random rng = new Random();
         for (int i = 0; i < size; i++) {
             Object x;
--- a/test/jdk/java/util/concurrent/tck/ConcurrentSkipListSetTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ConcurrentSkipListSetTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -65,8 +65,7 @@
      * Integers 0 ... n - 1.
      */
     private static ConcurrentSkipListSet<Integer> populatedSet(int n) {
-        ConcurrentSkipListSet<Integer> q =
-            new ConcurrentSkipListSet<Integer>();
+        ConcurrentSkipListSet<Integer> q = new ConcurrentSkipListSet<>();
         assertTrue(q.isEmpty());
         for (int i = n - 1; i >= 0; i -= 2)
             assertTrue(q.add(new Integer(i)));
--- a/test/jdk/java/util/concurrent/tck/ConcurrentSkipListSubSetTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ConcurrentSkipListSubSetTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -60,8 +60,7 @@
      * Integers 0 ... n - 1.
      */
     private static NavigableSet<Integer> populatedSet(int n) {
-        ConcurrentSkipListSet<Integer> q =
-            new ConcurrentSkipListSet<Integer>();
+        ConcurrentSkipListSet<Integer> q = new ConcurrentSkipListSet<>();
         assertTrue(q.isEmpty());
 
         for (int i = n - 1; i >= 0; i -= 2)
--- a/test/jdk/java/util/concurrent/tck/CopyOnWriteArrayListTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/CopyOnWriteArrayListTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -83,8 +83,8 @@
     static CopyOnWriteArrayList<Integer> populatedArray(Integer[] elements) {
         CopyOnWriteArrayList<Integer> a = new CopyOnWriteArrayList<>();
         assertTrue(a.isEmpty());
-        for (int i = 0; i < elements.length; i++)
-            a.add(elements[i]);
+        for (Integer element : elements)
+            a.add(element);
         assertFalse(a.isEmpty());
         assertEquals(elements.length, a.size());
         return a;
--- a/test/jdk/java/util/concurrent/tck/CyclicBarrierTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/CyclicBarrierTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -335,8 +335,7 @@
                         c.await();
                         shouldThrow();
                     }
-                    catch (BrokenBarrierException ok) {}
-                    catch (InterruptedException ok) {}
+                    catch (BrokenBarrierException | InterruptedException ok) {}
                 }}});
 
         for (int i = 0; i < 4; i++) {
--- a/test/jdk/java/util/concurrent/tck/ForkJoinPool8Test.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ForkJoinPool8Test.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1557,7 +1557,7 @@
      * timeout elapsed
      */
     public void testAwaitQuiescence2() throws Exception {
-        /**
+        /*
          * """It is possible to disable or limit the use of threads in the
          * common pool by setting the parallelism property to zero. However
          * doing so may cause unjoined tasks to never be executed."""
--- a/test/jdk/java/util/concurrent/tck/FutureTaskTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/FutureTaskTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -865,7 +865,7 @@
      * toString indicates current completion state
      */
     public void testToString_incomplete() {
-        FutureTask<String> f = new FutureTask<String>(() -> "");
+        FutureTask<String> f = new FutureTask<>(() -> "");
         assertTrue(f.toString().matches(".*\\[.*Not completed.*\\]"));
         if (testImplementationDetails)
             assertTrue(f.toString().startsWith(
@@ -873,7 +873,7 @@
     }
 
     public void testToString_normal() {
-        FutureTask<String> f = new FutureTask<String>(() -> "");
+        FutureTask<String> f = new FutureTask<>(() -> "");
         f.run();
         assertTrue(f.toString().matches(".*\\[.*Completed normally.*\\]"));
         if (testImplementationDetails)
@@ -882,7 +882,7 @@
     }
 
     public void testToString_exception() {
-        FutureTask<String> f = new FutureTask<String>(
+        FutureTask<String> f = new FutureTask<>(
                 () -> { throw new ArithmeticException(); });
         f.run();
         assertTrue(f.toString().matches(".*\\[.*Completed exceptionally.*\\]"));
@@ -893,7 +893,7 @@
 
     public void testToString_cancelled() {
         for (boolean mayInterruptIfRunning : new boolean[] { true, false }) {
-            FutureTask<String> f = new FutureTask<String>(() -> "");
+            FutureTask<String> f = new FutureTask<>(() -> "");
             assertTrue(f.cancel(mayInterruptIfRunning));
             assertTrue(f.toString().matches(".*\\[.*Cancelled.*\\]"));
             if (testImplementationDetails)
--- a/test/jdk/java/util/concurrent/tck/JSR166TestCase.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/JSR166TestCase.java	Fri Feb 02 01:52:03 2018 +0000
@@ -472,18 +472,11 @@
         }
     }
 
-    public static boolean atLeastJava6() { return JAVA_CLASS_VERSION >= 50.0; }
-    public static boolean atLeastJava7() { return JAVA_CLASS_VERSION >= 51.0; }
-    public static boolean atLeastJava8() { return JAVA_CLASS_VERSION >= 52.0; }
-    public static boolean atLeastJava9() {
-        return JAVA_CLASS_VERSION >= 53.0
-            // As of 2015-09, java9 still uses 52.0 class file version
-            || JAVA_SPECIFICATION_VERSION.matches("^(1\\.)?(9|[0-9][0-9])$");
-    }
-    public static boolean atLeastJava10() {
-        return JAVA_CLASS_VERSION >= 54.0
-            || JAVA_SPECIFICATION_VERSION.matches("^(1\\.)?[0-9][0-9]$");
-    }
+    public static boolean atLeastJava6()  { return JAVA_CLASS_VERSION >= 50.0; }
+    public static boolean atLeastJava7()  { return JAVA_CLASS_VERSION >= 51.0; }
+    public static boolean atLeastJava8()  { return JAVA_CLASS_VERSION >= 52.0; }
+    public static boolean atLeastJava9()  { return JAVA_CLASS_VERSION >= 53.0; }
+    public static boolean atLeastJava10() { return JAVA_CLASS_VERSION >= 54.0; }
 
     /**
      * Collects all JSR166 unit tests as one suite.
--- a/test/jdk/java/util/concurrent/tck/LinkedBlockingQueueTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/LinkedBlockingQueueTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -86,8 +86,7 @@
      * Integers 0 ... n - 1.
      */
     private static LinkedBlockingQueue<Integer> populatedQueue(int n) {
-        LinkedBlockingQueue<Integer> q =
-            new LinkedBlockingQueue<Integer>(n);
+        LinkedBlockingQueue<Integer> q = new LinkedBlockingQueue<>(n);
         assertTrue(q.isEmpty());
         for (int i = 0; i < n; i++)
             assertTrue(q.offer(new Integer(i)));
--- a/test/jdk/java/util/concurrent/tck/MapTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/MapTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -129,7 +129,7 @@
         final Object v2 = (permitsNullValues && rnd.nextBoolean() && v1 != null)
             ? null : impl.makeValue(2);
 
-        /** If true, always lands in first bucket in hash tables. */
+        // If true, always lands in first bucket in hash tables.
         final boolean poorHash = rnd.nextBoolean();
         class Key implements Comparable<Key> {
             final int i;
--- a/test/jdk/java/util/concurrent/tck/RecursiveActionTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/RecursiveActionTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -352,8 +352,7 @@
      * succeeds in the presence of interrupts
      */
     public void testJoinIgnoresInterruptsOutsideForkJoinPool() {
-        final SynchronousQueue<FibAction[]> sq =
-            new SynchronousQueue<FibAction[]>();
+        final SynchronousQueue<FibAction[]> sq = new SynchronousQueue<>();
         RecursiveAction a = new CheckedRecursiveAction() {
             protected void realCompute() throws InterruptedException {
                 FibAction[] fibActions = new FibAction[6];
--- a/test/jdk/java/util/concurrent/tck/ScheduledExecutorSubclassTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ScheduledExecutorSubclassTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -872,7 +872,7 @@
         immediates.forEach(
             f -> assertTrue(((ScheduledFuture)f).getDelay(NANOSECONDS) <= 0L));
 
-        Stream.of(immediates, delayeds, periodics).flatMap(c -> c.stream())
+        Stream.of(immediates, delayeds, periodics).flatMap(Collection::stream)
             .forEach(f -> assertFalse(f.isDone()));
 
         try { p.shutdown(); } catch (SecurityException ok) { return; }
@@ -926,7 +926,7 @@
 
         assertTrue(q.isEmpty());
 
-        Stream.of(immediates, delayeds, periodics).flatMap(c -> c.stream())
+        Stream.of(immediates, delayeds, periodics).flatMap(Collection::stream)
             .forEach(f -> assertTrue(f.isDone()));
 
         for (Future<?> f : immediates) assertNull(f.get());
--- a/test/jdk/java/util/concurrent/tck/ScheduledExecutorTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ScheduledExecutorTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -831,7 +831,7 @@
         immediates.forEach(
             f -> assertTrue(((ScheduledFuture)f).getDelay(NANOSECONDS) <= 0L));
 
-        Stream.of(immediates, delayeds, periodics).flatMap(c -> c.stream())
+        Stream.of(immediates, delayeds, periodics).flatMap(Collection::stream)
             .forEach(f -> assertFalse(f.isDone()));
 
         try { p.shutdown(); } catch (SecurityException ok) { return; }
@@ -885,7 +885,7 @@
 
         assertTrue(q.isEmpty());
 
-        Stream.of(immediates, delayeds, periodics).flatMap(c -> c.stream())
+        Stream.of(immediates, delayeds, periodics).flatMap(Collection::stream)
             .forEach(f -> assertTrue(f.isDone()));
 
         for (Future<?> f : immediates) assertNull(f.get());
--- a/test/jdk/java/util/concurrent/tck/SubmissionPublisherTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/SubmissionPublisherTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -431,7 +431,7 @@
      */
     public void testCancel() {
         SubmissionPublisher<Integer> p =
-            new SubmissionPublisher<Integer>(basicExecutor, 4); // must be < 20
+            new SubmissionPublisher<>(basicExecutor, 4); // must be < 20
         TestSubscriber s1 = new TestSubscriber();
         TestSubscriber s2 = new TestSubscriber();
         p.subscribe(s1);
@@ -1012,6 +1012,7 @@
      * cvs update -D '2017-11-25' src/main/java/util/concurrent/SubmissionPublisher.java && ant -Djsr166.expensiveTests=true -Djsr166.tckTestClass=SubmissionPublisherTest -Djsr166.methodFilter=testMissedSignal tck; cvs update -A src/main/java/util/concurrent/SubmissionPublisher.java
      */
     public void testMissedSignal_8187947() throws Exception {
+        if (!atLeastJava9()) return; // backport to jdk8 too hard
         final int N = expensiveTests ? (1 << 20) : (1 << 10);
         final CountDownLatch finished = new CountDownLatch(1);
         final SubmissionPublisher<Boolean> pub = new SubmissionPublisher<>();
--- a/test/jdk/java/util/concurrent/tck/ThreadLocalRandomTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/concurrent/tck/ThreadLocalRandomTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -382,7 +382,7 @@
         // Don't use main thread's ThreadLocalRandom - it is likely to
         // be polluted by previous tests.
         final AtomicReference<ThreadLocalRandom> threadLocalRandom =
-            new AtomicReference<ThreadLocalRandom>();
+            new AtomicReference<>();
         final AtomicLong rand = new AtomicLong();
 
         long firstRand = 0;
--- a/test/jdk/java/util/jar/JarFile/mrjar/MultiReleaseJarHttpProperties.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/jar/JarFile/mrjar/MultiReleaseJarHttpProperties.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8132734
+ * @bug 8132734 8194070
  * @summary Test the System properties for JarFile that support multi-release jar files
  * @library /lib/testlibrary/java/util/jar
  * @modules jdk.jartool
@@ -31,17 +31,14 @@
  *          jdk.httpserver
  * @build Compiler JarBuilder CreateMultiReleaseTestJars SimpleHttpServer
  * @run testng MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=0 MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=8 MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=9 MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=10 MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=0   MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=8   MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=9   MultiReleaseJarHttpProperties
  * @run testng/othervm -Djdk.util.jar.version=100 MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=8 -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=9 -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=10 -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=8 -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=9 -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
- * @run testng/othervm -Djdk.util.jar.version=10 -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=8   -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=9   -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=8   -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
+ * @run testng/othervm -Djdk.util.jar.version=9   -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
  * @run testng/othervm -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarHttpProperties
  * @run testng/othervm -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
  */
--- a/test/jdk/java/util/jar/JarFile/mrjar/MultiReleaseJarProperties.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/jar/JarFile/mrjar/MultiReleaseJarProperties.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,22 +23,19 @@
 
 /*
  * @test
- * @bug 8132734 8144062
+ * @bug 8132734 8144062 8194070
  * @summary Test the System properties for JarFile that support multi-release jar files
  * @library /lib/testlibrary/java/util/jar
  * @build Compiler JarBuilder CreateMultiReleaseTestJars
  * @run testng MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=0 MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=8 MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=9 MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=10 MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=0   MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=8   MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=9   MultiReleaseJarProperties
  * @run testng/othervm -Djdk.util.jar.version=100 MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=8 -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=9 -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=10 -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=8 -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=9 -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarProperties
- * @run testng/othervm -Djdk.util.jar.version=10 -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=8   -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=9   -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=8   -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarProperties
+ * @run testng/othervm -Djdk.util.jar.version=9   -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarProperties
  * @run testng/othervm -Djdk.util.jar.enableMultiRelease=false MultiReleaseJarProperties
  * @run testng/othervm -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarProperties
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/BadRootLoggerHandlers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,304 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @test
+ * @bug 8191033
+ * @build custom.DotHandler custom.Handler
+ * @run main/othervm -Dlogging.properties=badlogging.properties -Dclz=1custom.DotHandler BadRootLoggerHandlers CUSTOM
+ * @run main/othervm -Dlogging.properties=badlogging.properties -Dclz=1custom.DotHandler BadRootLoggerHandlers DEFAULT
+ * @run main/othervm -Dlogging.properties=badglobal.properties -Dclz=1custom.GlobalHandler BadRootLoggerHandlers CUSTOM
+ * @run main/othervm -Dlogging.properties=badglobal.properties -Dclz=1custom.GlobalHandler BadRootLoggerHandlers DEFAULT
+ * @run main/othervm/java.security.policy==test.policy -Dlogging.properties=badlogging.properties -Dclz=1custom.DotHandler BadRootLoggerHandlers CUSTOM
+ * @run main/othervm/java.security.policy==test.policy  -Dlogging.properties=badlogging.properties -Dclz=1custom.DotHandler BadRootLoggerHandlers DEFAULT
+ * @run main/othervm/java.security.policy==test.policy  -Dlogging.properties=badglobal.properties -Dclz=1custom.GlobalHandler BadRootLoggerHandlers CUSTOM
+ * @run main/othervm/java.security.policy==test.policy  -Dlogging.properties=badglobal.properties -Dclz=1custom.GlobalHandler BadRootLoggerHandlers DEFAULT
+ * @author danielfuchs
+ */
+public class BadRootLoggerHandlers {
+
+    public static final Path SRC_DIR =
+            Paths.get(System.getProperty("test.src", "src"));
+    public static final Path USER_DIR =
+            Paths.get(System.getProperty("user.dir", "."));
+    public static final Path CONFIG_FILE = Paths.get(
+            Objects.requireNonNull(System.getProperty("logging.properties")));
+    public static final String BAD_HANDLER_NAME =
+            Objects.requireNonNull(System.getProperty("clz"));
+
+    static enum TESTS { CUSTOM, DEFAULT}
+    public static final class CustomLogManager extends LogManager {
+        final ConcurrentMap<String, Logger> loggers = new ConcurrentHashMap<>();
+        @Override
+        public boolean addLogger(Logger logger) {
+            return loggers.putIfAbsent(logger.getName(), logger) == null;
+        }
+
+        @Override
+        public Enumeration<String> getLoggerNames() {
+            return Collections.enumeration(loggers.keySet());
+        }
+
+        @Override
+        public Logger getLogger(String name) {
+            return loggers.get(name);
+        }
+    }
+
+    public static class SystemErr extends OutputStream {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        final OutputStream wrapped;
+        public SystemErr(OutputStream out) {
+            this.wrapped = out;
+        }
+
+        @Override
+        public void write(int b) throws IOException {
+            baos.write(b);
+            wrapped.write(b);
+        }
+
+        public void close() throws IOException {
+            flush();
+            super.close();
+        }
+
+        public void flush() throws IOException {
+            super.flush();
+            wrapped.flush();
+        }
+
+    }
+
+    // Uncomment this to run the test on Java 8. Java 8 does not have
+    // List.of(...)
+    //    static final class List {
+    //        static <T> java.util.List<T> of(T... items) {
+    //            return Collections.unmodifiableList(Arrays.asList(items));
+    //        }
+    //    }
+
+    public static void main(String[] args) throws IOException {
+        Path initialProps = SRC_DIR.resolve(CONFIG_FILE);
+        Path loggingProps = USER_DIR.resolve(CONFIG_FILE);
+        if (args.length != 1) {
+            throw new IllegalArgumentException("expected (only) one of " + List.of(TESTS.values()));
+        }
+
+        TESTS test = TESTS.valueOf(args[0]);
+        System.setProperty("java.util.logging.config.file", loggingProps.toString());
+        if (test == TESTS.CUSTOM) {
+            System.setProperty("java.util.logging.manager", CustomLogManager.class.getName());
+        }
+
+        Files.copy(initialProps, loggingProps, StandardCopyOption.REPLACE_EXISTING);
+
+        SystemErr err = new SystemErr(System.err);
+        System.setErr(new PrintStream(err));
+
+        System.out.println("Root level is: " + Logger.getLogger("").getLevel());
+        if (Logger.getLogger("").getLevel() != Level.INFO) {
+            throw new RuntimeException("Expected root level INFO, got: "
+                                        + Logger.getLogger("").getLevel());
+        }
+
+        Class<? extends LogManager> logManagerClass =
+                LogManager.getLogManager().getClass();
+        Class<? extends LogManager> expectedClass =
+                test == TESTS.CUSTOM ? CustomLogManager.class : LogManager.class;
+        if (logManagerClass != expectedClass) {
+            throw new RuntimeException("Bad class for log manager: " + logManagerClass
+                                        + " expected " + expectedClass + " for " + test);
+        }
+
+        if (test == TESTS.DEFAULT) {
+            // Verify that we have two handlers. One was configured with
+            // handlers=custom.Handler, the other with
+            // .handlers=custom.DotHandler
+            // Verify that exactly one of the two handlers is a custom.Handler
+            // Verify that exactly one of the two handlers is a custom.DotHandler
+            // Verify that the two handlers have an id of '1'
+            checkHandlers(Logger.getLogger(""),
+                    Logger.getLogger("").getHandlers(),
+                    1L,
+                    custom.Handler.class,
+                    custom.DotHandler.class);
+        } else {
+            // Verify that we have one handler, configured with
+            // handlers=custom.Handler.
+            // Verify that it is a custom.Handler
+            // Verify that the handler have an id of '1'
+            checkHandlers(Logger.getLogger(""),
+                    Logger.getLogger("").getHandlers(),
+                    1L,
+                    custom.Handler.class);
+
+        }
+
+        // DEFAULT: The log message "hi" should appear twice on the console.
+        // CUSTOM: The log message "hi" should appear twice on the console.
+        // We don't check that. This is just for log analysis in case
+        // of test failure.
+        Logger.getAnonymousLogger().info("hi (" + test +")");
+
+        // Change the root logger level to FINE in the properties file
+        // and reload the configuration.
+        Files.write(loggingProps,
+                Files.lines(initialProps)
+                        .map((s) -> s.replace("INFO", "FINE"))
+                        .collect(Collectors.toList()));
+        LogManager.getLogManager().readConfiguration();
+
+        System.out.println("Root level is: " + Logger.getLogger("").getLevel());
+        if (Logger.getLogger("").getLevel() != Level.FINE) {
+            throw new RuntimeException("Expected root level FINE, got: "
+                    + Logger.getLogger("").getLevel());
+        }
+
+        // Verify that we have now only one handler, configured with
+        // handlers=custom.Handler, and that the other configured with
+        // .handlers=custom.DotHandler was ignored.
+        // Verify that the handler is a custom.Handler
+        // Verify that the handler has an id of '2'
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
+                2L,
+                custom.Handler.class);
+
+        // The log message "there" should appear only once on the console.
+        // We don't check that. This is just for log analysis in case
+        // of test failure.
+        Logger.getAnonymousLogger().info("there!");
+
+        // Change the root logger level to FINER in the properties file
+        // and reload the configuration.
+        Files.write(loggingProps,
+                Files.lines(initialProps)
+                        .map((s) -> s.replace("INFO", "FINER"))
+                        .collect(Collectors.toList()));
+        LogManager.getLogManager().readConfiguration();
+
+        System.out.println("Root level is: " + Logger.getLogger("").getLevel());
+        if (Logger.getLogger("").getLevel() != Level.FINER) {
+            throw new RuntimeException("Expected root level FINER, got: "
+                    + Logger.getLogger("").getLevel());
+        }
+
+        // Verify that we have only one handler, configured with
+        // handlers=custom.Handler, and that the other configured with
+        // .handlers=custom.DotHandler was ignored.
+        // Verify that the handler is a custom.Handler
+        // Verify that the handler has an id of '3'
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
+                3L,
+                custom.Handler.class);
+
+        // The log message "done" should appear only once on the console.
+        // We don't check that. This is just for log analysis in case
+        // of test failure.
+        Logger.getAnonymousLogger().info("done!");
+
+        byte[] errBytes = err.baos.toByteArray();
+        String errText = new String(errBytes);
+        switch(test) {
+            case CUSTOM:
+                if (errText.contains("java.lang.ClassNotFoundException: "
+                        + BAD_HANDLER_NAME)) {
+                    throw new RuntimeException("Error message found on System.err");
+                }
+                System.out.println("OK: ClassNotFoundException error message not found for " + test);
+                break;
+            case DEFAULT:
+                if (!errText.contains("java.lang.ClassNotFoundException: "
+                        + BAD_HANDLER_NAME)) {
+                    throw new RuntimeException("Error message not found on System.err");
+                }
+                System.err.println("OK: ClassNotFoundException error message found for " + test);
+                break;
+            default:
+                throw new InternalError("unknown test case: " + test);
+        }
+    }
+
+    static void checkHandlers(Logger logger, Handler[] handlers, Long expectedID, Class<?>... clz) {
+        // Verify that we have the expected number of handlers.
+        if (Stream.of(handlers).count() != clz.length) {
+            throw new RuntimeException("Expected " + clz.length + " handlers, got: "
+                    + List.of(logger.getHandlers()));
+        }
+        for (Class<?> cl : clz) {
+            // Verify that the handlers are of the expected class.
+            // For each class, we should have exactly one handler
+            // of that class.
+            if (Stream.of(handlers)
+                    .map(Object::getClass)
+                    .filter(cl::equals)
+                    .count() != 1) {
+                throw new RuntimeException("Expected one " + cl +", got: "
+                        + List.of(logger.getHandlers()));
+            }
+        }
+        // Verify that all handlers have the expected ID
+        if (Stream.of(logger.getHandlers())
+                .map(BadRootLoggerHandlers::getId)
+                .filter(expectedID::equals)
+                .count() != clz.length) {
+            throw new RuntimeException("Expected ids to be " + expectedID + ", got: "
+                    + List.of(logger.getHandlers()));
+        }
+    }
+
+    static long getId(Handler h) {
+        if (h instanceof custom.Handler) {
+            return ((custom.Handler)h).id;
+        }
+        if (h instanceof custom.DotHandler) {
+            return ((custom.DotHandler)h).id;
+        }
+        if (h instanceof custom.GlobalHandler) {
+            return ((custom.GlobalHandler)h).id;
+        }
+        return -1;
+    }
+}
--- a/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/RootLoggerHandlers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/RootLoggerHandlers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Arrays;
+import java.nio.file.StandardCopyOption;
 import java.util.Collections;
 import java.util.List;
 import java.util.logging.Handler;
@@ -39,6 +39,7 @@
  * @bug 8191033
  * @build custom.DotHandler custom.Handler
  * @run main/othervm RootLoggerHandlers
+ * @run main/othervm/java.security.policy==test.policy RootLoggerHandlers
  * @author danielfuchs
  */
 public class RootLoggerHandlers {
@@ -61,7 +62,7 @@
         Path initialProps = SRC_DIR.resolve(CONFIG_FILE);
         Path loggingProps = USER_DIR.resolve(CONFIG_FILE);
         System.setProperty("java.util.logging.config.file", loggingProps.toString());
-        Files.copy(initialProps, loggingProps);
+        Files.copy(initialProps, loggingProps, StandardCopyOption.REPLACE_EXISTING);
         System.out.println("Root level is: " + Logger.getLogger("").getLevel());
         if (Logger.getLogger("").getLevel() != Level.INFO) {
             throw new RuntimeException("Expected root level INFO, got: "
@@ -73,10 +74,15 @@
         // Verify that exactly one of the two handlers is a custom.Handler
         // Verify that exactly one of the two handlers is a custom.DotHandler
         // Verify that the two handlers has an id of '1'
-        checkHandlers(Logger.getLogger("").getHandlers(),
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
                 1L,
                 custom.Handler.class,
                 custom.DotHandler.class);
+        checkHandlers(Logger.getLogger("global"),
+                Logger.getGlobal().getHandlers(),
+                1L,
+                custom.GlobalHandler.class);
 
         // The log message "hi" should appear twice on the console.
         // We don't check that. This is just for log analysis in case
@@ -102,9 +108,13 @@
         // .handlers=custom.DotHandler was ignored.
         // Verify that the handler is a custom.Handler
         // Verify that the handler has an id of '2'
-        checkHandlers(Logger.getLogger("").getHandlers(),
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
                 2L,
                 custom.Handler.class);
+        checkHandlers(Logger.getGlobal(),
+                Logger.getGlobal().getHandlers(),
+                1L);
 
         // The log message "there" should appear only once on the console.
         // We don't check that. This is just for log analysis in case
@@ -130,9 +140,45 @@
         // .handlers=custom.DotHandler was ignored.
         // Verify that the handler is a custom.Handler
         // Verify that the handler has an id of '3'
-        checkHandlers(Logger.getLogger("").getHandlers(),
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
                 3L,
                 custom.Handler.class);
+        checkHandlers(Logger.getGlobal(),
+                Logger.getGlobal().getHandlers(),
+                1L);
+
+        LogManager.getLogManager().reset();
+        LogManager.getLogManager().updateConfiguration((s) -> (o,n) -> n);
+        // Verify that we have only one handler, configured with
+        // handlers=custom.Handler, and that the other configured with
+        // .handlers=custom.DotHandler was ignored.
+        // Verify that the handler is a custom.Handler
+        // Verify that the handler has an id of '4'
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
+                4L,
+                custom.Handler.class);
+        checkHandlers(Logger.getGlobal(),
+                Logger.getGlobal().getHandlers(),
+                2L,
+                custom.GlobalHandler.class);
+
+        LogManager.getLogManager().updateConfiguration((s) -> (o,n) -> n);
+        // Verify that we have only one handler, configured with
+        // handlers=custom.Handler, and that the other configured with
+        // .handlers=custom.DotHandler was ignored.
+        // Verify that the handler is a custom.Handler
+        // Verify that the handler has an id of '4'
+        checkHandlers(Logger.getLogger(""),
+                Logger.getLogger("").getHandlers(),
+                4L,
+                custom.Handler.class);
+        checkHandlers(Logger.getGlobal(),
+                Logger.getGlobal().getHandlers(),
+                2L,
+                custom.GlobalHandler.class);
+
 
         // The log message "done" should appear only once on the console.
         // We don't check that. This is just for log analysis in case
@@ -140,11 +186,11 @@
         Logger.getAnonymousLogger().info("done!");
     }
 
-    static void checkHandlers(Handler[] handlers, Long expectedID, Class<?>... clz) {
+    static void checkHandlers(Logger logger, Handler[] handlers, Long expectedID, Class<?>... clz) {
         // Verify that we have the expected number of handlers.
         if (Stream.of(handlers).count() != clz.length) {
             throw new RuntimeException("Expected " + clz.length + " handlers, got: "
-                    + List.of(Logger.getLogger("").getHandlers()));
+                    + List.of(logger.getHandlers()));
         }
         for (Class<?> cl : clz) {
             // Verify that the handlers are of the expected class.
@@ -155,16 +201,16 @@
                     .filter(cl::equals)
                     .count() != 1) {
                 throw new RuntimeException("Expected one " + cl +", got: "
-                        + List.of(Logger.getLogger("").getHandlers()));
+                        + List.of(logger.getHandlers()));
             }
         }
         // Verify that all handlers have the expected ID
-        if (Stream.of(Logger.getLogger("").getHandlers())
+        if (Stream.of(logger.getHandlers())
                 .map(RootLoggerHandlers::getId)
                 .filter(expectedID::equals)
                 .count() != clz.length) {
             throw new RuntimeException("Expected ids to be " + expectedID + ", got: "
-                    + List.of(Logger.getLogger("").getHandlers()));
+                    + List.of(logger.getHandlers()));
         }
     }
 
@@ -175,6 +221,9 @@
         if (h instanceof custom.DotHandler) {
             return ((custom.DotHandler)h).id;
         }
+        if (h instanceof custom.GlobalHandler) {
+            return ((custom.GlobalHandler)h).id;
+        }
         return -1;
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/badglobal.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,19 @@
+############################################################
+#  	Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler
+# classes.  These handlers will be installed during VM startup.
+#handlers= java.util.logging.ConsoleHandler
+handlers= custom.Handler
+.handlers= custom.DotHandler
+global.handlers = 1custom.GlobalHandler, custom.GlobalHandler
+
+# Default global logging level.
+.level= INFO
+
+# Other configuration
+custom.Handler.level=ALL
+custom.DotHandler.level=ALL
+java.util.logging.SimpleFormatter.format=%4$s [%1$tc]: %2$s: %5$s%n
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/badlogging.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,18 @@
+############################################################
+#  	Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler
+# classes.  These handlers will be installed during VM startup.
+#handlers= java.util.logging.ConsoleHandler
+handlers= custom.Handler
+.handlers= 1custom.DotHandler,custom.DotHandler
+
+# Default global logging level.
+.level= INFO
+
+# Other configuration
+custom.Handler.level=ALL
+custom.DotHandler.level=ALL
+java.util.logging.SimpleFormatter.format=%4$s [%1$tc]: %2$s: %5$s%n
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/custom/GlobalHandler.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 custom;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ *
+ * @author danielfuchs
+ */
+public class GlobalHandler extends java.util.logging.ConsoleHandler {
+
+    public static final AtomicLong IDS = new AtomicLong();
+    public final long id = IDS.incrementAndGet();
+    public GlobalHandler() {
+        System.out.println("GlobalHandler(" + id + ") created");
+        //new Exception("GlobalHandler").printStackTrace();
+    }
+
+    @Override
+    public void close() {
+        System.out.println("GlobalHandler(" + id + ") closed");
+        super.close();
+    }
+
+    @Override
+    public String toString() {
+        return this.getClass().getName() + '(' + id + ')';
+    }
+}
--- a/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/logging.properties	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/logging.properties	Fri Feb 02 01:52:03 2018 +0000
@@ -7,6 +7,7 @@
 #handlers= java.util.logging.ConsoleHandler
 handlers= custom.Handler
 .handlers= custom.DotHandler
+global.handlers= custom.GlobalHandler
 
 # Default global logging level.
 .level= INFO
@@ -14,5 +15,6 @@
 # Other configuration
 custom.Handler.level=ALL
 custom.DotHandler.level=ALL
+custom.GlobalHandler.level=ALL
 java.util.logging.SimpleFormatter.format=%4$s [%1$tc]: %2$s: %5$s%n
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/test.policy	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,13 @@
+grant {
+    // permissions for RootLoggerHandlers
+    permission java.util.PropertyPermission "*", "read";
+    permission java.util.PropertyPermission "java.util.logging.config.file", "write";
+    permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
+    permission java.util.logging.LoggingPermission "control";
+
+    // additional permissions for BadRootLoggerHandlers
+    permission java.util.PropertyPermission "java.util.logging.manager", "write";
+    permission java.lang.RuntimePermission "setIO";
+    permission java.lang.RuntimePermission "shutdownHooks";
+    permission java.lang.RuntimePermission "setContextClassLoader";
+};
--- a/test/jdk/java/util/regex/RegExTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/regex/RegExTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,6 +35,7 @@
  * 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
  * 8151481 4867170 7080302 6728861 6995635 6736245 4916384 6328855 6192895
  * 6345469 6988218 6693451 7006761 8140212 8143282 8158482 8176029 8184706
+ * 8194667
  *
  * @library /test/lib
  * @build jdk.test.lib.RandomFactory
@@ -1367,24 +1368,35 @@
         report("Reluctant Repetition");
     }
 
+    private static Pattern serializedPattern(Pattern p) throws Exception {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(p);
+        oos.close();
+        try (ObjectInputStream ois = new ObjectInputStream(
+                new ByteArrayInputStream(baos.toByteArray()))) {
+            return (Pattern)ois.readObject();
+        }
+    }
+
     private static void serializeTest() throws Exception {
         String patternStr = "(b)";
         String matchStr = "b";
         Pattern pattern = Pattern.compile(patternStr);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        ObjectOutputStream oos = new ObjectOutputStream(baos);
-        oos.writeObject(pattern);
-        oos.close();
-        ObjectInputStream ois = new ObjectInputStream(
-            new ByteArrayInputStream(baos.toByteArray()));
-        Pattern serializedPattern = (Pattern)ois.readObject();
-        ois.close();
+        Pattern serializedPattern = serializedPattern(pattern);
         Matcher matcher = serializedPattern.matcher(matchStr);
         if (!matcher.matches())
             failCount++;
         if (matcher.groupCount() != 1)
             failCount++;
 
+        pattern = Pattern.compile("a(?-i)b", Pattern.CASE_INSENSITIVE);
+        serializedPattern = serializedPattern(pattern);
+        if (!serializedPattern.matcher("Ab").matches())
+            failCount++;
+        if (serializedPattern.matcher("AB").matches())
+            failCount++;
+
         report("Serialization");
     }
 
--- a/test/jdk/java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -47,6 +47,7 @@
 /*
  * @test
  * @bug 8071597 8193856
+ * @run main/timeout=240
  */
 @Test
 public class WhileOpTest extends OpTestCase {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/imageio/plugins/jpeg/JpegTablesOnlyReadTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug     8191073
+ * @summary Test verifies that when user tries to read image data from a
+ *          tables-only image input stream it should through IIOException
+ *          instead of throwing any other exception as per specification.
+ * @run     main JpegTablesOnlyReadTest
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Base64;
+import javax.imageio.IIOException;
+import javax.imageio.ImageIO;
+
+public class JpegTablesOnlyReadTest {
+    // JPEG input stream containing tables-only image
+    private static String inputImageBase64 = "/9j/4IAQSkZJRgABAQEASABIAAD"
+            + "/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI//////////////////////"
+            + "//////////////////////////////2wBDAVVaWnhpeOuCguv//////////////"
+            + "///////////////////////////////////////////////////////////wAAR"
+            + "CAAgACADASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAECA//EACUQAQA"
+            + "CAAUDBAMAAAAAAAAAAAEAAhESITGxQXKSA2Fi0SIyUf/EABYBAQEBAAAAAAAAAA"
+            + "AAAAAAAAABA//EABcRAQEBAQAAAAAAAAAAAAAAAAEAESH/2gAMAwEAAhEDEQA/A"
+            + "Nf2VW2OKaWTqnRhl97eb9wrs91uWPEBUX+EtmrssvvbzfuJWjVG2tg1svLLtgJ0"
+            + "Uxwmd96d5zE7tVdnutyxm5JVoo0u6rpXHdWLP8PU8WIjtRuvVZN96d5zDP8AD1P"
+            + "Fhre1Apc/Ida4RAdv/9k=";
+
+    public static void main(String[] args) throws IOException {
+        byte[] inputBytes = Base64.getDecoder().decode(inputImageBase64);
+        InputStream in = new ByteArrayInputStream(inputBytes);
+
+        // Read tables-only JPEG image
+        try {
+            ImageIO.read(in);
+        } catch (IIOException e) {
+            // do nothing we expect it to throw IIOException if it throws
+            // any other exception test will fail.
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/imageio/plugins/png/PngPLTEChunkMissingTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug     8190997
+ * @summary Test verifies that ImageIO.read() throws proper IIOException
+ *          when we have a PNG image with color type PNG_COLOR_PALETTE but
+ *          missing the required PLTE chunk.
+ * @run     main PngPLTEChunkMissingTest
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Base64;
+import javax.imageio.IIOException;
+import javax.imageio.ImageIO;
+
+public class PngPLTEChunkMissingTest {
+
+    // PNG image stream missing the required PLTE chunk
+    private static String inputImageBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB"
+            + "CAMAAAA6fptVAAAACklEQVQYV2P4DwABAQEAWk1v8QAAAABJRU5ErkJgggo=";
+
+    public static void main(String[] args) throws Exception {
+
+        byte[] inputBytes = Base64.getDecoder().decode(inputImageBase64);
+        InputStream in = new ByteArrayInputStream(inputBytes);
+
+        /*
+         * Attempt to read a PNG image of color type PNG_COLOR_PALETTE
+         * but missing the required PLTE chunk.
+         */
+        try {
+            ImageIO.read(in);
+        } catch (IIOException e) {
+            /*
+             * We expect ImageIO to throw IIOException with proper message
+             * instead of throwing NullPointerException.
+             */
+            Throwable cause = e.getCause();
+            if (cause == null ||
+                (!(cause.getMessage().
+                 equals("Required PLTE chunk missing"))))
+            {
+                throw e;
+            }
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/imageio/plugins/png/PngReaderLargeWidthStrideTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug     8191174
+ * @summary Test verifies that PNGImageReader doesn't throw any undocumented
+ *          Exception because of faulty calculation of scanline stride in
+ *          PNGImageReader.
+ * @run     main PngReaderLargeWidthStrideTest
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Base64;
+import javax.imageio.IIOException;
+import javax.imageio.ImageIO;
+
+public class PngReaderLargeWidthStrideTest {
+
+    private static String inputImageBase64 = "iVBORw0KGgoAAAANSUhEUk////8AAAA"
+            + "BCAAAAAA6fptVAAAACklEQVQYV2P4DwABAQEAWk1v8QAAAABJRU5ErkJgggo=";
+
+    public static void main(String[] args) throws Exception {
+
+        byte[] inputBytes = Base64.getDecoder().decode(inputImageBase64);
+        InputStream in = new ByteArrayInputStream(inputBytes);
+
+        try {
+            ImageIO.read(in);
+        } catch (IIOException e) {
+            // Do nothing we expect it to throw IIOException, but if it throws
+            // any other exception test will fail.
+        }
+    }
+}
+
--- a/test/jdk/javax/net/ssl/compatibility/Parameter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/javax/net/ssl/compatibility/Parameter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -65,15 +65,15 @@
     TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(
             Protocol.TLSV1_2, JdkRelease.JDK7),
     TLS_RSA_WITH_AES_256_CBC_SHA256(
-            Protocol.TLSV1_2, JdkRelease.JDK7),
+            Protocol.TLSV1_2, JdkRelease.JDK6),
     TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(
             Protocol.TLSV1_2, JdkRelease.JDK7),
     TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(
             Protocol.TLSV1_2, JdkRelease.JDK7),
     TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(
-            Protocol.TLSV1_2, JdkRelease.JDK7),
+            Protocol.TLSV1_2, JdkRelease.JDK6),
     TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(
-            Protocol.TLSV1_2, JdkRelease.JDK7),
+            Protocol.TLSV1_2, JdkRelease.JDK6),
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(),
     TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(),
     TLS_RSA_WITH_AES_256_CBC_SHA(),
@@ -86,15 +86,15 @@
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(
             Protocol.TLSV1_2, JdkRelease.JDK7),
     TLS_RSA_WITH_AES_128_CBC_SHA256(
-            Protocol.TLSV1_2, JdkRelease.JDK7),
+            Protocol.TLSV1_2, JdkRelease.JDK6),
     TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(
             Protocol.TLSV1_2, JdkRelease.JDK7),
     TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(
             Protocol.TLSV1_2, JdkRelease.JDK7),
     TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(
-            Protocol.TLSV1_2, JdkRelease.JDK7),
+            Protocol.TLSV1_2, JdkRelease.JDK6),
     TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(
-            Protocol.TLSV1_2, JdkRelease.JDK7),
+            Protocol.TLSV1_2, JdkRelease.JDK6),
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(),
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(),
     TLS_RSA_WITH_AES_128_CBC_SHA(),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/net/ssl/sanity/CacertsExplorer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2018 Google Inc. 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.
+ *
+ * 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.
+ */
+
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+
+/*
+ * @test
+ * @bug 8194960
+ * @summary Sanity check trust manager defaults/cacerts.
+ */
+
+/**
+ * Explores the set of root certificates.
+ * Also useful as a standalone program.
+ *
+ * Prior to JEP 319, stock openjdk fails this because no root
+ * certificates were checked into the repo.
+ */
+public class CacertsExplorer {
+    public static void main(String[] args) throws Throwable {
+        String defaultAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
+        if (!defaultAlgorithm.equals("PKIX")) {
+            throw new AssertionError(
+                "Expected default algorithm PKIX, got " + defaultAlgorithm);
+        }
+
+        TrustManagerFactory trustManagerFactory =
+            TrustManagerFactory.getInstance(defaultAlgorithm);
+        trustManagerFactory.init((KeyStore) null);
+        TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
+        if (trustManagers.length != 1) {
+            throw new AssertionError(
+                "Expected exactly one TrustManager, got "
+                + Arrays.toString(trustManagers));
+        }
+        X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
+
+        X509Certificate[] acceptedIssuers = trustManager.getAcceptedIssuers();
+        if (acceptedIssuers.length == 0) {
+            throw new AssertionError(
+                "no accepted issuers - cacerts file configuration problem?");
+        }
+        Arrays.stream(acceptedIssuers)
+            .map(X509Certificate::getIssuerX500Principal)
+            .forEach(System.out::println);
+    }
+}
--- a/test/jdk/jdk/internal/reflect/Reflection/GetCallerClassWithDepth.java	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 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.
- *
- * 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.
- */
-
-/*
- * @test
- * @bug 8025799
- * @summary Reflection.getCallerClass(int)
- * @modules java.base/jdk.internal.reflect
- * @run main GetCallerClassWithDepth
- */
-
-import jdk.internal.reflect.Reflection;
-
-public class GetCallerClassWithDepth {
-    public static void main(String[] args) throws Exception {
-        Class<?> c = Test.test();
-        assertEquals(c, GetCallerClassWithDepth.class);
-        Class<?> caller = Test.caller();
-        assertEquals(caller, GetCallerClassWithDepth.class);
-        Test.selfTest();
-
-        try {
-            Reflection.getCallerClass(-1);
-            throw new RuntimeException("getCallerClass(-1) should fail");
-        } catch (Error e) {
-            System.out.println("Expected: " + e.getMessage());
-        }
-    }
-
-    public Class<?> getCallerClass() {
-        // 0: Reflection 1: getCallerClass 2: Test.test 3: main
-        return Reflection.getCallerClass(3);
-    }
-
-    static void assertEquals(Class<?> c, Class<?> expected) {
-        if (c != expected) {
-            throw new RuntimeException("Incorrect caller: " + c);
-        }
-    }
-
-    static class Test {
-        // Returns the caller of this method
-        public static Class<?> test() {
-            return new GetCallerClassWithDepth().getCallerClass();
-        }
-
-        // Returns the caller of this method
-        public static Class<?> caller() {
-            // 0: Reflection 1: Test.caller 2: main
-            return Reflection.getCallerClass(2);
-        }
-        public static void selfTest() {
-            // 0: Reflection 1: Test.selfTest
-            Class<?> c = Reflection.getCallerClass(1);
-            assertEquals(c, Test.class);
-            Inner1.deep();
-        }
-
-        static class Inner1 {
-            static void deep() {
-                 deeper();
-            }
-            static void deeper() {
-                 Inner2.deepest();
-            }
-            static class Inner2 {
-                static void deepest() {
-                    // 0: Reflection 1: deepest 2: deeper 3: deep 4: Test.selfTest
-                    Class<?> c = Reflection.getCallerClass(4);
-                    assertEquals(c, Test.class);
-                }
-            }
-        }
-    }
-}
--- a/test/jdk/jdk/nio/zipfs/MultiReleaseJarTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/jdk/nio/zipfs/MultiReleaseJarTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8144355 8144062 8176709
+ * @bug 8144355 8144062 8176709 8194070 8193802
  * @summary Test aliasing additions to ZipFileSystem for multi-release jar files
  * @library /lib/testlibrary/java/util/jar
  * @build Compiler JarBuilder CreateMultiReleaseTestJars
@@ -92,9 +92,9 @@
                 {"0", 8},
                 {"8", 8},
                 {"9", 9},
-                {"10", 10},
-                {"11", 10},
-                {"50", 10}
+                {Integer.toString(MAJOR_VERSION), MAJOR_VERSION},
+                {Integer.toString(MAJOR_VERSION+1), MAJOR_VERSION},
+                {"50", MAJOR_VERSION}
         };
     }
 
@@ -105,9 +105,9 @@
                 {new Integer(0), 8},
                 {new Integer(8), 8},
                 {new Integer(9), 9},
-                {new Integer(10), 10},
-                {new Integer(11), 10},
-                {new Integer(100), 10}
+                {new Integer(MAJOR_VERSION), MAJOR_VERSION},
+                {new Integer(MAJOR_VERSION + 1), MAJOR_VERSION},
+                {new Integer(100), MAJOR_VERSION}
         };
     }
 
@@ -116,9 +116,8 @@
         return new Object[][] {
                 {Version.parse("8"),    8},
                 {Version.parse("9"),    9},
-                {Version.parse("10"),  10},
-                {Version.parse("11"),  10},
-                {Version.parse("100"), 10}
+                {Version.parse("11"),  MAJOR_VERSION},
+                {Version.parse("100"), MAJOR_VERSION}
         };
     }
 
@@ -168,8 +167,8 @@
 
     @Test
     public void testShortJar() throws Throwable {
-        integerEnv.put("multi-release", Integer.valueOf(10));
-        runTest(smruri, integerEnv, 10);
+        integerEnv.put("multi-release", Integer.valueOf(MAJOR_VERSION));
+        runTest(smruri, integerEnv, MAJOR_VERSION);
         integerEnv.put("multi-release", Integer.valueOf(9));
         runTest(smruri, integerEnv, 8);
     }
@@ -205,6 +204,21 @@
         //testCustomMultiReleaseValue("true\r\n true", false);
     }
 
+    @Test
+    public void testMultiReleaseJarWithNonVersionDir() throws Exception {
+        String jfname = "multi-release-non-ver.jar";
+        Path jfpath = Paths.get(jfname);
+        URI uri = new URI("jar", jfpath.toUri().toString() , null);
+        JarBuilder jb = new JarBuilder(jfname);
+        jb.addAttribute("Multi-Release", "true");
+        jb.build();
+        Map<String,String> env = Map.of("multi-release", "runtime");
+        try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
+            Assert.assertTrue(true);
+        }
+        Files.delete(jfpath);
+    }
+
     private static final AtomicInteger JAR_COUNT = new AtomicInteger(0);
 
     private void testCustomMultiReleaseValue(String value, boolean expected)
--- a/test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/LambdaTestHelpers.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/LambdaTestHelpers.java	Fri Feb 02 01:52:03 2018 +0000
@@ -48,6 +48,7 @@
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.fail;
 
 /**
  * LambdaTestHelpers -- assertion methods and useful objects for lambda test cases
@@ -277,7 +278,7 @@
 
     public static<T> void assertContents(Iterable<T> actual, Iterable<T> expected) {
         if (actual instanceof Collection && expected instanceof Collection) {
-            assertEquals(actual, expected);
+            assertIterableEquals(actual, expected);
         } else {
             assertContents(actual.iterator(), expected.iterator());
         }
@@ -287,6 +288,42 @@
         assertEquals(toBoxedList(actual), toBoxedList(expected));
     }
 
+    // Workaround excessive String creation in inner loop in org.testng.Assert.assertEquals(Iterable<?>, Iterable<?>)
+    static public void assertIterableEquals(Iterable<?> actual, Iterable<?> expected) {
+        if(actual == expected) {
+            return;
+        }
+
+        if(actual == null || expected == null) {
+            fail("Iterables not equal: expected: " + expected + " and actual: " + actual);
+        }
+
+        assertIteratorsEquals(actual.iterator(), expected.iterator());
+    }
+
+    // Workaround excessive String creation in inner loop in org.testng.Assert.assertEquals(Iterator<?>, Iterator<?>)
+    static public void assertIteratorsEquals(Iterator<?> actual, Iterator<?> expected) {
+        if (actual == expected) {
+            return;
+        }
+
+        if (actual == null || expected == null) {
+            fail("Iterators not equal: expected: " + expected + " and actual: " + actual);
+        }
+
+        while (actual.hasNext() && expected.hasNext()) {
+            Object e = expected.next();
+            Object a = actual.next();
+            assertEquals(a, e, "Iterator contents differ");
+        }
+
+        if(actual.hasNext()) {
+            fail("Actual iterator returned more elements than the expected iterator.");
+        } else if(expected.hasNext()) {
+            fail("Expected iterator returned more elements than the actual iterator.");
+        }
+    }
+
     @SafeVarargs
     @SuppressWarnings("varargs")
     public static<T> void assertContents(Iterator<T> actual, T... expected) {
--- a/test/jdk/lib/testlibrary/java/util/jar/CreateMultiReleaseTestJars.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/lib/testlibrary/java/util/jar/CreateMultiReleaseTestJars.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,13 +69,15 @@
             + "        return 9;\n"
             + "    }\n"
             + "}\n";
-    final private String java10 = java8.replace("8", "10");
+    final int currentVersion = Runtime.version().major();
+    final String currentVersionStr = Integer.toString(currentVersion);
+    final private String javaCurrent = java8.replace("8", currentVersionStr);
     final String readme8 = "This is the root readme file";
     final String readme9 = "This is the version nine readme file";
-    final String readme10 = "This is the version ten readme file";
+    final String readmeCurrent = "This is the current version readme file";
     private Map<String,byte[]> rootClasses;
     private Map<String,byte[]> version9Classes;
-    private Map<String,byte[]> version10Classes;
+    private Map<String,byte[]> versionCurrentClasses;
 
     public void buildUnversionedJar() throws IOException {
         JarBuilder jb = new JarBuilder("unversioned.jar");
@@ -134,9 +136,9 @@
         jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
         jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
         jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
-        jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
-        jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
-        jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
+        jb.addEntry("META-INF/versions/" + currentVersionStr + "/README", readmeCurrent.getBytes());
+        jb.addEntry("META-INF/versions/" + currentVersionStr + "/version/Version.java", javaCurrent.getBytes());
+        jb.addEntry("META-INF/versions/" + currentVersionStr + "/version/Version.class", versionCurrentClasses.get("version.Version"));
     }
 
     public void buildSignedMultiReleaseJar() throws Exception {
@@ -186,7 +188,7 @@
         input.put("version.PackagePrivate", ppjava9);
         version9Classes = (new Compiler(input)).setRelease(9).compile();
         input.clear();
-        input.put("version.Version", java10);
-        version10Classes = (new Compiler(input)).setRelease(9).compile();  // fixme in JDK 10
+        input.put("version.Version", javaCurrent);
+        versionCurrentClasses = (new Compiler(input)).compile();  // Use default release
     }
 }
--- a/test/jdk/lib/testlibrary/jdk/testlibrary/OutputAnalyzer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/lib/testlibrary/jdk/testlibrary/OutputAnalyzer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,16 @@
 
 import static jdk.testlibrary.Asserts.*;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.PrintStream;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
 
 /**
  * Utility class for verifying output and exit value from a {@code Process}.
@@ -446,8 +450,9 @@
 
 
     /**
-     * Get the contents of the output buffer (stdout and stderr) as list of strings.
-     * Output will be split by system property 'line.separator'.
+     * Get the contents of the output buffer (stdout and stderr)
+     * as a list of strings. Output will be split at new-lines as
+     * recognized by java.io.BufferedReader.readLine().
      *
      * @return Contents of the output buffer as list of strings
      */
@@ -456,12 +461,8 @@
     }
 
     private List<String> asLines(String buffer) {
-        List<String> l = new ArrayList<>();
-        String[] a = buffer.split(Utils.NEW_LINE);
-        for (String string : a) {
-            l.add(string);
-        }
-        return l;
+        return new BufferedReader(new StringReader(buffer))
+            .lines().collect(Collectors.toList());
     }
 
     /**
--- a/test/jdk/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8132734 8144062 8159785
+ * @bug 8132734 8144062 8159785 8194070
  * @summary Test that URL connections to multi-release jars can be runtime versioned
  * @library /lib/testlibrary/java/util/jar
  * @modules jdk.compiler
@@ -108,7 +108,8 @@
         Assert.assertTrue(readAndCompare(new URL(baseUrlEntry), "return 8"));
 
         // the following tests will not work with unversioned jars
-        if (style.equals("unversioned")) return;
+        if (style.equals("unversioned"))
+            return;
 
         // direct access to versioned entry
         String versUrlEntry = urlFile + "META-INF/versions/" + Runtime.version().major()
@@ -117,12 +118,6 @@
         // adding any fragment does not change things
         Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#runtime"), rtreturn));
         Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#fragment"), rtreturn));
-
-        // it really doesn't change things
-        versUrlEntry = urlFile + "META-INF/versions/10/version/Version.java";
-        Assert.assertTrue(readAndCompare(new URL(versUrlEntry), "return 10"));
-        Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#runtime"), "return 10"));
-        Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#fragment"), "return 10"));
     }
 
     @Test(dataProvider = "data")
@@ -225,7 +220,6 @@
         cldr.close();
     }
 
-
     private boolean readAndCompare(URL url, String match) throws Exception {
         boolean result;
         // necessary to do it this way, instead of openStream(), so we can
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/nio/cs/EUCTWBufferBoundaryDecodeTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4734607 4767225 4863613
+ * @summary Decode a file using EUC-TW, test for decode errors
+ * @modules jdk.charsets
+ * @run main EUCTWBufferBoundaryDecodeTest
+ */
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+
+/*
+ * Tests for decode errors in NIO EUC-TW decoder. 4734607 details
+ * decoding errors which occur when the input file > 8k in size
+ * and contains numerous US-ASCII range chars
+ */
+public class EUCTWBufferBoundaryDecodeTest {
+
+    public static void main(String[] args) throws Exception {
+        final String inputFileName
+                = System.getProperty("os.name").startsWith("Windows")
+                ? "tradChinese.win.po"
+                : "tradChinese.po";
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream(1024 * 120);
+
+        File inputFile = new File(System.getProperty("test.src"), inputFileName);
+        FileInputStream fis = new FileInputStream(inputFile);
+
+        // Decode the EUC_TW source file, re-encode it -- (roundtrip)
+        // input and output files ought to be byte for byte identical
+        BufferedReader bin
+                = new BufferedReader(new InputStreamReader(fis, "EUC_TW"));
+        BufferedWriter bout
+                = new BufferedWriter(new OutputStreamWriter(bos, "EUC-TW"));
+
+        String line = bin.readLine();
+
+        while (line != null) {
+            bout.write(line);
+            bout.newLine();
+            line = bin.readLine();
+        }
+
+        bout.close();
+        bin.close();
+
+        // Compare the output with the expected output byte by byte
+        byte[] outputBytes = bos.toByteArray();
+        int i = 0;
+        FileInputStream fi = new FileInputStream(inputFile);
+
+        while (i < outputBytes.length) {
+            byte b = (byte) fi.read();
+            if (b != outputBytes[i++]) {
+                throw new Exception("bug 4734607: test failed");
+            }
+        }
+        fi.close();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/nio/cs/MalformedSurrogateStringTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4153987 6354525
+ * @summary Malformed surrogates should be handled by the converter in
+ * substitution mode.
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+public class MalformedSurrogateStringTest {
+
+    public static void main(String[] args) throws Exception {
+
+        String fe = System.getProperty("file.encoding");
+        if (  fe.equalsIgnoreCase("UTF8")
+              || fe.equalsIgnoreCase("UTF-8")
+              || fe.equalsIgnoreCase("UTF_8"))
+            // This test is meaningless if the default charset
+            // does handle surrogates
+            return;
+
+        System.out.println("Testing string conversion...");
+        /* Example with malformed surrogate, and an offset */
+        String t = "abc\uD800\uDB00efgh";
+        String t2 = t.substring(2);
+        byte[] b = t2.getBytes();
+        System.err.println(b.length);
+        for (int i = 0; i < b.length; i++)
+            System.err.println("[" + i + "]" + "=" + (char) b[i]
+                               + "=" + (int) b[i]);
+        if (b.length != 7) {
+            throw new Exception("Bad string conversion for bad surrogate");
+        }
+
+        /* Example with a proper surrogate, no offset. Always worked */
+        String t3 = "abc\uD800\uDC00efgh";
+        byte[] b2 = t3.getBytes();
+        System.out.println(b2.length);
+        for(int i = 0; i < b2.length; i++)
+            System.err.println("[" + i + "]" + "=" + (char) b2[i]);
+        if (b2.length != 8) {
+            throw new Exception("Bad string conversion for good surrogate");
+        }
+
+        OutputStream os = new ByteArrayOutputStream();
+        OutputStreamWriter osw = new OutputStreamWriter(os);
+        System.out.println("Testing flush....");
+        /* Check for the case where the converter has a left over
+           high surrogate when flush is called on the converter */
+        osw.flush();
+        String s = "abc\uD800"; // High surrogate
+        char[] c = s.toCharArray();
+        osw.write(s, 0, 4);
+        osw.flush();
+
+        System.out.println("Testing convert...");
+        /* Verify that all other characters go through */
+        for (int k = 1; k < 65535 ; k++) {
+            osw.write("Char[" + k + "]=\"" + ((char) k) + "\"");
+        }
+
+    }
+}
--- a/test/jdk/sun/nio/cs/TestCp834_SBCS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/nio/cs/TestCp834_SBCS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -22,7 +22,7 @@
  */
 
 /* @test
- * @bug 6379808
+ * @bug 6379808 8166339
  * @summary Check all Cp933 SBCS characters are not supported in Cp834
  * @modules jdk.charsets
  */
@@ -62,17 +62,34 @@
                 if ((c = cb.get()) != '\ufffd') {
                     // OK, this is a SBCS character in Cp933
                     if (dec834.decode(ByteBuffer.wrap(ba)).get() != '\ufffd')
-                        throw new Exception("SBCS is supported in IBM834 decoder");
+                        throw new RuntimeException("SBCS is supported in IBM834 decoder");
 
                     if (enc834.canEncode(c))
-                        throw new Exception("SBCS can be encoded in IBM834 encoder");
+                        throw new RuntimeException("SBCS can be encoded in IBM834 encoder");
 
                     ca[0] = c;
                     ByteBuffer bb = enc834.encode(CharBuffer.wrap(ca));
                     if (bb.get() != (byte)0xfe || bb.get() != (byte)0xfe)
-                        throw new Exception("SBCS is supported in IBM834 encoder");
+                        throw new RuntimeException("SBCS is supported in IBM834 encoder");
                 }
             }
         }
+
+        // 8166339: cp834 should handle unmappable bytes as dobule-byte pair.
+        if (! new String("\ufffd".getBytes("cp834"), "cp834").equals("\ufffd")) {
+            throw new RuntimeException("u+fffd roundtrip failed");
+        }
+
+        if (! new String("a".getBytes("cp834"), "cp834").equals("\ufffd") ||
+            ! new String(new byte[] { 0x41, 0x40}, "cp834").equals("\ufffd")) {
+            throw new RuntimeException("decoding unmappable don't return u+fffd");
+        }
+
+        CoderResult cr = Charset.forName("Cp834").newDecoder().decode(
+            ByteBuffer.wrap(new byte[] { 0x41, 0x40}), CharBuffer.wrap(new char[2]), true);
+        if (cr.isError() && cr.length() != 2) {
+            throw new RuntimeException("decoding unmappable don't return unmmappable(2)");
+        }
+
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/nio/cs/tradChinese.po	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,2380 @@
+domain "ES_SCRIPTS"
+#
+#==============================
+# <WS>/packages/Setup/es-inst
+#==============================
+msgid "You need to be root before running this program.\n"
+msgstr "ÚÀÆÒâüÇãÙÚÈçÆÛá£È¢Ð©Ç¿È©Ò³ root¡¤\n"
+msgid "Can not remove the directory /tmp/SunMC30Install\n"
+msgstr "àÒÎÎÜÃØæÆøòç /tmp/SunMC30Install\n"
+msgid "Can not create the directory /tmp/SunMC30Install/sbin\n"
+msgstr "àÒÎÎÐúÇ¡Æøòç /tmp/SunMC30Install/sbin\n"
+msgid "Can not copy the required files to /tmp/SunMC30Install\n"
+msgstr "àÒÎÎÙòÍÔëæÎûóòÕùîïêû̯ /tmp/SunMC30Install\n"
+msgid "Can not open the display. Either X server is not allowing\n"
+msgstr "àÒÎÎâäÚöüÏÆüàëÓò¡¤ Either X server is not allowing\n"
+msgid "the connection or you are running it from console login.\n"
+msgstr "ÝÙÚÙÍÐϯÚÀÑÒÆñÅäÚÕƺàôÄ«ÙÚÈçÆÆ¡¤\n"
+msgid "Please read Sun Management Center installation Readme and\n"
+msgstr "îùïåûô Sun Management Center ÇøæÒ Readme Ëä\n"
+msgid "run installation as mentioned.\n"
+msgstr "ËíÍÔÓÝÙÚÈçÇøæÒ¡¤\n"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "  Space calculations will be wrong."
+msgstr "  ϨâæÓÓê«äÄȴ먡¤"
+msgid "Insufficient disk space to install the requested Sun Management Center components"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒÍÔîùÊåÎû Sun Management Center ÜÚǵ"
+msgid "  - Respecify the components to install so it takes less space"
+msgstr "  - Óìä»ÑÀÌùÓÑÇøæÒÎûÜÚǵ¡¢Ëð̧ëæÓÑç¤Å·ÎûϨâæ"
+msgid "  - Uninstall some existing packages to make room for Sun Management Center"
+msgstr "  - æØØæÇøæÒÄ¡ËèܢȴÎûÔïæÒÝÔüÕ¡¢ÅèúÖÅøϨâæá¿ Sun Management Center"
+msgid "  - Make a soft link for $2 that points to more space"
+msgstr "  - Ò³ $2 ܨÆíÄ¡Ô¶Ïæڰ̱ù¹á¸ÅèÑÀÇ×ÊÕÇéϨâæ"
+msgid "  - Ask your system administrator for help"
+msgstr "  - Ç×Ë·ÜÓê§Ü¡ÔÞÊåÉ·"
+msgid "Package $2 is already installed on this system."
+msgstr "Ⱥ˷ÜÓĸÄØÇøæÒħÔïæÒÝÔüÕ $2¡¤"
+msgid "Please verify the platform for package: $2"
+msgstr "îùüÓøýÔïæÒÝÔüÕÎûÆÍƺ¡¨$2"
+msgid "Found: $2"
+msgstr "ÄØÊÆ̯¡¨$2"
+msgid "Skipping package $2"
+msgstr "æüç´ÔïæÒÝÔüÕ $2"
+msgid "There appear to be some permission problems with the installation"
+msgstr "ÇãÇøæÒÆøòçĸƫ×äÈ´Ä¡ËèÝÂÆ«ûâ"
+msgid "directory: $2"
+msgstr "ÙÂ÷$2"
+msgid "In order to install Sun Management Center, root must be able to write to the"
+msgstr "ÓÑÇøæÒ Sun Management Center¡¢root ËðÆîϯÆÒâüè×ÇøæÒÆøòç̦ȴ"
+msgid "installation directory and own the files in that directory."
+msgstr "ìÑÄ«ÝÂÆ«ûâ¡¢ËäÅâðßÈ´æÚÆøòçĶÎûóòÕù¡¤"
+msgid "Please check your configuration and try again."
+msgstr "îùóôÑçÚÀÎûØÙåôËäÓìæÜ¡¤"
+msgid "Exiting Sun Management Center installation."
+msgstr "á¸ÊÖ Sun Management Center ÇøæÒá£Ê©¡¤"
+msgid "Error: Cannot find pack key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÔïæÒÝÔüÕÇøÇÀõï $2¡¤"
+msgid "There are $2 layers for your selection:"
+msgstr "ÚÀÎûòÙðåÈ´ $2 Ô¶ìÒȹ¡¨"
+msgid "No layers were selected for installation."
+msgstr "ÊôÈ´òÙ̽ÆîÍõÇøæÒÎûìÒȹ¡¤"
+msgid "No layers were found for installation."
+msgstr "ÊÆÄâ̯ÆîÍõÇøæÒÎûìÒȹ¡¤"
+msgid "No packs are defined in the installation configuration file."
+msgstr "ÇøæÒØÙåôóòÄãÆÜÌùåøÔïæÒÝÔüÕ¡¤"
+msgid "Please select the packs to install:"
+msgstr "îùòÙ̽ÓÑÇøæÒÎûÔïæÒÝÔüÕ¡¨"
+msgid "No packs were selected for installation."
+msgstr "ÆÜòÙ̽ÓÑÇøæÒÎûÔïæÒÝÔüÕ¡¤"
+msgid "Error: Cannot find component key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÜÚǵÇøÇÀõï $2¡¤"
+msgid "Error: Cannot find key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÇøÇÀõï $2¡¤"
+msgid "    Component $2 has already been installed."
+msgstr "    ÄØåîÇøæÒÜÚǵ $2¡¤"
+msgid "    The corresponding packages are: $2"
+msgstr "    è×óÜÎûÔïæÒÝÔüÕÒ³¡¨$2"
+msgid "  Invalid source directory."
+msgstr "  àÒÕæÎûËôäãÆøò硤"
+msgid "Source directory: $2"
+msgstr "ËôäãÆøò硨$2"
+msgid "Invalid parameter for productExists\\\(\\\): $2"
+msgstr " productExists ÎûÙ¶í°àÒÕæ\\\(\\\)¡¨$2"
+msgid "Production Environment Installation"
+msgstr "Æíܨô¿èºÇøæÒ"
+msgid "Developer Environment Installation"
+msgstr "âäàõÄ©ÔÞô¿èºÇøæÒ"
+msgid "Cannot find $2."
+msgstr "ÊÆÄâ̯ $2¡¤"
+msgid "Invalid License, please buy a valid license."
+msgstr "ÎêûâàÒÕæ¡¢îùõÕâ¹È´ÕæÎûÎêû⡤"
+msgid "  Invalid entry."
+msgstr "  àÒÕæÎûâúÆø¡¤"
+msgid "  Installation configuration files not found."
+msgstr "  ÊÆÄâ̯ÇøæÒØÙåôóò¡¤"
+msgid "You can install only agent components on Solaris 2.5.1"
+msgstr "ÚÀÆ«ÅèÆ·Çã Solaris 2.5.1 ĸÇøæÒÅîÜ¡á£È¢ÜÚǵ"
+msgid "Select one of the following:"
+msgstr "îùòÙ̽ĶÇÄÄæÄ¡¡¨"
+msgid "\\\(1\\\) Production Environment \\\(PE\\\)"
+msgstr "\\\(1\\\) Æíܨô¿èº \\\(PE\\\)"
+msgid "\\\(2\\\) Developer Environment \\\(DE\\\)"
+msgstr "\\\(2\\\) âäàõÄ©ÔÞô¿èº \\\(DE\\\)"
+msgid "Some components have already been installed in $2"
+msgstr "Çã $2 ÄãÄØåîÇøæÒħÝåÅ¡ÜÚǵ"
+msgid "The target directory will be set to $2"
+msgstr "ÆøíºÆøòçÙòäÄÝÃÌùÒ³ $2"
+msgid "Cannot create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Target directory: $2"
+msgstr "ÆøíºÆøò硨$2"
+msgid "Package $2 is already installed."
+msgstr "ÔïæÒÝÔüÕ $2 ÄØåîÇøæÒ¡¤"
+msgid "Package not found: $2"
+msgstr "ÊÆÄâ̯ÔïæÒÝÔüÕ¡¨$2"
+msgid "Error: Cannot find pack key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÔïæÒÝÔüÕÇøÇÀõï $2¡¤"
+msgid "Pack: $2"
+msgstr "ÔïæÒÝÔüÕ¡¨$2"
+msgid "  Please select the components to install:"
+msgstr "  îùòÙ̽ÓÑÇøæÒÎûÜÚǵ¡¨"
+msgid "    Component $2 is essential and will be automatically installed."
+msgstr "    $2 Ò³ÆÒÓÑÎûÜÚǵÅâÙòÈÜÙ¯ÇøæÒ¡¤"
+msgid "    Component $2 has already been installed."
+msgstr "    ÄØåîÇøæÒÜÚǵ $2¡¤"
+msgid "    The corresponding packages are: $2"
+msgstr "    è×óÜÎûÔïæÒÝÔüÕÒ³¡¨$2"
+msgid "    Component $2 is dependent on: $3"
+msgstr "    ÜÚǵ $2 ëæËíòÊ¡¨$3"
+msgid "    The component\\\(s\\\) will be automatically installed."
+msgstr "    ÜÚǵÙòäÄÈÜÙ¯ÇøæÒ¡¤"
+msgid "  Selected Components: $2"
+msgstr "  ÄØòÙ̽ÜÚǵ¡¨$2"
+msgid "  Selected Components: \\\<default\\\>"
+msgstr "  ÄØòÙ̽ÜÚǵ¡¨\\\<çßÝÃ\\\>"
+msgid "  Warning - Could not find pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ $2 Îû pkgmap óòÕù"
+msgid "Warning - Could not find the pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ÆîÍõ $2 Îû pkgmap óò"
+msgid "Warning - Could not find the pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ÆîÍõ $2 Îû pkgmap óò"
+msgid "Checking disk space..."
+msgstr "ÆßÇãóôÑçéöé÷Ϩâæ..."
+msgid "Insufficient disk space to install Sun Management Center Database Software"
+msgstr "ÊôÈ´ËÍÙÜÎûϨâæÆ«ÇøæÒ Sun Management Center æñÕèÕ»ÝÔüÕ"
+msgid "Sun Management Center DB application software requires: $2 Kbytes"
+msgstr "Sun Management Center DB óÜÆîá£È¢ÝÔüÕÍÔëæϨâ桨$2 KB"
+msgid "The installation directory \\\"$2\\\" has: $3 Kbytes"
+msgstr "ÇøæÒÆøòç \\\"$2\\\" ðßÈ´ÎûϨâ桨$3 KB"
+msgid "Please supply a directory."
+msgstr "îùßÈËòÆøò硤"
+msgid "Insufficient disk space to install Sun Management Center Database Dbfiles"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒ Sun Management Center æñÕèÕ»Îû Db óò"
+msgid "Sun Management Center DB application software requires: $2 Kbytes"
+msgstr "Sun Management Center DB óÜÆîá£È¢ÝÔüÕÍÔëæϨâ桨$2 KB"
+msgid "The installation directory \\\"$2\\\" has: $3 Kbytes"
+msgstr "ÇøæÒÆøòç \\\"$2\\\" ðßÈ´ÎûϨâ桨$3 KB"
+msgid "Please supply a directory."
+msgstr "îùßÈËòÆøò硤"
+msgid "Disk Space Requirements:"
+msgstr "éöé÷ϨâæëæÊ塨"
+msgid "Space required \\\(in $2\\\):  $3 blocks."
+msgstr "ÍÔëæϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Space available \\\(in $2\\\): $3 blocks."
+msgstr "Æ«ÆîϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Insufficient space available in $2"
+msgstr "$2 ÄãÎûÆ«ÆîϨâæÄâËÍ"
+msgid "Here are some possible fixes to alleviate the disk space problem:"
+msgstr "ÅèĶҳƫÆîËôæØÊîéöé÷ϨâæÙÂ÷îÎûÅÉÎΡ¨"
+msgid "\\\"$2\\\" resides on CD \\\#$3."
+msgstr "\\\"$2\\\" ÈíÍõ \\\#$3 ĸ¡¤"
+msgid "New source directory: $2"
+msgstr "ä»ÎûËôäãÆøò硨$2"
+msgid "Invalid directory."
+msgstr "àÒÕæÆøò硤"
+msgid "Installing the components..."
+msgstr "ÆßÇãÇøæÒÜÚǵ..."
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "The package $2 is already installed"
+msgstr "ÄØåîÇøæÒÔïæÒÝÔüÕ $2"
+msgid " Selection Summary"
+msgstr " òÙðåèòÓÑ"
+msgid "Looking for addon products on CD \\\#2..."
+msgstr "ÆßÇãÞòÊÆ CD \\\#2 ĸÎûÏáÅûܨÐÂ..."
+msgid "New source directory: $2"
+msgstr "ä»ÎûËôäãÆøò硨$2"
+msgid "                Sun Management Center 3.0 Addons Product Selection:                 "
+msgstr "                Sun Management Center 3.0 ÏáÅûܨÐÂòÙð塨                 "
+msgid "Installing the product: $2"
+msgstr "ÇøæÒܨС¨$2"
+msgid "Cannot find pkginfo file for package: $2"
+msgstr "ÊÆÄâ̯ÆîÍõÔïæÒÝÔüÕÎû pkginfo óò¡¨$2"
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "Supports: $2 - $3"
+msgstr "ÅÅßΡ¨$2 - $3"
+msgid "Supports: $2"
+msgstr "ÅÅßΡ¨$2"
+msgid "Name: $2"
+msgstr "ÇØꢡ¨$2"
+msgid "Description: $2"
+msgstr "ë©Íü¡¨$2"
+msgid "Unsupported OS version: $2"
+msgstr "ÄâÅÅßÎÎû OS ÎêÆÛ¡¨$2"
+msgid "No components to install."
+msgstr "ÊôÈ´ÓÑÇøæÒÎûÜÚǵ¡¤"
+msgid "A previous version of Sun Management Center exists."
+msgstr "È´÷®Îê Sun Management Center ÇôÇ㡤"
+msgid "Please uninstall it locally in \\\"$2\\\"."
+msgstr "îùÍõÆÛê¦ÙòÆÆæØØæÇøæÒ¡¾Çã \\\"$2\\\" Äã¡¿¡¤"
+msgid "Cannot find $2"
+msgstr "ÊÆÄâ̯ $2"
+msgid "Error copying the locale files to: $2"
+msgstr "îïêûÆÛÄÈë£ËÆóò̯ĶÇÄÈíåôÕëàõÆíòã먡¨$2"
+msgid "Setup script will use English."
+msgstr "ÝÃÌù script ÙòäÄËðÆîÓÁÅÆ¡¤"
+msgid "Please run setup locally in \\\"$2\\\"."
+msgstr "îùÍõÆÛê¦ÙÚÈçÝÃÌù¡¾Çã \\\"$2\\\" Äã¡¿¡¤"
+msgid "ESROOT is not set."
+msgstr "ÆÜÝÃÌù ESROOT¡¤"
+msgid "Invalid directory: $2"
+msgstr "àÒÕæÆøò硨$2"
+msgid "Invalid file: $2"
+msgstr "àÒÕæóòÕù¡¨$2"
+msgid "Both -S and -T options must be specified"
+msgstr "-S êØ -T Ì¥Ô¶òÙâúÝçÆÒâüÑÀÌù"
+msgid "This script will help you to install the Sun Management Center software."
+msgstr "ÆÛ script Ùò̶ɷÚÀÇøæÒ Sun Management Center ÝÔüÕ¡¤"
+msgid "Do you want to install this package now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒȺÔïæÒÝÔüÕ¡©"
+msgid "    Do you want to proceed?"
+msgstr "    ÑÒÉÁÓÑú«úý¡©"
+msgid "  Do you want to install components in layer: $2?"
+msgstr "  ÑÒÉÁÓÑÇãĶÇÄìÒȹÇøæÒÜÚǵ¡¨$2?"
+msgid "  Do you want to install $2?"
+msgstr "  ÑÒÉÁÓÑÇøæÒ $2¡©"
+msgid "Do you want to install the product: $2?"
+msgstr "ÑÒÉÁÓÑÇøæÒȺܨС¨$2?"
+msgid "Do you want to install this package now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒȺÔïæÒÝÔüÕ¡©"
+msgid "Would you like to uninstall it now?"
+msgstr "ÚÀÓÑÇ¡É»ÙòÆÆæØØæÇøæÒãá©"
+msgid "Would you like to save your old data?"
+msgstr "ÚÀÓÑóÃÇô÷®æñÕèãá©"
+msgid "Do you want to run setup now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÙÚÈçÇøæÒ¡©"
+msgid "Please enter the source directory:"
+msgstr "îùòÓÄ«ËôäãÆøò硨"
+msgid "Enter the development system license: "
+msgstr "îùòÓÄ«âäàõË·ÜÓÎêû⡨ "
+msgid "Enter your choice: [1\\\|2]"
+msgstr "îùòÓÄ«ÚÀÎûòÙð塨[1\\\|2]"
+msgid "Please enter the target directory [$2]:"
+msgstr "îùòÓÄ«ÆøíºÆøòç [$2]¡¨"
+msgid "Enter the directory to install the database: "
+msgstr "îùòÓÄ«ÓÑÇøæÒæñÕèÕ»ÎûÆøò硨 "
+msgid "Please insert the second CD or enter the source directory from disk 2 \\\[$2\\\]"
+msgstr "îùßÆÄ«ÜÉĨگ CD ÍÐòÓÄ«ËôÈÜéöé÷ 2 ÎûËôäãÆøòç \\\[$2\\\]"
+msgid "Please enter the new source directory:"
+msgstr "îùòÓÄ«ä»ÎûËôäãÆøò硨"
+msgid "Please enter the OS version for \\\"$2\\\" \\\[$3\\\]: "
+msgstr "îùòÓÄ«ÆîÍõ \\\"$2\\\" Îû OS ÎêÆÛ \\\[$3\\\]¡¨ "
+msgid "Please enter the platform for \\\"$2\\\" \\\[$3\\\]: "
+msgstr "îùòÓÄ«ÆîÍõ \\\"$2\\\" ÎûÆÍƺ \\\[$3\\\]¡¨ "
+msgid "Log file: $2"
+msgstr "ÅÊë¢óò¡¨$2"
+msgid "                         End of Installation                         "
+msgstr "                         ÇøæÒá¸ÊÖ                         "
+msgid "For installing Sun Management Center on $2, we need to know the"
+msgstr "ҳħÙò Sun Management Center ÇøæÒÇã $2 ĸ¡¢Ê¼Ô¯ëæÓÑÏ¡ç¬"
+msgid "operating system on $2. This should be the output of the command"
+msgstr "$2 ĸÎûÉ¢äÆË·ÜÓ¡¤ÆÆóÜæÚÑÒÑÀÅï"
+msgid "/usr/bin/uname -r. The command must be executed on a machine booted with"
+msgstr "/usr/bin/uname -r ÎûòÓÅøá¸Îª¡¤æÚÑÀÅïÆÒâüÇãÅè"
+msgid "disk mounted on $2"
+msgstr "æÒç¥Íõ $2 Îûéöé÷ÚöÙ¯ÎûçÙæªÄ¸ÙÚÈ硤"
+msgid "For installing Sun Management Center on $2, we need to know the"
+msgstr "ҳħÙò Sun Management Center ÇøæÒÇã $2 ĸ¡¢Ê¼Ô¯ëæÓÑÏ¡ç¬"
+msgid "machine type of machine whose root filesystem is or will be mounted on $2."
+msgstr "̧óòÕùË·ÜÓÄØåîÍÐÉ»ÙòæÒç¥Çã $2 ĸÄæçÙæªÎûùËÐΡ¤"
+msgid "This should be the output of the following command"
+msgstr "ÆÆóÜæÚÑÒĶÓòÑÀÅïÎûòÓÅøá¸Îª¡¨"
+msgid "    /usr/platform/PLATFORM/sbin/prtdiag \\\| /usr/bin/head -1 \\\| /usr/bin/cut -f2 -d:"
+msgstr "    /usr/platform/PLATFORM/sbin/prtdiag \\\| /usr/bin/head -1 \\\| /usr/bin/cut -f2 -d:"
+msgid "Please note that the above commands must be executed on the target machine."
+msgstr "îùÎÃãô¡¢Ä¸ÓÝÑÀÅïÆÒâüÇãÆøíºçÙæªÄ¸ÙÚÈ硤"
+msgid "Would you like to migrate your 2.x data?"
+msgstr "ÚÀÓÑÜÃ÷Ë 2.x ÎûæñÕèãá©"
+msgid "A previous version of Sun Management Center Data exists."
+msgstr "È´÷®Îê Sun Management Center ÎûæñÕèÇôÇ㡤"
+msgid "This will remove all files under $2. If you have any custom"
+msgstr "ÝÕÙòÜÃØæ $2 ĶÎûÍÔÈ´óòÕù¡¤ÇñΪÚÀÇãÝÕÔ¶ÆøòçĶȴ"
+msgid "scripts under this directory, please move them to an alternate location"
+msgstr "ǶÈôÈÜÓÔÎû scripts¡¢îùÇãú«úýâÐÈçЩÙòÆÆÔ¯"
+msgid "before proceeding."
+msgstr "ÜÃ̯ßåÅîÈíåô¡¤"
+msgid "Do you wish to continue with the removal of the existing 2.x data"
+msgstr "ÑÒÉÁÓÑú«úýâÐÈçܢȴ 2.x æñÕèÎûÜÃØæ"
+#
+#===============================
+# <WS>/packages/Setup/es-setup
+#===============================
+msgid "Setup of $2 component failed."
+msgstr "àÒÎÎÝÃÌù $2 ÜÚǵ¡¤"
+msgid "Exiting setup."
+msgstr "á¸ÊÖÝÃÌù¡¤"
+msgid "The Sun Management Center Setup File \\\($2\\\)$3"
+msgstr "Sun Management Center ÝÃÌùóò \\\($2\\\)$3"
+msgid "    is missing. Cannot Setup Sun Management Center $2."
+msgstr "    òÜÆ¡¤àÒÎÎÝÃÌù Sun Management Center $2¡¤"
+msgid "Initiating setup for Sun Management Center $2 Component."
+msgstr "ÏÏÌî Sun Management Center $2 ÜÚǵ ÎûÝÃÌù¡¤"
+msgid "Please read the release notes to configure the device type."
+msgstr "îùïåûôàõÈçë©ÍüÅèØÙåôæÒåôùËÐΡ¤"
+msgid "Using log file: $2."
+msgstr "ËðÆîÅÊë¢óò¡¨$2."
+msgid "   Sun Management Center Setup Program"
+msgstr "   Sun Management Center ÝÃÌùá£È¢"
+msgid "This program does setup of Sun Management Center components that are installed on your system."
+msgstr "Ⱥá£È¢ÙòÝÃÌùË·ÜÓĸÄØÇøæÒÎû Sun Management Center ÜÚǵ¡¤"
+msgid "Checking for Sun Management Center components installed on your system."
+msgstr "ÆßÇãóôÑçË·ÜÓĸÄØÇøæÒÔáËè Sun Management Center ÜÚǵ¡¤"
+msgid "You Do not have any Sun Management Center components installed."
+msgstr "ÚÀÆÜÇøæÒǶÈô Sun Management Center ÜÚǵ¡¤"
+msgid "You may want to run setup after installing"
+msgstr "ÇøæÒ Sun Management Center ÜÚǵÄæÑ¥¡¢Æ«×äÓÑ"
+msgid "    the Sun Management Center components."
+msgstr "    ÙÚÈçÝÃÌùá£È¢¡¤"
+msgid "You have the following Sun Management Center components installed"
+msgstr "ÚÀÄØÇøæÒħĶÇÄ Sun Management Center ÜÚǵ"
+msgid "             Sun Management Center Server"
+msgstr "             Sun Management Center ÈùΤðÂ"
+msgid "             Sun Management Center Agent"
+msgstr "             Sun Management Center ÅîÜ¡á£È¢"
+msgid "             Sun Management Center Console"
+msgstr "             Sun Management Center ÅäÚÕƺ"
+msgid "This script will perform the setup for each of these components"
+msgstr "ÆÛ Script ÙòÒ³ÝÕËèÜÚǵÙÚÈçÝÃÌùá£Ê©"
+msgid "Core Sun Management Center setup complete."
+msgstr "ÕøÅÀ Sun Management Center ÝÃÌùÉùÜ«¡¤"
+msgid "Setup of Sun Management Center addons incomplete. Exiting"
+msgstr " Sun Management Center ÏáÅûÔïæÒÝÔüÕÎûÝÃÌùÆÜÉùÈ©¡¤ Exiting"
+msgid "Sun Management Center setup complete."
+msgstr " Sun Management Center ÝÃÌùÉùÜ«¡¤"
+msgid "Problems occured with setup of the following addons: $2"
+msgstr "ÝÃÌùĶÇÄÏáÅûÔïæÒÝÔüÕÕëàõÆíÙÂ÷$2"
+msgid "Setup log stored in $2"
+msgstr "ÝÃÌùÅÊë¢óÃÇôÇã $2 Äã"
+msgid "A minimum of 256 MB RAM is required to run Sun Management Center."
+msgstr "ÈÝÅ·ëæÈ´ 256 MB Îû RAM Äß×äÙÚÈç Sun Management Center¡¤"
+msgid "Current system has $2 MB RAM."
+msgstr "ÆøЩ˷ÜÓ̦ȴ $2 MB Îû RAM¡¤"
+msgid "Can not continue to setup Sun Management Center DB."
+msgstr "àÒÎÎú«úýÝÃÌù Sun Management Center DB¡¤"
+msgid "Checking /etc/system file..."
+msgstr "ÆßÇãóôÑç /etc/system óò..."
+msgid "Checking memory available..."
+msgstr "ÆßÇãóôÑçÆ«ÆîØ´ðÙüÕ..."
+msgid "Checking /etc/system file error. It can not be updated."
+msgstr "ÆßÇãóôÑç /etc/system óòÎûòã먡¤ It can not be updated."
+msgid "The /etc/system file needs to be changed for Sun Management Center DB requirements."
+msgstr "ëæüÈÊÕ /etc/system óòÅèÜÊÇÙ Sun Management Center DB ÎûëæÊ塤"
+msgid "Backing up /etc/system to /etc/system.SunMCDB.backup"
+msgstr "ÆßÇãެǹ /etc/system to /etc/system.SunMCDB.backup"
+msgid "/etc/system file has not been changed."
+msgstr "ÌþÆÜüÈÊÕ /etc/system file óò¡¤"
+msgid "In order for kernel variable changes to take effect, this "
+msgstr "Ò³ËðÅäÓÑüÈí°ÎûüÈÊÕÆíÕæ¡¢ÆÒâüÓìä»ÚöÙ¯ÝÕÝå"
+msgid "machine must be rebooted.  You must reboot this machine now"
+msgstr "çÙ檡¤ÚÀÆÒâüÇ¡É»Óìä»ÚöÙ¯ÝÕÝåçÙæª"
+msgid "and then run the setup again."
+msgstr "àÓÑ¥ÇÂÙÚÈçÝÕÔ¶ÝÃÌùá£Ê©¡¤"
+msgid "Cannot create link $2 to directory $3"
+msgstr "àÒÎÎÐúÇ¡Ý×Í»Æøòç $3 Îûù¹á¸ $2"
+msgid "Sun Management Center DB setup cannot continue."
+msgstr "Sun Management Center DB ÝÃÌùá£Ê©àÒÎÎú«úý¡¤"
+msgid "Error changing ownership of $2 to root.  Installation cannot continue."
+msgstr "Ùò $2 ÎûÍÔÈ´ûâüÈÒ³úè root ÎûðçÉ¢àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Configuring Sun Management Center DB listener and service files..."
+msgstr "ÆßÇãØÙåô Sun Management Center DB ÚÙûïÅü×äêØΤ٭óò..."
+msgid "The default listener port $2 for Sun Management Center DB has already been used."
+msgstr "Sun Management Center DB ÎûçßÝÃÚÙûïÙÕ $2 ÄØÝ·ËðÆ"
+msgid "Please input another port number for Sun Management Center DB listener."
+msgstr "îùòÓīƶġԶÆîÍõ Sun Management Center DB ÚÙûïÅü×äÎûÙÕæÀ¡¤"
+msgid "Error in resetting the configuration files for Sun Management Center DB."
+msgstr "ÓìÝÃÆîÍõ Sun Management Center DB ÎûØÙåôóòÕëàõÆíòã먡¤"
+msgid "Linking database, Please wait"
+msgstr "ÆßÇãÝÙá¸æñÕèÕ»¡¢îùá¡Ô·"
+msgid "in the event of error, see /tmp/relink.log"
+msgstr "Çãòãë¨ÎûËçǵÄã¡¢îùÙ¶ÈÓ /tmp/relink.log"
+msgid "Create ora passord file"
+msgstr "ÐúÇ¡ ora Ùïî£óò"
+msgid "/usr/bin/make is needed on Sun Management Center server machine. The current"
+msgstr "Sun Management Center ÈùΤðÂçÙæªÄ¸ëæÓÑÈ´ /usr/bin/make¡¤ÆøЩ"
+msgid "failed to create internal user password file : $2"
+msgstr "àÒÎÎÐúÇ¡ÄùÝåËðÆîϯÙïî£óò¡¨$2"
+msgid "does not have it. Please make this file available and run setup again"
+msgstr "ÊôÈ´¡¤îùËðÝÕÔ¶óòÕùüÈҳƫÆî¡¢àÓÑ¥ÇÂÙÚÈçÝÃÌùá£Ê©"
+msgid "execution of make -f ins_net_server.mk install failed"
+msgstr "make -f ins_net_server.mk install ÎûÙÚÈçÆÂÚõ"
+msgid "see /tmp/make.log file for details"
+msgstr "îùÙ¶ÈÓ /tmp/make.log óòÄãÎûæÛÜØæñع"
+msgid "Database setup failed : $2 does not exist"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨$2 ÄâÇôÇã"
+msgid "Database setup failed : mkaggregatefiles.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨mkaggregatefiles.ksh ÙÚÈçÆÂÚõ"
+msgid "Database setup failed : db-start failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨db-start ÙÚÈçÆÂÚõ"
+msgid "Please wait, Sun Management Center database setup in progress. It may take 15 to 20 minutes"
+msgstr "îùá¡Ô·¡¢ÆßÇãâÐÈç Sun Management Center æñÕèÕ»ÝÃÌù¡¤Æ«×äëæÏÄĸ 15 ̯ 20 Å¡úÌ"
+msgid "Database setup failed : build-smc-oracle-recovery.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨build-smc-oracle-recovery.ksh ÙÚÈçÆÂÚõ"
+msgid "Please wait, Sun Management Center database setup in progress. It may take 15 to 20 minutes"
+msgstr "îùá¡Ô·¡¢ÆßÇãâÐÈç Sun Management Center æñÕèÕ»ÝÃÌù¡¤Æ«×äëæÏÄĸ 15 ̯ 20 Å¡úÌ"
+msgid "Database setup failed : build-smc-oracle-recovery.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨build-smc-oracle-recovery.ksh ÙÚÈçÆÂÚõ"
+msgid "Found symon 2.x import data"
+msgstr "ÊÆ̯ symon 2.x ã¾Ä«æñÕè"
+msgid "about to import symon 2.x data"
+msgstr "ÙòÓÑã¾Ä« symon 2.x æñÕè"
+msgid "cannot find the 2.x import script file $2"
+msgstr "ÊÆÄâ̯ 2.x ã¾Ä« Script óò $2"
+msgid "will not import symon 2.x data"
+msgstr "ÙòÄâã¾Ä« symon 2.x æñÕè"
+msgid "Database setup failed : db-stop failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨db-stop ÙÚÈçÆÂÚõ"
+msgid "A problem occured with $2 setup.  Do you want to continue?"
+msgstr "ÝÃÌù $2 ÕëÅøÜ¢ÙÂ÷ÑÒÉÁÓÑú«úý¡©"
+msgid "    Do you wish to update /etc/system file?"
+msgstr "    ÑÒÉÁÓÑÊÕä» /etc/system óò¡©"
+msgid "A problem occured with $2 setup.  Do you want to continue?"
+msgstr "ÝÃÌù $2 ÕëÅøÜ¢ÙÂ÷ÑÒÉÁÓÑú«úý¡©"
+msgid "    Do you wish to keep any existing topology and event data"
+msgstr "    ÑÒÉÁÓÑÏñÖçǶÈôÜ¢ÇôÎûÍßðôůËçǵæñÕè"
+msgid "    Do you want to perform a symon 2.x data import?"
+msgstr "    ÑÒÉÁÓÑÙÚÈç symon 2.x æñÕèÎûã¾Ä«¡©"
+msgid "Do you want to start Sun Management Center agent and server components now"
+msgstr "ÑÒÉÁÇ¡É»ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢êØÈùΤðÂÜÚǵ"
+msgid "Do you want to start Sun Management Center agent now"
+msgstr "ÑÒÉÁÇ¡É»ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢"
+msgid "Error: It seems the file $2 is not writable, could not update the file."
+msgstr "òã먡¨óòÕù $2 ÈýÅçÄâ×äìÑÄ«¡¢àÒÎÎÊÕä»óòÕù¡¤"
+msgid "Configuring the system for setup, please wait."
+msgstr "ÆßÇãØÙåôË·ÜÓÅèÏíÝÃÌù¡¢îùá¡Ô·¡¤"
+#
+#===============================
+# <WS>/packages/Setup/db-start
+#===============================
+msgid "Listener and Database are up and running\n"
+msgstr "ÚÙûïÅü×äêØæñÕèÕ»ÄØâûɳçªÉ¢\n"
+msgid "the current sid \n"
+msgstr "ÆøЩÎû sid \n"
+msgid "the current orahome \n"
+msgstr "ÆøЩÎû orahome \n"
+msgid "unknown system type, exiting......................\n"
+msgstr "Ë·ÜÓùËÐÎÄâÍü¡¢á¸ÊÖÄã......................\n"
+msgid "getHostName: failed to obtain current host from hostname command\n"
+msgstr "getHostName¡¨àÒÎÎÚ· hostname ÑÀÅï̽ڵÆøЩÎûÅäñ¢\n"
+msgid "current host : $2\n"
+msgstr "ÆøЩÎûÅäñ¢¡¨$2\n"
+msgid "getUserName: failed to obtain user name from id command\n"
+msgstr "getUserName¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîϯÇØê¢\n"
+msgid "current user name : $2\n"
+msgstr "ÆøЩÎûËðÆîϯÇØꢡ¨$2\n"
+msgid "getUserGroup: failed to obtain user group from id command\n"
+msgstr "getUserGroup¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîåúÜÚ\n"
+msgid "current user group : $2\n"
+msgstr "ÆøЩÎûËðÆîϯåúÜÚ¡¨$2\n"
+msgid "path_app : $2\n"
+msgstr "path_app :$2\n"
+msgid "found $2 on path in $3\n"
+msgstr "Çã $3 ÎûæûÕÀÄãÊÆ̯ $2\n"
+msgid "can not find $2 on path, exiting.......................\n"
+msgstr "æûÕÀĸÊÆÄâ̯ $2¡¢á¸ÊÖÄã.......................\n"
+msgid "verifyDatabaseUp: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseUp¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseUp: instance is executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseUp: instance is not executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseDown¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseDown: instance is executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: instance is not executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyListenerUp: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerUp¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerUp: listener $2 is execution\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerUp: listener $2 is not execution\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyListenerDown: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerDown¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerDown: listener $2 is execution\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerDown: listener $2 is not execution\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from df\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ· df ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from df\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ· df ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from mount comma\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ·æÒç¥ comma ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: filesystem $2 is not mounted setuid\n"
+msgstr "verifyFilesystemPerm¡¨óòÕùË·ÜÓ $2 ÆÜæÒç¥ setuid\n"
+msgid " must re-mount the filesystem with setuid enabled\n"
+msgstr " ÆÒâüÇã setuid ÚöÙ¯ÕëÓìä»æÒç¥óòÕùË·ÜÓ\n"
+msgid "verifyFilesystemPerm: filesystem $2 is mounted setuid, OK\n"
+msgstr "verifyFilesystemPerm¡¨óòÕùË·ÜÓ $2 ÆÜæÒç¥ setuid¡¢íýÌù\n"
+msgid "verifyListenerStatus: failed to obtain listener status for alias: $2\n"
+msgstr "verifyListenerStatus¡¨àÒÎÎÒ³ÅèĶɱÇØ̽ڵÚÙûïðÂÎíè表$2\n"
+msgid "verifyListenerStatus: listener status is good for alias: $2\n"
+msgstr "verifyListenerStatus¡¨ÆîÍõÅèĶɱÇØÄæÚÙûïðÂÎíèèËÀÇ$2\n"
+msgid "verifyListenerStatus: listener status is not good for alias: $2\n"
+msgstr "verifyListenerStatus¡¨ÆîÍõÅèĶɱÇØÄæÚÙûïðÂÎíèèÄâË$2\n"
+msgid "the specified path \\\($2\\\) does not exist\n"
+msgstr "ÑÀÌùæûÕÀ \\\($2\\\) ÄâÇôÇã\n"
+msgid "tmpdir \n"
+msgstr "tmpdir \n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain accessperms from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵÇô̽ûâÓ$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain username from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵËðÆîϯÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain groupname from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵåúÜÚÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: access perms for \\\($2\\\) is not at least 755\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÆîÍõ \\\($2\\\) ÎûÇô̽ûâÓîÄâÑÒ޲ŷ 755\n"
+msgid "verifyGoodOraclePermOwnership: access perms ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨Çô̽ûâÓîÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: owner \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûÍÔȴϯ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: owner ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÍÔȴϯÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: group \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûåúÜÚ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: group ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨åúÜÚÆßÚ¦\n"
+msgid "**** directory : $2 does not exist\n"
+msgstr "**** Æøò硨$2 ÄâÇôÇã\n"
+msgid "loop: current new $2\n"
+msgstr "ØÏæû¡¨ÆøЩä»Îû $2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain accessperms from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵÇô̽ûâÓ$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain username from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵËðÆîϯÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain groupname from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵåúÜÚÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: access perms for \\\($2\\\) is not at least 755\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÆîÍõ \\\($2\\\) ÎûÇô̽ûâÓîÄâÑÒ޲ŷ 755\n"
+msgid "verifyGoodOraclePermOwnership: access perms ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨Çô̽ûâÓîÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: owner \\\($listuser\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûÍÔȴϯ \\\($listuser\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: owner ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÍÔȴϯÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: group \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûåúÜÚ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: group ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨åúÜÚÆßÚ¦\n"
+msgid "**** file : $2 does not exist\n"
+msgstr "**** óò¡¨$2 ÄâÇôÇã\n"
+msgid "verifySharedMemUsage: failed to obtain ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨àÒÎÎ̽ڵ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifySharedMemUsage: found ipcs \\\(shared memory segment\\\) info user : $2, group : $3, \\\(shid\\\) : $4\n"
+msgstr "verifySharedMemUsage¡¨ÊÆ̯ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3, \\\(shid\\\)¡§$4\n"
+msgid "verifySharedMemUsage: did find ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨íýèÒÊÆ̯ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifySharedMemUsage: did not find any ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨ÊÆÄâ̯ǶÈô ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifyActiveSemaphoresUsage: failed to obtain ipcs \\\(active semaphores\\\) info user : $2, group : $3\n"
+msgstr "verifyActiveSemaphoresUsage¡¨àÒÎÎ̽ڵ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifyActiveSemaphoresUsage: found ipcs \\\(active semaphores\\\) info user : $2, group : $3, \\\(semid\\\) : $4\n"
+msgstr "verifyActiveSemaphoresUsage¡¨ÊÆ̯ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3, \\\(semid\\\)¡§$4\n"
+msgid "verifyActiveSemaphoresUsage: did find ipcs \\\(active semaphores\\\) info user : $2, group : \n"
+msgstr "verifyActiveSemaphoresUsage¡¨íýèÒÊÆ̯ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨\n"
+msgid "verifyActiveSemaphoresUsage: did not find any ipcs \\\(active semaphores\\\) info user : $2, group : $3\n"
+msgstr "verifyActiveSemaphoresUsage¡¨ÊÆÄâ̯ǶÈô ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "startListener: failed to start listener, alias: $2\n"
+msgstr "startListener¡¨àÒÎÎÚöÙ¯ÚÙûïð¡¢É±ÇØ¡¨$2\n"
+msgid "startListener: listener started, alias: $2\n"
+msgstr "startListener¡¨ÚÙûïðÂÄØÚöÙ¯¡¢É±ÇØ¡¨$2\n"
+msgid "stopListener: failed to stop listener, alias: $2\n"
+msgstr "stopListener¡¨àÒÎÎØôÅÏÚÙûïð¡¢É±ÇØ¡¨$2\n"
+msgid "stopListener: listener stopped, alias: $2\n"
+msgstr "stopListener¡¨ÚÙûïðÂÄØØôÅÏ¡¢É±ÇØ¡¨$2\n"
+msgid "removing existing listener log file $2"
+msgstr "ÜÃØæܢȴÚÙûïðÂÅÊë¢óò $2"
+msgid "execution of verifySetuidFilesystemPerm $2 fail\n"
+msgstr "verifySetuidFilesystemPerm $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "exiting........................\n"
+msgstr "á¸ÊÖÄã........................\n"
+msgid "execution of $2 start $3 fail\n"
+msgstr "$2 ÚöÙ¯ $3 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of verifyListenerUp $2 fail\n"
+msgstr "verifyListenerUp $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of verifyGoodListenerStatus $2 fail\n"
+msgstr " verifyGoodListenerStatus $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of sqlplus using @$2 fail\n"
+msgstr "ɳÆî @$2 ÙÚÈç sqlplus ÆÂÚõ\n"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "execution of verifyDatabaseUp $2 fail\n"
+msgstr "verifyDatabaseUp $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "Listener and Database are up and running\n"
+msgstr "ÚÙûïÅü×äêØæñÕèÕ»ÄØâûɳçªÉ¢\n"
+#
+#================================
+# <WS>/packages/Setup/es-device
+#================================
+msgid "Usage: $2 -ad Filename"
+msgstr "ÆîÎΡ¨$2 -ad óòÕùÇØê¢"
+msgid "   where the options represent:"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨"
+msgid "     a : Add new device"
+msgstr "     a¡¨ä»ìÁä»æÒåô"
+msgid "     d : Delete device"
+msgstr "     d¡¨É´ØææÒåô"
+msgid "This action is limited to superuser only."
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤"
+msgid "Exiting $2."
+msgstr "ÆßÇãá¸ÊÖ $2¡¤"
+msgid "create_node_family_file: Error! Invalid node object type $2"
+msgstr "create_node_family_file¡¨òã먡ªåçöµÎìǵùËÐÎ $2 àÒÕæ"
+msgid "set_global_variable: Value not specified for $2"
+msgstr "set_global_variable¡¨ÆÜÑÀÌùÆîÍõ $2 ÎûÔ«"
+msgid "set_global_variable: Invalid parameter $2"
+msgstr "set_global_variable¡¨Ù¶í°àÒÕæ $2"
+msgid "delete_node: Invalid data in input file"
+msgstr "delete_node¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_node: $2 does not exist, verify input"
+msgstr "delete_node¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_group: Invalid data in input file"
+msgstr "delete_group¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_group: $2 does not exist, verify input"
+msgstr "delete_group¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_group: Invalid group type $2"
+msgstr "delete_group¡¨åúÜÚùËÐÎ $2 àÒÕæ"
+msgid "delete_segment: Invalid data in input file"
+msgstr "delete_segment¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_segment: $2 does not exist, verify input"
+msgstr "delete_segment¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_segment: Invalid segment type $2"
+msgstr "delete_segment¡¨Ù´ÑôùËÐÎ $2 àÒÕæ"
+msgid "delete_composite: Invalid data in input file"
+msgstr "delete_composite¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_composite: $2 does not exist, verify input"
+msgstr "delete_composite¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "validate_node_object_type: $2 or $3 exists"
+msgstr "validate_node_object_type¡¨$2 ÍÐ $3 ÇôÇã"
+msgid "validate_i18n_key: Node object type exists in $2 line $3"
+msgstr "validate_i18n_key¡¨åçöµÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_i18n_key: Invalid i18n key: $2"
+msgstr "validate_i18n_key¡¨i18n õïàÒÕ桨$2"
+msgid "validate_group_i18n_type: $2 is invalid group type"
+msgstr "validate_group_i18n_type¡¨$2 ÑÒàÒÕæÎûåúÜÚùËÐÎ"
+msgid "validate_group_i18n_key: Group object type exists in $2 line $3"
+msgstr "validate_group_i18n_key¡¨åúÜÚÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_segment_i18n_type: $2 is invalid segment type"
+msgstr "validate_segment_i18n_type¡¨$2 ÑÒàÒÕæÎûÙ´ÑôùËÐÎ"
+msgid "validate_segment_i18n_key: Segment object type exists in $2 line $3"
+msgstr "validate_segment_i18n_key¡¨Ù´ÑôÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_composite_i18n_key: Composite object type exists in $2 line $3"
+msgstr "validate_composite_i18n_key¡¨ÜÚÇÙÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_properties_file: Invalid property file name. Must be $2"
+msgstr "validate_properties_file¡¨úèÍÌóòÇØê¢àÒÕ桤ÆÒâüÑÒ $2"
+msgid "validate_search_parameter: Invalid sysoid value $2"
+msgstr "validate_search_parameter¡¨sysoid Ô« $2 àÒÕæ"
+msgid "validate_icon_file: Check if file exists and permissions"
+msgstr "validate_icon_file¡¨óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "validate_hardware_module: Hardware Module name does not exist"
+msgstr "validate_hardware_module¡¨àýüÕí¼ÜÚÇØê¢ÄâÇôÇã"
+msgid "validate_group_object_type: Invalid object type $2"
+msgstr "validate_group_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_group_object_type: Group object type exists in $2 line $3"
+msgstr "validate_group_object_type¡¨åúÜÚÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_segment_object_type: Invalid object type $2"
+msgstr "validate_segment_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_segment_object_type: Segment object type exists in $2 line $3"
+msgstr "validate_segment_object_type¡¨Ù´ÑôÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "add_node: Invalid node type $2"
+msgstr "add_node¡¨åçöµùËÐÎ $2 àÒÕæ"
+msgid "add_node: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_node¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_group: Invalid group type $2"
+msgstr "add_group¡¨åúÜÚùËÐÎ $2 àÒÕæ"
+msgid "add_group: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_group¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_segment: Invalid segment type $2"
+msgstr "add_segment¡¨Ù´ÑôùËÐÎ $2 àÒÕæ"
+msgid "add_segment: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_segment¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_composite: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_composite¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "Package SUNWessrv is not installed on this system"
+msgstr "Ⱥ˷ÜÓÆÜÇøæÒ SUNWessrv ÔïæÒÝÔüÕ"
+msgid "Unable to create logfile $2"
+msgstr "àÒÎÎÐúÇ¡ÅÊë¢óò $2"
+msgid "$2 file does not exist"
+msgstr "$2 óòÄâÇôÇã"
+msgid "$2 file does not have read permissions"
+msgstr "$2 óòÄâ̦ûô̽ûâÓî"
+msgid "Invalid Operation: Operation not supported"
+msgstr "ðçÉ¢àÒÕ桨ðçÉ¢ÄâÌ¿ÅÅßÎ"
+msgid "process_delete_data: Object type $2 missing in data file"
+msgstr "process_delete_data¡¨æñÕèóòÄã×ÍÅ·ÎìǵùËÐÎ $2"
+msgid "validate_monitor_via : $2 is invalid type"
+msgstr "validate_monitor_via¡¨$2 ÑÒàÒÕæÎûùËÐÎ"
+msgid "validate_node_type:$2 is invalid node type"
+msgstr "validate_node_type¡¨$2 ÑÒàÒÕæÎûùËÐÎ"
+msgid "validate_node_object_type: Invalid object type $2"
+msgstr "validate_node_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_i18n_key: Invalid object type $2"
+msgstr "validate_i18n_key¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "add_device: Invalid object type $2"
+msgstr "add_device¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_node_object_type: Node object type exists in $2 line $3"
+msgstr "validate_node_object_type¡¨åçöµÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_object_type: Invalid object type $2"
+msgstr "validate_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_group_type: $2 is invalid group type"
+msgstr "validate_group_type¡¨$2 ÑÒàÒÕæÎûåúÜÚùËÐÎ"
+msgid "validate_segment_type: Invalid value $2 for Segment_type"
+msgstr "validate_segment_type¡¨Segment_type ÎûÔ« $2 àÒÕæ"
+msgid "     (for example: ./es-device -a /tmp/userdata)"
+msgstr "     (ËóÇñ¡¨./es-device -a /tmp/userdata)"
+msgid "     (for example: ./es-device -d /tmp/userdata)"
+msgstr "     (ËóÇñ¡¨./es-device -d /tmp/userdata)"
+msgid "validate_user_name: No value specified for User_name"
+msgstr "validate_user_name¡¨ÆÜÑÀÌùÆîÍõ User_name ÎûÔ«"
+msgid "validate_node_object_type: No value specified for Node_object_type"
+msgstr "validate_node_object_type¡¨ÆÜÑÀÌùÆîÍõNode_object_type ÎûÔ«"
+msgid "validate_i18n_key: No value specified for i18n_key"
+msgstr "validate_i18n_key¡¨ÆÜÑÀÌùÆîÍõ i18n_key ÎûÔ«"
+msgid "validate_properties_file: No value specified for Properties_file"
+msgstr "validate_properties_file¡¨ÆÜÑÀÌùÆîÍõ Properties_file ÎûÔ«"
+msgid "validate_search_parameter: No value specified for Search_parameter"
+msgstr "validate_search_parameter¡¨ÆÜÑÀÌùÆîÍõ Search_parameter ÎûÔ«"
+msgid "validate_icon_file: No value specified for icon"
+msgstr "validate_icon_file¡¨ÆÜÑÀÌùÆîÍõè·ÆüÎûÔ«"
+msgid "validate_segment_object_type: No value specified for Segment object type"
+msgstr "validate_segment_object_type¡¨ÆÜÑÀÌùÆîÍõÙ´ÑôÎìǵùËÐÎÎûÔ«"
+#
+#==============================
+# <WS>/packages/Setup/db-stop
+#==============================
+msgid "getHostName: failed to obtain current host from hostname comma"
+msgstr "getHostName¡¨àÒÎÎÚ· hostname ÑÀÅï̽ڵÆøЩÎûÅäñ¢"
+msgid "current host : $2\n"
+msgstr "ÆøЩÎûÅäñ¢¡¨$2\n"
+msgid "getUserName: failed to obtain user name from id comma\n"
+msgstr "getUserName¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîϯÇØê¢\n"
+msgid "current user name : $2\n"
+msgstr "ÆøЩÎûËðÆîϯÇØꢡ¨$2\n"
+msgid "getUserGroup: failed to obtain user group from id comma\n"
+msgstr "getUserGroup¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîåúÜÚ\n"
+msgid "current user group : $2\n"
+msgstr "ÆøЩÎûËðÆîϯåúÜÚ¡¨$2\n"
+msgid "verifyDatabaseUp: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseUp¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseUp: instance is executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseUp: instance is not executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseDown¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseDown: instance is executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: instance is not executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyListenerUp: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerUp¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerUp: listener $2 is executing\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerUp: listener $2 is not executing\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyListenerDown: failed to obtain listener process info from \n"
+msgstr "verifyListenerDown¡¨àÒÎÎ̽ڵÚÙûïÅü×äݨܡæñع¡¾Ú·¡¿\n"
+msgid "verifyListenerDown: listener $2 is executing\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerDown: listener $2 is not executing\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "the file $2 does not exist, exiting........................"
+msgstr "óòÕù $2 ÄâÇôÇã¡¢á¸ÊÖÄã........................"
+msgid "performing a (shutdown immediate)......"
+msgstr "ÆßÇãÙÚÈ硾ǡɻùÃñ¢¡¿......"
+msgid "execution of $2 using \\@$3 failed"
+msgstr "ËðÆî \\@$3 ÙÚÈç $2 ÆÂÚõ"
+msgid "exiting..........................\n"
+msgstr "á¸ÊÖÄã........................\n"
+msgid "unable to perform normal shutdown, executing a shutdown abort"
+msgstr "àÒÎÎÙÚÈçÆßÚ¦ùÃñ¢¡¢ÙÚÈçùÃñ¢ÄãöË"
+msgid "execution of $2 using adhoc shutdown-abort failed"
+msgstr "ËðÆî adhoc shutdown-abort ÙÚÈç $2 ÆÂÚõ"
+msgid "execution of $2 stop $3 failed"
+msgstr "$2 ØôÅÏ $3 ÎûÙÚÈçÆÂÚõ"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "execution of sqlplus using $2 fail\n"
+msgstr "ËðÆî $2 ÙÚÈç sqlplus ÆÂÚõ\n"
+msgid "can not find $2 on path, exiting.......................\n"
+msgstr "æûÕÀĸÊÆÄâ̯ $2¡¢á¸ÊÖÄã.......................\n"
+#
+#=========================================
+# <WS>/packages/Setup/sm_setup_server.sh
+#=========================================
+msgid "The Sun Management Center Console help configuration file cannot be found."
+msgstr "ÊÆÄâ̯ Sun Management Center ÅäÚÕƺëºÉ·ë©ÍüØÙåôóò¡¤"
+msgid "Please re-install the Sun Management Center Console component"
+msgstr "îùÓìä»ÇøæÒ Sun Management Center ÅäÚÕƺÜÚǵ"
+msgid "The base URL has been set to $2"
+msgstr "Ù×ÆÛ URL ÄØÝÃÌùÒ³ $2"
+msgid "Could not find group $2.  You will have to set up"
+msgstr "ÊÆÄâ̯åúÜÚ $2¡¤ÚÀÆÒâüÅÃÙ¯"
+msgid "the groups manually.  Please add $3 to group $2."
+msgstr "ÝÃÌùåúÜÚ¡¤îùÙò $3 ä»ìÁÈÝåúÜÚ $2¡¤"
+msgid "User $3 in group $2 is not a valid user.  Leaving it out of the esusers file."
+msgstr "åúÜÚ $2 ÄãÎûËðÆîϯ $3 ÄâÑÒÈ´ÕæÎûËðÆîϯ¡¤îùÙòÆÆÚ· esusers óòÄãÜÃØ桤"
+msgid "Adding user $2 from group $3 to esusers"
+msgstr "ÆßÇãÙòåúÜÚ $3 ÄãÎûËðÆîϯ $2 ä»ìÁÈÝ esusers"
+msgid "It appears that you already have some users \\\($2\\\)"
+msgstr "ÚÀÆ«×äÄØÈ´Ä¡ËèËðÆîϯ \\\($2\\\)"
+msgid "configured as Sun Management Center administrators.  Leaving these users in place."
+msgstr "ØÙåôÒ³ Sun Management Center ê§Ü¡ÔÞ¡¤ÙòÝÕËèËðÆîϯÖçÇãÔÏݨ¡¤"
+msgid "You should setup a user as a Sun Management Center administrator."
+msgstr "ÚÀóÜæÚÙòÄ¡ÈíËðÆîϯÝÃÒ³ Sun Management Center ê§Ü¡ÔÞ"
+msgid "This person will be added to the esadm and esdomadm groups."
+msgstr "äÄÙòȺËðÆîϯä»ìÁ̯ esadm ÌÏ esdomadm åúÜÚÄ㡤"
+msgid "$2 is not a valid user."
+msgstr "$2 ÄâÑÒÈ´ÕæÎûËðÆîϯ¡¤"
+msgid "The group $2 already exists on your system."
+msgstr "Ë·ÜÓĸÄØÇôÇãåúÜÚ $2¡¤"
+msgid "Creating the group $2 that contains Sun Management Center $3 Users."
+msgstr "ÆßÇãÐúÇ¡ÅýÉÖ Sun Management Center $3 ËðÆîϯÎûåúÜÚ $2¡¤"
+msgid "Could not find $2 in $3"
+msgstr "$3 ÄãÆÜÊÆ̯ $2"
+msgid "This part of the setup process does the Sun Management Center Server Component setup."
+msgstr "ÝÕÝåÅ¡ÎûÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÈùΤðÂÜÚǵÎûÝÃÌù¡¤"
+msgid "Unable to set $2 values."
+msgstr "àÒÎÎÝÃÌù $2 Ô«¡¤"
+msgid "agent.snmpPort is already configured in $2"
+msgstr "$2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "topology.snmpPort is already configured in $2"
+msgstr "$2 ÄãÄØØÙåôħ topology.snmpPort"
+msgid "The Sun Management Center base URL is relative to the Sun Management Center Console."
+msgstr " Sun Management Center Ù×äí URL ÑÒÒÞè×Íõ Sun Management Center Cosole Îû¡¤"
+msgid "The Sun Management Center Console is able to request help documentation via the network."
+msgstr " Sun Management Center ÅäÚÕƺƫÝàç´ê½æûîùÊåëºÉ·ë©ÍüÅÆǵæñÕ衤"
+msgid "If you have installed Sun Management Center help documentation in an http-accessible"
+msgstr "ÇñΪÇãê½æûÄãÆ«Ýàç´ http Çô̽ÎûÈíåôĸÇøæÒħ Sun Management Center ëºÉ·ë©ÍüÅÆǵæñÕè¡¢"
+msgid "location within your network, you may specify this location."
+msgstr "ÚÀÆÒâüüÏÆüȺÈíåô¡¤"
+msgid "If Sun Management Center help is installed on the console host, simply accept the default value."
+msgstr "ÇñΪ Sun Management Center ëºÉ·ë©ÍüÇøæÒÇãÅäÚÕƺÅäñ¢Ä¸¡¢Ð¬Æ·ëæÚÙÌ¿çßÝÃÔ«¡¤"
+msgid "Completing Sun Management Center Server Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÈùΤðÂÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center server"
+msgstr "ËðÆîSun Management Center ÈùΤðÂÎûÇøÇÀê¡ÄÍ $2"
+msgid "Please enter a user to be the Sun Management Center administrator: "
+msgstr "îùòÓÄ«É¢Ò³ Sun Management Center ê§Ü¡ÔÞÎûËðÆîϯ¡¨ "
+msgid "Please enter a valid username: "
+msgstr "îùòÓÄ«È´ÕæÎûËðÆîϯÇØꢡ¨ "
+msgid "Please enter base URL to Sun Management Center help [local]: "
+msgstr "îùòÓÄ«ÝÙÚÙ Sun Management Center ëºÉ·ë©ÍüÎûÙ×ÆÛ URL [çßÝá¨ã¯ÆñÆÛê¦Ù¶äù]¡¨ "
+#
+#===================================
+# <WS>/packages/Setup/es-common.sh
+#===================================
+msgid "Enter \\\"y\\\" or \\\"n\\\" or \\\"q\\\""
+msgstr "îùòÓÄ« \\\"y\\\" ÍÐ \\\"n\\\" ÍÐ \\\"q\\\""
+msgid "Exiting at user request"
+msgstr "ÇãËðÆîϯÓÑÊåĶØÍÅø"
+msgid "L10N_CODE not set!, LANG=$2"
+msgstr "ÆÜÝÃÌù L10N_CODE¡ªLANG=$2"
+msgid "Cannot find locale directory for LANG: $2"
+msgstr "ÊÆÄâ̯ LANG Îûë£ËÆô¿èºÆøò硨$2"
+msgid "Expected to find it in: $2"
+msgstr "çßßæÅèĶÈíåôÊÆ̯ÆÆ¡¨$2"
+msgid "No Sun Management Center Packages are installed. Exiting."
+msgstr "ÆÜÇøæÒ Sun Management Center ÔïæÒÝÔüÕ¡¤ÆßÇãá¸ÊÖ¡¤"
+msgid "Could not find xput executable: $2"
+msgstr "ÊÆÄâ̯ xput Æ«ÙÚÈçóò¡¨$2"
+msgid "Cannot find file $2"
+msgstr "ÊÆÄâ̯óòÕù $2"
+msgid "Moving $2 to $3"
+msgstr "ÆßÇãÙò $2 ÜÃ̯ $3"
+msgid "--------------  WARNING  -------------------"
+msgstr "--------------  úÀÉË  -------------------"
+msgid "It appears that $2 $3 is already in use."
+msgstr "$2 $3 Æ«×äÄØÇãËðÆ"
+msgid "Sun Management Center $2 may not be able to run due to this conflict."
+msgstr "ÆñÍõȺîíÒó¡¢Sun Management Center $2 Æ«×äàÒÎÎÙÚÈ硤"
+msgid "There are two ways to correct this conflict:"
+msgstr "È´Ì¥ê¡ÅÉÎÎÆ«Ï«ÆßȺîíÒó¡¨"
+msgid "  1. Reconfigure the port that Sun Management Center uses."
+msgstr "  1. Óìä»ØÙåô Sun Management Center ÍÔÆîÎûÝÙÚÙÙÕ¡¤"
+msgid "  2. Stop the process that is using the port."
+msgstr "  2. ØôÅÏÆßÇãËðÆîæÚÝÙÚÙÙÕÎûݨܡ¡¤"
+msgid "    You are currently running snmpdx, which may be causing the conflict."
+msgstr "    ÆøЩÆßÇãÙÚÈç snmpdx¡¢Æ«×äÑÒÆÆðÒÓ³æÚîíÒó¡¤"
+msgid "Skipping the setting of port number for $2"
+msgstr "Ü©ç´ÝÙÚÙÙÕæÀ $2 ÝÃÌù"
+msgid "NOTE: Prior to starting Sun Management Center $2, stop the process using port $3."
+msgstr "ÎÃãô¡¨ÇãÚöÙ¯ Sun Management Center $2 ÄæЩ¡¢Ç¿ËðÆîÝÙÚÙÙÕ $3 ØôÅÏݨܡ¡¤"
+msgid "Updating $2 with new port number."
+msgstr "ËðÆîä»ÝÙÚÙÙÕæÀÊÕä» $2¡¤"
+msgid "This part of setup generates security keys used for communications"
+msgstr "ÝÕÝåÅ¡ÝÃÌùá£Ê©ÙòܨÆíÆîÍõá£Ê©ÄæâæÝ×عÎûÇøÇÀõ"
+msgid "between processes.  A seed must be provided to initialize the"
+msgstr "ÆÒâüßÈËòê¡ÄÍËôÏÏÌîÝÕËèÇøÇÀõ"
+msgid "keys.  You can choose to use the standard Sun Management Center default or"
+msgstr "ÚÀÆ«ÅèËðÆîíºäíÎû Sun Management Center çßÝÃÔ«ÍÐòÓÄ«ÚÀÈÜÄ×Îû"
+msgid "enter your own seed.  If you do not generate the keys now,"
+msgstr "ê¡ÄÍ¡¤ÇñΪܢÇãÄâùÌܨÆíÝÕËèÇøÇÀõï¡¢"
+msgid "you can do so later using the procedure documented in the"
+msgstr "ÚÀÆ«ÅèÅÊÑ¥ÇÂØø¡¢Èþâüò×ߧ"
+msgid "Sun Management Center 3.0 Users Guide."
+msgstr "¡ÎSun Management Center 3.0 ËðÆîϯÑÀв¡ÏÄãÍÔÓÝÎûÊãüõ¡¤"
+msgid "Please make sure you use the same seed for all the machines you install."
+msgstr "îùíýë¥è×ÇøæÒÎûÍÔÈ´çÙæªÉáËðÆîÒÞÇÑÎûê¡ÄÍ¡¤"
+msgid "Invalid seed - type s to use default seed"
+msgstr "ê¡ÄÍàÒÕæ - Ѻ s ÅèËðÆîçßÝÃê¡ÄÍ"
+msgid "Using default Sun Management Center value for seed."
+msgstr "ÆßÇãËðÆîçßÝÃÎû Sun Management Center Ô«É¢Ò³ê¡ÄÍ"
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+msgid "Unable to create logfile $LOGFILE."
+msgstr "àÒÎÎÐúÇ¡ÅÊë¢óò $LOGFILE¡¤"
+msgid "Started $0 at"
+msgstr "ÄØÚöÙ¯ $0 Íõ"
+msgid "Running on"
+msgstr "ÆßÙÚÈçÍõ"
+msgid "What seed would you like to use?\n"
+msgstr "ÓÑËðÆîÄïëûê¡ÄÍ¡©\n"
+msgid "Invalid response in automated configuration file."
+msgstr "ÈÜÙ¯ØÙåôóòÄãÈ´àÒÕæÎûÇßóÜ¡¤"
+msgid "Unsupported OS version: $2"
+msgstr "ÄâÅÅßÎÎû OS ÎêÆÛ¡¨$2"
+msgid "Do you want to use a different port number for $2?"
+msgstr "è×Íõ $2 ÚÀÓÑËðÆîÄâÇÑÎûÝÙÚÙÙÕæÀ¡©"
+msgid "Do you want to generate these keys using the Sun Management Center default seed?"
+msgstr "ÑÒÉÁÓÑËðÆî Sun Management Center çßÝÃê¡ÄÍܨÆíÝÕËèÇøÇÀõï¡©"
+msgid "Please enter any port greater or equal to 1100 : "
+msgstr "îùòÓīǶġÄËÍõÍÐá«Íõ 1100 ÎûÝÙÚÙÙÕ¡¨ "
+msgid "Port $2 is not a valid port number, try another number : "
+msgstr "ÝÙÚÙÙÕ $2 ÄâÑÒÈ´ÕæÎûÝÙÚÙÙÕæÀ¡¢îùæÜƶġԶæÀ¨ "
+msgid "Port $2 is also busy, try another - use s to skip setting the port number:"
+msgstr "ÝÙÚÙÙÕ $2 ľȤåÓÄã¡¢îùæÜ̧ÅìÎû - ËðÆî s Ü©ç´ÝÃÌùÝÙÚÙÙÕæÀ¡¨"
+#
+#======================================
+# <WS>/packages/Setup/install-java.sh
+#======================================
+msgid "Java packages are not in $2"
+msgstr " Java ÔïæÒÝÔüÕÄâÇã $2 Äã"
+msgid "All required Java packages are not in $2"
+msgstr "ËäÏæÍÔÈ´ëæÊåÎû Java ÔïæÒÝÔüÕÉáÇã $2 Äã"
+msgid "Installing java packages $2"
+msgstr "ÆßÇãÇøæÒ java ÔïæÒÝÔüÕ $2"
+msgid "the system. Please install them first and then install Sun Management Center."
+msgstr "Ë·ÜÓÄ㡤îùÇ¿ÇøæÒÆÆÔ¯¡¢àÓÑ¥ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Package $2 is installed on this system. This package is"
+msgstr "ÔïæÒÝÔüÕ $2 ÄØÇøæÒÇãȺ˷ÜÓÄ㡤 This package is"
+msgid "incompatible with the java version required for Sun Management Center."
+msgstr "êØ Sun Management Center ÍÔëæÎû java ÎêÆÛÄâÒÞÕ©¡¤"
+msgid "This package needs to be uninstalled before installing java 2"
+msgstr "ëæÇ¿æØØæÇøæÒȺÔïæÒÝÔüÕÑ¥¡¢ÇÂÇøæÒ java 2"
+msgid "Removal of the package $2 failed, please remove it"
+msgstr "ÔïæÒÝÔüÕ $2 ÜÃØæÆÂÚõ¡¢îùÅÃÙ¯âÐÈç"
+msgid "manually and then install Sun Management Center."
+msgstr "ÜÃØæÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "You need to install the following packages $2"
+msgstr "ëæÓÑÇøæÒĶÇÄÎûÔïæÒÝÔüÕ $2"
+msgid "If you do not choose to install it now, the installation will abort."
+msgstr "ÇñΪÄâòÙðåÇ¡É»ÇøæÒ¡¢ÇøæÒá£Ê©ÙòäÄÄãöË¡¤"
+msgid "It seems some other version of java packages are present in $2"
+msgstr "Çã $2 ÄãÈýÅçÄØȴƶġÎêÆÛÎû java ÔïæÒÝÔüÕÇôÇ㡤"
+msgid "You need to install Solaris_JDK_1.2.1_04 version of the following packages"
+msgstr "ëæÇøæÒ Solaris_JDK_1.2.1_04 ÎêÎûĶÇÄÔïæÒÝÔüÕ"
+msgid "You can enter any directory to install the required version of JAVA."
+msgstr "Æ«òÓīǶÈôÆøòçÅèÇøæÒÍÔëæÎêÆÛÎû JAVA¡¤"
+msgid "No java packages to be removed."
+msgstr "ËäàÒëæÜÃØæÎû java ÔïæÒÝÔüÕ"
+msgid "Sun Management Center installation had overwritten your previous java installation."
+msgstr " Sun Management Center ÇøæÒá£È¢ÄØ̽ÅîǿЩÎû java ÇøæÒá£È¢¡¤"
+msgid "You can either keep the current installation or remove it."
+msgstr "Æ«ÏñÖçÆøЩÎûÇøæÒá£È¢ÍÐÙòÆÆÜÃØ桤"
+msgid "Warning - Could not find pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ $2 Îû pkgmap óòÕù"
+msgid "  Space calculations will be wrong."
+msgstr "  ϨâæÓÓê«äÄȴ먡¤"
+msgid "Java installation:"
+msgstr "Java ÇøæÒ¡¨"
+msgid "Space required \\\(in $2\\\):  $3 blocks."
+msgstr "ÍÔëæϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Space available \\\(in $2\\\): $3 blocks."
+msgstr "Æ«ÆîϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Insufficient disk space to install Java components"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒ Java ÜÚǵ"
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "The following packages required by Java 2 are not installed on"
+msgstr "ĶÇÄ Java 2 ÍÔëæÎûÔïæÒÝÔüÕÆÜÇøæÒÍõ"
+msgid "Packages: $2"
+msgstr "ÔïæÒÝÔüÕ¡¨$2"
+msgid "The required version of Java is already installed in $2"
+msgstr "ÍÔëæ Java ÎêÆÛÄØåîÇøæÒÍõ $2 Äã"
+msgid "It seems some of the required packages are already present."
+msgstr "ÍÔëæÔïæÒÝÔüÕÄãÈýÅçÄØÈ´ÝåÅ¡ÇôÇ㡤"
+msgid "You can either overwrite the existing java version or install the"
+msgstr "ÚÀÆ«åôßÐܢȴÎû java ÎêÆÛÍÐÑÒÙòÍÔëæÎû"
+msgid "required version in some other directory."
+msgstr "ÎêÆÛÇøæÒÇã̧ÆÆÎûÆøòçÄ㡤"
+msgid "Invalid directory"
+msgstr "àÒÕæÆøòç"
+msgid "Java packages couldnot be found in directory $2"
+msgstr "Æøòç $2 ÄãÊÆÄâ̯ Java ÔïæÒÝÔüÕ"
+msgid "Do you want to install it now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒ¡©"
+msgid "Do you want to overwrite the existing one?"
+msgstr "ÑÒÉÁ̽ÅîܢȴÎêÆÛ¡©"
+msgid "Do you want to remove it?"
+msgstr "ÑÒÉÁÓÑÙòÆÆÜÃØæ¡©"
+msgid "Do you want to uninstall it now"
+msgstr "ÑÒÉÁÓÑÇ¡É»æØØæÇøæÒ"
+msgid "Enter the base directory for JDK installation [$2]"
+msgstr "òÓÄ«ÆîÍõ JDK ÇøæÒÎûÙ×ÆÛÆøòç [$2]"
+#
+#============================
+# <WS>/packages/Setup/es-db
+#============================
+msgid "A minimum of 256 MB RAM is required to install Sun Management Center server."
+msgstr "ÈÝÅ·ëæÈ´ 256 MB Îû RAM Äß×äÇøæÒ Sun Management Center ÈùΤð¡¤"
+msgid "Current system has $2 MB RAM."
+msgstr "ÆøЩ˷ÜÓ̦ȴ $2 MB Îû RAM¡¤"
+msgid "Can not continue to install Sun Management Center server."
+msgstr "àÒÎÎú«úýÇøæÒ Sun Management Center ÈùΤð¡¤"
+msgid "                         Sun Management Center DB                     "
+msgstr "                         Sun Management Center DB                     "
+msgid "       Sun Management Center Database Installation "
+msgstr "       Sun Management Center æñÕèÕ»ÇøæÒ "
+msgid "Invalid parameters for installDB\\\(\\\)"
+msgstr " installDB\\\(\\\) ÎûÙ¶í°àÒÕæ"
+msgid "The following Sun Management Center database packages have already been installed on your system:"
+msgstr "ÚÀÎûË·ÜÓĸÄØåîÇøæÒħĶÇÄ Sun Management Center æñÕèÕ»ÔïæÒÝÔüÕ¡¨"
+msgid "Checking memory available..."
+msgstr "ÆßÇãóôÑçÆ«ÆîØ´ðÙüÕ..."
+msgid "Creating the mount points..."
+msgstr "ÆßÇãÐúÇ¡æÒç¥öµ..."
+msgid "Error installing SUNWesora.  Installation cannot continue."
+msgstr "ÇøæÒ SUNWesora àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Error installing SUNWestbl.  Installation cannot continue."
+msgstr "ÇøæÒ SUNWestbl àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Sun Management Center DB packages installed successfully"
+msgstr "Sun Management Center DB ÔïæÒÝÔüÕÇøæÒÈ©Åü"
+msgid "es-setup will perform the remainder of the config"
+msgstr "es-setup ÙòÙÚÈçØÙåôÎû̧ÅìÝåÅ¡"
+#
+#======================================
+# <WS>/packages/Setup/install-patch.sh
+#======================================
+msgid "No patch checking on this platform"
+msgstr "ȺÆÍƺĸÆÜâÐÈçìÁæÐá£È¢ÎûóôÑç"
+msgid "Could not find the patches in the following directory."
+msgstr "àÒÎÎÇãĶÓòÆøòçÄãÊÆ̯ìÁæÐá£È¢¡¤"
+msgid "Installing patch $2..."
+msgstr "ÆßÇãÇøæÒìÁæÐá£È¢ $2..."
+msgid "Installation of patch $2 failed."
+msgstr "ìÁæÐá£È¢ $2 ÇøæÒÆÂÚõ¡¤"
+msgid "Installation of patch $2 complete."
+msgstr "ìÁæÐá£È¢ $2 ÇøæÒÉùÈ©¡¤"
+msgid "Following patches are prerequisites to the java patches."
+msgstr "ÇøæÒ java ìÁæÐá£È¢Ð©¡¢ÆÒâüÇ¿ÇøæÒĶÇÄìÁæÐá£È¢¡¤"
+msgid "Please install them manually and then install Sun Management Center."
+msgstr "îùÅÃÙ¯âÐÈçÇøæÒÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Installation of following patches failed, please install"
+msgstr "ĶÇÄìÁæÐá£È¢ÎûÇøæÒÙÚÈçÆÂÚõ¡¢îùÅÃÙ¯"
+msgid "them manually and then install Sun Management Center."
+msgstr "ÇøæÒÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Checking for required OS patches, Please wait..."
+msgstr "ÆßÇãóôÑçÍÔëæ OS ìÁæÐá£È¢¡¢îùá¡Ô·..."
+msgid "Following is the list of required patches for java 2."
+msgstr "ÅèĶҳ java 2 ÍÔëæìÁæÐá£È¢ÎûÛÒÞÌ¡¤"
+msgid "If you do not choose to install them now installation will abort."
+msgstr "ÇñΪÄâòÙðåÇ¡É»ÇøæÒ¡¢ÇøæÒá£Ê©ÙòäÄÄãöË¡¤"
+msgid "Checking for required OS patches done."
+msgstr "ÄØÉùÈ©ÍÔëæ OS ìÁæÐá£È¢ÎûóôÑ硤"
+msgid "Invalid directory."
+msgstr "àÒÕæÆøò硤"
+msgid "Do you want to install now"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒ¡©"
+msgid "Please enter the directory that contains patches: "
+msgstr "îùòÓÄ«ÉÖÈ´ìÁæÐá£È¢ÎûÆøò硨 "
+#
+#=================================
+# <WS>/packages/Setup/es-restore
+#=================================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "The backup $2 does not exist"            
+msgstr "ެǹ $2 ÄâÇôÇã"            
+msgid "Checking installed Sun Management Center..."
+msgstr "ÆßÇãóôÑçÄØÇøæÒÎû Sun Management Center..."
+msgid "Recover the Sun Management Center Database and it will take a few minutes..."
+msgstr "ߦÔÏ Sun Management Center æñÕèÕ»¡¢ÙòÏÄĸÞýÅ¡úÌÎûÕëâæ..."
+msgid "Restore the Sun Management Center data."
+msgstr "ߦÔÏ Sun Management Center æñÕ衤"
+msgid "Shutdown Sun Management Center database, please wait."
+msgstr "ùÃÝð Sun Management Center æñÕèÕ»¡¢îùá¡Ô·¡¤"
+msgid "Recovery is fnished successfully. Please start Sun Management Center."
+msgstr "ÄØâûɳÉùȩߦÔÏ¡¤îùÚöÙ¯ Sun Management Center¡¤"
+msgid "The Sun Management Center server components are not found or"
+msgstr "ÊÆÄâ̯ Sun Management Center ÈùΤðÂÜÚģ́"
+msgid "its installation is damaged. You need to run"
+msgstr "ÇøæÒÄØäÚä´¡¤ÚÀëæÙÚÈç"
+msgid "es-inst/es-setup to install Sun Management Center and then "
+msgstr "es-inst/es-setup ÅèÇøæÒ Sun Management Center¡¢àÓÑ¥"
+msgid "start es-restore."
+msgstr "ÇÂÚöÙ¯ es-restore¡¤"
+msgid "Cannot restore $2"
+msgstr "àÒÎÎߦÔÏ $2"
+msgid "Cannot import database. Please check $2"
+msgstr "àÒÎÎã¾Ä«æñÕèÕ»¡¤îùóôÑç $2"
+msgid "The recovery need to shudown Sun Management Center servers."
+msgstr "ߦÔÏðçÉ¢ëæùÃÝð Sun Management Center ÈùΤð¡¤"
+msgid "Please get the backup of es-backup ready."
+msgstr "îùäíÞ¬Çï es-backup Îûެǹ¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the backup data directory:"
+msgstr "òÓīެǹæñÕèÆøòçÎûæûÕÀ¡¨"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_metadata.sh
+#==========================================
+msgid "$2 appears to be configured as your Sun Management Center server."
+msgstr "$2 Æ«×äÄØØÙåôÒ³ÚÀÎû Sun Management Center ÈùΤð¡¤"
+msgid "Error - Unable to set $2 values."
+msgstr "òãë¨ - àÒÎÎÝÃÌù $2 ÎûÔ«¡¤"
+msgid "agent.snmpPort already configured in $2"
+msgstr "Çã $2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "This part of the setup process does the Sun Management Center Agent Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "snmpd.conf already exists in $2.  Leaving it in place"
+msgstr "$2 ÄãÄØÇôÇã snmpd.conf¡¤Ùò̧ÖçÇãÔÏݨ"
+msgid "Copying snmpd.conf file into $2"
+msgstr "ÆßÇãÙò snmpd.conf óòÕùîïêû̯ $2"
+msgid "Server component also installed locally."
+msgstr "õäÇãÆÛê¦ÇøæÒħÈùΤðÂÜÚǵ¡¤"
+msgid "Using this machine as the Sun Management Center server."
+msgstr "ËðÆîÆÛçÙæªÉ¢Ò³ Sun Management Center ÈùΤð¡¤"
+msgid "Completing Sun Management Center Agent Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center metadata"
+msgstr "ËðÆîÇøÇÀê¡ÄÍ $2 É¢Ò³ Sun Management Center Ä÷æñÕè"
+msgid "Please enter the Sun Management Center Server Hostname: "
+msgstr "îùòÓÄ« Sun Management Center ÈùΤðÂÅäñ¢ÇØꢡ¨ "
+msgid "Is this correct?"
+msgstr "ÑÒÉÁÆßíý¡©"
+#
+#============================
+# <WS>/packages/Setup/es-lic
+#============================
+msgid "Topology server is currently running."
+msgstr "ÆøЩÆßÇãÙÚÈçÍßðôÈùΤð¡¤"
+msgid "It must be restarted for the license file update to take effect."
+msgstr "ÓÑËðÚæûâóòÕùÊÕä»ÆíÕæ¡¢ÆÒâüÓìä»ÚöÙ¯¡¤"
+msgid "Please stop and restart topology server using:"
+msgstr "îùØôÅÏËäÓìä»ÚöÙ¯ÍßðôÈùΤð¡¢ËðÆ"
+msgid "$2 -p\\\; $3 -p"
+msgstr "$2 -p\\\; $3 -p"
+msgid "Invalid License, Exiting..."
+msgstr "ÚæûâàÒÕæ¡¢á¸ÊÖÄã..."
+msgid "  Sun Management Center License Program\n"
+msgstr "  Sun Management Center Úæûâá£È¢\n"
+msgid "  Invalid parameters passed to es-lic script\n"
+msgstr "  ã®ØÊ̯ es-lic Script ÎûÙ¶í°àÒÕæ\n"
+msgid "Please enter license key: "
+msgstr "îùòÓÄ«Úæûâõ "
+#
+#===============================
+# <WS>/packages/Setup/es-dbimp
+#===============================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "The backup $2 does not exist"            
+msgstr "ެǹ $2 ÄâÇôÇã"            
+msgid "------------------- WARNING !!! ----------------"
+msgstr "------------------- úÀÉË¡ª¡ª¡ª ----------------"
+msgid "The process need Sun Management Center server components stopped."
+msgstr "ȺݨܡëæÇã Sun Management Center ÈùΤðÂÜÚǵØôÅÏÕëÙÚÈ硤"
+msgid "And import the backup data to Sun Management Center database."
+msgstr "ËäÙòެǹæñÕèã¾Ä« Sun Management Center æñÕèÕ»¡¤"
+msgid "As a result, all current data will be destroyed."
+msgstr "á¸ÎªÙòÝßÈ©ÍÔȴܢȴæñÕèïÎäÚ¡¤"
+msgid "Done"
+msgstr "ÉùÈ©"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+#
+#=======================================
+# <WS>/packages/Setup/sm_setup_agent.sh
+#=======================================
+msgid "$2 appears to be configured as your Sun Management Center server."
+msgstr "$2 Æ«×äÄØØÙåôÒ³ÚÀÎû Sun Management Center ÈùΤð¡¤"
+msgid "Error - Unable to set $2 values."
+msgstr "òãë¨ - àÒÎÎÝÃÌù $2 ÎûÔ«¡¤"
+msgid "agent.snmpPort already configured in $2"
+msgstr "Çã $2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "This part of the setup process does the Sun Management Center Agent Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "snmpd.conf already exists in $2.  Leaving it in place"
+msgstr "$2 ÄãÄØÇôÇã snmpd.conf¡¤Ùò̧ÖçÇãÔÏݨ"
+msgid "Copying snmpd.conf file into $2"
+msgstr "ÆßÇãÙò snmpd.conf óòÕùîïêû̯ $2"
+msgid "Server component also installed locally."
+msgstr "õäÇãÆÛê¦ÇøæÒħÈùΤðÂÜÚǵ¡¤"
+msgid "Using this machine as the Sun Management Center server."
+msgstr "ËðÆîÆÛçÙæªÉ¢Ò³ Sun Management Center ÈùΤð¡¤"
+msgid "Completing Sun Management Center Agent Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center agent"
+msgstr "ËðÆîÇøÇÀê¡ÄÍ $2 É¢Ò³ Sun Management Center ÅîÜ¡á£È¢"
+msgid "Please enter the Sun Management Center Server Hostname: "
+msgstr "îùòÓÄ« Sun Management Center ÈùΤðÂÅäñ¢ÇØꢡ¨ "
+msgid "Is this correct?"
+msgstr "ÑÒÉÁÆßíý¡©"
+#
+#================================
+# <WS>/packages/Setup/es-backup
+#================================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Can not create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Backup is successful."
+msgstr "ެǹȩÅü¡¤"
+msgid "Please save following files for the restore of Sun Management Center"
+msgstr "îùóÃÇôĶÇÄóòÕùÅèËòߦÔÏ Sun Management Center ÄæÆî"
+msgid "Starting Sun Management Center...."
+msgstr "ÆßÇãÚöÙ¯ Sun Management Center...."
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "Backup Sun Management Center data failed. Please check $2"
+msgstr "Sun Management Center æñÕèެǹÆÂÚõ¡¤îùóôÑç $2"
+msgid "The operation requires to shutdown Sun Management Center."
+msgstr "ȺðçÉ¢ëæùÃÝð Sun Management Center¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the directory to store the backup data file:"
+msgstr "òÓÄ«ÆøòçæûÕÀÅèóÃÇôެǹæñÕ表"
+#
+#=======================================
+# <WS>/packages/Setup/sm_setup_mib2.sh
+#=======================================
+msgid "Subagent sunmib_sea already set up - leaving it untouched"
+msgstr "ÄØÝÃÌùħÄÍÅîÜ¡á£È¢ sunmib_sea - Ùò̧ÏñѽÄâüÈ"
+msgid "Subagent registry file is: $2"
+msgstr "ÄÍÅîÜ¡á£È¢àôòçóòÕùÒ³¡¨$2"
+msgid "Unable to update subagent-registry-d.x"
+msgstr "àÒÎÎÊÕä» subagent-registry-d.x"
+msgid "Updated subagent-registry-d.x for mib2 subagent"
+msgstr "ÄØÒ³ mib2 ÄÍÅîÜ¡á£È¢ÊÕä»Ä§ subagent-registry-d.x"
+#
+#================================
+# <WS>/packages/Setup/es-uninst
+#================================
+msgid "Removing $2"
+msgstr "ÆßÇãÜÃØæ $2"
+msgid "Package Removal: Failed for $2"
+msgstr "ÔïæÒÝÔüÕÜÃØ桨$2 ÜÃØæÆÂÚõ"
+msgid "Reattempting to uninstall the package\\\(s\\\): $2"
+msgstr "ÆßÇãÓìæÜæØØæÇøæÒÔïæÒÝÔüÕ¡¨$2"
+msgid "Please remove the following packages manually.\n"
+msgstr "îùÅÃÙ¯ÜÃØæĶÇÄÔïæÒÝÔüÕ¡¤\n"
+msgid "Sun Management Center uninstall complete.\n"
+msgstr " Sun Management Center æØØæÇøæÒÉùÜ«¡¤\n"
+msgid "       Sun Management Center Uninstallation \n"
+msgstr "       Sun Management Center æØØæÇøæÒ \n"
+msgid "No Sun Management Center packages installed.\n"
+msgstr "ÆÜÇøæÒ Sun Management Center ÔïæÒÝÔüÕ¡¤\n"
+msgid "This utility removes all the Sun Management Center packages. \n"
+msgstr "ȺÄüÆîá£È¢ÙòÜÃØæÍÔÈ´Îû Sun Management Center ÔïæÒÝÔüÕ¡¤\n"
+msgid "Exiting uninstall utility.\n"
+msgstr "ÆßÇãá¸ÊÖæØØæÇøæÒÄüÆîá£È¢¡¤\n"
+msgid "Stopping all Sun Management Center processes.  This may take a few moments...\n"
+msgstr "ÆßÇãØôÅÏÍÔÈ´ Sun Management Center ݨܡ¡¤ÝÕÆ«×äëæÓÑÄ¡öµÕëâæ...\n"
+msgid "If you are upgrading Sun Management Center, you may want to save your existing data.\n"
+msgstr "ÇñΪÚÀÑÒÓÑŪ×È Sun Management Center¡¢Æ«×ääÄã÷óÃÇôܢȴÎûæñÕ衤\n"
+msgid "Will not remove the existing data\n"
+msgstr "ÙòÄâäÄÜÃØæܢȴÎûæñÕè\n"
+msgid "Will remove the existing data\n"
+msgstr "ÙòäÄÜÃØæܢȴÎûæñÕè\n"
+msgid "      Would you like to continue?"
+msgstr "      ÑÒÉÁÓÑú«úý¡©"
+msgid "Do you want to preserve your existing data"
+msgstr "ÑÒÉÁÓÑÏñÖçÚÀܢȴÎûæñÕè"
+msgid "Do you wish to continue with the removal of the existing data"
+msgstr "ÑÒÉÁÓÑú«úýâÐÈçܢȴæñÕèÎûÜÃØæ"
+#
+#==============================
+# <WS>/packages/Setup/es-dbexp
+#==============================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Can not create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "The operation requires some of Sun Management Center components to be shutdown."
+msgstr "ȺðçÉ¢ëæùÃÝðÄ¡Ëè Sun Management Center ÜÚǵ¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the directory to store the backup data file:"
+msgstr "òÓÄ«ÆøòçæûÕÀÅèóÃÇôެǹæñÕ表"
+msgid "Enter the path of the backup directory:"
+msgstr "òÓīެǹÆøòçÎûæûÕÀ¡¨"
+#
+#=================================
+# <WS>/packages/Setup/es-keys.sh
+#=================================
+msgid "Generating $2 security keys."
+msgstr "ÆßÇãܨÆí $2 ÇøÇÀõ"
+msgid "Error generating keys. Return code was $2."
+msgstr "ܨÆíÇøÇÀõïÕëàõÆíòã먡¤ã®ÇßÅîî£Ò³ $2¡¤"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_service.sh
+#==========================================
+msgid "This part of the setup process does the Sun Management Center Services Component setup."
+msgstr "ÝÕÝåÅ¡ÎûÝÃÌùݨܡÙòÉùÈ© Sun Management Center Τ٭ÜÚǵÎûÝÃÌù¡¤"
+msgid "Completing Sun Management Center Services Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center Τ٭ÜÚǵÎûÝÃÌù¡¤"
+#
+#===============================
+# <WS>/packages/Setup/es-start
+#===============================
+msgid "It seems component $2 has not been setup, so skipping it."
+msgstr "ÈýÅçÌþÆÜÝÃÌù $2¡¢ÇÞȺÙòÜ©ç´ÆÆ¡¤"
+msgid "Sun Management Center Web Server is not installed, Can not start web server\n"
+msgstr "ÆÜÇøæÒ Sun Management Center ê½æûÈùΤð¡¢àÒÎÎÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "Sun Management Center Web Server is not completely installed, Can not start web server\n"
+msgstr "ÆÜÉùðìÇøæÒ Sun Management Center ê½æûÈùΤð¡¢àÒÎÎÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "web server started\n"
+msgstr "ê½æûÈùΤðÂÚöÙ¯\n"
+msgid "Equivalent to %s -aefgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmprstxw"
+msgid "Equivalent to %s -efgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmprstxw "
+msgid "Usage: $PROGNAME -acefghilmpstwxrAS [-y instanceName] [ -- args... ]"
+msgstr "ÆîÎΡ¨$PROGNAME -acefghilmpstwxrAS [-y instanceName] [ -- args... ]"
+msgid "   where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "     a : starts Sun Management Center Agent\n"
+msgstr "  a¡¨ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢\n"
+msgid "     c : starts Sun Management Center Console\n"
+msgstr "  c¡¨ÚöÙ¯ Sun Management Center Console\n"
+msgid "         Optionally, maximum heap size could be customized,\n"
+msgstr "         ¡¾Ïæڰ̱¡¿Þ²ÄËÎûÙÔûèÄËÄÑÆ«Ò³ÈÜÓÔÔ«¡¢\n"
+msgid "         e.g., ./es-start -c -- -Xmx100m specifies 100 MBytes\n"
+msgstr "         ËóÇñ¡¢./es-start -c -- -Xmx100m ÑÀÌù 100 MB\n"
+msgid "         as max heap size; Default size is 64m.\n"
+msgstr "         Ò³Þ²ÄËÙÔûèÄËÄÑ¡§çßÝÃÄËÄÑÒ³ 64m¡¤\n"
+msgid "     e : starts Sun Management Center Event manager\n"
+msgstr "     e¡¨ÚöÙ¯ Sun Management Center Ëçǵê§Ü¡á£È¢\n"
+msgid "     f : starts Sun Management Center Configuration manager\n"
+msgstr "     f¡¨ÚöÙ¯ Sun Management Center ØÙåôê§Ü¡á£È¢\n"
+msgid "     g : starts Sun Management Center Grouping services\n"
+msgstr "     g¡¨ÚöÙ¯Sun Management Center åúÜÚΤ٭\n"
+msgid "     h : prints this usage report\n"
+msgstr "     h¡¨ÇÄÇÍȺÆîÎÎÞÞÉË\n"
+msgid "     i : start agent in interactive mode, valid only for one of\n"
+msgstr "     i¡¨ÅèÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÅîÜ¡á£È¢¡¢ã¯è×\n"
+msgid "           the a, t, f, p, and e options\n"
+msgstr "           a¡£t¡£f¡£p ÌÏ e òÙâúÄæÄ¡È´Õæ\n"
+msgid "     l : starts Platform Agent for SSP\n"
+msgstr "     l¡¨ÚöÙ¯ SSP ÎûÆÍƺÅîÜ¡á£È¢\n"
+msgid "     m : starts Sun Management Center Metadata Repository\n"
+msgstr "    m¡¨ÚöÙ¯ Sun Management Center Ä÷æñÕèóÃÇôÕ»\n"
+msgid "     q : start components in quiet mode, effective only for one of\n"
+msgstr "     q¡¨ÅèÏæÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÜÚǵ¡¢ã¯è×\n"
+msgid "       the A, a, t, f, p, and e options\n"
+msgstr "       A¡£a¡£t¡£f¡£p ÌÏ e òÙâúÄæÄ¡È´Õæ\n"
+msgid "     p : starts Sun Management Center Topology manager\n"
+msgstr "     p¡¨ÚöÙ¯ Sun Management Center Íßðôê§Ü¡á£È¢\n"
+msgid "     r : starts Hardware Diagnostic Suite Service\n"
+msgstr "     r¡¨ÚöÙ¯ Hardware Diagnostic Suite Τ٭\n"
+msgid "     s : starts Sun Management Center Server\n"
+msgstr "     s¡¨ÚöÙ¯ Sun Management Center ÈùΤðÂ\n"
+msgid "         Optionally, maximum heap size could be customized,\n"
+msgstr "         ¡¾Ïæڰ̱¡¿Þ²ÄËÎûÙÔûèÄËÄÑÆ«Ò³ÈÜÓÔÔ«¡¢\n"
+msgid "         e.g., ./es-start -s -- -Xmx100m specifies 100 MBytes\n"
+msgstr "         ËóÇñ¡¢./es-start -s -- -Xmx100m ÑÀÌù 100 MB\n"
+msgid "         as max heap size; Default size is 64m.\n"
+msgstr "         Ò³Þ²ÄËÙÔûèÄËÄÑ¡§çßÝÃÄËÄÑÒ³ 64m¡¤\n"
+msgid "     t : starts Sun Management Center Trap Handler\n"
+msgstr "     t¡¨ÚöÙ¯ Sun Management Center ÝøËáݨܡá£È¢\n"
+msgid "     x : starts CST Service\n"
+msgstr "     x¡¨ÚöÙ¯ CST Τ٭\n"
+msgid "     y : starts new instance of platform agent\n"
+msgstr "     y¡¨ÚöÙ¯ä»ÎûÆÍƺÅîÜ¡á£È¢èÒËó\n"
+msgid "     w : starts web server\n"
+msgstr "     w¡¨ÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "     A : starts All Sun Management Center components except the console,\n"
+msgstr "     A¡¨ÚöÙ¯ØæħÅäÚÕƺÅèÆÀÎûÍÔÈ´ Sun Management Center ÜÚǵ¡¢\n"
+msgid "     S : starts Sun Management Center Server and all the server subcomponents\n"
+msgstr "     S¡¨ÚöÙ¯ Sun Management Center ÈùΤðÂÌÏÍÔÈ´ÈùΤðÂÄÍÜÚǵ\n"
+msgid "     args are passed to console or server when started.\n"
+msgstr "     Å¿í°ÙòÇãÅäÚÕƺÍÐÈùΤðÂÚöÙ¯Õëã®ëÄá¿ÆÆÔ¯¡¤\n"
+msgid "           (for example: es-start -c -- -p 2099)\n\n"
+msgstr "     ¡¾ËóÇñ¡¨es-start -c -- -p 2099¡¿\n\n"
+msgid "ERROR: Sun Management Center has not been set up.\nRun es-setup to set up Sun Management Center."
+msgstr "òã먡¨ÌþÆÜÝÃÌù Sun Management Center¡¤\nîùÙÚÈç es-setup ÅèÝÃÌù Sun Management Center¡¤"
+msgid "Please specify a component to be started."
+msgstr "îùÑÀÌùÓÑÚöÙ¯ÎûÜÚǵ¡¤"
+msgid "Use the following single letter arguments instead:\n"
+msgstr "ÊÑÆîĶÇÄÞÌÄ¡ÇóÆàÅ¿í°¡¨\n"
+msgid "Console package not installed\n"
+msgstr "ÆÜÇøæÒÅäÚÕƺÔïæÒÝÔüÕ\n"
+msgid "Interactive option invalid with -A or -S option"
+msgstr "ÄëٯȢðçÉ¢òÙâúè×Íõ -A ÍÐ -S òÙâúàÒÕæ"
+msgid "Invalid command line option.  Please use just one option\n"
+msgstr "àÒÕæÎûÑÀÅïÈçòÙâú¡¤îùÆ·ÆîÄ¡Ô¶òÙâú\n"
+msgid "You have not specified any components to run.\n"
+msgstr "ÚÀÆÜÑÀÌùÓÑÙÚÈçÎûÜÚǵ¡¤\n"
+msgid "Only one component may be started in interactive mode\n"
+msgstr "ÇãÄëٯȢðçÉ¢í¼È¢Ä¶Æ·×äÚöٯġԶÜÚǵ\n"
+msgid "You cannot start console in interactive mode\n"
+msgstr "ÚÀÄâ×äÅèÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÅäÚÕƺ\n"
+msgid "DISPLAY environment variable must be set\n"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°\n"
+msgid "Interactive server session:\n"
+msgstr "ÄëٯȢðçÉ¢ÈùΤðÂâêÑôÉ¢äÆ¡¨\n"
+msgid "SUNWcstv or SUNWcstve package should be installed before start cstservice agent."
+msgstr "ÚöÙ¯ cstservice ÅîÜ¡á£È¢Ð©¡¢óÜæÚÇ¿ÇøæÒ SUNWcstv ÍÐ SUNWcstve ÔïæÒÝÔüÕ¡¤"
+msgid "Interactive option invalid with $OPT option"
+msgstr "ÄëٯȢðçÉ¢òÙâúè×Íõ $OPT òÙâúàÒÕæ"
+msgid "Unable to open DISPLAY: $DISPLAY"
+msgstr "àÒÎÎâäÚö DISPLAY: $DISPLAY"
+msgid "Equivalent to %s -aefgmpstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmpstxw"
+msgid "Equivalent to %s -efgmpstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmpstxw"
+msgid "$2 Component not installed"
+msgstr "ÆÜÇøæÒ $2 ÜÚǵ"
+msgid "Invalid option\\\($1\\\).  Options have changed to single letters:"
+msgstr "àÒÕæòÙâú \\\($1\\\)¡¤ÄØÙòòÙâúüÈÊÕÒ³ÞÌÄ¡ÇóÆࡨ"
+msgid "Starting all platform instances"
+msgstr "ÚöÙ¯ÍÔÈ´ÆÍƺèÒËó"
+msgid "Instances are $2"
+msgstr "èÒËóÒ³ $2"
+msgid "Starting platform instances $2"
+msgstr "ÚöÙ¯ÆÍƺèÒËó $2"
+msgid "ERROR: Could not start Hardware Diagnostic Suite Service."
+msgstr "òã먡¨àÒÎÎÚöÙ¯ Hardware Diagnostic Suite Τ٭¡¤"
+msgid "SUNWed package should be installed before start Hardware Diagnostic Suite Service."
+msgstr "SUNWed ÔïæÒÝÔüÕóÜÇãÚöÙ¯ Hardware Diagnostic Suite Τ٭ÄæЩÇøæÒ¡¤"
+msgid "Sun Management Center is not setup. Please setup first and then run es-start."
+msgstr "ÆÜÝÃÌù Sun Management Center¡¤îùÇ¿ÇøæÒ¡¢àÓÑ¥ÇÂÙÚÈç es-start¡¤"
+msgid "Sun Management Center $2 is not setup."
+msgstr "ÆÜÝÃÌù Sun Management Center $2¡¤"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_console.sh
+#==========================================
+msgid "This part of the setup process does the Sun Management Center Console Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅäÚÕƺÜÚǵÎûÝÃÌù¡¤"
+#
+#==============================
+# <WS>/packages/Setup/es-stop
+#==============================
+msgid "Please specify a component to be stopped."
+msgstr "îùÑÀÌùÓÑØôÅÏÎûÜÚǵ¡¤"
+msgid "Usage : $PROGNAME -aefghmprstxAS [-y instanceName]"
+msgstr "ÆîÎΡ¨$PROGNAME -aefghmprstxAS [-y instanceName]"
+msgid "     a : stops Sun Management Center Agent\n"
+msgstr "     a¡¨ØôÅÏ Sun Management Center ÅîÜ¡á£È¢\n"
+msgid "     e : stops Sun Management Center Event manager\n"
+msgstr "     e¡¨ØôÅÏ Sun Management Center Ëçǵê§Ü¡á£È¢\n"
+msgid "     f : stops Sun Management Center Configuration manager\n"
+msgstr "     f¡¨ØôÅÏ Sun Management Center ØÙåôê§Ü¡á£È¢\n"
+msgid "     g : stops Sun Management Center Services\n"
+msgstr "     g¡¨ØôÅÏ Sun Management Center Τ٭\n"
+msgid "     h : prints this usage report\n"
+msgstr "     h¡¨ÇÄÇÍȺÆîÎÎÞÞÉË\n"
+msgid "     l : stops Platform Agent for SSP\n"
+msgstr "     l¡¨ØôÅÏ SSP ÎûÆÍƺÅîÜ¡á£È¢\n"
+msgid "     m : stops Sun Management Center Metadata Agent\n"
+msgstr "     m¡¨ØôÅÏ Sun Management Center Ä÷æñÕèÅîÜ¡á£È¢\n"
+msgid "     p : stops Sun Management Center Topology manager\n"
+msgstr "     p¡¨ØôÅÏ Sun Management Center Íßðôê§Ü¡á£È¢\n"
+msgid "     r : stops Hardware Diagnostic Suite Service\n"
+msgstr "     r¡¨ØôÅÏ Hardware Diagnostic Suite Τ٭\n"
+msgid "     s : stops Sun Management Center Server\n"
+msgstr "     s¡¨ØôÅÏ Sun Management Center ÈùΤðÂ\n"
+msgid "     t : stops Sun Management Center Trap Handler\n"
+msgstr "     t¡¨ØôÅÏ Sun Management Center ÝøËáݨܡá£È¢\n"
+msgid "     x : stops CST Service\n"
+msgstr "     x¡¨ØôÅÏ CST Τ٭\n"
+msgid "     y : stops instance of platform agent\n"
+msgstr "     y¡¨ØôÅÏÆÍƺÅîÜ¡á£È¢èÒËó\n"
+msgid "     w : stops web server\n"
+msgstr "     w¡¨ØôÅÏê½æûÈùΤðÂ\n"
+msgid "     A : stops all Sun Management Center components listed above\n"
+msgstr "     A¡¨ØôÅÏĸÇÄÍÔÈ´ Sun Management Center Ä÷ǵ\n"
+msgid "equivalent to %s -aefgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmprstxw"
+msgid "     S : stops all Sun Management Center components listed above except Sun Management Center Agent\n"
+msgstr "     S¡¨ØôÅÏØæħ Sun Management Center ÅîÜ¡á£È¢ÅèÆÀÎûÍÔÈ´ Sun Management Center ÜÚǵ\n"
+msgid "equivalent to %s -efgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmprstxw"
+msgid "Use the following single letter arguments instead:\n"
+msgstr "ËðÆîĶÇÄÞÌÄ¡ÇóÆàÅ¿í°ËôßåÅ\n"
+msgid "Invalid option\\\($1\\\).  Options have changed to single letters:"
+msgstr "àÒÕæòÙâú \\\($1\\\)¡¤ÄØÙòòÙâúüÈÊÕÒ³ÞÌÄ¡ÇóÆࡨ"
+msgid "$1 Component not installed"
+msgstr "ÆÜÇøæÒ $1 ÜÚǵ"
+msgid "Stopping all platform instances"
+msgstr "ØôÅÏÍÔÈ´ÆÍƺèÒËó"
+msgid "$COMPONENT component is not running"
+msgstr "$COMPONENT ÜÚǵÆÜÙÚÈç"
+msgid "Stopping $COMPONENT component"
+msgstr "ÆßÇãØôÅÏ $COMPONENT ÜÚǵ"
+msgid "Error in stopping $COMPONENT component"
+msgstr "ØôÅÏ $COMPONENT ÜÚǵÕëàõÆíòãë¨"
+#
+#================================
+# <WS>/packages/Setup/es-crlcon
+#================================
+msgid "   Sun Management Center Light Console Creation Program\n"
+msgstr "   Sun Management Center ÏÏâêÅäÚÕƺÐúÇ¡á£È¢\n"
+msgid "This program creates a directory of minimun required console components.\n"
+msgstr "Ⱥá£È¢ÙòÐúÇ¡ëæÊå޲ŷÄæÅäÚÕƺÜÚǵÎûÆøò硤\n"
+msgid "User can copy this directory to any machine with supported configuration\n"
+msgstr "ËðÆîϯƫÙòȺÆøòçîïêû̯ǶÈô̦ȴ̿ÅÅßÎØÙåôÎûçÙæªÄ¸\n"
+msgid "to run Console."
+msgstr "ÅèÙÚÈçÅäÚÕƺ¡¤"
+msgid "Destination [/tmp]: "
+msgstr "Æøíº [/tmp]¡¨ "
+msgid "Please remove the directory $dirname before proceeding"
+msgstr "îùÇãú«úýâÐÈçЩÜÃØæÆøòç $dirname"
+msgid "or use a different directory.\n"
+msgstr "ÍÐËðÆîÄâÇÑÎûÆøò硤\n"
+msgid "Do you want the directory to be in zip format [y|n] [y]: "
+msgstr "ÑÒÉÁÓÑüéÆøòçÈ©Ò³ zip ֪Ȣ [y|n] [y]¡¨ "
+msgid "Please enter path to the executable - zip: "
+msgstr "îùòÓÄ«Æ«ÙÚÈç - zip ÎûæûÕÀ¡¨ "
+msgid "Cannot find zip in $zippath."
+msgstr "$zippath ÄãÊÆÄâ̯ zip¡¤"
+msgid "Source will be taken from [/opt/SUNWsymon]: "
+msgstr "ËôäãÙò̽ÈÜ [/opt/SUNWsymon]¡¨ "
+msgid "Directory ${dirname} is created."
+msgstr "Æøòç ${dirname} ÄØÐúÇ¡¡¤"
+msgid "Creating zip file ...\n"
+msgstr "ÆßÇãÐúÇ¡ zip óò ...\n"
+msgid "SUNWsymon.zip can be transferred to other systems, unzip,\n"
+msgstr "SUNWsymon.zip Æ«ã®ØÊÈÝ̧ÅìË·ÜÓ¡¢ËäæØóÌô㡤\n"
+msgid "Zip file is created in "
+msgstr "Zip óòÐúÇ¡Íõ "
+msgid "\nPlease note:\n\n    Light console can be invoked by running:\n\n"
+msgstr "\nîùÎÃãô¡¨\n\n    Æ«Ýàç´ÙÚÈçĶÇÄÑÀÅïÌËƵÏÏâêÅäÚÕƺ¡¨\n\n"
+#
+#================================
+# <WS>/packages/Setup/es-sfix.sh
+#================================
+msgid "usage:\n"
+msgstr "ÆîÎΡ¨\n"
+msgid "process all modules                : es-sfix.sh\n"
+msgstr "ݨܡÍÔÈ´í¼ÜÚ                ¡¨es-sfix.sh\n"
+msgid "flush db & process all modules     : es-sfix.sh [-c | -C]\n"
+msgstr "ÊÕä» db ËäݨܡÍÔÈ´í¼ÜÚ     ¡¨es-sfix.sh [-c | -C]\n"
+msgid "process only for specifiec module  : es-sfix.sh [-m | -M] [module name]\n"
+msgstr "ƷݨܡÖÖÌùí¼ÜÚ  ¡¨es-sfix.sh [-m | -M] [í¼ÜÚÇØê¢]\n"
+msgid "starting Sun Management Center database\n"
+msgstr "ÚöÙ¯ Sun Management Center æñÕèÕ»\n"
+msgid "database startup failed, exiting\n"
+msgstr "æñÕèÕ»ÚöÙ¯ÆÂÚõ¡¢á¸ÊÖÄã\n"
+msgid "database is up\n"
+msgstr "æñÕèÕ»ÄØƵÅø\n"
+msgid "executing suggested fix script\n"
+msgstr "ÙÚÈçÐúú¾ÎûԺߦ Script\n"
+msgid "execution successful\n"
+msgstr "ÙÚÈçÈ©Åü\n"
+msgid "error in execution\n"
+msgstr "ÙÚÈçàõÆíòãë¨\n"
+msgid "shutting down the database\n"
+msgstr "ùÃÝðæñÕèÕ»\n"
+msgid "db-stop failed\n"
+msgstr "db-stop ÙÚÈçÆÂÚõ\n"
+msgid "purge database and process\n"
+msgstr "ÛÒØææñÕèÕ»ÌÏݨܡ\n"
+msgid "process only for module\n"
+msgstr "ã¯ÆîÍõí¼ÜÚÎûݨܡ\n"
+msgid "incorrect usage\n"
+msgstr "ÆîÎÎÄâÆßíý\n"
+msgid "invalid arguments\n"
+msgstr "Å¿í°àÒÕæ\n"
+msgid "default processing\n"
+msgstr "çßÝÃÎûݨܡá£Ê©\n"
+msgid "could not set java home directory\n"
+msgstr "àÒÎÎÝÃÌù java ØÄÌîÆøòç\n"
+msgid "please see the suggested fix log file in "
+msgstr "îùÙ¶ÈÓÐúú¾ÎûԺߦÅÊë¢óò¡¢ÈíÍõ"
+#
+#=================================
+# <WS>/packages/Setup/es-details
+#=================================
+msgid "ERROR: "
+msgstr "òã먡¨ "
+msgid "  Specify the tabs for a given Node_Object_Type.  The -f and -u\n"
+msgstr "  Ò³ÖÖÌùÎû Node_Object_Type ÑÀÌùíºü¾¡¤-f êØ -u\n"
+msgid "  options are mutually exclusive.\n"
+msgstr "  òÙâúÄëÒÞÚêØ桤\n"
+msgid "  where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "    a                  : All tabs provided by Sun Management Center\n"
+msgstr "    a                  ¡¨Æñ Sun Management Center ßÈËòÎûÍÔÈ´íºü¾\n"
+msgid "                         will be included.\n"
+msgstr "                         ÙòäÄÅýÉÖÇãÄù¡¤\n"
+msgid "    f inputfile        : Input file which contains list of tabs to\n"
+msgstr "    f inputfile        ¡¨ÉÖíºü¾ÛÒÞÌÎûòÓÄ«óò¡¢ÝÕËèíºü¾\n" 
+msgid "                         be used for the specified Node_Object_Type.\n"
+msgstr "                         ÙòÆîÍõÑÀÌùÎû Node_Object_Type¡¤\n"
+msgid "    n Node_Object_Type : Corresponds to the Node_Object_Type\n"
+msgstr "    n Node_Object_Type¡¨è×óÜÍõÇã es-device Script Äã\n"
+msgid "                         entered in the es-device script.\n"
+msgstr "                         òÓÄ«Îû Node_Object_Type¡¤\n"
+msgid "    o                  : Overwrite previously created tab file.\n"
+msgstr "    o                  ¡¨÷»ìÑÄæЩÐúÇ¡Îûíºü¾óò¡¤\n"
+msgid "                         Only meaningful when used with the -f\n"
+msgstr "                         Æ·È´ØÙÇÙ -f ËðÆîÕëÄßÈ´ãôåø\n"
+msgid "                         option.\n"
+msgstr "                         òÙâú¡¤\n"
+msgid "    u                  : Undo.  Restores the Node_Object_Type\n"
+msgstr "    u                  ¡¨ß¦ÔÏ¡¤Ùò Node_Object_Type ߦÔÏ\n"
+msgid "                         to its original state.\n"
+msgstr "                         ҳ̧ÔÏÈ´ÎûÎíè衤\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "Usage: $2 [ -a ] [ -f inputfile ] -n Node_Object_Type [ -o ] [ -u ]\n"
+msgstr "ÆîÎΡ¨$2 [ -a ] [ -f inputfile ] -n Node_Object_Type [ -o ] [ -u ]\n"
+msgid "Input file $2 does not exist"
+msgstr "òÓÄ«óò $2 ÄâÇôÇã"
+msgid "The Node_Object_Type must be specified."
+msgstr "ÆÒâüÑÀÌù Node_Object_Type¡¤"
+msgid "Either option -f or -u must be specified."
+msgstr "ÆÒâüÑÀÌùòÙâú -f ÍÐ -u ÄæÄ¡¡¤"
+msgid "Options -f or -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -f ÍÐ -u¡¤"
+msgid "Options -o and -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -o êØ -u¡¤"
+msgid "Options -a and -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -a êØ -u¡¤"
+msgid "es-details has not yet been run with Node_Object_Type $2."
+msgstr "ÌþÆÜÅè Node_Object_Type $2 ÙÚÈç es-details¡¤"
+msgid "Tab name not specified for DEFAULT statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸ Ò³ DEFAULT ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "Only one tab can be defined as the DEFAULT."
+msgstr "Æ·×äÑÀÌùÄ¡Ô¶íºü¾É¢Ò³ DEFAULT¡¤"
+msgid "Tab name not specified for INCLUDE statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸҳ INCLUDE ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "$2 is not a valid Sun Management Center tab on line $3."
+msgstr "$2 ÄâÑÒÈç $3 ĸÎûÈ´Õæ Sun Management Center íºü¾¡¤"
+msgid "Tab name not specified for APPEND statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸҳ APPEND ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "Tab name $2 must be in format file:key on line $3."
+msgstr "Èç $3 ĸíºü¾ÇØê¢ $2 Îû֪ȢÆÒâüÒ³ file:key¡¤"
+msgid "Help key not specified for user-defined tab $2 on line $3."
+msgstr "ÆÜÇãÈç $3 ĸҳËðÆîϯÌùåøÎûíºü¾ $2 ÑÀÌùëºÉ·ë©Íüõ"
+msgid "Help Key $2 must be in format key:file on line $3."
+msgstr "Èç $3 ĸÎûëºÉ·ë©Íüõï $2 Îû֪ȢÆÒâüÒ³ key:file¡¤"
+msgid "Java class not specified for user-defined tab $2 on line $3."
+msgstr "ÆÜÇãÈç $3 ĸҳËðÆîϯÌùåøÎûíºü¾ $2 ÑÀÌù Java ùËɱ¡¤"
+msgid "Key $2 is not a valid key on line $3."
+msgstr "õï $2 ÄâÑÒÈç $3 ĸÎûÈ´Õæõ"
+msgid "Input file $2 contains no APPEND or INCLUDE statements"
+msgstr "òÓÄ«óò $2 ÄâÉÖ APPEND ÍÐ INCLUDE ë©Íü"
+msgid "$2 is not a valid Node_Object_Type."
+msgstr "$2 ÄâÑÒÈ´ÕæÎû Node_Object_Type¡¤"
+msgid "The specified default tab $2 was not found in the inputfile."
+msgstr "òÓÄ«óòÄãÊÆÄâ̯ÑÀÌùÎûçßÝÃíºü¾ $2¡¤"
+msgid "The tabs for this object have already been specified, use -o option to overwrite."
+msgstr "ÄØåîÑÀÌùÆîÍõȺÎìǵÎûíºü¾¡¢îùËðÆî -o òÙâúËô÷»ìÑ¡¤"
+msgid "Can only modify the family file for Sun Management Center agents."
+msgstr "Æ·×äÒ³ Sun Management Center ÅîÜ¡á£È¢ÔºÊÑÕ¥Úþóò¡¤"
+#
+#===========================
+# <WS>/packages/Setup/es-dt
+#===========================
+msgid "ERROR: "
+msgstr "òã먡¨ "
+msgid "  where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "    a          : Add a reference.\n"
+msgstr "    a          ¡¨ä»ìÁÙ¶äùæñÕ衤\n"
+msgid "    d          : Delete a reference.\n"
+msgstr "    d          ¡¨É´ØæÙ¶äùæñÕ衤\n"
+msgid "    v          : View references.  This is the default option.\n"
+msgstr "    v          ¡¨óôáþÙ¶äùæñÕ衤ȺҳçßÝÃòÙâú¡¤\n"
+msgid "    s          : Add/Delete/View on the Platform Agent.  By default the\n"
+msgstr "    s          ¡¨ÇãÆÍƺÅîÜ¡á£È¢Ä¸ä»ìÁ/É´Øæ/óôáþ¡¤ËíçßÝá¢\n"
+msgid "                 operation is performed on the Agent.\n"
+msgstr "                 ðçÉ¢äÄÇãÅîÜ¡á£È¢Ä¸ÙÚÈ硤\n"
+msgid "    h hostname : Agent hostname of machine running the Discovery Object Table.\n"
+msgstr "    h Åäñ¢ÇØꢡ¨ÙÚÈçÚØ×ÄÎìǵÏÐÄæçÙæªÎûÅîÜ¡Åäñ¢ÇØꢡ¤\n"
+msgid "    l label    : Unique label for the Composite Object to add or delete.\n"
+msgstr "    l íºü¾    ¡¨ÓÑä»ìÁÍÐÉ´ØæÎûÜÚÇÙÎìǵñÁÈ´íºü¾¡¤\n"
+msgid "    n not      : Node_Object_Type for the Composite Object to add.\n"
+msgstr "    n not      ¡¨ÓÑä»ìÁÎûÜÚÇÙÎìǵ Node_Object_Type¡¤\n"
+msgid "    o OID      : Discovery Object Table OID to add.\n"
+msgstr "    o OID      ¡¨ÓÑä»ìÁÎûÚØ×ÄÎìǵÏÐ OID¡¤\n"
+msgid "    p port     : Agent port of machine running the Discovery Object Table.\n"
+msgstr "    p port     ¡¨ÙÚÈçÚØ×ÄÎìǵÏÐÄæçÙæªÎûÅîÜ¡á£È¢ÙÕ¡¤\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "ESDIR must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR"
+msgid "Usage: $2 -a \\\| -d \\\| -v [ -s ] -h hostname -l label -n not -o OID -p port\n"
+msgstr "ÆîÎΡ¨$2 -a \\\| -d \\\| -v [ -s ] -h Åäñ¢ÇØê¢ -l íºü¾ -n not -o OID -p port\n"
+msgid "It cannot be loaded on both the Agent and Platform Agent."
+msgstr "Äâ×äÇÑÕëÇãÅîÜ¡á£È¢Å¯ÆÍƺÅîÜ¡á£È¢Äãç¥Ä«ÆÆ¡¤"
+msgid "The options -h, -l, -n, -o, and -p must all be used with the -a option."
+msgstr "òÙâú -h¡£-l¡£-n¡£-o ÌÏ -p ÇÀÝçÆÒâüä®ØÙ -a òÙâúËôËðÆ"
+msgid "An entry for $2 already exists."
+msgstr "ÆîÍõ $2 ÎûâúÆøÄØåîÇôÇ㡤"
+msgid "The option -l must be used with the -d option."
+msgstr "òÙâú -l ÆÒâüä®ØÙ -d òÙâúËðÆ"
+msgid "The options -h, -n, -o, and -p are not valid with the -d option."
+msgstr "òÙâú -h¡£-n¡£-o êØ -p Äâ×ää®ØÙ -d òÙâú¡¤"
+msgid "An entry for $2 does not exist."
+msgstr "ÆîÍõ $2 ÎûâúÆøÄâÇôÇ㡤"
+msgid "The options -h, -l, -n, -o, and -p are not valid with the -v option."
+msgstr "òÙâú -h¡£-l¡£-n¡£-o êØ -p Äâ×ää®ØÙ -v òÙâú¡¤"
+msgid "No entries."
+msgstr "ÊôÈ´âúÆø¡¤"
+msgid "The file $2 is not readable."
+msgstr "óòÕù $2 ÄâÆ«ûô̽¡¤"
+msgid "Discovery Service loaded on: Agent"
+msgstr "ÚØ×ÄΤ٭ÄØç¥Ä«¡¨Agent"
+msgid "Discovery Service loaded on: Platform Agent."
+msgstr "ÚØ×ÄΤ٭ÄØç¥Ä«¡¨ÆÍƺÅîÜ¡á£È¢¡¤"
+msgid "Entries:"
+msgstr "âúÆø¡¨"
+msgid "The discovery table is already loaded on the Agent."
+msgstr "ÚØ×ÄÏÐÄØåîÇãÅîÜ¡á£È¢Ä¸ç¥Ä«¡¤"
+msgid "The discovery table is already loaded on the Platform Agent."
+msgstr "ÚØ×ÄÏÐÄØåîÇãÆÍƺÅîÜ¡á£È¢Ä¸ç¥Ä«¡¤"
+#
+#=============================
+# <WS>/packages/Setup/es-apps
+#=============================
+msgid "This script reads the specified configuration file or\\n%s if not specified,\\nand installs the applications with the server."
+msgstr "Ⱥ Script ûô̽ÑÀÌùÎûØÙåôóòÕùÍÐÑÒ\\n%s¡¾ÇñΪËäÆÜÑÀÌù¡¿¡¢\\nËäÅèÈùΤðÂÇøæÒóÜÆîá£È¢¡¤"
+msgid "The configuration file contains one or more lines using the following format:\n"
+msgstr "ØÙåôóòÅýÉÖÄ¡ÍÐÇéÈçËðÆîÅèĶ֪ȢÎûÄùÕ©¡¨\n"
+msgid "where:\n"
+msgstr "̧Ä㡨\n"
+msgid "name\tis the name of the application that appears in the Application list\n"
+msgstr " name\tÑÒæÚóÜÆîá£È¢Çã¡ÖóÜÆîá£È¢¡×ÛÒÞÌÄãüÏÆüÎûÇØê¢"
+msgid "class\tis the name of the Java class for the application\n"
+msgstr " class\tÑÒæÚóÜÆîá£È¢Îû Java ùËɱ\n"
+msgid "args\tare optional user defined arguments to be passed to the application\n"
+msgstr "args\tÑÒÆîËôâÐÄ«æÚóÜÆîá£È¢ÎûËðÆîϯÌùåøÄæüÈí°¡¾Æ«òÙðåÎû¡¿\n"
+msgid "help\tis the optional help specification using the format key:helpfile or :url.\n"
+msgstr "help\tÑÒËðÆîkey:helpfile ÍÐ :url ֪ȢÎûëºÉ·ë©ÍüÄæë©Íü¡¾Æ«òÙðåÎû¡¿¡¤\n"
+msgid "There should be no quotes in the line.\n"
+msgstr "ÈçÄãÄâ×äÈ´Å¿æÀ¡¤\n"
+msgid "Lines beginning with # are considered as comments.\n"
+msgstr "Åè # âäó¤ÎûÄùÕ©ÙòÝ·áþÒ³â¡æØ¡¤"
+msgid "For example:\n"
+msgstr "ËóÇñ¡¨\n"
+msgid "Using %s"
+msgstr "ËðÆî %s"
+msgid "%s updated."
+msgstr "%s ÄØÊÕ仡¤"
+#
+#================================
+# <WS>/packages/Setup/db-export.sh
+#================================
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+#
+#==================================
+# <WS>/packages/Setup/db-import.sh
+#==================================
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+msgid "please ensure Topology & Event agents are not running..."
+msgstr "îùíýÌùÍßðôůËçǵÅîÜ¡á£È¢ËäÆÜÙÚÈç..."
+#
+#============================
+# <WS>/packages/Setup/es-run
+#============================
+msgid "Usage : $PROGNAME option1 [option2,...]"
+msgstr "ÆîÎΡ¨$PROGNAME òÙâú 1 [òÙâú 2,...]"
+msgid "   where option1 is a Sun Management Center utility\n   and option2,...  are the arguments for 'option1'\n\n   If option1 is '-help', then the usage is printed.\n\n"
+msgstr "   ̧Äã¡¢òÙâú 1 ÑÒ Sun Management Center ÄüÆîá£È¢\n    ÈÔòÙâú 2,... ÑÒ¡äòÙâú 1¡åÎûÅ¿í°\n\n   ÇñΪòÙâú 1 ÑÒ '-help'¡¢ÙòÇÄÇÍ̧ÆîÎΡ¤\n\n"
+#
+#==============================
+# <WS>/packages/Setup/es-chelp
+#===============================
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+msgid "There is an existing $PROGRAM lockfile, $LOCKFILE"
+msgstr "ÇôÇãÄ¡Ô¶ $PROGRAM ÷ÕÌùóòÕù¡¢$LOCKFILE"
+msgid "which indicates that process is executing the $PROGRAM"
+msgstr "ÆÆÏÐÆüݨܡÆßÇãÙÚÈç $PROGRAM"
+msgid "If this is not the case, delete the lock file,"
+msgstr "ÇñΪÄâÑÒÝÕê¡ÚÅÎÓ¡¢É´ØæȺ÷ÕÌùóòÕù¡¢"
+msgid "$LOCKFILE and execute $PROGRAM again."
+msgstr "$LOCKFILE ËäÇÂȹÙÚÈç $PROGRAM¡¤"
+msgid "$sdk_helpfile either does not exist or is not writable"
+msgstr "$sdk_helpfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+#
+#========================================
+# <WS>/src/db/build/build-recovery*.ksh
+#========================================
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Usage: $PROGNAME -au auid -ap apword -wu wuid -wp wpword -sp syspword -s osrvname -tsn tsname -tsp tsphyspath -tsis tssize -olfp olfpath [-cdb] [-vr]"
+msgstr "ÆîÎΡ¨$PROGNAME -au auid -ap apword -wu wuid -wp wpword -sp syspword -s osrvname -tsn tsname -tsp tsphyspath -tsis tssize -olfp olfpath [-cdb] [-vr]"
+msgid "   -au auid               :  userid used to admin smc tablespace"
+msgstr "   -au auid               ¡¨ÆîËôê§Ü¡ smc ÏÐ֪ϨâæÎû userid"
+msgid "   -ap apword             :  password for corresponding admin userid"
+msgstr "   -ap apword             ¡¨è×óÜê§Ü¡ userid ÎûÙïî£"
+msgid "   -wu wuid               :  working userid used by application"
+msgstr "   -wu wuid               ¡¨óÜÆîá£È¢ËðÆîÎûÄÖÉ¢ userid"
+msgid "   -wp wpword             :  working password for corresponding working userid"
+msgstr "   -wp wpword             ¡¨è×óÜÄÖÉ¢ userid ÎûÄÖÉ¢Ùïî£"
+msgid "   -sp syspword           :  password for system userid \\\(system\\\)"
+msgstr "   -sp syspword           ¡¨Ë·ÜÓ userid ÎûÙïî£ \\\(system\\\)"
+msgid "   -s osrvname            :  name of the oracle service used to connect to db"
+msgstr "   -s osrvname            ¡¨ÆîÍõÝÙÚÙ̯æñÕèÕ»Äæ oracle Τ٭ÎûÇØê¢"
+msgid "   -tsn tsname            :  name of the tablespace"
+msgstr "   -tsn tsname            ¡¨ÏÐ֪ϨâæÎûÇØê¢"
+msgid "   -tsp tsphyspath        :  physical location of tablespace"
+msgstr "   -tsp tsphyspath        ¡¨ÏÐ֪ϨâæÎûèÒüÕÈíåô"
+msgid "   -tsis tssize           :  initial size of tablespace \\\(in M bytes\\\)"
+msgstr "   -tsis tssize           ¡¨ÏÐ֪ϨâæÎûÞ²ÏÏÄËÄÑ \\\(Åè MB Ò³ÞÌÈí\\\)"
+msgid "   -olfp olfpath          :  physical location \\\(local\\\) to write the smc30.oracle file"
+msgstr "   -olfp olfpath          ¡¨ÆîËôìÑÄ« smc30.oracle óòÎûèÒüÕÈíåô\\\(ÆÛê¦\\\)"
+msgid "   -cdb                   :  indicates that any existing tablespace and user"
+msgstr "   -cdb                   ¡¨ÑÀÅøÍÔȴܢȴÎûÏÐ֪ϨâæůËðÆîϯ"
+msgid "                             matching the specified parameters above are"
+msgstr "                             ¡¾ÜÊÇÙĸÓòÑÀÌùÄæÙ¶í°Ï¯¡¿Ýç"
+msgid "                             dropped before proceeding. use is optional"
+msgstr "                             Çãú«úýâÐÈçЩ۹åô¡¤Æ«òÙðåÑÒÉÁËðÆî"
+msgid "   -vr                    :  this option is used to verify all objects"
+msgstr "   -vr                    ¡¨ÈºòÙâúÑÒÆîËôüÓøýÍÔÈ´ÎûÎìǵ"
+msgid "                             and to perform a recovery sequence if any"
+msgstr "                             ÅèůÙÚÈçߦÔÏÎûÑ¥úýٯɢ¡¾ÇñΪ"
+msgid "                             problems are detected"
+msgstr "                             ØþàÁ̯ǶÈôÙÂ÷î¡¿"
+msgid "   -ver                   :   option"
+msgstr "   -ver                   ¡¨òÙâú"
+msgid "   -lf logfile            :  logfile name"
+msgstr "   -lf logfile            ¡¨ÅÊë¢óòÇØê¢"
+msgid "ERROR: the ESDIR environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESDIR ô¿èºüÈí°"
+msgid "illegal option encoutered : $2"
+msgstr "ç²Ì¯ÄâÇÙë£ÎÎÎûòÙâú¡¨$2"
+msgid "this is a pc installation : $2"
+msgstr "Ⱥҳ pc ÇøæÒ¡¨$2"
+msgid "this is a sparc installation : $2"
+msgstr "Ⱥҳ sparc ÇøæÒ¡¨$2"
+msgid "unknown system type, exiting........................"
+msgstr "Ë·ÜÓùËÐÎÄâÍü¡¢á¸ÊÖÄã........................"
+msgid "can not find sqlplus on path, exiting........................."
+msgstr "æûÕÀĸÊÆÄâ̯ sqlplus¡¢á¸ÊÖÄã........................."
+msgid "the current directory is not writable "
+msgstr "ÆøЩÆøòçÄâÆ«ìÑÄ« "
+msgid "sqlplus writes an error log \\\(sqlnet.log\\\)"
+msgstr "sqlplus Ùòòãë¨ÅÊë¢ìÑÄ« \\\(sqlnet.log\\\)"
+msgid "to the current directory in the event of"
+msgstr "ÆøЩÎûÆøòçÄ㡾ÇãÝÙÚÙÙÂ÷î"
+msgid "a connection problem"
+msgstr "ÎûËçǵÄã¡¿"
+msgid "the /tmp directory does not exist"
+msgstr "/tmp ÆøòçÄâÇôÇã"
+msgid "however, a file named /tmp does exist"
+msgstr "Äâç´¡¢È´Ô¶ÇØÒ³ /tmp ÎûóòÕùÇôÇã"
+msgid "/tmp directory is not writable "
+msgstr "/tmp ÆøòçÄâÆ«ìÑÄ«"
+msgid "the \\\(-au auid\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-au auid\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-ap apword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-ap apword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-wu wuid\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-wu wuid\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-wp wpword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-wp wpword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-sp syspword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-sp syspword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-s osrvname\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-s osrvname\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsn tsname\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsn tsname\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsp tsphyspath\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsp tsphyspath\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsis tssize\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsis tssize\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-olfp olfpath\\\) command line parameter was invalid! "
+msgstr "\\\(-olfp olfpath\\\) ÑÀÅïÈçÙ¶í°àÒÕ桪 "
+msgid "exiting..................."
+msgstr "á¸ÊÖÄã..................."
+msgid "The Initial Tablespace Size given is not invalid"
+msgstr "ÑÀÌùÎûÞ²ÏÏÏÐ֪ϨâæÄËÄÑàÒÕæ"
+msgid "valid range is 1 to 500 M"
+msgstr "È´ÕæÎûî¯ÞØÒ³ 1 ̯ 500 M"
+msgid "Writing Applogin file : $2"
+msgstr "ìÑÄ« Applogin óò¡¨$2"
+msgid "file : $2, has a quit statement in it."
+msgstr "file : $2¡¢Ì§ÄãÈ´Ä¡Ô¶ØÍÅøë©Íü¡¤"
+msgid "file : $str3, has a quit statement in it."
+msgstr "file : $str3¡¢Ì§ÄãÈ´Ä¡Ô¶ØÍÅøë©Íü¡¤"
+msgid "need to remove quit statements, exiting........................"
+msgstr "ëæÓÑÜÃØæØÍÅøë©Íü¡¢á¸ÊÖÄã........................"
+msgid "source file: $2 for step: $3 is missing"
+msgstr "Ëôäãóò¡¨$2¡¾ÆîÍõÊãüõ¡¨$3¡¿òÜÆÂ"
+msgid "probably need to execute mkaggregatefiles.ksh"
+msgstr "Æ«×äëæÙÚÈç mkaggregatefiles.ksh"
+msgid "source file for one or more steps is missing, exiting........................"
+msgstr "ÆîÍõÄ¡ÍÐÇéÔ¶ÊãüõÎûËôäãóòòÜÆ¡¢á¸ÊÖÄã........................"
+msgid " removing existing logfile : /tmp/recovery.err"
+msgstr " ÜÃØæܢȴÎûÅÊë¢óò¡¨/tmp/recovery.err"
+msgid " removing existing logfile :  $2"
+msgstr " ÜÃØæܢȴÎûÅÊë¢óò¡¨  $2"
+msgid " removing existing temporary sql :  $2"
+msgstr " ÜÃØæܢȴÎûí²Õë sql¡¨  $2"
+msgid "Unable to successfully append $2 onto $3"
+msgstr "àÒÎÎÈ©ÅüÙòÇóÊ¢ $2 ÅûÇã $3"
+msgid "return code from cat : $2"
+msgstr "ËôÈÜ cat Îûã®Çß¨$2"
+msgid "$2 file not found"
+msgstr "ÊÆÄâ̯ $2 óò"
+msgid "Unable to successfully substitue in $2"
+msgstr "àÒÎÎÇã $2 ÄãÈ©Åü̽Åî"
+msgid "substitution string : $2"
+msgstr "̽ÅîÇóÈ롨$2"
+msgid "return code from sed : $2"
+msgstr "ËôÈÜ sed Îûã®Çß¨$2"
+msgid "Unable to successfully perform all sed based substitutions on $2 into $3"
+msgstr "àÒÎÎÈ©ÅüÙò $2 ĸÎûÍÔÈ´ sed ÐÎ̽ÅîðçÉ¢ÙÚÈç̯ $3 Äã"
+msgid "return code from grep : $2, meaning it found un-substituted strings"
+msgstr "ËôÈÜ grep Îûã®Çß¨$2¡¢ÅîÏÐÆÆÊÆ̯ÆÜ̽ÅîÎûÇóÈë"
+msgid "$2 file not found\\\(1\\\)"
+msgstr "ÊÆÄâ̯ $2 óò\\\(1\\\)"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "sqlerror code = $2"
+msgstr "sqlerror î£ = $2"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "unhandled error detected, only recourse is to stop processing"
+msgstr "ØþàÁ̯ÆÜݨܡÎûòã먡¢ÙÄÄ¡ÎûÅÉÈ¢ÑÒØôÅÏݨܡ"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "execution of $2 ok!!"
+msgstr "$2 ÎûÙÚÈçÆßÚ¦¡ª¡ª"
+msgid "step file $2 not found"
+msgstr "ÊÆÄâ̯Êãüõóò $2"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "skipping execution of $2"
+msgstr "æüç´ $2 ÎûÙÚÈç"
+msgid "$2 dependent step $3 did not execute"
+msgstr "ËíòÊÊãüõ $3 Îû $2 ÆÜÙÚÈç"
+msgid "$2 dependent step $3 failed execution"
+msgstr "ËíòÊÊãüõ $3 Îû $2 ÙÚÈçÆÂÚõ"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "while in recovery mode, attempts to find a successfully executed dependent of "
+msgstr "ÇãߦÔÏí¼È¢Ä¶Õë¡¢ÞòÊÆÄØÈ©ÅüÙÚÈçËíòÊÊãüõ $2 ÎûæÜè·"
+msgid "the $2 step was unsuccessfull.  premature exit!!"
+msgstr "ÄâÈ©Åü¡¤ßÈÈ®á¸ÊÖ¡ª¡ª"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "while in recovery mode, attempts to find a valid step to execute following "
+msgstr "ÇãߦÔÏí¼È¢Ä¶Õë¡¢ÞòÊÆÆ«ÙÚÈçĶÇÄÊãüõ $2 ÎûÈ´ÕæÊãüõ"
+msgid "the $2 step was unsuccessfull.  premature exit!!"
+msgstr "ÄâÈ©Åü¡¤ßÈÈ®á¸ÊÖ¡ª¡ª"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "too many attempts to execute the $2 step"
+msgstr "ÙÚÈç $2 ÊãüõÎûè©æÜÅ´Çé"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "please see the $2 file for listing details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÇÄÆüÎûæÛÜØæñع"
+#
+#========================================
+# <WS>/src/db/build/mkaggregatefiles.ksh
+#========================================
+msgid " removing existing verify inventory  : agg-verify-proc-inventory.sql"
+msgstr " ÜÃØæܢȴÎûüÓøýÕ»Çô¡¨agg-verify-proc-inventory.sql"
+msgid "-        Create agg-packages-topology.sql file              -"
+msgstr "-        ÐúÇ¡ agg-packages-topology.sql óò              -"
+msgid "-       Create agg-procedures-topology.sql file             -"
+msgstr "-       ÐúÇ¡ agg-procedures-topology.sql óò             -"
+msgid "-          Add to agg-createalltables.sql file              -"
+msgstr "-          ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-       Add to agg-verifyalltableattribs.sql file           -"
+msgstr "-       ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-          Add to agg-dataload-preseq.sql file              -"
+msgstr "-          ä»ìÁÈÝ agg-dataload-preseq.sql óò              -"
+msgid "-        Create agg-packages-eventmanager.sql file          -"
+msgstr "-        ÐúÇ¡ agg-packages-eventmanager.sql óò          -"
+msgid "-        Create agg-procedures-eventmanager.sql file        -"
+msgstr "-        ÐúÇ¡ agg-procedures-eventmanager.sql óò        -"
+msgid "-         Add to agg-createalltables.sql file               -"
+msgstr "-         ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-         Add to agg-verifyalltableattribs.sql file         -"
+msgstr "-         ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-       Create agg-packages-mgmtservice.sql file            -"
+msgstr "-       ÐúÇ¡ agg-packages-mgmtservice.sql óò            -"
+msgid "-       Create agg-procedures-mgmtservice.sql file          -"
+msgstr "-       ÐúÇ¡ agg-procedures-mgmtservice.sql óò          -"
+msgid "-           Add to agg-createalltables.sql file             -"
+msgstr "-         ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-         Add to agg-verifyalltableattribs.sql file         -"
+msgstr "-         ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-        Create agg-verify-proc-inventory.sql file          -"
+msgstr "-        ÐúÇ¡ agg-verify-proc-inventory.sql óò          -"
+#
+#==================================================
+# <WS>/src/oa/modules/configd4u/bin/es-setup.sh
+#==================================================
+msgid "Setup failed while adding module $2 into $3"
+msgstr "Ùòí¼ÜÚ $2 ä»ìÁÈÝ $3 ÕëÝÃÌùÙÚÈçÆÂÚõ"
+msgid "$2 does not exist"
+msgstr "$2 ÄâÇôÇã"
+msgid "Added module $2 to $3."
+msgstr "ÄØÙòí¼ÜÚ $2 ä»ìÁÈÝ $3¡¤"
+msgid "$2 is not readable, Could not add the module $3"
+msgstr "$2 ÄâÆ«ûô̽¡¢àÒÎÎä»ìÁÈÝí¼ÜÚ $3"
+msgid "Setup of sunfire config reader module failed."
+msgstr "sunfire ØÙåôûô̽ðÂí¼ÜÚÎûÝÃÌùÆÂÚõ¡¤"
+#
+#======================================
+# <WS>/src/oa/base/generic/bin/*.sh
+#======================================
+msgid "usage: $basename [-sh|-csh] [-internal|-external]"
+msgstr "ÆîÎΡ¨$basename [-sh|-csh] [-internal|-external]"
+msgid "ERROR: the ESROOT environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "usage: $PROGNAME -s \\\"<secret> [-p <public>]  [-u <user>[ ...]] [-h <host>] [-c <component>[ ...]]\\\""
+msgstr "ÆîÎΡ¨$PROGNAME -s \\\"<Ùïǵ> [-p <ÄüÆî>]  [-u <ËðÆîϯ>[ ...]][-h <Åäñ¢>] [-c <ÜÚǵ>[ ...]]\\\""
+msgid "       <secret> is the superuser password\n"
+msgstr "       <Ùïǵ> ÑÒâ¾×ÈËðÆîϯÎûÙïî£\n"
+msgid "       <public> is the public password (default=public)\n"
+msgstr "       <ÄüÆî> ÑÒÄüÆîÙï¾çßÝÃÔ«=public¡¿\n"
+msgid "       <user> is the list of initial seeded users\n"
+msgstr "       <ËðÆîϯ> ÑÒÏÏÌîÎûê¡ÄÍËðÆîϯÛÒÞÌ\n"
+msgid "       <host> is the fallback host name\n"
+msgstr "       <Åäñ¢> ÑÒØÍÇßÎûÅäñ¢ÇØê¢\n"
+msgid "       <component> is agent/cfgserver/event/cstservice/topology/trap/\n"
+msgstr "       <ÜÚǵ> ÑÒ agent/cfgserver/event/cstservice/topology/trap/\n"
+msgid "       Omit all <component>s to do them all\n"
+msgstr "       ÒÜÜ©ÍÔÈ´Îû <ÜÚǵ> ÅèòÙðåÇÀÝå\n"
+msgid "$PROGNAME: ESROOT must be set."
+msgstr "$PROGNAME: ÆÒâüÝÃÌù ESROOT¡¤"
+msgid "$PROGNAME: $1: unknown component"
+msgstr "$PROGNAME: $1: ÄâÍüÎûÜÚǵ"
+msgid "$PROGNAME: ERROR: blank secret not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙïǵ¡¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: ERROR: blank password not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙï¢á¸ÊÖÄã ..."
+msgid "PROGNAME: WARNING ... secret will be truncated to 8 characters"
+msgstr "PROGNAME: úÀÉË ... ÙïǵÙòôãàûÒ³ 8 Ô¶ÇóÄ÷"
+msgid "$PROGNAME: security.superuser name not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.superuser ÇØꢡ¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.generaluser name not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.generaluser ÇØꢡ¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$var"
+msgstr "$var"
+msgid "Interrupted..."
+msgstr "ÄØÄãöË..."
+msgid "$PROGNAME: security.userfile not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.userfile¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.authOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.authOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.privOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.privOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: ${COMP}.${COMP}Server not found - using $DEFHOST."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}Server - ËðÆî $DEFHOST¡¤"
+msgid "$PROGNAME: ${COMP}.${COMP}snmpPort not found - skipping $COMP."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}snmpPort - Ü©ç´ $COMP¡¤"
+msgid "ESROOT must be set\n"
+msgstr "ÆÒâüÝÃÌù ESROOT\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "OS $sys $rel is not supported"
+msgstr "ÄâÅÅßÎ OS $sys $rel"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "gettext 'Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "gettext 'É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+#
+#=================================================
+# <WS>/src/java/base/console/bin/es-console.sh
+#=================================================
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "DISPLAY environment variable must be set"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°"
+msgid "SYMON_JAVAHOME variable must be set"
+msgstr "ÆÒâüÝÃÌù SYMON_JAVAHOME üÈí°"
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+#
+#============================================
+# <WS>/src/java/base/server/bin/es-server*
+#============================================
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "No Processes Killed"
+msgstr "àÒïÎÉ´ØæÎûݨܡ"
+msgid "gettext 'More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "gettext 'ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID using kill -9 \\\($COMMAND\\\)"
+msgstr "ËðÆî kill -9 ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID with kill -9 \\\($COMMAND\\\)"
+msgstr "Åè kill -9 É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "ESDIR environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR ô¿èºüÈí°"
+msgid "SYMON_JAVAHOME variable must be set"
+msgstr "ÆÒâüÝÃÌù SYMON_JAVAHOME üÈí°"
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+#
+#====================================================
+# <WS>/src/java/com/sun/symon/base/cli/bin/es-cli
+#====================================================
+msgid "$SYMON_JAVAHOME/jre/bin/java must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$SYMON_JAVAHOME/jre/bin/java ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+
+#
+#  Strings from Halcyon scripts
+#
+msgid "usage: $basename [-sh|-csh] [-internal|-external]"
+msgstr "ÆîÎΡ¨$basename [-sh|-csh] [-internal|-external]"
+msgid "ERROR: the ESROOT environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "usage: $PROGNAME -s <secret> [-p <public>]  [-u <user>[ ...]] [-h <host>] [-c <component>[ ...]]"
+msgstr "ÆîÎΡ¨$PROGNAME -s <Ùïǵ> [-p <ÄüÆî>]  [-u <ËðÆîϯ>[ ...]][-h <Åäñ¢>] [-c <ÜÚǵ>[ ...]]"
+msgid "<secret> is the superuser password"
+msgstr "<Ùïǵ> ÑÒâ¾×ÈËðÆîϯÎûÙïî£"
+msgid "<public> is the public password (default=public)"
+msgstr "<ÄüÆî> ÑÒÄüÆîÙï¾çßÝÃÔ«=public¡¿"
+msgid "<user> is the list of initial seeded users"
+msgstr "<ËðÆîϯ> ÑÒÏÏÌîÎûê¡ÄÍËðÆîϯÛÒÞÌ"
+msgid "<host> is the fallback host name"
+msgstr "<Åäñ¢> ÑÒØÍÇßÎûÅäñ¢ÇØê¢"
+msgid "<component> is agent/cfgserver/event/topology/trap"
+msgstr "<ÜÚǵ> ÑÒ agent/cfgserver/event/topology/trap"
+msgid "Omit all <component>s to do them all"
+msgstr "ÒÜÜ©ÍÔÈ´Îû <ÜÚǵ> ÅèòÙðåÇÀÝå"
+msgid "$PROGNAME: ESROOT must be set."
+msgstr "$PROGNAME: ÆÒâüÝÃÌù ESROOT¡¤"
+msgid "$PROGNAME: $1: unknown component"
+msgstr "$PROGNAME: $1: ÄâÍüÎûÜÚǵ"
+msgid "$PROGNAME: ERROR: blank secret not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙïǵ¡¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: ERROR: blank password not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙï¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: WARNING ... secret will be truncated to 8 characters"
+msgstr "$PROGNAME: úÀÉË ... ÙïǵÙòôãàûÒ³ 8 Ô¶ÇóÄ÷"
+msgid "$PROGNAME: security.superuser name not found. Check domain-confg.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.superuser ÇØꢡ¤îùóôÑç domain-confg.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.generaluser name not found. Check domain-cofig.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.generaluser ÇØꢡ¤îùóôÑç domain-cofig.x ÍÐ user-config.x óòÕù"
+msgid "Copying $FILENAME to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò $FILENAME îïêû̯ $ESDIR/cfg..."
+msgid "Copying ${1}-${FILENAME} to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò ${1}-${FILENAME} îïêû̯ $ESDIR/cfg..."
+msgid "Copying ${COMP}-${FILENAME} to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò ${COMP}-${FILENAME} îïêû̯ $ESDIR/cfg..."
+msgid "$var"
+msgstr "$var"
+msgid "Interrupted..."
+msgstr "ÄØÄãöË..."
+msgid "$PROGNAME: security.userfile not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.userfile¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.authOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.authOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.privOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.privOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: ${COMP}.${COMP}Server not found - using $DEFHOST"
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}Server - ËðÆî $DEFHOST"
+msgid "$PROGNAME: ${COMP}.${COMP}snmpPort not found - skipping $COP."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}snmpPort - Ü©ç´ $COP¡¤"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "OS $sys $rel is not supported"
+msgstr "ÄâÅÅßÎ OS $sys $rel"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID with the force \\\($COMMAND\\\)"
+msgstr "Åèڰ̱ \\\($COMMAND\\\) ÜÜÅÏݨܡ ID $PID"
+msgid "DISPLAY environment variable must be set"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°"
+msgid "More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "No Processes Killed"
+msgstr "àÒïÎÉ´ØæÎûݨܡ"
+msgid "Terminating Process ID $PID using kill -9 \\\($COMMAND\\\)"
+msgstr "ËðÆî kill -9 ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID with kill -9 \\\($COMMAND\\\)"
+msgstr "Åè kill -9 É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "ESDIR environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR ô¿èºüÈí°"
+#
+# for es-tool - a SDK tool for integrating applications into console
+#
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+
+msgid "$sdk_toolfile either does not exist or is not writable"
+msgstr "$sdk_toolfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+
+msgid "There is an existing $PROGRAM lockfile, $LOCKFILE"
+msgstr "ÇôÇãÄ¡Ô¶ $PROGRAM ÷ÕÌùóòÕù¡¢$LOCKFILE"
+
+msgid "which indicates that process is executing the $PROGRAM"
+msgstr "ÆÆÏÐÆüݨܡÆßÇãÙÚÈç $PROGRAM"
+
+msgid "If this is not the case, delete the lock file,"
+msgstr "ÇñΪÄâÑÒÝÕê¡ÚÅÎÓ¡¢É´ØæȺ÷ÕÌùóòÕù¡¢"
+
+msgid "$LOCKFILE and execute $PROGRAM again."
+msgstr "$LOCKFILE ËäÇÂȹÙÚÈç $PROGRAM¡¤"
+
+msgid "$sdk_helpfile either does not exist or is not writable"
+msgstr "$sdk_helpfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+
+msgid "Using %s"
+msgstr "ËðÆî %s"
+
+msgid "%s updated."
+msgstr "%s ÄØÊÕ仡¤"
+
+msgid "This script reads the specified configuration file or\\n%s if not specified,\\nand installs the applications with the server."
+msgstr "Ⱥ Script ûô̽ÑÀÌùÎûØÙåôóòÕùÍÐÑÒ\\n%s¡¾ÇñΪËäÆÜÑÀÌù¡¿¡¢\\nËäÅèÈùΤðÂÇøæÒóÜÆîá£È¢¡¤"
+
+msgid "The configuration file contains one or more lines using the following format:\n"
+msgstr "ØÙåôóòÅýÉÖÄ¡ÍÐÇéÈçËðÆîÅèĶ֪ȢÎûÄùÕ©¡¨\n"
+
+msgid "where:\n"
+msgstr "̧Ä㡨\n"
+
+msgid "name\tis the name of the application that appears in the Application list\n"
+msgstr " name\tÑÒæÚóÜÆîá£È¢Çã¡ÖóÜÆîá£È¢¡×ÛÒÞÌÄãüÏÆüÎûÇØê¢"
+
+msgid "class\tis the name of the Java class for the application\n"
+msgstr " class\tÑÒæÚóÜÆîá£È¢Îû Java ùËɱ\n"
+
+msgid "args\tare optional user defined arguments to be passed to the application\n"
+msgstr "args\tÑÒÆîËôâÐÄ«æÚóÜÆîá£È¢ÎûËðÆîϯÌùåøÄæüÈí°¡¾Æ«òÙðåÎû¡¿\n"
+
+msgid "help\tis the optional help specification using the format key:helpfile or :url.\n"
+msgstr "help\tÑÒËðÆîkey:helpfile ÍÐ :url ֪ȢÎûëºÉ·ë©ÍüÄæë©Íü¡¾Æ«òÙðåÎû¡¿¡¤\n"
+
+msgid "There should be no quotes in the line.\n"
+msgstr "ÈçÄãÄâ×äÈ´Å¿æÀ¡¤\n"
+
+msgid "Lines beginning with # are considered as comments.\n"
+msgstr "Åè # âäó¤ÎûÄùÕ©ÙòÝ·áþÒ³â¡æØ¡¤"
+
+msgid "For example:\n"
+msgstr "ËóÇñ¡¨\n"
+
+#
+#====================================================
+# <WS>/packages/Setup/es-platform
+#====================================================
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "       Where the options represent:\n"
+msgstr "       ̧ÄãÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "  a : to add an instance of platform agent\n"
+msgstr "  a¡¨ä»ìÁÆÍƺÅîÜ¡á£È¢ÎûèÒËó\n"
+msgid "  d : to delete an instance of platform agent\n"
+msgstr "  d¡¨É´ØæÆÍƺÅîÜ¡á£È¢ÎûèÒËó\n"
+msgid "You can not specify both a and d option in the same command"
+msgstr "ÚÀÄâ×äÇãÇÑÄ¡Ô¶ÑÀÅïÄãÇÑÕëÑÀÌù a ů d òÙâú"
+msgid "You can not have spaces in the instance name."
+msgstr "èÒËóÇØê¢ÄãÄâ×äȴϨ֪¡¤"
+msgid "Port $2 is not a valid port number, try another number : "
+msgstr "ÝÙÚÙÙÕ $2 ÄâÑÒÈ´ÕæÎûÝÙÚÙÙÕæÀ¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by Sun Management Center agent, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñ Sun Management Center ÅîÜ¡á£È¢ËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by some instance, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñÑÜÔ¶èÒËóËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by some another process, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñƶġԶݨܡËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This instance is already present."
+msgstr "ȺèÒËóÄØåîÇôÇ㡤"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+
+# END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/nio/cs/tradChinese.win.po	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,4760 @@
+domain "ES_SCRIPTS"
+#
+#==============================
+# <WS>/packages/Setup/es-inst
+#==============================
+msgid "You need to be root before running this program.\n"
+msgstr "ÚÀÆÒâüÇãÙÚÈçÆÛá£È¢Ð©Ç¿È©Ò³ root¡¤\n"
+msgid "Can not remove the directory /tmp/SunMC30Install\n"
+msgstr "àÒÎÎÜÃØæÆøòç /tmp/SunMC30Install\n"
+msgid "Can not create the directory /tmp/SunMC30Install/sbin\n"
+msgstr "àÒÎÎÐúÇ¡Æøòç /tmp/SunMC30Install/sbin\n"
+msgid "Can not copy the required files to /tmp/SunMC30Install\n"
+msgstr "àÒÎÎÙòÍÔëæÎûóòÕùîïêû̯ /tmp/SunMC30Install\n"
+msgid "Can not open the display. Either X server is not allowing\n"
+msgstr "àÒÎÎâäÚöüÏÆüàëÓò¡¤ Either X server is not allowing\n"
+msgid "the connection or you are running it from console login.\n"
+msgstr "ÝÙÚÙÍÐϯÚÀÑÒÆñÅäÚÕƺàôÄ«ÙÚÈçÆÆ¡¤\n"
+msgid "Please read Sun Management Center installation Readme and\n"
+msgstr "îùïåûô Sun Management Center ÇøæÒ Readme Ëä\n"
+msgid "run installation as mentioned.\n"
+msgstr "ËíÍÔÓÝÙÚÈçÇøæÒ¡¤\n"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "  Space calculations will be wrong."
+msgstr "  ϨâæÓÓê«äÄȴ먡¤"
+msgid "Insufficient disk space to install the requested Sun Management Center components"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒÍÔîùÊåÎû Sun Management Center ÜÚǵ"
+msgid "  - Respecify the components to install so it takes less space"
+msgstr "  - Óìä»ÑÀÌùÓÑÇøæÒÎûÜÚǵ¡¢Ëð̧ëæÓÑç¤Å·ÎûϨâæ"
+msgid "  - Uninstall some existing packages to make room for Sun Management Center"
+msgstr "  - æØØæÇøæÒÄ¡ËèܢȴÎûÔïæÒÝÔüÕ¡¢ÅèúÖÅøϨâæá¿ Sun Management Center"
+msgid "  - Make a soft link for $2 that points to more space"
+msgstr "  - Ò³ $2 ܨÆíÄ¡Ô¶Ïæڰ̱ù¹á¸ÅèÑÀÇ×ÊÕÇéϨâæ"
+msgid "  - Ask your system administrator for help"
+msgstr "  - Ç×Ë·ÜÓê§Ü¡ÔÞÊåÉ·"
+msgid "Package $2 is already installed on this system."
+msgstr "Ⱥ˷ÜÓĸÄØÇøæÒħÔïæÒÝÔüÕ $2¡¤"
+msgid "Please verify the platform for package: $2"
+msgstr "îùüÓøýÔïæÒÝÔüÕÎûÆÍƺ¡¨$2"
+msgid "Found: $2"
+msgstr "ÄØÊÆ̯¡¨$2"
+msgid "Skipping package $2"
+msgstr "æüç´ÔïæÒÝÔüÕ $2"
+msgid "There appear to be some permission problems with the installation"
+msgstr "ÇãÇøæÒÆøòçĸƫ×äÈ´Ä¡ËèÝÂÆ«ûâ"
+msgid "directory: $2"
+msgstr "ÙÂ÷$2"
+msgid "In order to install Sun Management Center, root must be able to write to the"
+msgstr "ÓÑÇøæÒ Sun Management Center¡¢root ËðÆîϯÆÒâüè×ÇøæÒÆøòç̦ȴ"
+msgid "installation directory and own the files in that directory."
+msgstr "ìÑÄ«ÝÂÆ«ûâ¡¢ËäÅâðßÈ´æÚÆøòçĶÎûóòÕù¡¤"
+msgid "Please check your configuration and try again."
+msgstr "îùóôÑçÚÀÎûØÙåôËäÓìæÜ¡¤"
+msgid "Exiting Sun Management Center installation."
+msgstr "á¸ÊÖ Sun Management Center ÇøæÒá£Ê©¡¤"
+msgid "Error: Cannot find pack key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÔïæÒÝÔüÕÇøÇÀõï $2¡¤"
+msgid "There are $2 layers for your selection:"
+msgstr "ÚÀÎûòÙðåÈ´ $2 Ô¶ìÒȹ¡¨"
+msgid "No layers were selected for installation."
+msgstr "ÊôÈ´òÙ̽ÆîÍõÇøæÒÎûìÒȹ¡¤"
+msgid "No layers were found for installation."
+msgstr "ÊÆÄâ̯ÆîÍõÇøæÒÎûìÒȹ¡¤"
+msgid "No packs are defined in the installation configuration file."
+msgstr "ÇøæÒØÙåôóòÄãÆÜÌùåøÔïæÒÝÔüÕ¡¤"
+msgid "Please select the packs to install:"
+msgstr "îùòÙ̽ÓÑÇøæÒÎûÔïæÒÝÔüÕ¡¨"
+msgid "No packs were selected for installation."
+msgstr "ÆÜòÙ̽ÓÑÇøæÒÎûÔïæÒÝÔüÕ¡¤"
+msgid "Error: Cannot find component key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÜÚǵÇøÇÀõï $2¡¤"
+msgid "Error: Cannot find key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÇøÇÀõï $2¡¤"
+msgid "    Component $2 has already been installed."
+msgstr "    ÄØåîÇøæÒÜÚǵ $2¡¤"
+msgid "    The corresponding packages are: $2"
+msgstr "    è×óÜÎûÔïæÒÝÔüÕÒ³¡¨$2"
+msgid "  Invalid source directory."
+msgstr "  àÒÕæÎûËôäãÆøò硤"
+msgid "Source directory: $2"
+msgstr "ËôäãÆøò硨$2"
+msgid "Invalid parameter for productExists\\\(\\\): $2"
+msgstr " productExists ÎûÙ¶í°àÒÕæ\\\(\\\)¡¨$2"
+msgid "Production Environment Installation"
+msgstr "Æíܨô¿èºÇøæÒ"
+msgid "Developer Environment Installation"
+msgstr "âäàõÄ©ÔÞô¿èºÇøæÒ"
+msgid "Cannot find $2."
+msgstr "ÊÆÄâ̯ $2¡¤"
+msgid "Invalid License, please buy a valid license."
+msgstr "ÎêûâàÒÕæ¡¢îùõÕâ¹È´ÕæÎûÎêû⡤"
+msgid "  Invalid entry."
+msgstr "  àÒÕæÎûâúÆø¡¤"
+msgid "  Installation configuration files not found."
+msgstr "  ÊÆÄâ̯ÇøæÒØÙåôóò¡¤"
+msgid "You can install only agent components on Solaris 2.5.1"
+msgstr "ÚÀÆ«ÅèÆ·Çã Solaris 2.5.1 ĸÇøæÒÅîÜ¡á£È¢ÜÚǵ"
+msgid "Select one of the following:"
+msgstr "îùòÙ̽ĶÇÄÄæÄ¡¡¨"
+msgid "\\\(1\\\) Production Environment \\\(PE\\\)"
+msgstr "\\\(1\\\) Æíܨô¿èº \\\(PE\\\)"
+msgid "\\\(2\\\) Developer Environment \\\(DE\\\)"
+msgstr "\\\(2\\\) âäàõÄ©ÔÞô¿èº \\\(DE\\\)"
+msgid "Some components have already been installed in $2"
+msgstr "Çã $2 ÄãÄØåîÇøæÒħÝåÅ¡ÜÚǵ"
+msgid "The target directory will be set to $2"
+msgstr "ÆøíºÆøòçÙòäÄÝÃÌùÒ³ $2"
+msgid "Cannot create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Target directory: $2"
+msgstr "ÆøíºÆøò硨$2"
+msgid "Package $2 is already installed."
+msgstr "ÔïæÒÝÔüÕ $2 ÄØåîÇøæÒ¡¤"
+msgid "Package not found: $2"
+msgstr "ÊÆÄâ̯ÔïæÒÝÔüÕ¡¨$2"
+msgid "Error: Cannot find pack key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÔïæÒÝÔüÕÇøÇÀõï $2¡¤"
+msgid "Pack: $2"
+msgstr "ÔïæÒÝÔüÕ¡¨$2"
+msgid "  Please select the components to install:"
+msgstr "  îùòÙ̽ÓÑÇøæÒÎûÜÚǵ¡¨"
+msgid "    Component $2 is essential and will be automatically installed."
+msgstr "    $2 Ò³ÆÒÓÑÎûÜÚǵÅâÙòÈÜÙ¯ÇøæÒ¡¤"
+msgid "    Component $2 has already been installed."
+msgstr "    ÄØåîÇøæÒÜÚǵ $2¡¤"
+msgid "    The corresponding packages are: $2"
+msgstr "    è×óÜÎûÔïæÒÝÔüÕÒ³¡¨$2"
+msgid "    Component $2 is dependent on: $3"
+msgstr "    ÜÚǵ $2 ëæËíòÊ¡¨$3"
+msgid "    The component\\\(s\\\) will be automatically installed."
+msgstr "    ÜÚǵÙòäÄÈÜÙ¯ÇøæÒ¡¤"
+msgid "  Selected Components: $2"
+msgstr "  ÄØòÙ̽ÜÚǵ¡¨$2"
+msgid "  Selected Components: \\\<default\\\>"
+msgstr "  ÄØòÙ̽ÜÚǵ¡¨\\\<çßÝÃ\\\>"
+msgid "  Warning - Could not find pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ $2 Îû pkgmap óòÕù"
+msgid "Warning - Could not find the pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ÆîÍõ $2 Îû pkgmap óò"
+msgid "Warning - Could not find the pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ÆîÍõ $2 Îû pkgmap óò"
+msgid "Checking disk space..."
+msgstr "ÆßÇãóôÑçéöé÷Ϩâæ..."
+msgid "Insufficient disk space to install Sun Management Center Database Software"
+msgstr "ÊôÈ´ËÍÙÜÎûϨâæÆ«ÇøæÒ Sun Management Center æñÕèÕ»ÝÔüÕ"
+msgid "Sun Management Center DB application software requires: $2 Kbytes"
+msgstr "Sun Management Center DB óÜÆîá£È¢ÝÔüÕÍÔëæϨâ桨$2 KB"
+msgid "The installation directory \\\"$2\\\" has: $3 Kbytes"
+msgstr "ÇøæÒÆøòç \\\"$2\\\" ðßÈ´ÎûϨâ桨$3 KB"
+msgid "Please supply a directory."
+msgstr "îùßÈËòÆøò硤"
+msgid "Insufficient disk space to install Sun Management Center Database Dbfiles"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒ Sun Management Center æñÕèÕ»Îû Db óò"
+msgid "Sun Management Center DB application software requires: $2 Kbytes"
+msgstr "Sun Management Center DB óÜÆîá£È¢ÝÔüÕÍÔëæϨâ桨$2 KB"
+msgid "The installation directory \\\"$2\\\" has: $3 Kbytes"
+msgstr "ÇøæÒÆøòç \\\"$2\\\" ðßÈ´ÎûϨâ桨$3 KB"
+msgid "Please supply a directory."
+msgstr "îùßÈËòÆøò硤"
+msgid "Disk Space Requirements:"
+msgstr "éöé÷ϨâæëæÊ塨"
+msgid "Space required \\\(in $2\\\):  $3 blocks."
+msgstr "ÍÔëæϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Space available \\\(in $2\\\): $3 blocks."
+msgstr "Æ«ÆîϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Insufficient space available in $2"
+msgstr "$2 ÄãÎûÆ«ÆîϨâæÄâËÍ"
+msgid "Here are some possible fixes to alleviate the disk space problem:"
+msgstr "ÅèĶҳƫÆîËôæØÊîéöé÷ϨâæÙÂ÷îÎûÅÉÎΡ¨"
+msgid "\\\"$2\\\" resides on CD \\\#$3."
+msgstr "\\\"$2\\\" ÈíÍõ \\\#$3 ĸ¡¤"
+msgid "New source directory: $2"
+msgstr "ä»ÎûËôäãÆøò硨$2"
+msgid "Invalid directory."
+msgstr "àÒÕæÆøò硤"
+msgid "Installing the components..."
+msgstr "ÆßÇãÇøæÒÜÚǵ..."
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "The package $2 is already installed"
+msgstr "ÄØåîÇøæÒÔïæÒÝÔüÕ $2"
+msgid " Selection Summary"
+msgstr " òÙðåèòÓÑ"
+msgid "Looking for addon products on CD \\\#2..."
+msgstr "ÆßÇãÞòÊÆ CD \\\#2 ĸÎûÏáÅûܨÐÂ..."
+msgid "New source directory: $2"
+msgstr "ä»ÎûËôäãÆøò硨$2"
+msgid "                Sun Management Center 3.0 Addons Product Selection:                 "
+msgstr "                Sun Management Center 3.0 ÏáÅûܨÐÂòÙð塨                 "
+msgid "Installing the product: $2"
+msgstr "ÇøæÒܨС¨$2"
+msgid "Cannot find pkginfo file for package: $2"
+msgstr "ÊÆÄâ̯ÆîÍõÔïæÒÝÔüÕÎû pkginfo óò¡¨$2"
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "Supports: $2 - $3"
+msgstr "ÅÅßΡ¨$2 - $3"
+msgid "Supports: $2"
+msgstr "ÅÅßΡ¨$2"
+msgid "Name: $2"
+msgstr "ÇØꢡ¨$2"
+msgid "Description: $2"
+msgstr "ë©Íü¡¨$2"
+msgid "Unsupported OS version: $2"
+msgstr "ÄâÅÅßÎÎû OS ÎêÆÛ¡¨$2"
+msgid "No components to install."
+msgstr "ÊôÈ´ÓÑÇøæÒÎûÜÚǵ¡¤"
+msgid "A previous version of Sun Management Center exists."
+msgstr "È´÷®Îê Sun Management Center ÇôÇ㡤"
+msgid "Please uninstall it locally in \\\"$2\\\"."
+msgstr "îùÍõÆÛê¦ÙòÆÆæØØæÇøæÒ¡¾Çã \\\"$2\\\" Äã¡¿¡¤"
+msgid "Cannot find $2"
+msgstr "ÊÆÄâ̯ $2"
+msgid "Error copying the locale files to: $2"
+msgstr "îïêûÆÛÄÈë£ËÆóò̯ĶÇÄÈíåôÕëàõÆíòã먡¨$2"
+msgid "Setup script will use English."
+msgstr "ÝÃÌù script ÙòäÄËðÆîÓÁÅÆ¡¤"
+msgid "Please run setup locally in \\\"$2\\\"."
+msgstr "îùÍõÆÛê¦ÙÚÈçÝÃÌù¡¾Çã \\\"$2\\\" Äã¡¿¡¤"
+msgid "ESROOT is not set."
+msgstr "ÆÜÝÃÌù ESROOT¡¤"
+msgid "Invalid directory: $2"
+msgstr "àÒÕæÆøò硨$2"
+msgid "Invalid file: $2"
+msgstr "àÒÕæóòÕù¡¨$2"
+msgid "Both -S and -T options must be specified"
+msgstr "-S êØ -T Ì¥Ô¶òÙâúÝçÆÒâüÑÀÌù"
+msgid "This script will help you to install the Sun Management Center software."
+msgstr "ÆÛ script Ùò̶ɷÚÀÇøæÒ Sun Management Center ÝÔüÕ¡¤"
+msgid "Do you want to install this package now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒȺÔïæÒÝÔüÕ¡©"
+msgid "    Do you want to proceed?"
+msgstr "    ÑÒÉÁÓÑú«úý¡©"
+msgid "  Do you want to install components in layer: $2?"
+msgstr "  ÑÒÉÁÓÑÇãĶÇÄìÒȹÇøæÒÜÚǵ¡¨$2?"
+msgid "  Do you want to install $2?"
+msgstr "  ÑÒÉÁÓÑÇøæÒ $2¡©"
+msgid "Do you want to install the product: $2?"
+msgstr "ÑÒÉÁÓÑÇøæÒȺܨС¨$2?"
+msgid "Do you want to install this package now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒȺÔïæÒÝÔüÕ¡©"
+msgid "Would you like to uninstall it now?"
+msgstr "ÚÀÓÑÇ¡É»ÙòÆÆæØØæÇøæÒãá©"
+msgid "Would you like to save your old data?"
+msgstr "ÚÀÓÑóÃÇô÷®æñÕèãá©"
+msgid "Do you want to run setup now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÙÚÈçÇøæÒ¡©"
+msgid "Please enter the source directory:"
+msgstr "îùòÓÄ«ËôäãÆøò硨"
+msgid "Enter the development system license: "
+msgstr "îùòÓÄ«âäàõË·ÜÓÎêû⡨ "
+msgid "Enter your choice: [1\\\|2]"
+msgstr "îùòÓÄ«ÚÀÎûòÙð塨[1\\\|2]"
+msgid "Please enter the target directory [$2]:"
+msgstr "îùòÓÄ«ÆøíºÆøòç [$2]¡¨"
+msgid "Enter the directory to install the database: "
+msgstr "îùòÓÄ«ÓÑÇøæÒæñÕèÕ»ÎûÆøò硨 "
+msgid "Please insert the second CD or enter the source directory from disk 2 \\\[$2\\\]"
+msgstr "îùßÆÄ«ÜÉĨگ CD ÍÐòÓÄ«ËôÈÜéöé÷ 2 ÎûËôäãÆøòç \\\[$2\\\]"
+msgid "Please enter the new source directory:"
+msgstr "îùòÓÄ«ä»ÎûËôäãÆøò硨"
+msgid "Please enter the OS version for \\\"$2\\\" \\\[$3\\\]: "
+msgstr "îùòÓÄ«ÆîÍõ \\\"$2\\\" Îû OS ÎêÆÛ \\\[$3\\\]¡¨ "
+msgid "Please enter the platform for \\\"$2\\\" \\\[$3\\\]: "
+msgstr "îùòÓÄ«ÆîÍõ \\\"$2\\\" ÎûÆÍƺ \\\[$3\\\]¡¨ "
+msgid "Log file: $2"
+msgstr "ÅÊë¢óò¡¨$2"
+msgid "                         End of Installation                         "
+msgstr "                         ÇøæÒá¸ÊÖ                         "
+msgid "For installing Sun Management Center on $2, we need to know the"
+msgstr "ҳħÙò Sun Management Center ÇøæÒÇã $2 ĸ¡¢Ê¼Ô¯ëæÓÑÏ¡ç¬"
+msgid "operating system on $2. This should be the output of the command"
+msgstr "$2 ĸÎûÉ¢äÆË·ÜÓ¡¤ÆÆóÜæÚÑÒÑÀÅï"
+msgid "/usr/bin/uname -r. The command must be executed on a machine booted with"
+msgstr "/usr/bin/uname -r ÎûòÓÅøá¸Îª¡¤æÚÑÀÅïÆÒâüÇãÅè"
+msgid "disk mounted on $2"
+msgstr "æÒç¥Íõ $2 Îûéöé÷ÚöÙ¯ÎûçÙæªÄ¸ÙÚÈ硤"
+msgid "For installing Sun Management Center on $2, we need to know the"
+msgstr "ҳħÙò Sun Management Center ÇøæÒÇã $2 ĸ¡¢Ê¼Ô¯ëæÓÑÏ¡ç¬"
+msgid "machine type of machine whose root filesystem is or will be mounted on $2."
+msgstr "̧óòÕùË·ÜÓÄØåîÍÐÉ»ÙòæÒç¥Çã $2 ĸÄæçÙæªÎûùËÐΡ¤"
+msgid "This should be the output of the following command"
+msgstr "ÆÆóÜæÚÑÒĶÓòÑÀÅïÎûòÓÅøá¸Îª¡¨"
+msgid "    /usr/platform/PLATFORM/sbin/prtdiag \\\| /usr/bin/head -1 \\\| /usr/bin/cut -f2 -d:"
+msgstr "    /usr/platform/PLATFORM/sbin/prtdiag \\\| /usr/bin/head -1 \\\| /usr/bin/cut -f2 -d:"
+msgid "Please note that the above commands must be executed on the target machine."
+msgstr "îùÎÃãô¡¢Ä¸ÓÝÑÀÅïÆÒâüÇãÆøíºçÙæªÄ¸ÙÚÈ硤"
+msgid "Would you like to migrate your 2.x data?"
+msgstr "ÚÀÓÑÜÃ÷Ë 2.x ÎûæñÕèãá©"
+msgid "A previous version of Sun Management Center Data exists."
+msgstr "È´÷®Îê Sun Management Center ÎûæñÕèÇôÇ㡤"
+msgid "This will remove all files under $2. If you have any custom"
+msgstr "ÝÕÙòÜÃØæ $2 ĶÎûÍÔÈ´óòÕù¡¤ÇñΪÚÀÇãÝÕÔ¶ÆøòçĶȴ"
+msgid "scripts under this directory, please move them to an alternate location"
+msgstr "ǶÈôÈÜÓÔÎû scripts¡¢îùÇãú«úýâÐÈçЩÙòÆÆÔ¯"
+msgid "before proceeding."
+msgstr "ÜÃ̯ßåÅîÈíåô¡¤"
+msgid "Do you wish to continue with the removal of the existing 2.x data"
+msgstr "ÑÒÉÁÓÑú«úýâÐÈçܢȴ 2.x æñÕèÎûÜÃØæ"
+#
+#===============================
+# <WS>/packages/Setup/es-setup
+#===============================
+msgid "Setup of $2 component failed."
+msgstr "àÒÎÎÝÃÌù $2 ÜÚǵ¡¤"
+msgid "Exiting setup."
+msgstr "á¸ÊÖÝÃÌù¡¤"
+msgid "The Sun Management Center Setup File \\\($2\\\)$3"
+msgstr "Sun Management Center ÝÃÌùóò \\\($2\\\)$3"
+msgid "    is missing. Cannot Setup Sun Management Center $2."
+msgstr "    òÜÆ¡¤àÒÎÎÝÃÌù Sun Management Center $2¡¤"
+msgid "Initiating setup for Sun Management Center $2 Component."
+msgstr "ÏÏÌî Sun Management Center $2 ÜÚǵ ÎûÝÃÌù¡¤"
+msgid "Please read the release notes to configure the device type."
+msgstr "îùïåûôàõÈçë©ÍüÅèØÙåôæÒåôùËÐΡ¤"
+msgid "Using log file: $2."
+msgstr "ËðÆîÅÊë¢óò¡¨$2."
+msgid "   Sun Management Center Setup Program"
+msgstr "   Sun Management Center ÝÃÌùá£È¢"
+msgid "This program does setup of Sun Management Center components that are installed on your system."
+msgstr "Ⱥá£È¢ÙòÝÃÌùË·ÜÓĸÄØÇøæÒÎû Sun Management Center ÜÚǵ¡¤"
+msgid "Checking for Sun Management Center components installed on your system."
+msgstr "ÆßÇãóôÑçË·ÜÓĸÄØÇøæÒÔáËè Sun Management Center ÜÚǵ¡¤"
+msgid "You Do not have any Sun Management Center components installed."
+msgstr "ÚÀÆÜÇøæÒǶÈô Sun Management Center ÜÚǵ¡¤"
+msgid "You may want to run setup after installing"
+msgstr "ÇøæÒ Sun Management Center ÜÚǵÄæÑ¥¡¢Æ«×äÓÑ"
+msgid "    the Sun Management Center components."
+msgstr "    ÙÚÈçÝÃÌùá£È¢¡¤"
+msgid "You have the following Sun Management Center components installed"
+msgstr "ÚÀÄØÇøæÒħĶÇÄ Sun Management Center ÜÚǵ"
+msgid "             Sun Management Center Server"
+msgstr "             Sun Management Center ÈùΤðÂ"
+msgid "             Sun Management Center Agent"
+msgstr "             Sun Management Center ÅîÜ¡á£È¢"
+msgid "             Sun Management Center Console"
+msgstr "             Sun Management Center ÅäÚÕƺ"
+msgid "This script will perform the setup for each of these components"
+msgstr "ÆÛ Script ÙòÒ³ÝÕËèÜÚǵÙÚÈçÝÃÌùá£Ê©"
+msgid "Core Sun Management Center setup complete."
+msgstr "ÕøÅÀ Sun Management Center ÝÃÌùÉùÜ«¡¤"
+msgid "Setup of Sun Management Center addons incomplete. Exiting"
+msgstr " Sun Management Center ÏáÅûÔïæÒÝÔüÕÎûÝÃÌùÆÜÉùÈ©¡¤ Exiting"
+msgid "Sun Management Center setup complete."
+msgstr " Sun Management Center ÝÃÌùÉùÜ«¡¤"
+msgid "Problems occured with setup of the following addons: $2"
+msgstr "ÝÃÌùĶÇÄÏáÅûÔïæÒÝÔüÕÕëàõÆíÙÂ÷$2"
+msgid "Setup log stored in $2"
+msgstr "ÝÃÌùÅÊë¢óÃÇôÇã $2 Äã"
+msgid "A minimum of 256 MB RAM is required to run Sun Management Center."
+msgstr "ÈÝÅ·ëæÈ´ 256 MB Îû RAM Äß×äÙÚÈç Sun Management Center¡¤"
+msgid "Current system has $2 MB RAM."
+msgstr "ÆøЩ˷ÜÓ̦ȴ $2 MB Îû RAM¡¤"
+msgid "Can not continue to setup Sun Management Center DB."
+msgstr "àÒÎÎú«úýÝÃÌù Sun Management Center DB¡¤"
+msgid "Checking /etc/system file..."
+msgstr "ÆßÇãóôÑç /etc/system óò..."
+msgid "Checking memory available..."
+msgstr "ÆßÇãóôÑçÆ«ÆîØ´ðÙüÕ..."
+msgid "Checking /etc/system file error. It can not be updated."
+msgstr "ÆßÇãóôÑç /etc/system óòÎûòã먡¤ It can not be updated."
+msgid "The /etc/system file needs to be changed for Sun Management Center DB requirements."
+msgstr "ëæüÈÊÕ /etc/system óòÅèÜÊÇÙ Sun Management Center DB ÎûëæÊ塤"
+msgid "Backing up /etc/system to /etc/system.SunMCDB.backup"
+msgstr "ÆßÇãެǹ /etc/system to /etc/system.SunMCDB.backup"
+msgid "/etc/system file has not been changed."
+msgstr "ÌþÆÜüÈÊÕ /etc/system file óò¡¤"
+msgid "In order for kernel variable changes to take effect, this "
+msgstr "Ò³ËðÅäÓÑüÈí°ÎûüÈÊÕÆíÕæ¡¢ÆÒâüÓìä»ÚöÙ¯ÝÕÝå"
+msgid "machine must be rebooted.  You must reboot this machine now"
+msgstr "çÙ檡¤ÚÀÆÒâüÇ¡É»Óìä»ÚöÙ¯ÝÕÝåçÙæª"
+msgid "and then run the setup again."
+msgstr "àÓÑ¥ÇÂÙÚÈçÝÕÔ¶ÝÃÌùá£Ê©¡¤"
+msgid "Cannot create link $2 to directory $3"
+msgstr "àÒÎÎÐúÇ¡Ý×Í»Æøòç $3 Îûù¹á¸ $2"
+msgid "Sun Management Center DB setup cannot continue."
+msgstr "Sun Management Center DB ÝÃÌùá£Ê©àÒÎÎú«úý¡¤"
+msgid "Error changing ownership of $2 to root.  Installation cannot continue."
+msgstr "Ùò $2 ÎûÍÔÈ´ûâüÈÒ³úè root ÎûðçÉ¢àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Configuring Sun Management Center DB listener and service files..."
+msgstr "ÆßÇãØÙåô Sun Management Center DB ÚÙûïÅü×äêØΤ٭óò..."
+msgid "The default listener port $2 for Sun Management Center DB has already been used."
+msgstr "Sun Management Center DB ÎûçßÝÃÚÙûïÙÕ $2 ÄØÝ·ËðÆ"
+msgid "Please input another port number for Sun Management Center DB listener."
+msgstr "îùòÓīƶġԶÆîÍõ Sun Management Center DB ÚÙûïÅü×äÎûÙÕæÀ¡¤"
+msgid "Error in resetting the configuration files for Sun Management Center DB."
+msgstr "ÓìÝÃÆîÍõ Sun Management Center DB ÎûØÙåôóòÕëàõÆíòã먡¤"
+msgid "Linking database, Please wait"
+msgstr "ÆßÇãÝÙá¸æñÕèÕ»¡¢îùá¡Ô·"
+msgid "in the event of error, see /tmp/relink.log"
+msgstr "Çãòãë¨ÎûËçǵÄã¡¢îùÙ¶ÈÓ /tmp/relink.log"
+msgid "Create ora passord file"
+msgstr "ÐúÇ¡ ora Ùïî£óò"
+msgid "/usr/bin/make is needed on Sun Management Center server machine. The current"
+msgstr "Sun Management Center ÈùΤðÂçÙæªÄ¸ëæÓÑÈ´ /usr/bin/make¡¤ÆøЩ"
+msgid "failed to create internal user password file : $2"
+msgstr "àÒÎÎÐúÇ¡ÄùÝåËðÆîϯÙïî£óò¡¨$2"
+msgid "does not have it. Please make this file available and run setup again"
+msgstr "ÊôÈ´¡¤îùËðÝÕÔ¶óòÕùüÈҳƫÆî¡¢àÓÑ¥ÇÂÙÚÈçÝÃÌùá£Ê©"
+msgid "execution of make -f ins_net_server.mk install failed"
+msgstr "make -f ins_net_server.mk install ÎûÙÚÈçÆÂÚõ"
+msgid "see /tmp/make.log file for details"
+msgstr "îùÙ¶ÈÓ /tmp/make.log óòÄãÎûæÛÜØæñع"
+msgid "Database setup failed : $2 does not exist"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨$2 ÄâÇôÇã"
+msgid "Database setup failed : mkaggregatefiles.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨mkaggregatefiles.ksh ÙÚÈçÆÂÚõ"
+msgid "Database setup failed : db-start failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨db-start ÙÚÈçÆÂÚõ"
+msgid "Please wait, Sun Management Center database setup in progress. It may take 15 to 20 minutes"
+msgstr "îùá¡Ô·¡¢ÆßÇãâÐÈç Sun Management Center æñÕèÕ»ÝÃÌù¡¤Æ«×äëæÏÄĸ 15 ̯ 20 Å¡úÌ"
+msgid "Database setup failed : build-smc-oracle-recovery.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨build-smc-oracle-recovery.ksh ÙÚÈçÆÂÚõ"
+msgid "Please wait, Sun Management Center database setup in progress. It may take 15 to 20 minutes"
+msgstr "îùá¡Ô·¡¢ÆßÇãâÐÈç Sun Management Center æñÕèÕ»ÝÃÌù¡¤Æ«×äëæÏÄĸ 15 ̯ 20 Å¡úÌ"
+msgid "Database setup failed : build-smc-oracle-recovery.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨build-smc-oracle-recovery.ksh ÙÚÈçÆÂÚõ"
+msgid "Found symon 2.x import data"
+msgstr "ÊÆ̯ symon 2.x ã¾Ä«æñÕè"
+msgid "about to import symon 2.x data"
+msgstr "ÙòÓÑã¾Ä« symon 2.x æñÕè"
+msgid "cannot find the 2.x import script file $2"
+msgstr "ÊÆÄâ̯ 2.x ã¾Ä« Script óò $2"
+msgid "will not import symon 2.x data"
+msgstr "ÙòÄâã¾Ä« symon 2.x æñÕè"
+msgid "Database setup failed : db-stop failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨db-stop ÙÚÈçÆÂÚõ"
+msgid "A problem occured with $2 setup.  Do you want to continue?"
+msgstr "ÝÃÌù $2 ÕëÅøÜ¢ÙÂ÷ÑÒÉÁÓÑú«úý¡©"
+msgid "    Do you wish to update /etc/system file?"
+msgstr "    ÑÒÉÁÓÑÊÕä» /etc/system óò¡©"
+msgid "A problem occured with $2 setup.  Do you want to continue?"
+msgstr "ÝÃÌù $2 ÕëÅøÜ¢ÙÂ÷ÑÒÉÁÓÑú«úý¡©"
+msgid "    Do you wish to keep any existing topology and event data"
+msgstr "    ÑÒÉÁÓÑÏñÖçǶÈôÜ¢ÇôÎûÍßðôůËçǵæñÕè"
+msgid "    Do you want to perform a symon 2.x data import?"
+msgstr "    ÑÒÉÁÓÑÙÚÈç symon 2.x æñÕèÎûã¾Ä«¡©"
+msgid "Do you want to start Sun Management Center agent and server components now"
+msgstr "ÑÒÉÁÇ¡É»ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢êØÈùΤðÂÜÚǵ"
+msgid "Do you want to start Sun Management Center agent now"
+msgstr "ÑÒÉÁÇ¡É»ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢"
+msgid "Error: It seems the file $2 is not writable, could not update the file."
+msgstr "òã먡¨óòÕù $2 ÈýÅçÄâ×äìÑÄ«¡¢àÒÎÎÊÕä»óòÕù¡¤"
+msgid "Configuring the system for setup, please wait."
+msgstr "ÆßÇãØÙåôË·ÜÓÅèÏíÝÃÌù¡¢îùá¡Ô·¡¤"
+#
+#===============================
+# <WS>/packages/Setup/db-start
+#===============================
+msgid "Listener and Database are up and running\n"
+msgstr "ÚÙûïÅü×äêØæñÕèÕ»ÄØâûɳçªÉ¢\n"
+msgid "the current sid \n"
+msgstr "ÆøЩÎû sid \n"
+msgid "the current orahome \n"
+msgstr "ÆøЩÎû orahome \n"
+msgid "unknown system type, exiting......................\n"
+msgstr "Ë·ÜÓùËÐÎÄâÍü¡¢á¸ÊÖÄã......................\n"
+msgid "getHostName: failed to obtain current host from hostname command\n"
+msgstr "getHostName¡¨àÒÎÎÚ· hostname ÑÀÅï̽ڵÆøЩÎûÅäñ¢\n"
+msgid "current host : $2\n"
+msgstr "ÆøЩÎûÅäñ¢¡¨$2\n"
+msgid "getUserName: failed to obtain user name from id command\n"
+msgstr "getUserName¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîϯÇØê¢\n"
+msgid "current user name : $2\n"
+msgstr "ÆøЩÎûËðÆîϯÇØꢡ¨$2\n"
+msgid "getUserGroup: failed to obtain user group from id command\n"
+msgstr "getUserGroup¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîåúÜÚ\n"
+msgid "current user group : $2\n"
+msgstr "ÆøЩÎûËðÆîϯåúÜÚ¡¨$2\n"
+msgid "path_app : $2\n"
+msgstr "path_app :$2\n"
+msgid "found $2 on path in $3\n"
+msgstr "Çã $3 ÎûæûÕÀÄãÊÆ̯ $2\n"
+msgid "can not find $2 on path, exiting.......................\n"
+msgstr "æûÕÀĸÊÆÄâ̯ $2¡¢á¸ÊÖÄã.......................\n"
+msgid "verifyDatabaseUp: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseUp¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseUp: instance is executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseUp: instance is not executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseDown¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseDown: instance is executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: instance is not executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyListenerUp: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerUp¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerUp: listener $2 is execution\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerUp: listener $2 is not execution\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyListenerDown: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerDown¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerDown: listener $2 is execution\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerDown: listener $2 is not execution\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from df\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ· df ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from df\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ· df ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from mount comma\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ·æÒç¥ comma ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: filesystem $2 is not mounted setuid\n"
+msgstr "verifyFilesystemPerm¡¨óòÕùË·ÜÓ $2 ÆÜæÒç¥ setuid\n"
+msgid " must re-mount the filesystem with setuid enabled\n"
+msgstr " ÆÒâüÇã setuid ÚöÙ¯ÕëÓìä»æÒç¥óòÕùË·ÜÓ\n"
+msgid "verifyFilesystemPerm: filesystem $2 is mounted setuid, OK\n"
+msgstr "verifyFilesystemPerm¡¨óòÕùË·ÜÓ $2 ÆÜæÒç¥ setuid¡¢íýÌù\n"
+msgid "verifyListenerStatus: failed to obtain listener status for alias: $2\n"
+msgstr "verifyListenerStatus¡¨àÒÎÎÒ³ÅèĶɱÇØ̽ڵÚÙûïðÂÎíè表$2\n"
+msgid "verifyListenerStatus: listener status is good for alias: $2\n"
+msgstr "verifyListenerStatus¡¨ÆîÍõÅèĶɱÇØÄæÚÙûïðÂÎíèèËÀÇ$2\n"
+msgid "verifyListenerStatus: listener status is not good for alias: $2\n"
+msgstr "verifyListenerStatus¡¨ÆîÍõÅèĶɱÇØÄæÚÙûïðÂÎíèèÄâË$2\n"
+msgid "the specified path \\\($2\\\) does not exist\n"
+msgstr "ÑÀÌùæûÕÀ \\\($2\\\) ÄâÇôÇã\n"
+msgid "tmpdir \n"
+msgstr "tmpdir \n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain accessperms from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵÇô̽ûâÓ$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain username from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵËðÆîϯÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain groupname from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵåúÜÚÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: access perms for \\\($2\\\) is not at least 755\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÆîÍõ \\\($2\\\) ÎûÇô̽ûâÓîÄâÑÒ޲ŷ 755\n"
+msgid "verifyGoodOraclePermOwnership: access perms ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨Çô̽ûâÓîÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: owner \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûÍÔȴϯ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: owner ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÍÔȴϯÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: group \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûåúÜÚ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: group ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨åúÜÚÆßÚ¦\n"
+msgid "**** directory : $2 does not exist\n"
+msgstr "**** Æøò硨$2 ÄâÇôÇã\n"
+msgid "loop: current new $2\n"
+msgstr "ØÏæû¡¨ÆøЩä»Îû $2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain accessperms from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵÇô̽ûâÓ$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain username from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵËðÆîϯÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain groupname from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵåúÜÚÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: access perms for \\\($2\\\) is not at least 755\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÆîÍõ \\\($2\\\) ÎûÇô̽ûâÓîÄâÑÒ޲ŷ 755\n"
+msgid "verifyGoodOraclePermOwnership: access perms ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨Çô̽ûâÓîÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: owner \\\($listuser\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûÍÔȴϯ \\\($listuser\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: owner ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÍÔȴϯÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: group \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûåúÜÚ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: group ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨åúÜÚÆßÚ¦\n"
+msgid "**** file : $2 does not exist\n"
+msgstr "**** óò¡¨$2 ÄâÇôÇã\n"
+msgid "verifySharedMemUsage: failed to obtain ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨àÒÎÎ̽ڵ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifySharedMemUsage: found ipcs \\\(shared memory segment\\\) info user : $2, group : $3, \\\(shid\\\) : $4\n"
+msgstr "verifySharedMemUsage¡¨ÊÆ̯ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3, \\\(shid\\\)¡§$4\n"
+msgid "verifySharedMemUsage: did find ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨íýèÒÊÆ̯ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifySharedMemUsage: did not find any ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨ÊÆÄâ̯ǶÈô ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifyActiveSemaphoresUsage: failed to obtain ipcs \\\(active semaphores\\\) info user : $2, group : $3\n"
+msgstr "verifyActiveSemaphoresUsage¡¨àÒÎÎ̽ڵ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifyActiveSemaphoresUsage: found ipcs \\\(active semaphores\\\) info user : $2, group : $3, \\\(semid\\\) : $4\n"
+msgstr "verifyActiveSemaphoresUsage¡¨ÊÆ̯ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3, \\\(semid\\\)¡§$4\n"
+msgid "verifyActiveSemaphoresUsage: did find ipcs \\\(active semaphores\\\) info user : $2, group : \n"
+msgstr "verifyActiveSemaphoresUsage¡¨íýèÒÊÆ̯ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨\n"
+msgid "verifyActiveSemaphoresUsage: did not find any ipcs \\\(active semaphores\\\) info user : $2, group : $3\n"
+msgstr "verifyActiveSemaphoresUsage¡¨ÊÆÄâ̯ǶÈô ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "startListener: failed to start listener, alias: $2\n"
+msgstr "startListener¡¨àÒÎÎÚöÙ¯ÚÙûïð¡¢É±ÇØ¡¨$2\n"
+msgid "startListener: listener started, alias: $2\n"
+msgstr "startListener¡¨ÚÙûïðÂÄØÚöÙ¯¡¢É±ÇØ¡¨$2\n"
+msgid "stopListener: failed to stop listener, alias: $2\n"
+msgstr "stopListener¡¨àÒÎÎØôÅÏÚÙûïð¡¢É±ÇØ¡¨$2\n"
+msgid "stopListener: listener stopped, alias: $2\n"
+msgstr "stopListener¡¨ÚÙûïðÂÄØØôÅÏ¡¢É±ÇØ¡¨$2\n"
+msgid "removing existing listener log file $2"
+msgstr "ÜÃØæܢȴÚÙûïðÂÅÊë¢óò $2"
+msgid "execution of verifySetuidFilesystemPerm $2 fail\n"
+msgstr "verifySetuidFilesystemPerm $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "exiting........................\n"
+msgstr "á¸ÊÖÄã........................\n"
+msgid "execution of $2 start $3 fail\n"
+msgstr "$2 ÚöÙ¯ $3 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of verifyListenerUp $2 fail\n"
+msgstr "verifyListenerUp $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of verifyGoodListenerStatus $2 fail\n"
+msgstr " verifyGoodListenerStatus $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of sqlplus using @$2 fail\n"
+msgstr "ɳÆî @$2 ÙÚÈç sqlplus ÆÂÚõ\n"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "execution of verifyDatabaseUp $2 fail\n"
+msgstr "verifyDatabaseUp $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "Listener and Database are up and running\n"
+msgstr "ÚÙûïÅü×äêØæñÕèÕ»ÄØâûɳçªÉ¢\n"
+#
+#================================
+# <WS>/packages/Setup/es-device
+#================================
+msgid "Usage: $2 -ad Filename"
+msgstr "ÆîÎΡ¨$2 -ad óòÕùÇØê¢"
+msgid "   where the options represent:"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨"
+msgid "     a : Add new device"
+msgstr "     a¡¨ä»ìÁä»æÒåô"
+msgid "     d : Delete device"
+msgstr "     d¡¨É´ØææÒåô"
+msgid "This action is limited to superuser only."
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤"
+msgid "Exiting $2."
+msgstr "ÆßÇãá¸ÊÖ $2¡¤"
+msgid "create_node_family_file: Error! Invalid node object type $2"
+msgstr "create_node_family_file¡¨òã먡ªåçöµÎìǵùËÐÎ $2 àÒÕæ"
+msgid "set_global_variable: Value not specified for $2"
+msgstr "set_global_variable¡¨ÆÜÑÀÌùÆîÍõ $2 ÎûÔ«"
+msgid "set_global_variable: Invalid parameter $2"
+msgstr "set_global_variable¡¨Ù¶í°àÒÕæ $2"
+msgid "delete_node: Invalid data in input file"
+msgstr "delete_node¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_node: $2 does not exist, verify input"
+msgstr "delete_node¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_group: Invalid data in input file"
+msgstr "delete_group¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_group: $2 does not exist, verify input"
+msgstr "delete_group¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_group: Invalid group type $2"
+msgstr "delete_group¡¨åúÜÚùËÐÎ $2 àÒÕæ"
+msgid "delete_segment: Invalid data in input file"
+msgstr "delete_segment¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_segment: $2 does not exist, verify input"
+msgstr "delete_segment¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_segment: Invalid segment type $2"
+msgstr "delete_segment¡¨Ù´ÑôùËÐÎ $2 àÒÕæ"
+msgid "delete_composite: Invalid data in input file"
+msgstr "delete_composite¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_composite: $2 does not exist, verify input"
+msgstr "delete_composite¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "validate_node_object_type: $2 or $3 exists"
+msgstr "validate_node_object_type¡¨$2 ÍÐ $3 ÇôÇã"
+msgid "validate_i18n_key: Node object type exists in $2 line $3"
+msgstr "validate_i18n_key¡¨åçöµÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_i18n_key: Invalid i18n key: $2"
+msgstr "validate_i18n_key¡¨i18n õïàÒÕ桨$2"
+msgid "validate_group_i18n_type: $2 is invalid group type"
+msgstr "validate_group_i18n_type¡¨$2 ÑÒàÒÕæÎûåúÜÚùËÐÎ"
+msgid "validate_group_i18n_key: Group object type exists in $2 line $3"
+msgstr "validate_group_i18n_key¡¨åúÜÚÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_segment_i18n_type: $2 is invalid segment type"
+msgstr "validate_segment_i18n_type¡¨$2 ÑÒàÒÕæÎûÙ´ÑôùËÐÎ"
+msgid "validate_segment_i18n_key: Segment object type exists in $2 line $3"
+msgstr "validate_segment_i18n_key¡¨Ù´ÑôÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_composite_i18n_key: Composite object type exists in $2 line $3"
+msgstr "validate_composite_i18n_key¡¨ÜÚÇÙÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_properties_file: Invalid property file name. Must be $2"
+msgstr "validate_properties_file¡¨úèÍÌóòÇØê¢àÒÕ桤ÆÒâüÑÒ $2"
+msgid "validate_search_parameter: Invalid sysoid value $2"
+msgstr "validate_search_parameter¡¨sysoid Ô« $2 àÒÕæ"
+msgid "validate_icon_file: Check if file exists and permissions"
+msgstr "validate_icon_file¡¨óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "validate_hardware_module: Hardware Module name does not exist"
+msgstr "validate_hardware_module¡¨àýüÕí¼ÜÚÇØê¢ÄâÇôÇã"
+msgid "validate_group_object_type: Invalid object type $2"
+msgstr "validate_group_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_group_object_type: Group object type exists in $2 line $3"
+msgstr "validate_group_object_type¡¨åúÜÚÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_segment_object_type: Invalid object type $2"
+msgstr "validate_segment_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_segment_object_type: Segment object type exists in $2 line $3"
+msgstr "validate_segment_object_type¡¨Ù´ÑôÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "add_node: Invalid node type $2"
+msgstr "add_node¡¨åçöµùËÐÎ $2 àÒÕæ"
+msgid "add_node: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_node¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_group: Invalid group type $2"
+msgstr "add_group¡¨åúÜÚùËÐÎ $2 àÒÕæ"
+msgid "add_group: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_group¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_segment: Invalid segment type $2"
+msgstr "add_segment¡¨Ù´ÑôùËÐÎ $2 àÒÕæ"
+msgid "add_segment: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_segment¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_composite: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_composite¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "Package SUNWessrv is not installed on this system"
+msgstr "Ⱥ˷ÜÓÆÜÇøæÒ SUNWessrv ÔïæÒÝÔüÕ"
+msgid "Unable to create logfile $2"
+msgstr "àÒÎÎÐúÇ¡ÅÊë¢óò $2"
+msgid "$2 file does not exist"
+msgstr "$2 óòÄâÇôÇã"
+msgid "$2 file does not have read permissions"
+msgstr "$2 óòÄâ̦ûô̽ûâÓî"
+msgid "Invalid Operation: Operation not supported"
+msgstr "ðçÉ¢àÒÕ桨ðçÉ¢ÄâÌ¿ÅÅßÎ"
+msgid "process_delete_data: Object type $2 missing in data file"
+msgstr "process_delete_data¡¨æñÕèóòÄã×ÍÅ·ÎìǵùËÐÎ $2"
+msgid "validate_monitor_via : $2 is invalid type"
+msgstr "validate_monitor_via¡¨$2 ÑÒàÒÕæÎûùËÐÎ"
+msgid "validate_node_type:$2 is invalid node type"
+msgstr "validate_node_type¡¨$2 ÑÒàÒÕæÎûùËÐÎ"
+msgid "validate_node_object_type: Invalid object type $2"
+msgstr "validate_node_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_i18n_key: Invalid object type $2"
+msgstr "validate_i18n_key¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "add_device: Invalid object type $2"
+msgstr "add_device¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_node_object_type: Node object type exists in $2 line $3"
+msgstr "validate_node_object_type¡¨åçöµÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_object_type: Invalid object type $2"
+msgstr "validate_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_group_type: $2 is invalid group type"
+msgstr "validate_group_type¡¨$2 ÑÒàÒÕæÎûåúÜÚùËÐÎ"
+msgid "validate_segment_type: Invalid value $2 for Segment_type"
+msgstr "validate_segment_type¡¨Segment_type ÎûÔ« $2 àÒÕæ"
+msgid "     (for example: ./es-device -a /tmp/userdata)"
+msgstr "     (ËóÇñ¡¨./es-device -a /tmp/userdata)"
+msgid "     (for example: ./es-device -d /tmp/userdata)"
+msgstr "     (ËóÇñ¡¨./es-device -d /tmp/userdata)"
+msgid "validate_user_name: No value specified for User_name"
+msgstr "validate_user_name¡¨ÆÜÑÀÌùÆîÍõ User_name ÎûÔ«"
+msgid "validate_node_object_type: No value specified for Node_object_type"
+msgstr "validate_node_object_type¡¨ÆÜÑÀÌùÆîÍõNode_object_type ÎûÔ«"
+msgid "validate_i18n_key: No value specified for i18n_key"
+msgstr "validate_i18n_key¡¨ÆÜÑÀÌùÆîÍõ i18n_key ÎûÔ«"
+msgid "validate_properties_file: No value specified for Properties_file"
+msgstr "validate_properties_file¡¨ÆÜÑÀÌùÆîÍõ Properties_file ÎûÔ«"
+msgid "validate_search_parameter: No value specified for Search_parameter"
+msgstr "validate_search_parameter¡¨ÆÜÑÀÌùÆîÍõ Search_parameter ÎûÔ«"
+msgid "validate_icon_file: No value specified for icon"
+msgstr "validate_icon_file¡¨ÆÜÑÀÌùÆîÍõè·ÆüÎûÔ«"
+msgid "validate_segment_object_type: No value specified for Segment object type"
+msgstr "validate_segment_object_type¡¨ÆÜÑÀÌùÆîÍõÙ´ÑôÎìǵùËÐÎÎûÔ«"
+#
+#==============================
+# <WS>/packages/Setup/db-stop
+#==============================
+msgid "getHostName: failed to obtain current host from hostname comma"
+msgstr "getHostName¡¨àÒÎÎÚ· hostname ÑÀÅï̽ڵÆøЩÎûÅäñ¢"
+msgid "current host : $2\n"
+msgstr "ÆøЩÎûÅäñ¢¡¨$2\n"
+msgid "getUserName: failed to obtain user name from id comma\n"
+msgstr "getUserName¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîϯÇØê¢\n"
+msgid "current user name : $2\n"
+msgstr "ÆøЩÎûËðÆîϯÇØꢡ¨$2\n"
+msgid "getUserGroup: failed to obtain user group from id comma\n"
+msgstr "getUserGroup¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîåúÜÚ\n"
+msgid "current user group : $2\n"
+msgstr "ÆøЩÎûËðÆîϯåúÜÚ¡¨$2\n"
+msgid "verifyDatabaseUp: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseUp¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseUp: instance is executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseUp: instance is not executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseDown¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseDown: instance is executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: instance is not executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyListenerUp: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerUp¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerUp: listener $2 is executing\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerUp: listener $2 is not executing\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyListenerDown: failed to obtain listener process info from \n"
+msgstr "verifyListenerDown¡¨àÒÎÎ̽ڵÚÙûïÅü×äݨܡæñع¡¾Ú·¡¿\n"
+msgid "verifyListenerDown: listener $2 is executing\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerDown: listener $2 is not executing\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "the file $2 does not exist, exiting........................"
+msgstr "óòÕù $2 ÄâÇôÇã¡¢á¸ÊÖÄã........................"
+msgid "performing a (shutdown immediate)......"
+msgstr "ÆßÇãÙÚÈ硾ǡɻùÃñ¢¡¿......"
+msgid "execution of $2 using \\@$3 failed"
+msgstr "ËðÆî \\@$3 ÙÚÈç $2 ÆÂÚõ"
+msgid "exiting..........................\n"
+msgstr "á¸ÊÖÄã........................\n"
+msgid "unable to perform normal shutdown, executing a shutdown abort"
+msgstr "àÒÎÎÙÚÈçÆßÚ¦ùÃñ¢¡¢ÙÚÈçùÃñ¢ÄãöË"
+msgid "execution of $2 using adhoc shutdown-abort failed"
+msgstr "ËðÆî adhoc shutdown-abort ÙÚÈç $2 ÆÂÚõ"
+msgid "execution of $2 stop $3 failed"
+msgstr "$2 ØôÅÏ $3 ÎûÙÚÈçÆÂÚõ"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "execution of sqlplus using $2 fail\n"
+msgstr "ËðÆî $2 ÙÚÈç sqlplus ÆÂÚõ\n"
+msgid "can not find $2 on path, exiting.......................\n"
+msgstr "æûÕÀĸÊÆÄâ̯ $2¡¢á¸ÊÖÄã.......................\n"
+#
+#=========================================
+# <WS>/packages/Setup/sm_setup_server.sh
+#=========================================
+msgid "The Sun Management Center Console help configuration file cannot be found."
+msgstr "ÊÆÄâ̯ Sun Management Center ÅäÚÕƺëºÉ·ë©ÍüØÙåôóò¡¤"
+msgid "Please re-install the Sun Management Center Console component"
+msgstr "îùÓìä»ÇøæÒ Sun Management Center ÅäÚÕƺÜÚǵ"
+msgid "The base URL has been set to $2"
+msgstr "Ù×ÆÛ URL ÄØÝÃÌùÒ³ $2"
+msgid "Could not find group $2.  You will have to set up"
+msgstr "ÊÆÄâ̯åúÜÚ $2¡¤ÚÀÆÒâüÅÃÙ¯"
+msgid "the groups manually.  Please add $3 to group $2."
+msgstr "ÝÃÌùåúÜÚ¡¤îùÙò $3 ä»ìÁÈÝåúÜÚ $2¡¤"
+msgid "User $3 in group $2 is not a valid user.  Leaving it out of the esusers file."
+msgstr "åúÜÚ $2 ÄãÎûËðÆîϯ $3 ÄâÑÒÈ´ÕæÎûËðÆîϯ¡¤îùÙòÆÆÚ· esusers óòÄãÜÃØ桤"
+msgid "Adding user $2 from group $3 to esusers"
+msgstr "ÆßÇãÙòåúÜÚ $3 ÄãÎûËðÆîϯ $2 ä»ìÁÈÝ esusers"
+msgid "It appears that you already have some users \\\($2\\\)"
+msgstr "ÚÀÆ«×äÄØÈ´Ä¡ËèËðÆîϯ \\\($2\\\)"
+msgid "configured as Sun Management Center administrators.  Leaving these users in place."
+msgstr "ØÙåôÒ³ Sun Management Center ê§Ü¡ÔÞ¡¤ÙòÝÕËèËðÆîϯÖçÇãÔÏݨ¡¤"
+msgid "You should setup a user as a Sun Management Center administrator."
+msgstr "ÚÀóÜæÚÙòÄ¡ÈíËðÆîϯÝÃÒ³ Sun Management Center ê§Ü¡ÔÞ"
+msgid "This person will be added to the esadm and esdomadm groups."
+msgstr "äÄÙòȺËðÆîϯä»ìÁ̯ esadm ÌÏ esdomadm åúÜÚÄ㡤"
+msgid "$2 is not a valid user."
+msgstr "$2 ÄâÑÒÈ´ÕæÎûËðÆîϯ¡¤"
+msgid "The group $2 already exists on your system."
+msgstr "Ë·ÜÓĸÄØÇôÇãåúÜÚ $2¡¤"
+msgid "Creating the group $2 that contains Sun Management Center $3 Users."
+msgstr "ÆßÇãÐúÇ¡ÅýÉÖ Sun Management Center $3 ËðÆîϯÎûåúÜÚ $2¡¤"
+msgid "Could not find $2 in $3"
+msgstr "$3 ÄãÆÜÊÆ̯ $2"
+msgid "This part of the setup process does the Sun Management Center Server Component setup."
+msgstr "ÝÕÝåÅ¡ÎûÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÈùΤðÂÜÚǵÎûÝÃÌù¡¤"
+msgid "Unable to set $2 values."
+msgstr "àÒÎÎÝÃÌù $2 Ô«¡¤"
+msgid "agent.snmpPort is already configured in $2"
+msgstr "$2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "topology.snmpPort is already configured in $2"
+msgstr "$2 ÄãÄØØÙåôħ topology.snmpPort"
+msgid "The Sun Management Center base URL is relative to the Sun Management Center Console."
+msgstr " Sun Management Center Ù×äí URL ÑÒÒÞè×Íõ Sun Management Center Cosole Îû¡¤"
+msgid "The Sun Management Center Console is able to request help documentation via the network."
+msgstr " Sun Management Center ÅäÚÕƺƫÝàç´ê½æûîùÊåëºÉ·ë©ÍüÅÆǵæñÕ衤"
+msgid "If you have installed Sun Management Center help documentation in an http-accessible"
+msgstr "ÇñΪÇãê½æûÄãÆ«Ýàç´ http Çô̽ÎûÈíåôĸÇøæÒħ Sun Management Center ëºÉ·ë©ÍüÅÆǵæñÕè¡¢"
+msgid "location within your network, you may specify this location."
+msgstr "ÚÀÆÒâüüÏÆüȺÈíåô¡¤"
+msgid "If Sun Management Center help is installed on the console host, simply accept the default value."
+msgstr "ÇñΪ Sun Management Center ëºÉ·ë©ÍüÇøæÒÇãÅäÚÕƺÅäñ¢Ä¸¡¢Ð¬Æ·ëæÚÙÌ¿çßÝÃÔ«¡¤"
+msgid "Completing Sun Management Center Server Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÈùΤðÂÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center server"
+msgstr "ËðÆîSun Management Center ÈùΤðÂÎûÇøÇÀê¡ÄÍ $2"
+msgid "Please enter a user to be the Sun Management Center administrator: "
+msgstr "îùòÓÄ«É¢Ò³ Sun Management Center ê§Ü¡ÔÞÎûËðÆîϯ¡¨ "
+msgid "Please enter a valid username: "
+msgstr "îùòÓÄ«È´ÕæÎûËðÆîϯÇØꢡ¨ "
+msgid "Please enter base URL to Sun Management Center help [local]: "
+msgstr "îùòÓÄ«ÝÙÚÙ Sun Management Center ëºÉ·ë©ÍüÎûÙ×ÆÛ URL [çßÝá¨ã¯ÆñÆÛê¦Ù¶äù]¡¨ "
+#
+#===================================
+# <WS>/packages/Setup/es-common.sh
+#===================================
+msgid "Enter \\\"y\\\" or \\\"n\\\" or \\\"q\\\""
+msgstr "îùòÓÄ« \\\"y\\\" ÍÐ \\\"n\\\" ÍÐ \\\"q\\\""
+msgid "Exiting at user request"
+msgstr "ÇãËðÆîϯÓÑÊåĶØÍÅø"
+msgid "L10N_CODE not set!, LANG=$2"
+msgstr "ÆÜÝÃÌù L10N_CODE¡ªLANG=$2"
+msgid "Cannot find locale directory for LANG: $2"
+msgstr "ÊÆÄâ̯ LANG Îûë£ËÆô¿èºÆøò硨$2"
+msgid "Expected to find it in: $2"
+msgstr "çßßæÅèĶÈíåôÊÆ̯ÆÆ¡¨$2"
+msgid "No Sun Management Center Packages are installed. Exiting."
+msgstr "ÆÜÇøæÒ Sun Management Center ÔïæÒÝÔüÕ¡¤ÆßÇãá¸ÊÖ¡¤"
+msgid "Could not find xput executable: $2"
+msgstr "ÊÆÄâ̯ xput Æ«ÙÚÈçóò¡¨$2"
+msgid "Cannot find file $2"
+msgstr "ÊÆÄâ̯óòÕù $2"
+msgid "Moving $2 to $3"
+msgstr "ÆßÇãÙò $2 ÜÃ̯ $3"
+msgid "--------------  WARNING  -------------------"
+msgstr "--------------  úÀÉË  -------------------"
+msgid "It appears that $2 $3 is already in use."
+msgstr "$2 $3 Æ«×äÄØÇãËðÆ"
+msgid "Sun Management Center $2 may not be able to run due to this conflict."
+msgstr "ÆñÍõȺîíÒó¡¢Sun Management Center $2 Æ«×äàÒÎÎÙÚÈ硤"
+msgid "There are two ways to correct this conflict:"
+msgstr "È´Ì¥ê¡ÅÉÎÎÆ«Ï«ÆßȺîíÒó¡¨"
+msgid "  1. Reconfigure the port that Sun Management Center uses."
+msgstr "  1. Óìä»ØÙåô Sun Management Center ÍÔÆîÎûÝÙÚÙÙÕ¡¤"
+msgid "  2. Stop the process that is using the port."
+msgstr "  2. ØôÅÏÆßÇãËðÆîæÚÝÙÚÙÙÕÎûݨܡ¡¤"
+msgid "    You are currently running snmpdx, which may be causing the conflict."
+msgstr "    ÆøЩÆßÇãÙÚÈç snmpdx¡¢Æ«×äÑÒÆÆðÒÓ³æÚîíÒó¡¤"
+msgid "Skipping the setting of port number for $2"
+msgstr "Ü©ç´ÝÙÚÙÙÕæÀ $2 ÝÃÌù"
+msgid "NOTE: Prior to starting Sun Management Center $2, stop the process using port $3."
+msgstr "ÎÃãô¡¨ÇãÚöÙ¯ Sun Management Center $2 ÄæЩ¡¢Ç¿ËðÆîÝÙÚÙÙÕ $3 ØôÅÏݨܡ¡¤"
+msgid "Updating $2 with new port number."
+msgstr "ËðÆîä»ÝÙÚÙÙÕæÀÊÕä» $2¡¤"
+msgid "This part of setup generates security keys used for communications"
+msgstr "ÝÕÝåÅ¡ÝÃÌùá£Ê©ÙòܨÆíÆîÍõá£Ê©ÄæâæÝ×عÎûÇøÇÀõ"
+msgid "between processes.  A seed must be provided to initialize the"
+msgstr "ÆÒâüßÈËòê¡ÄÍËôÏÏÌîÝÕËèÇøÇÀõ"
+msgid "keys.  You can choose to use the standard Sun Management Center default or"
+msgstr "ÚÀÆ«ÅèËðÆîíºäíÎû Sun Management Center çßÝÃÔ«ÍÐòÓÄ«ÚÀÈÜÄ×Îû"
+msgid "enter your own seed.  If you do not generate the keys now,"
+msgstr "ê¡ÄÍ¡¤ÇñΪܢÇãÄâùÌܨÆíÝÕËèÇøÇÀõï¡¢"
+msgid "you can do so later using the procedure documented in the"
+msgstr "ÚÀÆ«ÅèÅÊÑ¥ÇÂØø¡¢Èþâüò×ߧ"
+msgid "Sun Management Center 3.0 Users Guide."
+msgstr "¡ÎSun Management Center 3.0 ËðÆîϯÑÀв¡ÏÄãÍÔÓÝÎûÊãüõ¡¤"
+msgid "Please make sure you use the same seed for all the machines you install."
+msgstr "îùíýë¥è×ÇøæÒÎûÍÔÈ´çÙæªÉáËðÆîÒÞÇÑÎûê¡ÄÍ¡¤"
+msgid "Invalid seed - type s to use default seed"
+msgstr "ê¡ÄÍàÒÕæ - Ѻ s ÅèËðÆîçßÝÃê¡ÄÍ"
+msgid "Using default Sun Management Center value for seed."
+msgstr "ÆßÇãËðÆîçßÝÃÎû Sun Management Center Ô«É¢Ò³ê¡ÄÍ"
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+msgid "Unable to create logfile $LOGFILE."
+msgstr "àÒÎÎÐúÇ¡ÅÊë¢óò $LOGFILE¡¤"
+msgid "Started $0 at"
+msgstr "ÄØÚöÙ¯ $0 Íõ"
+msgid "Running on"
+msgstr "ÆßÙÚÈçÍõ"
+msgid "What seed would you like to use?\n"
+msgstr "ÓÑËðÆîÄïëûê¡ÄÍ¡©\n"
+msgid "Invalid response in automated configuration file."
+msgstr "ÈÜÙ¯ØÙåôóòÄãÈ´àÒÕæÎûÇßóÜ¡¤"
+msgid "Unsupported OS version: $2"
+msgstr "ÄâÅÅßÎÎû OS ÎêÆÛ¡¨$2"
+msgid "Do you want to use a different port number for $2?"
+msgstr "è×Íõ $2 ÚÀÓÑËðÆîÄâÇÑÎûÝÙÚÙÙÕæÀ¡©"
+msgid "Do you want to generate these keys using the Sun Management Center default seed?"
+msgstr "ÑÒÉÁÓÑËðÆî Sun Management Center çßÝÃê¡ÄÍܨÆíÝÕËèÇøÇÀõï¡©"
+msgid "Please enter any port greater or equal to 1100 : "
+msgstr "îùòÓīǶġÄËÍõÍÐá«Íõ 1100 ÎûÝÙÚÙÙÕ¡¨ "
+msgid "Port $2 is not a valid port number, try another number : "
+msgstr "ÝÙÚÙÙÕ $2 ÄâÑÒÈ´ÕæÎûÝÙÚÙÙÕæÀ¡¢îùæÜƶġԶæÀ¨ "
+msgid "Port $2 is also busy, try another - use s to skip setting the port number:"
+msgstr "ÝÙÚÙÙÕ $2 ľȤåÓÄã¡¢îùæÜ̧ÅìÎû - ËðÆî s Ü©ç´ÝÃÌùÝÙÚÙÙÕæÀ¡¨"
+#
+#======================================
+# <WS>/packages/Setup/install-java.sh
+#======================================
+msgid "Java packages are not in $2"
+msgstr " Java ÔïæÒÝÔüÕÄâÇã $2 Äã"
+msgid "All required Java packages are not in $2"
+msgstr "ËäÏæÍÔÈ´ëæÊåÎû Java ÔïæÒÝÔüÕÉáÇã $2 Äã"
+msgid "Installing java packages $2"
+msgstr "ÆßÇãÇøæÒ java ÔïæÒÝÔüÕ $2"
+msgid "the system. Please install them first and then install Sun Management Center."
+msgstr "Ë·ÜÓÄ㡤îùÇ¿ÇøæÒÆÆÔ¯¡¢àÓÑ¥ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Package $2 is installed on this system. This package is"
+msgstr "ÔïæÒÝÔüÕ $2 ÄØÇøæÒÇãȺ˷ÜÓÄ㡤 This package is"
+msgid "incompatible with the java version required for Sun Management Center."
+msgstr "êØ Sun Management Center ÍÔëæÎû java ÎêÆÛÄâÒÞÕ©¡¤"
+msgid "This package needs to be uninstalled before installing java 2"
+msgstr "ëæÇ¿æØØæÇøæÒȺÔïæÒÝÔüÕÑ¥¡¢ÇÂÇøæÒ java 2"
+msgid "Removal of the package $2 failed, please remove it"
+msgstr "ÔïæÒÝÔüÕ $2 ÜÃØæÆÂÚõ¡¢îùÅÃÙ¯âÐÈç"
+msgid "manually and then install Sun Management Center."
+msgstr "ÜÃØæÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "You need to install the following packages $2"
+msgstr "ëæÓÑÇøæÒĶÇÄÎûÔïæÒÝÔüÕ $2"
+msgid "If you do not choose to install it now, the installation will abort."
+msgstr "ÇñΪÄâòÙðåÇ¡É»ÇøæÒ¡¢ÇøæÒá£Ê©ÙòäÄÄãöË¡¤"
+msgid "It seems some other version of java packages are present in $2"
+msgstr "Çã $2 ÄãÈýÅçÄØȴƶġÎêÆÛÎû java ÔïæÒÝÔüÕÇôÇ㡤"
+msgid "You need to install Solaris_JDK_1.2.1_04 version of the following packages"
+msgstr "ëæÇøæÒ Solaris_JDK_1.2.1_04 ÎêÎûĶÇÄÔïæÒÝÔüÕ"
+msgid "You can enter any directory to install the required version of JAVA."
+msgstr "Æ«òÓīǶÈôÆøòçÅèÇøæÒÍÔëæÎêÆÛÎû JAVA¡¤"
+msgid "No java packages to be removed."
+msgstr "ËäàÒëæÜÃØæÎû java ÔïæÒÝÔüÕ"
+msgid "Sun Management Center installation had overwritten your previous java installation."
+msgstr " Sun Management Center ÇøæÒá£È¢ÄØ̽ÅîǿЩÎû java ÇøæÒá£È¢¡¤"
+msgid "You can either keep the current installation or remove it."
+msgstr "Æ«ÏñÖçÆøЩÎûÇøæÒá£È¢ÍÐÙòÆÆÜÃØ桤"
+msgid "Warning - Could not find pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ $2 Îû pkgmap óòÕù"
+msgid "  Space calculations will be wrong."
+msgstr "  ϨâæÓÓê«äÄȴ먡¤"
+msgid "Java installation:"
+msgstr "Java ÇøæÒ¡¨"
+msgid "Space required \\\(in $2\\\):  $3 blocks."
+msgstr "ÍÔëæϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Space available \\\(in $2\\\): $3 blocks."
+msgstr "Æ«ÆîϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Insufficient disk space to install Java components"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒ Java ÜÚǵ"
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "The following packages required by Java 2 are not installed on"
+msgstr "ĶÇÄ Java 2 ÍÔëæÎûÔïæÒÝÔüÕÆÜÇøæÒÍõ"
+msgid "Packages: $2"
+msgstr "ÔïæÒÝÔüÕ¡¨$2"
+msgid "The required version of Java is already installed in $2"
+msgstr "ÍÔëæ Java ÎêÆÛÄØåîÇøæÒÍõ $2 Äã"
+msgid "It seems some of the required packages are already present."
+msgstr "ÍÔëæÔïæÒÝÔüÕÄãÈýÅçÄØÈ´ÝåÅ¡ÇôÇ㡤"
+msgid "You can either overwrite the existing java version or install the"
+msgstr "ÚÀÆ«åôßÐܢȴÎû java ÎêÆÛÍÐÑÒÙòÍÔëæÎû"
+msgid "required version in some other directory."
+msgstr "ÎêÆÛÇøæÒÇã̧ÆÆÎûÆøòçÄ㡤"
+msgid "Invalid directory"
+msgstr "àÒÕæÆøòç"
+msgid "Java packages couldnot be found in directory $2"
+msgstr "Æøòç $2 ÄãÊÆÄâ̯ Java ÔïæÒÝÔüÕ"
+msgid "Do you want to install it now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒ¡©"
+msgid "Do you want to overwrite the existing one?"
+msgstr "ÑÒÉÁ̽ÅîܢȴÎêÆÛ¡©"
+msgid "Do you want to remove it?"
+msgstr "ÑÒÉÁÓÑÙòÆÆÜÃØæ¡©"
+msgid "Do you want to uninstall it now"
+msgstr "ÑÒÉÁÓÑÇ¡É»æØØæÇøæÒ"
+msgid "Enter the base directory for JDK installation [$2]"
+msgstr "òÓÄ«ÆîÍõ JDK ÇøæÒÎûÙ×ÆÛÆøòç [$2]"
+#
+#============================
+# <WS>/packages/Setup/es-db
+#============================
+msgid "A minimum of 256 MB RAM is required to install Sun Management Center server."
+msgstr "ÈÝÅ·ëæÈ´ 256 MB Îû RAM Äß×äÇøæÒ Sun Management Center ÈùΤð¡¤"
+msgid "Current system has $2 MB RAM."
+msgstr "ÆøЩ˷ÜÓ̦ȴ $2 MB Îû RAM¡¤"
+msgid "Can not continue to install Sun Management Center server."
+msgstr "àÒÎÎú«úýÇøæÒ Sun Management Center ÈùΤð¡¤"
+msgid "                         Sun Management Center DB                     "
+msgstr "                         Sun Management Center DB                     "
+msgid "       Sun Management Center Database Installation "
+msgstr "       Sun Management Center æñÕèÕ»ÇøæÒ "
+msgid "Invalid parameters for installDB\\\(\\\)"
+msgstr " installDB\\\(\\\) ÎûÙ¶í°àÒÕæ"
+msgid "The following Sun Management Center database packages have already been installed on your system:"
+msgstr "ÚÀÎûË·ÜÓĸÄØåîÇøæÒħĶÇÄ Sun Management Center æñÕèÕ»ÔïæÒÝÔüÕ¡¨"
+msgid "Checking memory available..."
+msgstr "ÆßÇãóôÑçÆ«ÆîØ´ðÙüÕ..."
+msgid "Creating the mount points..."
+msgstr "ÆßÇãÐúÇ¡æÒç¥öµ..."
+msgid "Error installing SUNWesora.  Installation cannot continue."
+msgstr "ÇøæÒ SUNWesora àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Error installing SUNWestbl.  Installation cannot continue."
+msgstr "ÇøæÒ SUNWestbl àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Sun Management Center DB packages installed successfully"
+msgstr "Sun Management Center DB ÔïæÒÝÔüÕÇøæÒÈ©Åü"
+msgid "es-setup will perform the remainder of the config"
+msgstr "es-setup ÙòÙÚÈçØÙåôÎû̧ÅìÝåÅ¡"
+#
+#======================================
+# <WS>/packages/Setup/install-patch.sh
+#======================================
+msgid "No patch checking on this platform"
+msgstr "ȺÆÍƺĸÆÜâÐÈçìÁæÐá£È¢ÎûóôÑç"
+msgid "Could not find the patches in the following directory."
+msgstr "àÒÎÎÇãĶÓòÆøòçÄãÊÆ̯ìÁæÐá£È¢¡¤"
+msgid "Installing patch $2..."
+msgstr "ÆßÇãÇøæÒìÁæÐá£È¢ $2..."
+msgid "Installation of patch $2 failed."
+msgstr "ìÁæÐá£È¢ $2 ÇøæÒÆÂÚõ¡¤"
+msgid "Installation of patch $2 complete."
+msgstr "ìÁæÐá£È¢ $2 ÇøæÒÉùÈ©¡¤"
+msgid "Following patches are prerequisites to the java patches."
+msgstr "ÇøæÒ java ìÁæÐá£È¢Ð©¡¢ÆÒâüÇ¿ÇøæÒĶÇÄìÁæÐá£È¢¡¤"
+msgid "Please install them manually and then install Sun Management Center."
+msgstr "îùÅÃÙ¯âÐÈçÇøæÒÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Installation of following patches failed, please install"
+msgstr "ĶÇÄìÁæÐá£È¢ÎûÇøæÒÙÚÈçÆÂÚõ¡¢îùÅÃÙ¯"
+msgid "them manually and then install Sun Management Center."
+msgstr "ÇøæÒÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Checking for required OS patches, Please wait..."
+msgstr "ÆßÇãóôÑçÍÔëæ OS ìÁæÐá£È¢¡¢îùá¡Ô·..."
+msgid "Following is the list of required patches for java 2."
+msgstr "ÅèĶҳ java 2 ÍÔëæìÁæÐá£È¢ÎûÛÒÞÌ¡¤"
+msgid "If you do not choose to install them now installation will abort."
+msgstr "ÇñΪÄâòÙðåÇ¡É»ÇøæÒ¡¢ÇøæÒá£Ê©ÙòäÄÄãöË¡¤"
+msgid "Checking for required OS patches done."
+msgstr "ÄØÉùÈ©ÍÔëæ OS ìÁæÐá£È¢ÎûóôÑ硤"
+msgid "Invalid directory."
+msgstr "àÒÕæÆøò硤"
+msgid "Do you want to install now"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒ¡©"
+msgid "Please enter the directory that contains patches: "
+msgstr "îùòÓÄ«ÉÖÈ´ìÁæÐá£È¢ÎûÆøò硨 "
+#
+#=================================
+# <WS>/packages/Setup/es-restore
+#=================================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "The backup $2 does not exist"            
+msgstr "ެǹ $2 ÄâÇôÇã"            
+msgid "Checking installed Sun Management Center..."
+msgstr "ÆßÇãóôÑçÄØÇøæÒÎû Sun Management Center..."
+msgid "Recover the Sun Management Center Database and it will take a few minutes..."
+msgstr "ߦÔÏ Sun Management Center æñÕèÕ»¡¢ÙòÏÄĸÞýÅ¡úÌÎûÕëâæ..."
+msgid "Restore the Sun Management Center data."
+msgstr "ߦÔÏ Sun Management Center æñÕ衤"
+msgid "Shutdown Sun Management Center database, please wait."
+msgstr "ùÃÝð Sun Management Center æñÕèÕ»¡¢îùá¡Ô·¡¤"
+msgid "Recovery is fnished successfully. Please start Sun Management Center."
+msgstr "ÄØâûɳÉùȩߦÔÏ¡¤îùÚöÙ¯ Sun Management Center¡¤"
+msgid "The Sun Management Center server components are not found or"
+msgstr "ÊÆÄâ̯ Sun Management Center ÈùΤðÂÜÚģ́"
+msgid "its installation is damaged. You need to run"
+msgstr "ÇøæÒÄØäÚä´¡¤ÚÀëæÙÚÈç"
+msgid "es-inst/es-setup to install Sun Management Center and then "
+msgstr "es-inst/es-setup ÅèÇøæÒ Sun Management Center¡¢àÓÑ¥"
+msgid "start es-restore."
+msgstr "ÇÂÚöÙ¯ es-restore¡¤"
+msgid "Cannot restore $2"
+msgstr "àÒÎÎߦÔÏ $2"
+msgid "Cannot import database. Please check $2"
+msgstr "àÒÎÎã¾Ä«æñÕèÕ»¡¤îùóôÑç $2"
+msgid "The recovery need to shudown Sun Management Center servers."
+msgstr "ߦÔÏðçÉ¢ëæùÃÝð Sun Management Center ÈùΤð¡¤"
+msgid "Please get the backup of es-backup ready."
+msgstr "îùäíÞ¬Çï es-backup Îûެǹ¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the backup data directory:"
+msgstr "òÓīެǹæñÕèÆøòçÎûæûÕÀ¡¨"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_metadata.sh
+#==========================================
+msgid "$2 appears to be configured as your Sun Management Center server."
+msgstr "$2 Æ«×äÄØØÙåôÒ³ÚÀÎû Sun Management Center ÈùΤð¡¤"
+msgid "Error - Unable to set $2 values."
+msgstr "òãë¨ - àÒÎÎÝÃÌù $2 ÎûÔ«¡¤"
+msgid "agent.snmpPort already configured in $2"
+msgstr "Çã $2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "This part of the setup process does the Sun Management Center Agent Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "snmpd.conf already exists in $2.  Leaving it in place"
+msgstr "$2 ÄãÄØÇôÇã snmpd.conf¡¤Ùò̧ÖçÇãÔÏݨ"
+msgid "Copying snmpd.conf file into $2"
+msgstr "ÆßÇãÙò snmpd.conf óòÕùîïêû̯ $2"
+msgid "Server component also installed locally."
+msgstr "õäÇãÆÛê¦ÇøæÒħÈùΤðÂÜÚǵ¡¤"
+msgid "Using this machine as the Sun Management Center server."
+msgstr "ËðÆîÆÛçÙæªÉ¢Ò³ Sun Management Center ÈùΤð¡¤"
+msgid "Completing Sun Management Center Agent Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center metadata"
+msgstr "ËðÆîÇøÇÀê¡ÄÍ $2 É¢Ò³ Sun Management Center Ä÷æñÕè"
+msgid "Please enter the Sun Management Center Server Hostname: "
+msgstr "îùòÓÄ« Sun Management Center ÈùΤðÂÅäñ¢ÇØꢡ¨ "
+msgid "Is this correct?"
+msgstr "ÑÒÉÁÆßíý¡©"
+#
+#============================
+# <WS>/packages/Setup/es-lic
+#============================
+msgid "Topology server is currently running."
+msgstr "ÆøЩÆßÇãÙÚÈçÍßðôÈùΤð¡¤"
+msgid "It must be restarted for the license file update to take effect."
+msgstr "ÓÑËðÚæûâóòÕùÊÕä»ÆíÕæ¡¢ÆÒâüÓìä»ÚöÙ¯¡¤"
+msgid "Please stop and restart topology server using:"
+msgstr "îùØôÅÏËäÓìä»ÚöÙ¯ÍßðôÈùΤð¡¢ËðÆ"
+msgid "$2 -p\\\; $3 -p"
+msgstr "$2 -p\\\; $3 -p"
+msgid "Invalid License, Exiting..."
+msgstr "ÚæûâàÒÕæ¡¢á¸ÊÖÄã..."
+msgid "  Sun Management Center License Program\n"
+msgstr "  Sun Management Center Úæûâá£È¢\n"
+msgid "  Invalid parameters passed to es-lic script\n"
+msgstr "  ã®ØÊ̯ es-lic Script ÎûÙ¶í°àÒÕæ\n"
+msgid "Please enter license key: "
+msgstr "îùòÓÄ«Úæûâõ "
+#
+#===============================
+# <WS>/packages/Setup/es-dbimp
+#===============================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "The backup $2 does not exist"            
+msgstr "ެǹ $2 ÄâÇôÇã"            
+msgid "------------------- WARNING !!! ----------------"
+msgstr "------------------- úÀÉË¡ª¡ª¡ª ----------------"
+msgid "The process need Sun Management Center server components stopped."
+msgstr "ȺݨܡëæÇã Sun Management Center ÈùΤðÂÜÚǵØôÅÏÕëÙÚÈ硤"
+msgid "And import the backup data to Sun Management Center database."
+msgstr "ËäÙòެǹæñÕèã¾Ä« Sun Management Center æñÕèÕ»¡¤"
+msgid "As a result, all current data will be destroyed."
+msgstr "á¸ÎªÙòÝßÈ©ÍÔȴܢȴæñÕèïÎäÚ¡¤"
+msgid "Done"
+msgstr "ÉùÈ©"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+#
+#=======================================
+# <WS>/packages/Setup/sm_setup_agent.sh
+#=======================================
+msgid "$2 appears to be configured as your Sun Management Center server."
+msgstr "$2 Æ«×äÄØØÙåôÒ³ÚÀÎû Sun Management Center ÈùΤð¡¤"
+msgid "Error - Unable to set $2 values."
+msgstr "òãë¨ - àÒÎÎÝÃÌù $2 ÎûÔ«¡¤"
+msgid "agent.snmpPort already configured in $2"
+msgstr "Çã $2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "This part of the setup process does the Sun Management Center Agent Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "snmpd.conf already exists in $2.  Leaving it in place"
+msgstr "$2 ÄãÄØÇôÇã snmpd.conf¡¤Ùò̧ÖçÇãÔÏݨ"
+msgid "Copying snmpd.conf file into $2"
+msgstr "ÆßÇãÙò snmpd.conf óòÕùîïêû̯ $2"
+msgid "Server component also installed locally."
+msgstr "õäÇãÆÛê¦ÇøæÒħÈùΤðÂÜÚǵ¡¤"
+msgid "Using this machine as the Sun Management Center server."
+msgstr "ËðÆîÆÛçÙæªÉ¢Ò³ Sun Management Center ÈùΤð¡¤"
+msgid "Completing Sun Management Center Agent Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center agent"
+msgstr "ËðÆîÇøÇÀê¡ÄÍ $2 É¢Ò³ Sun Management Center ÅîÜ¡á£È¢"
+msgid "Please enter the Sun Management Center Server Hostname: "
+msgstr "îùòÓÄ« Sun Management Center ÈùΤðÂÅäñ¢ÇØꢡ¨ "
+msgid "Is this correct?"
+msgstr "ÑÒÉÁÆßíý¡©"
+#
+#================================
+# <WS>/packages/Setup/es-backup
+#================================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Can not create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Backup is successful."
+msgstr "ެǹȩÅü¡¤"
+msgid "Please save following files for the restore of Sun Management Center"
+msgstr "îùóÃÇôĶÇÄóòÕùÅèËòߦÔÏ Sun Management Center ÄæÆî"
+msgid "Starting Sun Management Center...."
+msgstr "ÆßÇãÚöÙ¯ Sun Management Center...."
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "Backup Sun Management Center data failed. Please check $2"
+msgstr "Sun Management Center æñÕèެǹÆÂÚõ¡¤îùóôÑç $2"
+msgid "The operation requires to shutdown Sun Management Center."
+msgstr "ȺðçÉ¢ëæùÃÝð Sun Management Center¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the directory to store the backup data file:"
+msgstr "òÓÄ«ÆøòçæûÕÀÅèóÃÇôެǹæñÕ表"
+#
+#=======================================
+# <WS>/packages/Setup/sm_setup_mib2.sh
+#=======================================
+msgid "Subagent sunmib_sea already set up - leaving it untouched"
+msgstr "ÄØÝÃÌùħÄÍÅîÜ¡á£È¢ sunmib_sea - Ùò̧ÏñѽÄâüÈ"
+msgid "Subagent registry file is: $2"
+msgstr "ÄÍÅîÜ¡á£È¢àôòçóòÕùÒ³¡¨$2"
+msgid "Unable to update subagent-registry-d.x"
+msgstr "àÒÎÎÊÕä» subagent-registry-d.x"
+msgid "Updated subagent-registry-d.x for mib2 subagent"
+msgstr "ÄØÒ³ mib2 ÄÍÅîÜ¡á£È¢ÊÕä»Ä§ subagent-registry-d.x"
+#
+#================================
+# <WS>/packages/Setup/es-uninst
+#================================
+msgid "Removing $2"
+msgstr "ÆßÇãÜÃØæ $2"
+msgid "Package Removal: Failed for $2"
+msgstr "ÔïæÒÝÔüÕÜÃØ桨$2 ÜÃØæÆÂÚõ"
+msgid "Reattempting to uninstall the package\\\(s\\\): $2"
+msgstr "ÆßÇãÓìæÜæØØæÇøæÒÔïæÒÝÔüÕ¡¨$2"
+msgid "Please remove the following packages manually.\n"
+msgstr "îùÅÃÙ¯ÜÃØæĶÇÄÔïæÒÝÔüÕ¡¤\n"
+msgid "Sun Management Center uninstall complete.\n"
+msgstr " Sun Management Center æØØæÇøæÒÉùÜ«¡¤\n"
+msgid "       Sun Management Center Uninstallation \n"
+msgstr "       Sun Management Center æØØæÇøæÒ \n"
+msgid "No Sun Management Center packages installed.\n"
+msgstr "ÆÜÇøæÒ Sun Management Center ÔïæÒÝÔüÕ¡¤\n"
+msgid "This utility removes all the Sun Management Center packages. \n"
+msgstr "ȺÄüÆîá£È¢ÙòÜÃØæÍÔÈ´Îû Sun Management Center ÔïæÒÝÔüÕ¡¤\n"
+msgid "Exiting uninstall utility.\n"
+msgstr "ÆßÇãá¸ÊÖæØØæÇøæÒÄüÆîá£È¢¡¤\n"
+msgid "Stopping all Sun Management Center processes.  This may take a few moments...\n"
+msgstr "ÆßÇãØôÅÏÍÔÈ´ Sun Management Center ݨܡ¡¤ÝÕÆ«×äëæÓÑÄ¡öµÕëâæ...\n"
+msgid "If you are upgrading Sun Management Center, you may want to save your existing data.\n"
+msgstr "ÇñΪÚÀÑÒÓÑŪ×È Sun Management Center¡¢Æ«×ääÄã÷óÃÇôܢȴÎûæñÕ衤\n"
+msgid "Will not remove the existing data\n"
+msgstr "ÙòÄâäÄÜÃØæܢȴÎûæñÕè\n"
+msgid "Will remove the existing data\n"
+msgstr "ÙòäÄÜÃØæܢȴÎûæñÕè\n"
+msgid "      Would you like to continue?"
+msgstr "      ÑÒÉÁÓÑú«úý¡©"
+msgid "Do you want to preserve your existing data"
+msgstr "ÑÒÉÁÓÑÏñÖçÚÀܢȴÎûæñÕè"
+msgid "Do you wish to continue with the removal of the existing data"
+msgstr "ÑÒÉÁÓÑú«úýâÐÈçܢȴæñÕèÎûÜÃØæ"
+#
+#==============================
+# <WS>/packages/Setup/es-dbexp
+#==============================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Can not create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "The operation requires some of Sun Management Center components to be shutdown."
+msgstr "ȺðçÉ¢ëæùÃÝðÄ¡Ëè Sun Management Center ÜÚǵ¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the directory to store the backup data file:"
+msgstr "òÓÄ«ÆøòçæûÕÀÅèóÃÇôެǹæñÕ表"
+msgid "Enter the path of the backup directory:"
+msgstr "òÓīެǹÆøòçÎûæûÕÀ¡¨"
+#
+#=================================
+# <WS>/packages/Setup/es-keys.sh
+#=================================
+msgid "Generating $2 security keys."
+msgstr "ÆßÇãܨÆí $2 ÇøÇÀõ"
+msgid "Error generating keys. Return code was $2."
+msgstr "ܨÆíÇøÇÀõïÕëàõÆíòã먡¤ã®ÇßÅîî£Ò³ $2¡¤"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_service.sh
+#==========================================
+msgid "This part of the setup process does the Sun Management Center Services Component setup."
+msgstr "ÝÕÝåÅ¡ÎûÝÃÌùݨܡÙòÉùÈ© Sun Management Center Τ٭ÜÚǵÎûÝÃÌù¡¤"
+msgid "Completing Sun Management Center Services Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center Τ٭ÜÚǵÎûÝÃÌù¡¤"
+#
+#===============================
+# <WS>/packages/Setup/es-start
+#===============================
+msgid "It seems component $2 has not been setup, so skipping it."
+msgstr "ÈýÅçÌþÆÜÝÃÌù $2¡¢ÇÞȺÙòÜ©ç´ÆÆ¡¤"
+msgid "Sun Management Center Web Server is not installed, Can not start web server\n"
+msgstr "ÆÜÇøæÒ Sun Management Center ê½æûÈùΤð¡¢àÒÎÎÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "Sun Management Center Web Server is not completely installed, Can not start web server\n"
+msgstr "ÆÜÉùðìÇøæÒ Sun Management Center ê½æûÈùΤð¡¢àÒÎÎÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "web server started\n"
+msgstr "ê½æûÈùΤðÂÚöÙ¯\n"
+msgid "Equivalent to %s -aefgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmprstxw"
+msgid "Equivalent to %s -efgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmprstxw "
+msgid "Usage: $PROGNAME -acefghilmpstwxrAS [-y instanceName] [ -- args... ]"
+msgstr "ÆîÎΡ¨$PROGNAME -acefghilmpstwxrAS [-y instanceName] [ -- args... ]"
+msgid "   where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "     a : starts Sun Management Center Agent\n"
+msgstr "  a¡¨ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢\n"
+msgid "     c : starts Sun Management Center Console\n"
+msgstr "  c¡¨ÚöÙ¯ Sun Management Center Console\n"
+msgid "         Optionally, maximum heap size could be customized,\n"
+msgstr "         ¡¾Ïæڰ̱¡¿Þ²ÄËÎûÙÔûèÄËÄÑÆ«Ò³ÈÜÓÔÔ«¡¢\n"
+msgid "         e.g., ./es-start -c -- -Xmx100m specifies 100 MBytes\n"
+msgstr "         ËóÇñ¡¢./es-start -c -- -Xmx100m ÑÀÌù 100 MB\n"
+msgid "         as max heap size; Default size is 64m.\n"
+msgstr "         Ò³Þ²ÄËÙÔûèÄËÄÑ¡§çßÝÃÄËÄÑÒ³ 64m¡¤\n"
+msgid "     e : starts Sun Management Center Event manager\n"
+msgstr "     e¡¨ÚöÙ¯ Sun Management Center Ëçǵê§Ü¡á£È¢\n"
+msgid "     f : starts Sun Management Center Configuration manager\n"
+msgstr "     f¡¨ÚöÙ¯ Sun Management Center ØÙåôê§Ü¡á£È¢\n"
+msgid "     g : starts Sun Management Center Grouping services\n"
+msgstr "     g¡¨ÚöÙ¯Sun Management Center åúÜÚΤ٭\n"
+msgid "     h : prints this usage report\n"
+msgstr "     h¡¨ÇÄÇÍȺÆîÎÎÞÞÉË\n"
+msgid "     i : start agent in interactive mode, valid only for one of\n"
+msgstr "     i¡¨ÅèÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÅîÜ¡á£È¢¡¢ã¯è×\n"
+msgid "           the a, t, f, p, and e options\n"
+msgstr "           a¡£t¡£f¡£p ÌÏ e òÙâúÄæÄ¡È´Õæ\n"
+msgid "     l : starts Platform Agent for SSP\n"
+msgstr "     l¡¨ÚöÙ¯ SSP ÎûÆÍƺÅîÜ¡á£È¢\n"
+msgid "     m : starts Sun Management Center Metadata Repository\n"
+msgstr "    m¡¨ÚöÙ¯ Sun Management Center Ä÷æñÕèóÃÇôÕ»\n"
+msgid "     q : start components in quiet mode, effective only for one of\n"
+msgstr "     q¡¨ÅèÏæÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÜÚǵ¡¢ã¯è×\n"
+msgid "       the A, a, t, f, p, and e options\n"
+msgstr "       A¡£a¡£t¡£f¡£p ÌÏ e òÙâúÄæÄ¡È´Õæ\n"
+msgid "     p : starts Sun Management Center Topology manager\n"
+msgstr "     p¡¨ÚöÙ¯ Sun Management Center Íßðôê§Ü¡á£È¢\n"
+msgid "     r : starts Hardware Diagnostic Suite Service\n"
+msgstr "     r¡¨ÚöÙ¯ Hardware Diagnostic Suite Τ٭\n"
+msgid "     s : starts Sun Management Center Server\n"
+msgstr "     s¡¨ÚöÙ¯ Sun Management Center ÈùΤðÂ\n"
+msgid "         Optionally, maximum heap size could be customized,\n"
+msgstr "         ¡¾Ïæڰ̱¡¿Þ²ÄËÎûÙÔûèÄËÄÑÆ«Ò³ÈÜÓÔÔ«¡¢\n"
+msgid "         e.g., ./es-start -s -- -Xmx100m specifies 100 MBytes\n"
+msgstr "         ËóÇñ¡¢./es-start -s -- -Xmx100m ÑÀÌù 100 MB\n"
+msgid "         as max heap size; Default size is 64m.\n"
+msgstr "         Ò³Þ²ÄËÙÔûèÄËÄÑ¡§çßÝÃÄËÄÑÒ³ 64m¡¤\n"
+msgid "     t : starts Sun Management Center Trap Handler\n"
+msgstr "     t¡¨ÚöÙ¯ Sun Management Center ÝøËáݨܡá£È¢\n"
+msgid "     x : starts CST Service\n"
+msgstr "     x¡¨ÚöÙ¯ CST Τ٭\n"
+msgid "     y : starts new instance of platform agent\n"
+msgstr "     y¡¨ÚöÙ¯ä»ÎûÆÍƺÅîÜ¡á£È¢èÒËó\n"
+msgid "     w : starts web server\n"
+msgstr "     w¡¨ÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "     A : starts All Sun Management Center components except the console,\n"
+msgstr "     A¡¨ÚöÙ¯ØæħÅäÚÕƺÅèÆÀÎûÍÔÈ´ Sun Management Center ÜÚǵ¡¢\n"
+msgid "     S : starts Sun Management Center Server and all the server subcomponents\n"
+msgstr "     S¡¨ÚöÙ¯ Sun Management Center ÈùΤðÂÌÏÍÔÈ´ÈùΤðÂÄÍÜÚǵ\n"
+msgid "     args are passed to console or server when started.\n"
+msgstr "     Å¿í°ÙòÇãÅäÚÕƺÍÐÈùΤðÂÚöÙ¯Õëã®ëÄá¿ÆÆÔ¯¡¤\n"
+msgid "           (for example: es-start -c -- -p 2099)\n\n"
+msgstr "     ¡¾ËóÇñ¡¨es-start -c -- -p 2099¡¿\n\n"
+msgid "ERROR: Sun Management Center has not been set up.\nRun es-setup to set up Sun Management Center."
+msgstr "òã먡¨ÌþÆÜÝÃÌù Sun Management Center¡¤\nîùÙÚÈç es-setup ÅèÝÃÌù Sun Management Center¡¤"
+msgid "Please specify a component to be started."
+msgstr "îùÑÀÌùÓÑÚöÙ¯ÎûÜÚǵ¡¤"
+msgid "Use the following single letter arguments instead:\n"
+msgstr "ÊÑÆîĶÇÄÞÌÄ¡ÇóÆàÅ¿í°¡¨\n"
+msgid "Console package not installed\n"
+msgstr "ÆÜÇøæÒÅäÚÕƺÔïæÒÝÔüÕ\n"
+msgid "Interactive option invalid with -A or -S option"
+msgstr "ÄëٯȢðçÉ¢òÙâúè×Íõ -A ÍÐ -S òÙâúàÒÕæ"
+msgid "Invalid command line option.  Please use just one option\n"
+msgstr "àÒÕæÎûÑÀÅïÈçòÙâú¡¤îùÆ·ÆîÄ¡Ô¶òÙâú\n"
+msgid "You have not specified any components to run.\n"
+msgstr "ÚÀÆÜÑÀÌùÓÑÙÚÈçÎûÜÚǵ¡¤\n"
+msgid "Only one component may be started in interactive mode\n"
+msgstr "ÇãÄëٯȢðçÉ¢í¼È¢Ä¶Æ·×äÚöٯġԶÜÚǵ\n"
+msgid "You cannot start console in interactive mode\n"
+msgstr "ÚÀÄâ×äÅèÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÅäÚÕƺ\n"
+msgid "DISPLAY environment variable must be set\n"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°\n"
+msgid "Interactive server session:\n"
+msgstr "ÄëٯȢðçÉ¢ÈùΤðÂâêÑôÉ¢äÆ¡¨\n"
+msgid "SUNWcstv or SUNWcstve package should be installed before start cstservice agent."
+msgstr "ÚöÙ¯ cstservice ÅîÜ¡á£È¢Ð©¡¢óÜæÚÇ¿ÇøæÒ SUNWcstv ÍÐ SUNWcstve ÔïæÒÝÔüÕ¡¤"
+msgid "Interactive option invalid with $OPT option"
+msgstr "ÄëٯȢðçÉ¢òÙâúè×Íõ $OPT òÙâúàÒÕæ"
+msgid "Unable to open DISPLAY: $DISPLAY"
+msgstr "àÒÎÎâäÚö DISPLAY: $DISPLAY"
+msgid "Equivalent to %s -aefgmpstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmpstxw"
+msgid "Equivalent to %s -efgmpstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmpstxw"
+msgid "$2 Component not installed"
+msgstr "ÆÜÇøæÒ $2 ÜÚǵ"
+msgid "Invalid option\\\($1\\\).  Options have changed to single letters:"
+msgstr "àÒÕæòÙâú \\\($1\\\)¡¤ÄØÙòòÙâúüÈÊÕÒ³ÞÌÄ¡ÇóÆࡨ"
+msgid "Starting all platform instances"
+msgstr "ÚöÙ¯ÍÔÈ´ÆÍƺèÒËó"
+msgid "Instances are $2"
+msgstr "èÒËóÒ³ $2"
+msgid "Starting platform instances $2"
+msgstr "ÚöÙ¯ÆÍƺèÒËó $2"
+msgid "ERROR: Could not start Hardware Diagnostic Suite Service."
+msgstr "òã먡¨àÒÎÎÚöÙ¯ Hardware Diagnostic Suite Τ٭¡¤"
+msgid "SUNWed package should be installed before start Hardware Diagnostic Suite Service."
+msgstr "SUNWed ÔïæÒÝÔüÕóÜÇãÚöÙ¯ Hardware Diagnostic Suite Τ٭ÄæЩÇøæÒ¡¤"
+msgid "Sun Management Center is not setup. Please setup first and then run es-start."
+msgstr "ÆÜÝÃÌù Sun Management Center¡¤îùÇ¿ÇøæÒ¡¢àÓÑ¥ÇÂÙÚÈç es-start¡¤"
+msgid "Sun Management Center $2 is not setup."
+msgstr "ÆÜÝÃÌù Sun Management Center $2¡¤"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_console.sh
+#==========================================
+msgid "This part of the setup process does the Sun Management Center Console Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅäÚÕƺÜÚǵÎûÝÃÌù¡¤"
+#
+#==============================
+# <WS>/packages/Setup/es-stop
+#==============================
+msgid "Please specify a component to be stopped."
+msgstr "îùÑÀÌùÓÑØôÅÏÎûÜÚǵ¡¤"
+msgid "Usage : $PROGNAME -aefghmprstxAS [-y instanceName]"
+msgstr "ÆîÎΡ¨$PROGNAME -aefghmprstxAS [-y instanceName]"
+msgid "     a : stops Sun Management Center Agent\n"
+msgstr "     a¡¨ØôÅÏ Sun Management Center ÅîÜ¡á£È¢\n"
+msgid "     e : stops Sun Management Center Event manager\n"
+msgstr "     e¡¨ØôÅÏ Sun Management Center Ëçǵê§Ü¡á£È¢\n"
+msgid "     f : stops Sun Management Center Configuration manager\n"
+msgstr "     f¡¨ØôÅÏ Sun Management Center ØÙåôê§Ü¡á£È¢\n"
+msgid "     g : stops Sun Management Center Services\n"
+msgstr "     g¡¨ØôÅÏ Sun Management Center Τ٭\n"
+msgid "     h : prints this usage report\n"
+msgstr "     h¡¨ÇÄÇÍȺÆîÎÎÞÞÉË\n"
+msgid "     l : stops Platform Agent for SSP\n"
+msgstr "     l¡¨ØôÅÏ SSP ÎûÆÍƺÅîÜ¡á£È¢\n"
+msgid "     m : stops Sun Management Center Metadata Agent\n"
+msgstr "     m¡¨ØôÅÏ Sun Management Center Ä÷æñÕèÅîÜ¡á£È¢\n"
+msgid "     p : stops Sun Management Center Topology manager\n"
+msgstr "     p¡¨ØôÅÏ Sun Management Center Íßðôê§Ü¡á£È¢\n"
+msgid "     r : stops Hardware Diagnostic Suite Service\n"
+msgstr "     r¡¨ØôÅÏ Hardware Diagnostic Suite Τ٭\n"
+msgid "     s : stops Sun Management Center Server\n"
+msgstr "     s¡¨ØôÅÏ Sun Management Center ÈùΤðÂ\n"
+msgid "     t : stops Sun Management Center Trap Handler\n"
+msgstr "     t¡¨ØôÅÏ Sun Management Center ÝøËáݨܡá£È¢\n"
+msgid "     x : stops CST Service\n"
+msgstr "     x¡¨ØôÅÏ CST Τ٭\n"
+msgid "     y : stops instance of platform agent\n"
+msgstr "     y¡¨ØôÅÏÆÍƺÅîÜ¡á£È¢èÒËó\n"
+msgid "     w : stops web server\n"
+msgstr "     w¡¨ØôÅÏê½æûÈùΤðÂ\n"
+msgid "     A : stops all Sun Management Center components listed above\n"
+msgstr "     A¡¨ØôÅÏĸÇÄÍÔÈ´ Sun Management Center Ä÷ǵ\n"
+msgid "equivalent to %s -aefgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmprstxw"
+msgid "     S : stops all Sun Management Center components listed above except Sun Management Center Agent\n"
+msgstr "     S¡¨ØôÅÏØæħ Sun Management Center ÅîÜ¡á£È¢ÅèÆÀÎûÍÔÈ´ Sun Management Center ÜÚǵ\n"
+msgid "equivalent to %s -efgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmprstxw"
+msgid "Use the following single letter arguments instead:\n"
+msgstr "ËðÆîĶÇÄÞÌÄ¡ÇóÆàÅ¿í°ËôßåÅ\n"
+msgid "Invalid option\\\($1\\\).  Options have changed to single letters:"
+msgstr "àÒÕæòÙâú \\\($1\\\)¡¤ÄØÙòòÙâúüÈÊÕÒ³ÞÌÄ¡ÇóÆࡨ"
+msgid "$1 Component not installed"
+msgstr "ÆÜÇøæÒ $1 ÜÚǵ"
+msgid "Stopping all platform instances"
+msgstr "ØôÅÏÍÔÈ´ÆÍƺèÒËó"
+msgid "$COMPONENT component is not running"
+msgstr "$COMPONENT ÜÚǵÆÜÙÚÈç"
+msgid "Stopping $COMPONENT component"
+msgstr "ÆßÇãØôÅÏ $COMPONENT ÜÚǵ"
+msgid "Error in stopping $COMPONENT component"
+msgstr "ØôÅÏ $COMPONENT ÜÚǵÕëàõÆíòãë¨"
+#
+#================================
+# <WS>/packages/Setup/es-crlcon
+#================================
+msgid "   Sun Management Center Light Console Creation Program\n"
+msgstr "   Sun Management Center ÏÏâêÅäÚÕƺÐúÇ¡á£È¢\n"
+msgid "This program creates a directory of minimun required console components.\n"
+msgstr "Ⱥá£È¢ÙòÐúÇ¡ëæÊå޲ŷÄæÅäÚÕƺÜÚǵÎûÆøò硤\n"
+msgid "User can copy this directory to any machine with supported configuration\n"
+msgstr "ËðÆîϯƫÙòȺÆøòçîïêû̯ǶÈô̦ȴ̿ÅÅßÎØÙåôÎûçÙæªÄ¸\n"
+msgid "to run Console."
+msgstr "ÅèÙÚÈçÅäÚÕƺ¡¤"
+msgid "Destination [/tmp]: "
+msgstr "Æøíº [/tmp]¡¨ "
+msgid "Please remove the directory $dirname before proceeding"
+msgstr "îùÇãú«úýâÐÈçЩÜÃØæÆøòç $dirname"
+msgid "or use a different directory.\n"
+msgstr "ÍÐËðÆîÄâÇÑÎûÆøò硤\n"
+msgid "Do you want the directory to be in zip format [y|n] [y]: "
+msgstr "ÑÒÉÁÓÑüéÆøòçÈ©Ò³ zip ֪Ȣ [y|n] [y]¡¨ "
+msgid "Please enter path to the executable - zip: "
+msgstr "îùòÓÄ«Æ«ÙÚÈç - zip ÎûæûÕÀ¡¨ "
+msgid "Cannot find zip in $zippath."
+msgstr "$zippath ÄãÊÆÄâ̯ zip¡¤"
+msgid "Source will be taken from [/opt/SUNWsymon]: "
+msgstr "ËôäãÙò̽ÈÜ [/opt/SUNWsymon]¡¨ "
+msgid "Directory ${dirname} is created."
+msgstr "Æøòç ${dirname} ÄØÐúÇ¡¡¤"
+msgid "Creating zip file ...\n"
+msgstr "ÆßÇãÐúÇ¡ zip óò ...\n"
+msgid "SUNWsymon.zip can be transferred to other systems, unzip,\n"
+msgstr "SUNWsymon.zip Æ«ã®ØÊÈÝ̧ÅìË·ÜÓ¡¢ËäæØóÌô㡤\n"
+msgid "Zip file is created in "
+msgstr "Zip óòÐúÇ¡Íõ "
+msgid "\nPlease note:\n\n    Light console can be invoked by running:\n\n"
+msgstr "\nîùÎÃãô¡¨\n\n    Æ«Ýàç´ÙÚÈçĶÇÄÑÀÅïÌËƵÏÏâêÅäÚÕƺ¡¨\n\n"
+#
+#================================
+# <WS>/packages/Setup/es-sfix.sh
+#================================
+msgid "usage:\n"
+msgstr "ÆîÎΡ¨\n"
+msgid "process all modules                : es-sfix.sh\n"
+msgstr "ݨܡÍÔÈ´í¼ÜÚ                ¡¨es-sfix.sh\n"
+msgid "flush db & process all modules     : es-sfix.sh [-c | -C]\n"
+msgstr "ÊÕä» db ËäݨܡÍÔÈ´í¼ÜÚ     ¡¨es-sfix.sh [-c | -C]\n"
+msgid "process only for specifiec module  : es-sfix.sh [-m | -M] [module name]\n"
+msgstr "ƷݨܡÖÖÌùí¼ÜÚ  ¡¨es-sfix.sh [-m | -M] [í¼ÜÚÇØê¢]\n"
+msgid "starting Sun Management Center database\n"
+msgstr "ÚöÙ¯ Sun Management Center æñÕèÕ»\n"
+msgid "database startup failed, exiting\n"
+msgstr "æñÕèÕ»ÚöÙ¯ÆÂÚõ¡¢á¸ÊÖÄã\n"
+msgid "database is up\n"
+msgstr "æñÕèÕ»ÄØƵÅø\n"
+msgid "executing suggested fix script\n"
+msgstr "ÙÚÈçÐúú¾ÎûԺߦ Script\n"
+msgid "execution successful\n"
+msgstr "ÙÚÈçÈ©Åü\n"
+msgid "error in execution\n"
+msgstr "ÙÚÈçàõÆíòãë¨\n"
+msgid "shutting down the database\n"
+msgstr "ùÃÝðæñÕèÕ»\n"
+msgid "db-stop failed\n"
+msgstr "db-stop ÙÚÈçÆÂÚõ\n"
+msgid "purge database and process\n"
+msgstr "ÛÒØææñÕèÕ»ÌÏݨܡ\n"
+msgid "process only for module\n"
+msgstr "ã¯ÆîÍõí¼ÜÚÎûݨܡ\n"
+msgid "incorrect usage\n"
+msgstr "ÆîÎÎÄâÆßíý\n"
+msgid "invalid arguments\n"
+msgstr "Å¿í°àÒÕæ\n"
+msgid "default processing\n"
+msgstr "çßÝÃÎûݨܡá£Ê©\n"
+msgid "could not set java home directory\n"
+msgstr "àÒÎÎÝÃÌù java ØÄÌîÆøòç\n"
+msgid "please see the suggested fix log file in "
+msgstr "îùÙ¶ÈÓÐúú¾ÎûԺߦÅÊë¢óò¡¢ÈíÍõ"
+#
+#=================================
+# <WS>/packages/Setup/es-details
+#=================================
+msgid "ERROR: "
+msgstr "òã먡¨ "
+msgid "  Specify the tabs for a given Node_Object_Type.  The -f and -u\n"
+msgstr "  Ò³ÖÖÌùÎû Node_Object_Type ÑÀÌùíºü¾¡¤-f êØ -u\n"
+msgid "  options are mutually exclusive.\n"
+msgstr "  òÙâúÄëÒÞÚêØ桤\n"
+msgid "  where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "    a                  : All tabs provided by Sun Management Center\n"
+msgstr "    a                  ¡¨Æñ Sun Management Center ßÈËòÎûÍÔÈ´íºü¾\n"
+msgid "                         will be included.\n"
+msgstr "                         ÙòäÄÅýÉÖÇãÄù¡¤\n"
+msgid "    f inputfile        : Input file which contains list of tabs to\n"
+msgstr "    f inputfile        ¡¨ÉÖíºü¾ÛÒÞÌÎûòÓÄ«óò¡¢ÝÕËèíºü¾\n" 
+msgid "                         be used for the specified Node_Object_Type.\n"
+msgstr "                         ÙòÆîÍõÑÀÌùÎû Node_Object_Type¡¤\n"
+msgid "    n Node_Object_Type : Corresponds to the Node_Object_Type\n"
+msgstr "    n Node_Object_Type¡¨è×óÜÍõÇã es-device Script Äã\n"
+msgid "                         entered in the es-device script.\n"
+msgstr "                         òÓÄ«Îû Node_Object_Type¡¤\n"
+msgid "    o                  : Overwrite previously created tab file.\n"
+msgstr "    o                  ¡¨÷»ìÑÄæЩÐúÇ¡Îûíºü¾óò¡¤\n"
+msgid "                         Only meaningful when used with the -f\n"
+msgstr "                         Æ·È´ØÙÇÙ -f ËðÆîÕëÄßÈ´ãôåø\n"
+msgid "                         option.\n"
+msgstr "                         òÙâú¡¤\n"
+msgid "    u                  : Undo.  Restores the Node_Object_Type\n"
+msgstr "    u                  ¡¨ß¦ÔÏ¡¤Ùò Node_Object_Type ߦÔÏ\n"
+msgid "                         to its original state.\n"
+msgstr "                         ҳ̧ÔÏÈ´ÎûÎíè衤\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "Usage: $2 [ -a ] [ -f inputfile ] -n Node_Object_Type [ -o ] [ -u ]\n"
+msgstr "ÆîÎΡ¨$2 [ -a ] [ -f inputfile ] -n Node_Object_Type [ -o ] [ -u ]\n"
+msgid "Input file $2 does not exist"
+msgstr "òÓÄ«óò $2 ÄâÇôÇã"
+msgid "The Node_Object_Type must be specified."
+msgstr "ÆÒâüÑÀÌù Node_Object_Type¡¤"
+msgid "Either option -f or -u must be specified."
+msgstr "ÆÒâüÑÀÌùòÙâú -f ÍÐ -u ÄæÄ¡¡¤"
+msgid "Options -f or -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -f ÍÐ -u¡¤"
+msgid "Options -o and -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -o êØ -u¡¤"
+msgid "Options -a and -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -a êØ -u¡¤"
+msgid "es-details has not yet been run with Node_Object_Type $2."
+msgstr "ÌþÆÜÅè Node_Object_Type $2 ÙÚÈç es-details¡¤"
+msgid "Tab name not specified for DEFAULT statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸ Ò³ DEFAULT ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "Only one tab can be defined as the DEFAULT."
+msgstr "Æ·×äÑÀÌùÄ¡Ô¶íºü¾É¢Ò³ DEFAULT¡¤"
+msgid "Tab name not specified for INCLUDE statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸҳ INCLUDE ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "$2 is not a valid Sun Management Center tab on line $3."
+msgstr "$2 ÄâÑÒÈç $3 ĸÎûÈ´Õæ Sun Management Center íºü¾¡¤"
+msgid "Tab name not specified for APPEND statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸҳ APPEND ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "Tab name $2 must be in format file:key on line $3."
+msgstr "Èç $3 ĸíºü¾ÇØê¢ $2 Îû֪ȢÆÒâüÒ³ file:key¡¤"
+msgid "Help key not specified for user-defined tab $2 on line $3."
+msgstr "ÆÜÇãÈç $3 ĸҳËðÆîϯÌùåøÎûíºü¾ $2 ÑÀÌùëºÉ·ë©Íüõ"
+msgid "Help Key $2 must be in format key:file on line $3."
+msgstr "Èç $3 ĸÎûëºÉ·ë©Íüõï $2 Îû֪ȢÆÒâüÒ³ key:file¡¤"
+msgid "Java class not specified for user-defined tab $2 on line $3."
+msgstr "ÆÜÇãÈç $3 ĸҳËðÆîϯÌùåøÎûíºü¾ $2 ÑÀÌù Java ùËɱ¡¤"
+msgid "Key $2 is not a valid key on line $3."
+msgstr "õï $2 ÄâÑÒÈç $3 ĸÎûÈ´Õæõ"
+msgid "Input file $2 contains no APPEND or INCLUDE statements"
+msgstr "òÓÄ«óò $2 ÄâÉÖ APPEND ÍÐ INCLUDE ë©Íü"
+msgid "$2 is not a valid Node_Object_Type."
+msgstr "$2 ÄâÑÒÈ´ÕæÎû Node_Object_Type¡¤"
+msgid "The specified default tab $2 was not found in the inputfile."
+msgstr "òÓÄ«óòÄãÊÆÄâ̯ÑÀÌùÎûçßÝÃíºü¾ $2¡¤"
+msgid "The tabs for this object have already been specified, use -o option to overwrite."
+msgstr "ÄØåîÑÀÌùÆîÍõȺÎìǵÎûíºü¾¡¢îùËðÆî -o òÙâúËô÷»ìÑ¡¤"
+msgid "Can only modify the family file for Sun Management Center agents."
+msgstr "Æ·×äÒ³ Sun Management Center ÅîÜ¡á£È¢ÔºÊÑÕ¥Úþóò¡¤"
+#
+#===========================
+# <WS>/packages/Setup/es-dt
+#===========================
+msgid "ERROR: "
+msgstr "òã먡¨ "
+msgid "  where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "    a          : Add a reference.\n"
+msgstr "    a          ¡¨ä»ìÁÙ¶äùæñÕ衤\n"
+msgid "    d          : Delete a reference.\n"
+msgstr "    d          ¡¨É´ØæÙ¶äùæñÕ衤\n"
+msgid "    v          : View references.  This is the default option.\n"
+msgstr "    v          ¡¨óôáþÙ¶äùæñÕ衤ȺҳçßÝÃòÙâú¡¤\n"
+msgid "    s          : Add/Delete/View on the Platform Agent.  By default the\n"
+msgstr "    s          ¡¨ÇãÆÍƺÅîÜ¡á£È¢Ä¸ä»ìÁ/É´Øæ/óôáþ¡¤ËíçßÝá¢\n"
+msgid "                 operation is performed on the Agent.\n"
+msgstr "                 ðçÉ¢äÄÇãÅîÜ¡á£È¢Ä¸ÙÚÈ硤\n"
+msgid "    h hostname : Agent hostname of machine running the Discovery Object Table.\n"
+msgstr "    h Åäñ¢ÇØꢡ¨ÙÚÈçÚØ×ÄÎìǵÏÐÄæçÙæªÎûÅîÜ¡Åäñ¢ÇØꢡ¤\n"
+msgid "    l label    : Unique label for the Composite Object to add or delete.\n"
+msgstr "    l íºü¾    ¡¨ÓÑä»ìÁÍÐÉ´ØæÎûÜÚÇÙÎìǵñÁÈ´íºü¾¡¤\n"
+msgid "    n not      : Node_Object_Type for the Composite Object to add.\n"
+msgstr "    n not      ¡¨ÓÑä»ìÁÎûÜÚÇÙÎìǵ Node_Object_Type¡¤\n"
+msgid "    o OID      : Discovery Object Table OID to add.\n"
+msgstr "    o OID      ¡¨ÓÑä»ìÁÎûÚØ×ÄÎìǵÏÐ OID¡¤\n"
+msgid "    p port     : Agent port of machine running the Discovery Object Table.\n"
+msgstr "    p port     ¡¨ÙÚÈçÚØ×ÄÎìǵÏÐÄæçÙæªÎûÅîÜ¡á£È¢ÙÕ¡¤\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "ESDIR must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR"
+msgid "Usage: $2 -a \\\| -d \\\| -v [ -s ] -h hostname -l label -n not -o OID -p port\n"
+msgstr "ÆîÎΡ¨$2 -a \\\| -d \\\| -v [ -s ] -h Åäñ¢ÇØê¢ -l íºü¾ -n not -o OID -p port\n"
+msgid "It cannot be loaded on both the Agent and Platform Agent."
+msgstr "Äâ×äÇÑÕëÇãÅîÜ¡á£È¢Å¯ÆÍƺÅîÜ¡á£È¢Äãç¥Ä«ÆÆ¡¤"
+msgid "The options -h, -l, -n, -o, and -p must all be used with the -a option."
+msgstr "òÙâú -h¡£-l¡£-n¡£-o ÌÏ -p ÇÀÝçÆÒâüä®ØÙ -a òÙâúËôËðÆ"
+msgid "An entry for $2 already exists."
+msgstr "ÆîÍõ $2 ÎûâúÆøÄØåîÇôÇ㡤"
+msgid "The option -l must be used with the -d option."
+msgstr "òÙâú -l ÆÒâüä®ØÙ -d òÙâúËðÆ"
+msgid "The options -h, -n, -o, and -p are not valid with the -d option."
+msgstr "òÙâú -h¡£-n¡£-o êØ -p Äâ×ää®ØÙ -d òÙâú¡¤"
+msgid "An entry for $2 does not exist."
+msgstr "ÆîÍõ $2 ÎûâúÆøÄâÇôÇ㡤"
+msgid "The options -h, -l, -n, -o, and -p are not valid with the -v option."
+msgstr "òÙâú -h¡£-l¡£-n¡£-o êØ -p Äâ×ää®ØÙ -v òÙâú¡¤"
+msgid "No entries."
+msgstr "ÊôÈ´âúÆø¡¤"
+msgid "The file $2 is not readable."
+msgstr "óòÕù $2 ÄâÆ«ûô̽¡¤"
+msgid "Discovery Service loaded on: Agent"
+msgstr "ÚØ×ÄΤ٭ÄØç¥Ä«¡¨Agent"
+msgid "Discovery Service loaded on: Platform Agent."
+msgstr "ÚØ×ÄΤ٭ÄØç¥Ä«¡¨ÆÍƺÅîÜ¡á£È¢¡¤"
+msgid "Entries:"
+msgstr "âúÆø¡¨"
+msgid "The discovery table is already loaded on the Agent."
+msgstr "ÚØ×ÄÏÐÄØåîÇãÅîÜ¡á£È¢Ä¸ç¥Ä«¡¤"
+msgid "The discovery table is already loaded on the Platform Agent."
+msgstr "ÚØ×ÄÏÐÄØåîÇãÆÍƺÅîÜ¡á£È¢Ä¸ç¥Ä«¡¤"
+#
+#=============================
+# <WS>/packages/Setup/es-apps
+#=============================
+msgid "This script reads the specified configuration file or\\n%s if not specified,\\nand installs the applications with the server."
+msgstr "Ⱥ Script ûô̽ÑÀÌùÎûØÙåôóòÕùÍÐÑÒ\\n%s¡¾ÇñΪËäÆÜÑÀÌù¡¿¡¢\\nËäÅèÈùΤðÂÇøæÒóÜÆîá£È¢¡¤"
+msgid "The configuration file contains one or more lines using the following format:\n"
+msgstr "ØÙåôóòÅýÉÖÄ¡ÍÐÇéÈçËðÆîÅèĶ֪ȢÎûÄùÕ©¡¨\n"
+msgid "where:\n"
+msgstr "̧Ä㡨\n"
+msgid "name\tis the name of the application that appears in the Application list\n"
+msgstr " name\tÑÒæÚóÜÆîá£È¢Çã¡ÖóÜÆîá£È¢¡×ÛÒÞÌÄãüÏÆüÎûÇØê¢"
+msgid "class\tis the name of the Java class for the application\n"
+msgstr " class\tÑÒæÚóÜÆîá£È¢Îû Java ùËɱ\n"
+msgid "args\tare optional user defined arguments to be passed to the application\n"
+msgstr "args\tÑÒÆîËôâÐÄ«æÚóÜÆîá£È¢ÎûËðÆîϯÌùåøÄæüÈí°¡¾Æ«òÙðåÎû¡¿\n"
+msgid "help\tis the optional help specification using the format key:helpfile or :url.\n"
+msgstr "help\tÑÒËðÆîkey:helpfile ÍÐ :url ֪ȢÎûëºÉ·ë©ÍüÄæë©Íü¡¾Æ«òÙðåÎû¡¿¡¤\n"
+msgid "There should be no quotes in the line.\n"
+msgstr "ÈçÄãÄâ×äÈ´Å¿æÀ¡¤\n"
+msgid "Lines beginning with # are considered as comments.\n"
+msgstr "Åè # âäó¤ÎûÄùÕ©ÙòÝ·áþÒ³â¡æØ¡¤"
+msgid "For example:\n"
+msgstr "ËóÇñ¡¨\n"
+msgid "Using %s"
+msgstr "ËðÆî %s"
+msgid "%s updated."
+msgstr "%s ÄØÊÕ仡¤"
+#
+#================================
+# <WS>/packages/Setup/db-export.sh
+#================================
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+#
+#==================================
+# <WS>/packages/Setup/db-import.sh
+#==================================
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+msgid "please ensure Topology & Event agents are not running..."
+msgstr "îùíýÌùÍßðôůËçǵÅîÜ¡á£È¢ËäÆÜÙÚÈç..."
+#
+#============================
+# <WS>/packages/Setup/es-run
+#============================
+msgid "Usage : $PROGNAME option1 [option2,...]"
+msgstr "ÆîÎΡ¨$PROGNAME òÙâú 1 [òÙâú 2,...]"
+msgid "   where option1 is a Sun Management Center utility\n   and option2,...  are the arguments for 'option1'\n\n   If option1 is '-help', then the usage is printed.\n\n"
+msgstr "   ̧Äã¡¢òÙâú 1 ÑÒ Sun Management Center ÄüÆîá£È¢\n    ÈÔòÙâú 2,... ÑÒ¡äòÙâú 1¡åÎûÅ¿í°\n\n   ÇñΪòÙâú 1 ÑÒ '-help'¡¢ÙòÇÄÇÍ̧ÆîÎΡ¤\n\n"
+#
+#==============================
+# <WS>/packages/Setup/es-chelp
+#===============================
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+msgid "There is an existing $PROGRAM lockfile, $LOCKFILE"
+msgstr "ÇôÇãÄ¡Ô¶ $PROGRAM ÷ÕÌùóòÕù¡¢$LOCKFILE"
+msgid "which indicates that process is executing the $PROGRAM"
+msgstr "ÆÆÏÐÆüݨܡÆßÇãÙÚÈç $PROGRAM"
+msgid "If this is not the case, delete the lock file,"
+msgstr "ÇñΪÄâÑÒÝÕê¡ÚÅÎÓ¡¢É´ØæȺ÷ÕÌùóòÕù¡¢"
+msgid "$LOCKFILE and execute $PROGRAM again."
+msgstr "$LOCKFILE ËäÇÂȹÙÚÈç $PROGRAM¡¤"
+msgid "$sdk_helpfile either does not exist or is not writable"
+msgstr "$sdk_helpfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+#
+#========================================
+# <WS>/src/db/build/build-recovery*.ksh
+#========================================
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Usage: $PROGNAME -au auid -ap apword -wu wuid -wp wpword -sp syspword -s osrvname -tsn tsname -tsp tsphyspath -tsis tssize -olfp olfpath [-cdb] [-vr]"
+msgstr "ÆîÎΡ¨$PROGNAME -au auid -ap apword -wu wuid -wp wpword -sp syspword -s osrvname -tsn tsname -tsp tsphyspath -tsis tssize -olfp olfpath [-cdb] [-vr]"
+msgid "   -au auid               :  userid used to admin smc tablespace"
+msgstr "   -au auid               ¡¨ÆîËôê§Ü¡ smc ÏÐ֪ϨâæÎû userid"
+msgid "   -ap apword             :  password for corresponding admin userid"
+msgstr "   -ap apword             ¡¨è×óÜê§Ü¡ userid ÎûÙïî£"
+msgid "   -wu wuid               :  working userid used by application"
+msgstr "   -wu wuid               ¡¨óÜÆîá£È¢ËðÆîÎûÄÖÉ¢ userid"
+msgid "   -wp wpword             :  working password for corresponding working userid"
+msgstr "   -wp wpword             ¡¨è×óÜÄÖÉ¢ userid ÎûÄÖÉ¢Ùïî£"
+msgid "   -sp syspword           :  password for system userid \\\(system\\\)"
+msgstr "   -sp syspword           ¡¨Ë·ÜÓ userid ÎûÙïî£ \\\(system\\\)"
+msgid "   -s osrvname            :  name of the oracle service used to connect to db"
+msgstr "   -s osrvname            ¡¨ÆîÍõÝÙÚÙ̯æñÕèÕ»Äæ oracle Τ٭ÎûÇØê¢"
+msgid "   -tsn tsname            :  name of the tablespace"
+msgstr "   -tsn tsname            ¡¨ÏÐ֪ϨâæÎûÇØê¢"
+msgid "   -tsp tsphyspath        :  physical location of tablespace"
+msgstr "   -tsp tsphyspath        ¡¨ÏÐ֪ϨâæÎûèÒüÕÈíåô"
+msgid "   -tsis tssize           :  initial size of tablespace \\\(in M bytes\\\)"
+msgstr "   -tsis tssize           ¡¨ÏÐ֪ϨâæÎûÞ²ÏÏÄËÄÑ \\\(Åè MB Ò³ÞÌÈí\\\)"
+msgid "   -olfp olfpath          :  physical location \\\(local\\\) to write the smc30.oracle file"
+msgstr "   -olfp olfpath          ¡¨ÆîËôìÑÄ« smc30.oracle óòÎûèÒüÕÈíåô\\\(ÆÛê¦\\\)"
+msgid "   -cdb                   :  indicates that any existing tablespace and user"
+msgstr "   -cdb                   ¡¨ÑÀÅøÍÔȴܢȴÎûÏÐ֪ϨâæůËðÆîϯ"
+msgid "                             matching the specified parameters above are"
+msgstr "                             ¡¾ÜÊÇÙĸÓòÑÀÌùÄæÙ¶í°Ï¯¡¿Ýç"
+msgid "                             dropped before proceeding. use is optional"
+msgstr "                             Çãú«úýâÐÈçЩ۹åô¡¤Æ«òÙðåÑÒÉÁËðÆî"
+msgid "   -vr                    :  this option is used to verify all objects"
+msgstr "   -vr                    ¡¨ÈºòÙâúÑÒÆîËôüÓøýÍÔÈ´ÎûÎìǵ"
+msgid "                             and to perform a recovery sequence if any"
+msgstr "                             ÅèůÙÚÈçߦÔÏÎûÑ¥úýٯɢ¡¾ÇñΪ"
+msgid "                             problems are detected"
+msgstr "                             ØþàÁ̯ǶÈôÙÂ÷î¡¿"
+msgid "   -ver                   :   option"
+msgstr "   -ver                   ¡¨òÙâú"
+msgid "   -lf logfile            :  logfile name"
+msgstr "   -lf logfile            ¡¨ÅÊë¢óòÇØê¢"
+msgid "ERROR: the ESDIR environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESDIR ô¿èºüÈí°"
+msgid "illegal option encoutered : $2"
+msgstr "ç²Ì¯ÄâÇÙë£ÎÎÎûòÙâú¡¨$2"
+msgid "this is a pc installation : $2"
+msgstr "Ⱥҳ pc ÇøæÒ¡¨$2"
+msgid "this is a sparc installation : $2"
+msgstr "Ⱥҳ sparc ÇøæÒ¡¨$2"
+msgid "unknown system type, exiting........................"
+msgstr "Ë·ÜÓùËÐÎÄâÍü¡¢á¸ÊÖÄã........................"
+msgid "can not find sqlplus on path, exiting........................."
+msgstr "æûÕÀĸÊÆÄâ̯ sqlplus¡¢á¸ÊÖÄã........................."
+msgid "the current directory is not writable "
+msgstr "ÆøЩÆøòçÄâÆ«ìÑÄ« "
+msgid "sqlplus writes an error log \\\(sqlnet.log\\\)"
+msgstr "sqlplus Ùòòãë¨ÅÊë¢ìÑÄ« \\\(sqlnet.log\\\)"
+msgid "to the current directory in the event of"
+msgstr "ÆøЩÎûÆøòçÄ㡾ÇãÝÙÚÙÙÂ÷î"
+msgid "a connection problem"
+msgstr "ÎûËçǵÄã¡¿"
+msgid "the /tmp directory does not exist"
+msgstr "/tmp ÆøòçÄâÇôÇã"
+msgid "however, a file named /tmp does exist"
+msgstr "Äâç´¡¢È´Ô¶ÇØÒ³ /tmp ÎûóòÕùÇôÇã"
+msgid "/tmp directory is not writable "
+msgstr "/tmp ÆøòçÄâÆ«ìÑÄ«"
+msgid "the \\\(-au auid\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-au auid\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-ap apword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-ap apword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-wu wuid\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-wu wuid\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-wp wpword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-wp wpword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-sp syspword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-sp syspword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-s osrvname\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-s osrvname\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsn tsname\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsn tsname\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsp tsphyspath\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsp tsphyspath\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsis tssize\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsis tssize\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-olfp olfpath\\\) command line parameter was invalid! "
+msgstr "\\\(-olfp olfpath\\\) ÑÀÅïÈçÙ¶í°àÒÕ桪 "
+msgid "exiting..................."
+msgstr "á¸ÊÖÄã..................."
+msgid "The Initial Tablespace Size given is not invalid"
+msgstr "ÑÀÌùÎûÞ²ÏÏÏÐ֪ϨâæÄËÄÑàÒÕæ"
+msgid "valid range is 1 to 500 M"
+msgstr "È´ÕæÎûî¯ÞØÒ³ 1 ̯ 500 M"
+msgid "Writing Applogin file : $2"
+msgstr "ìÑÄ« Applogin óò¡¨$2"
+msgid "file : $2, has a quit statement in it."
+msgstr "file : $2¡¢Ì§ÄãÈ´Ä¡Ô¶ØÍÅøë©Íü¡¤"
+msgid "file : $str3, has a quit statement in it."
+msgstr "file : $str3¡¢Ì§ÄãÈ´Ä¡Ô¶ØÍÅøë©Íü¡¤"
+msgid "need to remove quit statements, exiting........................"
+msgstr "ëæÓÑÜÃØæØÍÅøë©Íü¡¢á¸ÊÖÄã........................"
+msgid "source file: $2 for step: $3 is missing"
+msgstr "Ëôäãóò¡¨$2¡¾ÆîÍõÊãüõ¡¨$3¡¿òÜÆÂ"
+msgid "probably need to execute mkaggregatefiles.ksh"
+msgstr "Æ«×äëæÙÚÈç mkaggregatefiles.ksh"
+msgid "source file for one or more steps is missing, exiting........................"
+msgstr "ÆîÍõÄ¡ÍÐÇéÔ¶ÊãüõÎûËôäãóòòÜÆ¡¢á¸ÊÖÄã........................"
+msgid " removing existing logfile : /tmp/recovery.err"
+msgstr " ÜÃØæܢȴÎûÅÊë¢óò¡¨/tmp/recovery.err"
+msgid " removing existing logfile :  $2"
+msgstr " ÜÃØæܢȴÎûÅÊë¢óò¡¨  $2"
+msgid " removing existing temporary sql :  $2"
+msgstr " ÜÃØæܢȴÎûí²Õë sql¡¨  $2"
+msgid "Unable to successfully append $2 onto $3"
+msgstr "àÒÎÎÈ©ÅüÙòÇóÊ¢ $2 ÅûÇã $3"
+msgid "return code from cat : $2"
+msgstr "ËôÈÜ cat Îûã®Çß¨$2"
+msgid "$2 file not found"
+msgstr "ÊÆÄâ̯ $2 óò"
+msgid "Unable to successfully substitue in $2"
+msgstr "àÒÎÎÇã $2 ÄãÈ©Åü̽Åî"
+msgid "substitution string : $2"
+msgstr "̽ÅîÇóÈ롨$2"
+msgid "return code from sed : $2"
+msgstr "ËôÈÜ sed Îûã®Çß¨$2"
+msgid "Unable to successfully perform all sed based substitutions on $2 into $3"
+msgstr "àÒÎÎÈ©ÅüÙò $2 ĸÎûÍÔÈ´ sed ÐÎ̽ÅîðçÉ¢ÙÚÈç̯ $3 Äã"
+msgid "return code from grep : $2, meaning it found un-substituted strings"
+msgstr "ËôÈÜ grep Îûã®Çß¨$2¡¢ÅîÏÐÆÆÊÆ̯ÆÜ̽ÅîÎûÇóÈë"
+msgid "$2 file not found\\\(1\\\)"
+msgstr "ÊÆÄâ̯ $2 óò\\\(1\\\)"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "sqlerror code = $2"
+msgstr "sqlerror î£ = $2"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "unhandled error detected, only recourse is to stop processing"
+msgstr "ØþàÁ̯ÆÜݨܡÎûòã먡¢ÙÄÄ¡ÎûÅÉÈ¢ÑÒØôÅÏݨܡ"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "execution of $2 ok!!"
+msgstr "$2 ÎûÙÚÈçÆßÚ¦¡ª¡ª"
+msgid "step file $2 not found"
+msgstr "ÊÆÄâ̯Êãüõóò $2"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "skipping execution of $2"
+msgstr "æüç´ $2 ÎûÙÚÈç"
+msgid "$2 dependent step $3 did not execute"
+msgstr "ËíòÊÊãüõ $3 Îû $2 ÆÜÙÚÈç"
+msgid "$2 dependent step $3 failed execution"
+msgstr "ËíòÊÊãüõ $3 Îû $2 ÙÚÈçÆÂÚõ"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "while in recovery mode, attempts to find a successfully executed dependent of "
+msgstr "ÇãߦÔÏí¼È¢Ä¶Õë¡¢ÞòÊÆÄØÈ©ÅüÙÚÈçËíòÊÊãüõ $2 ÎûæÜè·"
+msgid "the $2 step was unsuccessfull.  premature exit!!"
+msgstr "ÄâÈ©Åü¡¤ßÈÈ®á¸ÊÖ¡ª¡ª"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "while in recovery mode, attempts to find a valid step to execute following "
+msgstr "ÇãߦÔÏí¼È¢Ä¶Õë¡¢ÞòÊÆÆ«ÙÚÈçĶÇÄÊãüõ $2 ÎûÈ´ÕæÊãüõ"
+msgid "the $2 step was unsuccessfull.  premature exit!!"
+msgstr "ÄâÈ©Åü¡¤ßÈÈ®á¸ÊÖ¡ª¡ª"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "too many attempts to execute the $2 step"
+msgstr "ÙÚÈç $2 ÊãüõÎûè©æÜÅ´Çé"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "please see the $2 file for listing details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÇÄÆüÎûæÛÜØæñع"
+#
+#========================================
+# <WS>/src/db/build/mkaggregatefiles.ksh
+#========================================
+msgid " removing existing verify inventory  : agg-verify-proc-inventory.sql"
+msgstr " ÜÃØæܢȴÎûüÓøýÕ»Çô¡¨agg-verify-proc-inventory.sql"
+msgid "-        Create agg-packages-topology.sql file              -"
+msgstr "-        ÐúÇ¡ agg-packages-topology.sql óò              -"
+msgid "-       Create agg-procedures-topology.sql file             -"
+msgstr "-       ÐúÇ¡ agg-procedures-topology.sql óò             -"
+msgid "-          Add to agg-createalltables.sql file              -"
+msgstr "-          ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-       Add to agg-verifyalltableattribs.sql file           -"
+msgstr "-       ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-          Add to agg-dataload-preseq.sql file              -"
+msgstr "-          ä»ìÁÈÝ agg-dataload-preseq.sql óò              -"
+msgid "-        Create agg-packages-eventmanager.sql file          -"
+msgstr "-        ÐúÇ¡ agg-packages-eventmanager.sql óò          -"
+msgid "-        Create agg-procedures-eventmanager.sql file        -"
+msgstr "-        ÐúÇ¡ agg-procedures-eventmanager.sql óò        -"
+msgid "-         Add to agg-createalltables.sql file               -"
+msgstr "-         ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-         Add to agg-verifyalltableattribs.sql file         -"
+msgstr "-         ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-       Create agg-packages-mgmtservice.sql file            -"
+msgstr "-       ÐúÇ¡ agg-packages-mgmtservice.sql óò            -"
+msgid "-       Create agg-procedures-mgmtservice.sql file          -"
+msgstr "-       ÐúÇ¡ agg-procedures-mgmtservice.sql óò          -"
+msgid "-           Add to agg-createalltables.sql file             -"
+msgstr "-         ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-         Add to agg-verifyalltableattribs.sql file         -"
+msgstr "-         ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-        Create agg-verify-proc-inventory.sql file          -"
+msgstr "-        ÐúÇ¡ agg-verify-proc-inventory.sql óò          -"
+#
+#==================================================
+# <WS>/src/oa/modules/configd4u/bin/es-setup.sh
+#==================================================
+msgid "Setup failed while adding module $2 into $3"
+msgstr "Ùòí¼ÜÚ $2 ä»ìÁÈÝ $3 ÕëÝÃÌùÙÚÈçÆÂÚõ"
+msgid "$2 does not exist"
+msgstr "$2 ÄâÇôÇã"
+msgid "Added module $2 to $3."
+msgstr "ÄØÙòí¼ÜÚ $2 ä»ìÁÈÝ $3¡¤"
+msgid "$2 is not readable, Could not add the module $3"
+msgstr "$2 ÄâÆ«ûô̽¡¢àÒÎÎä»ìÁÈÝí¼ÜÚ $3"
+msgid "Setup of sunfire config reader module failed."
+msgstr "sunfire ØÙåôûô̽ðÂí¼ÜÚÎûÝÃÌùÆÂÚõ¡¤"
+#
+#======================================
+# <WS>/src/oa/base/generic/bin/*.sh
+#======================================
+msgid "usage: $basename [-sh|-csh] [-internal|-external]"
+msgstr "ÆîÎΡ¨$basename [-sh|-csh] [-internal|-external]"
+msgid "ERROR: the ESROOT environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "usage: $PROGNAME -s \\\"<secret> [-p <public>]  [-u <user>[ ...]] [-h <host>] [-c <component>[ ...]]\\\""
+msgstr "ÆîÎΡ¨$PROGNAME -s \\\"<Ùïǵ> [-p <ÄüÆî>]  [-u <ËðÆîϯ>[ ...]][-h <Åäñ¢>] [-c <ÜÚǵ>[ ...]]\\\""
+msgid "       <secret> is the superuser password\n"
+msgstr "       <Ùïǵ> ÑÒâ¾×ÈËðÆîϯÎûÙïî£\n"
+msgid "       <public> is the public password (default=public)\n"
+msgstr "       <ÄüÆî> ÑÒÄüÆîÙï¾çßÝÃÔ«=public¡¿\n"
+msgid "       <user> is the list of initial seeded users\n"
+msgstr "       <ËðÆîϯ> ÑÒÏÏÌîÎûê¡ÄÍËðÆîϯÛÒÞÌ\n"
+msgid "       <host> is the fallback host name\n"
+msgstr "       <Åäñ¢> ÑÒØÍÇßÎûÅäñ¢ÇØê¢\n"
+msgid "       <component> is agent/cfgserver/event/cstservice/topology/trap/\n"
+msgstr "       <ÜÚǵ> ÑÒ agent/cfgserver/event/cstservice/topology/trap/\n"
+msgid "       Omit all <component>s to do them all\n"
+msgstr "       ÒÜÜ©ÍÔÈ´Îû <ÜÚǵ> ÅèòÙðåÇÀÝå\n"
+msgid "$PROGNAME: ESROOT must be set."
+msgstr "$PROGNAME: ÆÒâüÝÃÌù ESROOT¡¤"
+msgid "$PROGNAME: $1: unknown component"
+msgstr "$PROGNAME: $1: ÄâÍüÎûÜÚǵ"
+msgid "$PROGNAME: ERROR: blank secret not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙïǵ¡¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: ERROR: blank password not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙï¢á¸ÊÖÄã ..."
+msgid "PROGNAME: WARNING ... secret will be truncated to 8 characters"
+msgstr "PROGNAME: úÀÉË ... ÙïǵÙòôãàûÒ³ 8 Ô¶ÇóÄ÷"
+msgid "$PROGNAME: security.superuser name not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.superuser ÇØꢡ¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.generaluser name not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.generaluser ÇØꢡ¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$var"
+msgstr "$var"
+msgid "Interrupted..."
+msgstr "ÄØÄãöË..."
+msgid "$PROGNAME: security.userfile not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.userfile¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.authOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.authOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.privOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.privOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: ${COMP}.${COMP}Server not found - using $DEFHOST."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}Server - ËðÆî $DEFHOST¡¤"
+msgid "$PROGNAME: ${COMP}.${COMP}snmpPort not found - skipping $COMP."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}snmpPort - Ü©ç´ $COMP¡¤"
+msgid "ESROOT must be set\n"
+msgstr "ÆÒâüÝÃÌù ESROOT\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "OS $sys $rel is not supported"
+msgstr "ÄâÅÅßÎ OS $sys $rel"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "gettext 'Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "gettext 'É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+#
+#=================================================
+# <WS>/src/java/base/console/bin/es-console.sh
+#=================================================
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "DISPLAY environment variable must be set"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°"
+msgid "SYMON_JAVAHOME variable must be set"
+msgstr "ÆÒâüÝÃÌù SYMON_JAVAHOME üÈí°"
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+#
+#============================================
+# <WS>/src/java/base/server/bin/es-server*
+#============================================
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "No Processes Killed"
+msgstr "àÒïÎÉ´ØæÎûݨܡ"
+msgid "gettext 'More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "gettext 'ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID using kill -9 \\\($COMMAND\\\)"
+msgstr "ËðÆî kill -9 ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID with kill -9 \\\($COMMAND\\\)"
+msgstr "Åè kill -9 É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "ESDIR environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR ô¿èºüÈí°"
+msgid "SYMON_JAVAHOME variable must be set"
+msgstr "ÆÒâüÝÃÌù SYMON_JAVAHOME üÈí°"
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+#
+#====================================================
+# <WS>/src/java/com/sun/symon/base/cli/bin/es-cli
+#====================================================
+msgid "$SYMON_JAVAHOME/jre/bin/java must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$SYMON_JAVAHOME/jre/bin/java ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+
+#
+#  Strings from Halcyon scripts
+#
+msgid "usage: $basename [-sh|-csh] [-internal|-external]"
+msgstr "ÆîÎΡ¨$basename [-sh|-csh] [-internal|-external]"
+msgid "ERROR: the ESROOT environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "usage: $PROGNAME -s <secret> [-p <public>]  [-u <user>[ ...]] [-h <host>] [-c <component>[ ...]]"
+msgstr "ÆîÎΡ¨$PROGNAME -s <Ùïǵ> [-p <ÄüÆî>]  [-u <ËðÆîϯ>[ ...]][-h <Åäñ¢>] [-c <ÜÚǵ>[ ...]]"
+msgid "<secret> is the superuser password"
+msgstr "<Ùïǵ> ÑÒâ¾×ÈËðÆîϯÎûÙïî£"
+msgid "<public> is the public password (default=public)"
+msgstr "<ÄüÆî> ÑÒÄüÆîÙï¾çßÝÃÔ«=public¡¿"
+msgid "<user> is the list of initial seeded users"
+msgstr "<ËðÆîϯ> ÑÒÏÏÌîÎûê¡ÄÍËðÆîϯÛÒÞÌ"
+msgid "<host> is the fallback host name"
+msgstr "<Åäñ¢> ÑÒØÍÇßÎûÅäñ¢ÇØê¢"
+msgid "<component> is agent/cfgserver/event/topology/trap"
+msgstr "<ÜÚǵ> ÑÒ agent/cfgserver/event/topology/trap"
+msgid "Omit all <component>s to do them all"
+msgstr "ÒÜÜ©ÍÔÈ´Îû <ÜÚǵ> ÅèòÙðåÇÀÝå"
+msgid "$PROGNAME: ESROOT must be set."
+msgstr "$PROGNAME: ÆÒâüÝÃÌù ESROOT¡¤"
+msgid "$PROGNAME: $1: unknown component"
+msgstr "$PROGNAME: $1: ÄâÍüÎûÜÚǵ"
+msgid "$PROGNAME: ERROR: blank secret not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙïǵ¡¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: ERROR: blank password not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙï¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: WARNING ... secret will be truncated to 8 characters"
+msgstr "$PROGNAME: úÀÉË ... ÙïǵÙòôãàûÒ³ 8 Ô¶ÇóÄ÷"
+msgid "$PROGNAME: security.superuser name not found. Check domain-confg.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.superuser ÇØꢡ¤îùóôÑç domain-confg.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.generaluser name not found. Check domain-cofig.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.generaluser ÇØꢡ¤îùóôÑç domain-cofig.x ÍÐ user-config.x óòÕù"
+msgid "Copying $FILENAME to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò $FILENAME îïêû̯ $ESDIR/cfg..."
+msgid "Copying ${1}-${FILENAME} to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò ${1}-${FILENAME} îïêû̯ $ESDIR/cfg..."
+msgid "Copying ${COMP}-${FILENAME} to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò ${COMP}-${FILENAME} îïêû̯ $ESDIR/cfg..."
+msgid "$var"
+msgstr "$var"
+msgid "Interrupted..."
+msgstr "ÄØÄãöË..."
+msgid "$PROGNAME: security.userfile not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.userfile¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.authOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.authOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.privOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.privOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: ${COMP}.${COMP}Server not found - using $DEFHOST"
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}Server - ËðÆî $DEFHOST"
+msgid "$PROGNAME: ${COMP}.${COMP}snmpPort not found - skipping $COP."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}snmpPort - Ü©ç´ $COP¡¤"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "OS $sys $rel is not supported"
+msgstr "ÄâÅÅßÎ OS $sys $rel"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID with the force \\\($COMMAND\\\)"
+msgstr "Åèڰ̱ \\\($COMMAND\\\) ÜÜÅÏݨܡ ID $PID"
+msgid "DISPLAY environment variable must be set"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°"
+msgid "More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "No Processes Killed"
+msgstr "àÒïÎÉ´ØæÎûݨܡ"
+msgid "Terminating Process ID $PID using kill -9 \\\($COMMAND\\\)"
+msgstr "ËðÆî kill -9 ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID with kill -9 \\\($COMMAND\\\)"
+msgstr "Åè kill -9 É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "ESDIR environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR ô¿èºüÈí°"
+#
+# for es-tool - a SDK tool for integrating applications into console
+#
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+
+msgid "$sdk_toolfile either does not exist or is not writable"
+msgstr "$sdk_toolfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+
+msgid "There is an existing $PROGRAM lockfile, $LOCKFILE"
+msgstr "ÇôÇãÄ¡Ô¶ $PROGRAM ÷ÕÌùóòÕù¡¢$LOCKFILE"
+
+msgid "which indicates that process is executing the $PROGRAM"
+msgstr "ÆÆÏÐÆüݨܡÆßÇãÙÚÈç $PROGRAM"
+
+msgid "If this is not the case, delete the lock file,"
+msgstr "ÇñΪÄâÑÒÝÕê¡ÚÅÎÓ¡¢É´ØæȺ÷ÕÌùóòÕù¡¢"
+
+msgid "$LOCKFILE and execute $PROGRAM again."
+msgstr "$LOCKFILE ËäÇÂȹÙÚÈç $PROGRAM¡¤"
+
+msgid "$sdk_helpfile either does not exist or is not writable"
+msgstr "$sdk_helpfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+
+msgid "Using %s"
+msgstr "ËðÆî %s"
+
+msgid "%s updated."
+msgstr "%s ÄØÊÕ仡¤"
+
+msgid "This script reads the specified configuration file or\\n%s if not specified,\\nand installs the applications with the server."
+msgstr "Ⱥ Script ûô̽ÑÀÌùÎûØÙåôóòÕùÍÐÑÒ\\n%s¡¾ÇñΪËäÆÜÑÀÌù¡¿¡¢\\nËäÅèÈùΤðÂÇøæÒóÜÆîá£È¢¡¤"
+
+msgid "The configuration file contains one or more lines using the following format:\n"
+msgstr "ØÙåôóòÅýÉÖÄ¡ÍÐÇéÈçËðÆîÅèĶ֪ȢÎûÄùÕ©¡¨\n"
+
+msgid "where:\n"
+msgstr "̧Ä㡨\n"
+
+msgid "name\tis the name of the application that appears in the Application list\n"
+msgstr " name\tÑÒæÚóÜÆîá£È¢Çã¡ÖóÜÆîá£È¢¡×ÛÒÞÌÄãüÏÆüÎûÇØê¢"
+
+msgid "class\tis the name of the Java class for the application\n"
+msgstr " class\tÑÒæÚóÜÆîá£È¢Îû Java ùËɱ\n"
+
+msgid "args\tare optional user defined arguments to be passed to the application\n"
+msgstr "args\tÑÒÆîËôâÐÄ«æÚóÜÆîá£È¢ÎûËðÆîϯÌùåøÄæüÈí°¡¾Æ«òÙðåÎû¡¿\n"
+
+msgid "help\tis the optional help specification using the format key:helpfile or :url.\n"
+msgstr "help\tÑÒËðÆîkey:helpfile ÍÐ :url ֪ȢÎûëºÉ·ë©ÍüÄæë©Íü¡¾Æ«òÙðåÎû¡¿¡¤\n"
+
+msgid "There should be no quotes in the line.\n"
+msgstr "ÈçÄãÄâ×äÈ´Å¿æÀ¡¤\n"
+
+msgid "Lines beginning with # are considered as comments.\n"
+msgstr "Åè # âäó¤ÎûÄùÕ©ÙòÝ·áþÒ³â¡æØ¡¤"
+
+msgid "For example:\n"
+msgstr "ËóÇñ¡¨\n"
+
+#
+#====================================================
+# <WS>/packages/Setup/es-platform
+#====================================================
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "       Where the options represent:\n"
+msgstr "       ̧ÄãÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "  a : to add an instance of platform agent\n"
+msgstr "  a¡¨ä»ìÁÆÍƺÅîÜ¡á£È¢ÎûèÒËó\n"
+msgid "  d : to delete an instance of platform agent\n"
+msgstr "  d¡¨É´ØæÆÍƺÅîÜ¡á£È¢ÎûèÒËó\n"
+msgid "You can not specify both a and d option in the same command"
+msgstr "ÚÀÄâ×äÇãÇÑÄ¡Ô¶ÑÀÅïÄãÇÑÕëÑÀÌù a ů d òÙâú"
+msgid "You can not have spaces in the instance name."
+msgstr "èÒËóÇØê¢ÄãÄâ×äȴϨ֪¡¤"
+msgid "Port $2 is not a valid port number, try another number : "
+msgstr "ÝÙÚÙÙÕ $2 ÄâÑÒÈ´ÕæÎûÝÙÚÙÙÕæÀ¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by Sun Management Center agent, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñ Sun Management Center ÅîÜ¡á£È¢ËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by some instance, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñÑÜÔ¶èÒËóËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by some another process, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñƶġԶݨܡËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This instance is already present."
+msgstr "ȺèÒËóÄØåîÇôÇ㡤"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+
+# END
+domain "ES_SCRIPTS"
+#
+#==============================
+# <WS>/packages/Setup/es-inst
+#==============================
+msgid "You need to be root before running this program.\n"
+msgstr "ÚÀÆÒâüÇãÙÚÈçÆÛá£È¢Ð©Ç¿È©Ò³ root¡¤\n"
+msgid "Can not remove the directory /tmp/SunMC30Install\n"
+msgstr "àÒÎÎÜÃØæÆøòç /tmp/SunMC30Install\n"
+msgid "Can not create the directory /tmp/SunMC30Install/sbin\n"
+msgstr "àÒÎÎÐúÇ¡Æøòç /tmp/SunMC30Install/sbin\n"
+msgid "Can not copy the required files to /tmp/SunMC30Install\n"
+msgstr "àÒÎÎÙòÍÔëæÎûóòÕùîïêû̯ /tmp/SunMC30Install\n"
+msgid "Can not open the display. Either X server is not allowing\n"
+msgstr "àÒÎÎâäÚöüÏÆüàëÓò¡¤ Either X server is not allowing\n"
+msgid "the connection or you are running it from console login.\n"
+msgstr "ÝÙÚÙÍÐϯÚÀÑÒÆñÅäÚÕƺàôÄ«ÙÚÈçÆÆ¡¤\n"
+msgid "Please read Sun Management Center installation Readme and\n"
+msgstr "îùïåûô Sun Management Center ÇøæÒ Readme Ëä\n"
+msgid "run installation as mentioned.\n"
+msgstr "ËíÍÔÓÝÙÚÈçÇøæÒ¡¤\n"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "  Space calculations will be wrong."
+msgstr "  ϨâæÓÓê«äÄȴ먡¤"
+msgid "Insufficient disk space to install the requested Sun Management Center components"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒÍÔîùÊåÎû Sun Management Center ÜÚǵ"
+msgid "  - Respecify the components to install so it takes less space"
+msgstr "  - Óìä»ÑÀÌùÓÑÇøæÒÎûÜÚǵ¡¢Ëð̧ëæÓÑç¤Å·ÎûϨâæ"
+msgid "  - Uninstall some existing packages to make room for Sun Management Center"
+msgstr "  - æØØæÇøæÒÄ¡ËèܢȴÎûÔïæÒÝÔüÕ¡¢ÅèúÖÅøϨâæá¿ Sun Management Center"
+msgid "  - Make a soft link for $2 that points to more space"
+msgstr "  - Ò³ $2 ܨÆíÄ¡Ô¶Ïæڰ̱ù¹á¸ÅèÑÀÇ×ÊÕÇéϨâæ"
+msgid "  - Ask your system administrator for help"
+msgstr "  - Ç×Ë·ÜÓê§Ü¡ÔÞÊåÉ·"
+msgid "Package $2 is already installed on this system."
+msgstr "Ⱥ˷ÜÓĸÄØÇøæÒħÔïæÒÝÔüÕ $2¡¤"
+msgid "Please verify the platform for package: $2"
+msgstr "îùüÓøýÔïæÒÝÔüÕÎûÆÍƺ¡¨$2"
+msgid "Found: $2"
+msgstr "ÄØÊÆ̯¡¨$2"
+msgid "Skipping package $2"
+msgstr "æüç´ÔïæÒÝÔüÕ $2"
+msgid "There appear to be some permission problems with the installation"
+msgstr "ÇãÇøæÒÆøòçĸƫ×äÈ´Ä¡ËèÝÂÆ«ûâ"
+msgid "directory: $2"
+msgstr "ÙÂ÷$2"
+msgid "In order to install Sun Management Center, root must be able to write to the"
+msgstr "ÓÑÇøæÒ Sun Management Center¡¢root ËðÆîϯÆÒâüè×ÇøæÒÆøòç̦ȴ"
+msgid "installation directory and own the files in that directory."
+msgstr "ìÑÄ«ÝÂÆ«ûâ¡¢ËäÅâðßÈ´æÚÆøòçĶÎûóòÕù¡¤"
+msgid "Please check your configuration and try again."
+msgstr "îùóôÑçÚÀÎûØÙåôËäÓìæÜ¡¤"
+msgid "Exiting Sun Management Center installation."
+msgstr "á¸ÊÖ Sun Management Center ÇøæÒá£Ê©¡¤"
+msgid "Error: Cannot find pack key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÔïæÒÝÔüÕÇøÇÀõï $2¡¤"
+msgid "There are $2 layers for your selection:"
+msgstr "ÚÀÎûòÙðåÈ´ $2 Ô¶ìÒȹ¡¨"
+msgid "No layers were selected for installation."
+msgstr "ÊôÈ´òÙ̽ÆîÍõÇøæÒÎûìÒȹ¡¤"
+msgid "No layers were found for installation."
+msgstr "ÊÆÄâ̯ÆîÍõÇøæÒÎûìÒȹ¡¤"
+msgid "No packs are defined in the installation configuration file."
+msgstr "ÇøæÒØÙåôóòÄãÆÜÌùåøÔïæÒÝÔüÕ¡¤"
+msgid "Please select the packs to install:"
+msgstr "îùòÙ̽ÓÑÇøæÒÎûÔïæÒÝÔüÕ¡¨"
+msgid "No packs were selected for installation."
+msgstr "ÆÜòÙ̽ÓÑÇøæÒÎûÔïæÒÝÔüÕ¡¤"
+msgid "Error: Cannot find component key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÜÚǵÇøÇÀõï $2¡¤"
+msgid "Error: Cannot find key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÇøÇÀõï $2¡¤"
+msgid "    Component $2 has already been installed."
+msgstr "    ÄØåîÇøæÒÜÚǵ $2¡¤"
+msgid "    The corresponding packages are: $2"
+msgstr "    è×óÜÎûÔïæÒÝÔüÕÒ³¡¨$2"
+msgid "  Invalid source directory."
+msgstr "  àÒÕæÎûËôäãÆøò硤"
+msgid "Source directory: $2"
+msgstr "ËôäãÆøò硨$2"
+msgid "Invalid parameter for productExists\\\(\\\): $2"
+msgstr " productExists ÎûÙ¶í°àÒÕæ\\\(\\\)¡¨$2"
+msgid "Production Environment Installation"
+msgstr "Æíܨô¿èºÇøæÒ"
+msgid "Developer Environment Installation"
+msgstr "âäàõÄ©ÔÞô¿èºÇøæÒ"
+msgid "Cannot find $2."
+msgstr "ÊÆÄâ̯ $2¡¤"
+msgid "Invalid License, please buy a valid license."
+msgstr "ÎêûâàÒÕæ¡¢îùõÕâ¹È´ÕæÎûÎêû⡤"
+msgid "  Invalid entry."
+msgstr "  àÒÕæÎûâúÆø¡¤"
+msgid "  Installation configuration files not found."
+msgstr "  ÊÆÄâ̯ÇøæÒØÙåôóò¡¤"
+msgid "You can install only agent components on Solaris 2.5.1"
+msgstr "ÚÀÆ«ÅèÆ·Çã Solaris 2.5.1 ĸÇøæÒÅîÜ¡á£È¢ÜÚǵ"
+msgid "Select one of the following:"
+msgstr "îùòÙ̽ĶÇÄÄæÄ¡¡¨"
+msgid "\\\(1\\\) Production Environment \\\(PE\\\)"
+msgstr "\\\(1\\\) Æíܨô¿èº \\\(PE\\\)"
+msgid "\\\(2\\\) Developer Environment \\\(DE\\\)"
+msgstr "\\\(2\\\) âäàõÄ©ÔÞô¿èº \\\(DE\\\)"
+msgid "Some components have already been installed in $2"
+msgstr "Çã $2 ÄãÄØåîÇøæÒħÝåÅ¡ÜÚǵ"
+msgid "The target directory will be set to $2"
+msgstr "ÆøíºÆøòçÙòäÄÝÃÌùÒ³ $2"
+msgid "Cannot create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Target directory: $2"
+msgstr "ÆøíºÆøò硨$2"
+msgid "Package $2 is already installed."
+msgstr "ÔïæÒÝÔüÕ $2 ÄØåîÇøæÒ¡¤"
+msgid "Package not found: $2"
+msgstr "ÊÆÄâ̯ÔïæÒÝÔüÕ¡¨$2"
+msgid "Error: Cannot find pack key $2."
+msgstr "òã먡¨ÊÆÄâ̯ÔïæÒÝÔüÕÇøÇÀõï $2¡¤"
+msgid "Pack: $2"
+msgstr "ÔïæÒÝÔüÕ¡¨$2"
+msgid "  Please select the components to install:"
+msgstr "  îùòÙ̽ÓÑÇøæÒÎûÜÚǵ¡¨"
+msgid "    Component $2 is essential and will be automatically installed."
+msgstr "    $2 Ò³ÆÒÓÑÎûÜÚǵÅâÙòÈÜÙ¯ÇøæÒ¡¤"
+msgid "    Component $2 has already been installed."
+msgstr "    ÄØåîÇøæÒÜÚǵ $2¡¤"
+msgid "    The corresponding packages are: $2"
+msgstr "    è×óÜÎûÔïæÒÝÔüÕÒ³¡¨$2"
+msgid "    Component $2 is dependent on: $3"
+msgstr "    ÜÚǵ $2 ëæËíòÊ¡¨$3"
+msgid "    The component\\\(s\\\) will be automatically installed."
+msgstr "    ÜÚǵÙòäÄÈÜÙ¯ÇøæÒ¡¤"
+msgid "  Selected Components: $2"
+msgstr "  ÄØòÙ̽ÜÚǵ¡¨$2"
+msgid "  Selected Components: \\\<default\\\>"
+msgstr "  ÄØòÙ̽ÜÚǵ¡¨\\\<çßÝÃ\\\>"
+msgid "  Warning - Could not find pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ $2 Îû pkgmap óòÕù"
+msgid "Warning - Could not find the pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ÆîÍõ $2 Îû pkgmap óò"
+msgid "Warning - Could not find the pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ÆîÍõ $2 Îû pkgmap óò"
+msgid "Checking disk space..."
+msgstr "ÆßÇãóôÑçéöé÷Ϩâæ..."
+msgid "Insufficient disk space to install Sun Management Center Database Software"
+msgstr "ÊôÈ´ËÍÙÜÎûϨâæÆ«ÇøæÒ Sun Management Center æñÕèÕ»ÝÔüÕ"
+msgid "Sun Management Center DB application software requires: $2 Kbytes"
+msgstr "Sun Management Center DB óÜÆîá£È¢ÝÔüÕÍÔëæϨâ桨$2 KB"
+msgid "The installation directory \\\"$2\\\" has: $3 Kbytes"
+msgstr "ÇøæÒÆøòç \\\"$2\\\" ðßÈ´ÎûϨâ桨$3 KB"
+msgid "Please supply a directory."
+msgstr "îùßÈËòÆøò硤"
+msgid "Insufficient disk space to install Sun Management Center Database Dbfiles"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒ Sun Management Center æñÕèÕ»Îû Db óò"
+msgid "Sun Management Center DB application software requires: $2 Kbytes"
+msgstr "Sun Management Center DB óÜÆîá£È¢ÝÔüÕÍÔëæϨâ桨$2 KB"
+msgid "The installation directory \\\"$2\\\" has: $3 Kbytes"
+msgstr "ÇøæÒÆøòç \\\"$2\\\" ðßÈ´ÎûϨâ桨$3 KB"
+msgid "Please supply a directory."
+msgstr "îùßÈËòÆøò硤"
+msgid "Disk Space Requirements:"
+msgstr "éöé÷ϨâæëæÊ塨"
+msgid "Space required \\\(in $2\\\):  $3 blocks."
+msgstr "ÍÔëæϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Space available \\\(in $2\\\): $3 blocks."
+msgstr "Æ«ÆîϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Insufficient space available in $2"
+msgstr "$2 ÄãÎûÆ«ÆîϨâæÄâËÍ"
+msgid "Here are some possible fixes to alleviate the disk space problem:"
+msgstr "ÅèĶҳƫÆîËôæØÊîéöé÷ϨâæÙÂ÷îÎûÅÉÎΡ¨"
+msgid "\\\"$2\\\" resides on CD \\\#$3."
+msgstr "\\\"$2\\\" ÈíÍõ \\\#$3 ĸ¡¤"
+msgid "New source directory: $2"
+msgstr "ä»ÎûËôäãÆøò硨$2"
+msgid "Invalid directory."
+msgstr "àÒÕæÆøò硤"
+msgid "Installing the components..."
+msgstr "ÆßÇãÇøæÒÜÚǵ..."
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "The package $2 is already installed"
+msgstr "ÄØåîÇøæÒÔïæÒÝÔüÕ $2"
+msgid " Selection Summary"
+msgstr " òÙðåèòÓÑ"
+msgid "Looking for addon products on CD \\\#2..."
+msgstr "ÆßÇãÞòÊÆ CD \\\#2 ĸÎûÏáÅûܨÐÂ..."
+msgid "New source directory: $2"
+msgstr "ä»ÎûËôäãÆøò硨$2"
+msgid "                Sun Management Center 3.0 Addons Product Selection:                 "
+msgstr "                Sun Management Center 3.0 ÏáÅûܨÐÂòÙð塨                 "
+msgid "Installing the product: $2"
+msgstr "ÇøæÒܨС¨$2"
+msgid "Cannot find pkginfo file for package: $2"
+msgstr "ÊÆÄâ̯ÆîÍõÔïæÒÝÔüÕÎû pkginfo óò¡¨$2"
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "Supports: $2 - $3"
+msgstr "ÅÅßΡ¨$2 - $3"
+msgid "Supports: $2"
+msgstr "ÅÅßΡ¨$2"
+msgid "Name: $2"
+msgstr "ÇØꢡ¨$2"
+msgid "Description: $2"
+msgstr "ë©Íü¡¨$2"
+msgid "Unsupported OS version: $2"
+msgstr "ÄâÅÅßÎÎû OS ÎêÆÛ¡¨$2"
+msgid "No components to install."
+msgstr "ÊôÈ´ÓÑÇøæÒÎûÜÚǵ¡¤"
+msgid "A previous version of Sun Management Center exists."
+msgstr "È´÷®Îê Sun Management Center ÇôÇ㡤"
+msgid "Please uninstall it locally in \\\"$2\\\"."
+msgstr "îùÍõÆÛê¦ÙòÆÆæØØæÇøæÒ¡¾Çã \\\"$2\\\" Äã¡¿¡¤"
+msgid "Cannot find $2"
+msgstr "ÊÆÄâ̯ $2"
+msgid "Error copying the locale files to: $2"
+msgstr "îïêûÆÛÄÈë£ËÆóò̯ĶÇÄÈíåôÕëàõÆíòã먡¨$2"
+msgid "Setup script will use English."
+msgstr "ÝÃÌù script ÙòäÄËðÆîÓÁÅÆ¡¤"
+msgid "Please run setup locally in \\\"$2\\\"."
+msgstr "îùÍõÆÛê¦ÙÚÈçÝÃÌù¡¾Çã \\\"$2\\\" Äã¡¿¡¤"
+msgid "ESROOT is not set."
+msgstr "ÆÜÝÃÌù ESROOT¡¤"
+msgid "Invalid directory: $2"
+msgstr "àÒÕæÆøò硨$2"
+msgid "Invalid file: $2"
+msgstr "àÒÕæóòÕù¡¨$2"
+msgid "Both -S and -T options must be specified"
+msgstr "-S êØ -T Ì¥Ô¶òÙâúÝçÆÒâüÑÀÌù"
+msgid "This script will help you to install the Sun Management Center software."
+msgstr "ÆÛ script Ùò̶ɷÚÀÇøæÒ Sun Management Center ÝÔüÕ¡¤"
+msgid "Do you want to install this package now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒȺÔïæÒÝÔüÕ¡©"
+msgid "    Do you want to proceed?"
+msgstr "    ÑÒÉÁÓÑú«úý¡©"
+msgid "  Do you want to install components in layer: $2?"
+msgstr "  ÑÒÉÁÓÑÇãĶÇÄìÒȹÇøæÒÜÚǵ¡¨$2?"
+msgid "  Do you want to install $2?"
+msgstr "  ÑÒÉÁÓÑÇøæÒ $2¡©"
+msgid "Do you want to install the product: $2?"
+msgstr "ÑÒÉÁÓÑÇøæÒȺܨС¨$2?"
+msgid "Do you want to install this package now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒȺÔïæÒÝÔüÕ¡©"
+msgid "Would you like to uninstall it now?"
+msgstr "ÚÀÓÑÇ¡É»ÙòÆÆæØØæÇøæÒãá©"
+msgid "Would you like to save your old data?"
+msgstr "ÚÀÓÑóÃÇô÷®æñÕèãá©"
+msgid "Do you want to run setup now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÙÚÈçÇøæÒ¡©"
+msgid "Please enter the source directory:"
+msgstr "îùòÓÄ«ËôäãÆøò硨"
+msgid "Enter the development system license: "
+msgstr "îùòÓÄ«âäàõË·ÜÓÎêû⡨ "
+msgid "Enter your choice: [1\\\|2]"
+msgstr "îùòÓÄ«ÚÀÎûòÙð塨[1\\\|2]"
+msgid "Please enter the target directory [$2]:"
+msgstr "îùòÓÄ«ÆøíºÆøòç [$2]¡¨"
+msgid "Enter the directory to install the database: "
+msgstr "îùòÓÄ«ÓÑÇøæÒæñÕèÕ»ÎûÆøò硨 "
+msgid "Please insert the second CD or enter the source directory from disk 2 \\\[$2\\\]"
+msgstr "îùßÆÄ«ÜÉĨگ CD ÍÐòÓÄ«ËôÈÜéöé÷ 2 ÎûËôäãÆøòç \\\[$2\\\]"
+msgid "Please enter the new source directory:"
+msgstr "îùòÓÄ«ä»ÎûËôäãÆøò硨"
+msgid "Please enter the OS version for \\\"$2\\\" \\\[$3\\\]: "
+msgstr "îùòÓÄ«ÆîÍõ \\\"$2\\\" Îû OS ÎêÆÛ \\\[$3\\\]¡¨ "
+msgid "Please enter the platform for \\\"$2\\\" \\\[$3\\\]: "
+msgstr "îùòÓÄ«ÆîÍõ \\\"$2\\\" ÎûÆÍƺ \\\[$3\\\]¡¨ "
+msgid "Log file: $2"
+msgstr "ÅÊë¢óò¡¨$2"
+msgid "                         End of Installation                         "
+msgstr "                         ÇøæÒá¸ÊÖ                         "
+msgid "For installing Sun Management Center on $2, we need to know the"
+msgstr "ҳħÙò Sun Management Center ÇøæÒÇã $2 ĸ¡¢Ê¼Ô¯ëæÓÑÏ¡ç¬"
+msgid "operating system on $2. This should be the output of the command"
+msgstr "$2 ĸÎûÉ¢äÆË·ÜÓ¡¤ÆÆóÜæÚÑÒÑÀÅï"
+msgid "/usr/bin/uname -r. The command must be executed on a machine booted with"
+msgstr "/usr/bin/uname -r ÎûòÓÅøá¸Îª¡¤æÚÑÀÅïÆÒâüÇãÅè"
+msgid "disk mounted on $2"
+msgstr "æÒç¥Íõ $2 Îûéöé÷ÚöÙ¯ÎûçÙæªÄ¸ÙÚÈ硤"
+msgid "For installing Sun Management Center on $2, we need to know the"
+msgstr "ҳħÙò Sun Management Center ÇøæÒÇã $2 ĸ¡¢Ê¼Ô¯ëæÓÑÏ¡ç¬"
+msgid "machine type of machine whose root filesystem is or will be mounted on $2."
+msgstr "̧óòÕùË·ÜÓÄØåîÍÐÉ»ÙòæÒç¥Çã $2 ĸÄæçÙæªÎûùËÐΡ¤"
+msgid "This should be the output of the following command"
+msgstr "ÆÆóÜæÚÑÒĶÓòÑÀÅïÎûòÓÅøá¸Îª¡¨"
+msgid "    /usr/platform/PLATFORM/sbin/prtdiag \\\| /usr/bin/head -1 \\\| /usr/bin/cut -f2 -d:"
+msgstr "    /usr/platform/PLATFORM/sbin/prtdiag \\\| /usr/bin/head -1 \\\| /usr/bin/cut -f2 -d:"
+msgid "Please note that the above commands must be executed on the target machine."
+msgstr "îùÎÃãô¡¢Ä¸ÓÝÑÀÅïÆÒâüÇãÆøíºçÙæªÄ¸ÙÚÈ硤"
+msgid "Would you like to migrate your 2.x data?"
+msgstr "ÚÀÓÑÜÃ÷Ë 2.x ÎûæñÕèãá©"
+msgid "A previous version of Sun Management Center Data exists."
+msgstr "È´÷®Îê Sun Management Center ÎûæñÕèÇôÇ㡤"
+msgid "This will remove all files under $2. If you have any custom"
+msgstr "ÝÕÙòÜÃØæ $2 ĶÎûÍÔÈ´óòÕù¡¤ÇñΪÚÀÇãÝÕÔ¶ÆøòçĶȴ"
+msgid "scripts under this directory, please move them to an alternate location"
+msgstr "ǶÈôÈÜÓÔÎû scripts¡¢îùÇãú«úýâÐÈçЩÙòÆÆÔ¯"
+msgid "before proceeding."
+msgstr "ÜÃ̯ßåÅîÈíåô¡¤"
+msgid "Do you wish to continue with the removal of the existing 2.x data"
+msgstr "ÑÒÉÁÓÑú«úýâÐÈçܢȴ 2.x æñÕèÎûÜÃØæ"
+#
+#===============================
+# <WS>/packages/Setup/es-setup
+#===============================
+msgid "Setup of $2 component failed."
+msgstr "àÒÎÎÝÃÌù $2 ÜÚǵ¡¤"
+msgid "Exiting setup."
+msgstr "á¸ÊÖÝÃÌù¡¤"
+msgid "The Sun Management Center Setup File \\\($2\\\)$3"
+msgstr "Sun Management Center ÝÃÌùóò \\\($2\\\)$3"
+msgid "    is missing. Cannot Setup Sun Management Center $2."
+msgstr "    òÜÆ¡¤àÒÎÎÝÃÌù Sun Management Center $2¡¤"
+msgid "Initiating setup for Sun Management Center $2 Component."
+msgstr "ÏÏÌî Sun Management Center $2 ÜÚǵ ÎûÝÃÌù¡¤"
+msgid "Please read the release notes to configure the device type."
+msgstr "îùïåûôàõÈçë©ÍüÅèØÙåôæÒåôùËÐΡ¤"
+msgid "Using log file: $2."
+msgstr "ËðÆîÅÊë¢óò¡¨$2."
+msgid "   Sun Management Center Setup Program"
+msgstr "   Sun Management Center ÝÃÌùá£È¢"
+msgid "This program does setup of Sun Management Center components that are installed on your system."
+msgstr "Ⱥá£È¢ÙòÝÃÌùË·ÜÓĸÄØÇøæÒÎû Sun Management Center ÜÚǵ¡¤"
+msgid "Checking for Sun Management Center components installed on your system."
+msgstr "ÆßÇãóôÑçË·ÜÓĸÄØÇøæÒÔáËè Sun Management Center ÜÚǵ¡¤"
+msgid "You Do not have any Sun Management Center components installed."
+msgstr "ÚÀÆÜÇøæÒǶÈô Sun Management Center ÜÚǵ¡¤"
+msgid "You may want to run setup after installing"
+msgstr "ÇøæÒ Sun Management Center ÜÚǵÄæÑ¥¡¢Æ«×äÓÑ"
+msgid "    the Sun Management Center components."
+msgstr "    ÙÚÈçÝÃÌùá£È¢¡¤"
+msgid "You have the following Sun Management Center components installed"
+msgstr "ÚÀÄØÇøæÒħĶÇÄ Sun Management Center ÜÚǵ"
+msgid "             Sun Management Center Server"
+msgstr "             Sun Management Center ÈùΤðÂ"
+msgid "             Sun Management Center Agent"
+msgstr "             Sun Management Center ÅîÜ¡á£È¢"
+msgid "             Sun Management Center Console"
+msgstr "             Sun Management Center ÅäÚÕƺ"
+msgid "This script will perform the setup for each of these components"
+msgstr "ÆÛ Script ÙòÒ³ÝÕËèÜÚǵÙÚÈçÝÃÌùá£Ê©"
+msgid "Core Sun Management Center setup complete."
+msgstr "ÕøÅÀ Sun Management Center ÝÃÌùÉùÜ«¡¤"
+msgid "Setup of Sun Management Center addons incomplete. Exiting"
+msgstr " Sun Management Center ÏáÅûÔïæÒÝÔüÕÎûÝÃÌùÆÜÉùÈ©¡¤ Exiting"
+msgid "Sun Management Center setup complete."
+msgstr " Sun Management Center ÝÃÌùÉùÜ«¡¤"
+msgid "Problems occured with setup of the following addons: $2"
+msgstr "ÝÃÌùĶÇÄÏáÅûÔïæÒÝÔüÕÕëàõÆíÙÂ÷$2"
+msgid "Setup log stored in $2"
+msgstr "ÝÃÌùÅÊë¢óÃÇôÇã $2 Äã"
+msgid "A minimum of 256 MB RAM is required to run Sun Management Center."
+msgstr "ÈÝÅ·ëæÈ´ 256 MB Îû RAM Äß×äÙÚÈç Sun Management Center¡¤"
+msgid "Current system has $2 MB RAM."
+msgstr "ÆøЩ˷ÜÓ̦ȴ $2 MB Îû RAM¡¤"
+msgid "Can not continue to setup Sun Management Center DB."
+msgstr "àÒÎÎú«úýÝÃÌù Sun Management Center DB¡¤"
+msgid "Checking /etc/system file..."
+msgstr "ÆßÇãóôÑç /etc/system óò..."
+msgid "Checking memory available..."
+msgstr "ÆßÇãóôÑçÆ«ÆîØ´ðÙüÕ..."
+msgid "Checking /etc/system file error. It can not be updated."
+msgstr "ÆßÇãóôÑç /etc/system óòÎûòã먡¤ It can not be updated."
+msgid "The /etc/system file needs to be changed for Sun Management Center DB requirements."
+msgstr "ëæüÈÊÕ /etc/system óòÅèÜÊÇÙ Sun Management Center DB ÎûëæÊ塤"
+msgid "Backing up /etc/system to /etc/system.SunMCDB.backup"
+msgstr "ÆßÇãެǹ /etc/system to /etc/system.SunMCDB.backup"
+msgid "/etc/system file has not been changed."
+msgstr "ÌþÆÜüÈÊÕ /etc/system file óò¡¤"
+msgid "In order for kernel variable changes to take effect, this "
+msgstr "Ò³ËðÅäÓÑüÈí°ÎûüÈÊÕÆíÕæ¡¢ÆÒâüÓìä»ÚöÙ¯ÝÕÝå"
+msgid "machine must be rebooted.  You must reboot this machine now"
+msgstr "çÙ檡¤ÚÀÆÒâüÇ¡É»Óìä»ÚöÙ¯ÝÕÝåçÙæª"
+msgid "and then run the setup again."
+msgstr "àÓÑ¥ÇÂÙÚÈçÝÕÔ¶ÝÃÌùá£Ê©¡¤"
+msgid "Cannot create link $2 to directory $3"
+msgstr "àÒÎÎÐúÇ¡Ý×Í»Æøòç $3 Îûù¹á¸ $2"
+msgid "Sun Management Center DB setup cannot continue."
+msgstr "Sun Management Center DB ÝÃÌùá£Ê©àÒÎÎú«úý¡¤"
+msgid "Error changing ownership of $2 to root.  Installation cannot continue."
+msgstr "Ùò $2 ÎûÍÔÈ´ûâüÈÒ³úè root ÎûðçÉ¢àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Configuring Sun Management Center DB listener and service files..."
+msgstr "ÆßÇãØÙåô Sun Management Center DB ÚÙûïÅü×äêØΤ٭óò..."
+msgid "The default listener port $2 for Sun Management Center DB has already been used."
+msgstr "Sun Management Center DB ÎûçßÝÃÚÙûïÙÕ $2 ÄØÝ·ËðÆ"
+msgid "Please input another port number for Sun Management Center DB listener."
+msgstr "îùòÓīƶġԶÆîÍõ Sun Management Center DB ÚÙûïÅü×äÎûÙÕæÀ¡¤"
+msgid "Error in resetting the configuration files for Sun Management Center DB."
+msgstr "ÓìÝÃÆîÍõ Sun Management Center DB ÎûØÙåôóòÕëàõÆíòã먡¤"
+msgid "Linking database, Please wait"
+msgstr "ÆßÇãÝÙá¸æñÕèÕ»¡¢îùá¡Ô·"
+msgid "in the event of error, see /tmp/relink.log"
+msgstr "Çãòãë¨ÎûËçǵÄã¡¢îùÙ¶ÈÓ /tmp/relink.log"
+msgid "Create ora passord file"
+msgstr "ÐúÇ¡ ora Ùïî£óò"
+msgid "/usr/bin/make is needed on Sun Management Center server machine. The current"
+msgstr "Sun Management Center ÈùΤðÂçÙæªÄ¸ëæÓÑÈ´ /usr/bin/make¡¤ÆøЩ"
+msgid "failed to create internal user password file : $2"
+msgstr "àÒÎÎÐúÇ¡ÄùÝåËðÆîϯÙïî£óò¡¨$2"
+msgid "does not have it. Please make this file available and run setup again"
+msgstr "ÊôÈ´¡¤îùËðÝÕÔ¶óòÕùüÈҳƫÆî¡¢àÓÑ¥ÇÂÙÚÈçÝÃÌùá£Ê©"
+msgid "execution of make -f ins_net_server.mk install failed"
+msgstr "make -f ins_net_server.mk install ÎûÙÚÈçÆÂÚõ"
+msgid "see /tmp/make.log file for details"
+msgstr "îùÙ¶ÈÓ /tmp/make.log óòÄãÎûæÛÜØæñع"
+msgid "Database setup failed : $2 does not exist"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨$2 ÄâÇôÇã"
+msgid "Database setup failed : mkaggregatefiles.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨mkaggregatefiles.ksh ÙÚÈçÆÂÚõ"
+msgid "Database setup failed : db-start failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨db-start ÙÚÈçÆÂÚõ"
+msgid "Please wait, Sun Management Center database setup in progress. It may take 15 to 20 minutes"
+msgstr "îùá¡Ô·¡¢ÆßÇãâÐÈç Sun Management Center æñÕèÕ»ÝÃÌù¡¤Æ«×äëæÏÄĸ 15 ̯ 20 Å¡úÌ"
+msgid "Database setup failed : build-smc-oracle-recovery.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨build-smc-oracle-recovery.ksh ÙÚÈçÆÂÚõ"
+msgid "Please wait, Sun Management Center database setup in progress. It may take 15 to 20 minutes"
+msgstr "îùá¡Ô·¡¢ÆßÇãâÐÈç Sun Management Center æñÕèÕ»ÝÃÌù¡¤Æ«×äëæÏÄĸ 15 ̯ 20 Å¡úÌ"
+msgid "Database setup failed : build-smc-oracle-recovery.ksh failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨build-smc-oracle-recovery.ksh ÙÚÈçÆÂÚõ"
+msgid "Found symon 2.x import data"
+msgstr "ÊÆ̯ symon 2.x ã¾Ä«æñÕè"
+msgid "about to import symon 2.x data"
+msgstr "ÙòÓÑã¾Ä« symon 2.x æñÕè"
+msgid "cannot find the 2.x import script file $2"
+msgstr "ÊÆÄâ̯ 2.x ã¾Ä« Script óò $2"
+msgid "will not import symon 2.x data"
+msgstr "ÙòÄâã¾Ä« symon 2.x æñÕè"
+msgid "Database setup failed : db-stop failed"
+msgstr "æñÕèÕ»ÝÃÌùÆÂÚõ¡¨db-stop ÙÚÈçÆÂÚõ"
+msgid "A problem occured with $2 setup.  Do you want to continue?"
+msgstr "ÝÃÌù $2 ÕëÅøÜ¢ÙÂ÷ÑÒÉÁÓÑú«úý¡©"
+msgid "    Do you wish to update /etc/system file?"
+msgstr "    ÑÒÉÁÓÑÊÕä» /etc/system óò¡©"
+msgid "A problem occured with $2 setup.  Do you want to continue?"
+msgstr "ÝÃÌù $2 ÕëÅøÜ¢ÙÂ÷ÑÒÉÁÓÑú«úý¡©"
+msgid "    Do you wish to keep any existing topology and event data"
+msgstr "    ÑÒÉÁÓÑÏñÖçǶÈôÜ¢ÇôÎûÍßðôůËçǵæñÕè"
+msgid "    Do you want to perform a symon 2.x data import?"
+msgstr "    ÑÒÉÁÓÑÙÚÈç symon 2.x æñÕèÎûã¾Ä«¡©"
+msgid "Do you want to start Sun Management Center agent and server components now"
+msgstr "ÑÒÉÁÇ¡É»ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢êØÈùΤðÂÜÚǵ"
+msgid "Do you want to start Sun Management Center agent now"
+msgstr "ÑÒÉÁÇ¡É»ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢"
+msgid "Error: It seems the file $2 is not writable, could not update the file."
+msgstr "òã먡¨óòÕù $2 ÈýÅçÄâ×äìÑÄ«¡¢àÒÎÎÊÕä»óòÕù¡¤"
+msgid "Configuring the system for setup, please wait."
+msgstr "ÆßÇãØÙåôË·ÜÓÅèÏíÝÃÌù¡¢îùá¡Ô·¡¤"
+#
+#===============================
+# <WS>/packages/Setup/db-start
+#===============================
+msgid "Listener and Database are up and running\n"
+msgstr "ÚÙûïÅü×äêØæñÕèÕ»ÄØâûɳçªÉ¢\n"
+msgid "the current sid \n"
+msgstr "ÆøЩÎû sid \n"
+msgid "the current orahome \n"
+msgstr "ÆøЩÎû orahome \n"
+msgid "unknown system type, exiting......................\n"
+msgstr "Ë·ÜÓùËÐÎÄâÍü¡¢á¸ÊÖÄã......................\n"
+msgid "getHostName: failed to obtain current host from hostname command\n"
+msgstr "getHostName¡¨àÒÎÎÚ· hostname ÑÀÅï̽ڵÆøЩÎûÅäñ¢\n"
+msgid "current host : $2\n"
+msgstr "ÆøЩÎûÅäñ¢¡¨$2\n"
+msgid "getUserName: failed to obtain user name from id command\n"
+msgstr "getUserName¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîϯÇØê¢\n"
+msgid "current user name : $2\n"
+msgstr "ÆøЩÎûËðÆîϯÇØꢡ¨$2\n"
+msgid "getUserGroup: failed to obtain user group from id command\n"
+msgstr "getUserGroup¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîåúÜÚ\n"
+msgid "current user group : $2\n"
+msgstr "ÆøЩÎûËðÆîϯåúÜÚ¡¨$2\n"
+msgid "path_app : $2\n"
+msgstr "path_app :$2\n"
+msgid "found $2 on path in $3\n"
+msgstr "Çã $3 ÎûæûÕÀÄãÊÆ̯ $2\n"
+msgid "can not find $2 on path, exiting.......................\n"
+msgstr "æûÕÀĸÊÆÄâ̯ $2¡¢á¸ÊÖÄã.......................\n"
+msgid "verifyDatabaseUp: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseUp¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseUp: instance is executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseUp: instance is not executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseDown¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseDown: instance is executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: instance is not executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyListenerUp: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerUp¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerUp: listener $2 is execution\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerUp: listener $2 is not execution\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyListenerDown: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerDown¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerDown: listener $2 is execution\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerDown: listener $2 is not execution\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from df\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ· df ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from df\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ· df ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: failed to obtain filesystem info from mount comma\n"
+msgstr "verifyFilesystemPerm¡¨àÒÎÎÚ·æÒç¥ comma ̽ڵóòÕùË·ÜÓÎûæñع\n"
+msgid "verifyFilesystemPerm: filesystem $2 is not mounted setuid\n"
+msgstr "verifyFilesystemPerm¡¨óòÕùË·ÜÓ $2 ÆÜæÒç¥ setuid\n"
+msgid " must re-mount the filesystem with setuid enabled\n"
+msgstr " ÆÒâüÇã setuid ÚöÙ¯ÕëÓìä»æÒç¥óòÕùË·ÜÓ\n"
+msgid "verifyFilesystemPerm: filesystem $2 is mounted setuid, OK\n"
+msgstr "verifyFilesystemPerm¡¨óòÕùË·ÜÓ $2 ÆÜæÒç¥ setuid¡¢íýÌù\n"
+msgid "verifyListenerStatus: failed to obtain listener status for alias: $2\n"
+msgstr "verifyListenerStatus¡¨àÒÎÎÒ³ÅèĶɱÇØ̽ڵÚÙûïðÂÎíè表$2\n"
+msgid "verifyListenerStatus: listener status is good for alias: $2\n"
+msgstr "verifyListenerStatus¡¨ÆîÍõÅèĶɱÇØÄæÚÙûïðÂÎíèèËÀÇ$2\n"
+msgid "verifyListenerStatus: listener status is not good for alias: $2\n"
+msgstr "verifyListenerStatus¡¨ÆîÍõÅèĶɱÇØÄæÚÙûïðÂÎíèèÄâË$2\n"
+msgid "the specified path \\\($2\\\) does not exist\n"
+msgstr "ÑÀÌùæûÕÀ \\\($2\\\) ÄâÇôÇã\n"
+msgid "tmpdir \n"
+msgstr "tmpdir \n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain accessperms from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵÇô̽ûâÓ$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain username from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵËðÆîϯÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain groupname from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵåúÜÚÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: access perms for \\\($2\\\) is not at least 755\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÆîÍõ \\\($2\\\) ÎûÇô̽ûâÓîÄâÑÒ޲ŷ 755\n"
+msgid "verifyGoodOraclePermOwnership: access perms ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨Çô̽ûâÓîÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: owner \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûÍÔȴϯ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: owner ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÍÔȴϯÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: group \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûåúÜÚ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: group ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨åúÜÚÆßÚ¦\n"
+msgid "**** directory : $2 does not exist\n"
+msgstr "**** Æøò硨$2 ÄâÇôÇã\n"
+msgid "loop: current new $2\n"
+msgstr "ØÏæû¡¨ÆøЩä»Îû $2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain accessperms from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵÇô̽ûâÓ$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain username from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵËðÆîϯÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: failed to obtain groupname from ls command for : $2\n"
+msgstr "verifyGoodOraclePermOwnership¡¨àÒÎÎÆñ ls ÑÀÅïÒ³ÅèĶâúÆø̽ڵåúÜÚÇØꢡ¨$2\n"
+msgid "verifyGoodOraclePermOwnership: access perms for \\\($2\\\) is not at least 755\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÆîÍõ \\\($2\\\) ÎûÇô̽ûâÓîÄâÑÒ޲ŷ 755\n"
+msgid "verifyGoodOraclePermOwnership: access perms ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨Çô̽ûâÓîÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: owner \\\($listuser\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûÍÔȴϯ \\\($listuser\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: owner ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨ÍÔȴϯÆßÚ¦\n"
+msgid "verifyGoodOraclePermOwnership: group \\\($2\\\) of $3 is not $4\n"
+msgstr "verifyGoodOraclePermOwnership¡¨$3 ÎûåúÜÚ \\\($2\\\) ÄâÑÒ $4\n"
+msgid "verifyGoodOraclePermOwnership: group ok\n"
+msgstr "verifyGoodOraclePermOwnership¡¨åúÜÚÆßÚ¦\n"
+msgid "**** file : $2 does not exist\n"
+msgstr "**** óò¡¨$2 ÄâÇôÇã\n"
+msgid "verifySharedMemUsage: failed to obtain ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨àÒÎÎ̽ڵ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifySharedMemUsage: found ipcs \\\(shared memory segment\\\) info user : $2, group : $3, \\\(shid\\\) : $4\n"
+msgstr "verifySharedMemUsage¡¨ÊÆ̯ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3, \\\(shid\\\)¡§$4\n"
+msgid "verifySharedMemUsage: did find ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨íýèÒÊÆ̯ ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifySharedMemUsage: did not find any ipcs \\\(shared memory segment\\\) info user : $2, group : $3\n"
+msgstr "verifySharedMemUsage¡¨ÊÆÄâ̯ǶÈô ipcs \\\(ÇÁËêØ´ðÙüÕÙ´Ñô\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifyActiveSemaphoresUsage: failed to obtain ipcs \\\(active semaphores\\\) info user : $2, group : $3\n"
+msgstr "verifyActiveSemaphoresUsage¡¨àÒÎÎ̽ڵ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "verifyActiveSemaphoresUsage: found ipcs \\\(active semaphores\\\) info user : $2, group : $3, \\\(semid\\\) : $4\n"
+msgstr "verifyActiveSemaphoresUsage¡¨ÊÆ̯ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3, \\\(semid\\\)¡§$4\n"
+msgid "verifyActiveSemaphoresUsage: did find ipcs \\\(active semaphores\\\) info user : $2, group : \n"
+msgstr "verifyActiveSemaphoresUsage¡¨íýèÒÊÆ̯ ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨\n"
+msgid "verifyActiveSemaphoresUsage: did not find any ipcs \\\(active semaphores\\\) info user : $2, group : $3\n"
+msgstr "verifyActiveSemaphoresUsage¡¨ÊÆÄâ̯ǶÈô ipcs \\\(É¢ÆîÄãé¡æÀ\\\) æñعËðÆîϯ¡¨$2¡£åúÜÚ¡¨$3\n"
+msgid "startListener: failed to start listener, alias: $2\n"
+msgstr "startListener¡¨àÒÎÎÚöÙ¯ÚÙûïð¡¢É±ÇØ¡¨$2\n"
+msgid "startListener: listener started, alias: $2\n"
+msgstr "startListener¡¨ÚÙûïðÂÄØÚöÙ¯¡¢É±ÇØ¡¨$2\n"
+msgid "stopListener: failed to stop listener, alias: $2\n"
+msgstr "stopListener¡¨àÒÎÎØôÅÏÚÙûïð¡¢É±ÇØ¡¨$2\n"
+msgid "stopListener: listener stopped, alias: $2\n"
+msgstr "stopListener¡¨ÚÙûïðÂÄØØôÅÏ¡¢É±ÇØ¡¨$2\n"
+msgid "removing existing listener log file $2"
+msgstr "ÜÃØæܢȴÚÙûïðÂÅÊë¢óò $2"
+msgid "execution of verifySetuidFilesystemPerm $2 fail\n"
+msgstr "verifySetuidFilesystemPerm $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "exiting........................\n"
+msgstr "á¸ÊÖÄã........................\n"
+msgid "execution of $2 start $3 fail\n"
+msgstr "$2 ÚöÙ¯ $3 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of verifyListenerUp $2 fail\n"
+msgstr "verifyListenerUp $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of verifyGoodListenerStatus $2 fail\n"
+msgstr " verifyGoodListenerStatus $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "execution of sqlplus using @$2 fail\n"
+msgstr "ɳÆî @$2 ÙÚÈç sqlplus ÆÂÚõ\n"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "execution of verifyDatabaseUp $2 fail\n"
+msgstr "verifyDatabaseUp $2 ÎûÙÚÈçÆÂÚõ\n"
+msgid "Listener and Database are up and running\n"
+msgstr "ÚÙûïÅü×äêØæñÕèÕ»ÄØâûɳçªÉ¢\n"
+#
+#================================
+# <WS>/packages/Setup/es-device
+#================================
+msgid "Usage: $2 -ad Filename"
+msgstr "ÆîÎΡ¨$2 -ad óòÕùÇØê¢"
+msgid "   where the options represent:"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨"
+msgid "     a : Add new device"
+msgstr "     a¡¨ä»ìÁä»æÒåô"
+msgid "     d : Delete device"
+msgstr "     d¡¨É´ØææÒåô"
+msgid "This action is limited to superuser only."
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤"
+msgid "Exiting $2."
+msgstr "ÆßÇãá¸ÊÖ $2¡¤"
+msgid "create_node_family_file: Error! Invalid node object type $2"
+msgstr "create_node_family_file¡¨òã먡ªåçöµÎìǵùËÐÎ $2 àÒÕæ"
+msgid "set_global_variable: Value not specified for $2"
+msgstr "set_global_variable¡¨ÆÜÑÀÌùÆîÍõ $2 ÎûÔ«"
+msgid "set_global_variable: Invalid parameter $2"
+msgstr "set_global_variable¡¨Ù¶í°àÒÕæ $2"
+msgid "delete_node: Invalid data in input file"
+msgstr "delete_node¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_node: $2 does not exist, verify input"
+msgstr "delete_node¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_group: Invalid data in input file"
+msgstr "delete_group¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_group: $2 does not exist, verify input"
+msgstr "delete_group¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_group: Invalid group type $2"
+msgstr "delete_group¡¨åúÜÚùËÐÎ $2 àÒÕæ"
+msgid "delete_segment: Invalid data in input file"
+msgstr "delete_segment¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_segment: $2 does not exist, verify input"
+msgstr "delete_segment¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "delete_segment: Invalid segment type $2"
+msgstr "delete_segment¡¨Ù´ÑôùËÐÎ $2 àÒÕæ"
+msgid "delete_composite: Invalid data in input file"
+msgstr "delete_composite¡¨òÓÄ«óòÄãÎûæñÕèàÒÕæ"
+msgid "delete_composite: $2 does not exist, verify input"
+msgstr "delete_composite¡¨$2 ÄâÇôÇã¡¢ÑçüÓòÓÄ«"
+msgid "validate_node_object_type: $2 or $3 exists"
+msgstr "validate_node_object_type¡¨$2 ÍÐ $3 ÇôÇã"
+msgid "validate_i18n_key: Node object type exists in $2 line $3"
+msgstr "validate_i18n_key¡¨åçöµÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_i18n_key: Invalid i18n key: $2"
+msgstr "validate_i18n_key¡¨i18n õïàÒÕ桨$2"
+msgid "validate_group_i18n_type: $2 is invalid group type"
+msgstr "validate_group_i18n_type¡¨$2 ÑÒàÒÕæÎûåúÜÚùËÐÎ"
+msgid "validate_group_i18n_key: Group object type exists in $2 line $3"
+msgstr "validate_group_i18n_key¡¨åúÜÚÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_segment_i18n_type: $2 is invalid segment type"
+msgstr "validate_segment_i18n_type¡¨$2 ÑÒàÒÕæÎûÙ´ÑôùËÐÎ"
+msgid "validate_segment_i18n_key: Segment object type exists in $2 line $3"
+msgstr "validate_segment_i18n_key¡¨Ù´ÑôÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_composite_i18n_key: Composite object type exists in $2 line $3"
+msgstr "validate_composite_i18n_key¡¨ÜÚÇÙÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_properties_file: Invalid property file name. Must be $2"
+msgstr "validate_properties_file¡¨úèÍÌóòÇØê¢àÒÕ桤ÆÒâüÑÒ $2"
+msgid "validate_search_parameter: Invalid sysoid value $2"
+msgstr "validate_search_parameter¡¨sysoid Ô« $2 àÒÕæ"
+msgid "validate_icon_file: Check if file exists and permissions"
+msgstr "validate_icon_file¡¨óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "validate_hardware_module: Hardware Module name does not exist"
+msgstr "validate_hardware_module¡¨àýüÕí¼ÜÚÇØê¢ÄâÇôÇã"
+msgid "validate_group_object_type: Invalid object type $2"
+msgstr "validate_group_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_group_object_type: Group object type exists in $2 line $3"
+msgstr "validate_group_object_type¡¨åúÜÚÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_segment_object_type: Invalid object type $2"
+msgstr "validate_segment_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_segment_object_type: Segment object type exists in $2 line $3"
+msgstr "validate_segment_object_type¡¨Ù´ÑôÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "add_node: Invalid node type $2"
+msgstr "add_node¡¨åçöµùËÐÎ $2 àÒÕæ"
+msgid "add_node: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_node¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_group: Invalid group type $2"
+msgstr "add_group¡¨åúÜÚùËÐÎ $2 àÒÕæ"
+msgid "add_group: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_group¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_segment: Invalid segment type $2"
+msgstr "add_segment¡¨Ù´ÑôùËÐÎ $2 àÒÕæ"
+msgid "add_segment: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_segment¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "add_composite: Cannot copy $2 file, check if file exists and permissions"
+msgstr "add_composite¡¨àÒÎÎîïêû $2 óò¡¢óôÑçóòÕùÑÒÉÁÇôÇãůûâÓî"
+msgid "Package SUNWessrv is not installed on this system"
+msgstr "Ⱥ˷ÜÓÆÜÇøæÒ SUNWessrv ÔïæÒÝÔüÕ"
+msgid "Unable to create logfile $2"
+msgstr "àÒÎÎÐúÇ¡ÅÊë¢óò $2"
+msgid "$2 file does not exist"
+msgstr "$2 óòÄâÇôÇã"
+msgid "$2 file does not have read permissions"
+msgstr "$2 óòÄâ̦ûô̽ûâÓî"
+msgid "Invalid Operation: Operation not supported"
+msgstr "ðçÉ¢àÒÕ桨ðçÉ¢ÄâÌ¿ÅÅßÎ"
+msgid "process_delete_data: Object type $2 missing in data file"
+msgstr "process_delete_data¡¨æñÕèóòÄã×ÍÅ·ÎìǵùËÐÎ $2"
+msgid "validate_monitor_via : $2 is invalid type"
+msgstr "validate_monitor_via¡¨$2 ÑÒàÒÕæÎûùËÐÎ"
+msgid "validate_node_type:$2 is invalid node type"
+msgstr "validate_node_type¡¨$2 ÑÒàÒÕæÎûùËÐÎ"
+msgid "validate_node_object_type: Invalid object type $2"
+msgstr "validate_node_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_i18n_key: Invalid object type $2"
+msgstr "validate_i18n_key¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "add_device: Invalid object type $2"
+msgstr "add_device¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_node_object_type: Node object type exists in $2 line $3"
+msgstr "validate_node_object_type¡¨åçöµÎìǵùËÐÎÇôÇã $2 ÎûÈç $3"
+msgid "validate_object_type: Invalid object type $2"
+msgstr "validate_object_type¡¨ÎìǵùËÐÎ $2 àÒÕæ"
+msgid "validate_group_type: $2 is invalid group type"
+msgstr "validate_group_type¡¨$2 ÑÒàÒÕæÎûåúÜÚùËÐÎ"
+msgid "validate_segment_type: Invalid value $2 for Segment_type"
+msgstr "validate_segment_type¡¨Segment_type ÎûÔ« $2 àÒÕæ"
+msgid "     (for example: ./es-device -a /tmp/userdata)"
+msgstr "     (ËóÇñ¡¨./es-device -a /tmp/userdata)"
+msgid "     (for example: ./es-device -d /tmp/userdata)"
+msgstr "     (ËóÇñ¡¨./es-device -d /tmp/userdata)"
+msgid "validate_user_name: No value specified for User_name"
+msgstr "validate_user_name¡¨ÆÜÑÀÌùÆîÍõ User_name ÎûÔ«"
+msgid "validate_node_object_type: No value specified for Node_object_type"
+msgstr "validate_node_object_type¡¨ÆÜÑÀÌùÆîÍõNode_object_type ÎûÔ«"
+msgid "validate_i18n_key: No value specified for i18n_key"
+msgstr "validate_i18n_key¡¨ÆÜÑÀÌùÆîÍõ i18n_key ÎûÔ«"
+msgid "validate_properties_file: No value specified for Properties_file"
+msgstr "validate_properties_file¡¨ÆÜÑÀÌùÆîÍõ Properties_file ÎûÔ«"
+msgid "validate_search_parameter: No value specified for Search_parameter"
+msgstr "validate_search_parameter¡¨ÆÜÑÀÌùÆîÍõ Search_parameter ÎûÔ«"
+msgid "validate_icon_file: No value specified for icon"
+msgstr "validate_icon_file¡¨ÆÜÑÀÌùÆîÍõè·ÆüÎûÔ«"
+msgid "validate_segment_object_type: No value specified for Segment object type"
+msgstr "validate_segment_object_type¡¨ÆÜÑÀÌùÆîÍõÙ´ÑôÎìǵùËÐÎÎûÔ«"
+#
+#==============================
+# <WS>/packages/Setup/db-stop
+#==============================
+msgid "getHostName: failed to obtain current host from hostname comma"
+msgstr "getHostName¡¨àÒÎÎÚ· hostname ÑÀÅï̽ڵÆøЩÎûÅäñ¢"
+msgid "current host : $2\n"
+msgstr "ÆøЩÎûÅäñ¢¡¨$2\n"
+msgid "getUserName: failed to obtain user name from id comma\n"
+msgstr "getUserName¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîϯÇØê¢\n"
+msgid "current user name : $2\n"
+msgstr "ÆøЩÎûËðÆîϯÇØꢡ¨$2\n"
+msgid "getUserGroup: failed to obtain user group from id comma\n"
+msgstr "getUserGroup¡¨àÒÎÎÚ· id ÑÀÅï̽ڵËðÆîåúÜÚ\n"
+msgid "current user group : $2\n"
+msgstr "ÆøЩÎûËðÆîϯåúÜÚ¡¨$2\n"
+msgid "verifyDatabaseUp: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseUp¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseUp: instance is executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseUp: instance is not executing\n"
+msgstr "verifyDatabaseUp¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: failed to obtain instance process info from ps\n"
+msgstr "verifyDatabaseDown¡¨àÒÎÎÚ· ps ̽ڵèÒËóݨܡá£Ê©\n"
+msgid "verifyDatabaseDown: instance is executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÆßÇãÙÚÈç\n"
+msgid "verifyDatabaseDown: instance is not executing\n"
+msgstr "verifyDatabaseDown¡¨èÒËóÄâÇãÙÚÈç\n"
+msgid "verifyListenerUp: failed to obtain listener process info from ps\n"
+msgstr "verifyListenerUp¡¨àÒÎÎÚ· ps ̽ڵÚÙûïÅü×äݨܡæñع\n"
+msgid "verifyListenerUp: listener $2 is executing\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerUp: listener $2 is not executing\n"
+msgstr "verifyListenerUp¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "verifyListenerDown: failed to obtain listener process info from \n"
+msgstr "verifyListenerDown¡¨àÒÎÎ̽ڵÚÙûïÅü×äݨܡæñع¡¾Ú·¡¿\n"
+msgid "verifyListenerDown: listener $2 is executing\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÆßÇãÙÚÈç\n"
+msgid "verifyListenerDown: listener $2 is not executing\n"
+msgstr "verifyListenerDown¡¨ÚÙûïð $2 ÄâÇãÙÚÈç\n"
+msgid "the file $2 does not exist, exiting........................"
+msgstr "óòÕù $2 ÄâÇôÇã¡¢á¸ÊÖÄã........................"
+msgid "performing a (shutdown immediate)......"
+msgstr "ÆßÇãÙÚÈ硾ǡɻùÃñ¢¡¿......"
+msgid "execution of $2 using \\@$3 failed"
+msgstr "ËðÆî \\@$3 ÙÚÈç $2 ÆÂÚõ"
+msgid "exiting..........................\n"
+msgstr "á¸ÊÖÄã........................\n"
+msgid "unable to perform normal shutdown, executing a shutdown abort"
+msgstr "àÒÎÎÙÚÈçÆßÚ¦ùÃñ¢¡¢ÙÚÈçùÃñ¢ÄãöË"
+msgid "execution of $2 using adhoc shutdown-abort failed"
+msgstr "ËðÆî adhoc shutdown-abort ÙÚÈç $2 ÆÂÚõ"
+msgid "execution of $2 stop $3 failed"
+msgstr "$2 ØôÅÏ $3 ÎûÙÚÈçÆÂÚõ"
+msgid "sqlerror code = $2\n"
+msgstr "sqlerror î£ =$2\n"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "execution of sqlplus using $2 fail\n"
+msgstr "ËðÆî $2 ÙÚÈç sqlplus ÆÂÚõ\n"
+msgid "can not find $2 on path, exiting.......................\n"
+msgstr "æûÕÀĸÊÆÄâ̯ $2¡¢á¸ÊÖÄã.......................\n"
+#
+#=========================================
+# <WS>/packages/Setup/sm_setup_server.sh
+#=========================================
+msgid "The Sun Management Center Console help configuration file cannot be found."
+msgstr "ÊÆÄâ̯ Sun Management Center ÅäÚÕƺëºÉ·ë©ÍüØÙåôóò¡¤"
+msgid "Please re-install the Sun Management Center Console component"
+msgstr "îùÓìä»ÇøæÒ Sun Management Center ÅäÚÕƺÜÚǵ"
+msgid "The base URL has been set to $2"
+msgstr "Ù×ÆÛ URL ÄØÝÃÌùÒ³ $2"
+msgid "Could not find group $2.  You will have to set up"
+msgstr "ÊÆÄâ̯åúÜÚ $2¡¤ÚÀÆÒâüÅÃÙ¯"
+msgid "the groups manually.  Please add $3 to group $2."
+msgstr "ÝÃÌùåúÜÚ¡¤îùÙò $3 ä»ìÁÈÝåúÜÚ $2¡¤"
+msgid "User $3 in group $2 is not a valid user.  Leaving it out of the esusers file."
+msgstr "åúÜÚ $2 ÄãÎûËðÆîϯ $3 ÄâÑÒÈ´ÕæÎûËðÆîϯ¡¤îùÙòÆÆÚ· esusers óòÄãÜÃØ桤"
+msgid "Adding user $2 from group $3 to esusers"
+msgstr "ÆßÇãÙòåúÜÚ $3 ÄãÎûËðÆîϯ $2 ä»ìÁÈÝ esusers"
+msgid "It appears that you already have some users \\\($2\\\)"
+msgstr "ÚÀÆ«×äÄØÈ´Ä¡ËèËðÆîϯ \\\($2\\\)"
+msgid "configured as Sun Management Center administrators.  Leaving these users in place."
+msgstr "ØÙåôÒ³ Sun Management Center ê§Ü¡ÔÞ¡¤ÙòÝÕËèËðÆîϯÖçÇãÔÏݨ¡¤"
+msgid "You should setup a user as a Sun Management Center administrator."
+msgstr "ÚÀóÜæÚÙòÄ¡ÈíËðÆîϯÝÃÒ³ Sun Management Center ê§Ü¡ÔÞ"
+msgid "This person will be added to the esadm and esdomadm groups."
+msgstr "äÄÙòȺËðÆîϯä»ìÁ̯ esadm ÌÏ esdomadm åúÜÚÄ㡤"
+msgid "$2 is not a valid user."
+msgstr "$2 ÄâÑÒÈ´ÕæÎûËðÆîϯ¡¤"
+msgid "The group $2 already exists on your system."
+msgstr "Ë·ÜÓĸÄØÇôÇãåúÜÚ $2¡¤"
+msgid "Creating the group $2 that contains Sun Management Center $3 Users."
+msgstr "ÆßÇãÐúÇ¡ÅýÉÖ Sun Management Center $3 ËðÆîϯÎûåúÜÚ $2¡¤"
+msgid "Could not find $2 in $3"
+msgstr "$3 ÄãÆÜÊÆ̯ $2"
+msgid "This part of the setup process does the Sun Management Center Server Component setup."
+msgstr "ÝÕÝåÅ¡ÎûÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÈùΤðÂÜÚǵÎûÝÃÌù¡¤"
+msgid "Unable to set $2 values."
+msgstr "àÒÎÎÝÃÌù $2 Ô«¡¤"
+msgid "agent.snmpPort is already configured in $2"
+msgstr "$2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "topology.snmpPort is already configured in $2"
+msgstr "$2 ÄãÄØØÙåôħ topology.snmpPort"
+msgid "The Sun Management Center base URL is relative to the Sun Management Center Console."
+msgstr " Sun Management Center Ù×äí URL ÑÒÒÞè×Íõ Sun Management Center Cosole Îû¡¤"
+msgid "The Sun Management Center Console is able to request help documentation via the network."
+msgstr " Sun Management Center ÅäÚÕƺƫÝàç´ê½æûîùÊåëºÉ·ë©ÍüÅÆǵæñÕ衤"
+msgid "If you have installed Sun Management Center help documentation in an http-accessible"
+msgstr "ÇñΪÇãê½æûÄãÆ«Ýàç´ http Çô̽ÎûÈíåôĸÇøæÒħ Sun Management Center ëºÉ·ë©ÍüÅÆǵæñÕè¡¢"
+msgid "location within your network, you may specify this location."
+msgstr "ÚÀÆÒâüüÏÆüȺÈíåô¡¤"
+msgid "If Sun Management Center help is installed on the console host, simply accept the default value."
+msgstr "ÇñΪ Sun Management Center ëºÉ·ë©ÍüÇøæÒÇãÅäÚÕƺÅäñ¢Ä¸¡¢Ð¬Æ·ëæÚÙÌ¿çßÝÃÔ«¡¤"
+msgid "Completing Sun Management Center Server Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÈùΤðÂÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center server"
+msgstr "ËðÆîSun Management Center ÈùΤðÂÎûÇøÇÀê¡ÄÍ $2"
+msgid "Please enter a user to be the Sun Management Center administrator: "
+msgstr "îùòÓÄ«É¢Ò³ Sun Management Center ê§Ü¡ÔÞÎûËðÆîϯ¡¨ "
+msgid "Please enter a valid username: "
+msgstr "îùòÓÄ«È´ÕæÎûËðÆîϯÇØꢡ¨ "
+msgid "Please enter base URL to Sun Management Center help [local]: "
+msgstr "îùòÓÄ«ÝÙÚÙ Sun Management Center ëºÉ·ë©ÍüÎûÙ×ÆÛ URL [çßÝá¨ã¯ÆñÆÛê¦Ù¶äù]¡¨ "
+#
+#===================================
+# <WS>/packages/Setup/es-common.sh
+#===================================
+msgid "Enter \\\"y\\\" or \\\"n\\\" or \\\"q\\\""
+msgstr "îùòÓÄ« \\\"y\\\" ÍÐ \\\"n\\\" ÍÐ \\\"q\\\""
+msgid "Exiting at user request"
+msgstr "ÇãËðÆîϯÓÑÊåĶØÍÅø"
+msgid "L10N_CODE not set!, LANG=$2"
+msgstr "ÆÜÝÃÌù L10N_CODE¡ªLANG=$2"
+msgid "Cannot find locale directory for LANG: $2"
+msgstr "ÊÆÄâ̯ LANG Îûë£ËÆô¿èºÆøò硨$2"
+msgid "Expected to find it in: $2"
+msgstr "çßßæÅèĶÈíåôÊÆ̯ÆÆ¡¨$2"
+msgid "No Sun Management Center Packages are installed. Exiting."
+msgstr "ÆÜÇøæÒ Sun Management Center ÔïæÒÝÔüÕ¡¤ÆßÇãá¸ÊÖ¡¤"
+msgid "Could not find xput executable: $2"
+msgstr "ÊÆÄâ̯ xput Æ«ÙÚÈçóò¡¨$2"
+msgid "Cannot find file $2"
+msgstr "ÊÆÄâ̯óòÕù $2"
+msgid "Moving $2 to $3"
+msgstr "ÆßÇãÙò $2 ÜÃ̯ $3"
+msgid "--------------  WARNING  -------------------"
+msgstr "--------------  úÀÉË  -------------------"
+msgid "It appears that $2 $3 is already in use."
+msgstr "$2 $3 Æ«×äÄØÇãËðÆ"
+msgid "Sun Management Center $2 may not be able to run due to this conflict."
+msgstr "ÆñÍõȺîíÒó¡¢Sun Management Center $2 Æ«×äàÒÎÎÙÚÈ硤"
+msgid "There are two ways to correct this conflict:"
+msgstr "È´Ì¥ê¡ÅÉÎÎÆ«Ï«ÆßȺîíÒó¡¨"
+msgid "  1. Reconfigure the port that Sun Management Center uses."
+msgstr "  1. Óìä»ØÙåô Sun Management Center ÍÔÆîÎûÝÙÚÙÙÕ¡¤"
+msgid "  2. Stop the process that is using the port."
+msgstr "  2. ØôÅÏÆßÇãËðÆîæÚÝÙÚÙÙÕÎûݨܡ¡¤"
+msgid "    You are currently running snmpdx, which may be causing the conflict."
+msgstr "    ÆøЩÆßÇãÙÚÈç snmpdx¡¢Æ«×äÑÒÆÆðÒÓ³æÚîíÒó¡¤"
+msgid "Skipping the setting of port number for $2"
+msgstr "Ü©ç´ÝÙÚÙÙÕæÀ $2 ÝÃÌù"
+msgid "NOTE: Prior to starting Sun Management Center $2, stop the process using port $3."
+msgstr "ÎÃãô¡¨ÇãÚöÙ¯ Sun Management Center $2 ÄæЩ¡¢Ç¿ËðÆîÝÙÚÙÙÕ $3 ØôÅÏݨܡ¡¤"
+msgid "Updating $2 with new port number."
+msgstr "ËðÆîä»ÝÙÚÙÙÕæÀÊÕä» $2¡¤"
+msgid "This part of setup generates security keys used for communications"
+msgstr "ÝÕÝåÅ¡ÝÃÌùá£Ê©ÙòܨÆíÆîÍõá£Ê©ÄæâæÝ×عÎûÇøÇÀõ"
+msgid "between processes.  A seed must be provided to initialize the"
+msgstr "ÆÒâüßÈËòê¡ÄÍËôÏÏÌîÝÕËèÇøÇÀõ"
+msgid "keys.  You can choose to use the standard Sun Management Center default or"
+msgstr "ÚÀÆ«ÅèËðÆîíºäíÎû Sun Management Center çßÝÃÔ«ÍÐòÓÄ«ÚÀÈÜÄ×Îû"
+msgid "enter your own seed.  If you do not generate the keys now,"
+msgstr "ê¡ÄÍ¡¤ÇñΪܢÇãÄâùÌܨÆíÝÕËèÇøÇÀõï¡¢"
+msgid "you can do so later using the procedure documented in the"
+msgstr "ÚÀÆ«ÅèÅÊÑ¥ÇÂØø¡¢Èþâüò×ߧ"
+msgid "Sun Management Center 3.0 Users Guide."
+msgstr "¡ÎSun Management Center 3.0 ËðÆîϯÑÀв¡ÏÄãÍÔÓÝÎûÊãüõ¡¤"
+msgid "Please make sure you use the same seed for all the machines you install."
+msgstr "îùíýë¥è×ÇøæÒÎûÍÔÈ´çÙæªÉáËðÆîÒÞÇÑÎûê¡ÄÍ¡¤"
+msgid "Invalid seed - type s to use default seed"
+msgstr "ê¡ÄÍàÒÕæ - Ѻ s ÅèËðÆîçßÝÃê¡ÄÍ"
+msgid "Using default Sun Management Center value for seed."
+msgstr "ÆßÇãËðÆîçßÝÃÎû Sun Management Center Ô«É¢Ò³ê¡ÄÍ"
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+msgid "Unable to create logfile $LOGFILE."
+msgstr "àÒÎÎÐúÇ¡ÅÊë¢óò $LOGFILE¡¤"
+msgid "Started $0 at"
+msgstr "ÄØÚöÙ¯ $0 Íõ"
+msgid "Running on"
+msgstr "ÆßÙÚÈçÍõ"
+msgid "What seed would you like to use?\n"
+msgstr "ÓÑËðÆîÄïëûê¡ÄÍ¡©\n"
+msgid "Invalid response in automated configuration file."
+msgstr "ÈÜÙ¯ØÙåôóòÄãÈ´àÒÕæÎûÇßóÜ¡¤"
+msgid "Unsupported OS version: $2"
+msgstr "ÄâÅÅßÎÎû OS ÎêÆÛ¡¨$2"
+msgid "Do you want to use a different port number for $2?"
+msgstr "è×Íõ $2 ÚÀÓÑËðÆîÄâÇÑÎûÝÙÚÙÙÕæÀ¡©"
+msgid "Do you want to generate these keys using the Sun Management Center default seed?"
+msgstr "ÑÒÉÁÓÑËðÆî Sun Management Center çßÝÃê¡ÄÍܨÆíÝÕËèÇøÇÀõï¡©"
+msgid "Please enter any port greater or equal to 1100 : "
+msgstr "îùòÓīǶġÄËÍõÍÐá«Íõ 1100 ÎûÝÙÚÙÙÕ¡¨ "
+msgid "Port $2 is not a valid port number, try another number : "
+msgstr "ÝÙÚÙÙÕ $2 ÄâÑÒÈ´ÕæÎûÝÙÚÙÙÕæÀ¡¢îùæÜƶġԶæÀ¨ "
+msgid "Port $2 is also busy, try another - use s to skip setting the port number:"
+msgstr "ÝÙÚÙÙÕ $2 ľȤåÓÄã¡¢îùæÜ̧ÅìÎû - ËðÆî s Ü©ç´ÝÃÌùÝÙÚÙÙÕæÀ¡¨"
+#
+#======================================
+# <WS>/packages/Setup/install-java.sh
+#======================================
+msgid "Java packages are not in $2"
+msgstr " Java ÔïæÒÝÔüÕÄâÇã $2 Äã"
+msgid "All required Java packages are not in $2"
+msgstr "ËäÏæÍÔÈ´ëæÊåÎû Java ÔïæÒÝÔüÕÉáÇã $2 Äã"
+msgid "Installing java packages $2"
+msgstr "ÆßÇãÇøæÒ java ÔïæÒÝÔüÕ $2"
+msgid "the system. Please install them first and then install Sun Management Center."
+msgstr "Ë·ÜÓÄ㡤îùÇ¿ÇøæÒÆÆÔ¯¡¢àÓÑ¥ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Package $2 is installed on this system. This package is"
+msgstr "ÔïæÒÝÔüÕ $2 ÄØÇøæÒÇãȺ˷ÜÓÄ㡤 This package is"
+msgid "incompatible with the java version required for Sun Management Center."
+msgstr "êØ Sun Management Center ÍÔëæÎû java ÎêÆÛÄâÒÞÕ©¡¤"
+msgid "This package needs to be uninstalled before installing java 2"
+msgstr "ëæÇ¿æØØæÇøæÒȺÔïæÒÝÔüÕÑ¥¡¢ÇÂÇøæÒ java 2"
+msgid "Removal of the package $2 failed, please remove it"
+msgstr "ÔïæÒÝÔüÕ $2 ÜÃØæÆÂÚõ¡¢îùÅÃÙ¯âÐÈç"
+msgid "manually and then install Sun Management Center."
+msgstr "ÜÃØæÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "You need to install the following packages $2"
+msgstr "ëæÓÑÇøæÒĶÇÄÎûÔïæÒÝÔüÕ $2"
+msgid "If you do not choose to install it now, the installation will abort."
+msgstr "ÇñΪÄâòÙðåÇ¡É»ÇøæÒ¡¢ÇøæÒá£Ê©ÙòäÄÄãöË¡¤"
+msgid "It seems some other version of java packages are present in $2"
+msgstr "Çã $2 ÄãÈýÅçÄØȴƶġÎêÆÛÎû java ÔïæÒÝÔüÕÇôÇ㡤"
+msgid "You need to install Solaris_JDK_1.2.1_04 version of the following packages"
+msgstr "ëæÇøæÒ Solaris_JDK_1.2.1_04 ÎêÎûĶÇÄÔïæÒÝÔüÕ"
+msgid "You can enter any directory to install the required version of JAVA."
+msgstr "Æ«òÓīǶÈôÆøòçÅèÇøæÒÍÔëæÎêÆÛÎû JAVA¡¤"
+msgid "No java packages to be removed."
+msgstr "ËäàÒëæÜÃØæÎû java ÔïæÒÝÔüÕ"
+msgid "Sun Management Center installation had overwritten your previous java installation."
+msgstr " Sun Management Center ÇøæÒá£È¢ÄØ̽ÅîǿЩÎû java ÇøæÒá£È¢¡¤"
+msgid "You can either keep the current installation or remove it."
+msgstr "Æ«ÏñÖçÆøЩÎûÇøæÒá£È¢ÍÐÙòÆÆÜÃØ桤"
+msgid "Warning - Could not find pkgmap file for $2"
+msgstr "úÀÉË - ÊÆÄâ̯ $2 Îû pkgmap óòÕù"
+msgid "  Space calculations will be wrong."
+msgstr "  ϨâæÓÓê«äÄȴ먡¤"
+msgid "Java installation:"
+msgstr "Java ÇøæÒ¡¨"
+msgid "Space required \\\(in $2\\\):  $3 blocks."
+msgstr "ÍÔëæϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Space available \\\(in $2\\\): $3 blocks."
+msgstr "Æ«ÆîϨâæ \\\($2 Äã\\\)¡¨$3 Ô¶Ù´ãÛ¡¤"
+msgid "Insufficient disk space to install Java components"
+msgstr "ÊôÈ´ËÍÙÜÎûéöé÷ϨâæÆ«ÇøæÒ Java ÜÚǵ"
+msgid "Error installing package: $2"
+msgstr "ÇøæÒÔïæÒÝÔüÕàõÆíòã먡¨$2"
+msgid "The following packages required by Java 2 are not installed on"
+msgstr "ĶÇÄ Java 2 ÍÔëæÎûÔïæÒÝÔüÕÆÜÇøæÒÍõ"
+msgid "Packages: $2"
+msgstr "ÔïæÒÝÔüÕ¡¨$2"
+msgid "The required version of Java is already installed in $2"
+msgstr "ÍÔëæ Java ÎêÆÛÄØåîÇøæÒÍõ $2 Äã"
+msgid "It seems some of the required packages are already present."
+msgstr "ÍÔëæÔïæÒÝÔüÕÄãÈýÅçÄØÈ´ÝåÅ¡ÇôÇ㡤"
+msgid "You can either overwrite the existing java version or install the"
+msgstr "ÚÀÆ«åôßÐܢȴÎû java ÎêÆÛÍÐÑÒÙòÍÔëæÎû"
+msgid "required version in some other directory."
+msgstr "ÎêÆÛÇøæÒÇã̧ÆÆÎûÆøòçÄ㡤"
+msgid "Invalid directory"
+msgstr "àÒÕæÆøòç"
+msgid "Java packages couldnot be found in directory $2"
+msgstr "Æøòç $2 ÄãÊÆÄâ̯ Java ÔïæÒÝÔüÕ"
+msgid "Do you want to install it now?"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒ¡©"
+msgid "Do you want to overwrite the existing one?"
+msgstr "ÑÒÉÁ̽ÅîܢȴÎêÆÛ¡©"
+msgid "Do you want to remove it?"
+msgstr "ÑÒÉÁÓÑÙòÆÆÜÃØæ¡©"
+msgid "Do you want to uninstall it now"
+msgstr "ÑÒÉÁÓÑÇ¡É»æØØæÇøæÒ"
+msgid "Enter the base directory for JDK installation [$2]"
+msgstr "òÓÄ«ÆîÍõ JDK ÇøæÒÎûÙ×ÆÛÆøòç [$2]"
+#
+#============================
+# <WS>/packages/Setup/es-db
+#============================
+msgid "A minimum of 256 MB RAM is required to install Sun Management Center server."
+msgstr "ÈÝÅ·ëæÈ´ 256 MB Îû RAM Äß×äÇøæÒ Sun Management Center ÈùΤð¡¤"
+msgid "Current system has $2 MB RAM."
+msgstr "ÆøЩ˷ÜÓ̦ȴ $2 MB Îû RAM¡¤"
+msgid "Can not continue to install Sun Management Center server."
+msgstr "àÒÎÎú«úýÇøæÒ Sun Management Center ÈùΤð¡¤"
+msgid "                         Sun Management Center DB                     "
+msgstr "                         Sun Management Center DB                     "
+msgid "       Sun Management Center Database Installation "
+msgstr "       Sun Management Center æñÕèÕ»ÇøæÒ "
+msgid "Invalid parameters for installDB\\\(\\\)"
+msgstr " installDB\\\(\\\) ÎûÙ¶í°àÒÕæ"
+msgid "The following Sun Management Center database packages have already been installed on your system:"
+msgstr "ÚÀÎûË·ÜÓĸÄØåîÇøæÒħĶÇÄ Sun Management Center æñÕèÕ»ÔïæÒÝÔüÕ¡¨"
+msgid "Checking memory available..."
+msgstr "ÆßÇãóôÑçÆ«ÆîØ´ðÙüÕ..."
+msgid "Creating the mount points..."
+msgstr "ÆßÇãÐúÇ¡æÒç¥öµ..."
+msgid "Error installing SUNWesora.  Installation cannot continue."
+msgstr "ÇøæÒ SUNWesora àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Error installing SUNWestbl.  Installation cannot continue."
+msgstr "ÇøæÒ SUNWestbl àõÆíòã먡¤àÒÎÎú«úýÇøæÒ¡¤"
+msgid "Sun Management Center DB packages installed successfully"
+msgstr "Sun Management Center DB ÔïæÒÝÔüÕÇøæÒÈ©Åü"
+msgid "es-setup will perform the remainder of the config"
+msgstr "es-setup ÙòÙÚÈçØÙåôÎû̧ÅìÝåÅ¡"
+#
+#======================================
+# <WS>/packages/Setup/install-patch.sh
+#======================================
+msgid "No patch checking on this platform"
+msgstr "ȺÆÍƺĸÆÜâÐÈçìÁæÐá£È¢ÎûóôÑç"
+msgid "Could not find the patches in the following directory."
+msgstr "àÒÎÎÇãĶÓòÆøòçÄãÊÆ̯ìÁæÐá£È¢¡¤"
+msgid "Installing patch $2..."
+msgstr "ÆßÇãÇøæÒìÁæÐá£È¢ $2..."
+msgid "Installation of patch $2 failed."
+msgstr "ìÁæÐá£È¢ $2 ÇøæÒÆÂÚõ¡¤"
+msgid "Installation of patch $2 complete."
+msgstr "ìÁæÐá£È¢ $2 ÇøæÒÉùÈ©¡¤"
+msgid "Following patches are prerequisites to the java patches."
+msgstr "ÇøæÒ java ìÁæÐá£È¢Ð©¡¢ÆÒâüÇ¿ÇøæÒĶÇÄìÁæÐá£È¢¡¤"
+msgid "Please install them manually and then install Sun Management Center."
+msgstr "îùÅÃÙ¯âÐÈçÇøæÒÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Installation of following patches failed, please install"
+msgstr "ĶÇÄìÁæÐá£È¢ÎûÇøæÒÙÚÈçÆÂÚõ¡¢îùÅÃÙ¯"
+msgid "them manually and then install Sun Management Center."
+msgstr "ÇøæÒÑ¥¡¢ÇÂÇøæÒ Sun Management Center¡¤"
+msgid "Checking for required OS patches, Please wait..."
+msgstr "ÆßÇãóôÑçÍÔëæ OS ìÁæÐá£È¢¡¢îùá¡Ô·..."
+msgid "Following is the list of required patches for java 2."
+msgstr "ÅèĶҳ java 2 ÍÔëæìÁæÐá£È¢ÎûÛÒÞÌ¡¤"
+msgid "If you do not choose to install them now installation will abort."
+msgstr "ÇñΪÄâòÙðåÇ¡É»ÇøæÒ¡¢ÇøæÒá£Ê©ÙòäÄÄãöË¡¤"
+msgid "Checking for required OS patches done."
+msgstr "ÄØÉùÈ©ÍÔëæ OS ìÁæÐá£È¢ÎûóôÑ硤"
+msgid "Invalid directory."
+msgstr "àÒÕæÆøò硤"
+msgid "Do you want to install now"
+msgstr "ÑÒÉÁÓÑÇ¡É»ÇøæÒ¡©"
+msgid "Please enter the directory that contains patches: "
+msgstr "îùòÓÄ«ÉÖÈ´ìÁæÐá£È¢ÎûÆøò硨 "
+#
+#=================================
+# <WS>/packages/Setup/es-restore
+#=================================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "The backup $2 does not exist"            
+msgstr "ެǹ $2 ÄâÇôÇã"            
+msgid "Checking installed Sun Management Center..."
+msgstr "ÆßÇãóôÑçÄØÇøæÒÎû Sun Management Center..."
+msgid "Recover the Sun Management Center Database and it will take a few minutes..."
+msgstr "ߦÔÏ Sun Management Center æñÕèÕ»¡¢ÙòÏÄĸÞýÅ¡úÌÎûÕëâæ..."
+msgid "Restore the Sun Management Center data."
+msgstr "ߦÔÏ Sun Management Center æñÕ衤"
+msgid "Shutdown Sun Management Center database, please wait."
+msgstr "ùÃÝð Sun Management Center æñÕèÕ»¡¢îùá¡Ô·¡¤"
+msgid "Recovery is fnished successfully. Please start Sun Management Center."
+msgstr "ÄØâûɳÉùȩߦÔÏ¡¤îùÚöÙ¯ Sun Management Center¡¤"
+msgid "The Sun Management Center server components are not found or"
+msgstr "ÊÆÄâ̯ Sun Management Center ÈùΤðÂÜÚģ́"
+msgid "its installation is damaged. You need to run"
+msgstr "ÇøæÒÄØäÚä´¡¤ÚÀëæÙÚÈç"
+msgid "es-inst/es-setup to install Sun Management Center and then "
+msgstr "es-inst/es-setup ÅèÇøæÒ Sun Management Center¡¢àÓÑ¥"
+msgid "start es-restore."
+msgstr "ÇÂÚöÙ¯ es-restore¡¤"
+msgid "Cannot restore $2"
+msgstr "àÒÎÎߦÔÏ $2"
+msgid "Cannot import database. Please check $2"
+msgstr "àÒÎÎã¾Ä«æñÕèÕ»¡¤îùóôÑç $2"
+msgid "The recovery need to shudown Sun Management Center servers."
+msgstr "ߦÔÏðçÉ¢ëæùÃÝð Sun Management Center ÈùΤð¡¤"
+msgid "Please get the backup of es-backup ready."
+msgstr "îùäíÞ¬Çï es-backup Îûެǹ¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the backup data directory:"
+msgstr "òÓīެǹæñÕèÆøòçÎûæûÕÀ¡¨"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_metadata.sh
+#==========================================
+msgid "$2 appears to be configured as your Sun Management Center server."
+msgstr "$2 Æ«×äÄØØÙåôÒ³ÚÀÎû Sun Management Center ÈùΤð¡¤"
+msgid "Error - Unable to set $2 values."
+msgstr "òãë¨ - àÒÎÎÝÃÌù $2 ÎûÔ«¡¤"
+msgid "agent.snmpPort already configured in $2"
+msgstr "Çã $2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "This part of the setup process does the Sun Management Center Agent Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "snmpd.conf already exists in $2.  Leaving it in place"
+msgstr "$2 ÄãÄØÇôÇã snmpd.conf¡¤Ùò̧ÖçÇãÔÏݨ"
+msgid "Copying snmpd.conf file into $2"
+msgstr "ÆßÇãÙò snmpd.conf óòÕùîïêû̯ $2"
+msgid "Server component also installed locally."
+msgstr "õäÇãÆÛê¦ÇøæÒħÈùΤðÂÜÚǵ¡¤"
+msgid "Using this machine as the Sun Management Center server."
+msgstr "ËðÆîÆÛçÙæªÉ¢Ò³ Sun Management Center ÈùΤð¡¤"
+msgid "Completing Sun Management Center Agent Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center metadata"
+msgstr "ËðÆîÇøÇÀê¡ÄÍ $2 É¢Ò³ Sun Management Center Ä÷æñÕè"
+msgid "Please enter the Sun Management Center Server Hostname: "
+msgstr "îùòÓÄ« Sun Management Center ÈùΤðÂÅäñ¢ÇØꢡ¨ "
+msgid "Is this correct?"
+msgstr "ÑÒÉÁÆßíý¡©"
+#
+#============================
+# <WS>/packages/Setup/es-lic
+#============================
+msgid "Topology server is currently running."
+msgstr "ÆøЩÆßÇãÙÚÈçÍßðôÈùΤð¡¤"
+msgid "It must be restarted for the license file update to take effect."
+msgstr "ÓÑËðÚæûâóòÕùÊÕä»ÆíÕæ¡¢ÆÒâüÓìä»ÚöÙ¯¡¤"
+msgid "Please stop and restart topology server using:"
+msgstr "îùØôÅÏËäÓìä»ÚöÙ¯ÍßðôÈùΤð¡¢ËðÆ"
+msgid "$2 -p\\\; $3 -p"
+msgstr "$2 -p\\\; $3 -p"
+msgid "Invalid License, Exiting..."
+msgstr "ÚæûâàÒÕæ¡¢á¸ÊÖÄã..."
+msgid "  Sun Management Center License Program\n"
+msgstr "  Sun Management Center Úæûâá£È¢\n"
+msgid "  Invalid parameters passed to es-lic script\n"
+msgstr "  ã®ØÊ̯ es-lic Script ÎûÙ¶í°àÒÕæ\n"
+msgid "Please enter license key: "
+msgstr "îùòÓÄ«Úæûâõ "
+#
+#===============================
+# <WS>/packages/Setup/es-dbimp
+#===============================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "The backup $2 does not exist"            
+msgstr "ެǹ $2 ÄâÇôÇã"            
+msgid "------------------- WARNING !!! ----------------"
+msgstr "------------------- úÀÉË¡ª¡ª¡ª ----------------"
+msgid "The process need Sun Management Center server components stopped."
+msgstr "ȺݨܡëæÇã Sun Management Center ÈùΤðÂÜÚǵØôÅÏÕëÙÚÈ硤"
+msgid "And import the backup data to Sun Management Center database."
+msgstr "ËäÙòެǹæñÕèã¾Ä« Sun Management Center æñÕèÕ»¡¤"
+msgid "As a result, all current data will be destroyed."
+msgstr "á¸ÎªÙòÝßÈ©ÍÔȴܢȴæñÕèïÎäÚ¡¤"
+msgid "Done"
+msgstr "ÉùÈ©"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+#
+#=======================================
+# <WS>/packages/Setup/sm_setup_agent.sh
+#=======================================
+msgid "$2 appears to be configured as your Sun Management Center server."
+msgstr "$2 Æ«×äÄØØÙåôÒ³ÚÀÎû Sun Management Center ÈùΤð¡¤"
+msgid "Error - Unable to set $2 values."
+msgstr "òãë¨ - àÒÎÎÝÃÌù $2 ÎûÔ«¡¤"
+msgid "agent.snmpPort already configured in $2"
+msgstr "Çã $2 ÄãÄØØÙåôħ agent.snmpPort"
+msgid "This part of the setup process does the Sun Management Center Agent Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "snmpd.conf already exists in $2.  Leaving it in place"
+msgstr "$2 ÄãÄØÇôÇã snmpd.conf¡¤Ùò̧ÖçÇãÔÏݨ"
+msgid "Copying snmpd.conf file into $2"
+msgstr "ÆßÇãÙò snmpd.conf óòÕùîïêû̯ $2"
+msgid "Server component also installed locally."
+msgstr "õäÇãÆÛê¦ÇøæÒħÈùΤðÂÜÚǵ¡¤"
+msgid "Using this machine as the Sun Management Center server."
+msgstr "ËðÆîÆÛçÙæªÉ¢Ò³ Sun Management Center ÈùΤð¡¤"
+msgid "Completing Sun Management Center Agent Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center ÅîÜ¡á£È¢ÜÚǵÎûÝÃÌù¡¤"
+msgid "Using security seed $2 for Sun Management Center agent"
+msgstr "ËðÆîÇøÇÀê¡ÄÍ $2 É¢Ò³ Sun Management Center ÅîÜ¡á£È¢"
+msgid "Please enter the Sun Management Center Server Hostname: "
+msgstr "îùòÓÄ« Sun Management Center ÈùΤðÂÅäñ¢ÇØꢡ¨ "
+msgid "Is this correct?"
+msgstr "ÑÒÉÁÆßíý¡©"
+#
+#================================
+# <WS>/packages/Setup/es-backup
+#================================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Can not create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Backup is successful."
+msgstr "ެǹȩÅü¡¤"
+msgid "Please save following files for the restore of Sun Management Center"
+msgstr "îùóÃÇôĶÇÄóòÕùÅèËòߦÔÏ Sun Management Center ÄæÆî"
+msgid "Starting Sun Management Center...."
+msgstr "ÆßÇãÚöÙ¯ Sun Management Center...."
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "Backup Sun Management Center data failed. Please check $2"
+msgstr "Sun Management Center æñÕèެǹÆÂÚõ¡¤îùóôÑç $2"
+msgid "The operation requires to shutdown Sun Management Center."
+msgstr "ȺðçÉ¢ëæùÃÝð Sun Management Center¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the directory to store the backup data file:"
+msgstr "òÓÄ«ÆøòçæûÕÀÅèóÃÇôެǹæñÕ表"
+#
+#=======================================
+# <WS>/packages/Setup/sm_setup_mib2.sh
+#=======================================
+msgid "Subagent sunmib_sea already set up - leaving it untouched"
+msgstr "ÄØÝÃÌùħÄÍÅîÜ¡á£È¢ sunmib_sea - Ùò̧ÏñѽÄâüÈ"
+msgid "Subagent registry file is: $2"
+msgstr "ÄÍÅîÜ¡á£È¢àôòçóòÕùÒ³¡¨$2"
+msgid "Unable to update subagent-registry-d.x"
+msgstr "àÒÎÎÊÕä» subagent-registry-d.x"
+msgid "Updated subagent-registry-d.x for mib2 subagent"
+msgstr "ÄØÒ³ mib2 ÄÍÅîÜ¡á£È¢ÊÕä»Ä§ subagent-registry-d.x"
+#
+#================================
+# <WS>/packages/Setup/es-uninst
+#================================
+msgid "Removing $2"
+msgstr "ÆßÇãÜÃØæ $2"
+msgid "Package Removal: Failed for $2"
+msgstr "ÔïæÒÝÔüÕÜÃØ桨$2 ÜÃØæÆÂÚõ"
+msgid "Reattempting to uninstall the package\\\(s\\\): $2"
+msgstr "ÆßÇãÓìæÜæØØæÇøæÒÔïæÒÝÔüÕ¡¨$2"
+msgid "Please remove the following packages manually.\n"
+msgstr "îùÅÃÙ¯ÜÃØæĶÇÄÔïæÒÝÔüÕ¡¤\n"
+msgid "Sun Management Center uninstall complete.\n"
+msgstr " Sun Management Center æØØæÇøæÒÉùÜ«¡¤\n"
+msgid "       Sun Management Center Uninstallation \n"
+msgstr "       Sun Management Center æØØæÇøæÒ \n"
+msgid "No Sun Management Center packages installed.\n"
+msgstr "ÆÜÇøæÒ Sun Management Center ÔïæÒÝÔüÕ¡¤\n"
+msgid "This utility removes all the Sun Management Center packages. \n"
+msgstr "ȺÄüÆîá£È¢ÙòÜÃØæÍÔÈ´Îû Sun Management Center ÔïæÒÝÔüÕ¡¤\n"
+msgid "Exiting uninstall utility.\n"
+msgstr "ÆßÇãá¸ÊÖæØØæÇøæÒÄüÆîá£È¢¡¤\n"
+msgid "Stopping all Sun Management Center processes.  This may take a few moments...\n"
+msgstr "ÆßÇãØôÅÏÍÔÈ´ Sun Management Center ݨܡ¡¤ÝÕÆ«×äëæÓÑÄ¡öµÕëâæ...\n"
+msgid "If you are upgrading Sun Management Center, you may want to save your existing data.\n"
+msgstr "ÇñΪÚÀÑÒÓÑŪ×È Sun Management Center¡¢Æ«×ääÄã÷óÃÇôܢȴÎûæñÕ衤\n"
+msgid "Will not remove the existing data\n"
+msgstr "ÙòÄâäÄÜÃØæܢȴÎûæñÕè\n"
+msgid "Will remove the existing data\n"
+msgstr "ÙòäÄÜÃØæܢȴÎûæñÕè\n"
+msgid "      Would you like to continue?"
+msgstr "      ÑÒÉÁÓÑú«úý¡©"
+msgid "Do you want to preserve your existing data"
+msgstr "ÑÒÉÁÓÑÏñÖçÚÀܢȴÎûæñÕè"
+msgid "Do you wish to continue with the removal of the existing data"
+msgstr "ÑÒÉÁÓÑú«úýâÐÈçܢȴæñÕèÎûÜÃØæ"
+#
+#==============================
+# <WS>/packages/Setup/es-dbexp
+#==============================
+msgid "The directory name should start with /"
+msgstr "ÆøòçÇØê¢óÜæÚÅè / âäó¤"
+msgid "The directory name is invalid"
+msgstr "ÆøòçÇØê¢ÄâÆßíý"
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Can not create the directory $2"
+msgstr "àÒÎÎÐúÇ¡Æøòç $2"
+msgid "Cannot export database. Please check $2"
+msgstr "àÒÎÎã¾ÅøæñÕèÕ»¡¤îùóôÑç $2"
+msgid "The operation requires some of Sun Management Center components to be shutdown."
+msgstr "ȺðçÉ¢ëæùÃÝðÄ¡Ëè Sun Management Center ÜÚǵ¡¤"
+msgid "Usage: $PROGNAME"
+msgstr "ÆîÎΡ¨$PROGNAME"
+msgid "Do you want to create it?"
+msgstr "ÑÒÉÁÓÑÐúÇ¡¡©"
+msgid "Do you want to proceed [yes/no]:"
+msgstr "ÑÒÉÁÓÑú«úý [yes/no]¡¨"
+msgid "Enter the path of the directory to store the backup data file:"
+msgstr "òÓÄ«ÆøòçæûÕÀÅèóÃÇôެǹæñÕ表"
+msgid "Enter the path of the backup directory:"
+msgstr "òÓīެǹÆøòçÎûæûÕÀ¡¨"
+#
+#=================================
+# <WS>/packages/Setup/es-keys.sh
+#=================================
+msgid "Generating $2 security keys."
+msgstr "ÆßÇãܨÆí $2 ÇøÇÀõ"
+msgid "Error generating keys. Return code was $2."
+msgstr "ܨÆíÇøÇÀõïÕëàõÆíòã먡¤ã®ÇßÅîî£Ò³ $2¡¤"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_service.sh
+#==========================================
+msgid "This part of the setup process does the Sun Management Center Services Component setup."
+msgstr "ÝÕÝåÅ¡ÎûÝÃÌùݨܡÙòÉùÈ© Sun Management Center Τ٭ÜÚǵÎûÝÃÌù¡¤"
+msgid "Completing Sun Management Center Services Component setup."
+msgstr "ÆßÇãÉùÈ© Sun Management Center Τ٭ÜÚǵÎûÝÃÌù¡¤"
+#
+#===============================
+# <WS>/packages/Setup/es-start
+#===============================
+msgid "It seems component $2 has not been setup, so skipping it."
+msgstr "ÈýÅçÌþÆÜÝÃÌù $2¡¢ÇÞȺÙòÜ©ç´ÆÆ¡¤"
+msgid "Sun Management Center Web Server is not installed, Can not start web server\n"
+msgstr "ÆÜÇøæÒ Sun Management Center ê½æûÈùΤð¡¢àÒÎÎÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "Sun Management Center Web Server is not completely installed, Can not start web server\n"
+msgstr "ÆÜÉùðìÇøæÒ Sun Management Center ê½æûÈùΤð¡¢àÒÎÎÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "web server started\n"
+msgstr "ê½æûÈùΤðÂÚöÙ¯\n"
+msgid "Equivalent to %s -aefgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmprstxw"
+msgid "Equivalent to %s -efgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmprstxw "
+msgid "Usage: $PROGNAME -acefghilmpstwxrAS [-y instanceName] [ -- args... ]"
+msgstr "ÆîÎΡ¨$PROGNAME -acefghilmpstwxrAS [-y instanceName] [ -- args... ]"
+msgid "   where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "     a : starts Sun Management Center Agent\n"
+msgstr "  a¡¨ÚöÙ¯ Sun Management Center ÅîÜ¡á£È¢\n"
+msgid "     c : starts Sun Management Center Console\n"
+msgstr "  c¡¨ÚöÙ¯ Sun Management Center Console\n"
+msgid "         Optionally, maximum heap size could be customized,\n"
+msgstr "         ¡¾Ïæڰ̱¡¿Þ²ÄËÎûÙÔûèÄËÄÑÆ«Ò³ÈÜÓÔÔ«¡¢\n"
+msgid "         e.g., ./es-start -c -- -Xmx100m specifies 100 MBytes\n"
+msgstr "         ËóÇñ¡¢./es-start -c -- -Xmx100m ÑÀÌù 100 MB\n"
+msgid "         as max heap size; Default size is 64m.\n"
+msgstr "         Ò³Þ²ÄËÙÔûèÄËÄÑ¡§çßÝÃÄËÄÑÒ³ 64m¡¤\n"
+msgid "     e : starts Sun Management Center Event manager\n"
+msgstr "     e¡¨ÚöÙ¯ Sun Management Center Ëçǵê§Ü¡á£È¢\n"
+msgid "     f : starts Sun Management Center Configuration manager\n"
+msgstr "     f¡¨ÚöÙ¯ Sun Management Center ØÙåôê§Ü¡á£È¢\n"
+msgid "     g : starts Sun Management Center Grouping services\n"
+msgstr "     g¡¨ÚöÙ¯Sun Management Center åúÜÚΤ٭\n"
+msgid "     h : prints this usage report\n"
+msgstr "     h¡¨ÇÄÇÍȺÆîÎÎÞÞÉË\n"
+msgid "     i : start agent in interactive mode, valid only for one of\n"
+msgstr "     i¡¨ÅèÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÅîÜ¡á£È¢¡¢ã¯è×\n"
+msgid "           the a, t, f, p, and e options\n"
+msgstr "           a¡£t¡£f¡£p ÌÏ e òÙâúÄæÄ¡È´Õæ\n"
+msgid "     l : starts Platform Agent for SSP\n"
+msgstr "     l¡¨ÚöÙ¯ SSP ÎûÆÍƺÅîÜ¡á£È¢\n"
+msgid "     m : starts Sun Management Center Metadata Repository\n"
+msgstr "    m¡¨ÚöÙ¯ Sun Management Center Ä÷æñÕèóÃÇôÕ»\n"
+msgid "     q : start components in quiet mode, effective only for one of\n"
+msgstr "     q¡¨ÅèÏæÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÜÚǵ¡¢ã¯è×\n"
+msgid "       the A, a, t, f, p, and e options\n"
+msgstr "       A¡£a¡£t¡£f¡£p ÌÏ e òÙâúÄæÄ¡È´Õæ\n"
+msgid "     p : starts Sun Management Center Topology manager\n"
+msgstr "     p¡¨ÚöÙ¯ Sun Management Center Íßðôê§Ü¡á£È¢\n"
+msgid "     r : starts Hardware Diagnostic Suite Service\n"
+msgstr "     r¡¨ÚöÙ¯ Hardware Diagnostic Suite Τ٭\n"
+msgid "     s : starts Sun Management Center Server\n"
+msgstr "     s¡¨ÚöÙ¯ Sun Management Center ÈùΤðÂ\n"
+msgid "         Optionally, maximum heap size could be customized,\n"
+msgstr "         ¡¾Ïæڰ̱¡¿Þ²ÄËÎûÙÔûèÄËÄÑÆ«Ò³ÈÜÓÔÔ«¡¢\n"
+msgid "         e.g., ./es-start -s -- -Xmx100m specifies 100 MBytes\n"
+msgstr "         ËóÇñ¡¢./es-start -s -- -Xmx100m ÑÀÌù 100 MB\n"
+msgid "         as max heap size; Default size is 64m.\n"
+msgstr "         Ò³Þ²ÄËÙÔûèÄËÄÑ¡§çßÝÃÄËÄÑÒ³ 64m¡¤\n"
+msgid "     t : starts Sun Management Center Trap Handler\n"
+msgstr "     t¡¨ÚöÙ¯ Sun Management Center ÝøËáݨܡá£È¢\n"
+msgid "     x : starts CST Service\n"
+msgstr "     x¡¨ÚöÙ¯ CST Τ٭\n"
+msgid "     y : starts new instance of platform agent\n"
+msgstr "     y¡¨ÚöÙ¯ä»ÎûÆÍƺÅîÜ¡á£È¢èÒËó\n"
+msgid "     w : starts web server\n"
+msgstr "     w¡¨ÚöÙ¯ê½æûÈùΤðÂ\n"
+msgid "     A : starts All Sun Management Center components except the console,\n"
+msgstr "     A¡¨ÚöÙ¯ØæħÅäÚÕƺÅèÆÀÎûÍÔÈ´ Sun Management Center ÜÚǵ¡¢\n"
+msgid "     S : starts Sun Management Center Server and all the server subcomponents\n"
+msgstr "     S¡¨ÚöÙ¯ Sun Management Center ÈùΤðÂÌÏÍÔÈ´ÈùΤðÂÄÍÜÚǵ\n"
+msgid "     args are passed to console or server when started.\n"
+msgstr "     Å¿í°ÙòÇãÅäÚÕƺÍÐÈùΤðÂÚöÙ¯Õëã®ëÄá¿ÆÆÔ¯¡¤\n"
+msgid "           (for example: es-start -c -- -p 2099)\n\n"
+msgstr "     ¡¾ËóÇñ¡¨es-start -c -- -p 2099¡¿\n\n"
+msgid "ERROR: Sun Management Center has not been set up.\nRun es-setup to set up Sun Management Center."
+msgstr "òã먡¨ÌþÆÜÝÃÌù Sun Management Center¡¤\nîùÙÚÈç es-setup ÅèÝÃÌù Sun Management Center¡¤"
+msgid "Please specify a component to be started."
+msgstr "îùÑÀÌùÓÑÚöÙ¯ÎûÜÚǵ¡¤"
+msgid "Use the following single letter arguments instead:\n"
+msgstr "ÊÑÆîĶÇÄÞÌÄ¡ÇóÆàÅ¿í°¡¨\n"
+msgid "Console package not installed\n"
+msgstr "ÆÜÇøæÒÅäÚÕƺÔïæÒÝÔüÕ\n"
+msgid "Interactive option invalid with -A or -S option"
+msgstr "ÄëٯȢðçÉ¢òÙâúè×Íõ -A ÍÐ -S òÙâúàÒÕæ"
+msgid "Invalid command line option.  Please use just one option\n"
+msgstr "àÒÕæÎûÑÀÅïÈçòÙâú¡¤îùÆ·ÆîÄ¡Ô¶òÙâú\n"
+msgid "You have not specified any components to run.\n"
+msgstr "ÚÀÆÜÑÀÌùÓÑÙÚÈçÎûÜÚǵ¡¤\n"
+msgid "Only one component may be started in interactive mode\n"
+msgstr "ÇãÄëٯȢðçÉ¢í¼È¢Ä¶Æ·×äÚöٯġԶÜÚǵ\n"
+msgid "You cannot start console in interactive mode\n"
+msgstr "ÚÀÄâ×äÅèÄëٯȢðçÉ¢í¼È¢ÚöÙ¯ÅäÚÕƺ\n"
+msgid "DISPLAY environment variable must be set\n"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°\n"
+msgid "Interactive server session:\n"
+msgstr "ÄëٯȢðçÉ¢ÈùΤðÂâêÑôÉ¢äÆ¡¨\n"
+msgid "SUNWcstv or SUNWcstve package should be installed before start cstservice agent."
+msgstr "ÚöÙ¯ cstservice ÅîÜ¡á£È¢Ð©¡¢óÜæÚÇ¿ÇøæÒ SUNWcstv ÍÐ SUNWcstve ÔïæÒÝÔüÕ¡¤"
+msgid "Interactive option invalid with $OPT option"
+msgstr "ÄëٯȢðçÉ¢òÙâúè×Íõ $OPT òÙâúàÒÕæ"
+msgid "Unable to open DISPLAY: $DISPLAY"
+msgstr "àÒÎÎâäÚö DISPLAY: $DISPLAY"
+msgid "Equivalent to %s -aefgmpstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmpstxw"
+msgid "Equivalent to %s -efgmpstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmpstxw"
+msgid "$2 Component not installed"
+msgstr "ÆÜÇøæÒ $2 ÜÚǵ"
+msgid "Invalid option\\\($1\\\).  Options have changed to single letters:"
+msgstr "àÒÕæòÙâú \\\($1\\\)¡¤ÄØÙòòÙâúüÈÊÕÒ³ÞÌÄ¡ÇóÆࡨ"
+msgid "Starting all platform instances"
+msgstr "ÚöÙ¯ÍÔÈ´ÆÍƺèÒËó"
+msgid "Instances are $2"
+msgstr "èÒËóÒ³ $2"
+msgid "Starting platform instances $2"
+msgstr "ÚöÙ¯ÆÍƺèÒËó $2"
+msgid "ERROR: Could not start Hardware Diagnostic Suite Service."
+msgstr "òã먡¨àÒÎÎÚöÙ¯ Hardware Diagnostic Suite Τ٭¡¤"
+msgid "SUNWed package should be installed before start Hardware Diagnostic Suite Service."
+msgstr "SUNWed ÔïæÒÝÔüÕóÜÇãÚöÙ¯ Hardware Diagnostic Suite Τ٭ÄæЩÇøæÒ¡¤"
+msgid "Sun Management Center is not setup. Please setup first and then run es-start."
+msgstr "ÆÜÝÃÌù Sun Management Center¡¤îùÇ¿ÇøæÒ¡¢àÓÑ¥ÇÂÙÚÈç es-start¡¤"
+msgid "Sun Management Center $2 is not setup."
+msgstr "ÆÜÝÃÌù Sun Management Center $2¡¤"
+#
+#==========================================
+# <WS>/packages/Setup/sm_setup_console.sh
+#==========================================
+msgid "This part of the setup process does the Sun Management Center Console Component setup."
+msgstr "ÝÕÝåÅ¡ÝÃÌùݨܡÙòÉùÈ© Sun Management Center ÅäÚÕƺÜÚǵÎûÝÃÌù¡¤"
+#
+#==============================
+# <WS>/packages/Setup/es-stop
+#==============================
+msgid "Please specify a component to be stopped."
+msgstr "îùÑÀÌùÓÑØôÅÏÎûÜÚǵ¡¤"
+msgid "Usage : $PROGNAME -aefghmprstxAS [-y instanceName]"
+msgstr "ÆîÎΡ¨$PROGNAME -aefghmprstxAS [-y instanceName]"
+msgid "     a : stops Sun Management Center Agent\n"
+msgstr "     a¡¨ØôÅÏ Sun Management Center ÅîÜ¡á£È¢\n"
+msgid "     e : stops Sun Management Center Event manager\n"
+msgstr "     e¡¨ØôÅÏ Sun Management Center Ëçǵê§Ü¡á£È¢\n"
+msgid "     f : stops Sun Management Center Configuration manager\n"
+msgstr "     f¡¨ØôÅÏ Sun Management Center ØÙåôê§Ü¡á£È¢\n"
+msgid "     g : stops Sun Management Center Services\n"
+msgstr "     g¡¨ØôÅÏ Sun Management Center Τ٭\n"
+msgid "     h : prints this usage report\n"
+msgstr "     h¡¨ÇÄÇÍȺÆîÎÎÞÞÉË\n"
+msgid "     l : stops Platform Agent for SSP\n"
+msgstr "     l¡¨ØôÅÏ SSP ÎûÆÍƺÅîÜ¡á£È¢\n"
+msgid "     m : stops Sun Management Center Metadata Agent\n"
+msgstr "     m¡¨ØôÅÏ Sun Management Center Ä÷æñÕèÅîÜ¡á£È¢\n"
+msgid "     p : stops Sun Management Center Topology manager\n"
+msgstr "     p¡¨ØôÅÏ Sun Management Center Íßðôê§Ü¡á£È¢\n"
+msgid "     r : stops Hardware Diagnostic Suite Service\n"
+msgstr "     r¡¨ØôÅÏ Hardware Diagnostic Suite Τ٭\n"
+msgid "     s : stops Sun Management Center Server\n"
+msgstr "     s¡¨ØôÅÏ Sun Management Center ÈùΤðÂ\n"
+msgid "     t : stops Sun Management Center Trap Handler\n"
+msgstr "     t¡¨ØôÅÏ Sun Management Center ÝøËáݨܡá£È¢\n"
+msgid "     x : stops CST Service\n"
+msgstr "     x¡¨ØôÅÏ CST Τ٭\n"
+msgid "     y : stops instance of platform agent\n"
+msgstr "     y¡¨ØôÅÏÆÍƺÅîÜ¡á£È¢èÒËó\n"
+msgid "     w : stops web server\n"
+msgstr "     w¡¨ØôÅÏê½æûÈùΤðÂ\n"
+msgid "     A : stops all Sun Management Center components listed above\n"
+msgstr "     A¡¨ØôÅÏĸÇÄÍÔÈ´ Sun Management Center Ä÷ǵ\n"
+msgid "equivalent to %s -aefgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -aefgmprstxw"
+msgid "     S : stops all Sun Management Center components listed above except Sun Management Center Agent\n"
+msgstr "     S¡¨ØôÅÏØæħ Sun Management Center ÅîÜ¡á£È¢ÅèÆÀÎûÍÔÈ´ Sun Management Center ÜÚǵ\n"
+msgid "equivalent to %s -efgmprstxw"
+msgstr "̧Åü×äá«ÇÑÍõ %s -efgmprstxw"
+msgid "Use the following single letter arguments instead:\n"
+msgstr "ËðÆîĶÇÄÞÌÄ¡ÇóÆàÅ¿í°ËôßåÅ\n"
+msgid "Invalid option\\\($1\\\).  Options have changed to single letters:"
+msgstr "àÒÕæòÙâú \\\($1\\\)¡¤ÄØÙòòÙâúüÈÊÕÒ³ÞÌÄ¡ÇóÆࡨ"
+msgid "$1 Component not installed"
+msgstr "ÆÜÇøæÒ $1 ÜÚǵ"
+msgid "Stopping all platform instances"
+msgstr "ØôÅÏÍÔÈ´ÆÍƺèÒËó"
+msgid "$COMPONENT component is not running"
+msgstr "$COMPONENT ÜÚǵÆÜÙÚÈç"
+msgid "Stopping $COMPONENT component"
+msgstr "ÆßÇãØôÅÏ $COMPONENT ÜÚǵ"
+msgid "Error in stopping $COMPONENT component"
+msgstr "ØôÅÏ $COMPONENT ÜÚǵÕëàõÆíòãë¨"
+#
+#================================
+# <WS>/packages/Setup/es-crlcon
+#================================
+msgid "   Sun Management Center Light Console Creation Program\n"
+msgstr "   Sun Management Center ÏÏâêÅäÚÕƺÐúÇ¡á£È¢\n"
+msgid "This program creates a directory of minimun required console components.\n"
+msgstr "Ⱥá£È¢ÙòÐúÇ¡ëæÊå޲ŷÄæÅäÚÕƺÜÚǵÎûÆøò硤\n"
+msgid "User can copy this directory to any machine with supported configuration\n"
+msgstr "ËðÆîϯƫÙòȺÆøòçîïêû̯ǶÈô̦ȴ̿ÅÅßÎØÙåôÎûçÙæªÄ¸\n"
+msgid "to run Console."
+msgstr "ÅèÙÚÈçÅäÚÕƺ¡¤"
+msgid "Destination [/tmp]: "
+msgstr "Æøíº [/tmp]¡¨ "
+msgid "Please remove the directory $dirname before proceeding"
+msgstr "îùÇãú«úýâÐÈçЩÜÃØæÆøòç $dirname"
+msgid "or use a different directory.\n"
+msgstr "ÍÐËðÆîÄâÇÑÎûÆøò硤\n"
+msgid "Do you want the directory to be in zip format [y|n] [y]: "
+msgstr "ÑÒÉÁÓÑüéÆøòçÈ©Ò³ zip ֪Ȣ [y|n] [y]¡¨ "
+msgid "Please enter path to the executable - zip: "
+msgstr "îùòÓÄ«Æ«ÙÚÈç - zip ÎûæûÕÀ¡¨ "
+msgid "Cannot find zip in $zippath."
+msgstr "$zippath ÄãÊÆÄâ̯ zip¡¤"
+msgid "Source will be taken from [/opt/SUNWsymon]: "
+msgstr "ËôäãÙò̽ÈÜ [/opt/SUNWsymon]¡¨ "
+msgid "Directory ${dirname} is created."
+msgstr "Æøòç ${dirname} ÄØÐúÇ¡¡¤"
+msgid "Creating zip file ...\n"
+msgstr "ÆßÇãÐúÇ¡ zip óò ...\n"
+msgid "SUNWsymon.zip can be transferred to other systems, unzip,\n"
+msgstr "SUNWsymon.zip Æ«ã®ØÊÈÝ̧ÅìË·ÜÓ¡¢ËäæØóÌô㡤\n"
+msgid "Zip file is created in "
+msgstr "Zip óòÐúÇ¡Íõ "
+msgid "\nPlease note:\n\n    Light console can be invoked by running:\n\n"
+msgstr "\nîùÎÃãô¡¨\n\n    Æ«Ýàç´ÙÚÈçĶÇÄÑÀÅïÌËƵÏÏâêÅäÚÕƺ¡¨\n\n"
+#
+#================================
+# <WS>/packages/Setup/es-sfix.sh
+#================================
+msgid "usage:\n"
+msgstr "ÆîÎΡ¨\n"
+msgid "process all modules                : es-sfix.sh\n"
+msgstr "ݨܡÍÔÈ´í¼ÜÚ                ¡¨es-sfix.sh\n"
+msgid "flush db & process all modules     : es-sfix.sh [-c | -C]\n"
+msgstr "ÊÕä» db ËäݨܡÍÔÈ´í¼ÜÚ     ¡¨es-sfix.sh [-c | -C]\n"
+msgid "process only for specifiec module  : es-sfix.sh [-m | -M] [module name]\n"
+msgstr "ƷݨܡÖÖÌùí¼ÜÚ  ¡¨es-sfix.sh [-m | -M] [í¼ÜÚÇØê¢]\n"
+msgid "starting Sun Management Center database\n"
+msgstr "ÚöÙ¯ Sun Management Center æñÕèÕ»\n"
+msgid "database startup failed, exiting\n"
+msgstr "æñÕèÕ»ÚöÙ¯ÆÂÚõ¡¢á¸ÊÖÄã\n"
+msgid "database is up\n"
+msgstr "æñÕèÕ»ÄØƵÅø\n"
+msgid "executing suggested fix script\n"
+msgstr "ÙÚÈçÐúú¾ÎûԺߦ Script\n"
+msgid "execution successful\n"
+msgstr "ÙÚÈçÈ©Åü\n"
+msgid "error in execution\n"
+msgstr "ÙÚÈçàõÆíòãë¨\n"
+msgid "shutting down the database\n"
+msgstr "ùÃÝðæñÕèÕ»\n"
+msgid "db-stop failed\n"
+msgstr "db-stop ÙÚÈçÆÂÚõ\n"
+msgid "purge database and process\n"
+msgstr "ÛÒØææñÕèÕ»ÌÏݨܡ\n"
+msgid "process only for module\n"
+msgstr "ã¯ÆîÍõí¼ÜÚÎûݨܡ\n"
+msgid "incorrect usage\n"
+msgstr "ÆîÎÎÄâÆßíý\n"
+msgid "invalid arguments\n"
+msgstr "Å¿í°àÒÕæ\n"
+msgid "default processing\n"
+msgstr "çßÝÃÎûݨܡá£Ê©\n"
+msgid "could not set java home directory\n"
+msgstr "àÒÎÎÝÃÌù java ØÄÌîÆøòç\n"
+msgid "please see the suggested fix log file in "
+msgstr "îùÙ¶ÈÓÐúú¾ÎûԺߦÅÊë¢óò¡¢ÈíÍõ"
+#
+#=================================
+# <WS>/packages/Setup/es-details
+#=================================
+msgid "ERROR: "
+msgstr "òã먡¨ "
+msgid "  Specify the tabs for a given Node_Object_Type.  The -f and -u\n"
+msgstr "  Ò³ÖÖÌùÎû Node_Object_Type ÑÀÌùíºü¾¡¤-f êØ -u\n"
+msgid "  options are mutually exclusive.\n"
+msgstr "  òÙâúÄëÒÞÚêØ桤\n"
+msgid "  where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "    a                  : All tabs provided by Sun Management Center\n"
+msgstr "    a                  ¡¨Æñ Sun Management Center ßÈËòÎûÍÔÈ´íºü¾\n"
+msgid "                         will be included.\n"
+msgstr "                         ÙòäÄÅýÉÖÇãÄù¡¤\n"
+msgid "    f inputfile        : Input file which contains list of tabs to\n"
+msgstr "    f inputfile        ¡¨ÉÖíºü¾ÛÒÞÌÎûòÓÄ«óò¡¢ÝÕËèíºü¾\n" 
+msgid "                         be used for the specified Node_Object_Type.\n"
+msgstr "                         ÙòÆîÍõÑÀÌùÎû Node_Object_Type¡¤\n"
+msgid "    n Node_Object_Type : Corresponds to the Node_Object_Type\n"
+msgstr "    n Node_Object_Type¡¨è×óÜÍõÇã es-device Script Äã\n"
+msgid "                         entered in the es-device script.\n"
+msgstr "                         òÓÄ«Îû Node_Object_Type¡¤\n"
+msgid "    o                  : Overwrite previously created tab file.\n"
+msgstr "    o                  ¡¨÷»ìÑÄæЩÐúÇ¡Îûíºü¾óò¡¤\n"
+msgid "                         Only meaningful when used with the -f\n"
+msgstr "                         Æ·È´ØÙÇÙ -f ËðÆîÕëÄßÈ´ãôåø\n"
+msgid "                         option.\n"
+msgstr "                         òÙâú¡¤\n"
+msgid "    u                  : Undo.  Restores the Node_Object_Type\n"
+msgstr "    u                  ¡¨ß¦ÔÏ¡¤Ùò Node_Object_Type ߦÔÏ\n"
+msgid "                         to its original state.\n"
+msgstr "                         ҳ̧ÔÏÈ´ÎûÎíè衤\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "Usage: $2 [ -a ] [ -f inputfile ] -n Node_Object_Type [ -o ] [ -u ]\n"
+msgstr "ÆîÎΡ¨$2 [ -a ] [ -f inputfile ] -n Node_Object_Type [ -o ] [ -u ]\n"
+msgid "Input file $2 does not exist"
+msgstr "òÓÄ«óò $2 ÄâÇôÇã"
+msgid "The Node_Object_Type must be specified."
+msgstr "ÆÒâüÑÀÌù Node_Object_Type¡¤"
+msgid "Either option -f or -u must be specified."
+msgstr "ÆÒâüÑÀÌùòÙâú -f ÍÐ -u ÄæÄ¡¡¤"
+msgid "Options -f or -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -f ÍÐ -u¡¤"
+msgid "Options -o and -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -o êØ -u¡¤"
+msgid "Options -a and -u cannot both be specified."
+msgstr "Äâ×äÇÑÕëÑÀÌùòÙâú -a êØ -u¡¤"
+msgid "es-details has not yet been run with Node_Object_Type $2."
+msgstr "ÌþÆÜÅè Node_Object_Type $2 ÙÚÈç es-details¡¤"
+msgid "Tab name not specified for DEFAULT statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸ Ò³ DEFAULT ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "Only one tab can be defined as the DEFAULT."
+msgstr "Æ·×äÑÀÌùÄ¡Ô¶íºü¾É¢Ò³ DEFAULT¡¤"
+msgid "Tab name not specified for INCLUDE statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸҳ INCLUDE ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "$2 is not a valid Sun Management Center tab on line $3."
+msgstr "$2 ÄâÑÒÈç $3 ĸÎûÈ´Õæ Sun Management Center íºü¾¡¤"
+msgid "Tab name not specified for APPEND statement on line $2."
+msgstr "ÆÜÇãÈç $2 ĸҳ APPEND ë©ÍüÑÀÌùíºü¾ÇØꢡ¤"
+msgid "Tab name $2 must be in format file:key on line $3."
+msgstr "Èç $3 ĸíºü¾ÇØê¢ $2 Îû֪ȢÆÒâüÒ³ file:key¡¤"
+msgid "Help key not specified for user-defined tab $2 on line $3."
+msgstr "ÆÜÇãÈç $3 ĸҳËðÆîϯÌùåøÎûíºü¾ $2 ÑÀÌùëºÉ·ë©Íüõ"
+msgid "Help Key $2 must be in format key:file on line $3."
+msgstr "Èç $3 ĸÎûëºÉ·ë©Íüõï $2 Îû֪ȢÆÒâüÒ³ key:file¡¤"
+msgid "Java class not specified for user-defined tab $2 on line $3."
+msgstr "ÆÜÇãÈç $3 ĸҳËðÆîϯÌùåøÎûíºü¾ $2 ÑÀÌù Java ùËɱ¡¤"
+msgid "Key $2 is not a valid key on line $3."
+msgstr "õï $2 ÄâÑÒÈç $3 ĸÎûÈ´Õæõ"
+msgid "Input file $2 contains no APPEND or INCLUDE statements"
+msgstr "òÓÄ«óò $2 ÄâÉÖ APPEND ÍÐ INCLUDE ë©Íü"
+msgid "$2 is not a valid Node_Object_Type."
+msgstr "$2 ÄâÑÒÈ´ÕæÎû Node_Object_Type¡¤"
+msgid "The specified default tab $2 was not found in the inputfile."
+msgstr "òÓÄ«óòÄãÊÆÄâ̯ÑÀÌùÎûçßÝÃíºü¾ $2¡¤"
+msgid "The tabs for this object have already been specified, use -o option to overwrite."
+msgstr "ÄØåîÑÀÌùÆîÍõȺÎìǵÎûíºü¾¡¢îùËðÆî -o òÙâúËô÷»ìÑ¡¤"
+msgid "Can only modify the family file for Sun Management Center agents."
+msgstr "Æ·×äÒ³ Sun Management Center ÅîÜ¡á£È¢ÔºÊÑÕ¥Úþóò¡¤"
+#
+#===========================
+# <WS>/packages/Setup/es-dt
+#===========================
+msgid "ERROR: "
+msgstr "òã먡¨ "
+msgid "  where the options represent:\n"
+msgstr "   ̧Äã¡¢ÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "    a          : Add a reference.\n"
+msgstr "    a          ¡¨ä»ìÁÙ¶äùæñÕ衤\n"
+msgid "    d          : Delete a reference.\n"
+msgstr "    d          ¡¨É´ØæÙ¶äùæñÕ衤\n"
+msgid "    v          : View references.  This is the default option.\n"
+msgstr "    v          ¡¨óôáþÙ¶äùæñÕ衤ȺҳçßÝÃòÙâú¡¤\n"
+msgid "    s          : Add/Delete/View on the Platform Agent.  By default the\n"
+msgstr "    s          ¡¨ÇãÆÍƺÅîÜ¡á£È¢Ä¸ä»ìÁ/É´Øæ/óôáþ¡¤ËíçßÝá¢\n"
+msgid "                 operation is performed on the Agent.\n"
+msgstr "                 ðçÉ¢äÄÇãÅîÜ¡á£È¢Ä¸ÙÚÈ硤\n"
+msgid "    h hostname : Agent hostname of machine running the Discovery Object Table.\n"
+msgstr "    h Åäñ¢ÇØꢡ¨ÙÚÈçÚØ×ÄÎìǵÏÐÄæçÙæªÎûÅîÜ¡Åäñ¢ÇØꢡ¤\n"
+msgid "    l label    : Unique label for the Composite Object to add or delete.\n"
+msgstr "    l íºü¾    ¡¨ÓÑä»ìÁÍÐÉ´ØæÎûÜÚÇÙÎìǵñÁÈ´íºü¾¡¤\n"
+msgid "    n not      : Node_Object_Type for the Composite Object to add.\n"
+msgstr "    n not      ¡¨ÓÑä»ìÁÎûÜÚÇÙÎìǵ Node_Object_Type¡¤\n"
+msgid "    o OID      : Discovery Object Table OID to add.\n"
+msgstr "    o OID      ¡¨ÓÑä»ìÁÎûÚØ×ÄÎìǵÏÐ OID¡¤\n"
+msgid "    p port     : Agent port of machine running the Discovery Object Table.\n"
+msgstr "    p port     ¡¨ÙÚÈçÚØ×ÄÎìǵÏÐÄæçÙæªÎûÅîÜ¡á£È¢ÙÕ¡¤\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "ESDIR must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR"
+msgid "Usage: $2 -a \\\| -d \\\| -v [ -s ] -h hostname -l label -n not -o OID -p port\n"
+msgstr "ÆîÎΡ¨$2 -a \\\| -d \\\| -v [ -s ] -h Åäñ¢ÇØê¢ -l íºü¾ -n not -o OID -p port\n"
+msgid "It cannot be loaded on both the Agent and Platform Agent."
+msgstr "Äâ×äÇÑÕëÇãÅîÜ¡á£È¢Å¯ÆÍƺÅîÜ¡á£È¢Äãç¥Ä«ÆÆ¡¤"
+msgid "The options -h, -l, -n, -o, and -p must all be used with the -a option."
+msgstr "òÙâú -h¡£-l¡£-n¡£-o ÌÏ -p ÇÀÝçÆÒâüä®ØÙ -a òÙâúËôËðÆ"
+msgid "An entry for $2 already exists."
+msgstr "ÆîÍõ $2 ÎûâúÆøÄØåîÇôÇ㡤"
+msgid "The option -l must be used with the -d option."
+msgstr "òÙâú -l ÆÒâüä®ØÙ -d òÙâúËðÆ"
+msgid "The options -h, -n, -o, and -p are not valid with the -d option."
+msgstr "òÙâú -h¡£-n¡£-o êØ -p Äâ×ää®ØÙ -d òÙâú¡¤"
+msgid "An entry for $2 does not exist."
+msgstr "ÆîÍõ $2 ÎûâúÆøÄâÇôÇ㡤"
+msgid "The options -h, -l, -n, -o, and -p are not valid with the -v option."
+msgstr "òÙâú -h¡£-l¡£-n¡£-o êØ -p Äâ×ää®ØÙ -v òÙâú¡¤"
+msgid "No entries."
+msgstr "ÊôÈ´âúÆø¡¤"
+msgid "The file $2 is not readable."
+msgstr "óòÕù $2 ÄâÆ«ûô̽¡¤"
+msgid "Discovery Service loaded on: Agent"
+msgstr "ÚØ×ÄΤ٭ÄØç¥Ä«¡¨Agent"
+msgid "Discovery Service loaded on: Platform Agent."
+msgstr "ÚØ×ÄΤ٭ÄØç¥Ä«¡¨ÆÍƺÅîÜ¡á£È¢¡¤"
+msgid "Entries:"
+msgstr "âúÆø¡¨"
+msgid "The discovery table is already loaded on the Agent."
+msgstr "ÚØ×ÄÏÐÄØåîÇãÅîÜ¡á£È¢Ä¸ç¥Ä«¡¤"
+msgid "The discovery table is already loaded on the Platform Agent."
+msgstr "ÚØ×ÄÏÐÄØåîÇãÆÍƺÅîÜ¡á£È¢Ä¸ç¥Ä«¡¤"
+#
+#=============================
+# <WS>/packages/Setup/es-apps
+#=============================
+msgid "This script reads the specified configuration file or\\n%s if not specified,\\nand installs the applications with the server."
+msgstr "Ⱥ Script ûô̽ÑÀÌùÎûØÙåôóòÕùÍÐÑÒ\\n%s¡¾ÇñΪËäÆÜÑÀÌù¡¿¡¢\\nËäÅèÈùΤðÂÇøæÒóÜÆîá£È¢¡¤"
+msgid "The configuration file contains one or more lines using the following format:\n"
+msgstr "ØÙåôóòÅýÉÖÄ¡ÍÐÇéÈçËðÆîÅèĶ֪ȢÎûÄùÕ©¡¨\n"
+msgid "where:\n"
+msgstr "̧Ä㡨\n"
+msgid "name\tis the name of the application that appears in the Application list\n"
+msgstr " name\tÑÒæÚóÜÆîá£È¢Çã¡ÖóÜÆîá£È¢¡×ÛÒÞÌÄãüÏÆüÎûÇØê¢"
+msgid "class\tis the name of the Java class for the application\n"
+msgstr " class\tÑÒæÚóÜÆîá£È¢Îû Java ùËɱ\n"
+msgid "args\tare optional user defined arguments to be passed to the application\n"
+msgstr "args\tÑÒÆîËôâÐÄ«æÚóÜÆîá£È¢ÎûËðÆîϯÌùåøÄæüÈí°¡¾Æ«òÙðåÎû¡¿\n"
+msgid "help\tis the optional help specification using the format key:helpfile or :url.\n"
+msgstr "help\tÑÒËðÆîkey:helpfile ÍÐ :url ֪ȢÎûëºÉ·ë©ÍüÄæë©Íü¡¾Æ«òÙðåÎû¡¿¡¤\n"
+msgid "There should be no quotes in the line.\n"
+msgstr "ÈçÄãÄâ×äÈ´Å¿æÀ¡¤\n"
+msgid "Lines beginning with # are considered as comments.\n"
+msgstr "Åè # âäó¤ÎûÄùÕ©ÙòÝ·áþÒ³â¡æØ¡¤"
+msgid "For example:\n"
+msgstr "ËóÇñ¡¨\n"
+msgid "Using %s"
+msgstr "ËðÆî %s"
+msgid "%s updated."
+msgstr "%s ÄØÊÕ仡¤"
+#
+#================================
+# <WS>/packages/Setup/db-export.sh
+#================================
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+#
+#==================================
+# <WS>/packages/Setup/db-import.sh
+#==================================
+msgid "This action is limited to superuser only.\n"
+msgstr "ȺðçÉ¢ã¯ÓîÍõâ¾×ÈËðÆîϯ¡¤\n"
+msgid "Exiting $PROGNAME."
+msgstr "ÆßÇãá¸ÊÖ $PROGNAME¡¤"
+msgid "please ensure Topology & Event agents are not running..."
+msgstr "îùíýÌùÍßðôůËçǵÅîÜ¡á£È¢ËäÆÜÙÚÈç..."
+#
+#============================
+# <WS>/packages/Setup/es-run
+#============================
+msgid "Usage : $PROGNAME option1 [option2,...]"
+msgstr "ÆîÎΡ¨$PROGNAME òÙâú 1 [òÙâú 2,...]"
+msgid "   where option1 is a Sun Management Center utility\n   and option2,...  are the arguments for 'option1'\n\n   If option1 is '-help', then the usage is printed.\n\n"
+msgstr "   ̧Äã¡¢òÙâú 1 ÑÒ Sun Management Center ÄüÆîá£È¢\n    ÈÔòÙâú 2,... ÑÒ¡äòÙâú 1¡åÎûÅ¿í°\n\n   ÇñΪòÙâú 1 ÑÒ '-help'¡¢ÙòÇÄÇÍ̧ÆîÎΡ¤\n\n"
+#
+#==============================
+# <WS>/packages/Setup/es-chelp
+#===============================
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+msgid "There is an existing $PROGRAM lockfile, $LOCKFILE"
+msgstr "ÇôÇãÄ¡Ô¶ $PROGRAM ÷ÕÌùóòÕù¡¢$LOCKFILE"
+msgid "which indicates that process is executing the $PROGRAM"
+msgstr "ÆÆÏÐÆüݨܡÆßÇãÙÚÈç $PROGRAM"
+msgid "If this is not the case, delete the lock file,"
+msgstr "ÇñΪÄâÑÒÝÕê¡ÚÅÎÓ¡¢É´ØæȺ÷ÕÌùóòÕù¡¢"
+msgid "$LOCKFILE and execute $PROGRAM again."
+msgstr "$LOCKFILE ËäÇÂȹÙÚÈç $PROGRAM¡¤"
+msgid "$sdk_helpfile either does not exist or is not writable"
+msgstr "$sdk_helpfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+#
+#========================================
+# <WS>/src/db/build/build-recovery*.ksh
+#========================================
+msgid "The directory $2 does not exist"
+msgstr "Æøòç $2 ÄâÇôÇã"
+msgid "Usage: $PROGNAME -au auid -ap apword -wu wuid -wp wpword -sp syspword -s osrvname -tsn tsname -tsp tsphyspath -tsis tssize -olfp olfpath [-cdb] [-vr]"
+msgstr "ÆîÎΡ¨$PROGNAME -au auid -ap apword -wu wuid -wp wpword -sp syspword -s osrvname -tsn tsname -tsp tsphyspath -tsis tssize -olfp olfpath [-cdb] [-vr]"
+msgid "   -au auid               :  userid used to admin smc tablespace"
+msgstr "   -au auid               ¡¨ÆîËôê§Ü¡ smc ÏÐ֪ϨâæÎû userid"
+msgid "   -ap apword             :  password for corresponding admin userid"
+msgstr "   -ap apword             ¡¨è×óÜê§Ü¡ userid ÎûÙïî£"
+msgid "   -wu wuid               :  working userid used by application"
+msgstr "   -wu wuid               ¡¨óÜÆîá£È¢ËðÆîÎûÄÖÉ¢ userid"
+msgid "   -wp wpword             :  working password for corresponding working userid"
+msgstr "   -wp wpword             ¡¨è×óÜÄÖÉ¢ userid ÎûÄÖÉ¢Ùïî£"
+msgid "   -sp syspword           :  password for system userid \\\(system\\\)"
+msgstr "   -sp syspword           ¡¨Ë·ÜÓ userid ÎûÙïî£ \\\(system\\\)"
+msgid "   -s osrvname            :  name of the oracle service used to connect to db"
+msgstr "   -s osrvname            ¡¨ÆîÍõÝÙÚÙ̯æñÕèÕ»Äæ oracle Τ٭ÎûÇØê¢"
+msgid "   -tsn tsname            :  name of the tablespace"
+msgstr "   -tsn tsname            ¡¨ÏÐ֪ϨâæÎûÇØê¢"
+msgid "   -tsp tsphyspath        :  physical location of tablespace"
+msgstr "   -tsp tsphyspath        ¡¨ÏÐ֪ϨâæÎûèÒüÕÈíåô"
+msgid "   -tsis tssize           :  initial size of tablespace \\\(in M bytes\\\)"
+msgstr "   -tsis tssize           ¡¨ÏÐ֪ϨâæÎûÞ²ÏÏÄËÄÑ \\\(Åè MB Ò³ÞÌÈí\\\)"
+msgid "   -olfp olfpath          :  physical location \\\(local\\\) to write the smc30.oracle file"
+msgstr "   -olfp olfpath          ¡¨ÆîËôìÑÄ« smc30.oracle óòÎûèÒüÕÈíåô\\\(ÆÛê¦\\\)"
+msgid "   -cdb                   :  indicates that any existing tablespace and user"
+msgstr "   -cdb                   ¡¨ÑÀÅøÍÔȴܢȴÎûÏÐ֪ϨâæůËðÆîϯ"
+msgid "                             matching the specified parameters above are"
+msgstr "                             ¡¾ÜÊÇÙĸÓòÑÀÌùÄæÙ¶í°Ï¯¡¿Ýç"
+msgid "                             dropped before proceeding. use is optional"
+msgstr "                             Çãú«úýâÐÈçЩ۹åô¡¤Æ«òÙðåÑÒÉÁËðÆî"
+msgid "   -vr                    :  this option is used to verify all objects"
+msgstr "   -vr                    ¡¨ÈºòÙâúÑÒÆîËôüÓøýÍÔÈ´ÎûÎìǵ"
+msgid "                             and to perform a recovery sequence if any"
+msgstr "                             ÅèůÙÚÈçߦÔÏÎûÑ¥úýٯɢ¡¾ÇñΪ"
+msgid "                             problems are detected"
+msgstr "                             ØþàÁ̯ǶÈôÙÂ÷î¡¿"
+msgid "   -ver                   :   option"
+msgstr "   -ver                   ¡¨òÙâú"
+msgid "   -lf logfile            :  logfile name"
+msgstr "   -lf logfile            ¡¨ÅÊë¢óòÇØê¢"
+msgid "ERROR: the ESDIR environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESDIR ô¿èºüÈí°"
+msgid "illegal option encoutered : $2"
+msgstr "ç²Ì¯ÄâÇÙë£ÎÎÎûòÙâú¡¨$2"
+msgid "this is a pc installation : $2"
+msgstr "Ⱥҳ pc ÇøæÒ¡¨$2"
+msgid "this is a sparc installation : $2"
+msgstr "Ⱥҳ sparc ÇøæÒ¡¨$2"
+msgid "unknown system type, exiting........................"
+msgstr "Ë·ÜÓùËÐÎÄâÍü¡¢á¸ÊÖÄã........................"
+msgid "can not find sqlplus on path, exiting........................."
+msgstr "æûÕÀĸÊÆÄâ̯ sqlplus¡¢á¸ÊÖÄã........................."
+msgid "the current directory is not writable "
+msgstr "ÆøЩÆøòçÄâÆ«ìÑÄ« "
+msgid "sqlplus writes an error log \\\(sqlnet.log\\\)"
+msgstr "sqlplus Ùòòãë¨ÅÊë¢ìÑÄ« \\\(sqlnet.log\\\)"
+msgid "to the current directory in the event of"
+msgstr "ÆøЩÎûÆøòçÄ㡾ÇãÝÙÚÙÙÂ÷î"
+msgid "a connection problem"
+msgstr "ÎûËçǵÄã¡¿"
+msgid "the /tmp directory does not exist"
+msgstr "/tmp ÆøòçÄâÇôÇã"
+msgid "however, a file named /tmp does exist"
+msgstr "Äâç´¡¢È´Ô¶ÇØÒ³ /tmp ÎûóòÕùÇôÇã"
+msgid "/tmp directory is not writable "
+msgstr "/tmp ÆøòçÄâÆ«ìÑÄ«"
+msgid "the \\\(-au auid\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-au auid\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-ap apword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-ap apword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-wu wuid\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-wu wuid\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-wp wpword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-wp wpword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-sp syspword\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-sp syspword\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-s osrvname\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-s osrvname\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsn tsname\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsn tsname\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsp tsphyspath\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsp tsphyspath\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-tsis tssize\\\) command line parameter was not specified "
+msgstr "ÆÜÑÀÌù \\\(-tsis tssize\\\) ÑÀÅïÈçÙ¶í°"
+msgid "the \\\(-olfp olfpath\\\) command line parameter was invalid! "
+msgstr "\\\(-olfp olfpath\\\) ÑÀÅïÈçÙ¶í°àÒÕ桪 "
+msgid "exiting..................."
+msgstr "á¸ÊÖÄã..................."
+msgid "The Initial Tablespace Size given is not invalid"
+msgstr "ÑÀÌùÎûÞ²ÏÏÏÐ֪ϨâæÄËÄÑàÒÕæ"
+msgid "valid range is 1 to 500 M"
+msgstr "È´ÕæÎûî¯ÞØÒ³ 1 ̯ 500 M"
+msgid "Writing Applogin file : $2"
+msgstr "ìÑÄ« Applogin óò¡¨$2"
+msgid "file : $2, has a quit statement in it."
+msgstr "file : $2¡¢Ì§ÄãÈ´Ä¡Ô¶ØÍÅøë©Íü¡¤"
+msgid "file : $str3, has a quit statement in it."
+msgstr "file : $str3¡¢Ì§ÄãÈ´Ä¡Ô¶ØÍÅøë©Íü¡¤"
+msgid "need to remove quit statements, exiting........................"
+msgstr "ëæÓÑÜÃØæØÍÅøë©Íü¡¢á¸ÊÖÄã........................"
+msgid "source file: $2 for step: $3 is missing"
+msgstr "Ëôäãóò¡¨$2¡¾ÆîÍõÊãüõ¡¨$3¡¿òÜÆÂ"
+msgid "probably need to execute mkaggregatefiles.ksh"
+msgstr "Æ«×äëæÙÚÈç mkaggregatefiles.ksh"
+msgid "source file for one or more steps is missing, exiting........................"
+msgstr "ÆîÍõÄ¡ÍÐÇéÔ¶ÊãüõÎûËôäãóòòÜÆ¡¢á¸ÊÖÄã........................"
+msgid " removing existing logfile : /tmp/recovery.err"
+msgstr " ÜÃØæܢȴÎûÅÊë¢óò¡¨/tmp/recovery.err"
+msgid " removing existing logfile :  $2"
+msgstr " ÜÃØæܢȴÎûÅÊë¢óò¡¨  $2"
+msgid " removing existing temporary sql :  $2"
+msgstr " ÜÃØæܢȴÎûí²Õë sql¡¨  $2"
+msgid "Unable to successfully append $2 onto $3"
+msgstr "àÒÎÎÈ©ÅüÙòÇóÊ¢ $2 ÅûÇã $3"
+msgid "return code from cat : $2"
+msgstr "ËôÈÜ cat Îûã®Çß¨$2"
+msgid "$2 file not found"
+msgstr "ÊÆÄâ̯ $2 óò"
+msgid "Unable to successfully substitue in $2"
+msgstr "àÒÎÎÇã $2 ÄãÈ©Åü̽Åî"
+msgid "substitution string : $2"
+msgstr "̽ÅîÇóÈ롨$2"
+msgid "return code from sed : $2"
+msgstr "ËôÈÜ sed Îûã®Çß¨$2"
+msgid "Unable to successfully perform all sed based substitutions on $2 into $3"
+msgstr "àÒÎÎÈ©ÅüÙò $2 ĸÎûÍÔÈ´ sed ÐÎ̽ÅîðçÉ¢ÙÚÈç̯ $3 Äã"
+msgid "return code from grep : $2, meaning it found un-substituted strings"
+msgstr "ËôÈÜ grep Îûã®Çß¨$2¡¢ÅîÏÐÆÆÊÆ̯ÆÜ̽ÅîÎûÇóÈë"
+msgid "$2 file not found\\\(1\\\)"
+msgstr "ÊÆÄâ̯ $2 óò\\\(1\\\)"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "sqlerror code = $2"
+msgstr "sqlerror î£ = $2"
+msgid "sqlerrmsg full = \\\>\\\>\\\> $2\\\<\n"
+msgstr "sqlerrmsg ÄØéÈ =\\\>\\\>\\\> $2\\\<\n"
+msgid "unhandled error detected, only recourse is to stop processing"
+msgstr "ØþàÁ̯ÆÜݨܡÎûòã먡¢ÙÄÄ¡ÎûÅÉÈ¢ÑÒØôÅÏݨܡ"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "execution of $2 ok!!"
+msgstr "$2 ÎûÙÚÈçÆßÚ¦¡ª¡ª"
+msgid "step file $2 not found"
+msgstr "ÊÆÄâ̯Êãüõóò $2"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "skipping execution of $2"
+msgstr "æüç´ $2 ÎûÙÚÈç"
+msgid "$2 dependent step $3 did not execute"
+msgstr "ËíòÊÊãüõ $3 Îû $2 ÆÜÙÚÈç"
+msgid "$2 dependent step $3 failed execution"
+msgstr "ËíòÊÊãüõ $3 Îû $2 ÙÚÈçÆÂÚõ"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "while in recovery mode, attempts to find a successfully executed dependent of "
+msgstr "ÇãߦÔÏí¼È¢Ä¶Õë¡¢ÞòÊÆÄØÈ©ÅüÙÚÈçËíòÊÊãüõ $2 ÎûæÜè·"
+msgid "the $2 step was unsuccessfull.  premature exit!!"
+msgstr "ÄâÈ©Åü¡¤ßÈÈ®á¸ÊÖ¡ª¡ª"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "while in recovery mode, attempts to find a valid step to execute following "
+msgstr "ÇãߦÔÏí¼È¢Ä¶Õë¡¢ÞòÊÆÆ«ÙÚÈçĶÇÄÊãüõ $2 ÎûÈ´ÕæÊãüõ"
+msgid "the $2 step was unsuccessfull.  premature exit!!"
+msgstr "ÄâÈ©Åü¡¤ßÈÈ®á¸ÊÖ¡ª¡ª"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "too many attempts to execute the $2 step"
+msgstr "ÙÚÈç $2 ÊãüõÎûè©æÜÅ´Çé"
+msgid "please see the $2 file for additional details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÎû̧ÅìæÛÜØæñع"
+msgid "exiting main processing loop..................."
+msgstr "ÆßÇãá¸ÊÖÅäݨܡØÏæû..................."
+msgid "please see the $2 file for listing details"
+msgstr "îùÙ¶ËÄ $2 óòÄãÇÄÆüÎûæÛÜØæñع"
+#
+#========================================
+# <WS>/src/db/build/mkaggregatefiles.ksh
+#========================================
+msgid " removing existing verify inventory  : agg-verify-proc-inventory.sql"
+msgstr " ÜÃØæܢȴÎûüÓøýÕ»Çô¡¨agg-verify-proc-inventory.sql"
+msgid "-        Create agg-packages-topology.sql file              -"
+msgstr "-        ÐúÇ¡ agg-packages-topology.sql óò              -"
+msgid "-       Create agg-procedures-topology.sql file             -"
+msgstr "-       ÐúÇ¡ agg-procedures-topology.sql óò             -"
+msgid "-          Add to agg-createalltables.sql file              -"
+msgstr "-          ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-       Add to agg-verifyalltableattribs.sql file           -"
+msgstr "-       ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-          Add to agg-dataload-preseq.sql file              -"
+msgstr "-          ä»ìÁÈÝ agg-dataload-preseq.sql óò              -"
+msgid "-        Create agg-packages-eventmanager.sql file          -"
+msgstr "-        ÐúÇ¡ agg-packages-eventmanager.sql óò          -"
+msgid "-        Create agg-procedures-eventmanager.sql file        -"
+msgstr "-        ÐúÇ¡ agg-procedures-eventmanager.sql óò        -"
+msgid "-         Add to agg-createalltables.sql file               -"
+msgstr "-         ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-         Add to agg-verifyalltableattribs.sql file         -"
+msgstr "-         ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-       Create agg-packages-mgmtservice.sql file            -"
+msgstr "-       ÐúÇ¡ agg-packages-mgmtservice.sql óò            -"
+msgid "-       Create agg-procedures-mgmtservice.sql file          -"
+msgstr "-       ÐúÇ¡ agg-procedures-mgmtservice.sql óò          -"
+msgid "-           Add to agg-createalltables.sql file             -"
+msgstr "-         ä»ìÁÈÝ agg-createalltables.sql óò               -"
+msgid "-         Add to agg-verifyalltableattribs.sql file         -"
+msgstr "-         ä»ìÁÈÝ agg-verifyalltableattribs.sql óò         -"
+msgid "-        Create agg-verify-proc-inventory.sql file          -"
+msgstr "-        ÐúÇ¡ agg-verify-proc-inventory.sql óò          -"
+#
+#==================================================
+# <WS>/src/oa/modules/configd4u/bin/es-setup.sh
+#==================================================
+msgid "Setup failed while adding module $2 into $3"
+msgstr "Ùòí¼ÜÚ $2 ä»ìÁÈÝ $3 ÕëÝÃÌùÙÚÈçÆÂÚõ"
+msgid "$2 does not exist"
+msgstr "$2 ÄâÇôÇã"
+msgid "Added module $2 to $3."
+msgstr "ÄØÙòí¼ÜÚ $2 ä»ìÁÈÝ $3¡¤"
+msgid "$2 is not readable, Could not add the module $3"
+msgstr "$2 ÄâÆ«ûô̽¡¢àÒÎÎä»ìÁÈÝí¼ÜÚ $3"
+msgid "Setup of sunfire config reader module failed."
+msgstr "sunfire ØÙåôûô̽ðÂí¼ÜÚÎûÝÃÌùÆÂÚõ¡¤"
+#
+#======================================
+# <WS>/src/oa/base/generic/bin/*.sh
+#======================================
+msgid "usage: $basename [-sh|-csh] [-internal|-external]"
+msgstr "ÆîÎΡ¨$basename [-sh|-csh] [-internal|-external]"
+msgid "ERROR: the ESROOT environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "usage: $PROGNAME -s \\\"<secret> [-p <public>]  [-u <user>[ ...]] [-h <host>] [-c <component>[ ...]]\\\""
+msgstr "ÆîÎΡ¨$PROGNAME -s \\\"<Ùïǵ> [-p <ÄüÆî>]  [-u <ËðÆîϯ>[ ...]][-h <Åäñ¢>] [-c <ÜÚǵ>[ ...]]\\\""
+msgid "       <secret> is the superuser password\n"
+msgstr "       <Ùïǵ> ÑÒâ¾×ÈËðÆîϯÎûÙïî£\n"
+msgid "       <public> is the public password (default=public)\n"
+msgstr "       <ÄüÆî> ÑÒÄüÆîÙï¾çßÝÃÔ«=public¡¿\n"
+msgid "       <user> is the list of initial seeded users\n"
+msgstr "       <ËðÆîϯ> ÑÒÏÏÌîÎûê¡ÄÍËðÆîϯÛÒÞÌ\n"
+msgid "       <host> is the fallback host name\n"
+msgstr "       <Åäñ¢> ÑÒØÍÇßÎûÅäñ¢ÇØê¢\n"
+msgid "       <component> is agent/cfgserver/event/cstservice/topology/trap/\n"
+msgstr "       <ÜÚǵ> ÑÒ agent/cfgserver/event/cstservice/topology/trap/\n"
+msgid "       Omit all <component>s to do them all\n"
+msgstr "       ÒÜÜ©ÍÔÈ´Îû <ÜÚǵ> ÅèòÙðåÇÀÝå\n"
+msgid "$PROGNAME: ESROOT must be set."
+msgstr "$PROGNAME: ÆÒâüÝÃÌù ESROOT¡¤"
+msgid "$PROGNAME: $1: unknown component"
+msgstr "$PROGNAME: $1: ÄâÍüÎûÜÚǵ"
+msgid "$PROGNAME: ERROR: blank secret not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙïǵ¡¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: ERROR: blank password not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙï¢á¸ÊÖÄã ..."
+msgid "PROGNAME: WARNING ... secret will be truncated to 8 characters"
+msgstr "PROGNAME: úÀÉË ... ÙïǵÙòôãàûÒ³ 8 Ô¶ÇóÄ÷"
+msgid "$PROGNAME: security.superuser name not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.superuser ÇØꢡ¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.generaluser name not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.generaluser ÇØꢡ¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$var"
+msgstr "$var"
+msgid "Interrupted..."
+msgstr "ÄØÄãöË..."
+msgid "$PROGNAME: security.userfile not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.userfile¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.authOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.authOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.privOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.privOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: ${COMP}.${COMP}Server not found - using $DEFHOST."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}Server - ËðÆî $DEFHOST¡¤"
+msgid "$PROGNAME: ${COMP}.${COMP}snmpPort not found - skipping $COMP."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}snmpPort - Ü©ç´ $COMP¡¤"
+msgid "ESROOT must be set\n"
+msgstr "ÆÒâüÝÃÌù ESROOT\n"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "OS $sys $rel is not supported"
+msgstr "ÄâÅÅßÎ OS $sys $rel"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "gettext 'Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "gettext 'É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+#
+#=================================================
+# <WS>/src/java/base/console/bin/es-console.sh
+#=================================================
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "DISPLAY environment variable must be set"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°"
+msgid "SYMON_JAVAHOME variable must be set"
+msgstr "ÆÒâüÝÃÌù SYMON_JAVAHOME üÈí°"
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+#
+#============================================
+# <WS>/src/java/base/server/bin/es-server*
+#============================================
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "No Processes Killed"
+msgstr "àÒïÎÉ´ØæÎûݨܡ"
+msgid "gettext 'More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "gettext 'ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID using kill -9 \\\($COMMAND\\\)"
+msgstr "ËðÆî kill -9 ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID with kill -9 \\\($COMMAND\\\)"
+msgstr "Åè kill -9 É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "ESDIR environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR ô¿èºüÈí°"
+msgid "SYMON_JAVAHOME variable must be set"
+msgstr "ÆÒâüÝÃÌù SYMON_JAVAHOME üÈí°"
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+#
+#====================================================
+# <WS>/src/java/com/sun/symon/base/cli/bin/es-cli
+#====================================================
+msgid "$SYMON_JAVAHOME/jre/bin/java must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$SYMON_JAVAHOME/jre/bin/java ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+
+#
+#  Strings from Halcyon scripts
+#
+msgid "usage: $basename [-sh|-csh] [-internal|-external]"
+msgstr "ÆîÎΡ¨$basename [-sh|-csh] [-internal|-external]"
+msgid "ERROR: the ESROOT environment variable has not been set"
+msgstr "òã먡¨ÌþÆÜÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "usage: $PROGNAME -s <secret> [-p <public>]  [-u <user>[ ...]] [-h <host>] [-c <component>[ ...]]"
+msgstr "ÆîÎΡ¨$PROGNAME -s <Ùïǵ> [-p <ÄüÆî>]  [-u <ËðÆîϯ>[ ...]][-h <Åäñ¢>] [-c <ÜÚǵ>[ ...]]"
+msgid "<secret> is the superuser password"
+msgstr "<Ùïǵ> ÑÒâ¾×ÈËðÆîϯÎûÙïî£"
+msgid "<public> is the public password (default=public)"
+msgstr "<ÄüÆî> ÑÒÄüÆîÙï¾çßÝÃÔ«=public¡¿"
+msgid "<user> is the list of initial seeded users"
+msgstr "<ËðÆîϯ> ÑÒÏÏÌîÎûê¡ÄÍËðÆîϯÛÒÞÌ"
+msgid "<host> is the fallback host name"
+msgstr "<Åäñ¢> ÑÒØÍÇßÎûÅäñ¢ÇØê¢"
+msgid "<component> is agent/cfgserver/event/topology/trap"
+msgstr "<ÜÚǵ> ÑÒ agent/cfgserver/event/topology/trap"
+msgid "Omit all <component>s to do them all"
+msgstr "ÒÜÜ©ÍÔÈ´Îû <ÜÚǵ> ÅèòÙðåÇÀÝå"
+msgid "$PROGNAME: ESROOT must be set."
+msgstr "$PROGNAME: ÆÒâüÝÃÌù ESROOT¡¤"
+msgid "$PROGNAME: $1: unknown component"
+msgstr "$PROGNAME: $1: ÄâÍüÎûÜÚǵ"
+msgid "$PROGNAME: ERROR: blank secret not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙïǵ¡¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: ERROR: blank password not allowed, exiting ..."
+msgstr "$PROGNAME: òã먡¨ÄâÄøÝÂϨÆõÙï¢á¸ÊÖÄã ..."
+msgid "$PROGNAME: WARNING ... secret will be truncated to 8 characters"
+msgstr "$PROGNAME: úÀÉË ... ÙïǵÙòôãàûÒ³ 8 Ô¶ÇóÄ÷"
+msgid "$PROGNAME: security.superuser name not found. Check domain-confg.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.superuser ÇØꢡ¤îùóôÑç domain-confg.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.generaluser name not found. Check domain-cofig.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.generaluser ÇØꢡ¤îùóôÑç domain-cofig.x ÍÐ user-config.x óòÕù"
+msgid "Copying $FILENAME to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò $FILENAME îïêû̯ $ESDIR/cfg..."
+msgid "Copying ${1}-${FILENAME} to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò ${1}-${FILENAME} îïêû̯ $ESDIR/cfg..."
+msgid "Copying ${COMP}-${FILENAME} to $ESDIR/cfg..."
+msgstr "ÆßÇãÙò ${COMP}-${FILENAME} îïêû̯ $ESDIR/cfg..."
+msgid "$var"
+msgstr "$var"
+msgid "Interrupted..."
+msgstr "ÄØÄãöË..."
+msgid "$PROGNAME: security.userfile not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.userfile¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.authOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.authOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: security.privOID not found. Check domain-config.x or user-config.x files"
+msgstr "$PROGNAME: ÊÆÄâ̯ security.privOID¡¤îùóôÑç domain-config.x ÍÐ user-config.x óòÕù"
+msgid "$PROGNAME: ${COMP}.${COMP}Server not found - using $DEFHOST"
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}Server - ËðÆî $DEFHOST"
+msgid "$PROGNAME: ${COMP}.${COMP}snmpPort not found - skipping $COP."
+msgstr "$PROGNAME: ÊÆÄâ̯ ${COMP}.${COMP}snmpPort - Ü©ç´ $COP¡¤"
+msgid "ESROOT must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT"
+msgid "OS $sys $rel is not supported"
+msgstr "ÄâÅÅßÎ OS $sys $rel"
+msgid "Terminating Process ID $PID \\\($COMMAND\\\)"
+msgstr "ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID \\\($COMMAND\\\)"
+msgstr "É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "No Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆÄâ̯ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "Terminating Process ID $PID with the force \\\($COMMAND\\\)"
+msgstr "Åèڰ̱ \\\($COMMAND\\\) ÜÜÅÏݨܡ ID $PID"
+msgid "DISPLAY environment variable must be set"
+msgstr "ÆÒâüÝÃÌù DISPLAY ô¿èºüÈí°"
+msgid "More Than One Matching Process Found \\\($COMMAND\\\)"
+msgstr "ÊÆ̯ÇéÔ¶ÜÊÇÙÎûݨܡ \\\($COMMAND\\\)"
+msgid "No Processes Killed"
+msgstr "àÒïÎÉ´ØæÎûݨܡ"
+msgid "Terminating Process ID $PID using kill -9 \\\($COMMAND\\\)"
+msgstr "ËðÆî kill -9 ÜÜÅÏݨܡ ID $PID \\\($COMMAND\\\)"
+msgid "Error Killing Process ID $PID with kill -9 \\\($COMMAND\\\)"
+msgstr "Åè kill -9 É´Øæݨܡ ID $PID àõÆíòãë¨ \\\($COMMAND\\\)"
+msgid "ESROOT environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESROOT ô¿èºüÈí°"
+msgid "ESDIR environment variable must be set"
+msgstr "ÆÒâüÝÃÌù ESDIR ô¿èºüÈí°"
+#
+# for es-tool - a SDK tool for integrating applications into console
+#
+msgid "Must be root to run $PROGRAM"
+msgstr "ÆÒâüÑÒ root ËðÆîϯÄß×äÙÚÈç $PROGRAM "
+
+msgid "$sdk_toolfile either does not exist or is not writable"
+msgstr "$sdk_toolfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+
+msgid "There is an existing $PROGRAM lockfile, $LOCKFILE"
+msgstr "ÇôÇãÄ¡Ô¶ $PROGRAM ÷ÕÌùóòÕù¡¢$LOCKFILE"
+
+msgid "which indicates that process is executing the $PROGRAM"
+msgstr "ÆÆÏÐÆüݨܡÆßÇãÙÚÈç $PROGRAM"
+
+msgid "If this is not the case, delete the lock file,"
+msgstr "ÇñΪÄâÑÒÝÕê¡ÚÅÎÓ¡¢É´ØæȺ÷ÕÌùóòÕù¡¢"
+
+msgid "$LOCKFILE and execute $PROGRAM again."
+msgstr "$LOCKFILE ËäÇÂȹÙÚÈç $PROGRAM¡¤"
+
+msgid "$sdk_helpfile either does not exist or is not writable"
+msgstr "$sdk_helpfile ÄâÇôÇãÍÐÄâÆ«ìÑÄ«"
+
+msgid "$JAVA must exist and be of version Solaris_JDK_1.2.1_04\n"
+msgstr "$JAVA ÆÒâüÇôÇãÅâÆÒâüÑÒ Solaris_JDK_1.2.1_04 ÎûÎêÆÛ\n"
+
+msgid "Using %s"
+msgstr "ËðÆî %s"
+
+msgid "%s updated."
+msgstr "%s ÄØÊÕ仡¤"
+
+msgid "This script reads the specified configuration file or\\n%s if not specified,\\nand installs the applications with the server."
+msgstr "Ⱥ Script ûô̽ÑÀÌùÎûØÙåôóòÕùÍÐÑÒ\\n%s¡¾ÇñΪËäÆÜÑÀÌù¡¿¡¢\\nËäÅèÈùΤðÂÇøæÒóÜÆîá£È¢¡¤"
+
+msgid "The configuration file contains one or more lines using the following format:\n"
+msgstr "ØÙåôóòÅýÉÖÄ¡ÍÐÇéÈçËðÆîÅèĶ֪ȢÎûÄùÕ©¡¨\n"
+
+msgid "where:\n"
+msgstr "̧Ä㡨\n"
+
+msgid "name\tis the name of the application that appears in the Application list\n"
+msgstr " name\tÑÒæÚóÜÆîá£È¢Çã¡ÖóÜÆîá£È¢¡×ÛÒÞÌÄãüÏÆüÎûÇØê¢"
+
+msgid "class\tis the name of the Java class for the application\n"
+msgstr " class\tÑÒæÚóÜÆîá£È¢Îû Java ùËɱ\n"
+
+msgid "args\tare optional user defined arguments to be passed to the application\n"
+msgstr "args\tÑÒÆîËôâÐÄ«æÚóÜÆîá£È¢ÎûËðÆîϯÌùåøÄæüÈí°¡¾Æ«òÙðåÎû¡¿\n"
+
+msgid "help\tis the optional help specification using the format key:helpfile or :url.\n"
+msgstr "help\tÑÒËðÆîkey:helpfile ÍÐ :url ֪ȢÎûëºÉ·ë©ÍüÄæë©Íü¡¾Æ«òÙðåÎû¡¿¡¤\n"
+
+msgid "There should be no quotes in the line.\n"
+msgstr "ÈçÄãÄâ×äÈ´Å¿æÀ¡¤\n"
+
+msgid "Lines beginning with # are considered as comments.\n"
+msgstr "Åè # âäó¤ÎûÄùÕ©ÙòÝ·áþÒ³â¡æØ¡¤"
+
+msgid "For example:\n"
+msgstr "ËóÇñ¡¨\n"
+
+#
+#====================================================
+# <WS>/packages/Setup/es-platform
+#====================================================
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "       Where the options represent:\n"
+msgstr "       ̧ÄãÝÕËèòÙâúÏÐÆü¡¨\n"
+msgid "  a : to add an instance of platform agent\n"
+msgstr "  a¡¨ä»ìÁÆÍƺÅîÜ¡á£È¢ÎûèÒËó\n"
+msgid "  d : to delete an instance of platform agent\n"
+msgstr "  d¡¨É´ØæÆÍƺÅîÜ¡á£È¢ÎûèÒËó\n"
+msgid "You can not specify both a and d option in the same command"
+msgstr "ÚÀÄâ×äÇãÇÑÄ¡Ô¶ÑÀÅïÄãÇÑÕëÑÀÌù a ů d òÙâú"
+msgid "You can not have spaces in the instance name."
+msgstr "èÒËóÇØê¢ÄãÄâ×äȴϨ֪¡¤"
+msgid "Port $2 is not a valid port number, try another number : "
+msgstr "ÝÙÚÙÙÕ $2 ÄâÑÒÈ´ÕæÎûÝÙÚÙÙÕæÀ¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by Sun Management Center agent, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñ Sun Management Center ÅîÜ¡á£È¢ËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by some instance, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñÑÜÔ¶èÒËóËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This port is being used by some another process, try another number : "
+msgstr "ȺÝÙÚÙÙÕÄØÆñƶġԶݨܡËðÆî¡¢îùæÜƶġԶæÀ¨ "
+msgid "This instance is already present."
+msgstr "ȺèÒËóÄØåîÇôÇ㡤"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+msgid "Usage: $PROGNAME -ad instanceName"
+msgstr "ÆîÎΡ¨$PROGNAME -ad instanceName"
+
+# END
--- a/test/jdk/sun/reflect/Reflection/GetCallerClassWithDepth.java	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 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.
- *
- * 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.
- */
-
-/*
- * @test
- * @bug 8137058
- * @summary Basic test for the unsupported Reflection.getCallerClass(int)
- * @modules jdk.unsupported
- */
-
-import sun.reflect.Reflection;
-
-public class GetCallerClassWithDepth {
-    public static void main(String[] args) throws Exception {
-        Class<?> c = Test.test();
-        assertEquals(c, GetCallerClassWithDepth.class);
-        Class<?> caller = Test.caller();
-        assertEquals(caller, GetCallerClassWithDepth.class);
-        Test.selfTest();
-
-        try {
-            Reflection.getCallerClass(-1);
-            throw new RuntimeException("getCallerClass(-1) should fail");
-        } catch (Error e) {
-            System.out.println("Expected: " + e.getMessage());
-        }
-    }
-
-    public Class<?> getCallerClass() {
-        // 0: Reflection 1: getCallerClass 2: Test.test 3: main
-        return Reflection.getCallerClass(3);
-    }
-
-    static void assertEquals(Class<?> c, Class<?> expected) {
-        if (c != expected) {
-            throw new RuntimeException("Incorrect caller: " + c);
-        }
-    }
-
-    static class Test {
-        // Returns the caller of this method
-        public static Class<?> test() {
-            return new GetCallerClassWithDepth().getCallerClass();
-        }
-
-        // Returns the caller of this method
-        public static Class<?> caller() {
-            // 0: Reflection 1: Test.caller 2: main
-            return Reflection.getCallerClass(2);
-        }
-        public static void selfTest() {
-            // 0: Reflection 1: Test.selfTest
-            Class<?> c = Reflection.getCallerClass(1);
-            assertEquals(c, Test.class);
-            Inner1.deep();
-        }
-
-        static class Inner1 {
-            static void deep() {
-                 deeper();
-            }
-            static void deeper() {
-                 Inner2.deepest();
-            }
-            static class Inner2 {
-                static void deepest() {
-                    // 0: Reflection 1: deepest 2: deeper 3: deep 4: Test.selfTest
-                    Class<?> c = Reflection.getCallerClass(4);
-                    assertEquals(c, Test.class);
-                }
-            }
-        }
-    }
-}
--- a/test/jdk/sun/security/krb5/auto/AcceptPermissions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/AcceptPermissions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 9999999
+ * @bug 8005447 8194486
  * @summary default principal can act as anyone
+ * @library /test/lib
  * @compile -XDignore.symbol.file AcceptPermissions.java
- * @run main/othervm AcceptPermissions two
- * @run main/othervm AcceptPermissions unbound
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AcceptPermissions two
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AcceptPermissions unbound
  */
 
 import java.nio.file.Files;
--- a/test/jdk/sun/security/krb5/auto/AcceptorSubKey.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/AcceptorSubKey.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 7077646
+ * @bug 7077646 8194486
  * @summary gssapi wrap for CFX per-message tokens always set FLAG_ACCEPTOR_SUBKEY
+ * @library /test/lib
  * @compile -XDignore.symbol.file AcceptorSubKey.java
- * @run main/othervm AcceptorSubKey 0
- * @run main/othervm AcceptorSubKey 4
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AcceptorSubKey 0
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AcceptorSubKey 4
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/Addresses.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Addresses.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8031111
+ * @bug 8031111 8194486
  * @summary fix krb5 caddr
+ * @library /test/lib
  * @compile -XDignore.symbol.file Addresses.java
- * @run main/othervm Addresses
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Addresses
  */
 
 import sun.security.krb5.Config;
--- a/test/jdk/sun/security/krb5/auto/AddressesAndNameType.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/AddressesAndNameType.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 4501327 4868379 8039132
- * @run main/othervm AddressesAndNameType 1
- * @run main/othervm AddressesAndNameType 2
- * @run main/othervm AddressesAndNameType 3
+ * @bug 4501327 4868379 8039132 8194486
  * @summary noaddresses settings and server name type
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AddressesAndNameType 1
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AddressesAndNameType 2
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts AddressesAndNameType 3
  */
 
 import java.net.InetAddress;
--- a/test/jdk/sun/security/krb5/auto/Basic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Basic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7152176
+ * @bug 7152176 8194486
  * @summary More krb5 tests
+ * @library /test/lib
  * @compile -XDignore.symbol.file Basic.java
- * @run main/othervm Basic
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Basic
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/BasicKrb5Test.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/BasicKrb5Test.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,44 +23,62 @@
 
 /*
  * @test
- * @bug 6706974
+ * @bug 6706974 8014628 8194486
  * @summary Add krb5 test infrastructure
+ * @library /test/lib
  * @compile -XDignore.symbol.file BasicKrb5Test.java
- * @run main/othervm BasicKrb5Test
- * @run main/othervm BasicKrb5Test des-cbc-crc
- * @run main/othervm BasicKrb5Test des-cbc-md5
- * @run main/othervm BasicKrb5Test des3-cbc-sha1
- * @run main/othervm BasicKrb5Test aes128-cts
- * @run main/othervm BasicKrb5Test aes256-cts
- * @run main/othervm BasicKrb5Test rc4-hmac
- * @run main/othervm BasicKrb5Test -s
- * @run main/othervm BasicKrb5Test des-cbc-crc -s
- * @run main/othervm BasicKrb5Test des-cbc-md5 -s
- * @run main/othervm BasicKrb5Test des3-cbc-sha1 -s
- * @run main/othervm BasicKrb5Test aes128-cts -s
- * @run main/othervm BasicKrb5Test aes256-cts -s
- * @run main/othervm BasicKrb5Test rc4-hmac -s
- * @run main/othervm BasicKrb5Test -C
- * @run main/othervm BasicKrb5Test des-cbc-crc -C
- * @run main/othervm BasicKrb5Test des-cbc-md5 -C
- * @run main/othervm BasicKrb5Test des3-cbc-sha1 -C
- * @run main/othervm BasicKrb5Test aes128-cts -C
- * @run main/othervm BasicKrb5Test aes256-cts -C
- * @run main/othervm BasicKrb5Test rc4-hmac -C
- * @run main/othervm BasicKrb5Test -s -C
- * @run main/othervm BasicKrb5Test des-cbc-crc -s -C
- * @run main/othervm BasicKrb5Test des-cbc-md5 -s -C
- * @run main/othervm BasicKrb5Test des3-cbc-sha1 -s -C
- * @run main/othervm BasicKrb5Test aes128-cts -s -C
- * @run main/othervm BasicKrb5Test aes256-cts -s -C
- * @run main/othervm BasicKrb5Test rc4-hmac -s -C
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-crc
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-md5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des3-cbc-sha1
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha1
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha1
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha2
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha2
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test rc4-hmac
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-crc -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-md5 -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   des3-cbc-sha1 -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha1 -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha1 -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha2 -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha2 -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test rc4-hmac -s
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-crc -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test des-cbc-md5 -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   des3-cbc-sha1 -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha1 -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha1 -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes128-sha2 -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test aes256-sha2 -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test rc4-hmac -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   des-cbc-crc -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   des-cbc-md5 -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   des3-cbc-sha1 -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   aes128-sha1 -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   aes256-sha1 -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   aes128-sha2 -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   aes256-sha2 -s -C
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicKrb5Test
+ *                   rc4-hmac -s -C
  */
 
 import org.ietf.jgss.GSSName;
 import sun.security.jgss.GSSUtil;
-import sun.security.krb5.Config;
 import sun.security.krb5.KrbException;
-import sun.security.krb5.internal.crypto.EType;
 
 /**
  * Basic JGSS/krb5 test with 3 parties: client, server, backend server. Each
--- a/test/jdk/sun/security/krb5/auto/BasicProc.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/BasicProc.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,13 @@
 
 /*
  * @test
- * @bug 8009977 8186884
+ * @bug 8009977 8186884 8194486
  * @summary A test to launch multiple Java processes using either Java GSS
  *          or native GSS
- * @library ../../../../java/security/testlibrary/
+ * @library ../../../../java/security/testlibrary/ /test/lib
  * @compile -XDignore.symbol.file BasicProc.java
- * @run main/othervm BasicProc launcher
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BasicProc launcher
  */
 
 import java.nio.file.Files;
@@ -304,6 +305,7 @@
      */
     private static Proc proc(String lib) throws Exception {
         Proc p = Proc.create("BasicProc")
+                .inheritProp("jdk.net.hosts.file")
                 .prop("java.security.manager", "")
                 .perm(new javax.security.auth.AuthPermission("doAs"));
         if (lib != null) {
--- a/test/jdk/sun/security/krb5/auto/BogusKDC.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/BogusKDC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,10 +33,12 @@
 
 /*
  * @test
- * @bug 4515853 8075297
+ * @bug 4515853 8075297 8194486
  * @summary Checks that Kerberos client tries slave KDC
  *          if master KDC is not responding
- * @run main/othervm BogusKDC
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts BogusKDC
  */
 public class BogusKDC {
 
--- a/test/jdk/sun/security/krb5/auto/CleanState.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/CleanState.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 6716534
+ * @bug 6716534 8194486
+ * @summary Krb5LoginModule has not cleaned temp info between authentication attempts
+ * @library /test/lib
  * @compile -XDignore.symbol.file CleanState.java
- * @run main/othervm CleanState
- * @summary Krb5LoginModule has not cleaned temp info between authentication attempts
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts CleanState
  */
 import com.sun.security.auth.module.Krb5LoginModule;
 import java.util.HashMap;
--- a/test/jdk/sun/security/krb5/auto/CrossRealm.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/CrossRealm.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 6706974
+ * @bug 6706974 8194486
+ * @summary Add krb5 test infrastructure
+ * @library /test/lib
  * @compile -XDignore.symbol.file CrossRealm.java
- * @run main/othervm CrossRealm
- * @summary Add krb5 test infrastructure
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts CrossRealm
  */
 import java.io.File;
 import java.io.FileOutputStream;
--- a/test/jdk/sun/security/krb5/auto/DiffNameSameKey.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/DiffNameSameKey.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 8005447
+ * @bug 8005447 8194486
  * @summary default principal can act as anyone
+ * @library /test/lib
  * @compile -XDignore.symbol.file DiffNameSameKey.java
- * @run main/othervm/fail DiffNameSameKey a
- * @run main/othervm DiffNameSameKey b
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts DiffNameSameKey a
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts DiffNameSameKey b
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/DiffSaltParams.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/DiffSaltParams.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,13 @@
 
 /*
  * @test
- * @bug 8186831
+ * @bug 8186831 8194486
  * @summary Kerberos ignores PA-DATA with a non-null s2kparams
+ * @library /test/lib
  * @compile -XDignore.symbol.file DiffSaltParams.java
- * @run main/othervm -Dsun.security.krb5.debug=true DiffSaltParams
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Dsun.security.krb5.debug=true
+ *      -Djdk.net.hosts.file=TestHosts DiffSaltParams
  */
 
 public class DiffSaltParams {
--- a/test/jdk/sun/security/krb5/auto/DupEtypes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/DupEtypes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,14 +23,16 @@
 
 /*
  * @test
- * @bug 7067974
+ * @bug 7067974 8194486
  * @summary multiple ETYPE-INFO-ENTRY with same etype and different salt
+ * @library /test/lib
  * @compile -XDignore.symbol.file DupEtypes.java
- * @run main/othervm DupEtypes 1
- * @run main/othervm DupEtypes 2
- * @run main/othervm/fail DupEtypes 3
- * @run main/othervm DupEtypes 4
- * @run main/othervm DupEtypes 5
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts DupEtypes 1
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts DupEtypes 2
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts DupEtypes 3
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts DupEtypes 4
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts DupEtypes 5
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/DynamicKeytab.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/DynamicKeytab.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 6894072
+ * @bug 6894072 8194486
+ * @summary always refresh keytab
+ * @library /test/lib
  * @compile -XDignore.symbol.file DynamicKeytab.java
- * @run main/othervm DynamicKeytab
- * @summary always refresh keytab
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts DynamicKeytab
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/EmptyPassword.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/EmptyPassword.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 6879540
+ * @bug 6879540 8194486
  * @summary enable empty password for kerberos 5
+ * @library /test/lib
  * @compile -XDignore.symbol.file EmptyPassword.java
- * @run main/othervm EmptyPassword
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts EmptyPassword
  */
 
 public class EmptyPassword {
--- a/test/jdk/sun/security/krb5/auto/FileKeyTab.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/FileKeyTab.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7152121
+ * @bug 7152121 8194486
  * @summary Krb5LoginModule no longer handles keyTabNames with "file:" prefix
+ * @library /test/lib
  * @compile -XDignore.symbol.file FileKeyTab.java
- * @run main/othervm FileKeyTab
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts FileKeyTab
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/ForwardableCheck.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/ForwardableCheck.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8022582
+ * @bug 8022582 8194486
  * @summary Relax response flags checking in sun.security.krb5.KrbKdcRep.check.
+ * @library /test/lib
  * @compile -XDignore.symbol.file ForwardableCheck.java
- * @run main/othervm ForwardableCheck
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts ForwardableCheck
  */
 
 import org.ietf.jgss.GSSException;
--- a/test/jdk/sun/security/krb5/auto/Forwarded.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Forwarded.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8031111
+ * @bug 8031111 8194486
  * @summary fix krb5 caddr
+ * @library /test/lib
  * @compile -XDignore.symbol.file Forwarded.java
- * @run main/othervm Forwarded
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Forwarded
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/GSS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/GSS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7152176
+ * @bug 7152176 8194486
  * @summary More krb5 tests
+ * @library /test/lib
  * @compile -XDignore.symbol.file GSS.java
- * @run main/othervm GSS
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts GSS
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/GSSUnbound.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/GSSUnbound.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8001104
+ * @bug 8001104 8194486
  * @summary Unbound SASL service: the GSSAPI/krb5 mech
+ * @library /test/lib
  * @compile -XDignore.symbol.file GSSUnbound.java
- * @run main/othervm GSSUnbound
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts GSSUnbound
  */
 
 import java.security.Security;
--- a/test/jdk/sun/security/krb5/auto/HttpNegotiateServer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/HttpNegotiateServer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 6578647 6829283 8171340
+ * @bug 6578647 6829283 8171340 8194486
  * @modules java.base/sun.security.util
  *          java.security.jgss/sun.security.krb5.internal:+open
  *          java.security.jgss/sun.security.jgss
@@ -35,11 +35,13 @@
  *          jdk.security.auth
  *          jdk.security.jgss
  *          jdk.httpserver
- * @run main/othervm HttpNegotiateServer
  * @summary Undefined requesting URL in java.net.Authenticator
  *          .getPasswordAuthentication()
  * @summary HTTP/Negotiate: Authenticator triggered again when
  *          user cancels the first one
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts HttpNegotiateServer
  */
 
 import com.sun.net.httpserver.Headers;
--- a/test/jdk/sun/security/krb5/auto/IgnoreChannelBinding.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/IgnoreChannelBinding.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6851973
- * @run main/othervm IgnoreChannelBinding
+ * @bug 6851973 8194486
  * @summary ignore incoming channel binding if acceptor does not set one
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts IgnoreChannelBinding
  */
 
 import java.net.InetAddress;
--- a/test/jdk/sun/security/krb5/auto/KDC.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KDC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -241,14 +241,6 @@
         CHECK_ADDRESSES,
     };
 
-    static {
-        if (System.getProperty("jdk.net.hosts.file") == null) {
-            String hostsFileName
-                    = System.getProperty("test.src", ".") + "/TestHosts";
-            System.setProperty("jdk.net.hosts.file", hostsFileName);
-        }
-    }
-
     /**
      * A standalone KDC server.
      */
@@ -604,19 +596,7 @@
      */
     private static EncryptionKey generateRandomKey(int eType)
             throws KrbException  {
-        // Is 32 enough for AES256? I should have generated the keys directly
-        // but different cryptos have different rules on what keys are valid.
-        char[] pass = randomPassword();
-        String algo;
-        switch (eType) {
-            case EncryptedData.ETYPE_DES_CBC_MD5: algo = "DES"; break;
-            case EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD: algo = "DESede"; break;
-            case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96: algo = "AES128"; break;
-            case EncryptedData.ETYPE_ARCFOUR_HMAC: algo = "ArcFourHMAC"; break;
-            case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96: algo = "AES256"; break;
-            default: algo = "DES"; break;
-        }
-        return new EncryptionKey(pass, "NOTHING", algo);    // Silly
+        return genKey0(randomPassword(), "NOTHING", null, eType, null);
     }
 
     /**
@@ -680,6 +660,8 @@
         switch (etype) {
             case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96:
             case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
+            case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128:
+            case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA384_192:
                 String pn = p.toString();
                 if (p.getRealmString() == null) {
                     pn = pn + "@" + getRealm();
@@ -687,7 +669,11 @@
                 if (s2kparamses.containsKey(pn)) {
                     return s2kparamses.get(pn);
                 }
-                return new byte[] {0, 0, 0x10, 0};
+                if (etype < EncryptedData.ETYPE_AES128_CTS_HMAC_SHA256_128) {
+                    return new byte[]{0, 0, 0x10, 0};
+                } else {
+                    return new byte[]{0, 0, (byte) 0x80, 0};
+                }
             default:
                 return null;
         }
@@ -715,9 +701,8 @@
                     kvno = pass[pass.length-1] - '0';
                 }
             }
-            return new EncryptionKey(EncryptionKeyDotStringToKey(
-                    getPassword(p, server), getSalt(p), getParams(p, etype), etype),
-                    etype, kvno);
+            return genKey0(getPassword(p, server), getSalt(p),
+                    getParams(p, etype), etype, kvno);
         } catch (KrbException ke) {
             throw ke;
         } catch (Exception e) {
@@ -735,6 +720,17 @@
     }
 
     /**
+     * Generates key from password.
+     */
+    private static EncryptionKey genKey0(
+            char[] pass, String salt, byte[] s2kparams,
+            int etype, Integer kvno) throws KrbException {
+        return new EncryptionKey(EncryptionKeyDotStringToKey(
+                pass, salt, s2kparams, etype),
+                etype, kvno);
+    }
+
+    /**
      * Processes an incoming request and generates a response.
      * @param in the request
      * @return the response
@@ -1181,8 +1177,8 @@
                 }
                 boolean allOld = true;
                 for (int i: eTypes) {
-                    if (i == EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96 ||
-                            i == EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96) {
+                    if (i >= EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96 &&
+                            i != EncryptedData.ETYPE_ARCFOUR_HMAC) {
                         allOld = false;
                         break;
                     }
--- a/test/jdk/sun/security/krb5/auto/KPEquals.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KPEquals.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8015669
+ * @bug 8015669 8194486
  * @summary KerberosPrincipal::equals should ignore name-type
+ * @library /test/lib
  * @compile -XDignore.symbol.file KPEquals.java
- * @run main/othervm KPEquals
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KPEquals
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/KdcPolicy.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KdcPolicy.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,10 +38,12 @@
 
 /*
  * @test
- * @bug 8164656 8181461
- * @run main/othervm KdcPolicy udp
- * @run main/othervm KdcPolicy tcp
+ * @bug 8164656 8181461 8194486
  * @summary krb5.kdc.bad.policy test
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KdcPolicy udp
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KdcPolicy tcp
  */
 public class KdcPolicy {
 
--- a/test/jdk/sun/security/krb5/auto/KeyPermissions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KeyPermissions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8004488
+ * @bug 8004488 8194486
  * @summary wrong permissions checked in krb5
+ * @library /test/lib
  * @compile -XDignore.symbol.file KeyPermissions.java
- * @run main/othervm KeyPermissions
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KeyPermissions
  */
 
 import java.security.AccessControlException;
--- a/test/jdk/sun/security/krb5/auto/KeyTabCompat.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KeyTabCompat.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,12 @@
 
 /*
  * @test
- * @bug 6894072
- * @bug 8004488
+ * @bug 6894072 8004488 8194486
+ * @summary always refresh keytab
+ * @library /test/lib
  * @compile -XDignore.symbol.file KeyTabCompat.java
- * @run main/othervm KeyTabCompat
- * @summary always refresh keytab
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KeyTabCompat
  */
 
 import javax.security.auth.kerberos.KerberosKey;
--- a/test/jdk/sun/security/krb5/auto/KrbTicket.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KrbTicket.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,9 +35,11 @@
 
 /*
  * @test
- * @bug 6857795 8075299
+ * @bug 6857795 8075299 8194486
  * @summary Checks Kerberos ticket properties
- * @run main/othervm KrbTicket
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KrbTicket
  */
 public class KrbTicket {
 
--- a/test/jdk/sun/security/krb5/auto/KvnoNA.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/KvnoNA.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7197159
+ * @bug 7197159 8194486
+ * @summary accept different kvno if there no match
+ * @library /test/lib
  * @compile -XDignore.symbol.file KvnoNA.java
- * @run main/othervm KvnoNA
- * @summary accept different kvno if there no match
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts KvnoNA
  */
 
 import org.ietf.jgss.GSSException;
--- a/test/jdk/sun/security/krb5/auto/LifeTimeInSeconds.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/LifeTimeInSeconds.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6857802
- * @run main/othervm LifeTimeInSeconds
+ * @bug 6857802 8194486
  * @summary GSS getRemainingInitLifetime method returns milliseconds not seconds
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts LifeTimeInSeconds
  */
 import org.ietf.jgss.GSSCredential;
 import org.ietf.jgss.GSSManager;
--- a/test/jdk/sun/security/krb5/auto/LoginModuleOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/LoginModuleOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6765491
- * @run main/othervm LoginModuleOptions
+ * @bug 6765491 8194486
  * @summary Krb5LoginModule a little too restrictive, and the doc is not clear.
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts LoginModuleOptions
  */
 import com.sun.security.auth.module.Krb5LoginModule;
 import java.util.HashMap;
--- a/test/jdk/sun/security/krb5/auto/LoginNoPass.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/LoginNoPass.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8028351
+ * @bug 8028351 8194486
  * @summary JWS doesn't get authenticated when using kerberos auth proxy
+ * @library /test/lib
  * @compile -XDignore.symbol.file LoginNoPass.java
- * @run main/othervm LoginNoPass
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts LoginNoPass
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/LongLife.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/LongLife.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8131051
+ * @bug 8131051 8194486
  * @summary KDC might issue a renewable ticket even if not requested
+ * @library /test/lib
  * @compile -XDignore.symbol.file LongLife.java
- * @run main/othervm LongLife
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts LongLife
  */
 
 import sun.security.krb5.Config;
--- a/test/jdk/sun/security/krb5/auto/MSOID2.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/MSOID2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8078439
+ * @bug 8078439 8194486
  * @summary SPNEGO auth fails if client proposes MS krb5 OID
+ * @library /test/lib
  * @compile -XDignore.symbol.file MSOID2.java
- * @run main/othervm MSOID2
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts MSOID2
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/ModuleName.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/ModuleName.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8164437
+ * @bug 8164437 8194486
  * @summary GSSContext type when jdk.security.jgss is not available
  * @library /test/lib
  * @compile -XDignore.symbol.file ModuleName.java
@@ -33,7 +33,8 @@
  *        jdk.test.lib.JDKToolLauncher
  *        jdk.test.lib.Platform
  *        jdk.test.lib.process.*
- * @run main/othervm ModuleName
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts ModuleName
  */
 
 import jdk.test.lib.process.ProcessTools;
@@ -58,6 +59,7 @@
                             arg.startsWith("--add-opens="))
                     .forEach(cmd::add);
             cmd.addAll(List.of(
+                    "-Djdk.net.hosts.file=TestHosts",
                     "-Dtest.src=" + System.getProperty("test.src"),
                     "--add-modules",
                         "java.base,java.security.jgss,jdk.security.auth",
--- a/test/jdk/sun/security/krb5/auto/MoreKvno.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/MoreKvno.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6893158 6907425 7197159
- * @run main/othervm MoreKvno
+ * @bug 6893158 6907425 7197159 8194486
  * @summary AP_REQ check should use key version number
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts MoreKvno
  */
 
 import org.ietf.jgss.GSSException;
--- a/test/jdk/sun/security/krb5/auto/NewInquireTypes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/NewInquireTypes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8043071
+ * @bug 8043071 8194486
  * @summary Expose session key and KRB_CRED through extended GSS-API
+ * @library /test/lib
  * @compile -XDignore.symbol.file NewInquireTypes.java
- * @run main/othervm NewInquireTypes
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts NewInquireTypes
  */
 
 import com.sun.security.jgss.ExtendedGSSContext;
--- a/test/jdk/sun/security/krb5/auto/NewSalt.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/NewSalt.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 6960894
+ * @bug 6960894 8194486
  * @summary Better AS-REQ creation and processing
- * @run main/othervm NewSalt
- * @run main/othervm -Dnopreauth NewSalt
- * @run main/othervm -Donlyonepreauth NewSalt
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts NewSalt
+ * @run main/othervm -Dnopreauth -Djdk.net.hosts.file=TestHosts NewSalt
+ * @run main/othervm -Donlyonepreauth -Djdk.net.hosts.file=TestHosts NewSalt
  */
 
 import java.util.Locale;
--- a/test/jdk/sun/security/krb5/auto/NoInitNoKeytab.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/NoInitNoKeytab.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7089889
+ * @bug 7089889 8194486
  * @summary Krb5LoginModule.login() throws an exception if used without a keytab
+ * @library /test/lib
  * @compile -XDignore.symbol.file NoInitNoKeytab.java
- * @run main/othervm NoInitNoKeytab
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts NoInitNoKeytab
  */
 
 import java.io.FileOutputStream;
--- a/test/jdk/sun/security/krb5/auto/NonMutualSpnego.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/NonMutualSpnego.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6733095
- * @run main/othervm NonMutualSpnego
+ * @bug 6733095 8194486
  * @summary Failure when SPNEGO request non-Mutual
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts NonMutualSpnego
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/NoneReplayCacheTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/NoneReplayCacheTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,14 @@
 
 /*
  * @test
- * @bug 8001326
- * @run main/othervm NoneReplayCacheTest
+ * @bug 8001326 8194486
  * @summary the replaycache type none cannot stop an authenticator replay,
  * but it can stop a message replay when s.s.k.acceptor.subkey is true.
  * You should not really use none in production environment. This test merely
  * shows there can be other protections when replay cache is not working fine.
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts NoneReplayCacheTest
  */
 
 import org.ietf.jgss.GSSException;
--- a/test/jdk/sun/security/krb5/auto/NullRenewUntil.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/NullRenewUntil.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,14 @@
 
 /*
  * @test
- * @bug 8186576
+ * @bug 8186576 8194486
  * @summary KerberosTicket does not properly handle renewable tickets
  *          at the end of their lifetime
  * @library /test/lib
  * @compile -XDignore.symbol.file NullRenewUntil.java
- * @run main/othervm -Dtest.set.null.renew NullRenewUntil
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dtest.set.null.renew NullRenewUntil
  */
 
 import jdk.test.lib.Asserts;
--- a/test/jdk/sun/security/krb5/auto/OkAsDelegate.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/OkAsDelegate.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,29 +23,49 @@
 
 /*
  * @test
- * @bug 6853328 7172701
- * @run main/othervm OkAsDelegate false true true false false false
+ * @bug 6853328 7172701 8194486
+ * @summary Support OK-AS-DELEGATE flag
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts OkAsDelegate
+ *      false true true false false false
  *      FORWARDABLE ticket not allowed, always fail
- * @run main/othervm OkAsDelegate true false false false false false
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts OkAsDelegate
+ *      true false false false false false
  *      Service ticket no OK-AS-DELEGATE. Request nothing, gain nothing
- * @run main/othervm OkAsDelegate true false true false false false
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts OkAsDelegate
+ *      true false true false false false
  *      Service ticket no OK-AS-DELEGATE. Request deleg policy, gain nothing
- * @run main/othervm OkAsDelegate true true false true false true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts OkAsDelegate
+ *      true true false true false true
  *      Service ticket no OK-AS-DELEGATE. Request deleg, granted
- * @run main/othervm OkAsDelegate true true true true false true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      OkAsDelegate true true true true false true
  *      Service ticket no OK-AS-DELEGATE. Request deleg and deleg policy, granted, with info not by policy
- * @run main/othervm -Dtest.kdc.policy.ok-as-delegate OkAsDelegate true false true true true true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dtest.kdc.policy.ok-as-delegate OkAsDelegate
+ *      true false true true true true
  *      Service ticket has OK-AS-DELEGATE. Request deleg policy, granted
- * @run main/othervm -Dtest.kdc.policy.ok-as-delegate OkAsDelegate true true true true true true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dtest.kdc.policy.ok-as-delegate OkAsDelegate
+ *      true true true true true true
  *      Service ticket has OK-AS-DELEGATE. granted, with info by policy
- * @run main/othervm -Dtest.spnego OkAsDelegate false true true false false false
- * @run main/othervm -Dtest.spnego OkAsDelegate true false false false false false
- * @run main/othervm -Dtest.spnego OkAsDelegate true false true false false false
- * @run main/othervm -Dtest.spnego OkAsDelegate true true false true false true
- * @run main/othervm -Dtest.spnego OkAsDelegate true true true true false true
- * @run main/othervm -Dtest.spnego -Dtest.kdc.policy.ok-as-delegate OkAsDelegate true false true true true true
- * @run main/othervm -Dtest.spnego -Dtest.kdc.policy.ok-as-delegate OkAsDelegate true true true true true true
- * @summary Support OK-AS-DELEGATE flag
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      OkAsDelegate false true true false false false
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      OkAsDelegate true false false false false false
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      OkAsDelegate true false true false false false
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      OkAsDelegate true true false true false true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      OkAsDelegate true true true true false true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      -Dtest.kdc.policy.ok-as-delegate OkAsDelegate
+ *      true false true true true true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.spnego
+ *      -Dtest.kdc.policy.ok-as-delegate OkAsDelegate
+ *      true true true true true true
  */
 import com.sun.security.jgss.ExtendedGSSContext;
 import org.ietf.jgss.GSSContext;
--- a/test/jdk/sun/security/krb5/auto/OkAsDelegateXRealm.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/OkAsDelegateXRealm.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,16 +23,23 @@
 
 /*
  * @test
- * @bug 6853328 7172701
- * @run main/othervm OkAsDelegateXRealm false
+ * @bug 6853328 7172701 8194486
+ * @summary Support OK-AS-DELEGATE flag
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts OkAsDelegateXRealm false
  *      KDC no OK-AS-DELEGATE, fail
- * @run main/othervm -Dtest.kdc.policy.ok-as-delegate OkAsDelegateXRealm true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dtest.kdc.policy.ok-as-delegate OkAsDelegateXRealm true
  *      KDC set OK-AS-DELEGATE for all, succeed
- * @run main/othervm -Dtest.kdc.policy.ok-as-delegate=host/host.r3.local OkAsDelegateXRealm false
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dtest.kdc.policy.ok-as-delegate=host/host.r3.local
+ *      OkAsDelegateXRealm false
  *      KDC set OK-AS-DELEGATE for host/host.r3.local only, fail
- * @run main/othervm -Dtest.kdc.policy.ok-as-delegate=host/host.r3.local,krbtgt/R2,krbtgt/R3 OkAsDelegateXRealm true
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dtest.kdc.policy.ok-as-delegate=host/host.r3.local,krbtgt/R2,krbtgt/R3
+ *      OkAsDelegateXRealm true
  *      KDC set OK-AS-DELEGATE for all three, succeed
- * @summary Support OK-AS-DELEGATE flag
  */
 import java.io.FileOutputStream;
 import java.io.IOException;
--- a/test/jdk/sun/security/krb5/auto/OnlyDesLogin.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/OnlyDesLogin.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,13 @@
 
 /*
  * @test
- * @bug 8014310
- * @summary JAAS/Krb5LoginModule using des encytypes failure with NPE after JDK-8012679
+ * @bug 8014310 8194486
+ * @summary JAAS/Krb5LoginModule using des encytypes failure with NPE
+ *          after JDK-8012679
+ * @library /test/lib
  * @compile -XDignore.symbol.file OnlyDesLogin.java
- * @run main/othervm OnlyDesLogin
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts OnlyDesLogin
  */
 
 import sun.security.krb5.Config;
--- a/test/jdk/sun/security/krb5/auto/PrincipalNameEquals.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/PrincipalNameEquals.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7061379
+ * @bug 7061379 8194486
  * @summary [Kerberos] Cross-realm authentication fails, due to nameType problem
+ * @library /test/lib
  * @compile -XDignore.symbol.file PrincipalNameEquals.java
- * @run main/othervm PrincipalNameEquals
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts PrincipalNameEquals
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/RRC.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/RRC.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7077640
+ * @bug 7077640 8194486
  * @summary gss wrap for cfx doesn't handle rrc != 0
+ * @library /test/lib
  * @compile -XDignore.symbol.file RRC.java
- * @run main/othervm RRC
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts RRC
  */
 
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/RefreshKrb5Config.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/RefreshKrb5Config.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,10 +31,12 @@
 
 /*
  * @test
- * @bug 4745056 8075297
+ * @bug 4745056 8075297 8194486
  * @summary Checks if refreshKrb5Config is set to true for Krb5LoginModule,
  *          then configuration will be refreshed before login() method is called
- * @run main/othervm RefreshKrb5Config
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts RefreshKrb5Config
  */
 public class RefreshKrb5Config {
 
--- a/test/jdk/sun/security/krb5/auto/Renew.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Renew.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,13 +23,15 @@
 
 /*
  * @test
- * @bug 8058290
+ * @bug 8058290 8194486
  * @summary JAAS Krb5LoginModule has suspect ticket-renewal logic,
  *          relies on clockskew grace
+ * @library /test/lib
  * @compile -XDignore.symbol.file Renew.java
- * @run main/othervm Renew 1
- * @run main/othervm Renew 2
- * @run main/othervm Renew 3
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Renew 1
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Renew 2
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Renew 3
  */
 
 import sun.security.krb5.Config;
--- a/test/jdk/sun/security/krb5/auto/Renewal.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Renewal.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,13 @@
 
 /*
  * @test
- * @bug 8044500
+ * @bug 8044500 8194486
  * @summary Add kinit options and krb5.conf flags that allow users to
  *          obtain renewable tickets and specify ticket lifetimes
- * @library ../../../../java/security/testlibrary/
+ * @library ../../../../java/security/testlibrary/ /test/lib
  * @compile -XDignore.symbol.file Renewal.java
- * @run main/othervm Renewal
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Renewal
  */
 
 import sun.security.krb5.Config;
--- a/test/jdk/sun/security/krb5/auto/ReplayCacheTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/ReplayCacheTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7118809 8001326
- * @run main/othervm ReplayCacheTest jvm
- * @run main/othervm ReplayCacheTest dfl
+ * @bug 7118809 8001326 8194486
  * @summary rcache deadlock
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts ReplayCacheTest jvm
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts ReplayCacheTest dfl
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/ReplayCacheTestProc.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/ReplayCacheTestProc.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 7152176 8168518 8172017
+ * @bug 7152176 8168518 8172017 8014628 8194486
  * @summary More krb5 tests
  * @library ../../../../java/security/testlibrary/ /test/lib
  * @build jdk.test.lib.Platform
- * @run main/othervm/timeout=300 ReplayCacheTestProc
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm/timeout=300 -Djdk.net.hosts.file=TestHosts
+ *      ReplayCacheTestProc
  */
 
 import java.io.*;
@@ -132,8 +134,13 @@
                 kdc.addPrincipalRandKey(service(i));
             }
 
+            // Native lib might not support aes-sha2
+            KDC.saveConfig(OneKDC.KRB5_CONF, kdc,
+                    "default_tkt_enctypes = aes128-cts",
+                    "default_tgs_enctypes = aes128-cts");
+
+            // Write KTAB after krb5.conf so it contains no aes-sha2 keys
             kdc.writeKtab(OneKDC.KTAB);
-            KDC.saveConfig(OneKDC.KRB5_CONF, kdc);
 
             // User-provided libs
             String userLibs = System.getProperty("test.libs");
@@ -155,6 +162,7 @@
             }
 
             pi = Proc.create("ReplayCacheTestProc").debug("C")
+                    .inheritProp("jdk.net.hosts.file")
                     .args("initiator")
                     .start();
 
@@ -367,9 +375,11 @@
         }
         if (type.startsWith("J")) {
             if (lib == null) {
-                p = Proc.create("ReplayCacheTestProc");
+                p = Proc.create("ReplayCacheTestProc")
+                        .inheritProp("jdk.net.hosts.file");
             } else {
-                p = Proc.create("ReplayCacheTestProc", lib);
+                p = Proc.create("ReplayCacheTestProc", lib)
+                        .inheritProp("jdk.net.hosts.file");
             }
             p.prop("sun.security.krb5.rcache", "dfl")
                     .prop("java.io.tmpdir", cwd);
@@ -382,6 +392,7 @@
                     .env("KRB5_CONFIG", OneKDC.KRB5_CONF)
                     .env("KRB5_KTNAME", OneKDC.KTAB)
                     .env("KRB5RCACHEDIR", cwd)
+                    .inheritProp("jdk.net.hosts.file")
                     .prop("sun.security.jgss.native", "true")
                     .prop("javax.security.auth.useSubjectCredsOnly", "false")
                     .prop("sun.security.nativegss.debug", "true");
--- a/test/jdk/sun/security/krb5/auto/S4U2proxy.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/S4U2proxy.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 6355584 8044215
+ * @bug 6355584 8044215 8194486
  * @summary Introduce constrained Kerberos delegation
+ * @library /test/lib
  * @compile -XDignore.symbol.file S4U2proxy.java
- * @run main/othervm S4U2proxy krb5
- * @run main/othervm S4U2proxy spnego
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts S4U2proxy krb5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts S4U2proxy spnego
  */
 
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/S4U2proxyGSS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/S4U2proxyGSS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,15 @@
 
 /*
  * @test
- * @bug 6355584
+ * @bug 6355584 8194486
  * @summary Introduce constrained Kerberos delegation
+ * @library /test/lib
  * @compile -XDignore.symbol.file S4U2proxyGSS.java
- * @run main/othervm -Djavax.security.auth.useSubjectCredsOnly=false S4U2proxyGSS krb5
- * @run main/othervm -Djavax.security.auth.useSubjectCredsOnly=false S4U2proxyGSS spnego
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Djavax.security.auth.useSubjectCredsOnly=false S4U2proxyGSS krb5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Djavax.security.auth.useSubjectCredsOnly=false S4U2proxyGSS spnego
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/S4U2self.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/S4U2self.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,16 +23,25 @@
 
 /*
  * @test
- * @bug 6355584
+ * @bug 6355584 8194486
  * @summary Introduce constrained Kerberos delegation
+ * @library /test/lib
  * @compile -XDignore.symbol.file S4U2self.java
- * @run main/othervm -Dsun.security.krb5.debug=false S4U2self krb5 0
- * @run main/othervm/fail -Dsun.security.krb5.debug=false S4U2self krb5 1
- * @run main/othervm/fail -Dsun.security.krb5.debug=false S4U2self krb5 2
- * @run main/othervm/fail -Dsun.security.krb5.debug=false S4U2self krb5 3
- * @run main/othervm/fail -Dsun.security.krb5.debug=false S4U2self krb5 4
- * @run main/othervm/fail -Dsun.security.krb5.debug=false S4U2self krb5 5
- * @run main/othervm -Dsun.security.krb5.debug=false S4U2self spnego
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self krb5 0
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self krb5 1
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self krb5 2
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self krb5 3
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self krb5 4
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self krb5 5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2self spnego
  */
 
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/S4U2selfAsServer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/S4U2selfAsServer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 6355584
+ * @bug 6355584 8194486
  * @summary Introduce constrained Kerberos delegation
+ * @library /test/lib
  * @compile -XDignore.symbol.file S4U2selfAsServer.java
- * @run main/othervm S4U2selfAsServer krb5
- * @run main/othervm S4U2selfAsServer spnego
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts S4U2selfAsServer krb5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts S4U2selfAsServer spnego
  */
 
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/S4U2selfAsServerGSS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/S4U2selfAsServerGSS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,17 @@
 
 /*
  * @test
- * @bug 6355584
+ * @bug 6355584 8194486
  * @summary Introduce constrained Kerberos delegation
+ * @library /test/lib
  * @compile -XDignore.symbol.file S4U2selfAsServerGSS.java
- * @run main/othervm -Djavax.security.auth.useSubjectCredsOnly=false S4U2selfAsServerGSS krb5
- * @run main/othervm -Djavax.security.auth.useSubjectCredsOnly=false S4U2selfAsServerGSS spnego
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Djavax.security.auth.useSubjectCredsOnly=false
+ *      S4U2selfAsServerGSS krb5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Djavax.security.auth.useSubjectCredsOnly=false
+ *      S4U2selfAsServerGSS spnego
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/S4U2selfGSS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/S4U2selfGSS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,15 @@
 
 /*
  * @test
- * @bug 6355584
+ * @bug 6355584 8194486
  * @summary Introduce constrained Kerberos delegation
+ * @library /test/lib
  * @compile -XDignore.symbol.file S4U2selfGSS.java
- * @run main/othervm -Dsun.security.krb5.debug=false S4U2selfGSS krb5
- * @run main/othervm -Dsun.security.krb5.debug=false S4U2selfGSS spnego
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2selfGSS krb5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts
+ *      -Dsun.security.krb5.debug=false S4U2selfGSS spnego
  */
 
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/SPNEGO.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SPNEGO.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7040151
+ * @bug 7040151 8194486
  * @summary SPNEGO GSS code does not parse tokens in accordance to RFC 2478
+ * @library /test/lib
  * @compile -XDignore.symbol.file SPNEGO.java
- * @run main/othervm SPNEGO
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SPNEGO
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/SSL.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SSL.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,19 +23,32 @@
 
 /*
  * @test
- * @bug 6894643 6913636 8005523 8025123
+ * @bug 6894643 6913636 8005523 8025123 8194486
  * @summary Test JSSE Kerberos ciphersuite
- * @run main/othervm SSL TLS_KRB5_WITH_RC4_128_SHA
- * @run main/othervm SSL TLS_KRB5_WITH_RC4_128_SHA unbound
- * @run main/othervm SSL TLS_KRB5_WITH_RC4_128_SHA unbound sni
- * @run main/othervm SSL TLS_KRB5_WITH_3DES_EDE_CBC_SHA
- * @run main/othervm SSL TLS_KRB5_WITH_3DES_EDE_CBC_MD5
- * @run main/othervm SSL TLS_KRB5_WITH_DES_CBC_SHA
- * @run main/othervm SSL TLS_KRB5_WITH_DES_CBC_MD5
- * @run main/othervm SSL TLS_KRB5_EXPORT_WITH_RC4_40_SHA
- * @run main/othervm SSL TLS_KRB5_EXPORT_WITH_RC4_40_MD5
- * @run main/othervm SSL TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
- * @run main/othervm SSL TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_RC4_128_SHA
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_RC4_128_SHA unbound
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_RC4_128_SHA unbound sni
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_3DES_EDE_CBC_SHA
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_3DES_EDE_CBC_MD5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_DES_CBC_SHA
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_WITH_DES_CBC_MD5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_EXPORT_WITH_RC4_40_SHA
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_EXPORT_WITH_RC4_40_MD5
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSL
+ *      TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
  */
 import java.io.*;
 import java.security.Permission;
--- a/test/jdk/sun/security/krb5/auto/SSLwithPerms.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SSLwithPerms.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,11 @@
 
 /*
  * @test
- * @bug 8038089
+ * @bug 8038089 8194486
  * @summary TLS optional support for Kerberos cipher suites needs to be re-examined
- * @library ../../../../java/security/testlibrary/
- * @run main/othervm SSLwithPerms
+ * @library ../../../../java/security/testlibrary/ /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SSLwithPerms
  */
 import java.io.*;
 import javax.net.ssl.*;
--- a/test/jdk/sun/security/krb5/auto/SaslBasic.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SaslBasic.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,14 @@
 
 /*
  * @test
- * @bug 7110803 8170732
+ * @bug 7110803 8170732 8194486
  * @summary SASL service for multiple hostnames
+ * @library /test/lib
  * @compile -XDignore.symbol.file SaslBasic.java
- * @run main/othervm SaslBasic bound auth-int
- * @run main/othervm SaslBasic unbound auth-conf
- * @run main/othervm SaslBasic bound auth
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SaslBasic bound auth-int
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SaslBasic unbound auth-conf
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SaslBasic bound auth
  */
 import java.io.IOException;
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/SaslGSS.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SaslGSS.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 8012082 8019267
+ * @bug 8012082 8019267 8194486
  * @summary SASL: auth-conf negotiated, but unencrypted data is accepted,
   *         reset to unencrypt
+ * @library /test/lib
  * @compile -XDignore.symbol.file SaslGSS.java
- * @run main/othervm SaslGSS
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SaslGSS
  */
 
 import javax.security.auth.callback.Callback;
--- a/test/jdk/sun/security/krb5/auto/SaslUnbound.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SaslUnbound.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,14 +23,16 @@
 
 /*
  * @test
- * @bug 8001104
+ * @bug 8001104 8194486
  * @summary Unbound SASL service: the GSSAPI/krb5 mech
+ * @library /test/lib
  * @compile -XDignore.symbol.file SaslUnbound.java
- * @run main/othervm SaslUnbound 0
- * @run main/othervm/fail SaslUnbound 1
- * @run main/othervm/fail SaslUnbound 2
- * @run main/othervm/fail SaslUnbound 3
- * @run main/othervm/fail SaslUnbound 4
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SaslUnbound 0
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts SaslUnbound 1
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts SaslUnbound 2
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts SaslUnbound 3
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts SaslUnbound 4
  */
 import java.io.IOException;
 import java.util.Arrays;
--- a/test/jdk/sun/security/krb5/auto/SpnegoLifeTime.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SpnegoLifeTime.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 8000653
+ * @bug 8000653 8194486
  * @summary SPNEGO tests fail at context.getDelegCred().getRemainingInitLifetime(mechOid)
+ * @library /test/lib
  * @compile -XDignore.symbol.file SpnegoLifeTime.java
- * @run main/othervm SpnegoLifeTime
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SpnegoLifeTime
  */
 
 import org.ietf.jgss.Oid;
--- a/test/jdk/sun/security/krb5/auto/SpnegoReqFlags.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/SpnegoReqFlags.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6815182
- * @run main/othervm SpnegoReqFlags
+ * @bug 6815182 8194486
  * @summary GSSAPI/SPNEGO does not work with server using MIT Kerberos library
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts SpnegoReqFlags
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/Test5653.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Test5653.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,11 @@
 
 /*
  * @test
- * @bug 6895424
- * @run main/othervm Test5653
+ * @bug 6895424 8194486
  * @summary RFC 5653
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Test5653
  */
 
 import org.ietf.jgss.GSSContext;
--- a/test/jdk/sun/security/krb5/auto/TicketSName.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/TicketSName.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,13 @@
 
 /*
  * @test
- * @bug 8178794
+ * @bug 8178794 8194486
  * @summary krb5 client should ignore sname in incoming tickets
+ * @library /test/lib
  * @compile -XDignore.symbol.file TicketSName.java
- * @run main/othervm -Dtest.kdc.diff.sname TicketSName
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts -Dtest.kdc.diff.sname
+ *      TicketSName
  */
 
 import sun.security.jgss.GSSUtil;
--- a/test/jdk/sun/security/krb5/auto/TwoOrThree.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/TwoOrThree.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,14 +23,16 @@
 
 /*
  * @test
- * @bug 8005447
+ * @bug 8005447 8194486
  * @summary default principal can act as anyone
+ * @library /test/lib
  * @compile -XDignore.symbol.file TwoOrThree.java
- * @run main/othervm TwoOrThree first first
- * @run main/othervm/fail TwoOrThree first second
- * @run main/othervm TwoOrThree - first
- * @run main/othervm TwoOrThree - second
- * @run main/othervm/fail TwoOrThree - third
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts TwoOrThree first first
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts TwoOrThree first second
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts TwoOrThree - first
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts TwoOrThree - second
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts TwoOrThree - third
  */
 
 import java.nio.file.Files;
--- a/test/jdk/sun/security/krb5/auto/TwoPrinces.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/TwoPrinces.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 6894072
+ * @bug 6894072 8194486
+ * @summary always refresh keytab
+ * @library /test/lib
  * @compile -XDignore.symbol.file TwoPrinces.java
- * @run main/othervm TwoPrinces
- * @summary always refresh keytab
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts TwoPrinces
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/TwoTab.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/TwoTab.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7152176
+ * @bug 7152176 8194486
  * @summary More krb5 tests
+ * @library /test/lib
  * @compile -XDignore.symbol.file TwoTab.java
- * @run main/othervm TwoTab
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts TwoTab
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/UnboundSSL.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/UnboundSSL.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,13 +31,15 @@
 
 /*
  * @test
- * @bug 8025123
+ * @bug 8025123 8194486
  * @summary Checks if an unbound server can handle connections
  *          only for allowed service principals
- * @run main/othervm/policy=unbound.ssl.policy UnboundSSL
- *                              unbound.ssl.jaas.conf server_star
- * @run main/othervm/policy=unbound.ssl.policy UnboundSSL
- *                              unbound.ssl.jaas.conf server_multiple_principals
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm/policy=unbound.ssl.policy -Djdk.net.hosts.file=TestHosts
+ *      UnboundSSL unbound.ssl.jaas.conf server_star
+ * @run main/othervm/policy=unbound.ssl.policy -Djdk.net.hosts.file=TestHosts
+ *      UnboundSSL unbound.ssl.jaas.conf server_multiple_principals
  */
 public class UnboundSSL {
 
--- a/test/jdk/sun/security/krb5/auto/UnboundSSLMultipleKeys.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/UnboundSSLMultipleKeys.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,11 +31,13 @@
 
 /*
  * @test
- * @bug 8025123
+ * @bug 8025123 8194486
  * @summary Checks if an unbound server pick up a correct key from keytab
- * @run main/othervm UnboundSSLMultipleKeys
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundSSLMultipleKeys
  *                              unbound.ssl.jaas.conf server_star
- * @run main/othervm UnboundSSLMultipleKeys
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundSSLMultipleKeys
  *                              unbound.ssl.jaas.conf server_multiple_principals
  */
 public class UnboundSSLMultipleKeys {
--- a/test/jdk/sun/security/krb5/auto/UnboundSSLPrincipalProperty.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/UnboundSSLPrincipalProperty.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,12 +30,14 @@
 
 /*
  * @test
- * @bug 8025123
+ * @bug 8025123 8194486
  * @summary Checks if an unbound server uses a service principal
  *          from sun.security.krb5.principal system property if specified
- * @run main/othervm UnboundSSLPrincipalProperty
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundSSLPrincipalProperty
  *                              unbound.ssl.jaas.conf server_star
- * @run main/othervm UnboundSSLPrincipalProperty
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundSSLPrincipalProperty
  *                              unbound.ssl.jaas.conf server_multiple_principals
  */
 public class UnboundSSLPrincipalProperty {
--- a/test/jdk/sun/security/krb5/auto/UnboundService.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/UnboundService.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,17 +23,26 @@
 
 /*
  * @test
- * @bug 8001104
+ * @bug 8001104 8194486
  * @summary Unbound SASL service: the GSSAPI/krb5 mech
+ * @library /test/lib
  * @compile -XDignore.symbol.file UnboundService.java
- * @run main/othervm UnboundService null null
- * @run main/othervm UnboundService server/host.rabbit.hole null
- * @run main/othervm UnboundService server/host.rabbit.hole@RABBIT.HOLE null
- * @run main/othervm/fail UnboundService backend/host.rabbit.hole null
- * @run main/othervm UnboundService null server@host.rabbit.hole
- * @run main/othervm UnboundService server/host.rabbit.hole server@host.rabbit.hole
- * @run main/othervm UnboundService server/host.rabbit.hole@RABBIT.HOLE server@host.rabbit.hole
- * @run main/othervm/fail UnboundService backend/host.rabbit.hole server@host.rabbit.hole
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundService null null
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundService
+ *      server/host.rabbit.hole null
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundService
+ *      server/host.rabbit.hole@RABBIT.HOLE null
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts UnboundService
+ *      backend/host.rabbit.hole null
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundService
+ *      null server@host.rabbit.hole
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundService
+ *      server/host.rabbit.hole server@host.rabbit.hole
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UnboundService
+ *      server/host.rabbit.hole@RABBIT.HOLE server@host.rabbit.hole
+ * @run main/othervm/fail -Djdk.net.hosts.file=TestHosts UnboundService
+ *      backend/host.rabbit.hole server@host.rabbit.hole
  */
 
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/Unreachable.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/Unreachable.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,12 @@
 
 /*
  * @test
- * @bug 7162687 8015595
+ * @bug 7162687 8015595 8194486
  * @summary enhance KDC server availability detection
+ * @library /test/lib
  * @compile -XDignore.symbol.file Unreachable.java
- * @run main/othervm Unreachable
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts Unreachable
  */
 import java.net.PortUnreachableException;
 import java.net.SocketTimeoutException;
--- a/test/jdk/sun/security/krb5/auto/UseCacheAndStoreKey.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/UseCacheAndStoreKey.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 7201053
+ * @bug 7201053 8194486
  * @summary Krb5LoginModule shows NPE when both useTicketCache and storeKey
  *          are set to true
+ * @library /test/lib
  * @compile -XDignore.symbol.file UseCacheAndStoreKey.java
- * @run main/othervm UseCacheAndStoreKey
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -Djdk.net.hosts.file=TestHosts UseCacheAndStoreKey
  */
 
 import java.io.FileOutputStream;
--- a/test/jdk/sun/security/krb5/auto/W83.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/W83.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
 
 /*
  * @test
- * @bug 6932525 6951366 6959292
+ * @bug 6932525 6951366 6959292 8194486
  * @summary kerberos login failure on win2008 with AD set to win2000 compat mode
  * and cannot login if session key and preauth does not use the same etype
- * @run main/othervm -D6932525 W83
- * @run main/othervm -D6959292 W83
+ * @library /test/lib
+ * @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+ * @run main/othervm -D6932525 -Djdk.net.hosts.file=TestHosts W83
+ * @run main/othervm -D6959292 -Djdk.net.hosts.file=TestHosts W83
  */
 import com.sun.security.auth.module.Krb5LoginModule;
 import java.io.File;
--- a/test/jdk/sun/security/krb5/auto/principalProperty/TestHosts	Thu Feb 01 11:58:38 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-127.0.0.1 localhost
--- a/test/jdk/sun/security/krb5/auto/rcache_usemd5.sh	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/auto/rcache_usemd5.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -22,11 +22,13 @@
 #
 
 # @test
-# @bug 8168518
-# @library ../../../../java/security/testlibrary/ /test/lib
-# @build jdk.test.lib.Platform
-# @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
-#           -Dtest.service=host ReplayCacheTestProc
+# @bug 8168518 8194486
 # @summary  testing jdk.krb5.rcache.useMD5. This action is put in a separate
 #           test so that ReplayCacheTestProc.java can be launched with special
 #           test.* system properties easily.
+# @library ../../../../java/security/testlibrary/ /test/lib
+# @build jdk.test.lib.Platform
+# @run main jdk.test.lib.FileInstaller TestHosts TestHosts
+# @run main/othervm/timeout=300 -Djdk.krb5.rcache.useMD5=true
+#           -Djdk.net.hosts.file=TestHosts
+#           -Dtest.service=host ReplayCacheTestProc
--- a/test/jdk/sun/security/krb5/config/Include.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/config/Include.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8029994 8177085
+ * @bug 8029994 8177085 8177398
  * @summary Support "include" and "includedir" in krb5.conf
  * @modules java.security.jgss/sun.security.krb5
  * @compile -XDignore.symbol.file Include.java
@@ -53,6 +53,7 @@
         Path df2 = Paths.get("d/f2");       // another file
         Path df3 = Paths.get("d/f.3");      // third file bad name
         Path df4 = Paths.get("d/f4.conf");  // fourth file
+        Path df5 = Paths.get("d/.f5.conf"); // fifth file is dotfile
 
         // OK: The base file can be missing
         System.setProperty("java.security.krb5.conf", "no-such-file");
@@ -103,6 +104,8 @@
         Files.write(ddf, (krb5Conf + "ddf").getBytes());
         // fx4 will be loaded
         Files.write(df4, (krb5Conf + "df4").getBytes());
+        // fx5 will be excluded
+        Files.write(df5, (krb5Conf + "df5").getBytes());
 
         // OK: All good files read
         tryReload(true);
--- a/test/jdk/sun/security/krb5/etype/ETypeOrder.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/krb5/etype/ETypeOrder.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,7 @@
         int[] etypes = EType.getBuiltInDefaults();
 
         // Reference order, note that 2 is not implemented in Java
-        int correct[] = { 18, 17, 16, 23, 1, 3, 2 };
+        int correct[] = { 18, 17, 20, 19, 16, 23, 1, 3, 2 };
 
         int match = 0;
         loopi: for (int i=0; i<etypes.length; i++) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sun/security/krb5/etype/KerberosAesSha2.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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.
+ */
+/*
+ * @test
+ * @bug 8014628
+ * @modules java.base/sun.security.util
+ *          java.security.jgss/sun.security.krb5.internal.crypto.dk:+open
+ * @summary https://tools.ietf.org/html/rfc8009 Test Vectors
+ */
+
+import javax.crypto.Cipher;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+
+import sun.security.krb5.internal.crypto.dk.AesSha2DkCrypto;
+import sun.security.util.HexDumpEncoder;
+
+public class KerberosAesSha2 {
+
+    public static void main(String[] args) throws Exception {
+
+        AesSha2DkCrypto dk128 = new AesSha2DkCrypto(128);
+        AesSha2DkCrypto dk256 = new AesSha2DkCrypto(256);
+
+        boolean aes256ok = Cipher.getMaxAllowedKeyLength("AES") >= 256;
+
+        // Sample results for string-to-key conversion:
+        char[] pass = "password".toCharArray();
+        byte[] salt = cat(
+                hex("10 DF 9D D7 83 E5 BC 8A CE A1 73 0E 74 35 5F 61"),
+                "ATHENA.MIT.EDUraeburn".getBytes());
+
+        check(stringToKey(dk128, pass, salt, null),
+                hex("08 9B CA 48 B1 05 EA 6E A7 7C A5 D2 F3 9D C5 E7"));
+
+        check(stringToKey(dk256, pass, salt, null),
+                hex("45 BD 80 6D BF 6A 83 3A 9C FF C1 C9 45 89 A2 22\n" +
+                    "36 7A 79 BC 21 C4 13 71 89 06 E9 F5 78 A7 84 67"));
+
+        // Sample results for key derivation:
+        byte[] bk16 = hex("37 05 D9 60 80 C1 77 28 A0 E8 00 EA B6 E0 D2 3C");
+
+        check(deriveKey(dk128, bk16, 2, (byte) 0x99),
+                hex("B3 1A 01 8A 48 F5 47 76 F4 03 E9 A3 96 32 5D C3"));
+        check(deriveKey(dk128, bk16, 2, (byte) 0xaa),
+                hex("9B 19 7D D1 E8 C5 60 9D 6E 67 C3 E3 7C 62 C7 2E"));
+        check(deriveKey(dk128, bk16, 2, (byte) 0x55),
+                hex("9F DA 0E 56 AB 2D 85 E1 56 9A 68 86 96 C2 6A 6C"));
+
+        byte[] bk32 = hex(
+                "6D 40 4D 37 FA F7 9F 9D F0 D3 35 68 D3 20 66 98\n" +
+                "00 EB 48 36 47 2E A8 A0 26 D1 6B 71 82 46 0C 52");
+
+        check(deriveKey(dk256, bk32, 2, (byte) 0x99), hex(
+                "EF 57 18 BE 86 CC 84 96 3D 8B BB 50 31 E9 F5 C4\n" +
+                "BA 41 F2 8F AF 69 E7 3D"));
+        check(deriveKey(dk256, bk32, 2, (byte) 0xaa), hex(
+                "56 AB 22 BE E6 3D 82 D7 BC 52 27 F6 77 3F 8E A7\n" +
+                "A5 EB 1C 82 51 60 C3 83 12 98 0C 44 2E 5C 7E 49"));
+        check(deriveKey(dk256, bk32, 2, (byte) 0x55), hex(
+                "69 B1 65 14 E3 CD 8E 56 B8 20 10 D5 C7 30 12 B6\n" +
+                "22 C4 D0 0F FC 23 ED 1F"));
+
+        // Sample encryptions (all using the default cipher state):
+
+        check(enc(dk128, hex("7E 58 95 EA F2 67 24 35 BA D8 17 F5 45 A3 71 48"),
+                    bk16, hex("")),
+                hex("EF 85 FB 89 0B B8 47 2F 4D AB 20 39 4D CA 78 1D\n" +
+                    "AD 87 7E DA 39 D5 0C 87 0C 0D 5A 0A 8E 48 C7 18"));
+
+        check(enc(dk128, hex("7B CA 28 5E 2F D4 13 0F B5 5B 1A 5C 83 BC 5B 24"),
+                    bk16, hex("00 01 02 03 04 05")),
+                hex("84 D7 F3 07 54 ED 98 7B AB 0B F3 50 6B EB 09 CF\n" +
+                    "B5 54 02 CE F7 E6 87 7C E9 9E 24 7E 52 D1 6E D4\n" +
+                    "42 1D FD F8 97 6C"));
+
+        check(enc(dk128, hex("56 AB 21 71 3F F6 2C 0A 14 57 20 0F 6F A9 94 8F"),
+                    bk16, hex("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F")),
+                hex("35 17 D6 40 F5 0D DC 8A D3 62 87 22 B3 56 9D 2A\n" +
+                    "E0 74 93 FA 82 63 25 40 80 EA 65 C1 00 8E 8F C2\n" +
+                    "95 FB 48 52 E7 D8 3E 1E 7C 48 C3 7E EB E6 B0 D3"));
+
+        check(enc(dk128, hex("A7 A4 E2 9A 47 28 CE 10 66 4F B6 4E 49 AD 3F AC"),
+                    bk16, hex("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n" +
+                              "10 11 12 13 14")),
+                hex("72 0F 73 B1 8D 98 59 CD 6C CB 43 46 11 5C D3 36\n" +
+                    "C7 0F 58 ED C0 C4 43 7C 55 73 54 4C 31 C8 13 BC\n" +
+                    "E1 E6 D0 72 C1 86 B3 9A 41 3C 2F 92 CA 9B 83 34\n" +
+                    "A2 87 FF CB FC\n"));
+
+        if (aes256ok) {
+            check(enc(dk256, hex("F7 64 E9 FA 15 C2 76 47 8B 2C 7D 0C 4E 5F 58 E4"),
+                        bk32, hex("")),
+                    hex("41 F5 3F A5 BF E7 02 6D 91 FA F9 BE 95 91 95 A0\n" +
+                        "58 70 72 73 A9 6A 40 F0 A0 19 60 62 1A C6 12 74\n" +
+                        "8B 9B BF BE 7E B4 CE 3C\n"));
+
+            check(enc(dk256, hex("B8 0D 32 51 C1 F6 47 14 94 25 6F FE 71 2D 0B 9A"),
+                        bk32, hex("00 01 02 03 04 05")),
+                    hex("4E D7 B3 7C 2B CA C8 F7 4F 23 C1 CF 07 E6 2B C7\n" +
+                        "B7 5F B3 F6 37 B9 F5 59 C7 F6 64 F6 9E AB 7B 60\n" +
+                        "92 23 75 26 EA 0D 1F 61 CB 20 D6 9D 10 F2\n"));
+
+            check(enc(dk256, hex("53 BF 8A 0D 10 52 65 D4 E2 76 42 86 24 CE 5E 63"),
+                        bk32, hex("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F")),
+                    hex("BC 47 FF EC 79 98 EB 91 E8 11 5C F8 D1 9D AC 4B\n" +
+                        "BB E2 E1 63 E8 7D D3 7F 49 BE CA 92 02 77 64 F6\n" +
+                        "8C F5 1F 14 D7 98 C2 27 3F 35 DF 57 4D 1F 93 2E\n" +
+                        "40 C4 FF 25 5B 36 A2 66\n"));
+
+            check(enc(dk256, hex("76 3E 65 36 7E 86 4F 02 F5 51 53 C7 E3 B5 8A F1"),
+                        bk32, hex("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n" +
+                                  "10 11 12 13 14")),
+                    hex("40 01 3E 2D F5 8E 87 51 95 7D 28 78 BC D2 D6 FE\n" +
+                        "10 1C CF D5 56 CB 1E AE 79 DB 3C 3E E8 64 29 F2\n" +
+                        "B2 A6 02 AC 86 FE F6 EC B6 47 D6 29 5F AE 07 7A\n" +
+                        "1F EB 51 75 08 D2 C1 6B 41 92 E0 1F 62\n"));
+        }
+
+        // Sample checksums:
+
+        byte[] msg = hex(
+                "00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n" +
+                "10 11 12 13 14");
+
+        check(checksum(dk128, bk16, msg), hex(
+                "D7 83 67 18 66 43 D6 7B 41 1C BA 91 39 FC 1D EE"));
+
+        check(checksum(dk256, bk32, msg), hex(
+                "45 EE 79 15 67 EE FC A3 7F 4A C1 E0 22 2D E8 0D\n" +
+                "43 C3 BF A0 66 99 67 2A"));
+
+        // Sample pseudorandom function (PRF) invocations:
+        // Java does not support PRF. Skipped.
+    }
+
+    private static byte[] stringToKey(AesSha2DkCrypto dk,
+            char[] pass, byte[] salt, byte[] params) throws Exception {
+        Method m = AesSha2DkCrypto.class.getDeclaredMethod("stringToKey",
+                char[].class, byte[].class, byte[].class);
+        m.setAccessible(true);
+        return (byte[])m.invoke(dk, pass, salt, params);
+    }
+
+    private static byte[] deriveKey(AesSha2DkCrypto dk, byte[] baseKey,
+            int usage, byte type) throws Exception {
+        Method m = AesSha2DkCrypto.class.getDeclaredMethod("deriveKey",
+                byte[].class, int.class, byte.class);
+        m.setAccessible(true);
+        return (byte[]) m.invoke(dk, baseKey, usage, type);
+    }
+
+    private static byte[] cat(byte[] b1, byte[] b2) {
+        byte[] result = Arrays.copyOf(b1, b1.length + b2.length);
+        System.arraycopy(b2, 0, result, b1.length, b2.length);
+        return result;
+    }
+
+    private static byte[] enc(AesSha2DkCrypto dk, byte[] confounder,
+            byte[] bk, byte[] text) throws Exception {
+        return dk.encryptRaw(bk, 2, new byte[16], cat(confounder, text),
+                0, confounder.length + text.length);
+    }
+
+    private static byte[] checksum(AesSha2DkCrypto dk, byte[] baseKey, byte[] text)
+            throws Exception {
+        return dk.calculateChecksum(baseKey, 2, text, 0, text.length);
+    }
+
+    private static byte[] hex(String var) {
+        var = var.replaceAll("\\s", "");
+        byte[] data = new byte[var.length()/2];
+        for (int i=0; i<data.length; i++) {
+            data[i] = Integer.valueOf(var.substring(2*i,2*i+2), 16).byteValue();
+        }
+        return data;
+    }
+
+    private static void check(byte[] b1, byte[] b2) throws Exception {
+        if (!Arrays.equals(b1, b2)) {
+            dump(b1); dump(b2);
+            throw new Exception("Failure");
+        }
+    }
+
+    private static void dump(byte[] data) throws Exception {
+        new HexDumpEncoder().encodeBuffer(data, System.err);
+    }
+}
--- a/test/jdk/sun/security/pkcs11/PKCS11Test.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/pkcs11/PKCS11Test.java	Fri Feb 02 01:52:03 2018 +0000
@@ -31,6 +31,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
 import java.security.AlgorithmParameters;
 import java.security.InvalidAlgorithmParameterException;
 import java.security.KeyPairGenerator;
@@ -387,6 +388,11 @@
         getNSSInfo(nss_library);
     }
 
+    // Try to parse the version for the specified library.
+    // Assuming the library contains either of the following patterns:
+    // $Header: NSS <version>
+    // Version: NSS <version>
+    // Here, <version> stands for NSS version.
     static double getNSSInfo(String library) {
         // look for two types of headers in NSS libraries
         String nssHeader1 = "$Header: NSS";
@@ -417,7 +423,7 @@
                         read = 100 + is.read(data, 100, 900);
                     }
 
-                    s = new String(data, 0, read);
+                    s = new String(data, 0, read, StandardCharsets.US_ASCII);
                     i = s.indexOf(nssHeader1);
                     if (i > 0 || (i = s.indexOf(nssHeader2)) > 0) {
                         found = true;
@@ -443,7 +449,12 @@
 
         // the index after whitespace after nssHeader
         int afterheader = s.indexOf("NSS", i) + 4;
-        String version = s.substring(afterheader, s.indexOf(' ', afterheader));
+        String version = String.valueOf(s.charAt(afterheader));
+        for (char c = s.charAt(++afterheader);
+                c == '.' || (c >= '0' && c <= '9');
+                c = s.charAt(++afterheader)) {
+            version += c;
+        }
 
         // If a "dot dot" release, strip the extra dots for double parsing
         String[] dot = version.split("\\.");
@@ -458,6 +469,9 @@
         try {
             nss_version = Double.parseDouble(version);
         } catch (NumberFormatException e) {
+            System.out.println("===== Content start =====");
+            System.out.println(s);
+            System.out.println("===== Content end =====");
             System.out.println("Failed to parse lib" + library +
                     " version. Set to 0.0");
             e.printStackTrace();
--- a/test/jdk/sun/security/ssl/CertPathRestrictions/JSSEServer.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/ssl/CertPathRestrictions/JSSEServer.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,6 @@
 
     private SSLServerSocket server = null;
 
-    private Exception exception = null;
-
     public JSSEServer(SSLContext context, String constraint,
             boolean needClientAuth) throws Exception {
         TLSRestrictions.setConstraint("Server", constraint);
@@ -49,35 +47,28 @@
         System.out.println("Server: port=" + getPort());
     }
 
-    public void start() {
-        new Thread(new Runnable() {
+    public Exception start() {
+        System.out.println("Server: started");
+        Exception exception = null;
+        try (SSLSocket socket = (SSLSocket) server.accept()) {
+            System.out.println("Server: accepted connection");
+            socket.setSoTimeout(TLSRestrictions.TIMEOUT);
+            InputStream sslIS = socket.getInputStream();
+            OutputStream sslOS = socket.getOutputStream();
+            sslIS.read();
+            sslOS.write('S');
+            sslOS.flush();
+            System.out.println("Server: finished");
+        } catch (Exception e) {
+            exception = e;
+            e.printStackTrace(System.out);
+            System.out.println("Server: failed");
+        }
 
-            @Override
-            public void run() {
-                try {
-                    System.out.println("Server: started");
-                    try (SSLSocket socket = (SSLSocket) server.accept()) {
-                        socket.setSoTimeout(TLSRestrictions.TIMEOUT);
-                        InputStream sslIS = socket.getInputStream();
-                        OutputStream sslOS = socket.getOutputStream();
-                        sslIS.read();
-                        sslOS.write('S');
-                        sslOS.flush();
-                        System.out.println("Server: finished");
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace(System.out);
-                    exception = e;
-                }
-            }
-        }).start();
+        return exception;
     }
 
     public int getPort() {
         return server.getLocalPort();
     }
-
-    public Exception getException() {
-        return exception;
-    }
 }
--- a/test/jdk/sun/security/ssl/CertPathRestrictions/TLSRestrictions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/ssl/CertPathRestrictions/TLSRestrictions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,6 +36,10 @@
 import java.security.cert.CertificateFactory;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.Base64;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import javax.net.ssl.KeyManagerFactory;
@@ -216,59 +220,59 @@
                 needClientAuth,
                 pass);
 
-        JSSEServer server = new JSSEServer(
-                createSSLContext(trustNames, certNames),
-                serverConstraint,
-                needClientAuth);
-        int port = server.getPort();
-        server.start();
-
-        // Run client on another JVM so that its properties cannot be in conflict
-        // with server's.
-        OutputAnalyzer outputAnalyzer = ProcessTools.executeTestJvm(
-                "-Dcert.dir=" + CERT_DIR,
-                "-Djava.security.debug=certpath",
-                "-classpath",
-                TEST_CLASSES,
-                "JSSEClient",
-                port + "",
-                trustNameStr,
-                certNameStr,
-                clientConstraint);
-        int exitValue = outputAnalyzer.getExitValue();
-        String clientOut = outputAnalyzer.getOutput();
+        ExecutorService executor = Executors.newFixedThreadPool(1);
+        try {
+            JSSEServer server = new JSSEServer(
+                    createSSLContext(trustNames, certNames),
+                    serverConstraint,
+                    needClientAuth);
+            int port = server.getPort();
+            Future<Exception> serverFuture = executor.submit(() -> server.start());
 
-        Exception serverException = server.getException();
-        if (serverException != null) {
-            System.out.println("Server: failed");
-        }
-
-        System.out.println("---------- Client output start ----------");
-        System.out.println(clientOut);
-        System.out.println("---------- Client output end ----------");
+            // Run client on another JVM so that its properties cannot be in conflict
+            // with server's.
+            OutputAnalyzer outputAnalyzer = ProcessTools.executeTestJvm(
+                    "-Dcert.dir=" + CERT_DIR,
+                    "-Djava.security.debug=certpath",
+                    "-classpath",
+                    TEST_CLASSES,
+                    "JSSEClient",
+                    port + "",
+                    trustNameStr,
+                    certNameStr,
+                    clientConstraint);
+            int clientExitValue = outputAnalyzer.getExitValue();
+            String clientOut = outputAnalyzer.getOutput();
+            System.out.println("---------- Client output start ----------");
+            System.out.println(clientOut);
+            System.out.println("---------- Client output end ----------");
 
-        if (serverException instanceof SocketTimeoutException
-                || clientOut.contains("SocketTimeoutException")) {
-            System.out.println("The communication gets timeout and skips the test.");
-            return;
-        }
-
-        if (pass) {
-            if (serverException != null || exitValue != 0) {
-                throw new RuntimeException(
-                        "Unexpected failure. Operation was blocked.");
-            }
-        } else {
-            if (serverException == null && exitValue == 0) {
-                throw new RuntimeException(
-                        "Unexpected pass. Operation was allowed.");
+            Exception serverException = serverFuture.get(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (serverException instanceof SocketTimeoutException
+                    || clientOut.contains("SocketTimeoutException")) {
+                System.out.println("The communication gets timeout and skips the test.");
+                return;
             }
 
-            // The test may encounter non-SSL issues, like network problem.
-            if (!(serverException instanceof SSLHandshakeException
-                    || clientOut.contains("SSLHandshakeException"))) {
-                throw new RuntimeException("Failure with unexpected exception.");
+            if (pass) {
+                if (serverException != null || clientExitValue != 0) {
+                    throw new RuntimeException(
+                            "Unexpected failure. Operation was blocked.");
+                }
+            } else {
+                if (serverException == null && clientExitValue == 0) {
+                    throw new RuntimeException(
+                            "Unexpected pass. Operation was allowed.");
+                }
+
+                // The test may encounter non-SSL issues, like network problem.
+                if (!(serverException instanceof SSLHandshakeException
+                        || clientOut.contains("SSLHandshakeException"))) {
+                    throw new RuntimeException("Failure with unexpected exception.");
+                }
             }
+        } finally {
+            executor.shutdown();
         }
     }
 
@@ -520,7 +524,6 @@
                     true);
             break;
         }
-
         System.out.println("Case passed");
         System.out.println("========================================");
     }
--- a/test/jdk/sun/security/tools/jarsigner/multiRelease/MVJarSigningTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/security/tools/jarsigner/multiRelease/MVJarSigningTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -81,7 +81,7 @@
     private static final String KEYPASS = "changeit";
     private static final String SIGNED_JAR = "Signed.jar";
     private static final String POLICY_FILE = "SignedJar.policy";
-    private static final String VERSION = "" + Runtime.version().major();
+    private static final String VERSION = Integer.toString(10);
     private static final String VERSION_MESSAGE = "I am running on version " + VERSION;
 
     public static void main(String[] args) throws Throwable {
--- a/test/jdk/sun/tools/jcmd/TestJcmdDefaults.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jcmd/TestJcmdDefaults.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,20 +52,22 @@
     private static final String JCMD_LIST_REGEX = "(?s)^\\d+\\s*.*";
 
     public static void main(String[] args) throws Exception {
+        testJcmdUsage("-?");
         testJcmdUsage("-h");
-        testJcmdUsage("-help");
+        testJcmdUsage("--help");
         testJcmdDefaults();
         testJcmdDefaults("-l");
     }
 
     /**
+     * jcmd -J-XX:+UsePerfData -?
      * jcmd -J-XX:+UsePerfData -h
-     * jcmd -J-XX:+UsePerfData -help
+     * jcmd -J-XX:+UsePerfData --help
      */
     private static void testJcmdUsage(String... jcmdArgs) throws Exception {
         OutputAnalyzer output = JcmdBase.jcmdNoPid(VM_ARGS, jcmdArgs);
 
-        assertNotEquals(output.getExitValue(), 0);
+        assertEquals(output.getExitValue(), 0);
         verifyOutputAgainstFile(output);
     }
 
--- a/test/jdk/sun/tools/jcmd/usage.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jcmd/usage.out	Fri Feb 02 01:52:03 2018 +0000
@@ -12,4 +12,4 @@
   PerfCounter.print display the counters exposed by this process  
   -f  read and execute commands from the file                     
   -l  list JVM processes on the local machine                     
-  -h  this help                                                   
+  -? -h --help print this help message                            
--- a/test/jdk/sun/tools/jps/TestJpsSanity.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jps/TestJpsSanity.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,7 +84,10 @@
         OutputAnalyzer output = JpsHelper.jps("-?");
         JpsHelper.verifyOutputAgainstFile(output);
 
-        output = JpsHelper.jps("-help");
+        output = JpsHelper.jps("-h");
+        JpsHelper.verifyOutputAgainstFile(output);
+
+        output = JpsHelper.jps("--help");
         JpsHelper.verifyOutputAgainstFile(output);
     }
 
--- a/test/jdk/sun/tools/jps/usage.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jps/usage.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,6 @@
-usage: jps [-help]
+usage: jps [--help]
        jps [-q] [-mlvV] [<hostid>]
 
 Definitions:
     <hostid>:      <hostname>[:<port>]
+    -? -h --help -help: Print this help message and exit.
--- a/test/jdk/sun/tools/jstat/jstatHelp.sh	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jstat/jstatHelp.sh	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 # @test
 # @bug 4990825 6364329
 # @run shell jstatHelp.sh
-# @summary Test that output of 'jstat -?', 'jstat -help' and 'jstat' matches the usage.out file
+# @summary Test that output of 'jstat -?', 'jstat -h', 'jstat --help' and 'jstat' matches the usage.out file
 
 . ${TESTSRC-.}/../../jvmstat/testlibrary/utils.sh
 
@@ -43,12 +43,22 @@
 fi
 
 rm -f jstat.out 2>/dev/null
-${JSTAT} -J-XX:+UsePerfData -help > jstat.out 2>&1
+${JSTAT} -J-XX:+UsePerfData --help > jstat.out 2>&1
 
 diff -w jstat.out ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
-  echo "Output of jstat -help differs from expected output. Failed."
+  echo "Output of jstat -h differs from expected output. Failed."
+  exit 1
+fi
+
+rm -f jstat.out 2>/dev/null
+${JSTAT} -J-XX:+UsePerfData --help > jstat.out 2>&1
+
+diff -w jstat.out ${TESTSRC}/usage.out
+if [ $? != 0 ]
+then
+  echo "Output of jstat --help differs from expected output. Failed."
   exit 1
 fi
 
--- a/test/jdk/sun/tools/jstat/usage.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jstat/usage.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,4 +1,4 @@
-Usage: jstat -help|-options
+Usage: jstat --help|-options
        jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
 
 Definitions:
@@ -18,3 +18,5 @@
                 milliseconds("ms") or seconds("s"). The default units are "ms".
   <count>       Number of samples to take before terminating.
   -J<flag>      Pass <flag> directly to the runtime system.
+  -? -h --help  Prints this help message.
+  -help         Prints this help message.
--- a/test/jdk/sun/tools/jstatd/TestJstatdUsage.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/sun/tools/jstatd/TestJstatdUsage.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, 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
@@ -36,8 +36,9 @@
 public class TestJstatdUsage {
 
     public static void main(String[] args) throws Exception {
-        testUsage("-help");
         testUsage("-?");
+        testUsage("-h");
+        testUsage("--help");
     }
 
     private static void testUsage(String option) throws Exception {
@@ -47,7 +48,7 @@
         OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
 
         output.shouldContain("usage: jstatd [-nr] [-p port] [-n rminame]");
-        output.shouldHaveExitValue(1);
+        output.shouldHaveExitValue(0);
     }
 
 }
--- a/test/jdk/tools/jlink/DefaultProviderTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/jlink/DefaultProviderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,6 +40,7 @@
  * @test
  * @summary Test plugins enabled by default
  * @author Jean-Francois Denise
+ * @requires vm.compMode != "Xcomp"
  * @library ../lib
  * @modules java.base/jdk.internal.jimage
  *          jdk.jdeps/com.sun.tools.classfile
--- a/test/jdk/tools/jlink/JLinkPluginsTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/jlink/JLinkPluginsTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
  * @test
  * @summary Test image creation
  * @author Jean-Francois Denise
+ * @requires (vm.compMode != "Xcomp" & os.maxMemory >= 2g)
  * @library ../lib
  * @modules java.base/jdk.internal.jimage
  *          jdk.jdeps/com.sun.tools.classfile
--- a/test/jdk/tools/jlink/JLinkTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/jlink/JLinkTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,6 +44,7 @@
  * @summary Test image creation
  * @bug 8189777
  * @author Jean-Francois Denise
+ * @requires (vm.compMode != "Xcomp" & os.maxMemory >= 2g)
  * @library ../lib
  * @modules java.base/jdk.internal.jimage
  *          jdk.jdeps/com.sun.tools.classfile
--- a/test/jdk/tools/jlink/JLinkToolProviderTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/jlink/JLinkToolProviderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
 
 /*
  * @test
+ * @modules jdk.jlink
  * @build JLinkToolProviderTest
  * @run main/othervm/java.security.policy=toolprovider.policy JLinkToolProviderTest
  */
--- a/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,10 @@
  * @library /test/lib
  * @modules java.base/jdk.internal.jimage
  *          java.base/jdk.internal.module
+ *          jdk.compiler
+ *          jdk.jartool
+ *          jdk.jlink
+ *          jdk.zipfs
  * @build jdk.test.lib.Utils
  *        jdk.test.lib.Asserts
  *        jdk.test.lib.JDKToolFinder
--- a/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,6 +43,7 @@
  * @bug 8152143 8152704 8155649 8165804 8185841 8176841 8190918
  * @summary IncludeLocalesPlugin tests
  * @author Naoto Sato
+ * @requires (vm.compMode != "Xcomp" & os.maxMemory >= 2g)
  * @library ../../lib
  * @modules java.base/jdk.internal.jimage
  *          jdk.jdeps/com.sun.tools.classfile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/tools/launcher/HelpFlagsTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018 SAP SE. 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.
+ *
+ * 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.
+ */
+
+/**
+ * @test
+ * @summary Validate and test -?, -h and --help flags. All tools in the jdk
+ *          should take the same flags to display the help message. These
+ *          flags should be documented in the printed help message. The
+ *          tool should quit without error code after displaying the
+ *          help message (if there  is no other problem with the command
+ *          line).
+ *          Also check that tools that used to accept -help still do
+ *          so. Test that tools that never accepted -help don't do so
+ *          in future. I.e., check that the tool returns with the same
+ *          return code as called with an invalid flag, and does not
+ *          print anything containing '-help' in that case.
+ * @compile HelpFlagsTest.java
+ * @run main HelpFlagsTest
+ */
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
+
+
+public class HelpFlagsTest extends TestHelper {
+
+    // Tools that should not be tested because a usage message is pointless.
+    static final String[] TOOLS_NOT_TO_TEST = {
+        "appletviewer",     // deprecated, don't test
+        "jaccessinspector", // gui, don't test, win only
+        "jaccesswalker",    // gui, don't test, win only
+        "jconsole",         // gui, don't test
+        "servertool",       // none. Shell, don't test.
+        "javaw",            // don't test, win only
+        // The flags of these tools need to be fixed in Java EE.
+        // The tools are deprecated for removal in Java SE. Don't test.
+        "idlj",
+        "orbd",
+        "schemagen",
+        "tnameserv",
+        "wsgen",
+        "wsimport",
+        "xjc",
+        // These shall have a help message that resembles that of
+        // MIT's tools. Thus -?, -h and --help are supported, but not
+        // mentioned in the help text.
+        "kinit",
+        "klist",
+        "ktab",
+        // Oracle proprietary tools without help message.
+        "javacpl",
+        "jmc",
+        "jweblauncher",
+        "jcontrol",
+        "ssvagent"
+    };
+
+    // Lists which tools support which flags.
+    private static class ToolHelpSpec {
+        String toolname;
+
+        // How the flags supposed to be supported are handled.
+        //
+        // These flags are supported, i.e.,
+        // * the tool accepts the flag
+        // * the tool prints a help message if the flag is specified
+        // * this help message lists the flag
+        // * the tool exits with exit code '0'.
+        boolean supportsQuestionMark;
+        boolean supportsH;
+        boolean supportsHelp;
+
+        // One tool returns with exit code != '0'.
+        int exitcodeOfHelp;
+
+        // How legacy -help is handled.
+        //
+        // Tools that so far support -help should still do so, but
+        // not print documentation about it. Tools that do not
+        // support -help should not do so in future.
+        //
+        // The tools accepts legacy -help. -help should not be
+        // documented in the usage message.
+        boolean supportsLegacyHelp;
+
+        // Java itself documents -help. -help prints to stderr,
+        // while --help prints to stdout. Leave as is.
+        boolean documentsLegacyHelp;
+
+        // The exit code of the tool if an invalid argument is passed to it.
+        // An exit code != 0 would be expected, but not all tools handle it
+        // that way.
+        int exitcodeOfWrongFlag;
+
+        ToolHelpSpec(String n, int q, int h, int hp, int ex1, int l, int dl, int ex2) {
+            toolname = n;
+            supportsQuestionMark = ( q  == 1 ? true : false );
+            supportsH            = ( h  == 1 ? true : false );
+            supportsHelp         = ( hp == 1 ? true : false );
+            exitcodeOfHelp       = ex1;
+
+            supportsLegacyHelp   = (  l == 1 ? true : false );
+            documentsLegacyHelp  = ( dl == 1 ? true : false );
+            exitcodeOfWrongFlag  = ex2;
+        }
+    }
+
+    static ToolHelpSpec[] jdkTools = {
+        //               name          -?   -h --help exitcode   -help -help  exitcode
+        //                                            of help          docu   of wrong
+        //                                                             mented flag
+        new ToolHelpSpec("jabswitch",   0,   0,   0,   0,         0,    0,     0),     // /?, prints help message anyways, win only
+        new ToolHelpSpec("jaotc",       1,   1,   1,   0,         0,    0,     2),     // -?, -h, --help
+        new ToolHelpSpec("jar",         1,   1,   1,   0,         0,    0,     1),     // -?, -h, --help
+        new ToolHelpSpec("jarsigner",   1,   1,   1,   0,         1,    0,     1),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("java",        1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("javac",       1,   0,   1,   0,         1,    1,     2),     // -?,     --help -help, Documents -help, -h is already taken for "native header output directory".
+        new ToolHelpSpec("javadoc",     1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("javap",       1,   1,   1,   0,         1,    1,     2),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("javaw",       1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help, win only
+        new ToolHelpSpec("jcmd",        1,   1,   1,   0,         1,    0,     1),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("jdb",         1,   1,   1,   0,         1,    1,     0),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("jdeprscan",   1,   1,   1,   0,         0,    0,     1),     // -?, -h, --help
+        new ToolHelpSpec("jdeps",       1,   1,   1,   0,         1,    0,     2),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("jhsdb",       0,   0,   0,   0,         0,    0,     0),     // none, prints help message anyways.
+        new ToolHelpSpec("jimage",      1,   1,   1,   0,         0,    0,     2),     // -?, -h, --help
+        new ToolHelpSpec("jinfo",       1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("jjs",         0,   1,   1, 100,         0,    0,   100),     //     -h, --help, return code 100
+        new ToolHelpSpec("jlink",       1,   1,   1,   0,         0,    0,     2),     // -?, -h, --help
+        new ToolHelpSpec("jmap",        1,   1,   1,   0,         1,    0,     1),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("jmod",        1,   1,   1,   0,         1,    0,     2),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("jps",         1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("jrunscript",  1,   1,   1,   0,         1,    1,     7),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("jshell",      1,   1,   1,   0,         1,    0,     1),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("jstack",      1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("jstat",       1,   1,   1,   0,         1,    1,     1),     // -?, -h, --help -help, Documents -help
+        new ToolHelpSpec("jstatd",      1,   1,   1,   0,         0,    0,     1),     // -?, -h, --help
+        new ToolHelpSpec("keytool",     1,   1,   1,   0,         1,    0,     1),     // none, prints help message anyways.
+        new ToolHelpSpec("pack200",     1,   1,   1,   0,         1,    0,     2),     // -?, -h, --help, -help accepted but not documented.
+        new ToolHelpSpec("rmic",        0,   0,   0,   0,         0,    0,     1),     // none, pirnts help message anyways.
+        new ToolHelpSpec("rmid",        0,   0,   0,   0,         0,    0,     1),     // none, prints help message anyways.
+        new ToolHelpSpec("rmiregistry", 0,   0,   0,   0,         0,    0,     1),     // none, prints help message anyways.
+        new ToolHelpSpec("serialver",   0,   0,   0,   0,         0,    0,     1),     // none, prints help message anyways.
+        new ToolHelpSpec("unpack200",   1,   1,   1,   0,         1,    0,     2),     // -?, -h, --help, -help accepted but not documented.
+        // Oracle proprietary tools:
+        new ToolHelpSpec("javapackager",0,   0,   0,   0,         1,    0,   255),     // -help accepted but not documented.
+    };
+
+    // Returns true if the file is not a tool.
+    static boolean notATool(String file) {
+        if (isWindows && !file.endsWith(EXE_FILE_EXT))
+            return true;
+        return false;
+    }
+
+    // Returns true if tool is listed in TOOLS_NOT_TO_TEST.
+    static boolean dontTestTool(String tool) {
+        tool = tool.toLowerCase();
+        for (String x : TOOLS_NOT_TO_TEST) {
+            if (tool.toLowerCase().startsWith(x))
+                return true;
+        }
+        return false;
+    }
+
+    // Returns corresponding object from jdkTools array.
+    static ToolHelpSpec getToolHelpSpec(String tool) {
+        for (ToolHelpSpec x : jdkTools) {
+            if (tool.toLowerCase().equals(x.toolname) ||
+                tool.toLowerCase().equals(x.toolname + ".exe"))
+                return x;
+        }
+        return null;
+    }
+
+    // Check whether 'flag' appears in 'line' as a word of itself. It must not
+    // be a substring of a word, as then similar flags might be matched.
+    // E.g.: --help matches in the documentation of --help-extra.
+    // This works only with english locale, as some tools have translated
+    // usage messages.
+    static boolean findFlagInLine(String line, String flag) {
+        if (line.contains(flag) &&
+            !line.contains("nknown") &&                       // Some tools say 'Unknown option "<flag>"',
+            !line.contains("invalid flag") &&                 // 'invalid flag: <flag>'
+            !line.contains("invalid option") &&               // or 'invalid option: <flag>'. Skip that.
+            !line.contains("FileNotFoundException: -help") && // Special case for idlj.
+            !line.contains("-h requires an argument") &&      // Special case for javac.
+            !line.contains("port argument,")) {               // Special case for rmiregistry.
+            // There might be several appearances of 'flag' in
+            // 'line'. (-h as substring of --help).
+            int flagLen = flag.length();
+            int lineLen = line.length();
+            for (int i = line.indexOf(flag); i >= 0; i = line.indexOf(flag, i+1)) {
+                // There should be a space before 'flag' in 'line', or it's right at the beginning.
+                if (i > 0 &&
+                    line.charAt(i-1) != ' ' &&
+                    line.charAt(i-1) != '[' &&  // jarsigner
+                    line.charAt(i-1) != '|' &&  // jstatd
+                    line.charAt(i-1) != '\t') { // jjs
+                    continue;
+                }
+                // There should be a space or comma after 'flag' in 'line', or it's just at the end.
+                int posAfter = i + flagLen;
+                if (posAfter < lineLen &&
+                    line.charAt(posAfter) != ' ' &&
+                    line.charAt(posAfter) != ',' &&
+                    line.charAt(posAfter) != '[' && // jar
+                    line.charAt(posAfter) != ']' && // jarsigner
+                    line.charAt(posAfter) != '|' && // jstatd
+                    line.charAt(posAfter) != ':' && // jps
+                    line.charAt(posAfter) != '"') { // keytool
+                    continue;
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    static TestResult runToolWithFlag(File f, String flag) {
+        String x = f.getAbsolutePath();
+        TestResult tr = doExec(x, flag);
+        System.out.println("Testing " + f.getName());
+        System.out.println("#> " + x + " " + flag);
+        tr.testOutput.forEach(System.out::println);
+        System.out.println("#> echo $?");
+        System.out.println(tr.exitValue);
+
+        return tr;
+    }
+
+    // Checks whether tool supports flag 'flag' and documents it
+    // in the help message.
+    static String testTool(File f, String flag, int exitcode) {
+        String result = "";
+        TestResult tr = runToolWithFlag(f, flag);
+
+        // Check that the tool accepted the flag.
+        if (exitcode == 0 && !tr.isOK()) {
+            System.out.println("failed");
+            result = "failed: " + f.getName() + " " + flag + " has exit code " + tr.exitValue + ".\n";
+        }
+
+        // Check there is a help message listing the flag.
+        boolean foundFlag = false;
+        for (String y : tr.testOutput) {
+            if (!foundFlag && findFlagInLine(y, flag)) { // javac
+                foundFlag = true;
+                System.out.println("Found documentation of '" + flag + "': '" + y.trim() +"'");
+            }
+        }
+        if (!foundFlag) {
+            result += "failed: " + f.getName() + " does not document " +
+                flag + " in help message.\n";
+        }
+
+        if (!result.isEmpty())
+            System.out.println(result);
+
+        return result;
+    }
+
+    // Test the tool supports legacy option -help, but does
+    // not document it.
+    static String testLegacyFlag(File f, int exitcode) {
+        String result = "";
+        TestResult tr = runToolWithFlag(f, "-help");
+
+        // Check that the tool accepted the flag.
+        if (exitcode == 0 && !tr.isOK()) {
+            System.out.println("failed");
+            result = "failed: " + f.getName() + " -help has exit code " + tr.exitValue + ".\n";
+        }
+
+        // Check there is _no_ documentation of -help.
+        boolean foundFlag = false;
+        for (String y : tr.testOutput) {
+            if (!foundFlag && findFlagInLine(y, "-help")) {  // javac
+                foundFlag = true;
+                System.out.println("Found documentation of '-help': '" + y.trim() +"'");
+            }
+        }
+        if (foundFlag) {
+            result += "failed: " + f.getName() + " does document -help " +
+                "in help message. This legacy flag should not be documented.\n";
+        }
+
+        if (!result.isEmpty())
+            System.out.println(result);
+
+        return result;
+    }
+
+    // Test that the tool exits with the exit code expected for
+    // invalid flags. In general, one would expect this to be != 0,
+    // but currently a row of tools exit with 0 in this case.
+    // The output should not ask to get help with flag '-help'.
+    static String testInvalidFlag(File f, String flag, int exitcode, boolean documentsLegacyHelp) {
+        String result = "";
+        TestResult tr = runToolWithFlag(f, flag);
+
+        // Check that the tool did exit with the expected return code.
+        if (!((exitcode == tr.exitValue) ||
+              // Windows reports -1 where unix reports 255.
+              (tr.exitValue < 0 && exitcode == tr.exitValue + 256))) {
+            System.out.println("failed");
+            result = "failed: " + f.getName() + " " + flag + " should not be " +
+                     "accepted. But it has exit code " + tr.exitValue + ".\n";
+        }
+
+        if (!documentsLegacyHelp) {
+            // Check there is _no_ documentation of -help.
+            boolean foundFlag = false;
+            for (String y : tr.testOutput) {
+                if (!foundFlag && findFlagInLine(y, "-help")) {  // javac
+                    foundFlag = true;
+                    System.out.println("Found documentation of '-help': '" + y.trim() +"'");
+                }
+            }
+            if (foundFlag) {
+                result += "failed: " + f.getName() + " does document -help " +
+                    "in error message. This legacy flag should not be documented.\n";
+            }
+        }
+
+        if (!result.isEmpty())
+            System.out.println(result);
+
+        return result;
+    }
+
+    public static void main(String[] args) {
+        String errorMessage = "";
+
+        // The test analyses the help messages printed. It assumes englisch
+        // help messages. Thus it only works with english locale.
+        if (!isEnglishLocale()) { return; }
+
+        for (File f : new File(JAVA_BIN).listFiles()) {
+            String toolName = f.getName();
+
+            if (notATool(toolName)) {
+                continue;
+            }
+            if (dontTestTool(toolName)) {
+                System.out.println("Skipping test of tool " + toolName +
+                                   ". Tool has no help message.");
+                continue;
+            }
+
+            ToolHelpSpec tool = getToolHelpSpec(toolName);
+            if (tool == null) {
+                errorMessage += "Tool " + toolName + " not covered by this test. " +
+                    "Add specification to jdkTools array!\n";
+                continue;
+            }
+
+            // Test for help flags to be supported.
+            if (tool.supportsQuestionMark == true) {
+                errorMessage += testTool(f, "-?", tool.exitcodeOfHelp);
+            } else {
+                System.out.println("Skip " + tool.toolname + ". It does not support -?.");
+            }
+            if (tool.supportsH == true) {
+                errorMessage += testTool(f, "-h", tool.exitcodeOfHelp);
+            } else {
+                System.out.println("Skip " + tool.toolname + ". It does not support -h.");
+            }
+            if (tool.supportsHelp == true) {
+                errorMessage += testTool(f, "--help", tool.exitcodeOfHelp);
+            } else {
+                System.out.println("Skip " + tool.toolname + ". It does not support --help.");
+            }
+
+            // Check that the return code listing in jdkTools[] is
+            // correct for an invalid flag.
+            errorMessage += testInvalidFlag(f, "-asdfxgr", tool.exitcodeOfWrongFlag, tool.documentsLegacyHelp);
+
+            // Test for legacy -help flag.
+            if (!tool.documentsLegacyHelp) {
+                if (tool.supportsLegacyHelp == true) {
+                    errorMessage += testLegacyFlag(f, tool.exitcodeOfHelp);
+                } else {
+                    errorMessage += testInvalidFlag(f, "-help", tool.exitcodeOfWrongFlag, false);
+                }
+            }
+        }
+
+        if (errorMessage.isEmpty()) {
+            System.out.println("All help string tests: PASS");
+        } else {
+            throw new AssertionError("HelpFlagsTest failed:\n" + errorMessage);
+        }
+    }
+}
--- a/test/jdk/tools/launcher/modules/addexports/manifest/AddExportsAndOpensInManifest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/launcher/modules/addexports/manifest/AddExportsAndOpensInManifest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
  *          manifest of a main application JAR
  */
 
+import java.lang.reflect.Method;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -41,6 +42,7 @@
 import jdk.testlibrary.OutputAnalyzer;
 import jdk.testlibrary.ProcessTools;
 
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 import static org.testng.Assert.*;
 
@@ -48,6 +50,15 @@
 @Test
 public class AddExportsAndOpensInManifest {
 
+    private String testName;
+    private int testCaseNum;
+
+    @BeforeMethod
+    public void getTestName(Method m){
+        testName = m.getName();
+        testCaseNum = 0;
+    }
+
     /**
      * Package Test1 and Test2 into a JAR file with the given attributes
      * in the JAR manifest, then execute the JAR file with `java -jar`.
@@ -67,7 +78,7 @@
         }
 
         // create the JAR file with Test1 and Test2
-        Path jarfile = Paths.get("test.jar");
+        Path jarfile = Paths.get(String.format("%s-%s.jar", testName, ++testCaseNum));
         Files.deleteIfExists(jarfile);
 
         Path classes = Paths.get(System.getProperty("test.classes", ""));
@@ -172,5 +183,4 @@
         attrs = "Main-Class=Test1,Add-Opens=java.base/jdk.internal.DoesNotExit";
         runExpectingFail(attrs, "IllegalAccessError");
     }
-
 }
--- a/test/jdk/tools/pack200/ModuleAttributes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/pack200/ModuleAttributes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,8 @@
  * @test
  * @bug 8048100
  * @summary test the new Module attributes
+ * @modules jdk.compiler
+ *          jdk.zipfs
  * @compile -XDignore.symbol.file Utils.java ModuleAttributes.java
  * @run main ModuleAttributes
  */
--- a/test/jdk/tools/pack200/Pack200Props.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/jdk/tools/pack200/Pack200Props.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,8 @@
  * @test
  * @bug 6575373 6969063
  * @summary verify default properties of the packer/unpacker and segment limit
+ * @modules jdk.compiler
+ *          jdk.zipfs
  * @compile -XDignore.symbol.file Utils.java Pack200Props.java
  * @run main Pack200Props
  * @author ksrini
--- a/test/langtools/ProblemList.txt	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/ProblemList.txt	Fri Feb 02 01:52:03 2018 +0000
@@ -37,7 +37,7 @@
 # jshell
 
 jdk/jshell/UserJdiUserRemoteTest.java                                           8173079    linux-all
-jdk/jshell/UserInputTest.java                                                   8169536    generic-all   
+jdk/jshell/UserInputTest.java                                                   8169536    generic-all
 
 ###########################################################################
 #
@@ -54,6 +54,8 @@
 tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java         8057687    generic-all    emit correct byte code an attributes for type annotations
 tools/javac/warnings/suppress/TypeAnnotations.java                              8057683    generic-all    improve ordering of errors with type annotations
 tools/javac/modules/SourceInSymlinkTest.java                                    8180263    windows-all    fails when run on a subst drive
+tools/javac/options/release/ReleaseOptionUnsupported.java                       8193784    generic-all    temporary until support for --release 11 is worked out
+tools/javac/jvm/VerboseOutTest.java                                             8194968    windows-all
 
 ###########################################################################
 #
@@ -76,3 +78,5 @@
 ###########################################################################
 #
 # jdeps 
+
+tools/jdeprscan/tests/jdk/jdeprscan/TestNotFound.java       8193784    generic-all        temporary until support for --release 11 is worked out
--- a/test/langtools/TEST.ROOT	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/TEST.ROOT	Fri Feb 02 01:52:03 2018 +0000
@@ -15,7 +15,7 @@
 groups=TEST.groups
 
 # Minimum jtreg version
-requiredVersion=4.2 b08
+requiredVersion=4.2 b11
 
 # Use new module options
 useNewOptions=true
--- a/test/langtools/jdk/javadoc/doclet/AccessAsciiArt/AccessAsciiArt.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/AccessAsciiArt/AccessAsciiArt.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,9 +48,9 @@
 
         checkOutput("p1/subpkg/SSC.html", true,
                 // Test the top line of the class tree
-                "<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
+                "<li><a href=\"../C.html\" title=\"class in p1\">p1.C</a></li>",
                 // Test the second line of the class tree
-                "<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
+                "<li><a href=\"../SC.html\" title=\"class in p1\">p1.SC</a></li>",
                 // Test the third line of the class tree
                 "<li>p1.subpkg.SSC</li>");
     }
--- a/test/langtools/jdk/javadoc/doclet/testAnchorNames/TestAnchorNames.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testAnchorNames/TestAnchorNames.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -82,63 +82,63 @@
         // Test some fields
         checkOutput("pkg1/RegClass.html", true,
                 "<a name=\"Z:Z_\">",
-                "<a href=\"../pkg1/RegClass.html#Z:Z_\">",
+                "<a href=\"#Z:Z_\">",
                 "<a name=\"Z:Z_:D\">",
-                "<a href=\"../pkg1/RegClass.html#Z:Z_:D\">",
+                "<a href=\"#Z:Z_:D\">",
                 "<a name=\"Z:Z:D_\">",
-                "<a href=\"../pkg1/RegClass.html#Z:Z:D_\">",
+                "<a href=\"#Z:Z:D_\">",
                 "<a name=\"Z:Z:Dfield\">",
-                "<a href=\"../pkg1/RegClass.html#Z:Z:Dfield\">",
+                "<a href=\"#Z:Z:Dfield\">",
                 "<a name=\"fieldInCla:D:D\">",
-                "<a href=\"../pkg1/RegClass.html#fieldInCla:D:D\">",
+                "<a href=\"#fieldInCla:D:D\">",
                 "<a name=\"S_:D:D:D:D:DINT\">",
-                "<a href=\"../pkg1/RegClass.html#S_:D:D:D:D:DINT\">",
+                "<a href=\"#S_:D:D:D:D:DINT\">",
                 "<a name=\"method:D:D\">",
-                "<a href=\"../pkg1/RegClass.html#method:D:D\">");
+                "<a href=\"#method:D:D\">");
 
         checkOutput("pkg1/DeprMemClass.html", true,
                 "<a name=\"Z:Z_field_In_Class\">",
-                "<a href=\"../pkg1/DeprMemClass.html#Z:Z_field_In_Class\">");
+                "<a href=\"#Z:Z_field_In_Class\">");
 
         // Test constructor
         checkOutput("pkg1/RegClass.html", true,
                 "<a name=\"RegClass-java.lang.String-int-\">",
-                "<a href=\"../pkg1/RegClass.html#RegClass-java.lang.String-int-\">");
+                "<a href=\"#RegClass-java.lang.String-int-\">");
 
         // Test some methods
         checkOutput("pkg1/RegClass.html", true,
                 "<a name=\"Z:Z_methodInClass-java.lang.String-\">",
-                "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClass-java.lang.String-\">",
+                "<a href=\"#Z:Z_methodInClass-java.lang.String-\">",
                 "<a name=\"method--\">",
-                "<a href=\"../pkg1/RegClass.html#method--\">",
+                "<a href=\"#method--\">",
                 "<a name=\"foo-java.util.Map-\">",
-                "<a href=\"../pkg1/RegClass.html#foo-java.util.Map-\">",
+                "<a href=\"#foo-java.util.Map-\">",
                 "<a name=\"methodInCla:Ds-java.lang.String:A-\">",
-                "<a href=\"../pkg1/RegClass.html#methodInCla:Ds-java.lang.String:A-\">",
+                "<a href=\"#methodInCla:Ds-java.lang.String:A-\">",
                 "<a name=\"Z:Z_methodInClas:D-java.lang.String-int-\">",
-                "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClas:D-java.lang.String-int-\">",
+                "<a href=\"#Z:Z_methodInClas:D-java.lang.String-int-\">",
                 "<a name=\"methodD-pkg1.RegClass.:DA-\">",
-                "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.:DA-\">",
+                "<a href=\"#methodD-pkg1.RegClass.:DA-\">",
                 "<a name=\"methodD-pkg1.RegClass.D:A-\">",
-                "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.D:A-\">");
+                "<a href=\"#methodD-pkg1.RegClass.D:A-\">");
 
         checkOutput("pkg1/DeprMemClass.html", true,
                 "<a name=\"Z:Z:Dmethod_In_Class--\">",
-                "<a href=\"../pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">");
+                "<a href=\"#Z:Z:Dmethod_In_Class--\">");
 
         // Test enum
         checkOutput("pkg1/RegClass.Te$t_Enum.html", true,
                 "<a name=\"Z:Z:DFLD2\">",
-                "<a href=\"../pkg1/RegClass.Te$t_Enum.html#Z:Z:DFLD2\">");
+                "<a href=\"#Z:Z:DFLD2\">");
 
         // Test nested class
         checkOutput("pkg1/RegClass._NestedClas$.html", true,
                 "<a name=\"Z:Z_NestedClas:D--\">",
-                "<a href=\"../pkg1/RegClass._NestedClas$.html#Z:Z_NestedClas:D--\">");
+                "<a href=\"#Z:Z_NestedClas:D--\">");
 
         // Test class use page
         checkOutput("pkg1/class-use/DeprMemClass.html", true,
-                "<a href=\"../../pkg1/RegClass.html#d____mc\">");
+                "<a href=\"../RegClass.html#d____mc\">");
 
         // Test deprecated list page
         checkOutput("deprecated-list.html", true,
@@ -201,63 +201,63 @@
         // Test some fields
         checkOutput("pkg1/RegClass.html", true,
                 "<a id=\"_\">",
-                "<a href=\"../pkg1/RegClass.html#_\">",
+                "<a href=\"#_\">",
                 "<a id=\"_$\">",
-                "<a href=\"../pkg1/RegClass.html#_$\">",
+                "<a href=\"#_$\">",
                 "<a id=\"$_\">",
-                "<a href=\"../pkg1/RegClass.html#$_\">",
+                "<a href=\"#$_\">",
                 "<a id=\"$field\">",
-                "<a href=\"../pkg1/RegClass.html#$field\">",
+                "<a href=\"#$field\">",
                 "<a id=\"fieldInCla$$\">",
-                "<a href=\"../pkg1/RegClass.html#fieldInCla$$\">",
+                "<a href=\"#fieldInCla$$\">",
                 "<a id=\"S_$$$$$INT\">",
-                "<a href=\"../pkg1/RegClass.html#S_$$$$$INT\">",
+                "<a href=\"#S_$$$$$INT\">",
                 "<a id=\"method$$\">",
-                "<a href=\"../pkg1/RegClass.html#method$$\">");
+                "<a href=\"#method$$\">");
 
         checkOutput("pkg1/DeprMemClass.html", true,
                 "<a id=\"_field_In_Class\">",
-                "<a href=\"../pkg1/DeprMemClass.html#_field_In_Class\">");
+                "<a href=\"#_field_In_Class\">");
 
         // Test constructor
         checkOutput("pkg1/RegClass.html", true,
                 "<a id=\"&lt;init&gt;(java.lang.String,int)\">",
-                "<a href=\"../pkg1/RegClass.html#%3Cinit%3E(java.lang.String,int)\">");
+                "<a href=\"#%3Cinit%3E(java.lang.String,int)\">");
 
         // Test some methods
         checkOutput("pkg1/RegClass.html", true,
                 "<a id=\"_methodInClass(java.lang.String)\">",
-                "<a href=\"../pkg1/RegClass.html#_methodInClass(java.lang.String)\">",
+                "<a href=\"#_methodInClass(java.lang.String)\">",
                 "<a id=\"method()\">",
-                "<a href=\"../pkg1/RegClass.html#method()\">",
+                "<a href=\"#method()\">",
                 "<a id=\"foo(java.util.Map)\">",
-                "<a href=\"../pkg1/RegClass.html#foo(java.util.Map)\">",
+                "<a href=\"#foo(java.util.Map)\">",
                 "<a id=\"methodInCla$s(java.lang.String[])\">",
-                "<a href=\"../pkg1/RegClass.html#methodInCla$s(java.lang.String%5B%5D)\">",
+                "<a href=\"#methodInCla$s(java.lang.String%5B%5D)\">",
                 "<a id=\"_methodInClas$(java.lang.String,int)\">",
-                "<a href=\"../pkg1/RegClass.html#_methodInClas$(java.lang.String,int)\">",
+                "<a href=\"#_methodInClas$(java.lang.String,int)\">",
                 "<a id=\"methodD(pkg1.RegClass.$A)\">",
-                "<a href=\"../pkg1/RegClass.html#methodD(pkg1.RegClass.$A)\">",
+                "<a href=\"#methodD(pkg1.RegClass.$A)\">",
                 "<a id=\"methodD(pkg1.RegClass.D[])\">",
-                "<a href=\"../pkg1/RegClass.html#methodD(pkg1.RegClass.D%5B%5D)\">");
+                "<a href=\"#methodD(pkg1.RegClass.D%5B%5D)\">");
 
         checkOutput("pkg1/DeprMemClass.html", true,
                 "<a id=\"$method_In_Class()\">",
-                "<a href=\"../pkg1/DeprMemClass.html#$method_In_Class()\">");
+                "<a href=\"#$method_In_Class()\">");
 
         // Test enum
         checkOutput("pkg1/RegClass.Te$t_Enum.html", true,
                 "<a id=\"$FLD2\">",
-                "<a href=\"../pkg1/RegClass.Te$t_Enum.html#$FLD2\">");
+                "<a href=\"#$FLD2\">");
 
         // Test nested class
         checkOutput("pkg1/RegClass._NestedClas$.html", true,
                 "<a id=\"&lt;init&gt;()\">",
-                "<a href=\"../pkg1/RegClass._NestedClas$.html#%3Cinit%3E()\">");
+                "<a href=\"#%3Cinit%3E()\">");
 
         // Test class use page
         checkOutput("pkg1/class-use/DeprMemClass.html", true,
-                "<a href=\"../../pkg1/RegClass.html#d____mc\">");
+                "<a href=\"../RegClass.html#d____mc\">");
 
         // Test deprecated list page
         checkOutput("deprecated-list.html", true,
@@ -320,10 +320,10 @@
                 "<a id=\"\u0391\u0392\u0393()\">");
 
         checkOutput("p/Ref.html", true,
-                "<a href=\"../p/Def.html#%C3%A0%C3%A9\"><code>&agrave;&eacute;</code></a>",
-                "<a href=\"../p/Def.html#%C3%80%C3%89()\"><code>&Agrave;&Eacute;</code></a>",
-                "<a href=\"../p/Def.html#%CE%B1%CE%B2%CE%B3\"><code>&alpha;&beta;&gamma;</code></a>",
-                "<a href=\"../p/Def.html#%CE%91%CE%92%CE%93()\"><code>&Alpha;&Beta;&Gamma;</code></a>");
+                "<a href=\"Def.html#%C3%A0%C3%A9\"><code>&agrave;&eacute;</code></a>",
+                "<a href=\"Def.html#%C3%80%C3%89()\"><code>&Agrave;&Eacute;</code></a>",
+                "<a href=\"Def.html#%CE%B1%CE%B2%CE%B3\"><code>&alpha;&beta;&gamma;</code></a>",
+                "<a href=\"Def.html#%CE%91%CE%92%CE%93()\"><code>&Alpha;&Beta;&Gamma;</code></a>");
 
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testAnnotationTypes/TestAnnotationTypes.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testAnnotationTypes/TestAnnotationTypes.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,8 +56,7 @@
                 + "field.detail\">Field</a>&nbsp;|&nbsp;</li>",
                 "<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->",
                 "<h3>Field Summary</h3>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../"
-                + "pkg/AnnotationTypeField.html#DEFAULT_NAME\">DEFAULT_NAME</a></span>"
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"#DEFAULT_NAME\">DEFAULT_NAME</a></span>"
                 + "</code></th>",
                 "<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->",
                 "<h4>DEFAULT_NAME</h4>\n"
--- a/test/langtools/jdk/javadoc/doclet/testClassLinks/TestClassLinks.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testClassLinks/TestClassLinks.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,38 +50,38 @@
         checkExit(Exit.OK);
 
         checkOutput("p/C1.html", true,
-                "<code><a href=\"../p/C2.html\" title=\"class in p\">C2</a></code>",
-                "<code><span class=\"memberNameLink\"><a href=\"../p/C1.html#C1--\">C1</a></span>()</code>");
+                "<code><a href=\"C2.html\" title=\"class in p\">C2</a></code>",
+                "<code><span class=\"memberNameLink\"><a href=\"#C1--\">C1</a></span>()</code>");
 
         checkOutput("p/C2.html", true,
-                "<code><a href=\"../p/C3.html\" title=\"class in p\">C3</a></code>",
-                "<code><span class=\"memberNameLink\"><a href=\"../p/C2.html#C2--\">C2</a></span>()</code>");
+                "<code><a href=\"C3.html\" title=\"class in p\">C3</a></code>",
+                "<code><span class=\"memberNameLink\"><a href=\"#C2--\">C2</a></span>()</code>");
 
         checkOutput("p/C3.html", true,
-                "<code><a href=\"../p/I1.html\" title=\"interface in p\">I1</a></code>, "
-                + "<code><a href=\"../p/I12.html\" title=\"interface in p\">I12</a></code>, "
-                + "<code><a href=\"../p/I2.html\" title=\"interface in p\">I2</a></code>, "
-                + "<code><a href=\"../p/IT1.html\" title=\"interface in p\">IT1</a>&lt;T&gt;</code>, "
-                + "<code><a href=\"../p/IT2.html\" title=\"interface in p\">IT2</a>&lt;java.lang.String&gt;</code>",
-                "<code><span class=\"memberNameLink\"><a href=\"../p/C3.html#C3--\">C3</a></span>()</code>");
+                "<code><a href=\"I1.html\" title=\"interface in p\">I1</a></code>, "
+                + "<code><a href=\"I12.html\" title=\"interface in p\">I12</a></code>, "
+                + "<code><a href=\"I2.html\" title=\"interface in p\">I2</a></code>, "
+                + "<code><a href=\"IT1.html\" title=\"interface in p\">IT1</a>&lt;T&gt;</code>, "
+                + "<code><a href=\"IT2.html\" title=\"interface in p\">IT2</a>&lt;java.lang.String&gt;</code>",
+                "<code><span class=\"memberNameLink\"><a href=\"#C3--\">C3</a></span>()</code>");
 
         checkOutput("p/I1.html", true,
-                "<code><a href=\"../p/C3.html\" title=\"class in p\">C3</a></code>",
-                "<code><a href=\"../p/I12.html\" title=\"interface in p\">I12</a></code>");
+                "<code><a href=\"C3.html\" title=\"class in p\">C3</a></code>",
+                "<code><a href=\"I12.html\" title=\"interface in p\">I12</a></code>");
 
         checkOutput("p/I2.html", true,
-                "<code><a href=\"../p/C3.html\" title=\"class in p\">C3</a></code>",
-                "<code><a href=\"../p/I12.html\" title=\"interface in p\">I12</a></code>");
+                "<code><a href=\"C3.html\" title=\"class in p\">C3</a></code>",
+                "<code><a href=\"I12.html\" title=\"interface in p\">I12</a></code>");
 
         checkOutput("p/I12.html", true,
-                "<code><a href=\"../p/C3.html\" title=\"class in p\">C3</a></code>",
-                "<code><a href=\"../p/I1.html\" title=\"interface in p\">I1</a></code>, <code><a href=\"../p/I2.html\" title=\"interface in p\">I2</a></code>");
+                "<code><a href=\"C3.html\" title=\"class in p\">C3</a></code>",
+                "<code><a href=\"I1.html\" title=\"interface in p\">I1</a></code>, <code><a href=\"I2.html\" title=\"interface in p\">I2</a></code>");
 
         checkOutput("p/IT1.html", true,
-                "<code><a href=\"../p/C3.html\" title=\"class in p\">C3</a></code>");
+                "<code><a href=\"C3.html\" title=\"class in p\">C3</a></code>");
 
         checkOutput("p/IT2.html", true,
-                "code><a href=\"../p/C3.html\" title=\"class in p\">C3</a></code>");
+                "code><a href=\"C3.html\" title=\"class in p\">C3</a></code>");
 
     }
 
--- a/test/langtools/jdk/javadoc/doclet/testClassTree/TestClassTree.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testClassTree/TestClassTree.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,11 +51,11 @@
 
         checkOutput("pkg/package-tree.html", true,
                 "<ul>\n"
-                + "<li class=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" "
+                + "<li class=\"circle\">pkg.<a href=\"ParentClass.html\" "
                 + "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a>",
                 "<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>\n"
                 + "<ul>\n"
-                + "<li class=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" "
+                + "<li class=\"circle\">pkg.<a href=\"AnnotationType.html\" "
                 + "title=\"annotation in pkg\"><span class=\"typeNameLink\">AnnotationType</span></a> "
                 + "(implements java.lang.annotation.Annotation)</li>\n"
                 + "</ul>",
@@ -66,7 +66,7 @@
                 + "<li class=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang."
                 + "Comparable&lt;T&gt;, java.io.Serializable)\n"
                 + "<ul>\n"
-                + "<li class=\"circle\">pkg.<a href=\"../pkg/Coin.html\" "
+                + "<li class=\"circle\">pkg.<a href=\"Coin.html\" "
                 + "title=\"enum in pkg\"><span class=\"typeNameLink\">Coin</span></a></li>\n"
                 + "</ul>\n"
                 + "</li>\n"
@@ -75,7 +75,7 @@
                 + "</ul>");
 
         checkOutput("pkg/package-tree.html", false,
-                "<li class=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" "
+                "<li class=\"circle\">class pkg.<a href=\".ParentClass.html\" "
                 + "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a></li>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testConstructors/TestConstructors.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testConstructors/TestConstructors.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,31 +48,31 @@
 
         checkOutput("pkg1/Outer.html", true,
                 "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n"
-                + "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n"
-                + "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\"><code>NestedInner()</code></a>, \n"
-                + "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>NestedInner(int)</code></a>, \n"
-                + "<a href=\"../pkg1/Outer.html#Outer--\"><code>Outer()</code></a>, \n"
-                + "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>",
-                "Link: <a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, "
-                + "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>, "
-                + "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>"
+                + "<dd><a href=\"Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n"
+                + "<a href=\"Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n"
+                + "<a href=\"Outer.Inner.NestedInner.html#NestedInner--\"><code>NestedInner()</code></a>, \n"
+                + "<a href=\"Outer.Inner.NestedInner.html#NestedInner-int-\"><code>NestedInner(int)</code></a>, \n"
+                + "<a href=\"#Outer--\"><code>Outer()</code></a>, \n"
+                + "<a href=\"#Outer-int-\"><code>Outer(int)</code></a>",
+                "Link: <a href=\"Outer.Inner.html#Inner--\"><code>Inner()</code></a>, "
+                + "<a href=\"#Outer-int-\"><code>Outer(int)</code></a>, "
+                + "<a href=\"Outer.Inner.NestedInner.html#NestedInner-int-\"><code>"
                 + "NestedInner(int)</code></a>",
-                "<a href=\"../pkg1/Outer.html#Outer--\">Outer</a></span>()",
+                "<a href=\"#Outer--\">Outer</a></span>()",
                 "<a name=\"Outer--\">",
-                "<a href=\"../pkg1/Outer.html#Outer-int-\">Outer</a></span>&#8203;(int&nbsp;i)",
+                "<a href=\"#Outer-int-\">Outer</a></span>&#8203;(int&nbsp;i)",
                 "<a name=\"Outer-int-\">");
 
         checkOutput("pkg1/Outer.Inner.html", true,
-                "<a href=\"../pkg1/Outer.Inner.html#Inner--\">Inner</a></span>()",
+                "<a href=\"#Inner--\">Inner</a></span>()",
                 "<a name=\"Inner--\">",
-                "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\">Inner</a></span>&#8203;(int&nbsp;i)",
+                "<a href=\"#Inner-int-\">Inner</a></span>&#8203;(int&nbsp;i)",
                 "<a name=\"Inner-int-\">");
 
         checkOutput("pkg1/Outer.Inner.NestedInner.html", true,
-                "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\">NestedInner</a></span>()",
+                "<a href=\"#NestedInner--\">NestedInner</a></span>()",
                 "<a name=\"NestedInner--\">",
-                "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\">NestedInner</a></span>&#8203;(int&nbsp;i)",
+                "<a href=\"#NestedInner-int-\">NestedInner</a></span>&#8203;(int&nbsp;i)",
                 "<a name=\"NestedInner-int-\">");
 
         checkOutput("pkg1/Outer.Inner.html", false,
@@ -84,9 +84,9 @@
                 "Outer.Inner.NestedInner-int-");
 
         checkOutput("pkg1/Outer.html", false,
-                "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>",
-                "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>",
-                "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>",
-                "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>");
+                "<a href=\"Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>",
+                "<a href=\"Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>",
+                "<a href=\"Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>",
+                "<a href=\"Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testCopyFiles/TestCopyFiles.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testCopyFiles/TestCopyFiles.java	Fri Feb 02 01:52:03 2018 +0000
@@ -54,18 +54,18 @@
                 "phi-TOP-phi",
                 // check top navbar
                 "<a href=\"../../acme.mdle-summary.html\">Module</a>",
-                "<a href=\"../../p/package-summary.html\">Package</a>",
+                "<a href=\"../package-summary.html\">Package</a>",
                 "<a href=\"../../overview-tree.html\">Tree</a>",
                 "<a href=\"../../deprecated-list.html\">Deprecated</a>",
                 "<a href=\"../../index-all.html\">Index</a>",
                 "phi-HEADER-phi",
                 "In a named module acme.module and named package "
-                        + "<a href=\"../../p/package-summary.html\"><code>p</code></a>.",
+                        + "<a href=\"../package-summary.html\"><code>p</code></a>.",
                 "\"simpleTagLabel\">Since:</",
                 "1940",
                 // check bottom navbar
                 "<a href=\"../../acme.mdle-summary.html\">Module</a>",
-                "<a href=\"../../p/package-summary.html\">Package</a>",
+                "<a href=\"../package-summary.html\">Package</a>",
                 "<a href=\"../../overview-tree.html\">Tree</a>",
                 "<a href=\"../../deprecated-list.html\">Deprecated</a>",
                 "<a href=\"../../index-all.html\">Index</a>",
@@ -91,18 +91,18 @@
                 "phi-TOP-phi",
                 // check top navbar
                 "<a href=\"../../acme.mdle-summary.html\">Module</a>",
-                "<a href=\"../../p/package-summary.html\">Package</a>",
+                "<a href=\"../package-summary.html\">Package</a>",
                 "<a href=\"../../overview-tree.html\">Tree</a>",
                 "<a href=\"../../deprecated-list.html\">Deprecated</a>",
                 "<a href=\"../../index-all.html\">Index</a>",
                 "phi-HEADER-phi",
                 "In a named module acme.module and named package "
-                        + "<a href=\"../../p/package-summary.html\"><code>p</code></a>.",
+                        + "<a href=\"../package-summary.html\"><code>p</code></a>.",
                 "\"simpleTagLabel\">Since:</",
                 "1940",
                 // check bottom navbar
                 "<a href=\"../../acme.mdle-summary.html\">Module</a>",
-                "<a href=\"../../p/package-summary.html\">Package</a>",
+                "<a href=\"../package-summary.html\">Package</a>",
                 "<a href=\"../../overview-tree.html\">Tree</a>",
                 "<a href=\"../../deprecated-list.html\">Deprecated</a>",
                 "<a href=\"../../index-all.html\">Index</a>",
@@ -116,7 +116,7 @@
                 "phi-TOP-phi",
                 // check top navbar
                 "<a href=\"../../../../acme2.mdle-summary.html\">Module</a>",
-                "<a href=\"../../../../p2/package-summary.html\">Package</a>",
+                "<a href=\"../../../package-summary.html\">Package</a>",
                 "<a href=\"../../../../overview-tree.html\">Tree</a>",
                 "<a href=\"../../../../deprecated-list.html\">Deprecated</a>",
                 "<a href=\"../../../../index-all.html\">Index</a>",
@@ -124,7 +124,7 @@
                 "SubSubReadme.html at third level of doc-file directory.",
                 // check bottom navbar
                 "<a href=\"../../../../acme2.mdle-summary.html\">Module</a>",
-                "<a href=\"../../../../p2/package-summary.html\">Package</a>",
+                "<a href=\"../../../package-summary.html\">Package</a>",
                 "<a href=\"../../../../overview-tree.html\">Tree</a>",
                 "<a href=\"../../../../deprecated-list.html\">Deprecated</a>",
                 "<a href=\"../../../../index-all.html\">Index</a>",
@@ -141,7 +141,7 @@
         checkExit(Exit.OK);
         checkOutput("p/doc-files/inpackage.html", true,
                 "In a named module acme.module and named package "
-                + "<a href=\"../../p/package-summary.html\"><code>p</code></a>."
+                + "<a href=\"../package-summary.html\"><code>p</code></a>."
         );
     }
 
@@ -155,7 +155,7 @@
         checkExit(Exit.OK);
         checkOutput("p/doc-files/inpackage.html", true,
                 "In a named module acme.module and named package "
-                + "<a href=\"../../p/package-summary.html\"><code>p</code></a>."
+                + "<a href=\"../package-summary.html\"><code>p</code></a>."
         );
     }
 
--- a/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -158,12 +158,12 @@
                 "<hr>\n"
                 + "<pre>@Deprecated(forRemoval=true)\n"
                 + "public enum <span class=\"typeNameLabel\">TestEnum</span>\n"
-                + "extends java.lang.Enum&lt;<a href=\"../pkg/TestEnum.html\" title=\"enum in pkg\">TestEnum</a>&gt;</pre>\n"
+                + "extends java.lang.Enum&lt;<a href=\"TestEnum.html\" title=\"enum in pkg\">TestEnum</a>&gt;</pre>\n"
                 + "<div class=\"deprecationBlock\"><span class=\"deprecatedLabel\">Deprecated, for removal: This API element is subject to removal in a future version.</span>\n"
                 + "<div class=\"deprecationComment\">enum_test1 passes.</div>\n"
                 + "</div>",
                 "<pre>@Deprecated(forRemoval=true)\n"
-                + "public static final&nbsp;<a href=\"../pkg/TestEnum.html\" title=\"enum in pkg\">TestEnum</a> FOR_REMOVAL</pre>\n"
+                + "public static final&nbsp;<a href=\"TestEnum.html\" title=\"enum in pkg\">TestEnum</a> FOR_REMOVAL</pre>\n"
                 + "<div class=\"deprecationBlock\"><span class=\"deprecatedLabel\">Deprecated, for removal: This API element is subject to removal in a future version.</span>\n"
                 + "<div class=\"deprecationComment\">enum_test3 passes.</div>\n"
                 + "</div>");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testDocPaths/TestDocPaths.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8195796
+ * @summary Add normalize and relative methods to DocPath
+ * @library /tools/lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.doclets.toolkit.util
+ * @build toolbox.TestRunner
+ * @run main TestDocPaths
+ */
+
+import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
+import toolbox.TestRunner;
+
+public class TestDocPaths extends TestRunner {
+
+    public static void main(String... args) throws Exception {
+        TestDocPaths tester = new TestDocPaths();
+        tester.runTests();
+    }
+
+    TestDocPaths() {
+        super(System.err);
+    }
+
+    @Test
+    public void testNormalize() {
+        testNormalize("", "");
+        testNormalize(".", "");
+        testNormalize("a/b", "a/b");
+        testNormalize("a//b", "a/b");
+        testNormalize("./b", "b");
+        testNormalize("a/.", "a");
+        testNormalize("a/./b", "a/b");
+        testNormalize("../b", "../b");
+        testNormalize("a/..", "");
+        testNormalize("a/../b", "b");
+        testNormalize("a/../../b", "../b");
+        testNormalize("a/./../b", "b");
+        testNormalize("./../b", "../b");
+        testNormalize("a/./../b", "b");
+    }
+
+    private void testNormalize(String p, String expect) {
+        out.println("test " + p);
+        String found = DocPath.create(p).normalize().getPath();
+        out.println("  result: " + found);
+        if (!expect.equals(found)) {
+            error("Mismatch:\n"
+                + "  expect: " + expect);
+        }
+        out.println();
+    }
+
+    @Test
+    public void testRelativize() {
+        testRelativize("a/b/c/file.html", "file.html", "");
+        testRelativize("a/b/c/file.html", "file2.html", "file2.html");
+        testRelativize("a/b/c/file.html", "../../../a/b/file.html", "../file.html");
+        testRelativize("a/b/c/file.html", "../../../a/b/c/file.html", "");
+        testRelativize("a/b/c/file.html", "../../../a/b/c2/file.html", "../c2/file.html");
+        testRelativize("a/b/c/file.html", "../../../a/b/c/d/file.html", "d/file.html");
+    }
+
+    private void testRelativize(String file, String href, String expect) {
+        out.println("test " + file + " " + href);
+        String found = DocPath.create(file)
+                .relativize(DocPath.create(href))
+                .getPath();
+        out.println("  result: " + found);
+        if (!expect.equals(found)) {
+            error("Mismatch:\n"
+                + "  expect: " + expect);
+        }
+        out.println();
+    }
+}
--- a/test/langtools/jdk/javadoc/doclet/testHelpOption/TestHelpOption.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHelpOption/TestHelpOption.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 /*
  * @test
  * @bug      4934778 4777599 6553182 8146427 8146475 8175055 8185371
- * @summary  Make sure that -help, -helpfile and -nohelp options work correctly.
+ * @summary  Make sure that --help, -helpfile and -nohelp options work correctly.
  * @author   jamieh
  * @library ../lib
  * @modules jdk.javadoc/jdk.javadoc.internal.tool
@@ -66,7 +66,7 @@
     void testWithOption() {
         javadoc("-d", "out1",
                 "-sourcepath", testSrc,
-                "-help",
+                "--help",
                 testSrc("Sample.java"));
         checkExit(Exit.OK);
 
--- a/test/langtools/jdk/javadoc/doclet/testHiddenTag/TestHiddenTag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHiddenTag/TestHiddenTag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -54,8 +54,8 @@
                 "<a name=\"visibleField\">",
                 "<a name=\"visibleMethod--\">",
                 "<dt>Direct Known Subclasses:</dt>\n" +
-                "<dd><code><a href=\"../pkg1/A.VisibleInner.html\" title=\"class in pkg1\">" +
-                "A.VisibleInner</a></code>, <code><a href=\"../pkg1/A.VisibleInnerExtendsInvisibleInner.html\" " +
+                "<dd><code><a href=\"A.VisibleInner.html\" title=\"class in pkg1\">" +
+                "A.VisibleInner</a></code>, <code><a href=\"A.VisibleInnerExtendsInvisibleInner.html\" " +
                 "title=\"class in pkg1\">A.VisibleInnerExtendsInvisibleInner</a></code></dd>");
 
         checkOutput("pkg1/A.html", false,
@@ -63,12 +63,12 @@
                 "<a name=\"inVisibleMethod--\">");
 
         checkOutput("pkg1/A.VisibleInner.html", true,
-                "<code><a href=\"../pkg1/A.html#visibleField\">visibleField</a></code>",
-                "<code><a href=\"../pkg1/A.html#visibleMethod--\">visibleMethod</a></code>",
+                "<code><a href=\"A.html#visibleField\">visibleField</a></code>",
+                "<code><a href=\"A.html#visibleMethod--\">visibleMethod</a></code>",
                 "<h3>Nested classes/interfaces inherited from class&nbsp;pkg1." +
-                "<a href=\"../pkg1/A.html\" title=\"class in pkg1\">A</a></h3>\n" +
-                "<code><a href=\"../pkg1/A.VisibleInner.html\" title=\"class in pkg1\">" +
-                "A.VisibleInner</a>, <a href=\"../pkg1/A.VisibleInnerExtendsInvisibleInner.html\" " +
+                "<a href=\"A.html\" title=\"class in pkg1\">A</a></h3>\n" +
+                "<code><a href=\"A.VisibleInner.html\" title=\"class in pkg1\">" +
+                "A.VisibleInner</a>, <a href=\"A.VisibleInnerExtendsInvisibleInner.html\" " +
                 "title=\"class in pkg1\">A.VisibleInnerExtendsInvisibleInner</a></code></li>\n" +
                 "</ul>");
 
@@ -80,9 +80,9 @@
         checkOutput("pkg1/A.VisibleInnerExtendsInvisibleInner.html", true,
                 "<pre>public static class <span class=\"typeNameLabel\">" +
                 "A.VisibleInnerExtendsInvisibleInner</span>\n" +
-                "extends <a href=\"../pkg1/A.html\" title=\"class in pkg1\">A</a></pre>",
-                "<code><a href=\"../pkg1/A.html#visibleField\">visibleField</a></code></li>",
-                "<code><a href=\"../pkg1/A.html#visibleMethod--\">visibleMethod</a></code>");
+                "extends <a href=\"A.html\" title=\"class in pkg1\">A</a></pre>",
+                "<code><a href=\"A.html#visibleField\">visibleField</a></code></li>",
+                "<code><a href=\"A.html#visibleMethod--\">visibleMethod</a></code>");
 
         checkOutput("pkg1/A.VisibleInnerExtendsInvisibleInner.html", false,
                 "invisibleField",
--- a/test/langtools/jdk/javadoc/doclet/testHref/TestHref.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHref/TestHref.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,7 @@
                 //External link.
                 "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait-long-int-\"",
                 //Member summary table link.
-                "href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\"",
+                "href=\"#method-int-int-java.util.ArrayList-\"",
                 //Anchor test.
                 "<a name=\"method-int-int-java.util.ArrayList-\">\n"
                 + "<!--   -->\n"
@@ -64,10 +64,10 @@
 
         checkOutput("pkg/C2.html", true,
                 //{@link} test.
-                "Link: <a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">",
+                "Link: <a href=\"C1.html#method-int-int-java.util.ArrayList-\">",
                 //@see test.
                 "See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
+                + "<dd><a href=\"C1.html#method-int-int-java.util.ArrayList-\">"
         );
 
         checkOutput("pkg/C4.html", true,
--- a/test/langtools/jdk/javadoc/doclet/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -157,7 +157,7 @@
                 + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
                 + "<dd>JDK1.0</dd>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>"
+                + "<dd><a href=\"C2.html\" title=\"class in pkg1\"><code>"
                 + "C2</code></a>, \n"
                 + "<a href=\"../serialized-form.html#pkg1.C1\">"
                 + "Serialized Form</a></dd>\n"
@@ -166,7 +166,7 @@
                 + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
                 + "<dd>1.4</dd>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
+                + "<dd><a href=\"#setUndecorated-boolean-\">"
                 + "<code>setUndecorated(boolean)</code></a></dd>\n"
                 + "</dl>",
                 "<dl>\n"
@@ -193,7 +193,7 @@
                 + "<dd>1.4</dd>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
                 + "<dd>"
-                + "<a href=\"../pkg1/C1.html#readObject--\"><code>readObject()"
+                + "<a href=\"#readObject--\"><code>readObject()"
                 + "</code></a></dd>\n"
                 + "</dl>",
                 "<dl>\n"
@@ -201,7 +201,7 @@
                 + "<dd><code>java.io.IOException</code></dd>\n"
                 + "<dt><span class=\"seeLabel\">See Also:"
                 + "</span></dt>\n"
-                + "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
+                + "<dd><a href=\"#setUndecorated-boolean-\">"
                 + "<code>setUndecorated(boolean)</code></a></dd>\n"
                 + "</dl>");
 
@@ -277,7 +277,7 @@
                 "<dd>JDK1.0</dd>\n" +
                 "<dt><span class=\"seeLabel\">See Also:" +
                 "</span></dt>\n" +
-                "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
+                "<dd><a href=\"C2.html\" title=\"class in pkg1\">" +
                 "<code>C2</code></a>, \n" +
                 "<a href=\"../serialized-form.html#pkg1.C1\">" +
                 "Serialized Form</a></dd>\n" +
@@ -310,7 +310,7 @@
                 + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
                 + "<dd>1.4</dd>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg1/C1.html#readObject--\">"
+                + "<dd><a href=\"#readObject--\">"
                 + "<code>readObject()</code></a></dd>\n"
                 + "</dl>",
                 "<dl>\n"
@@ -319,7 +319,7 @@
                 + "<dd><code>java.io.IOException</code></dd>\n"
                 + "<dt>"
                 + "<span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
+                + "<dd><a href=\"#setUndecorated-boolean-\">"
                 + "<code>setUndecorated(boolean)</code></a></dd>\n"
                 + "</dl>");
 
@@ -381,7 +381,7 @@
 
         checkOutput("pkg1/C1.ModalExclusionType.html", expectFound,
                 "<pre>public " +
-                "static final&nbsp;<a href=\"../pkg1/C1.ModalExclusionType.html\" " +
+                "static final&nbsp;<a href=\"C1.ModalExclusionType.html\" " +
                 "title=\"enum in pkg1\">C1.ModalExclusionType</a> " +
                 "APPLICATION_EXCLUDE</pre>\n" +
                 "</li>");
--- a/test/langtools/jdk/javadoc/doclet/testHtmlTableTags/TestHtmlTableTags.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlTableTags/TestHtmlTableTags.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -192,48 +192,48 @@
 
         // Class use documentation
         checkOutput("pkg1/class-use/I1.html", true,
-                "<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" "
+                "<caption><span>Packages that use <a href=\"../I1.html\" "
                 + "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>");
 
         checkOutput("pkg1/class-use/C1.html", true,
                 "<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">"
-                + "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" "
+                + "pkg2</a> declared as <a href=\"../C1.html\" "
                 + "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>",
                 "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">"
-                + "pkg2</a> that return <a href=\"../../pkg1/C1.html\" "
+                + "pkg2</a> that return <a href=\"../C1.html\" "
                 + "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>");
 
         checkOutput("pkg2/class-use/C2.html", true,
                 "<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">"
-                + "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" "
+                + "pkg1</a> declared as <a href=\"../C2.html\" "
                 + "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
                 "<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">"
-                + "pkg1</a> that return <a href=\"../../pkg2/C2.html\" "
+                + "pkg1</a> that return <a href=\"../C2.html\" "
                 + "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>");
 
         checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
-                "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">"
-                + "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" "
+                "<caption><span>Methods in <a href=\"../package-summary.html\">"
+                + "pkg2</a> that return <a href=\"../C2.ModalExclusionType.html\" "
                 + "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>"
                 + "<span class=\"tabEnd\">&nbsp;</span></caption>");
 
         // Package use documentation
         checkOutput("pkg1/package-use.html", true,
-                "<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">"
+                "<caption><span>Packages that use <a href=\"package-summary.html\">"
                 + "pkg1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">"
-                + "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>"
+                "<caption><span>Classes in <a href=\"package-summary.html\">"
+                + "pkg1</a> used by <a href=\"package-summary.html\">pkg1</a>"
                 + "</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 
         checkOutput("pkg2/package-use.html", true,
-                "<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">"
+                "<caption><span>Packages that use <a href=\"package-summary.html\">"
                 + "pkg2</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">"
+                "<caption><span>Classes in <a href=\"package-summary.html\">"
                 + "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>"
                 + "</span><span class=\"tabEnd\">&nbsp;</span></caption>");
 
--- a/test/langtools/jdk/javadoc/doclet/testHtmlTag/TestHtmlTag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlTag/TestHtmlTag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -119,11 +119,11 @@
                 + "\n"
                 + " <p>\n"
                 + " A new instance of the <code>DatatypeFactory</code> is created through the\n"
-                + " <a href=\"../pkg3/A.DatatypeFactory.html#newInstance--\"><code>newInstance()</code></a> method that uses the following implementation\n"
+                + " <a href=\"#newInstance--\"><code>newInstance()</code></a> method that uses the following implementation\n"
                 + " resolution mechanisms to determine an implementation:</p>\n"
                 + " <ol>\n"
                 + " <li>\n"
-                + " If the system property specified by <a href=\"../pkg3/A.DatatypeFactory.html#DATATYPEFACTORY_PROPERTY\"><code>DATATYPEFACTORY_PROPERTY</code></a>,\n"
+                + " If the system property specified by <a href=\"#DATATYPEFACTORY_PROPERTY\"><code>DATATYPEFACTORY_PROPERTY</code></a>,\n"
                 + " \"<code>javax.xml.datatype.DatatypeFactory</code>\", exists, a class with\n"
                 + " the name of the property value is instantiated. Any Exception thrown\n"
                 + " during the instantiation process is wrapped as a\n"
@@ -148,7 +148,7 @@
                 + " </li>\n"
                 + " <li>\n"
                 + " The final mechanism is to attempt to instantiate the <code>Class</code>\n"
-                + " specified by <a href=\"../pkg3/A.DatatypeFactory.html#DATATYPEFACTORY_IMPLEMENTATION_CLASS\">"
+                + " specified by <a href=\"#DATATYPEFACTORY_IMPLEMENTATION_CLASS\">"
                 + "<code>DATATYPEFACTORY_IMPLEMENTATION_CLASS</code></a>. Any Exception\n"
                 + " thrown during the instantiation process is wrapped as a\n"
                 + " <code>IllegalStateException</code>.\n"
--- a/test/langtools/jdk/javadoc/doclet/testHtmlVersion/TestHtmlVersion.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlVersion/TestHtmlVersion.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -133,7 +133,7 @@
                 "<!DOCTYPE HTML>",
                 "<meta name=\"dc.created\"",
                 "<main role=\"main\">\n"
-                + "<h1 class=\"bar\"><a href=\"../pkg/package-summary.html\" target=\"classFrame\">pkg</a></h1>",
+                + "<h1 class=\"bar\"><a href=\"package-summary.html\" target=\"classFrame\">pkg</a></h1>",
                 "<section role=\"region\">\n"
                 + "<h2 title=\"Interfaces\">Interfaces</h2>",
                 "<section role=\"region\">\n"
@@ -598,7 +598,7 @@
                 "<section role=\"region\"><a id=\"pkg\">\n"
                 + "<!--   -->\n"
                 + "</a>\n"
-                + "<h3>Uses of <a href=\"../../pkg1/RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
+                + "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
                 + "<table class=\"useSummary\">",
                 "<footer role=\"contentinfo\">\n"
                 + "<nav role=\"navigation\">\n"
@@ -667,7 +667,7 @@
                 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
                 "<meta name=\"date\"",
                 "<body>\n"
-                + "<h1 class=\"bar\"><a href=\"../pkg/package-summary.html\" target=\"classFrame\">pkg</a></h1>");
+                + "<h1 class=\"bar\"><a href=\"package-summary.html\" target=\"classFrame\">pkg</a></h1>");
 
         // Negated test for package-summary page
         checkOutput("pkg/package-summary.html", false,
@@ -1040,7 +1040,7 @@
                 "<li class=\"blockList\"><a name=\"pkg\">\n"
                 + "<!--   -->\n"
                 + "</a>\n"
-                + "<h3>Uses of <a href=\"../../pkg1/RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
+                + "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
                 + "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">");
 
         // Negated test for main index page
@@ -1100,7 +1100,7 @@
                 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
                 "<meta name=\"date\"",
                 "<body>\n"
-                + "<h1 class=\"bar\"><a href=\"../pkg/package-summary.html\" target=\"classFrame\">pkg</a></h1>");
+                + "<h1 class=\"bar\"><a href=\"package-summary.html\" target=\"classFrame\">pkg</a></h1>");
 
         // Test for package-summary page
         checkOutput("pkg/package-summary.html", true,
@@ -1486,7 +1486,7 @@
                 "<li class=\"blockList\"><a name=\"pkg\">\n"
                 + "<!--   -->\n"
                 + "</a>\n"
-                + "<h3>Uses of <a href=\"../../pkg1/RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
+                + "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
                 + "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">");
 
         // Test for main index page
@@ -1551,7 +1551,7 @@
                 "<!DOCTYPE HTML>",
                 "<meta name=\"dc.created\"",
                 "<main role=\"main\">\n"
-                + "<h1 class=\"bar\"><a href=\"../pkg/package-summary.html\" target=\"classFrame\">pkg</a></h1>",
+                + "<h1 class=\"bar\"><a href=\"package-summary.html\" target=\"classFrame\">pkg</a></h1>",
                 "<section role=\"region\">\n"
                 + "<h2 title=\"Interfaces\">Interfaces</h2>",
                 "<section role=\"region\">\n"
@@ -1988,7 +1988,7 @@
                 "<section role=\"region\"><a id=\"pkg\">\n"
                 + "<!--   -->\n"
                 + "</a>\n"
-                + "<h3>Uses of <a href=\"../../pkg1/RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
+                + "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
                 + "\n"
                 + "<table class=\"useSummary\">",
                 "<footer role=\"contentinfo\">\n"
--- a/test/langtools/jdk/javadoc/doclet/testInlineLinkLabel/TestInlineLinkLabel.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testInlineLinkLabel/TestInlineLinkLabel.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,8 +48,8 @@
 
         checkOutput("pkg/C1.html", true,
                 //Search for the label to the package link.
-                "<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>",
+                "<a href=\"package-summary.html\"><code>Here is a link to a package</code></a>",
                 //Search for the label to the class link
-                "<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>");
+                "<a href=\"C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,8 +70,8 @@
                 // Make sure known implementing class list is correct and omits type parameters.
                 "<dl>\n"
                 + "<dt>All Known Implementing Classes:</dt>\n"
-                + "<dd><code><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child"
-                + "</a></code>, <code><a href=\"../pkg/Parent.html\" title=\"class in pkg\">Parent"
+                + "<dd><code><a href=\"Child.html\" title=\"class in pkg\">Child"
+                + "</a></code>, <code><a href=\"Parent.html\" title=\"class in pkg\">Parent"
                 + "</a></code></dd>\n"
                 + "</dl>");
 
@@ -79,7 +79,7 @@
                 // Make sure "All Implemented Interfaces": has substituted type parameters
                 "<dl>\n"
                 + "<dt>All Implemented Interfaces:</dt>\n"
-                + "<dd><code><a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"
+                + "<dd><code><a href=\"Interface.html\" title=\"interface in pkg\">"
                 + "Interface</a>&lt;CE&gt;</code></dd>\n"
                 + "</dl>",
                 //Make sure Class Tree has substituted type parameters.
@@ -87,7 +87,7 @@
                 + "<li>java.lang.Object</li>\n"
                 + "<li>\n"
                 + "<ul class=\"inheritance\">\n"
-                + "<li><a href=\"../pkg/Parent.html\" title=\"class in pkg\">"
+                + "<li><a href=\"Parent.html\" title=\"class in pkg\">"
                 + "pkg.Parent</a>&lt;CE&gt;</li>\n"
                 + "<li>\n"
                 + "<ul class=\"inheritance\">\n"
@@ -99,23 +99,23 @@
                 + "</ul>",
                 //Make sure "Specified By" has substituted type parameters.
                 "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg/Interface.html#method--\">method</a>"
+                + "<dd><code><a href=\"Interface.html#method--\">method</a>"
                 + "</code>&nbsp;in interface&nbsp;<code>"
-                + "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"
-                + "Interface</a>&lt;<a href=\"../pkg/Child.html\" title=\"type parameter in Child\">"
+                + "<a href=\"Interface.html\" title=\"interface in pkg\">"
+                + "Interface</a>&lt;<a href=\"Child.html\" title=\"type parameter in Child\">"
                 + "CE</a>&gt;</code></dd>",
                 //Make sure "Overrides" has substituted type parameters.
                 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg/Parent.html#method--\">method</a>"
-                + "</code>&nbsp;in class&nbsp;<code><a href=\"../pkg/Parent.html\" "
-                + "title=\"class in pkg\">Parent</a>&lt;<a href=\"../pkg/Child.html\" "
+                + "<dd><code><a href=\"Parent.html#method--\">method</a>"
+                + "</code>&nbsp;in class&nbsp;<code><a href=\"Parent.html\" "
+                + "title=\"class in pkg\">Parent</a>&lt;<a href=\"Child.html\" "
                 + "title=\"type parameter in Child\">CE</a>&gt;</code></dd>");
 
         checkOutput("pkg/Parent.html", true,
                 //Make sure "Direct Know Subclasses" omits type parameters
                 "<dl>\n"
                 + "<dt>Direct Known Subclasses:</dt>\n"
-                + "<dd><code><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child"
+                + "<dd><code><a href=\"Child.html\" title=\"class in pkg\">Child"
                 + "</a></code></dd>\n"
                 + "</dl>");
 
@@ -135,7 +135,7 @@
 
                 "<td class=\"colFirst\"><code>static void</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/ClassWithStaticMembers.html#m--\">m</a></span>()</code></th>\n"
+                + "<a href=\"#m--\">m</a></span>()</code></th>\n"
                 + "<td class=\"colLast\">\n"
                 + "<div class=\"block\">A hider method</div>\n"
                 + "</td>\n",
@@ -144,7 +144,7 @@
                 + "<pre>public static&nbsp;void&nbsp;staticMethod()</pre>\n"
                 + "<div class=\"block\"><span class=\"descfrmTypeLabel\">"
                 + "Description copied from interface:&nbsp;<code>"
-                + "<a href=\"../pkg/InterfaceWithStaticMembers.html#staticMethod--\">"
+                + "<a href=\"InterfaceWithStaticMembers.html#staticMethod--\">"
                 + "InterfaceWithStaticMembers</a></code></span></div>\n"
                 + "<div class=\"block\">A static method</div>\n");
 
@@ -165,10 +165,10 @@
         checkOutput("pkg1/Child.html", true,
             // Ensure the correct Overrides in the inheritance hierarchy is reported
             "<span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
-            "<dd><code><a href=\"../pkg1/GrandParent.html#method1--\">method1</a></code>" +
+            "<dd><code><a href=\"GrandParent.html#method1--\">method1</a></code>" +
             "&nbsp;in class&nbsp;" +
-            "<code><a href=\"../pkg1/GrandParent.html\" title=\"class in pkg1\">GrandParent</a>" +
-            "&lt;<a href=\"../pkg1/Child.html\" title=\"type parameter in Child\">CE</a>&gt;</code>");
+            "<code><a href=\"GrandParent.html\" title=\"class in pkg1\">GrandParent</a>" +
+            "&lt;<a href=\"Child.html\" title=\"type parameter in Child\">CE</a>&gt;</code>");
     }
 
     @Test
@@ -182,21 +182,21 @@
         checkOutput("pkg2/Spliterator.OfDouble.html", true,
             // Ensure the correct type parameters are displayed correctly
             "<h3>Nested classes/interfaces inherited from interface&nbsp;pkg2."
-            + "<a href=\"../pkg2/Spliterator.html\" title=\"interface in pkg2\">Spliterator</a></h3>\n"
-            + "<code><a href=\"../pkg2/Spliterator.OfDouble.html\" title=\"interface in pkg2\">"
-            + "Spliterator.OfDouble</a>, <a href=\"../pkg2/Spliterator.OfInt.html\" "
+            + "<a href=\"Spliterator.html\" title=\"interface in pkg2\">Spliterator</a></h3>\n"
+            + "<code><a href=\"Spliterator.OfDouble.html\" title=\"interface in pkg2\">"
+            + "Spliterator.OfDouble</a>, <a href=\"Spliterator.OfInt.html\" "
             + "title=\"interface in pkg2\">Spliterator.OfInt</a>&lt;"
-            + "<a href=\"../pkg2/Spliterator.OfInt.html\" title=\"type parameter in Spliterator.OfInt\">"
-            + "Integer</a>&gt;, <a href=\"../pkg2/Spliterator.OfPrimitive.html\" title=\"interface in pkg2\">"
-            + "Spliterator.OfPrimitive</a>&lt;<a href=\"../pkg2/Spliterator.OfPrimitive.html\" "
-            + "title=\"type parameter in Spliterator.OfPrimitive\">T</a>,<a href=\"../pkg2/Spliterator.OfPrimitive.html\" "
+            + "<a href=\"Spliterator.OfInt.html\" title=\"type parameter in Spliterator.OfInt\">"
+            + "Integer</a>&gt;, <a href=\"Spliterator.OfPrimitive.html\" title=\"interface in pkg2\">"
+            + "Spliterator.OfPrimitive</a>&lt;<a href=\"Spliterator.OfPrimitive.html\" "
+            + "title=\"type parameter in Spliterator.OfPrimitive\">T</a>,<a href=\"Spliterator.OfPrimitive.html\" "
             + "title=\"type parameter in Spliterator.OfPrimitive\">T_CONS</a>,"
-            + "<a href=\"../pkg2/Spliterator.OfPrimitive.html\" title=\"type parameter in Spliterator.OfPrimitive\">"
-            + "T_SPLITR</a> extends <a href=\"../pkg2/Spliterator.OfPrimitive.html\" title=\"interface in pkg2\">"
-            + "Spliterator.OfPrimitive</a>&lt;<a href=\"../pkg2/Spliterator.OfPrimitive.html\" "
+            + "<a href=\"Spliterator.OfPrimitive.html\" title=\"type parameter in Spliterator.OfPrimitive\">"
+            + "T_SPLITR</a> extends <a href=\"Spliterator.OfPrimitive.html\" title=\"interface in pkg2\">"
+            + "Spliterator.OfPrimitive</a>&lt;<a href=\"Spliterator.OfPrimitive.html\" "
             + "title=\"type parameter in Spliterator.OfPrimitive\">T</a>,"
-            + "<a href=\"../pkg2/Spliterator.OfPrimitive.html\" title=\"type parameter in Spliterator.OfPrimitive\">"
-            + "T_CONS</a>,<a href=\"../pkg2/Spliterator.OfPrimitive.html\" title=\"type parameter in Spliterator.OfPrimitive\">"
+            + "<a href=\"Spliterator.OfPrimitive.html\" title=\"type parameter in Spliterator.OfPrimitive\">"
+            + "T_CONS</a>,<a href=\"Spliterator.OfPrimitive.html\" title=\"type parameter in Spliterator.OfPrimitive\">"
             + "T_SPLITR</a>&gt;&gt;</code>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,8 +51,8 @@
 
         checkOutput("pkg1/C.html", true,
                 "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg1/C.html#getRate--\"><code>getRate()</code></a>, \n"
-                + "<a href=\"../pkg1/C.html#setRate-double-\">"
+                + "<dd><a href=\"#getRate--\"><code>getRate()</code></a>, \n"
+                + "<a href=\"#setRate-double-\">"
                 + "<code>setRate(double)</code></a></dd>",
                 "<pre>public final&nbsp;void&nbsp;setRate&#8203;(double&nbsp;value)</pre>\n"
                 + "<div class=\"block\">Sets the value of the property rate.</div>\n"
@@ -62,10 +62,10 @@
                 + "<div class=\"block\">Gets the value of the property rate.</div>\n"
                 + "<dl>\n"
                 + "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>",
-                "<td class=\"colFirst\"><code><a href=\"../pkg1/C.DoubleProperty.html\" "
+                "<td class=\"colFirst\"><code><a href=\"C.DoubleProperty.html\" "
                 + "title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg1/C.html#rateProperty\">rate</a></span></code></th>\n"
+                + "<a href=\"#rateProperty\">rate</a></span></code></th>\n"
                 + "<td class=\"colLast\">\n"
                 + "<div class=\"block\">Defines the direction/speed at which the "
                 + "<code>Timeline</code> is expected to\n"
@@ -77,14 +77,14 @@
                 "<p>Gets the value of the property <code>Property</code>",
                 "<span class=\"simpleTagLabel\">Property description:</span>",
                 "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg1/C.html#setTestMethodProperty--\">"
+                + "<a href=\"#setTestMethodProperty--\">"
                 + "setTestMethodProperty</a></span>()</code></th>",
                 "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg1/C.html#pausedProperty\">paused</a></span></code></th>\n"
+                + "<a href=\"#pausedProperty\">paused</a></span></code></th>\n"
                 + "<td class=\"colLast\">\n"
                 + "<div class=\"block\">Defines if paused.</div>",
                 "<h4>paused</h4>\n"
-                + "<pre>public final&nbsp;<a href=\"../pkg1/C.BooleanProperty.html\" "
+                + "<pre>public final&nbsp;<a href=\"C.BooleanProperty.html\" "
                 + "title=\"class in pkg1\">C.BooleanProperty</a> pausedProperty</pre>\n"
                 + "<div class=\"block\">Defines if paused. The second line.</div>",
                 "<h4>isPaused</h4>\n"
@@ -107,7 +107,7 @@
                 + "<dt><span class=\"simpleTagLabel\">Default value:</span></dt>\n"
                 + "<dd>false</dd>",
                 "<h4>rate</h4>\n"
-                + "<pre>public final&nbsp;<a href=\"../pkg1/C.DoubleProperty.html\" "
+                + "<pre>public final&nbsp;<a href=\"C.DoubleProperty.html\" "
                 + "title=\"class in pkg1\">C.DoubleProperty</a> rateProperty</pre>\n"
                 + "<div class=\"block\">Defines the direction/speed at which the "
                 + "<code>Timeline</code> is expected to\n"
@@ -138,9 +138,9 @@
                 + "<table class=\"memberSummary\" summary=\"Property Summary table, listing properties, and an explanation\">\n"
                 + "<caption><span>Properties</span><span class=\"tabEnd\">&nbsp;</span></caption>",
                 "<tr class=\"altColor\">\n"
-                + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
+                + "<td class=\"colFirst\"><code><a href=\"C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
                 "<tr class=\"rowColor\">\n"
-                + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.DoubleProperty.html\" title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n");
+                + "<td class=\"colFirst\"><code><a href=\"C.DoubleProperty.html\" title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n");
 
         checkOutput("pkg1/C.html", false,
                 "A()",
@@ -152,9 +152,9 @@
                 + "<a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span>"
                 + "</caption>",
                 "<tr id=\"i0\" class=\"altColor\">\n"
-                + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
+                + "<td class=\"colFirst\"><code><a href=\"C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
                 "<tr id=\"i1\" class=\"rowColor\">\n"
-                + "<td class=\"colFirst\"><code><a href=\"../pkg1/C.DoubleProperty.html\" title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n");
+                + "<td class=\"colFirst\"><code><a href=\"C.DoubleProperty.html\" title=\"class in pkg1\">C.DoubleProperty</a></code></td>\n");
 
         checkOutput("index-all.html", true,
                 "<div class=\"block\">Gets the value of the property paused.</div>",
@@ -162,9 +162,9 @@
 
         checkOutput("pkg1/D.html", true,
                 "<h3>Properties inherited from class&nbsp;pkg1."
-                    + "<a href=\"../pkg1/C.html\" title=\"class in pkg1\">C</a></h3>\n"
-                    + "<code><a href=\"../pkg1/C.html#pausedProperty\">"
-                    + "paused</a>, <a href=\"../pkg1/C.html#rateProperty\">rate</a></code></li>");
+                    + "<a href=\"C.html\" title=\"class in pkg1\">C</a></h3>\n"
+                    + "<code><a href=\"C.html#pausedProperty\">"
+                    + "paused</a>, <a href=\"C.html#rateProperty\">rate</a></code></li>");
 
         checkOutput("pkg1/D.html", false, "shouldNotAppear");
     }
@@ -246,27 +246,27 @@
                 + "<tr id=\"i0\" class=\"altColor\">\n"
                 + "<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;java.lang.Object</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg2/Test.html#alphaProperty-java.util.List-\">alphaProperty</a>"
+                + "<a href=\"#alphaProperty-java.util.List-\">alphaProperty</a>"
                 + "</span>&#8203;(java.util.List&lt;T&gt;&nbsp;foo)</code></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr id=\"i1\" class=\"rowColor\">\n"
                 + "<td class=\"colFirst\"><code>java.lang.Object</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg2/Test.html#betaProperty--\">betaProperty</a></span>()</code></th>\n"
+                + "<a href=\"#betaProperty--\">betaProperty</a></span>()</code></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr id=\"i2\" class=\"altColor\">\n"
                 + "<td class=\"colFirst\"><code>java.util.List&lt;java.util.Set&lt;? super java.lang.Object&gt;&gt;"
                 + "</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg2/Test.html#deltaProperty--\">deltaProperty</a></span>()</code></th>\n"
+                + "<a href=\"#deltaProperty--\">deltaProperty</a></span>()</code></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr id=\"i3\" class=\"rowColor\">\n"
                 + "<td class=\"colFirst\"><code>java.util.List&lt;java.lang.String&gt;</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg2/Test.html#gammaProperty--\">gammaProperty</a></span>()</code></th>\n"
+                + "<a href=\"#gammaProperty--\">gammaProperty</a></span>()</code></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>"
         );
     }
--- a/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -86,7 +86,7 @@
                 + " title=\"class or interface in java.lang\" class=\"externalLink\"><code><tt>getSystemClassLoader()</tt>"
                 + "</code></a> as the parent class loader.</div>",
                 "<div class=\"block\">is equivalent to invoking <code>"
-                + "<a href=\"../pkg/B.html#createTempFile-java.lang.String-java.lang.String-java.io.File-\">"
+                + "<a href=\"#createTempFile-java.lang.String-java.lang.String-java.io.File-\">"
                 + "<code>createTempFile(prefix,&nbsp;suffix,&nbsp;null)</code></a></code>.</div>",
                 "<a href=\"" + url + "java/lang/String.html?is-external=true\" "
                 + "title=\"class or interface in java.lang\" class=\"externalLink\">Link-Plain to String Class</a>",
--- a/test/langtools/jdk/javadoc/doclet/testLinkTaglet/TestLinkTaglet.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testLinkTaglet/TestLinkTaglet.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,23 +49,23 @@
         checkExit(Exit.OK);
 
         checkOutput("pkg/C.html", true,
-                "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
-                + " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
-                + " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
-                + " Qualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n"
-                + " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n"
-                + " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(InnerC, InnerC2)</code></a>.<br/>\n"
-                + " Package Link: <a href=\"../pkg/package-summary.html\"><code>pkg</code></a>.<br/>");
+                "Qualified Link: <a href=\"C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
+                + " Unqualified Link1: <a href=\"C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
+                + " Unqualified Link2: <a href=\"C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
+                + " Qualified Link: <a href=\"#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n"
+                + " Unqualified Link: <a href=\"#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n"
+                + " Unqualified Link: <a href=\"#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(InnerC, InnerC2)</code></a>.<br/>\n"
+                + " Package Link: <a href=\"package-summary.html\"><code>pkg</code></a>.<br/>");
 
         checkOutput("pkg/C.InnerC.html", true,
-                "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n"
-                + " Link to member in inner class: <a href=\"../pkg/C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n"
-                + " Link to another inner class: <a href=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>");
+                "Link to member in outer class: <a href=\"C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n"
+                + " Link to member in inner class: <a href=\"C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n"
+                + " Link to another inner class: <a href=\"C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>");
 
         checkOutput("pkg/C.InnerC2.html", true,
                 "<dl>\n"
                 + "<dt>Enclosing class:</dt>\n"
-                + "<dd><a href=\"../pkg/C.html\" title=\"class in pkg\">C</a></dd>\n"
+                + "<dd><a href=\"C.html\" title=\"class in pkg\">C</a></dd>\n"
                 + "</dl>");
 
         checkOutput(Output.OUT, false,
--- a/test/langtools/jdk/javadoc/doclet/testMemberInheritance/TestMemberInheritance.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testMemberInheritance/TestMemberInheritance.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,56 +50,56 @@
 
         checkOutput("pkg/SubClass.html", true,
                 // Public field should be inherited
-                "<a href=\"../pkg/BaseClass.html#pubField\">",
+                "<a href=\"BaseClass.html#pubField\">",
                 // Public method should be inherited
-                "<a href=\"../pkg/BaseClass.html#pubMethod--\">",
+                "<a href=\"BaseClass.html#pubMethod--\">",
                 // Public inner class should be inherited.
-                "<a href=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">",
+                "<a href=\"BaseClass.pubInnerClass.html\" title=\"class in pkg\">",
                 // Protected field should be inherited
-                "<a href=\"../pkg/BaseClass.html#proField\">",
+                "<a href=\"BaseClass.html#proField\">",
                 // Protected method should be inherited
-                "<a href=\"../pkg/BaseClass.html#proMethod--\">",
+                "<a href=\"BaseClass.html#proMethod--\">",
                 // Protected inner class should be inherited.
-                "<a href=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">",
+                "<a href=\"BaseClass.proInnerClass.html\" title=\"class in pkg\">",
                 // New labels as of 1.5.0
                 "Nested classes/interfaces inherited from class&nbsp;pkg."
-                + "<a href=\"../pkg/BaseClass.html\" title=\"class in pkg\">BaseClass</a>",
+                + "<a href=\"BaseClass.html\" title=\"class in pkg\">BaseClass</a>",
                 "Nested classes/interfaces inherited from interface&nbsp;pkg."
-                + "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>");
+                + "<a href=\"BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>");
 
         checkOutput("pkg/BaseClass.html", true,
                 // Test overriding/implementing methods with generic parameters.
                 "<dl>\n"
                 + "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg/BaseInterface.html#getAnnotation-java.lang.Class-\">"
+                + "<dd><code><a href=\"BaseInterface.html#getAnnotation-java.lang.Class-\">"
                 + "getAnnotation</a></code>&nbsp;in interface&nbsp;<code>"
-                + "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">"
+                + "<a href=\"BaseInterface.html\" title=\"interface in pkg\">"
                 + "BaseInterface</a></code></dd>\n"
                 + "</dl>");
 
         checkOutput("diamond/Z.html", true,
                 // Test diamond inheritance member summary (6256068)
-                "<code><a href=\"../diamond/A.html#aMethod--\">aMethod</a></code>");
+                "<code><a href=\"A.html#aMethod--\">aMethod</a></code>");
 
         checkOutput("inheritDist/C.html", true,
                 // Test that doc is inherited from closed parent (6270645)
                 "<div class=\"block\">m1-B</div>");
 
         checkOutput("pkg/SubClass.html", false,
-                "<a href=\"../pkg/BaseClass.html#staticMethod--\">staticMethod</a></code>");
+                "<a href=\"BaseClass.html#staticMethod--\">staticMethod</a></code>");
 
         checkOutput("pkg1/Implementer.html", true,
                 // ensure the method makes it
                 "<td class=\"colFirst\"><code>static java.time.Period</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg1/Implementer.html#between-java.time.LocalDate-java.time.LocalDate-\">"
+                + "<a href=\"#between-java.time.LocalDate-java.time.LocalDate-\">"
                 + "between</a></span>&#8203;(java.time.LocalDate&nbsp;startDateInclusive,\n"
                 + "       java.time.LocalDate&nbsp;endDateExclusive)</code></th>");
 
         checkOutput("pkg1/Implementer.html", false,
-                "<h3>Methods inherited from interface&nbsp;pkg1.<a href=\"../pkg1/Interface.html\""
+                "<h3>Methods inherited from interface&nbsp;pkg1.<a href=\"Interface.html\""
                 + " title=\"interface in pkg1\">Interface</a></h3>\n"
-                + "<code><a href=\"../pkg1/Interface.html#between-java.time.chrono.ChronoLocalDate"
+                + "<code><a href=\"Interface.html#between-java.time.chrono.ChronoLocalDate"
                 + "-java.time.chrono.ChronoLocalDate-\">between</a></code>"
         );
     }
--- a/test/langtools/jdk/javadoc/doclet/testMemberSummary/TestMemberSummary.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testMemberSummary/TestMemberSummary.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,19 +50,19 @@
 
         checkOutput("pkg/PublicChild.html", true,
                 // Check return type in member summary.
-                "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>\n"
-                + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../pkg/PublicChild.html#returnTypeTest--\">"
+                "<code><a href=\"PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>\n"
+                + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"#returnTypeTest--\">"
                 + "returnTypeTest</a></span>()</code>",
                 // Check return type in member detail.
-                "<pre>public&nbsp;<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">"
+                "<pre>public&nbsp;<a href=\"PublicChild.html\" title=\"class in pkg\">"
                 + "PublicChild</a>&nbsp;returnTypeTest()</pre>",
                 "<th class=\"colConstructorName\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/PublicChild.html#PublicChild--\">PublicChild</a></span>()</code></th>");
+                + "<a href=\"#PublicChild--\">PublicChild</a></span>()</code></th>");
 
         checkOutput("pkg/PrivateParent.html", true,
                 "<td class=\"colFirst\"><code>private </code></td>\n"
                 + "<th class=\"colConstructorName\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/PrivateParent.html#PrivateParent-int-\">PrivateParent</a></span>&#8203;(int&nbsp;i)</code>"
+                + "<a href=\"#PrivateParent-int-\">PrivateParent</a></span>&#8203;(int&nbsp;i)</code>"
                 + "</th>");
 
         // Legacy anchor dimensions (6290760)
--- a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -854,7 +854,7 @@
                 "<div class=\"subTitle\"><span class=\"moduleLabelInType\">Module</span>&nbsp;"
                 + "<a href=\"../moduleB-summary.html\">moduleB</a></div>",
                 "<div class=\"subTitle\"><span class=\"packageLabelInType\">"
-                + "Package</span>&nbsp;<a href=\"../testpkgmdlB/package-summary.html\">testpkgmdlB</a></div>");
+                + "Package</span>&nbsp;<a href=\"package-summary.html\">testpkgmdlB</a></div>");
         checkFiles(found,
                 "moduleA-frame.html",
                 "moduleA-summary.html",
--- a/test/langtools/jdk/javadoc/doclet/testNavigation/TestNavigation.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testNavigation/TestNavigation.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,21 +49,21 @@
 
         checkOutput("pkg/A.html", true,
                 "<li>Prev&nbsp;Class</li>",
-                "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>",
+                "<a href=\"C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>",
                 "<li><a href=\"../overview-summary.html\">Overview</a></li>");
 
         checkOutput("pkg/C.html", true,
-                "<a href=\"../pkg/A.html\" title=\"annotation in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>",
-                "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>",
+                "<a href=\"A.html\" title=\"annotation in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>",
+                "<a href=\"E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>",
                 "<li><a href=\"../overview-summary.html\">Overview</a></li>");
 
         checkOutput("pkg/E.html", true,
-                "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>",
-                "<a href=\"../pkg/I.html\" title=\"interface in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>",
+                "<a href=\"C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>",
+                "<a href=\"I.html\" title=\"interface in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>",
                 "<li><a href=\"../overview-summary.html\">Overview</a></li>");
 
         checkOutput("pkg/I.html", true,
-                "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>",
+                "<a href=\"E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>",
                 "<li>Next&nbsp;Class</li>",
                 // Test for 4664607
                 "<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n"
--- a/test/langtools/jdk/javadoc/doclet/testNestedGenerics/TestNestedGenerics.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testNestedGenerics/TestNestedGenerics.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,7 +48,7 @@
 
         checkOutput("pkg/NestedGenerics.html", true,
             "<div class=\"block\">Contains <a " +
-            "href=\"../pkg/NestedGenerics.html#foo-java.util.Map-\"><code>foo" +
+            "href=\"#foo-java.util.Map-\"><code>foo" +
             "(java.util.Map&lt;A, java.util.Map&lt;A, A&gt;&gt;)</code></a></div>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,20 +67,20 @@
                 // Make sure enum signature is correct.
                 "<pre>public enum "
                 + "<span class=\"typeNameLabel\">Coin</span>\n"
-                + "extends java.lang.Enum&lt;<a href=\"../pkg/Coin.html\" "
+                + "extends java.lang.Enum&lt;<a href=\"Coin.html\" "
                 + "title=\"enum in pkg\">Coin</a>&gt;</pre>",
                 // Check for enum constant section
                 "<caption><span>Enum Constants"
                 + "</span><span class=\"tabEnd\">&nbsp;</span></caption>",
                 // Detail for enum constant
-                "<span class=\"memberNameLink\"><a href=\"../pkg/Coin.html#Dime\">Dime</a></span>",
+                "<span class=\"memberNameLink\"><a href=\"#Dime\">Dime</a></span>",
                 // Automatically insert documentation for values() and valueOf().
                 "Returns an array containing the constants of this enum type,",
                 "Returns the enum constant of this type with the specified name",
                 "for (Coin c : Coin.values())",
                 "Overloaded valueOf() method has correct documentation.",
                 "Overloaded values method  has correct documentation.",
-                "<pre>public static&nbsp;<a href=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</a>" +
+                "<pre>public static&nbsp;<a href=\"Coin.html\" title=\"enum in pkg\">Coin</a>" +
                 "&nbsp;valueOf&#8203;(java.lang.String&nbsp;name)</pre>\n" +
                 "<div class=\"block\">Returns the enum constant of this type with the specified name.\n" +
                 "The string must match <i>exactly</i> an identifier used to declare an\n" +
@@ -117,11 +117,11 @@
                 "<dl>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
                 + "<dd>"
-                + "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+                + "<a href=\"TypeParameters.html\" title=\"class in pkg\">"
                 + "<code>TypeParameters</code></a></dd>\n"
                 + "</dl>",
                 // Method that uses class type parameter.
-                "(<a href=\"../pkg/TypeParameters.html\" title=\"type "
+                "(<a href=\"TypeParameters.html\" title=\"type "
                 + "parameter in TypeParameters\">E</a>&nbsp;param)",
                 // Method type parameter section.
                 "<span class=\"paramLabel\">Type Parameters:</span></dt>\n"
@@ -133,38 +133,38 @@
                 "public&nbsp;&lt;T extends java.util.List,V&gt;&nbsp;"
                 + "java.lang.String[]&nbsp;methodThatHasTypeParameters",
                 // Method that returns TypeParameters
-                "<td class=\"colFirst\"><code><a href=\"../pkg/TypeParameters.html\" "
+                "<td class=\"colFirst\"><code><a href=\"TypeParameters.html\" "
                 + "title=\"type parameter in TypeParameters\">E</a>[]</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/TypeParameters.html#methodThatReturnsTypeParameterA-E:A-\">"
-                + "methodThatReturnsTypeParameterA</a></span>&#8203;(<a href=\"../pkg/TypeParameters.html\" "
+                + "<a href=\"#methodThatReturnsTypeParameterA-E:A-\">"
+                + "methodThatReturnsTypeParameterA</a></span>&#8203;(<a href=\"TypeParameters.html\" "
                 + "title=\"type parameter in TypeParameters\">E</a>[]&nbsp;e)</code>",
-                "<pre>public&nbsp;<a href=\"../pkg/TypeParameters.html\" "
+                "<pre>public&nbsp;<a href=\"TypeParameters.html\" "
                 + "title=\"type parameter in TypeParameters\">E</a>[]&nbsp;"
-                + "methodThatReturnsTypeParameterA&#8203;(<a href=\"../pkg/TypeParameters.html\" "
+                + "methodThatReturnsTypeParameterA&#8203;(<a href=\"TypeParameters.html\" "
                 + "title=\"type parameter in TypeParameters\">E</a>[]&nbsp;e)</pre>\n",
                 "<td class=\"colFirst\"><code>&lt;T extends java.lang.Object &amp; java.lang.Comparable&lt;? super T&gt;&gt;"
                 + "<br>T</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/TypeParameters.html#methodtThatReturnsTypeParametersB-java.util.Collection-\">"
+                + "<a href=\"#methodtThatReturnsTypeParametersB-java.util.Collection-\">"
                 + "methodtThatReturnsTypeParametersB</a></span>&#8203;(java.util.Collection&lt;? extends T&gt;&nbsp;coll)</code>",
                 "<div class=\"block\">Returns TypeParameters</div>\n",
                 // Method takes a TypeVariable
                 "<td class=\"colFirst\"><code>&lt;X extends java.lang.Throwable&gt;<br>"
-                + "<a href=\"../pkg/TypeParameters.html\" title=\"type parameter in TypeParameters\">E</a>"
+                + "<a href=\"TypeParameters.html\" title=\"type parameter in TypeParameters\">E</a>"
                 + "</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/TypeParameters.html#orElseThrow-java.util.function.Supplier-\">"
+                + "<a href=\"#orElseThrow-java.util.function.Supplier-\">"
                 + "orElseThrow</a></span>&#8203;(java.util.function.Supplier&lt;? extends X&gt;&nbsp;exceptionSupplier)</code>"
                 );
 
         checkOutput("pkg/Wildcards.html", true,
                 // Wildcard testing.
-                "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+                "<a href=\"TypeParameters.html\" title=\"class in pkg\">"
                 + "TypeParameters</a>&lt;? super java.lang.String&gt;&nbsp;a",
-                "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+                "<a href=\"TypeParameters.html\" title=\"class in pkg\">"
                 + "TypeParameters</a>&lt;? extends java.lang.StringBuffer&gt;&nbsp;b",
-                "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+                "<a href=\"TypeParameters.html\" title=\"class in pkg\">"
                 + "TypeParameters</a>&nbsp;c");
 
         checkOutput(Output.OUT, true,
@@ -179,7 +179,7 @@
                 "<pre>public class <span class=\"typeNameLabel\">TypeParameterSubClass&lt;T extends "
                 + "java.lang.String&gt;</span>\n"
                 + "extends "
-                + "<a href=\"../pkg/TypeParameterSuperClass.html\" title=\"class in pkg\">"
+                + "<a href=\"TypeParameterSuperClass.html\" title=\"class in pkg\">"
                 + "TypeParameterSuperClass</a>&lt;T&gt;</pre>");
 
         // Interface generic parameter substitution
@@ -187,21 +187,21 @@
         checkOutput("pkg/TypeParameters.html", true,
                 "<dl>\n"
                 + "<dt>All Implemented Interfaces:</dt>\n"
-                + "<dd><code><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">"
-                + "SubInterface</a>&lt;E&gt;</code>, <code><a href=\"../pkg/SuperInterface.html\" "
+                + "<dd><code><a href=\"SubInterface.html\" title=\"interface in pkg\">"
+                + "SubInterface</a>&lt;E&gt;</code>, <code><a href=\"SuperInterface.html\" "
                 + "title=\"interface in pkg\">SuperInterface</a>&lt;E&gt;</code></dd>\n"
                 + "</dl>");
 
         checkOutput("pkg/SuperInterface.html", true,
                 "<dl>\n"
                 + "<dt>All Known Subinterfaces:</dt>\n"
-                + "<dd><code><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">"
+                + "<dd><code><a href=\"SubInterface.html\" title=\"interface in pkg\">"
                 + "SubInterface</a>&lt;V&gt;</code></dd>\n"
                 + "</dl>");
         checkOutput("pkg/SubInterface.html", true,
                 "<dl>\n"
                 + "<dt>All Superinterfaces:</dt>\n"
-                + "<dd><code><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">"
+                + "<dd><code><a href=\"SuperInterface.html\" title=\"interface in pkg\">"
                 + "SuperInterface</a>&lt;V&gt;</code></dd>\n"
                 + "</dl>");
 
@@ -216,212 +216,212 @@
         //==============================================================
         // ClassUseTest1: <T extends Foo & Foo2>
         checkOutput("pkg2/class-use/Foo.html", true,
-                "<caption><span>Classes in <a href=\"../../pkg2/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">"
+                + "type <a href=\"../Foo.html\" title=\"class in pkg2\">"
                 + "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" "
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest1.html\" "
                 + "title=\"class in pkg2\">ClassUseTest1</a>&lt;T extends "
-                + "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo"
-                + "</a> &amp; <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">"
+                + "<a href=\"../Foo.html\" title=\"class in pkg2\">Foo"
+                + "</a> &amp; <a href=\"../Foo2.html\" title=\"interface in pkg2\">"
                 + "Foo2</a>&gt;</span></code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo.html\" title=\"class in "
+                + "type <a href=\"../Foo.html\" title=\"class in "
                 + "pkg2\">Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
                 "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">ClassUseTest1."
-                + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/"
+                + "</span><code><span class=\"memberNameLink\"><a href=\"../"
                 + "ClassUseTest1.html#method-T-\">method</a></span>"
                 + "&#8203;(T&nbsp;t)</code></th>",
-                "<caption><span>Fields in <a href=\"../../pkg2/"
+                "<caption><span>Fields in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">"
+                + "type <a href=\"../Foo.html\" title=\"class in pkg2\">"
                 + "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "td class=\"colFirst\"><code><a href=\"../../pkg2/"
+                "td class=\"colFirst\"><code><a href=\"../"
                 + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>"
-                + "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\""
+                + "&lt;<a href=\"../Foo.html\" title=\"class in pkg2\""
                 + ">Foo</a>&gt;</code></td>"
         );
 
         checkOutput("pkg2/class-use/ParamTest.html", true,
-                "<caption><span>Fields in <a href=\"../../pkg2/"
+                "<caption><span>Fields in <a href=\"../"
                 + "package-summary.html\">pkg2</a> declared as <a href=\"../"
-                + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest"
+                + "ParamTest.html\" title=\"class in pkg2\">ParamTest"
                 + "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "<td class=\"colFirst\"><code><a href=\"../../pkg2/"
+                "<td class=\"colFirst\"><code><a href=\"../"
                 + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;<a "
-                + "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a"
+                + "href=\"../Foo.html\" title=\"class in pkg2\">Foo</a"
                 + ">&gt;</code></td>"
         );
 
         checkOutput("pkg2/class-use/Foo2.html", true,
-                "<caption><span>Classes in <a href=\"../../pkg2/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo2.html\" title=\"interface "
+                + "type <a href=\"../Foo2.html\" title=\"interface "
                 + "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" "
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest1.html\" "
                 + "title=\"class in pkg2\">ClassUseTest1</a>&lt;T extends "
-                + "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo"
-                + "</a> &amp; <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">"
+                + "<a href=\"../Foo.html\" title=\"class in pkg2\">Foo"
+                + "</a> &amp; <a href=\"../Foo2.html\" title=\"interface in pkg2\">"
                 + "Foo2</a>&gt;</span></code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo2.html\" title=\"interface "
+                + "type <a href=\"../Foo2.html\" title=\"interface "
                 + "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>",
                 "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">"
-                + "ClassUseTest1.</span><code><span class=\"memberNameLink\"><a href=\"../../"
-                + "pkg2/ClassUseTest1.html#method-T-\">method</a></span>"
+                + "ClassUseTest1.</span><code><span class=\"memberNameLink\"><a href=\"../"
+                + "ClassUseTest1.html#method-T-\">method</a></span>"
                 + "&#8203;(T&nbsp;t)</code></th>"
         );
 
         // ClassUseTest2: <T extends ParamTest<Foo3>>
         checkOutput("pkg2/class-use/ParamTest.html", true,
-                "<caption><span>Classes in <a href=\"../../pkg2/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/ParamTest.html\" title=\"class "
+                + "type <a href=\"../ParamTest.html\" title=\"class "
                 + "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" "
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest2.html\" "
                 + "title=\"class in pkg2\">ClassUseTest2</a>&lt;T extends "
-                + "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">"
-                + "ParamTest</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">"
+                + "<a href=\"../ParamTest.html\" title=\"class in pkg2\">"
+                + "ParamTest</a>&lt;<a href=\"../Foo3.html\" title=\"class in pkg2\">"
                 + "Foo3</a>&gt;&gt;</span></code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/ParamTest.html\" title=\"class "
+                + "type <a href=\"../ParamTest.html\" title=\"class "
                 + "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
                 "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">ClassUseTest2."
-                + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/"
+                + "</span><code><span class=\"memberNameLink\"><a href=\"../"
                 + "ClassUseTest2.html#method-T-\">method</a></span>"
                 + "&#8203;(T&nbsp;t)</code></th>",
-                "<caption><span>Fields in <a href=\"../../pkg2/"
+                "<caption><span>Fields in <a href=\"../"
                 + "package-summary.html\">pkg2</a> declared as <a href=\"../"
-                + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest"
+                + "ParamTest.html\" title=\"class in pkg2\">ParamTest"
                 + "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "<td class=\"colFirst\"><code><a href=\"../../pkg2/"
+                "<td class=\"colFirst\"><code><a href=\"../"
                 + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>"
-                + "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">"
+                + "&lt;<a href=\"../Foo.html\" title=\"class in pkg2\">"
                 + "Foo</a>&gt;</code></td>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/ParamTest.html\" title=\"class "
+                + "type <a href=\"../ParamTest.html\" title=\"class "
                 + "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
                 "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../"
-                + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest"
-                + "</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in "
-                + "pkg2\">Foo3</a>&gt;&gt;<br><a href=\"../../pkg2/"
+                + "ParamTest.html\" title=\"class in pkg2\">ParamTest"
+                + "</a>&lt;<a href=\"../Foo3.html\" title=\"class in "
+                + "pkg2\">Foo3</a>&gt;&gt;<br><a href=\"../"
                 + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>"
-                + "&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in "
+                + "&lt;<a href=\"../Foo3.html\" title=\"class in "
                 + "pkg2\">Foo3</a>&gt;</code></td>"
         );
 
         checkOutput("pkg2/class-use/Foo3.html", true,
-                "<caption><span>Classes in <a href=\"../../pkg2/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">"
+                + "type <a href=\"../Foo3.html\" title=\"class in pkg2\">"
                 + "Foo3</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" "
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest2.html\" "
                 + "title=\"class in pkg2\">ClassUseTest2</a>&lt;T extends "
-                + "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">"
-                + "ParamTest</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">"
+                + "<a href=\"../ParamTest.html\" title=\"class in pkg2\">"
+                + "ParamTest</a>&lt;<a href=\"../Foo3.html\" title=\"class in pkg2\">"
                 + "Foo3</a>&gt;&gt;</span></code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo3.html\" title=\"class in "
+                + "type <a href=\"../Foo3.html\" title=\"class in "
                 + "pkg2\">Foo3</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>",
                 "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">ClassUseTest2."
-                + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/"
+                + "</span><code><span class=\"memberNameLink\"><a href=\"../"
                 + "ClassUseTest2.html#method-T-\">method</a></span>"
                 + "&#8203;(T&nbsp;t)</code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> that return types with "
-                + "arguments of type <a href=\"../../pkg2/Foo3.html\" title"
+                + "arguments of type <a href=\"../Foo3.html\" title"
                 + "=\"class in pkg2\">Foo3</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../../"
-                + "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;"
-                + "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3"
-                + "</a>&gt;&gt;<br><a href=\"../../pkg2/ParamTest.html\" "
-                + "title=\"class in pkg2\">ParamTest</a>&lt;<a href=\"../../pkg2/"
+                "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../"
+                + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;"
+                + "<a href=\"../Foo3.html\" title=\"class in pkg2\">Foo3"
+                + "</a>&gt;&gt;<br><a href=\"../ParamTest.html\" "
+                + "title=\"class in pkg2\">ParamTest</a>&lt;<a href=\"../"
                 + "Foo3.html\" title=\"class in pkg2\">Foo3</a>&gt;</code></td>"
         );
 
         // ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
         checkOutput("pkg2/class-use/ParamTest2.html", true,
-                "<caption><span>Classes in <a href=\"../../pkg2/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class "
+                + "type <a href=\"../ParamTest2.html\" title=\"class "
                 + "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" "
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest3.html\" "
                 + "title=\"class in pkg2\">ClassUseTest3</a>&lt;T extends "
-                + "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+                + "<a href=\"../ParamTest2.html\" title=\"class in pkg2\">"
                 + "ParamTest2</a>&lt;java.util.List&lt;? extends "
-                + "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">"
+                + "<a href=\"../Foo4.html\" title=\"class in pkg2\">"
                 + "Foo4</a>&gt;&gt;&gt;</span></code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class "
+                + "type <a href=\"../ParamTest2.html\" title=\"class "
                 + "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
                 "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">ClassUseTest3"
-                + ".</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3."
+                + ".</span><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest3."
                 + "html#method-T-\">method</a></span>&#8203;(T&nbsp;t)</code></th>",
                 "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../"
-                + "../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+                + "ParamTest2.html\" title=\"class in pkg2\">"
                 + "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".."
-                + "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;"
-                + "&gt;&gt;<br><a href=\"../../pkg2/ParamTest2.html\" "
+                + "/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;"
+                + "&gt;&gt;<br><a href=\"../ParamTest2.html\" "
                 + "title=\"class in pkg2\">ParamTest2</a>&lt;java.util.List"
-                + "&lt;? extends <a href=\"../../pkg2/Foo4.html\" title=\""
+                + "&lt;? extends <a href=\"../Foo4.html\" title=\""
                 + "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
         );
 
         checkOutput("pkg2/class-use/Foo4.html", true,
-                "<caption><span>Classes in <a href=\"../../pkg2/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+                + "type <a href=\"../Foo4.html\" title=\"class in "
                 + "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>",
-                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" "
+                "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest3.html\" "
                 + "title=\"class in pkg2\">ClassUseTest3</a>&lt;T extends "
-                + "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+                + "<a href=\"../ParamTest2.html\" title=\"class in pkg2\">"
                 + "ParamTest2</a>&lt;java.util.List&lt;? extends "
-                + "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">"
+                + "<a href=\"../Foo4.html\" title=\"class in pkg2\">"
                 + "Foo4</a>&gt;&gt;&gt;</span></code></th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type parameters of "
-                + "type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+                + "type <a href=\"../Foo4.html\" title=\"class in "
                 + "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;</span></caption>",
                 "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">ClassUseTest3."
-                + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3."
+                + "</span><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest3."
                 + "html#method-T-\">method</a></span>&#8203;(T&nbsp;t)</code>"
                 + "</th>",
-                "<caption><span>Methods in <a href=\"../../pkg2/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg2</a> that return types with "
-                + "arguments of type <a href=\"../../pkg2/Foo4.html\" "
+                + "arguments of type <a href=\"../Foo4.html\" "
                 + "title=\"class in pkg2\">Foo4</a></span><span class=\""
                 + "tabEnd\">&nbsp;</span></caption>",
                 "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../"
-                + "../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+                + "ParamTest2.html\" title=\"class in pkg2\">"
                 + "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".."
-                + "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;"
-                + "&gt;&gt;<br><a href=\"../../pkg2/ParamTest2.html\" "
+                + "/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;"
+                + "&gt;&gt;<br><a href=\"../ParamTest2.html\" "
                 + "title=\"class in pkg2\">ParamTest2</a>&lt;java.util.List"
-                + "&lt;? extends <a href=\"../../pkg2/Foo4.html\" title=\""
+                + "&lt;? extends <a href=\"../Foo4.html\" title=\""
                 + "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
         );
 
         // Type parameters in constructor and method args
         checkOutput("pkg2/class-use/Foo4.html", true,
-                "<caption><span>Method parameters in <a href=\"../../pkg2/"
+                "<caption><span>Method parameters in <a href=\"../"
                 + "package-summary.html\">pkg2</a> with type arguments of "
-                + "type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+                + "type <a href=\"../Foo4.html\" title=\"class in "
                 + "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>\n"
                 + "<tr>\n"
@@ -433,13 +433,13 @@
                 + "<tr class=\"altColor\">\n"
                 + "<td class=\"colFirst\"><code>void</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><span class=\"typeNameLabel\">ClassUseTest3."
-                + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3."
+                + "</span><code><span class=\"memberNameLink\"><a href=\"../ClassUseTest3."
                 + "html#method-java.util.Set-\">method</a></span>&#8203;(java."
-                + "util.Set&lt;<a href=\"../../pkg2/Foo4.html\" title=\""
+                + "util.Set&lt;<a href=\"../Foo4.html\" title=\""
                 + "class in pkg2\">Foo4</a>&gt;&nbsp;p)</code></th>",
-                "<caption><span>Constructor parameters in <a href=\"../../"
-                + "pkg2/package-summary.html\">pkg2</a> with type arguments "
-                + "of type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+                "<caption><span>Constructor parameters in <a href=\"../"
+                + "package-summary.html\">pkg2</a> with type arguments "
+                + "of type <a href=\"../Foo4.html\" title=\"class in "
                 + "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>"
         );
@@ -478,7 +478,7 @@
                 "(int...&nbsp;i)",
                 "(int[][]...&nbsp;i)",
                 "-int:A...-",
-                "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+                "<a href=\"TypeParameters.html\" title=\"class in pkg\">"
                 + "TypeParameters</a>...&nbsp;t");
     }
 
@@ -520,58 +520,58 @@
     void checkAnnotationTypeUsage() {
         checkOutput("pkg/package-summary.html", true,
                 // PACKAGE
-                "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"Package Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)");
+                "<a href=\"AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"AnnotationType.html#optional--\">optional</a>=\"Package Annotation\",\n"
+                + "                <a href=\"AnnotationType.html#required--\">required</a>=1994)");
 
         checkOutput("pkg/AnnotationTypeUsage.html", true,
                 // CLASS
-                "<pre><a href=\"../pkg/AnnotationType.html\" "
+                "<pre><a href=\"AnnotationType.html\" "
                 + "title=\"annotation in pkg\">@AnnotationType</a>("
-                + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+                + "<a href=\"AnnotationType.html#optional--\">optional</a>"
                 + "=\"Class Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required--\">"
+                + "                <a href=\"AnnotationType.html#required--\">"
                 + "required</a>=1994)\n"
                 + "public class <span class=\"typeNameLabel\">"
                 + "AnnotationTypeUsage</span>\n"
                 + "extends java.lang.Object</pre>",
                 // FIELD
-                "<pre><a href=\"../pkg/AnnotationType.html\" "
+                "<pre><a href=\"AnnotationType.html\" "
                 + "title=\"annotation in pkg\">@AnnotationType</a>("
-                + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+                + "<a href=\"AnnotationType.html#optional--\">optional</a>"
                 + "=\"Field Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required--\">"
+                + "                <a href=\"AnnotationType.html#required--\">"
                 + "required</a>=1994)\n"
                 + "public&nbsp;int field</pre>",
                 // CONSTRUCTOR
-                "<pre><a href=\"../pkg/AnnotationType.html\" "
+                "<pre><a href=\"AnnotationType.html\" "
                 + "title=\"annotation in pkg\">@AnnotationType</a>("
-                + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+                + "<a href=\"AnnotationType.html#optional--\">optional</a>"
                 + "=\"Constructor Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required--\">"
+                + "                <a href=\"AnnotationType.html#required--\">"
                 + "required</a>=1994)\n"
                 + "public&nbsp;AnnotationTypeUsage()</pre>",
                 // METHOD
-                "<pre><a href=\"../pkg/AnnotationType.html\" "
+                "<pre><a href=\"AnnotationType.html\" "
                 + "title=\"annotation in pkg\">@AnnotationType</a>("
-                + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+                + "<a href=\"AnnotationType.html#optional--\">optional</a>"
                 + "=\"Method Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required--\">"
+                + "                <a href=\"AnnotationType.html#required--\">"
                 + "required</a>=1994)\n"
                 + "public&nbsp;void&nbsp;method()</pre>",
                 // METHOD PARAMS
                 "<pre>public&nbsp;void&nbsp;methodWithParams&#8203;("
-                + "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">"
-                + "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">"
+                + "<a href=\"AnnotationType.html\" title=\"annotation in pkg\">"
+                + "@AnnotationType</a>(<a href=\"AnnotationType.html#optional--\">"
                 + "optional</a>=\"Parameter Annotation\",<a "
-                + "href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)\n"
+                + "href=\"AnnotationType.html#required--\">required</a>=1994)\n"
                 + "                             int&nbsp;documented,\n"
                 + "                             int&nbsp;undocmented)</pre>",
                 // CONSTRUCTOR PARAMS
                 "<pre>public&nbsp;AnnotationTypeUsage&#8203;(<a "
-                + "href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">"
-                + "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">"
+                + "href=\"AnnotationType.html\" title=\"annotation in pkg\">"
+                + "@AnnotationType</a>(<a href=\"AnnotationType.html#optional--\">"
                 + "optional</a>=\"Constructor Param Annotation\",<a "
-                + "href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)\n"
+                + "href=\"AnnotationType.html#required--\">required</a>=1994)\n"
                 + "                           int&nbsp;documented,\n"
                 + "                           int&nbsp;undocmented)</pre>");
 
@@ -580,37 +580,37 @@
         //=================================
         checkOutput("pkg/class-use/AnnotationType.html", true,
                 "<caption><span>Packages with annotations of type <a href=\""
-                + "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">"
+                + "../AnnotationType.html\" title=\"annotation in pkg\">"
                 + "AnnotationType</a></span><span class=\"tabEnd\">&nbsp;"
                 + "</span></caption>",
-                "<caption><span>Classes in <a href=\"../../pkg/"
+                "<caption><span>Classes in <a href=\"../"
                 + "package-summary.html\">pkg</a> with annotations of type "
-                + "<a href=\"../../pkg/AnnotationType.html\" title=\""
+                + "<a href=\"../AnnotationType.html\" title=\""
                 + "annotation in pkg\">AnnotationType</a></span><span class"
                 + "=\"tabEnd\">&nbsp;</span></caption>",
-                "<caption><span>Fields in <a href=\"../../pkg/"
+                "<caption><span>Fields in <a href=\"../"
                 + "package-summary.html\">pkg</a> with annotations of type "
-                + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+                + "<a href=\"../AnnotationType.html\" title=\"annotation "
                 + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<caption><span>Methods in <a href=\"../../pkg/"
+                "<caption><span>Methods in <a href=\"../"
                 + "package-summary.html\">pkg</a> with annotations of type "
-                + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+                + "<a href=\"../AnnotationType.html\" title=\"annotation "
                 + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<caption><span>Method parameters in <a href=\"../../pkg/"
+                "<caption><span>Method parameters in <a href=\"../"
                 + "package-summary.html\">pkg</a> with annotations of type "
-                + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+                + "<a href=\"../AnnotationType.html\" title=\"annotation "
                 + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<caption><span>Constructors in <a href=\"../../pkg/"
+                "<caption><span>Constructors in <a href=\"../"
                 + "package-summary.html\">pkg</a> with annotations of type "
-                + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+                + "<a href=\"../AnnotationType.html\" title=\"annotation "
                 + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
                 + "&nbsp;</span></caption>",
-                "<caption><span>Constructor parameters in <a href=\"../../"
-                + "pkg/package-summary.html\">pkg</a> with annotations of "
-                + "type <a href=\"../../pkg/AnnotationType.html\" title=\""
+                "<caption><span>Constructor parameters in <a href=\"../"
+                + "package-summary.html\">pkg</a> with annotations of "
+                + "type <a href=\"../AnnotationType.html\" title=\""
                 + "annotation in pkg\">AnnotationType</a></span><span class=\""
                 + "tabEnd\">&nbsp;</span></caption>"
         );
@@ -620,20 +620,20 @@
         //===============================================================
         checkOutput("pkg/AnnotationTypeUsage.html", false,
                 // CLASS
-                "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Class Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+                "<a href=\"AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"AnnotationType.html#optional\">optional</a>=\"Class Annotation\",\n"
+                + "                <a href=\"AnnotationType.html#required\">required</a>=1994)\n"
                 + "public class <span class=\"typeNameLabel\">AnnotationTypeUsage</span></dt><dt>extends java.lang.Object</dt>",
                 // FIELD
-                "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Field Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+                "<a href=\"AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"AnnotationType.html#optional\">optional</a>=\"Field Annotation\",\n"
+                + "                <a href=\"AnnotationType.html#required\">required</a>=1994)\n"
                 + "public int <span class=\"memberNameLabel\">field</span>",
                 // CONSTRUCTOR
-                "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+                "<a href=\"AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\",\n"
+                + "                <a href=\"AnnotationType.html#required\">required</a>=1994)\n"
                 + "public <span class=\"typeNameLabel\">AnnotationTypeUsage</span>()",
                 // METHOD
-                "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Method Annotation\",\n"
-                + "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+                "<a href=\"AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"AnnotationType.html#optional\">optional</a>=\"Method Annotation\",\n"
+                + "                <a href=\"AnnotationType.html#required\">required</a>=1994)\n"
                 + "public void <span class=\"memberNameLabel\">method</span>()");
 
         //=================================
@@ -648,31 +648,31 @@
         //=================================
         checkOutput("pkg1/B.html", true,
                 // Integer
-                "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,",
+                "<a href=\"A.html#d--\">d</a>=3.14,",
                 // Double
-                "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,",
+                "<a href=\"A.html#d--\">d</a>=3.14,",
                 // Boolean
-                "<a href=\"../pkg1/A.html#b--\">b</a>=true,",
+                "<a href=\"A.html#b--\">b</a>=true,",
                 // String
-                "<a href=\"../pkg1/A.html#s--\">s</a>=\"sigh\",",
+                "<a href=\"A.html#s--\">s</a>=\"sigh\",",
                 // Class
-                "<a href=\"../pkg1/A.html#c--\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,",
+                "<a href=\"A.html#c--\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,",
                 // Bounded Class
-                "<a href=\"../pkg1/A.html#w--\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,",
+                "<a href=\"A.html#w--\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,",
                 // Enum
-                "<a href=\"../pkg1/A.html#e--\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,",
+                "<a href=\"A.html#e--\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,",
                 // Annotation Type
-                "<a href=\"../pkg1/A.html#a--\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994),",
+                "<a href=\"A.html#a--\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994),",
                 // String Array
-                "<a href=\"../pkg1/A.html#sa--\">sa</a>={\"up\",\"down\"},",
+                "<a href=\"A.html#sa--\">sa</a>={\"up\",\"down\"},",
                 // Primitive
-                "<a href=\"../pkg1/A.html#primitiveClassTest--\">primitiveClassTest</a>=boolean.class,");
+                "<a href=\"A.html#primitiveClassTest--\">primitiveClassTest</a>=boolean.class,");
 
         // XXX:  Add array test case after this if fixed:
         //5020899: Incorrect internal representation of class-valued annotation elements
         // Make sure that annotations are surrounded by <pre> and </pre>
         checkOutput("pkg1/B.html", true,
-                "<pre><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>",
+                "<pre><a href=\"A.html\" title=\"annotation in pkg1\">@A</a>",
                 "public interface <span class=\"typeNameLabel\">B</span></pre>");
 
     }
--- a/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -236,10 +236,10 @@
                 + "public int method() {</a>");
 
         checkOutput("linksource/SomeEnum.html", true,
-                "<pre>public static final&nbsp;<a href=\"../linksource/SomeEnum.html\" "
+                "<pre>public static final&nbsp;<a href=\"SomeEnum.html\" "
                 + "title=\"enum in linksource\">SomeEnum</a> <a href="
                 + "\"../src-html/linksource/SomeEnum.html#line.29\">VALUE1</a></pre>",
-                "<pre>public static final&nbsp;<a href=\"../linksource/SomeEnum.html\" "
+                "<pre>public static final&nbsp;<a href=\"SomeEnum.html\" "
                 + "title=\"enum in linksource\">SomeEnum</a> <a href="
                 + "\"../src-html/linksource/SomeEnum.html#line.30\">VALUE2</a></pre>");
 
--- a/test/langtools/jdk/javadoc/doclet/testOrdering/TestOrdering.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOrdering/TestOrdering.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -135,42 +135,42 @@
             checkClassUseOrdering("pkg1/class-use/UsedClass.html");
 
             tester.checkOrder("pkg1/class-use/UsedClass.html",
-                    "../../pkg1/MethodOrder.html#m--",
-                    "../../pkg1/MethodOrder.html#m-byte:A-",
-                    "../../pkg1/MethodOrder.html#m-double-",
-                    "../../pkg1/MethodOrder.html#m-double-double-",
-                    "../../pkg1/MethodOrder.html#m-double-java.lang.Double-",
-                    "../../pkg1/MethodOrder.html#m-int-",
-                    "../../pkg1/MethodOrder.html#m-int-int-",
-                    "../../pkg1/MethodOrder.html#m-int-java.lang.Integer-",
-                    "../../pkg1/MethodOrder.html#m-long-",
-                    "../../pkg1/MethodOrder.html#m-long-long-",
-                    "../../pkg1/MethodOrder.html#m-long-java.lang.Long-",
-                    "../../pkg1/MethodOrder.html#m-long-java.lang.Long...-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Double-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Double-double-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Double-java.lang.Double-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Integer-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Integer-int-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Integer-java.lang.Integer-",
-                    "../../pkg1/MethodOrder.html#m-java.lang.Object:A-",
-                    "../../pkg1/MethodOrder.html#m-java.util.ArrayList-",
-                    "../../pkg1/MethodOrder.html#m-java.util.Collection-",
-                    "../../pkg1/MethodOrder.html#m-java.util.List-");
+                    "../MethodOrder.html#m--",
+                    "../MethodOrder.html#m-byte:A-",
+                    "../MethodOrder.html#m-double-",
+                    "../MethodOrder.html#m-double-double-",
+                    "../MethodOrder.html#m-double-java.lang.Double-",
+                    "../MethodOrder.html#m-int-",
+                    "../MethodOrder.html#m-int-int-",
+                    "../MethodOrder.html#m-int-java.lang.Integer-",
+                    "../MethodOrder.html#m-long-",
+                    "../MethodOrder.html#m-long-long-",
+                    "../MethodOrder.html#m-long-java.lang.Long-",
+                    "../MethodOrder.html#m-long-java.lang.Long...-",
+                    "../MethodOrder.html#m-java.lang.Double-",
+                    "../MethodOrder.html#m-java.lang.Double-double-",
+                    "../MethodOrder.html#m-java.lang.Double-java.lang.Double-",
+                    "../MethodOrder.html#m-java.lang.Integer-",
+                    "../MethodOrder.html#m-java.lang.Integer-int-",
+                    "../MethodOrder.html#m-java.lang.Integer-java.lang.Integer-",
+                    "../MethodOrder.html#m-java.lang.Object:A-",
+                    "../MethodOrder.html#m-java.util.ArrayList-",
+                    "../MethodOrder.html#m-java.util.Collection-",
+                    "../MethodOrder.html#m-java.util.List-");
 
             tester.checkOrder("pkg1/class-use/UsedClass.html",
-                    "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-",
-                    "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-pkg1.UsedClass-",
-                    "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-pkg1.UsedClass:A-",
-                    "../../pkg1/MethodOrder.html#tpm-pkg1.UsedClass-java.lang.String-");
+                    "../MethodOrder.html#tpm-pkg1.UsedClass-",
+                    "../MethodOrder.html#tpm-pkg1.UsedClass-pkg1.UsedClass-",
+                    "../MethodOrder.html#tpm-pkg1.UsedClass-pkg1.UsedClass:A-",
+                    "../MethodOrder.html#tpm-pkg1.UsedClass-java.lang.String-");
 
             tester.checkOrder("pkg1/class-use/UsedClass.html",
-                    "../../pkg1/A.html#A-pkg1.UsedClass-",
-                    "../../pkg1/B.A.html#A-pkg1.UsedClass-",
-                    "../../pkg1/B.html#B-pkg1.UsedClass-",
-                    "../../pkg1/A.C.html#C-pkg1.UsedClass-java.lang.Object:A-",
-                    "../../pkg1/A.C.html#C-pkg1.UsedClass-java.util.Collection-",
-                    "../../pkg1/A.C.html#C-pkg1.UsedClass-java.util.List-");
+                    "../A.html#A-pkg1.UsedClass-",
+                    "../B.A.html#A-pkg1.UsedClass-",
+                    "../B.html#B-pkg1.UsedClass-",
+                    "../A.C.html#C-pkg1.UsedClass-java.lang.Object:A-",
+                    "../A.C.html#C-pkg1.UsedClass-java.util.Collection-",
+                    "../A.C.html#C-pkg1.UsedClass-java.util.List-");
 
             tester.checkOrder("pkg1/ImplementsOrdering.html",
                     "<dd><code>close</code>&nbsp;in interface&nbsp;<code>java.lang.AutoCloseable</code></dd>",
@@ -211,10 +211,10 @@
         }
 
         void checkClassUseOrdering(String usePage) {
-            checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#zfield");
-            checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#fieldInC#ITERATION#");
-            checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#zmethod-pkg1.UsedClass");
-            checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#methodInC#ITERATION#");
+            checkClassUseOrdering(usePage, "C#ITERATION#.html#zfield");
+            checkClassUseOrdering(usePage, "C#ITERATION#.html#fieldInC#ITERATION#");
+            checkClassUseOrdering(usePage, "C#ITERATION#.html#zmethod-pkg1.UsedClass");
+            checkClassUseOrdering(usePage, "C#ITERATION#.html#methodInC#ITERATION#");
         }
 
         void checkClassUseOrdering(String usePage, String searchString) {
@@ -405,8 +405,8 @@
             tester.checkExit(Exit.OK);
             tester.checkOrder("index-all.html", composeTestVectors());
             tester.checkOrder("add0/add/package-tree.html",
-                    "<a href=\"../../add0/add/Add.add.html\" title=\"enum in add0.add\">",
-                    "<a href=\"../../add0/add/Add.ADD.html\" title=\"enum in add0.add\">");
+                    "<a href=\"Add.add.html\" title=\"enum in add0.add\">",
+                    "<a href=\"Add.ADD.html\" title=\"enum in add0.add\">");
             tester.checkOrder("overview-tree.html",
                     "<a href=\"Add.add.html\" title=\"enum in &lt;Unnamed&gt;\">",
                     "<a href=\"add0/Add.add.html\" title=\"enum in add0\">",
@@ -593,10 +593,10 @@
 
             tester.checkOrder("pkg5/AnnoOptionalTest.html",
                     "<h3>Optional Element Summary</h3>",
-                    "<a href=\"../pkg5/AnnoOptionalTest.html#four--\">four</a>",
-                    "<a href=\"../pkg5/AnnoOptionalTest.html#one--\">one</a>",
-                    "<a href=\"../pkg5/AnnoOptionalTest.html#three--\">three</a>",
-                    "<a href=\"../pkg5/AnnoOptionalTest.html#two--\">two</a>",
+                    "<a href=\"#four--\">four</a>",
+                    "<a href=\"#one--\">one</a>",
+                    "<a href=\"#three--\">three</a>",
+                    "<a href=\"#two--\">two</a>",
                     "<h3>Element Detail</h3>",
                     "<h4>one</h4>",
                     "<h4>two</h4>",
@@ -605,10 +605,10 @@
 
             tester.checkOrder("pkg5/AnnoRequiredTest.html",
                     "<h3>Required Element Summary</h3>",
-                    "<a href=\"../pkg5/AnnoRequiredTest.html#four--\">four</a>",
-                    "<a href=\"../pkg5/AnnoRequiredTest.html#one--\">one</a>",
-                    "<a href=\"../pkg5/AnnoRequiredTest.html#three--\">three</a>",
-                    "<a href=\"../pkg5/AnnoRequiredTest.html#two--\">two</a>",
+                    "<a href=\"#four--\">four</a>",
+                    "<a href=\"#one--\">one</a>",
+                    "<a href=\"#three--\">three</a>",
+                    "<a href=\"#two--\">two</a>",
                     "<h3>Element Detail</h3>",
                     "<h4>one</h4>",
                     "<h4>two</h4>",
@@ -617,10 +617,10 @@
 
             tester.checkOrder("pkg5/CtorTest.html",
                     "<h3>Constructor Summary</h3>",
-                    "<a href=\"../pkg5/CtorTest.html#CtorTest-int-\"",
-                    "<a href=\"../pkg5/CtorTest.html#CtorTest-int-int-\"",
-                    "<a href=\"../pkg5/CtorTest.html#CtorTest-int-int-int-\"",
-                    "<a href=\"../pkg5/CtorTest.html#CtorTest-int-int-int-int-\"",
+                    "<a href=\"#CtorTest-int-\"",
+                    "<a href=\"#CtorTest-int-int-\"",
+                    "<a href=\"#CtorTest-int-int-int-\"",
+                    "<a href=\"#CtorTest-int-int-int-int-\"",
                     "<h3>Constructor Detail</h3>",
                     "<a name=\"CtorTest-int-int-int-int-\">",
                     "<a name=\"CtorTest-int-int-int-\">",
@@ -629,10 +629,10 @@
 
             tester.checkOrder("pkg5/EnumTest.html",
                     "<h3>Enum Constant Summary</h3>",
-                    "<a href=\"../pkg5/EnumTest.html#FOUR\">FOUR</a>",
-                    "<a href=\"../pkg5/EnumTest.html#ONE\">ONE</a>",
-                    "<a href=\"../pkg5/EnumTest.html#THREE\">THREE</a>",
-                    "<a href=\"../pkg5/EnumTest.html#TWO\">TWO</a>",
+                    "<a href=\"#FOUR\">FOUR</a>",
+                    "<a href=\"#ONE\">ONE</a>",
+                    "<a href=\"#THREE\">THREE</a>",
+                    "<a href=\"#TWO\">TWO</a>",
                     "<h3>Enum Constant Detail</h3>",
                     "<h4>ONE</h4>",
                     "<h4>TWO</h4>",
@@ -641,10 +641,10 @@
 
             tester.checkOrder("pkg5/FieldTest.html",
                     "<h3>Field Summary</h3>",
-                    "<a href=\"../pkg5/FieldTest.html#four\">four</a>",
-                    "<a href=\"../pkg5/FieldTest.html#one\">one</a>",
-                    "<a href=\"../pkg5/FieldTest.html#three\">three</a>",
-                    "<a href=\"../pkg5/FieldTest.html#two\">two</a>",
+                    "<a href=\"#four\">four</a>",
+                    "<a href=\"#one\">one</a>",
+                    "<a href=\"#three\">three</a>",
+                    "<a href=\"#two\">two</a>",
                     "<h3>Field Detail</h3>",
                     "<h4>one</h4>",
                     "<h4>two</h4>",
@@ -653,10 +653,10 @@
 
             tester.checkOrder("pkg5/IntfTest.html",
                     "<h3>Method Summary</h3>",
-                    "<a href=\"../pkg5/IntfTest.html#four--\">four</a>",
-                    "<a href=\"../pkg5/IntfTest.html#one--\">one</a>",
-                    "<a href=\"../pkg5/IntfTest.html#three--\">three</a>",
-                    "<a href=\"../pkg5/IntfTest.html#two--\">two</a>",
+                    "<a href=\"#four--\">four</a>",
+                    "<a href=\"#one--\">one</a>",
+                    "<a href=\"#three--\">three</a>",
+                    "<a href=\"#two--\">two</a>",
                     "<h3>Method Detail</h3>",
                     "<h4>one</h4>",
                     "<h4>two</h4>",
@@ -665,10 +665,10 @@
 
             tester.checkOrder("pkg5/MethodTest.html",
                     "<h3>Method Summary</h3>",
-                    "<a href=\"../pkg5/MethodTest.html#four--\">four</a>",
-                    "<a href=\"../pkg5/MethodTest.html#one--\">one</a>",
-                    "<a href=\"../pkg5/MethodTest.html#three--\">three</a>",
-                    "<a href=\"../pkg5/MethodTest.html#two--\">two</a>",
+                    "<a href=\"#four--\">four</a>",
+                    "<a href=\"#one--\">one</a>",
+                    "<a href=\"#three--\">three</a>",
+                    "<a href=\"#two--\">two</a>",
                     "<h3>Method Detail</h3>",
                     "<h4>one</h4>",
                     "<h4>two</h4>",
@@ -677,10 +677,10 @@
 
             tester.checkOrder("pkg5/PropertyTest.html",
                     "<h3>Property Summary</h3>",
-                    "<a href=\"../pkg5/PropertyTest.html#fourProperty\">four</a>",
-                    "<a href=\"../pkg5/PropertyTest.html#oneProperty\">one</a>",
-                    "<a href=\"../pkg5/PropertyTest.html#threeProperty\">three</a>",
-                    "<a href=\"../pkg5/PropertyTest.html#twoProperty\">two</a>",
+                    "<a href=\"#fourProperty\">four</a>",
+                    "<a href=\"#oneProperty\">one</a>",
+                    "<a href=\"#threeProperty\">three</a>",
+                    "<a href=\"#twoProperty\">two</a>",
                     "<h3>Property Detail</h3>",
                     "<h4>oneProperty</h4>",
                     "<h4>twoProperty</h4>",
--- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestMultiInheritance.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestMultiInheritance.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,30 +51,30 @@
 
         checkOutput("pkg3/I1.html", true,
                 "Methods inherited from interface&nbsp;pkg3."
-                + "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">"
+                + "<a href=\"I2.html\" title=\"interface in pkg3\">"
                 + "I2</a>",
                 "Methods inherited from interface&nbsp;pkg3."
-                + "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">"
+                + "<a href=\"I3.html\" title=\"interface in pkg3\">"
                 + "I3</a>");
 
         checkOutput("pkg3/I0.html", true,
                 "Methods inherited from interface&nbsp;pkg3."
-                + "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">"
+                + "<a href=\"I2.html\" title=\"interface in pkg3\">"
                 + "I2</a>",
                 "Methods inherited from interface&nbsp;pkg3."
-                + "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">"
+                + "<a href=\"I3.html\" title=\"interface in pkg3\">"
                 + "I3</a>");
 
         // Method foo() is NOT inherited from I4 because it is overriden by I3.
 
         checkOutput("pkg3/I1.html", false,
                 "Methods inherited from interface&nbsp;pkg3."
-                + "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">"
+                + "<a href=\"I4.html\" title=\"interface in pkg3\">"
                 + "I4</a>");
 
         checkOutput("pkg3/I0.html", false,
                 "Methods inherited from interface&nbsp;pkg3."
-                + "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">"
+                + "<a href=\"I4.html\" title=\"interface in pkg3\">"
                 + "I4</a>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenMethodDocCopy.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenMethodDocCopy.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,7 +53,7 @@
 
         checkOutput("pkg1/SubClass.html", true,
                 "<span class=\"descfrmTypeLabel\">Description copied from class:&nbsp;<code>"
-                + "<a href=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy--\">"
+                + "<a href=\"BaseClass.html#overridenMethodWithDocsToCopy--\">"
                 + "BaseClass</a></code></span>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenPrivateMethods.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenPrivateMethods.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,7 +50,7 @@
         // The public method should be overridden
         checkOutput("pkg1/SubClass.html", true,
                 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod");
+                + "<dd><code><a href=\"BaseClass.html#publicMethod");
 
         // The public method in different package should be overridden
         checkOutput("pkg2/SubClass.html", true,
--- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenPrivateMethodsWithPackageFlag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenPrivateMethodsWithPackageFlag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,9 +51,9 @@
         // The public method should be overridden
         checkOutput("pkg1/SubClass.html", true,
                 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">"
+                + "<dd><code><a href=\"BaseClass.html#publicMethod--\">"
                 + "publicMethod</a></code>&nbsp;in class&nbsp;<code>"
-                + "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
+                + "<a href=\"BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
 
         // The public method in different package should be overridden
         checkOutput("pkg2/SubClass.html", true,
@@ -66,14 +66,14 @@
         // package.
         checkOutput("pkg1/SubClass.html", true,
                 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod--\">"
+                + "<dd><code><a href=\"BaseClass.html#packagePrivateMethod--\">"
                 + "packagePrivateMethod</a></code>&nbsp;in class&nbsp;<code>"
-                + "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
+                + "<a href=\"BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
 
         // The private method in should not be overridden
         checkOutput("pkg1/SubClass.html", false,
                 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">");
+                + "<dd><code><a href=\"BaseClass.html#privateMethod()\">");
 
         // The private method in different package should not be overridden
         checkOutput("pkg2/SubClass.html", false,
--- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenPrivateMethodsWithPrivateFlag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenPrivateMethodsWithPrivateFlag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,13 +51,13 @@
         // The public method should be overridden
         checkOutput("pkg1/SubClass.html", true,
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
-                 "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod");
+                 "<dd><code><a href=\"BaseClass.html#publicMethod");
 
         // The package private method should be overridden since the base and sub class are in the same
         // package.
         checkOutput("pkg1/SubClass.html", true,
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
-                 "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod");
+                 "<dd><code><a href=\"BaseClass.html#packagePrivateMethod");
 
         // The public method in different package should be overridden
         checkOutput("pkg2/SubClass.html", true,
@@ -67,7 +67,7 @@
         // The private method in should not be overridden
         checkOutput("pkg1/SubClass.html", false,
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
-                 "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod");
+                 "<dd><code><a href=\"BaseClass.html#privateMethod");
 
         // The private method in different package should not be overridden
         checkOutput("pkg2/SubClass.html", false,
--- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverrideMethods.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverrideMethods.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -73,94 +73,94 @@
 
         checkOrder("pkg5/Classes.C.html",
                 // Check properties
-                "Properties declared in class&nbsp;pkg5.<a href=\"../pkg5/Classes.P.html",
+                "Properties declared in class&nbsp;pkg5.<a href=\"Classes.P.html",
                 "Classes.P",
-                "../pkg5/Classes.P.html#rateProperty\">rate",
+                "Classes.P.html#rateProperty\">rate",
 
                 // Check nested classes
                 "Nested classes/interfaces declared in class&nbsp;pkg5.",
                 "Classes.P",
-                "./pkg5/Classes.P.PN.html",
+                "Classes.P.PN.html",
                 "Classes.P.PN.html",
                 "type parameter in Classes.P.PN\">K",
                 "type parameter in Classes.P.PN",
                 "V",
 
                 // Check fields
-                "Fields declared in class&nbsp;pkg5.<a href=\"../pkg5/Classes.P.html",
+                "Fields declared in class&nbsp;pkg5.<a href=\"Classes.P.html",
                 "Classes.P",
-                "../pkg5/Classes.P.html#field0\">field0",
+                "Classes.P.html#field0\">field0",
 
                 // Check method summary
                 "Method Summary",
                 "void",
-                "../pkg5/Classes.C.html#m1--\">m1",
+                "#m1--\">m1",
                 "A modified method",
 
                 "void",
-                "../pkg5/Classes.C.html#m4-java.lang.String-java.lang.String-\">m4",
+                "#m4-java.lang.String-java.lang.String-\">m4",
                 "java.lang.String&nbsp;k,",
                 "java.lang.String",
                 "&nbsp;v)",
 
                 // Check footnotes
-                "Methods declared in class&nbsp;pkg5.<a href=\"../pkg5/Classes.GP.html",
+                "Methods declared in class&nbsp;pkg5.<a href=\"Classes.GP.html",
                 "Classes.GP",
-                "../pkg5/Classes.GP.html#m0--\">m0",
+                "Classes.GP.html#m0--\">m0",
 
                 // Check method details for override
                 "overrideSpecifyLabel",
                 "Overrides:",
-                "../pkg5/Classes.GP.html#m7--\">m7",
+                "Classes.GP.html#m7--\">m7",
                 "in class",
-                "../pkg5/Classes.GP.html",
+                "Classes.GP.html",
                 "Classes.GP"
         );
 
         checkOrder("pkg5/Classes.C.html",
                 // Check footnotes 2
                 "Methods declared in class&nbsp;pkg5.",
-                "../pkg5/Classes.P.html#getRate--\">getRate",
-                "../pkg5/Classes.P.html#m2--\">m2",
-                "../pkg5/Classes.P.html#m3--\">m3",
-                "../pkg5/Classes.P.html#m4-K-V-\">m4",
-                "../pkg5/Classes.P.html#rateProperty--\">rateProperty",
-                "../pkg5/Classes.P.html#setRate-double-\">setRate",
+                "Classes.P.html#getRate--\">getRate",
+                "Classes.P.html#m2--\">m2",
+                "Classes.P.html#m3--\">m3",
+                "Classes.P.html#m4-K-V-\">m4",
+                "Classes.P.html#rateProperty--\">rateProperty",
+                "Classes.P.html#setRate-double-\">setRate",
 
                 // Check @link
                 "A test of links to the methods in this class. <p>\n",
-                "../pkg5/Classes.GP.html#m0--",
+                "Classes.GP.html#m0--",
                 "Classes.GP.m0()",
-                "../pkg5/Classes.C.html#m1--",
+                "#m1--",
                 "m1()",
-                "../pkg5/Classes.P.html#m2--",
+                "Classes.P.html#m2--",
                 "Classes.P.m2()",
-                "../pkg5/Classes.P.html#m3--",
+                "Classes.P.html#m3--",
                 "Classes.P.m3()",
                 "m4(java.lang.String,java.lang.String)",
-                "../pkg5/Classes.P.html#m5--",
+                "Classes.P.html#m5--",
                 "Classes.P.m5()",
-                "../pkg5/Classes.C.html#m6--",
+                "#m6--",
                 "m6()",
-                "../pkg5/Classes.C.html#m7--",
+                "#m7--",
                 "m7()",
                 "End of links",
 
                 // Check @see
                 "See Also:",
-                "../pkg5/Classes.GP.html#m0--",
+                "Classes.GP.html#m0--",
                 "Classes.GP.m0()",
-                "../pkg5/Classes.C.html#m1--",
+                "#m1--",
                 "m1()",
-                "../pkg5/Classes.P.html#m2--",
+                "Classes.P.html#m2--",
                 "Classes.P.m2()",
-                "../pkg5/Classes.P.html#m3--",
+                "Classes.P.html#m3--",
                 "Classes.P.m3()",
-                "../pkg5/Classes.C.html#m4-java.lang.String-java.lang.String-",
+                "#m4-java.lang.String-java.lang.String-",
                 "m4(String k, String v)",
-                "../pkg5/Classes.P.html#m5--\"><code>Classes.P.m5()",
-                "../pkg5/Classes.C.html#m6--\"><code>m6()",
-                "../pkg5/Classes.C.html#m7--\"><code>m7()"
+                "Classes.P.html#m5--\"><code>Classes.P.m5()",
+                "#m6--\"><code>m6()",
+                "#m7--\"><code>m7()"
         );
 
         // Tests for interfaces
@@ -172,56 +172,56 @@
 
         checkOrder("pkg5/Interfaces.D.html",
                 "Start of links <p>",
-                "../pkg5/Interfaces.A.html#m0--\"><code>Interfaces.A.m0()",
-                "../pkg5/Interfaces.A.html#m1--\"><code>Interfaces.A.m1()",
-                "../pkg5/Interfaces.A.html#m2--\"><code>Interfaces.A.m2()",
-                "../pkg5/Interfaces.A.html#m3--\"><code>Interfaces.A.m3()",
-                "../pkg5/Interfaces.D.html#m--\"><code>m()",
-                "../pkg5/Interfaces.D.html#n--\"><code>n()",
-                "../pkg5/Interfaces.C.html#o--\"><code>Interfaces.C.o()",
+                "Interfaces.A.html#m0--\"><code>Interfaces.A.m0()",
+                "Interfaces.A.html#m1--\"><code>Interfaces.A.m1()",
+                "Interfaces.A.html#m2--\"><code>Interfaces.A.m2()",
+                "Interfaces.A.html#m3--\"><code>Interfaces.A.m3()",
+                "#m--\"><code>m()",
+                "#n--\"><code>n()",
+                "Interfaces.C.html#o--\"><code>Interfaces.C.o()",
                 "End of links",
 
                 // Check @see links
                 "See Also:",
-                "../pkg5/Interfaces.A.html#m0--\"><code>Interfaces.A.m0()",
-                "../pkg5/Interfaces.A.html#m1--\"><code>Interfaces.A.m1()",
-                "../pkg5/Interfaces.A.html#m2--\"><code>Interfaces.A.m2()",
-                "../pkg5/Interfaces.A.html#m3--\"><code>Interfaces.A.m3()",
-                "../pkg5/Interfaces.D.html#m--\"><code>m()",
-                "../pkg5/Interfaces.D.html#n--\"><code>n()",
-                "../pkg5/Interfaces.C.html#o--\"><code>Interfaces.C.o()",
+                "Interfaces.A.html#m0--\"><code>Interfaces.A.m0()",
+                "Interfaces.A.html#m1--\"><code>Interfaces.A.m1()",
+                "Interfaces.A.html#m2--\"><code>Interfaces.A.m2()",
+                "Interfaces.A.html#m3--\"><code>Interfaces.A.m3()",
+                "#m--\"><code>m()",
+                "#n--\"><code>n()",
+                "Interfaces.C.html#o--\"><code>Interfaces.C.o()",
 
                 // Check properties
-                "Properties declared in interface&nbsp;pkg5.<a href=\"../pkg5/Interfaces.A.html\" "
+                "Properties declared in interface&nbsp;pkg5.<a href=\"Interfaces.A.html\" "
                 + "title=\"interface in pkg5\">Interfaces.A</a>",
 
                 // Check nested classes
                 "Nested classes/interfaces declared in interface&nbsp;pkg5.",
                 "Interfaces.A",
-                "../pkg5/Interfaces.A.AA.html",
+                "Interfaces.A.AA.html",
                 "Interfaces.A.AA",
 
                 // Check Fields
-                "Fields declared in interface&nbsp;pkg5.<a href=\"../pkg5/Interfaces.A.html",
-                "../pkg5/Interfaces.A.html#f",
-                "../pkg5/Interfaces.A.html#QUOTE\">QUOTE",
-                "../pkg5/Interfaces.A.html#rate\">rate",
+                "Fields declared in interface&nbsp;pkg5.<a href=\"Interfaces.A.html",
+                "Interfaces.A.html#f",
+                "Interfaces.A.html#QUOTE\">QUOTE",
+                "Interfaces.A.html#rate\">rate",
 
                 // Check Method Summary
                 "Method Summary",
-                "../pkg5/Interfaces.D.html#m--\">m",
-                "../pkg5/Interfaces.D.html#n--\">n",
+                "#m--\">m",
+                "#n--\">n",
 
                 // Check footnotes
-                "Methods declared in interface&nbsp;pkg5.<a href=\"../pkg5/Interfaces.A.html",
-                "../pkg5/Interfaces.A.html#getRate--\">getRate",
-                "../pkg5/Interfaces.A.html#rateProperty--\">rateProperty",
-                "../pkg5/Interfaces.A.html#setRate-double-",
-                "Methods declared in interface&nbsp;pkg5.<a href=\"../pkg5/Interfaces.B.html",
-                "../pkg5/Interfaces.B.html#m1--\">m1",
-                "../pkg5/Interfaces.B.html#m3--\">m3",
-                "Methods declared in interface&nbsp;pkg5.<a href=\"../pkg5/Interfaces.C.html",
-                "<a href=\"../pkg5/Interfaces.C.html#o--\">o</a>"
+                "Methods declared in interface&nbsp;pkg5.<a href=\"Interfaces.A.html",
+                "Interfaces.A.html#getRate--\">getRate",
+                "Interfaces.A.html#rateProperty--\">rateProperty",
+                "Interfaces.A.html#setRate-double-",
+                "Methods declared in interface&nbsp;pkg5.<a href=\"Interfaces.B.html",
+                "Interfaces.B.html#m1--\">m1",
+                "Interfaces.B.html#m3--\">m3",
+                "Methods declared in interface&nbsp;pkg5.<a href=\"Interfaces.C.html",
+                "<a href=\"Interfaces.C.html#o--\">o</a>"
         );
 
         // Test synthetic values and valuesof of an enum.
--- a/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,9 +53,9 @@
 
         // With just one package, all general pages link to the single package page.
         checkOutput("com/pkg/C.html", true,
-            "<a href=\"../../com/pkg/package-summary.html\">Package</a>");
+            "<a href=\"package-summary.html\">Package</a>");
         checkOutput("com/pkg/package-tree.html", true,
-            "<li><a href=\"../../com/pkg/package-summary.html\">Package</a></li>");
+            "<li><a href=\"package-summary.html\">Package</a></li>");
         checkOutput("deprecated-list.html", true,
             "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>");
         checkOutput("index-all.html", true,
--- a/test/langtools/jdk/javadoc/doclet/testPackageSummary/TestPackageSummary.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testPackageSummary/TestPackageSummary.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,23 +49,23 @@
         checkOutput("pkg/package-summary.html", true,
                 "<tbody>\n"
                 + "<tr class=\"altColor\">\n"
-                + "<th class=\"colFirst\" scope=\"row\"><a href=\"../pkg/C0.html\" title=\"class in pkg\">C0</a></th>\n"
+                + "<th class=\"colFirst\" scope=\"row\"><a href=\"C0.html\" title=\"class in pkg\">C0</a></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr class=\"rowColor\">\n"
-                + "<th class=\"colFirst\" scope=\"row\"><a href=\"../pkg/C1.html\" title=\"class in pkg\">C1</a></th>\n"
+                + "<th class=\"colFirst\" scope=\"row\"><a href=\"C1.html\" title=\"class in pkg\">C1</a></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr class=\"altColor\">\n"
-                + "<th class=\"colFirst\" scope=\"row\"><a href=\"../pkg/C2.html\" title=\"class in pkg\">C2</a></th>\n"
+                + "<th class=\"colFirst\" scope=\"row\"><a href=\"C2.html\" title=\"class in pkg\">C2</a></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr class=\"rowColor\">\n"
-                + "<th class=\"colFirst\" scope=\"row\"><a href=\"../pkg/C3.html\" title=\"class in pkg\">C3</a></th>\n"
+                + "<th class=\"colFirst\" scope=\"row\"><a href=\"C3.html\" title=\"class in pkg\">C3</a></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "<tr class=\"altColor\">\n"
-                + "<th class=\"colFirst\" scope=\"row\"><a href=\"../pkg/C4.html\" title=\"class in pkg\">C4</a></th>\n"
+                + "<th class=\"colFirst\" scope=\"row\"><a href=\"C4.html\" title=\"class in pkg\">C4</a></th>\n"
                 + "<td class=\"colLast\">&nbsp;</td>\n"
                 + "</tr>\n"
                 + "</tbody>\n"
--- a/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,10 +59,10 @@
 
         checkOutput("pkg/PublicChild.html", true,
                 // Field inheritence from non-public superclass.
-                "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">"
+                "<a href=\"#fieldInheritedFromParent\">"
                 + "fieldInheritedFromParent</a>",
                 // Method inheritance from non-public superclass.
-                "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent-int-\">"
+                "<a href=\"#methodInheritedFromParent-int-\">"
                 + "methodInheritedFromParent</a>",
                 // private class does not show up in tree
                 "<ul class=\"inheritance\">\n"
@@ -77,7 +77,7 @@
                 "<pre>public&nbsp;void&nbsp;methodInheritedFromParent&#8203;(int&nbsp;p1)",
                 "<dl>\n"
                 + "<dt>All Implemented Interfaces:</dt>\n"
-                + "<dd><code><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">"
+                + "<dd><code><a href=\"PublicInterface.html\" title=\"interface in pkg\">"
                 + "PublicInterface</a></code></dd>\n"
                 + "</dl>");
 
@@ -95,27 +95,27 @@
         checkOutput("pkg/PublicChild.html", false,
                 // Should not document comments from private inherited interfaces
                 "<td class=\"colLast\"><code><span class=\"memberNameLink\">" +
-                "<a href=\"../pkg/PublicChild.html#methodInterface-int-\">" +
+                "<a href=\"#methodInterface-int-\">" +
                 "methodInterface</a></span>&#8203;(int&nbsp;p1)</code>\n" +
                 "<div class=\"block\">Comment from interface.</div>\n</td>",
                 // and similarly one more
                 "<td class=\"colLast\"><code><span class=\"memberNameLink\">" +
-                "<a href=\"../pkg/PublicChild.html#methodInterface2-int-\">" +
+                "<a href=\"#methodInterface2-int-\">" +
                 "methodInterface2</a></span>&#8203;(int&nbsp;p1)</code>\n" +
                 "<div class=\"block\">Comment from interface.</div>\n</td>"
         );
 
         checkOutput("pkg/PublicInterface.html", true,
                 // Field inheritance from non-public superinterface.
-                "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">"
+                "<a href=\"#fieldInheritedFromInterface\">"
                 + "fieldInheritedFromInterface</a>",
                 // Method inheritance from non-public superinterface.
-                "<a href=\"../pkg/PublicInterface.html#methodInterface-int-\">"
+                "<a href=\"#methodInterface-int-\">"
                 + "methodInterface</a>",
                 //Make sure implemented interfaces from private superclass are inherited
                 "<dl>\n"
                 + "<dt>All Known Implementing Classes:</dt>\n"
-                + "<dd><code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">"
+                + "<dd><code><a href=\"PublicChild.html\" title=\"class in pkg\">"
                 + "PublicChild</a></code></dd>\n"
                 + "</dl>");
 
@@ -132,7 +132,7 @@
         checkOutput("pkg2/C.html", false,
                 //Do not inherit private interface method with generic parameters.
                 //This method has been implemented.
-                "<span class=\"memberNameLink\"><a href=\"../pkg2/I.html#hello-T-\">hello</a></span>");
+                "<span class=\"memberNameLink\"><a href=\"I.html#hello-T-\">hello</a></span>");
 
         checkOutput("constant-values.html", false,
                 // Make inherited constant are documented correctly.
@@ -150,27 +150,27 @@
         checkOutput("pkg/PublicChild.html", true,
                 // Field inheritence from non-public superclass.
                 "Fields inherited from class&nbsp;pkg."
-                + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+                + "<a href=\"PrivateParent.html\" title=\"class in pkg\">"
                 + "PrivateParent</a>",
-                "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">"
+                "<a href=\"PrivateParent.html#fieldInheritedFromParent\">"
                 + "fieldInheritedFromParent</a>",
                 // Method inheritence from non-public superclass.
                 "Methods inherited from class&nbsp;pkg."
-                + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+                + "<a href=\"PrivateParent.html\" title=\"class in pkg\">"
                 + "PrivateParent</a>",
-                "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent-int-\">"
+                "<a href=\"PrivateParent.html#methodInheritedFromParent-int-\">"
                 + "methodInheritedFromParent</a>",
                 // Should document that a method overrides method from private class.
                 "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent-char:A-int-T-V-java.util.List-\">"
+                + "<dd><code><a href=\"PrivateParent.html#methodOverridenFromParent-char:A-int-T-V-java.util.List-\">"
                 + "methodOverridenFromParent</a></code>&nbsp;in class&nbsp;<code>"
-                + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+                + "<a href=\"PrivateParent.html\" title=\"class in pkg\">"
                 + "PrivateParent</a></code></dd>",
                 // Should document that a method is specified by private interface.
                 "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">"
+                + "<dd><code><a href=\"PrivateInterface.html#methodInterface-int-\">"
                 + "methodInterface</a></code>&nbsp;in interface&nbsp;<code>"
-                + "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+                + "<a href=\"PrivateInterface.html\" title=\"interface in pkg\">"
                 + "PrivateInterface</a></code></dd>",
                 // Should mention that any documentation was copied.
                 "Description copied from",
@@ -178,9 +178,9 @@
                 "extends",
                 "<dl>\n"
                 + "<dt>All Implemented Interfaces:</dt>\n"
-                + "<dd><code><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+                + "<dd><code><a href=\"PrivateInterface.html\" title=\"interface in pkg\">"
                 + "PrivateInterface</a></code>, "
-                + "<code><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">"
+                + "<code><a href=\"PublicInterface.html\" title=\"interface in pkg\">"
                 + "PublicInterface</a></code></dd>\n"
                 + "</dl>",
                 "<pre>public class <span class=\"typeNameLabel\">PublicChild</span>");
@@ -188,13 +188,13 @@
         checkOutput("pkg/PublicInterface.html", true,
                 // Field inheritence from non-public superinterface.
                 "Fields inherited from interface&nbsp;pkg."
-                + "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+                + "<a href=\"PrivateInterface.html\" title=\"interface in pkg\">"
                 + "PrivateInterface</a>",
-                "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">"
+                "<a href=\"PrivateInterface.html#fieldInheritedFromInterface\">"
                 + "fieldInheritedFromInterface</a>",
                 // Method inheritance from non-public superinterface.
                 "Methods inherited from interface&nbsp;pkg."
-                + "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+                + "<a href=\"PrivateInterface.html\" title=\"interface in pkg\">"
                 + "PrivateInterface</a>",
                 // Extend documented private classes or interfaces
                 "extends",
@@ -202,14 +202,14 @@
                 //Make sure implemented interfaces from private superclass are inherited
                 "<dl>\n"
                 + "<dt>All Known Implementing Classes:</dt>\n"
-                + "<dd><code><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+                + "<dd><code><a href=\"PrivateParent.html\" title=\"class in pkg\">"
                 + "PrivateParent</a></code>, "
-                + "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild"
+                + "<code><a href=\"PublicChild.html\" title=\"class in pkg\">PublicChild"
                 + "</a></code></dd>\n"
                 + "</dl>");
 
         checkOutput("pkg/PrivateInterface.html", true,
-                "<a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">"
+                "<a href=\"#methodInterface-int-\">"
                 + "methodInterface</a>"
         );
 
@@ -217,11 +217,11 @@
                 //Since private flag is used, we can document that private interface method
                 //with generic parameters has been implemented.
                 "<span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code>"
-                + "<a href=\"../pkg2/I.html#hello-T-\">I</a></code></span>",
+                + "<a href=\"I.html#hello-T-\">I</a></code></span>",
                 "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
-                + "<dd><code><a href=\"../pkg2/I.html#hello-T-\">hello</a></code>"
+                + "<dd><code><a href=\"I.html#hello-T-\">hello</a></code>"
                 + "&nbsp;in interface&nbsp;<code>"
-                + "<a href=\"../pkg2/I.html\" title=\"interface in pkg2\">I</a>"
+                + "<a href=\"I.html\" title=\"interface in pkg2\">I</a>"
                 + "&lt;java.lang.String&gt;</code></dd>");
 
         checkOutput("pkg/PrivateParent.html", true,
--- a/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,62 +47,62 @@
         checkExit(Exit.OK);
 
         checkOutput("pkg/MyClass.html", true,
-                "<pre>public final&nbsp;<a href=\"../pkg/ObjectProperty.html\" "
+                "<pre>public final&nbsp;<a href=\"ObjectProperty.html\" "
                 + "title=\"class in pkg\">ObjectProperty</a>"
-                + "&lt;<a href=\"../pkg/MyObj.html\" "
+                + "&lt;<a href=\"MyObj.html\" "
                 + "title=\"class in pkg\">MyObj</a>&gt; goodProperty</pre>\n"
                 + "<div class=\"block\">This is an Object property where the "
                 + "Object is a single Object.</div>\n"
                 + "<dl>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg/MyClass.html#getGood--\"><code>getGood()</code></a>, \n"
-                + "<a href=\"../pkg/MyClass.html#setGood-pkg.MyObj-\">"
+                + "<dd><a href=\"#getGood--\"><code>getGood()</code></a>, \n"
+                + "<a href=\"#setGood-pkg.MyObj-\">"
                 + "<code>setGood(MyObj)</code></a></dd>\n"
                 + "</dl>",
 
-                "<pre>public final&nbsp;<a href=\"../pkg/ObjectProperty.html\" "
+                "<pre>public final&nbsp;<a href=\"ObjectProperty.html\" "
                 + "title=\"class in pkg\">ObjectProperty</a>"
-                + "&lt;<a href=\"../pkg/MyObj.html\" "
+                + "&lt;<a href=\"MyObj.html\" "
                 + "title=\"class in pkg\">MyObj</a>[]&gt; badProperty</pre>\n"
                 + "<div class=\"block\">This is an Object property where the "
                 + "Object is an array.</div>\n"
                 + "<dl>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg/MyClass.html#getBad--\"><code>getBad()</code></a>, \n"
-                + "<a href=\"../pkg/MyClass.html#setBad-pkg.MyObj:A-\">"
+                + "<dd><a href=\"#getBad--\"><code>getBad()</code></a>, \n"
+                + "<a href=\"#setBad-pkg.MyObj:A-\">"
                 + "<code>setBad(MyObj[])</code></a></dd>\n"
                 + "</dl>",
 
                 // id should not be used in the property table
                 "<tr class=\"altColor\">\n"
-                + "<td class=\"colFirst\"><code><a href=\"../pkg/ObjectProperty.html\" "
-                + "title=\"class in pkg\">ObjectProperty</a>&lt;<a href=\"../pkg/MyObj.html\" "
+                + "<td class=\"colFirst\"><code><a href=\"ObjectProperty.html\" "
+                + "title=\"class in pkg\">ObjectProperty</a>&lt;<a href=\"MyObj.html\" "
                 + "title=\"class in pkg\">MyObj</a>[]&gt;</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/MyClass.html#badProperty\">bad</a></span></code></th>",
+                + "<a href=\"#badProperty\">bad</a></span></code></th>",
 
                 // id should be used in the method table
                 "<tr id=\"i0\" class=\"altColor\">\n"
-                + "<td class=\"colFirst\"><code><a href=\"../pkg/ObjectProperty.html\" "
-                + "title=\"class in pkg\">ObjectProperty</a>&lt;<a href=\"../pkg/MyObj.html\" "
+                + "<td class=\"colFirst\"><code><a href=\"ObjectProperty.html\" "
+                + "title=\"class in pkg\">ObjectProperty</a>&lt;<a href=\"MyObj.html\" "
                 + "title=\"class in pkg\">MyObj</a>[]&gt;</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../pkg/MyClass.html#badProperty--\">badProperty</a></span>()</code></th>"
+                + "<a href=\"#badProperty--\">badProperty</a></span>()</code></th>"
         );
 
         checkOutput("pkg/MyClassT.html", true,
-                "<pre>public final&nbsp;<a href=\"../pkg/ObjectProperty.html\" "
+                "<pre>public final&nbsp;<a href=\"ObjectProperty.html\" "
                 + "title=\"class in pkg\">ObjectProperty</a>"
-                + "&lt;java.util.List&lt;<a href=\"../pkg/MyClassT.html\" "
+                + "&lt;java.util.List&lt;<a href=\"MyClassT.html\" "
                 + "title=\"type parameter in MyClassT\">T</a>&gt;&gt; "
                 + "listProperty</pre>\n"
                 + "<div class=\"block\">This is an Object property where the "
                 + "Object is a single <code>List&lt;T&gt;</code>.</div>\n"
                 + "<dl>\n"
                 + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-                + "<dd><a href=\"../pkg/MyClassT.html#getList--\">"
+                + "<dd><a href=\"#getList--\">"
                 + "<code>getList()</code></a>, \n"
-                + "<a href=\"../pkg/MyClassT.html#setList-java.util.List-\">"
+                + "<a href=\"#setList-java.util.List-\">"
                 + "<code>setList(List)</code></a></dd>\n"
                 + "</dl>"
         );
--- a/test/langtools/jdk/javadoc/doclet/testRelativeLinks/TestRelativeLinks.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testRelativeLinks/TestRelativeLinks.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug      4460354 8014636 8043186
+ * @bug      4460354 8014636 8043186 8195805
  * @summary  Test to make sure that relative paths are redirected in the
  *           output so that they are not broken.
  * @author   jamieh
@@ -67,7 +67,12 @@
             "<a href=\"./pkg/relative-field-link.html\">relative field link</a>",
             "<a href=\"./pkg/relative-method-link.html\">relative method link</a>",
             "<a href=\"./pkg/relative-package-link.html\">relative package link</a>",
-            " <a href=\"./pkg/relative-multi-line-link.html\">relative-multi-line-link</a>.",
+            " <a href=\"./pkg/relative-multi-line-link.html\">relative-multi-line-link</a>.");
+
+        // This is not a relative path and should not be redirected.
+        checkOutput("index-all.html", true,
+            "<div class=\"block\"><a name=\"masters\"></a>");
+        checkOutput("index-all.html", false,
             "<div class=\"block\"><a name=\"./pkg/masters\"></a>");
 
         // PACKAGE USE
--- a/test/langtools/jdk/javadoc/doclet/testRepeatedAnnotations/TestRepeatedAnnotations.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testRepeatedAnnotations/TestRepeatedAnnotations.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,91 +47,91 @@
         checkExit(Exit.OK);
 
         checkOutput("pkg/C.html", true,
-                "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+                "<a href=\"ContaineeSynthDoc.html\" "
                 + "title=\"annotation in pkg\">@ContaineeSynthDoc</a> "
-                + "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+                + "<a href=\"ContaineeSynthDoc.html\" "
                 + "title=\"annotation in pkg\">@ContaineeSynthDoc</a>",
-                "<a href=\"../pkg/ContaineeRegDoc.html\" "
+                "<a href=\"ContaineeRegDoc.html\" "
                 + "title=\"annotation in pkg\">@ContaineeRegDoc</a> "
-                + "<a href=\"../pkg/ContaineeRegDoc.html\" "
+                + "<a href=\"ContaineeRegDoc.html\" "
                 + "title=\"annotation in pkg\">@ContaineeRegDoc</a>",
-                "<a href=\"../pkg/RegContainerDoc.html\" "
+                "<a href=\"RegContainerDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContainerDoc</a>"
                 + "({"
-                + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+                + "<a href=\"RegContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>,"
-                + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+                + "<a href=\"RegContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})");
 
         checkOutput("pkg/D.html", true,
-                "<a href=\"../pkg/RegDoc.html\" title=\"annotation in pkg\">@RegDoc</a>"
-                + "(<a href=\"../pkg/RegDoc.html#x--\">x</a>=1)",
-                "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
-                + "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>=1)",
-                "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
-                + "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>={1,2})",
-                "<a href=\"../pkg/NonSynthDocContainer.html\" "
+                "<a href=\"RegDoc.html\" title=\"annotation in pkg\">@RegDoc</a>"
+                + "(<a href=\"RegDoc.html#x--\">x</a>=1)",
+                "<a href=\"RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
+                + "(<a href=\"RegArryDoc.html#y--\">y</a>=1)",
+                "<a href=\"RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
+                + "(<a href=\"RegArryDoc.html#y--\">y</a>={1,2})",
+                "<a href=\"NonSynthDocContainer.html\" "
                 + "title=\"annotation in pkg\">@NonSynthDocContainer</a>"
                 + "("
-                + "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
-                + "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>=1))");
+                + "<a href=\"RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
+                + "(<a href=\"RegArryDoc.html#y--\">y</a>=1))");
 
         checkOutput("pkg1/C.html", true,
-                "<a href=\"../pkg1/RegContainerValDoc.html\" "
+                "<a href=\"RegContainerValDoc.html\" "
                 + "title=\"annotation in pkg1\">@RegContainerValDoc</a>"
-                + "(<a href=\"../pkg1/RegContainerValDoc.html#value--\">value</a>={"
-                + "<a href=\"../pkg1/RegContaineeNotDoc.html\" "
+                + "(<a href=\"RegContainerValDoc.html#value--\">value</a>={"
+                + "<a href=\"RegContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>,"
-                + "<a href=\"../pkg1/RegContaineeNotDoc.html\" "
+                + "<a href=\"RegContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>},"
-                + "<a href=\"../pkg1/RegContainerValDoc.html#y--\">y</a>=3)",
-                "<a href=\"../pkg1/ContainerValDoc.html\" "
+                + "<a href=\"RegContainerValDoc.html#y--\">y</a>=3)",
+                "<a href=\"ContainerValDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContainerValDoc</a>"
-                + "(<a href=\"../pkg1/ContainerValDoc.html#value--\">value</a>={"
-                + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+                + "(<a href=\"ContainerValDoc.html#value--\">value</a>={"
+                + "<a href=\"ContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>,"
-                + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+                + "<a href=\"ContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>},"
-                + "<a href=\"../pkg1/ContainerValDoc.html#x--\">x</a>=1)");
+                + "<a href=\"ContainerValDoc.html#x--\">x</a>=1)");
 
         checkOutput("pkg/C.html", false,
-                "<a href=\"../pkg/RegContaineeDoc.html\" "
+                "<a href=\"RegContaineeDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContaineeDoc</a> "
-                + "<a href=\"../pkg/RegContaineeDoc.html\" "
+                + "<a href=\"RegContaineeDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContaineeDoc</a>",
-                "<a href=\"../pkg/RegContainerNotDoc.html\" "
+                "<a href=\"RegContainerNotDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContainerNotDoc</a>"
-                + "(<a href=\"../pkg/RegContainerNotDoc.html#value--\">value</a>={"
-                + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+                + "(<a href=\"RegContainerNotDoc.html#value--\">value</a>={"
+                + "<a href=\"RegContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>,"
-                + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+                + "<a href=\"RegContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})");
 
         checkOutput("pkg1/C.html", false,
-                "<a href=\"../pkg1/ContaineeSynthDoc.html\" "
+                "<a href=\"ContaineeSynthDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeSynthDoc</a> "
-                + "<a href=\"../pkg1/ContaineeSynthDoc.html\" "
+                + "<a href=\"ContaineeSynthDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>",
-                "<a href=\"../pkg1/RegContainerValNotDoc.html\" "
+                "<a href=\"RegContainerValNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@RegContainerValNotDoc</a>"
-                + "(<a href=\"../pkg1/RegContainerValNotDoc.html#value--\">value</a>={"
-                + "<a href=\"../pkg1/RegContaineeDoc.html\" "
+                + "(<a href=\"RegContainerValNotDoc.html#value--\">value</a>={"
+                + "<a href=\"RegContaineeDoc.html\" "
                 + "title=\"annotation in pkg1\">@RegContaineeDoc</a>,"
-                + "<a href=\"../pkg1/RegContaineeDoc.html\" "
+                + "<a href=\"RegContaineeDoc.html\" "
                 + "title=\"annotation in pkg1\">@RegContaineeDoc</a>},"
-                + "<a href=\"../pkg1/RegContainerValNotDoc.html#y--\">y</a>=4)",
-                "<a href=\"../pkg1/ContainerValNotDoc.html\" "
+                + "<a href=\"RegContainerValNotDoc.html#y--\">y</a>=4)",
+                "<a href=\"ContainerValNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContainerValNotDoc</a>"
-                + "(<a href=\"../pkg1/ContainerValNotDoc.html#value--\">value</a>={"
-                + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+                + "(<a href=\"ContainerValNotDoc.html#value--\">value</a>={"
+                + "<a href=\"ContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>,"
-                + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+                + "<a href=\"ContaineeNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>},"
-                + "<a href=\"../pkg1/ContainerValNotDoc.html#x--\">x</a>=2)",
-                "<a href=\"../pkg1/ContainerSynthNotDoc.html\" "
+                + "<a href=\"ContainerValNotDoc.html#x--\">x</a>=2)",
+                "<a href=\"ContainerSynthNotDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContainerSynthNotDoc</a>("
-                + "<a href=\"../pkg1/ContainerSynthNotDoc.html#value--\">value</a>="
-                + "<a href=\"../pkg1/ContaineeSynthDoc.html\" "
+                + "<a href=\"ContainerSynthNotDoc.html#value--\">value</a>="
+                + "<a href=\"ContaineeSynthDoc.html\" "
                 + "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>)");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,10 +50,10 @@
             "<code>List</code>",
             "<dl>\n"
             + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
-            + "<dd><a href=\"../pkg/Test.InnerOne.html#foo--\"><code>Test.InnerOne.foo()</code></a>, \n"
-            + "<a href=\"../pkg/Test.InnerOne.html#bar-java.lang.Object-\"><code>Test.InnerOne.bar(Object)</code></a>, \n"
+            + "<dd><a href=\"Test.InnerOne.html#foo--\"><code>Test.InnerOne.foo()</code></a>, \n"
+            + "<a href=\"Test.InnerOne.html#bar-java.lang.Object-\"><code>Test.InnerOne.bar(Object)</code></a>, \n"
             + "<a href=\"http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#see\">Javadoc</a>, \n"
-            + "<a href=\"../pkg/Test.InnerOne.html#baz-float-\"><code>something</code></a></dd>\n"
+            + "<a href=\"Test.InnerOne.html#baz-float-\"><code>something</code></a></dd>\n"
             + "</dl>");
 
         checkOutput("pkg/Test.html", false,
--- a/test/langtools/jdk/javadoc/doclet/testSubTitle/TestSubTitle.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testSubTitle/TestSubTitle.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,7 +51,7 @@
 
         checkOutput("pkg/C.html", true,
                 "<div class=\"subTitle\"><span class=\"packageLabelInType\">" +
-                "Package</span>&nbsp;<a href=\"../pkg/package-summary.html\">pkg</a></div>");
+                "Package</span>&nbsp;<a href=\"package-summary.html\">pkg</a></div>");
 
         checkOutput("pkg/package-summary.html", false,
             "<p class=\"subTitle\">\n" +
--- a/test/langtools/jdk/javadoc/doclet/testThrowsTag/TestThrowsTag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testThrowsTag/TestThrowsTag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,14 +48,14 @@
         checkExit(Exit.OK);
 
         checkOutput("pkg/C.html", true,
-            "<dd><code><a href=\"../pkg/T1.html\" title=\"class in pkg\">T1</a></code> - the first throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T2.html\" title=\"class in pkg\">T2</a></code> - the second throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T3.html\" title=\"class in pkg\">T3</a></code> - the third throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T4.html\" title=\"class in pkg\">T4</a></code> - the fourth throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T5.html\" title=\"class in pkg\">T5</a></code> - the first inherited throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T6.html\" title=\"class in pkg\">T6</a></code> - the second inherited throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T7.html\" title=\"class in pkg\">T7</a></code> - the third inherited throws tag.</dd>\n" +
-            "<dd><code><a href=\"../pkg/T8.html\" title=\"class in pkg\">T8</a></code> - the fourth inherited throws tag.</dd>"
+            "<dd><code><a href=\"T1.html\" title=\"class in pkg\">T1</a></code> - the first throws tag.</dd>\n" +
+            "<dd><code><a href=\"T2.html\" title=\"class in pkg\">T2</a></code> - the second throws tag.</dd>\n" +
+            "<dd><code><a href=\"T3.html\" title=\"class in pkg\">T3</a></code> - the third throws tag.</dd>\n" +
+            "<dd><code><a href=\"T4.html\" title=\"class in pkg\">T4</a></code> - the fourth throws tag.</dd>\n" +
+            "<dd><code><a href=\"T5.html\" title=\"class in pkg\">T5</a></code> - the first inherited throws tag.</dd>\n" +
+            "<dd><code><a href=\"T6.html\" title=\"class in pkg\">T6</a></code> - the second inherited throws tag.</dd>\n" +
+            "<dd><code><a href=\"T7.html\" title=\"class in pkg\">T7</a></code> - the third inherited throws tag.</dd>\n" +
+            "<dd><code><a href=\"T8.html\" title=\"class in pkg\">T8</a></code> - the fourth inherited throws tag.</dd>"
         );
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testTitleInHref/TestTitleInHref.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testTitleInHref/TestTitleInHref.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,9 +50,9 @@
 
         checkOutput("pkg/Links.html", true,
                 //Test to make sure that the title shows up in a class link.
-                "<a href=\"../pkg/Class.html\" title=\"class in pkg\">",
+                "<a href=\"Class.html\" title=\"class in pkg\">",
                 //Test to make sure that the title shows up in an interface link.
-                "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">",
+                "<a href=\"Interface.html\" title=\"interface in pkg\">",
                 //Test to make sure that the title shows up in cross link shows up
                 "<a href=\"" + uri + "/java/io/File.html?is-external=true\" "
                 + "title=\"class or interface in java.io\" class=\"externalLink\">"
--- a/test/langtools/jdk/javadoc/doclet/testTypeAnnotations/TestTypeAnnotations.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testTypeAnnotations/TestTypeAnnotations.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,675 +49,675 @@
 
         // Test for type annotations on Class Extends (ClassExtends.java).
         checkOutput("typeannos/MyClass.html", true,
-                "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation "
-                + "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedClass.html\" "
+                "extends <a href=\"ClassExtA.html\" title=\"annotation "
+                + "in typeannos\">@ClassExtA</a> <a href=\"ParameterizedClass.html\" "
                 + "title=\"class in typeannos\">ParameterizedClass</a>&lt;<a href=\""
-                + "../typeannos/ClassExtB.html\" title=\"annotation in typeannos\">"
+                + "ClassExtB.html\" title=\"annotation in typeannos\">"
                 + "@ClassExtB</a> java.lang.String&gt;",
 
-                "implements <a href=\"../typeannos/ClassExtB.html\" title=\""
+                "implements <a href=\"ClassExtB.html\" title=\""
                 + "annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, "
-                + "<a href=\"../typeannos/ClassExtA.html\" title=\"annotation in "
-                + "typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedInterface.html\" "
+                + "<a href=\"ClassExtA.html\" title=\"annotation in "
+                + "typeannos\">@ClassExtA</a> <a href=\"ParameterizedInterface.html\" "
                 + "title=\"interface in typeannos\">ParameterizedInterface</a>&lt;"
-                + "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in "
+                + "<a href=\"ClassExtB.html\" title=\"annotation in "
                 + "typeannos\">@ClassExtB</a> java.lang.String&gt;</pre>");
 
         checkOutput("typeannos/MyInterface.html", true,
-                "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation "
-                + "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/"
+                "extends <a href=\"ClassExtA.html\" title=\"annotation "
+                + "in typeannos\">@ClassExtA</a> <a href=\""
                 + "ParameterizedInterface.html\" title=\"interface in typeannos\">"
-                + "ParameterizedInterface</a>&lt;<a href=\"../typeannos/ClassExtA.html\" "
+                + "ParameterizedInterface</a>&lt;<a href=\"ClassExtA.html\" "
                 + "title=\"annotation in typeannos\">@ClassExtA</a> java.lang.String&gt;, "
-                + "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in "
+                + "<a href=\"ClassExtB.html\" title=\"annotation in "
                 + "typeannos\">@ClassExtB</a> java.lang.CharSequence</pre>");
 
         // Test for type annotations on Class Parameters (ClassParameters.java).
         checkOutput("typeannos/ExtendsBound.html", true,
                 "class <span class=\"typeNameLabel\">ExtendsBound&lt;K extends <a "
-                + "href=\"../typeannos/ClassParamA.html\" title=\"annotation in "
+                + "href=\"ClassParamA.html\" title=\"annotation in "
                 + "typeannos\">@ClassParamA</a> java.lang.String&gt;</span>");
 
         checkOutput("typeannos/ExtendsGeneric.html", true,
                 "<pre>class <span class=\"typeNameLabel\">ExtendsGeneric&lt;K extends "
-                + "<a href=\"../typeannos/ClassParamA.html\" title=\"annotation in "
-                + "typeannos\">@ClassParamA</a> <a href=\"../typeannos/Unannotated.html\" "
+                + "<a href=\"ClassParamA.html\" title=\"annotation in "
+                + "typeannos\">@ClassParamA</a> <a href=\"Unannotated.html\" "
                 + "title=\"class in typeannos\">Unannotated</a>&lt;<a href=\""
-                + "../typeannos/ClassParamB.html\" title=\"annotation in typeannos\">"
+                + "ClassParamB.html\" title=\"annotation in typeannos\">"
                 + "@ClassParamB</a> java.lang.String&gt;&gt;</span>");
 
         checkOutput("typeannos/TwoBounds.html", true,
                 "<pre>class <span class=\"typeNameLabel\">TwoBounds&lt;K extends <a href=\""
-                + "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">"
-                + "@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos/"
+                + "ClassParamA.html\" title=\"annotation in typeannos\">"
+                + "@ClassParamA</a> java.lang.String,V extends <a href=\""
                 + "ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB"
                 + "</a> java.lang.String&gt;</span>");
 
         checkOutput("typeannos/Complex1.html", true,
-                "class <span class=\"typeNameLabel\">Complex1&lt;K extends <a href=\"../"
-                + "typeannos/ClassParamA.html\" title=\"annotation in typeannos\">"
+                "class <span class=\"typeNameLabel\">Complex1&lt;K extends <a href=\""
+                + "ClassParamA.html\" title=\"annotation in typeannos\">"
                 + "@ClassParamA</a> java.lang.String &amp; java.lang.Runnable&gt;</span>");
 
         checkOutput("typeannos/Complex2.html", true,
                 "class <span class=\"typeNameLabel\">Complex2&lt;K extends java.lang."
-                + "String &amp; <a href=\"../typeannos/ClassParamB.html\" title=\""
+                + "String &amp; <a href=\"ClassParamB.html\" title=\""
                 + "annotation in typeannos\">@ClassParamB</a> java.lang.Runnable&gt;</span>");
 
         checkOutput("typeannos/ComplexBoth.html", true,
                 "class <span class=\"typeNameLabel\">ComplexBoth&lt;K extends <a href=\""
-                + "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\""
-                + ">@ClassParamA</a> java.lang.String &amp; <a href=\"../typeannos/"
+                + "ClassParamA.html\" title=\"annotation in typeannos\""
+                + ">@ClassParamA</a> java.lang.String &amp; <a href=\""
                 + "ClassParamA.html\" title=\"annotation in typeannos\">@ClassParamA"
                 + "</a> java.lang.Runnable&gt;</span>");
 
         // Test for type annotations on fields (Fields.java).
         checkOutput("typeannos/DefaultScope.html", true,
-                "<pre><a href=\"../typeannos/Parameterized.html\" title=\"class in "
-                + "typeannos\">Parameterized</a>&lt;<a href=\"../typeannos/FldA.html\" "
+                "<pre><a href=\"Parameterized.html\" title=\"class in "
+                + "typeannos\">Parameterized</a>&lt;<a href=\"FldA.html\" "
                 + "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a "
-                + "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">"
+                + "href=\"FldB.html\" title=\"annotation in typeannos\">"
                 + "@FldB</a> java.lang.String&gt; bothTypeArgs</pre>",
 
-                "<pre><a href=\"../typeannos/FldA.html\" title=\"annotation in "
-                + "typeannos\">@FldA</a> java.lang.String <a href=\"../typeannos/"
+                "<pre><a href=\"FldA.html\" title=\"annotation in "
+                + "typeannos\">@FldA</a> java.lang.String <a href=\""
                 + "FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] "
                 + "array1Deep</pre>",
 
-                "<pre>java.lang.String <a href=\"../typeannos/FldB.html\" "
+                "<pre>java.lang.String <a href=\"FldB.html\" "
                 + "title=\"annotation in typeannos\">@FldB</a> [][] array2SecondOld</pre>",
 
                 // When JDK-8068737, we should change the order
-                "<pre><a href=\"../typeannos/FldD.html\" title=\"annotation in typeannos\">"
+                "<pre><a href=\"FldD.html\" title=\"annotation in typeannos\">"
                 + "@FldD</a> java.lang.String "
-                + "<a href=\"../typeannos/FldC.html\" title=\"annotation in typeannos\">@FldC</a> "
-                + "<a href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] "
-                + "<a href=\"../typeannos/FldC.html\" title=\"annotation in typeannos\">@FldC</a> "
-                + "<a href=\"../typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> [] "
+                + "<a href=\"FldC.html\" title=\"annotation in typeannos\">@FldC</a> "
+                + "<a href=\"FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] "
+                + "<a href=\"FldC.html\" title=\"annotation in typeannos\">@FldC</a> "
+                + "<a href=\"FldA.html\" title=\"annotation in typeannos\">@FldA</a> [] "
                 + "array2Deep</pre>");
 
         checkOutput("typeannos/ModifiedScoped.html", true,
-                "<pre>public final&nbsp;<a href=\"../typeannos/Parameterized.html\" "
-                + "title=\"class in typeannos\">Parameterized</a>&lt;<a href=\"../"
-                + "typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> "
-                + "<a href=\"../typeannos/Parameterized.html\" title=\"class in "
-                + "typeannos\">Parameterized</a>&lt;<a href=\"../typeannos/FldA.html\" "
+                "<pre>public final&nbsp;<a href=\"Parameterized.html\" "
+                + "title=\"class in typeannos\">Parameterized</a>&lt;<a href=\""
+                + "FldA.html\" title=\"annotation in typeannos\">@FldA</a> "
+                + "<a href=\"Parameterized.html\" title=\"class in "
+                + "typeannos\">Parameterized</a>&lt;<a href=\"FldA.html\" "
                 + "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a "
-                + "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">"
-                + "@FldB</a> java.lang.String&gt;,<a href=\"../typeannos/FldB.html\" "
+                + "href=\"FldB.html\" title=\"annotation in typeannos\">"
+                + "@FldB</a> java.lang.String&gt;,<a href=\"FldB.html\" "
                 + "title=\"annotation in typeannos\">@FldB</a> java.lang.String&gt; "
                 + "nestedParameterized</pre>",
 
-                "<pre>public final&nbsp;<a href=\"../typeannos/FldA.html\" "
+                "<pre>public final&nbsp;<a href=\"FldA.html\" "
                 + "title=\"annotation in typeannos\">@FldA</a> java.lang.String[][] "
                 + "array2</pre>");
 
         // Test for type annotations on method return types (MethodReturnType.java).
         checkOutput("typeannos/MtdDefaultScope.html", true,
-                "<pre>public&nbsp;&lt;T&gt;&nbsp;<a href=\"../typeannos/MRtnA.html\" "
+                "<pre>public&nbsp;&lt;T&gt;&nbsp;<a href=\"MRtnA.html\" "
                 + "title=\"annotation in typeannos\">@MRtnA</a> java.lang.String"
                 + "&nbsp;method()</pre>",
 
                 // When JDK-8068737 is fixed, we should change the order
-                "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in typeannos\">"
+                "<pre><a href=\"MRtnA.html\" title=\"annotation in typeannos\">"
                 + "@MRtnA</a> java.lang.String "
-                + "<a href=\"../typeannos/MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> [] "
-                + "<a href=\"../typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> []"
+                + "<a href=\"MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> [] "
+                + "<a href=\"MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> []"
                 + "&nbsp;array2Deep()</pre>",
 
-                "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in "
+                "<pre><a href=\"MRtnA.html\" title=\"annotation in "
                 + "typeannos\">@MRtnA</a> java.lang.String[][]&nbsp;array2()</pre>");
 
         checkOutput("typeannos/MtdModifiedScoped.html", true,
-                "<pre>public final&nbsp;<a href=\"../typeannos/MtdParameterized.html\" "
-                + "title=\"class in typeannos\">MtdParameterized</a>&lt;<a href=\"../"
-                + "typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> "
-                + "<a href=\"../typeannos/MtdParameterized.html\" title=\"class in "
-                + "typeannos\">MtdParameterized</a>&lt;<a href=\"../typeannos/MRtnA."
+                "<pre>public final&nbsp;<a href=\"MtdParameterized.html\" "
+                + "title=\"class in typeannos\">MtdParameterized</a>&lt;<a href=\""
+                + "MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> "
+                + "<a href=\"MtdParameterized.html\" title=\"class in "
+                + "typeannos\">MtdParameterized</a>&lt;<a href=\"MRtnA."
                 + "html\" title=\"annotation in typeannos\">@MRtnA</a> java.lang."
-                + "String,<a href=\"../typeannos/MRtnB.html\" title=\"annotation in "
-                + "typeannos\">@MRtnB</a> java.lang.String&gt;,<a href=\"../typeannos/"
+                + "String,<a href=\"MRtnB.html\" title=\"annotation in "
+                + "typeannos\">@MRtnB</a> java.lang.String&gt;,<a href=\""
                 + "MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> java."
                 + "lang.String&gt;&nbsp;nestedMtdParameterized()</pre>");
 
         // Test for type annotations on method type parameters (MethodTypeParameters.java).
         checkOutput("typeannos/UnscopedUnmodified.html", true,
-                "<pre>&lt;K extends <a href=\"../typeannos/MTyParamA.html\" title=\""
+                "<pre>&lt;K extends <a href=\"MTyParamA.html\" title=\""
                 + "annotation in typeannos\">@MTyParamA</a> java.lang.String&gt;"
                 + "&nbsp;void&nbsp;methodExtends()</pre>",
 
-                "<pre>&lt;K extends <a href=\"../typeannos/MTyParamA.html\" title=\""
-                + "annotation in typeannos\">@MTyParamA</a> <a href=\"../typeannos/"
+                "<pre>&lt;K extends <a href=\"MTyParamA.html\" title=\""
+                + "annotation in typeannos\">@MTyParamA</a> <a href=\""
                 + "MtdTyParameterized.html\" title=\"class in typeannos\">"
-                + "MtdTyParameterized</a>&lt;<a href=\"../typeannos/MTyParamB.html\" "
+                + "MtdTyParameterized</a>&lt;<a href=\"MTyParamB.html\" "
                 + "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String"
                 + "&gt;&gt;&nbsp;void&nbsp;nestedExtends()</pre>");
 
         checkOutput("typeannos/PublicModifiedMethods.html", true,
-                "<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/"
+                "<pre>public final&nbsp;&lt;K extends <a href=\""
                 + "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> "
                 + "java.lang.String&gt;&nbsp;void&nbsp;methodExtends()</pre>",
 
-                "<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/"
+                "<pre>public final&nbsp;&lt;K extends <a href=\""
                 + "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> "
-                + "java.lang.String,V extends <a href=\"../typeannos/MTyParamA.html\" "
-                + "title=\"annotation in typeannos\">@MTyParamA</a> <a href=\"../"
-                + "typeannos/MtdTyParameterized.html\" title=\"class in typeannos\">"
-                + "MtdTyParameterized</a>&lt;<a href=\"../typeannos/MTyParamB.html\" "
+                + "java.lang.String,V extends <a href=\"MTyParamA.html\" "
+                + "title=\"annotation in typeannos\">@MTyParamA</a> <a href=\""
+                + "MtdTyParameterized.html\" title=\"class in typeannos\">"
+                + "MtdTyParameterized</a>&lt;<a href=\"MTyParamB.html\" "
                 + "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String"
                 + "&gt;&gt;&nbsp;void&nbsp;dual()</pre>");
 
         // Test for type annotations on parameters (Parameters.java).
         checkOutput("typeannos/Parameters.html", true,
-                "<pre>void&nbsp;unannotated&#8203;(<a href=\"../typeannos/"
+                "<pre>void&nbsp;unannotated&#8203;(<a href=\""
                 + "ParaParameterized.html\" title=\"class in typeannos\">"
                 + "ParaParameterized</a>&lt;java.lang.String,java.lang.String&gt;"
                 + "&nbsp;a)</pre>",
 
-                "<pre>void&nbsp;nestedParaParameterized&#8203;(<a href=\"../typeannos/"
+                "<pre>void&nbsp;nestedParaParameterized&#8203;(<a href=\""
+                + "ParaParameterized.html\" title=\"class in typeannos\">"
+                + "ParaParameterized</a>&lt;<a href=\"ParamA.html\" "
+                + "title=\"annotation in typeannos\">@ParamA</a> <a href=\""
                 + "ParaParameterized.html\" title=\"class in typeannos\">"
-                + "ParaParameterized</a>&lt;<a href=\"../typeannos/ParamA.html\" "
-                + "title=\"annotation in typeannos\">@ParamA</a> <a href=\"../"
-                + "typeannos/ParaParameterized.html\" title=\"class in typeannos\">"
-                + "ParaParameterized</a>&lt;<a href=\"../typeannos/ParamA.html\" "
+                + "ParaParameterized</a>&lt;<a href=\"ParamA.html\" "
                 + "title=\"annotation in typeannos\">@ParamA</a> java.lang.String,"
-                + "<a href=\"../typeannos/ParamB.html\" title=\"annotation in "
-                + "typeannos\">@ParamB</a> java.lang.String&gt;,<a href=\"../"
-                + "typeannos/ParamB.html\" title=\"annotation in typeannos\">@ParamB"
+                + "<a href=\"ParamB.html\" title=\"annotation in "
+                + "typeannos\">@ParamB</a> java.lang.String&gt;,<a href=\""
+                + "ParamB.html\" title=\"annotation in typeannos\">@ParamB"
                 + "</a> java.lang.String&gt;&nbsp;a)</pre>",
 
                 // When JDK-8068737 is fixed, we should change the order
-                "<pre>void&nbsp;array2Deep&#8203;(<a href=\"../typeannos/ParamA.html\" "
+                "<pre>void&nbsp;array2Deep&#8203;(<a href=\"ParamA.html\" "
                 + "title=\"annotation in typeannos\">@ParamA</a> java.lang.String "
-                + "<a href=\"../typeannos/ParamB.html\" title=\"annotation in typeannos\">"
+                + "<a href=\"ParamB.html\" title=\"annotation in typeannos\">"
                 + "@ParamB</a> [] "
-                + "<a href=\"../typeannos/ParamA.html\" title=\"annotation in typeannos\">"
+                + "<a href=\"ParamA.html\" title=\"annotation in typeannos\">"
                 + "@ParamA</a> []"
                 + "&nbsp;a)</pre>");
 
         // Test for type annotations on throws (Throws.java).
         checkOutput("typeannos/ThrDefaultUnmodified.html", true,
                 "<pre>void&nbsp;oneException()\n"
-                + "           throws <a href=\"../typeannos/ThrA.html\" title=\""
+                + "           throws <a href=\"ThrA.html\" title=\""
                 + "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>",
 
                 "<pre>void&nbsp;twoExceptions()\n"
-                + "            throws <a href=\"../typeannos/ThrA.html\" title=\""
+                + "            throws <a href=\"ThrA.html\" title=\""
                 + "annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n"
-                + "                   <a href=\"../typeannos/ThrA.html\" title=\""
+                + "                   <a href=\"ThrA.html\" title=\""
                 + "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>");
 
         checkOutput("typeannos/ThrPublicModified.html", true,
                 "<pre>public final&nbsp;void&nbsp;oneException&#8203;(java.lang.String&nbsp;a)\n"
-                + "                        throws <a href=\"../typeannos/ThrA.html\" "
+                + "                        throws <a href=\"ThrA.html\" "
                 + "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>",
 
                 "<pre>public final&nbsp;void&nbsp;twoExceptions&#8203;(java.lang.String&nbsp;a)\n"
-                + "                         throws <a href=\"../typeannos/ThrA.html\" "
+                + "                         throws <a href=\"ThrA.html\" "
                 + "title=\"annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n"
-                + "                                <a href=\"../typeannos/ThrA.html\" "
+                + "                                <a href=\"ThrA.html\" "
                 + "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>");
 
         checkOutput("typeannos/ThrWithValue.html", true,
                 "<pre>void&nbsp;oneException()\n"
-                + "           throws <a href=\"../typeannos/ThrB.html\" title=\""
+                + "           throws <a href=\"ThrB.html\" title=\""
                 + "annotation in typeannos\">@ThrB</a>("
                 + "\"m\") java.lang.Exception</pre>",
 
                 "<pre>void&nbsp;twoExceptions()\n"
-                + "            throws <a href=\"../typeannos/ThrB.html\" title=\""
+                + "            throws <a href=\"ThrB.html\" title=\""
                 + "annotation in typeannos\">@ThrB</a>("
                 + "\"m\") java.lang.RuntimeException,\n"
-                + "                   <a href=\"../typeannos/ThrA.html\" title=\""
+                + "                   <a href=\"ThrA.html\" title=\""
                 + "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>");
 
         // Test for type annotations on type parameters (TypeParameters.java).
         checkOutput("typeannos/TestMethods.html", true,
-                "<pre>&lt;K,<a href=\"../typeannos/TyParaA.html\" title=\"annotation in typeannos\">"
-                + "@TyParaA</a> V extends <a href=\"../typeannos/TyParaA.html\" "
+                "<pre>&lt;K,<a href=\"TyParaA.html\" title=\"annotation in typeannos\">"
+                + "@TyParaA</a> V extends <a href=\"TyParaA.html\" "
                 + "title=\"annotation in typeannos\">@TyParaA</a> "
                 + "java.lang.String&gt;&nbsp;void&nbsp;secondAnnotated()</pre>"
         );
 
         // Test for type annotations on wildcard type (Wildcards.java).
         checkOutput("typeannos/BoundTest.html", true,
-                "<pre>void&nbsp;wcExtends&#8203;(<a href=\"../typeannos/MyList.html\" "
+                "<pre>void&nbsp;wcExtends&#8203;(<a href=\"MyList.html\" "
                 + "title=\"class in typeannos\">MyList</a>&lt;? extends <a href=\""
-                + "../typeannos/WldA.html\" title=\"annotation in typeannos\">@WldA"
+                + "WldA.html\" title=\"annotation in typeannos\">@WldA"
                 + "</a> java.lang.String&gt;&nbsp;l)</pre>",
 
-                "<pre><a href=\"../typeannos/MyList.html\" title=\"class in "
-                + "typeannos\">MyList</a>&lt;? super <a href=\"../typeannos/WldA.html\" "
+                "<pre><a href=\"MyList.html\" title=\"class in "
+                + "typeannos\">MyList</a>&lt;? super <a href=\"WldA.html\" "
                 + "title=\"annotation in typeannos\">@WldA</a> java.lang.String&gt;"
                 + "&nbsp;returnWcSuper()</pre>");
 
         checkOutput("typeannos/BoundWithValue.html", true,
-                "<pre>void&nbsp;wcSuper&#8203;(<a href=\"../typeannos/MyList.html\" title=\""
-                + "class in typeannos\">MyList</a>&lt;? super <a href=\"../typeannos/"
+                "<pre>void&nbsp;wcSuper&#8203;(<a href=\"MyList.html\" title=\""
+                + "class in typeannos\">MyList</a>&lt;? super <a href=\""
                 + "WldB.html\" title=\"annotation in typeannos\">@WldB</a>("
                 + "\"m\") java.lang."
                 + "String&gt;&nbsp;l)</pre>",
 
-                "<pre><a href=\"../typeannos/MyList.html\" title=\"class in "
-                + "typeannos\">MyList</a>&lt;? extends <a href=\"../typeannos/WldB."
+                "<pre><a href=\"MyList.html\" title=\"class in "
+                + "typeannos\">MyList</a>&lt;? extends <a href=\"WldB."
                 + "html\" title=\"annotation in typeannos\">@WldB</a>("
                 + "\"m\") java.lang.String"
                 + "&gt;&nbsp;returnWcExtends()</pre>");
 
         // Test for receiver annotations (Receivers.java).
         checkOutput("typeannos/DefaultUnmodified.html", true,
-                "<pre>void&nbsp;withException&#8203;(<a href=\"../typeannos/RcvrA.html\" "
+                "<pre>void&nbsp;withException&#8203;(<a href=\"RcvrA.html\" "
                 + "title=\"annotation in typeannos\">@RcvrA</a>&nbsp;"
                 + "DefaultUnmodified&nbsp;this)\n"
                 + "            throws java."
                 + "lang.Exception</pre>",
 
-                "<pre>java.lang.String&nbsp;nonVoid&#8203;(<a href=\"../typeannos/RcvrA."
-                + "html\" title=\"annotation in typeannos\">@RcvrA</a> <a href=\"../"
-                + "typeannos/RcvrB.html\" title=\"annotation in typeannos\">@RcvrB"
+                "<pre>java.lang.String&nbsp;nonVoid&#8203;(<a href=\"RcvrA."
+                + "html\" title=\"annotation in typeannos\">@RcvrA</a> <a href=\""
+                + "RcvrB.html\" title=\"annotation in typeannos\">@RcvrB"
                 + "</a>(\"m\")"
                 + "&nbsp;DefaultUnmodified&nbsp;this)</pre>",
 
                 "<pre>&lt;T extends java.lang.Runnable&gt;&nbsp;void&nbsp;accept&#8203;("
-                + "<a href=\"../typeannos/RcvrA.html\" title=\"annotation in "
+                + "<a href=\"RcvrA.html\" title=\"annotation in "
                 + "typeannos\">@RcvrA</a>&nbsp;DefaultUnmodified&nbsp;this,\n"
                 + "                                           T&nbsp;r)\n"
                 + "                                    throws java.lang.Exception</pre>");
 
         checkOutput("typeannos/PublicModified.html", true,
                 "<pre>public final&nbsp;java.lang.String&nbsp;nonVoid&#8203;(<a href=\""
-                + "../typeannos/RcvrA.html\" title=\"annotation in typeannos\">"
+                + "RcvrA.html\" title=\"annotation in typeannos\">"
                 + "@RcvrA</a>&nbsp;PublicModified&nbsp;this)</pre>",
 
                 "<pre>public final&nbsp;&lt;T extends java.lang.Runnable&gt;&nbsp;"
-                + "void&nbsp;accept&#8203;(<a href=\"../typeannos/RcvrA.html\" title=\""
+                + "void&nbsp;accept&#8203;(<a href=\"RcvrA.html\" title=\""
                 + "annotation in typeannos\">@RcvrA</a>&nbsp;PublicModified&nbsp;this,\n"
                 + "                                                        T&nbsp;r)\n"
                 + "                                                 throws java.lang.Exception</pre>");
 
         checkOutput("typeannos/WithValue.html", true,
                 "<pre>&lt;T extends java.lang.Runnable&gt;&nbsp;void&nbsp;accept&#8203;("
-                + "<a href=\"../typeannos/RcvrB.html\" title=\"annotation in "
+                + "<a href=\"RcvrB.html\" title=\"annotation in "
                 + "typeannos\">@RcvrB</a>("
                 + "\"m\")&nbsp;WithValue&nbsp;this,\n"
                 + "                                           T&nbsp;r)\n"
                 + "                                    throws java.lang.Exception</pre>");
 
         checkOutput("typeannos/WithFinal.html", true,
-                "<pre>java.lang.String&nbsp;nonVoid&#8203;(<a href=\"../typeannos/RcvrB.html\" "
+                "<pre>java.lang.String&nbsp;nonVoid&#8203;(<a href=\"RcvrB.html\" "
                 + "title=\"annotation in typeannos\">@RcvrB</a>(\"m\") "
-                + "<a href=\"../typeannos/WithFinal.html\" title=\"class in typeannos\">"
+                + "<a href=\"WithFinal.html\" title=\"class in typeannos\">"
                 + "WithFinal</a>&nbsp;afield)</pre>");
 
         checkOutput("typeannos/WithBody.html", true,
-                "<pre>void&nbsp;field&#8203;(<a href=\"../typeannos/RcvrA.html\" title=\""
+                "<pre>void&nbsp;field&#8203;(<a href=\"RcvrA.html\" title=\""
                 + "annotation in typeannos\">@RcvrA</a>&nbsp;WithBody&nbsp;this)</pre>");
 
         checkOutput("typeannos/Generic2.html", true,
-                "<pre>void&nbsp;test2&#8203;(<a href=\"../typeannos/RcvrA.html\" title=\""
+                "<pre>void&nbsp;test2&#8203;(<a href=\"RcvrA.html\" title=\""
                 + "annotation in typeannos\">@RcvrA</a>&nbsp;Generic2&lt;X&gt;&nbsp;this)</pre>");
 
 
         // Test for repeated type annotations (RepeatedAnnotations.java).
         checkOutput("typeannos/RepeatingAtClassLevel.html", true,
-                "<pre><a href=\"../typeannos/RepTypeA.html\" title=\"annotation in "
-                + "typeannos\">@RepTypeA</a> <a href=\"../typeannos/RepTypeA.html\" "
+                "<pre><a href=\"RepTypeA.html\" title=\"annotation in "
+                + "typeannos\">@RepTypeA</a> <a href=\"RepTypeA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeA</a>\n<a href="
-                + "\"../typeannos/RepTypeB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeB</a> <a href=\"../typeannos/RepTypeB.html\" title="
+                + "\"RepTypeB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeB</a> <a href=\"RepTypeB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeB</a>\nclass <span class="
                 + "\"typeNameLabel\">RepeatingAtClassLevel</span>\nextends "
                 + "java.lang.Object</pre>");
 
 // @ignore 8146008
 //        checkOutput("typeannos/RepeatingAtClassLevel2.html", true,
-//                "<pre><a href=\"../typeannos/RepTypeUseA.html\" title=\"annotation "
-//                + "in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html"
+//                "<pre><a href=\"RepTypeUseA.html\" title=\"annotation "
+//                + "in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html"
 //                + "\" title=\"annotation in typeannos\">@RepTypeUseA</a>\n<a href="
-//                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos"
-//                + "\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+//                + "\"RepTypeUseB.html\" title=\"annotation in typeannos"
+//                + "\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" "
 //                + "title=\"annotation in typeannos\">@RepTypeUseB</a>\nclass <span "
 //                + "class=\"typeNameLabel\">RepeatingAtClassLevel2</span>\nextends "
 //                + "java.lang.Object</pre>");
 //
 //        checkOutput("typeannos/RepeatingAtClassLevel2.html", true,
-//                "<pre><a href=\"../typeannos/RepAllContextsA.html\" title=\"annotation"
-//                + " in typeannos\">@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html"
+//                "<pre><a href=\"RepAllContextsA.html\" title=\"annotation"
+//                + " in typeannos\">@RepAllContextsA</a> <a href=\"RepAllContextsA.html"
 //                + "\" title=\"annotation in typeannos\">@RepAllContextsA</a>\n<a href="
-//                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos"
-//                + "\">@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html"
+//                + "\"RepAllContextsB.html\" title=\"annotation in typeannos"
+//                + "\">@RepAllContextsB</a> <a href=\"RepAllContextsB.html"
 //                + "\" title=\"annotation in typeannos\">@RepAllContextsB</a>\n"
 //                + "class <span class=\"typeNameLabel\">RepeatingAtClassLevel3</span>\n"
 //                + "extends java.lang.Object</pre>");
 
         checkOutput("typeannos/RepeatingOnConstructor.html", true,
-                "<pre><a href=\"../typeannos/RepConstructorA.html\" title=\"annotation "
-                + "in typeannos\">@RepConstructorA</a> <a href=\"../typeannos/RepConstructorA.html"
+                "<pre><a href=\"RepConstructorA.html\" title=\"annotation "
+                + "in typeannos\">@RepConstructorA</a> <a href=\"RepConstructorA.html"
                 + "\" title=\"annotation in typeannos\">@RepConstructorA</a>\n<a href="
-                + "\"../typeannos/RepConstructorB.html\" title=\"annotation in typeannos"
-                + "\">@RepConstructorB</a> <a href=\"../typeannos/RepConstructorB.html"
+                + "\"RepConstructorB.html\" title=\"annotation in typeannos"
+                + "\">@RepConstructorB</a> <a href=\"RepConstructorB.html"
                 + "\" title=\"annotation in typeannos\">@RepConstructorB</a>\n"
                 + "RepeatingOnConstructor()</pre>",
 
-                "<pre><a href=\"../typeannos/RepConstructorA.html\" title=\"annotation in typeannos"
-                + "\">@RepConstructorA</a> <a href=\"../typeannos/RepConstructorA.html"
+                "<pre><a href=\"RepConstructorA.html\" title=\"annotation in typeannos"
+                + "\">@RepConstructorA</a> <a href=\"RepConstructorA.html"
                 + "\" title=\"annotation in typeannos\">@RepConstructorA</a>\n<a href="
-                + "\"../typeannos/RepConstructorB.html\" title=\"annotation in typeannos"
-                + "\">@RepConstructorB</a> <a href=\"../typeannos/RepConstructorB.html"
+                + "\"RepConstructorB.html\" title=\"annotation in typeannos"
+                + "\">@RepConstructorB</a> <a href=\"RepConstructorB.html"
                 + "\" title=\"annotation in typeannos\">@RepConstructorB</a>\n"
                 + "RepeatingOnConstructor&#8203;(int&nbsp;i,\n                       int&nbsp;j)</pre>",
 
-                "<pre><a href=\"../typeannos/RepAllContextsA.html\" title=\"annotation in typeannos"
-                + "\">@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html"
+                "<pre><a href=\"RepAllContextsA.html\" title=\"annotation in typeannos"
+                + "\">@RepAllContextsA</a> <a href=\"RepAllContextsA.html"
                 + "\" title=\"annotation in typeannos\">@RepAllContextsA</a>\n"
-                + "<a href=\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos"
-                + "\">@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html"
+                + "<a href=\"RepAllContextsB.html\" title=\"annotation in typeannos"
+                + "\">@RepAllContextsB</a> <a href=\"RepAllContextsB.html"
                 + "\" title=\"annotation in typeannos\">@RepAllContextsB</a>\n"
                 + "RepeatingOnConstructor&#8203;(int&nbsp;i,\n                       int&nbsp;j,\n"
                 + "                       int&nbsp;k)</pre>",
 
-                "<pre>RepeatingOnConstructor&#8203;(<a href=\"../typeannos/RepParameterA.html"
+                "<pre>RepeatingOnConstructor&#8203;(<a href=\"RepParameterA.html"
                 + "\" title=\"annotation in typeannos\">@RepParameterA</a> <a href="
-                + "\"../typeannos/RepParameterA.html\" title=\"annotation in typeannos"
-                + "\">@RepParameterA</a> <a href=\"../typeannos/RepParameterB.html"
+                + "\"RepParameterA.html\" title=\"annotation in typeannos"
+                + "\">@RepParameterA</a> <a href=\"RepParameterB.html"
                 + "\" title=\"annotation in typeannos\">@RepParameterB</a> "
-                + "<a href=\"../typeannos/RepParameterB.html\" title=\"annotation in typeannos"
+                + "<a href=\"RepParameterB.html\" title=\"annotation in typeannos"
                 + "\">@RepParameterB</a>\n                       java.lang.String&nbsp;parameter,\n"
-                + "                       <a href=\"../typeannos/RepParameterA.html\" "
+                + "                       <a href=\"RepParameterA.html\" "
                 + "title=\"annotation in typeannos\">@RepParameterA</a> <a href="
-                + "\"../typeannos/RepParameterA.html\" title=\"annotation in typeannos\">"
-                + "@RepParameterA</a> <a href=\"../typeannos/RepParameterB.html\" "
+                + "\"RepParameterA.html\" title=\"annotation in typeannos\">"
+                + "@RepParameterA</a> <a href=\"RepParameterB.html\" "
                 + "title=\"annotation in typeannos\">@RepParameterB</a> <a href="
-                + "\"../typeannos/RepParameterB.html\" title=\"annotation in typeannos\">"
+                + "\"RepParameterB.html\" title=\"annotation in typeannos\">"
                 + "@RepParameterB</a>\n                       java.lang.String "
-                + "<a href=\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" "
+                + "<a href=\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">@RepTypeUseB</a> "
-                + "<a href=\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">@RepTypeUseB</a> "
+                + "<a href=\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
                 + "@RepTypeUseB</a> ...&nbsp;vararg)</pre>"
         );
 
         checkOutput("typeannos/RepeatingOnConstructor.Inner.html", true,
-                "<code><span class=\"memberNameLink\"><a href=\"../typeannos/RepeatingOnConstructor.Inner.html"
+                "<code><span class=\"memberNameLink\"><a href=\""
                 + "#Inner-java.lang.String-java.lang.String...-\">Inner</a></span>"
                 + "&#8203;(java.lang.String&nbsp;parameter,\n     java.lang.String <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
                 + "@RepTypeUseB</a> ...&nbsp;vararg)</code>",
 
-                "Inner&#8203;(<a href=\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html"
+                "Inner&#8203;(<a href=\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
                 + "@RepTypeUseB</a>&nbsp;RepeatingOnConstructor&nbsp;this,\n      <a href="
-                + "\"../typeannos/RepParameterA.html\" title=\"annotation in typeannos\">"
-                + "@RepParameterA</a> <a href=\"../typeannos/RepParameterA.html\" title="
-                + "\"annotation in typeannos\">@RepParameterA</a> <a href=\"../typeannos/RepParameterB.html"
+                + "\"RepParameterA.html\" title=\"annotation in typeannos\">"
+                + "@RepParameterA</a> <a href=\"RepParameterA.html\" title="
+                + "\"annotation in typeannos\">@RepParameterA</a> <a href=\"RepParameterB.html"
                 + "\" title=\"annotation in typeannos\">@RepParameterB</a> <a href="
-                + "\"../typeannos/RepParameterB.html\" title=\"annotation in typeannos\">"
+                + "\"RepParameterB.html\" title=\"annotation in typeannos\">"
                 + "@RepParameterB</a>\n      java.lang.String&nbsp;parameter,\n"
-                + "      <a href=\"../typeannos/RepParameterA.html\" title=\"annotation in typeannos\">"
-                + "@RepParameterA</a> <a href=\"../typeannos/RepParameterA.html\" title="
-                + "\"annotation in typeannos\">@RepParameterA</a> <a href=\"../typeannos/RepParameterB.html"
+                + "      <a href=\"RepParameterA.html\" title=\"annotation in typeannos\">"
+                + "@RepParameterA</a> <a href=\"RepParameterA.html\" title="
+                + "\"annotation in typeannos\">@RepParameterA</a> <a href=\"RepParameterB.html"
                 + "\" title=\"annotation in typeannos\">@RepParameterB</a> <a href="
-                + "\"../typeannos/RepParameterB.html\" title=\"annotation in typeannos\">"
-                + "@RepParameterB</a>\n      java.lang.String <a href=\"../typeannos/RepTypeUseA.html"
+                + "\"RepParameterB.html\" title=\"annotation in typeannos\">"
+                + "@RepParameterB</a>\n      java.lang.String <a href=\"RepTypeUseA.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> ...&nbsp;vararg)");
 
         checkOutput("typeannos/RepeatingOnField.html", true,
                 "<code>(package private) java.lang.Integer</code></td>\n<th class=\"colSecond\" scope=\"row\">"
-                + "<code><span class=\"memberNameLink\"><a href=\"../typeannos/RepeatingOnField.html#i1"
+                + "<code><span class=\"memberNameLink\"><a href=\"#i1"
                 + "\">i1</a></span></code>",
 
-                "<code>(package private) <a href=\"../typeannos/RepTypeUseA.html\" "
+                "<code>(package private) <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href=\""
-                + "../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> java.lang.Integer</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href="
-                + "\"../typeannos/RepeatingOnField.html#i2\">i2</a></span></code>",
+                + "\"#i2\">i2</a></span></code>",
 
-                "<code>(package private) <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" "
+                "<code>(package private) <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeUseB</a> java.lang.Integer</code>"
                 + "</td>\n<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../typeannos/RepeatingOnField.html#i3\">i3</a></span></code>",
+                + "<a href=\"#i3\">i3</a></span></code>",
 
-                "<code>(package private) <a href=\"../typeannos/RepAllContextsA.html\" title=\""
-                + "annotation in typeannos\">@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html"
+                "<code>(package private) <a href=\"RepAllContextsA.html\" title=\""
+                + "annotation in typeannos\">@RepAllContextsA</a> <a href=\"RepAllContextsA.html"
                 + "\" title=\"annotation in typeannos\">@RepAllContextsA</a> <a href="
-                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html\" title="
+                + "\"RepAllContextsB.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsB</a> <a href=\"RepAllContextsB.html\" title="
                 + "\"annotation in typeannos\">@RepAllContextsB</a> java.lang.Integer</code>"
                 + "</td>\n<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../typeannos/RepeatingOnField.html#i4\">i4</a></span></code>",
+                + "<a href=\"#i4\">i4</a></span></code>",
 
-                "<code>(package private) java.lang.String <a href=\"../typeannos/RepTypeUseA.html"
+                "<code>(package private) java.lang.String <a href=\"RepTypeUseA.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> [] <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
                 + "@RepTypeUseB</a> []</code></td>\n<th class=\"colSecond\" scope=\"row\"><code><span class="
-                + "\"memberNameLink\"><a href=\"../typeannos/RepeatingOnField.html#sa"
+                + "\"memberNameLink\"><a href=\"#sa"
                 + "\">sa</a></span></code>",
 
-                "<pre><a href=\"../typeannos/RepFieldA.html\" title=\"annotation in typeannos\">"
-                + "@RepFieldA</a> <a href=\"../typeannos/RepFieldA.html\" title="
-                + "\"annotation in typeannos\">@RepFieldA</a>\n<a href=\"../typeannos/RepFieldB.html"
+                "<pre><a href=\"RepFieldA.html\" title=\"annotation in typeannos\">"
+                + "@RepFieldA</a> <a href=\"RepFieldA.html\" title="
+                + "\"annotation in typeannos\">@RepFieldA</a>\n<a href=\"RepFieldB.html"
                 + "\" title=\"annotation in typeannos\">@RepFieldB</a> <a href="
-                + "\"../typeannos/RepFieldB.html\" title=\"annotation in typeannos\">"
+                + "\"RepFieldB.html\" title=\"annotation in typeannos\">"
                 + "@RepFieldB</a>\njava.lang.Integer i1</pre>",
 
-                "<pre><a href=\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos"
-                + "\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html"
+                "<pre><a href=\"RepTypeUseA.html\" title=\"annotation in typeannos"
+                + "\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> "
-                + "<a href=\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
+                + "<a href=\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeUseB</a> java.lang.Integer i2</pre>",
 
-                "<pre><a href=\"../typeannos/RepFieldA.html\" title=\"annotation in typeannos\">"
-                + "@RepFieldA</a> <a href=\"../typeannos/RepFieldA.html\" title="
-                + "\"annotation in typeannos\">@RepFieldA</a>\n<a href=\"../typeannos/RepFieldB.html"
+                "<pre><a href=\"RepFieldA.html\" title=\"annotation in typeannos\">"
+                + "@RepFieldA</a> <a href=\"RepFieldA.html\" title="
+                + "\"annotation in typeannos\">@RepFieldA</a>\n<a href=\"RepFieldB.html"
                 + "\" title=\"annotation in typeannos\">@RepFieldB</a> <a href="
-                + "\"../typeannos/RepFieldB.html\" title=\"annotation in typeannos\">"
-                + "@RepFieldB</a>\n<a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html"
+                + "\"RepFieldB.html\" title=\"annotation in typeannos\">"
+                + "@RepFieldB</a>\n<a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeUseB</a> java.lang.Integer i3</pre>",
 
-                "<pre><a href=\"../typeannos/RepAllContextsA.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html"
+                "<pre><a href=\"RepAllContextsA.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsA</a> <a href=\"RepAllContextsA.html"
                 + "\" title=\"annotation in typeannos\">@RepAllContextsA</a>\n<a href="
-                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html"
+                + "\"RepAllContextsB.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsB</a> <a href=\"RepAllContextsB.html"
                 + "\" title=\"annotation in typeannos\">@RepAllContextsB</a>\n"
-                + "<a href=\"../typeannos/RepAllContextsA.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html\" "
+                + "<a href=\"RepAllContextsA.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsA</a> <a href=\"RepAllContextsA.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsA</a> <a href="
-                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html"
+                + "\"RepAllContextsB.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsB</a> <a href=\"RepAllContextsB.html"
                 + "\" title=\"annotation in typeannos\">@RepAllContextsB</a> java.lang.Integer i4</pre>",
 
-                "<pre>java.lang.String <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html"
+                "<pre>java.lang.String <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeUseB</a> [] <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseB</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
                 + "@RepTypeUseB</a> [] sa</pre>");
 
         checkOutput("typeannos/RepeatingOnMethod.html", true,
                 "<code>(package private) java.lang.String</code></td>\n<th class=\"colSecond\" scope=\"row\">"
                 + "<code><span class=\"memberNameLink\"><a href="
-                + "\"../typeannos/RepeatingOnMethod.html#test1--\">test1</a></span>()</code>",
+                + "\"#test1--\">test1</a></span>()</code>",
 
-                "<code>(package private) <a href=\"../typeannos/RepTypeUseA.html\" "
+                "<code>(package private) <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> java.lang.String</code>"
                 + "</td>\n<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../typeannos/RepeatingOnMethod.html#test2--\">test2</a>"
+                + "<a href=\"#test2--\">test2</a>"
                 + "</span>()</code>",
 
-                "<code>(package private) <a href=\"../typeannos/RepTypeUseA.html\" "
+                "<code>(package private) <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseB</a> java.lang.String</code>"
                 + "</td>\n<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\">"
-                + "<a href=\"../typeannos/RepeatingOnMethod.html#test3--\">test3</a>"
+                + "<a href=\"#test3--\">test3</a>"
                 + "</span>()</code>",
 
-                "<code>(package private) <a href=\"../typeannos/RepAllContextsA.html\" "
+                "<code>(package private) <a href=\"RepAllContextsA.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsA</a> <a href="
-                + "\"../typeannos/RepAllContextsA.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsB.html\" "
+                + "\"RepAllContextsA.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsA</a> <a href=\"RepAllContextsB.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsB</a> <a href="
-                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos\">"
+                + "\"RepAllContextsB.html\" title=\"annotation in typeannos\">"
                 + "@RepAllContextsB</a> java.lang.String</code></td>\n<th class=\"colSecond\" scope=\"row\">"
-                + "<code><span class=\"memberNameLink\"><a href=\"../typeannos/RepeatingOnMethod.html"
+                + "<code><span class=\"memberNameLink\"><a href=\""
                 + "#test4--\">test4</a></span>()</code>",
 
-                "<code><span class=\"memberNameLink\"><a href=\"../typeannos/RepeatingOnMethod.html"
+                "<code><span class=\"memberNameLink\"><a href=\""
                 + "#test5-java.lang.String-java.lang.String...-\">test5</a></span>"
                 + "&#8203;(java.lang.String&nbsp;parameter,\n     java.lang.String <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
                 + "@RepTypeUseB</a> ...&nbsp;vararg)</code>",
 
-                "<a href=\"../typeannos/RepMethodA.html\" title=\"annotation in typeannos\">"
-                + "@RepMethodA</a> <a href=\"../typeannos/RepMethodA.html\" title="
-                + "\"annotation in typeannos\">@RepMethodA</a>\n<a href=\"../typeannos/RepMethodB.html\""
+                "<a href=\"RepMethodA.html\" title=\"annotation in typeannos\">"
+                + "@RepMethodA</a> <a href=\"RepMethodA.html\" title="
+                + "\"annotation in typeannos\">@RepMethodA</a>\n<a href=\"RepMethodB.html\""
                 + " title=\"annotation in typeannos\">@RepMethodB</a> <a href="
-                + "\"../typeannos/RepMethodB.html\" title=\"annotation in typeannos\">"
+                + "\"RepMethodB.html\" title=\"annotation in typeannos\">"
                 + "@RepMethodB</a>\njava.lang.String&nbsp;test1()",
 
-                "<a href=\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" "
-                + "title=\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+                "<a href=\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" "
+                + "title=\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseB</a> java.lang.String&nbsp;test2()",
 
-                "<a href=\"../typeannos/RepMethodA.html\" title=\"annotation in typeannos\">"
-                + "@RepMethodA</a> <a href=\"../typeannos/RepMethodA.html\" title="
-                + "\"annotation in typeannos\">@RepMethodA</a>\n<a href=\"../typeannos/RepMethodB.html\" "
+                "<a href=\"RepMethodA.html\" title=\"annotation in typeannos\">"
+                + "@RepMethodA</a> <a href=\"RepMethodA.html\" title="
+                + "\"annotation in typeannos\">@RepMethodA</a>\n<a href=\"RepMethodB.html\" "
                 + "title=\"annotation in typeannos\">@RepMethodB</a> <a href="
-                + "\"../typeannos/RepMethodB.html\" title=\"annotation in typeannos\">"
-                + "@RepMethodB</a>\n<a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" "
+                + "\"RepMethodB.html\" title=\"annotation in typeannos\">"
+                + "@RepMethodB</a>\n<a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeUseB</a> java.lang.String&nbsp;test3()",
 
-                "<a href=\"../typeannos/RepAllContextsA.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html\" "
+                "<a href=\"RepAllContextsA.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsA</a> <a href=\"RepAllContextsA.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsA</a>\n<a href="
-                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html\" "
+                + "\"RepAllContextsB.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsB</a> <a href=\"RepAllContextsB.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsB</a>\n<a href="
-                + "\"../typeannos/RepAllContextsA.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsA</a> <a href=\"../typeannos/RepAllContextsA.html\" "
+                + "\"RepAllContextsA.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsA</a> <a href=\"RepAllContextsA.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsA</a> <a href="
-                + "\"../typeannos/RepAllContextsB.html\" title=\"annotation in typeannos\">"
-                + "@RepAllContextsB</a> <a href=\"../typeannos/RepAllContextsB.html\" "
+                + "\"RepAllContextsB.html\" title=\"annotation in typeannos\">"
+                + "@RepAllContextsB</a> <a href=\"RepAllContextsB.html\" "
                 + "title=\"annotation in typeannos\">@RepAllContextsB</a> java.lang.String&nbsp;test4()",
 
-                "java.lang.String&nbsp;test5&#8203;(<a href=\"../typeannos/RepTypeUseA.html\" "
+                "java.lang.String&nbsp;test5&#8203;(<a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseB</a>&nbsp;RepeatingOnMethod&nbsp;"
-                + "this,\n                       <a href=\"../typeannos/RepParameterA.html\" "
+                + "this,\n                       <a href=\"RepParameterA.html\" "
                 + "title=\"annotation in typeannos\">@RepParameterA</a> <a href="
-                + "\"../typeannos/RepParameterA.html\" title=\"annotation in typeannos\">"
-                + "@RepParameterA</a> <a href=\"../typeannos/RepParameterB.html\" "
+                + "\"RepParameterA.html\" title=\"annotation in typeannos\">"
+                + "@RepParameterA</a> <a href=\"RepParameterB.html\" "
                 + "title=\"annotation in typeannos\">@RepParameterB</a> <a href="
-                + "\"../typeannos/RepParameterB.html\" title=\"annotation in typeannos\">"
+                + "\"RepParameterB.html\" title=\"annotation in typeannos\">"
                 + "@RepParameterB</a>\n                       java.lang.String&nbsp;parameter,\n"
-                + "                       <a href=\"../typeannos/RepParameterA.html\" title="
-                + "\"annotation in typeannos\">@RepParameterA</a> <a href=\"../typeannos/RepParameterA.html\""
+                + "                       <a href=\"RepParameterA.html\" title="
+                + "\"annotation in typeannos\">@RepParameterA</a> <a href=\"RepParameterA.html\""
                 + " title=\"annotation in typeannos\">@RepParameterA</a> <a href="
-                + "\"../typeannos/RepParameterB.html\" title=\"annotation in typeannos\">"
-                + "@RepParameterB</a> <a href=\"../typeannos/RepParameterB.html\" title="
+                + "\"RepParameterB.html\" title=\"annotation in typeannos\">"
+                + "@RepParameterB</a> <a href=\"RepParameterB.html\" title="
                 + "\"annotation in typeannos\">@RepParameterB</a>\n                       "
-                + "java.lang.String <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" "
+                + "java.lang.String <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseB.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
+                + "\"RepTypeUseB.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" title="
                 + "\"annotation in typeannos\">@RepTypeUseB</a> ...&nbsp;vararg)");
 
         checkOutput("typeannos/RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod.html", true,
                 "<code>(package private) &lt;T&gt;&nbsp;java.lang.String</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href="
-                + "\"../typeannos/RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod.html#"
+                + "\"#"
                 + "genericMethod-T-\">genericMethod</a></span>&#8203;(T&nbsp;t)</code>",
 
                 "<code>(package private) &lt;T&gt;&nbsp;java.lang.String</code></td>\n"
                 + "<th class=\"colSecond\" scope=\"row\"><code><span class=\"memberNameLink\"><a href="
-                + "\"../typeannos/RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod.html#"
-                + "genericMethod2-T-\">genericMethod2</a></span>&#8203;(<a href=\"../typeannos/RepTypeUseA.html"
-                + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html"
-                + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html"
-                + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html"
+                + "\"#"
+                + "genericMethod2-T-\">genericMethod2</a></span>&#8203;(<a href=\"RepTypeUseA.html"
+                + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseA.html"
+                + "\" title=\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html"
+                + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html"
                 + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> T&nbsp;t)</code>",
 
                 "<code>(package private) java.lang.String</code></td>\n<th class=\"colSecond\" scope=\"row\"><code>"
-                + "<span class=\"memberNameLink\"><a href=\"../typeannos/RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod.html#"
+                + "<span class=\"memberNameLink\"><a href=\"#"
                 + "test--\">test</a></span>()</code>",
 
-                "java.lang.String&nbsp;test&#8203;(<a href=\"../typeannos/RepTypeUseA.html\" "
+                "java.lang.String&nbsp;test&#8203;(<a href=\"RepTypeUseA.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseA</a> <a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseB.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseB</a>&nbsp;"
                 + "RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod&lt;<a href="
-                + "\"../typeannos/RepTypeUseA.html\" title=\"annotation in typeannos\">"
-                + "@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseA.html\" title="
-                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"../typeannos/RepTypeUseB.html"
-                + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"../typeannos/RepTypeUseB.html\" "
+                + "\"RepTypeUseA.html\" title=\"annotation in typeannos\">"
+                + "@RepTypeUseA</a> <a href=\"RepTypeUseA.html\" title="
+                + "\"annotation in typeannos\">@RepTypeUseA</a> <a href=\"RepTypeUseB.html"
+                + "\" title=\"annotation in typeannos\">@RepTypeUseB</a> <a href=\"RepTypeUseB.html\" "
                 + "title=\"annotation in typeannos\">@RepTypeUseB</a> T&gt;&nbsp;this)");
 
         checkOutput("typeannos/RepeatingOnVoidMethodDeclaration.html", true,
-                "<a href=\"../typeannos/RepMethodA.html\" title=\"annotation in typeannos\">"
-                + "@RepMethodA</a> <a href=\"../typeannos/RepMethodA.html\" title="
-                + "\"annotation in typeannos\">@RepMethodA</a>\n<a href=\"../typeannos/RepMethodB.html"
+                "<a href=\"RepMethodA.html\" title=\"annotation in typeannos\">"
+                + "@RepMethodA</a> <a href=\"RepMethodA.html\" title="
+                + "\"annotation in typeannos\">@RepMethodA</a>\n<a href=\"RepMethodB.html"
                 + "\" title=\"annotation in typeannos\">@RepMethodB</a> <a href="
-                + "\"../typeannos/RepMethodB.html\" title=\"annotation in typeannos\">"
+                + "\"RepMethodB.html\" title=\"annotation in typeannos\">"
                 + "@RepMethodB</a>\nvoid&nbsp;test()");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testTypeParams/TestTypeParameters.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testTypeParams/TestTypeParameters.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,14 +57,14 @@
                 "<code>&lt;T&gt;&nbsp;java.lang.Object</code>");
 
         checkOutput("pkg/package-summary.html", true,
-                "C</a>&lt;E extends <a href=\"../pkg/Parent.html\" "
+                "C</a>&lt;E extends <a href=\"Parent.html\" "
                 + "title=\"class in pkg\">Parent</a>&gt;");
 
         checkOutput("pkg/class-use/Foo4.html", true,
-                "<a href=\"../../pkg/ClassUseTest3.html\" title=\"class in pkg\">"
-                + "ClassUseTest3</a>&lt;T extends <a href=\"../../pkg/ParamTest2.html\" "
+                "<a href=\"../ClassUseTest3.html\" title=\"class in pkg\">"
+                + "ClassUseTest3</a>&lt;T extends <a href=\"../ParamTest2.html\" "
                 + "title=\"class in pkg\">ParamTest2</a>&lt;java.util.List&lt;? extends "
-                + "<a href=\"../../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>&gt;&gt;&gt;");
+                + "<a href=\"../Foo4.html\" title=\"class in pkg\">Foo4</a>&gt;&gt;&gt;");
 
         // Nested type parameters
         checkOutput("pkg/C.html", true,
@@ -84,8 +84,8 @@
 
         checkOutput("pkg/ClassUseTest3.html", true,
             "public class <a href=\"../src-html/pkg/ClassUseTest3.html#line.28\">" +
-            "ClassUseTest3</a>&lt;T extends <a href=\"../pkg/ParamTest2.html\" " +
+            "ClassUseTest3</a>&lt;T extends <a href=\"ParamTest2.html\" " +
             "title=\"class in pkg\">ParamTest2</a>&lt;java.util.List&lt;? extends " +
-            "<a href=\"../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>&gt;&gt;&gt;");
+            "<a href=\"Foo4.html\" title=\"class in pkg\">Foo4</a>&gt;&gt;&gt;");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testTypeVariableLinks/TestTypeVariableLinks.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testTypeVariableLinks/TestTypeVariableLinks.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,8 +48,8 @@
         checkOutput("pkg1/C.html", true,
                 "<div class=\"block\">Linking to List.clear() <code>List.clear()</code></div>");
         checkOutput("pkg1/C.html", true,
-                "<div class=\"block\">Linking to Additional.doAction() <a href=\"../pkg1/Additional.html#doAction--\"><code>Additional.doAction()</code></a></div>");
+                "<div class=\"block\">Linking to Additional.doAction() <a href=\"Additional.html#doAction--\"><code>Additional.doAction()</code></a></div>");
         checkOutput("pkg1/C.html", true,
-                "<div class=\"block\">Linking to I.abstractAction() <a href=\"../pkg1/I.html#abstractAction--\"><code>I.abstractAction()</code></a></div>");
+                "<div class=\"block\">Linking to I.abstractAction() <a href=\"I.html#abstractAction--\"><code>I.abstractAction()</code></a></div>");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testUseOption/TestUseOption.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testUseOption/TestUseOption.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,56 +84,56 @@
           "that return types with arguments of type"
         );
         checkOutput("pkg1/class-use/UsedClass.html", true,
-          "<a href=\"../../pkg1/C1.html#methodInC1ReturningType--\">methodInC1ReturningType</a>"
+          "<a href=\"../C1.html#methodInC1ReturningType--\">methodInC1ReturningType</a>"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-          "Classes in <a href=\"../../pkg1/package-summary.html\">pkg1</a> that implement " +
-          "<a href=\"../../pkg1/UsedInterface.html\" title=\"interface in pkg1\">UsedInterface</a>"
+          "Classes in <a href=\"../package-summary.html\">pkg1</a> that implement " +
+          "<a href=\"../UsedInterface.html\" title=\"interface in pkg1\">UsedInterface</a>"
         );
         checkOutput("pkg1/class-use/UsedInterfaceA.html", true,
-          "Classes in <a href=\"../../pkg1/package-summary.html\">pkg1</a> that implement " +
-          "<a href=\"../../pkg1/UsedInterfaceA.html\" title=\"interface in pkg1\">UsedInterfaceA</a>"
+          "Classes in <a href=\"../package-summary.html\">pkg1</a> that implement " +
+          "<a href=\"../UsedInterfaceA.html\" title=\"interface in pkg1\">UsedInterfaceA</a>"
         );
         checkOutput("pkg1/class-use/UsedClass.html", false,
            "methodInC1Protected"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-           "<a href=\"../../pkg1/AnAbstract.html\" title=\"class in pkg1\">AnAbstract</a>"
+           "<a href=\"../AnAbstract.html\" title=\"class in pkg1\">AnAbstract</a>"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "../../pkg1/C10.html#withReturningTypeParameters--"
+            "../C10.html#withReturningTypeParameters--"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "../../pkg1/C10.html#withTypeParametersOfType-java.lang.Class-"
+            "../C10.html#withTypeParametersOfType-java.lang.Class-"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "\"../../pkg1/package-summary.html\">pkg1</a> that return " +
-            "<a href=\"../../pkg1/UsedInterface.html\" title=\"interface in pkg1\""
+            "\"../package-summary.html\">pkg1</a> that return " +
+            "<a href=\"../UsedInterface.html\" title=\"interface in pkg1\""
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "<a href=\"../../pkg1/C10.html#addAll-pkg1.UsedInterface...-\">addAll</a>"
+            "<a href=\"../C10.html#addAll-pkg1.UsedInterface...-\">addAll</a>"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "<a href=\"../../pkg1/C10.html#create-pkg1.UsedInterfaceA-pkg1." +
+            "<a href=\"../C10.html#create-pkg1.UsedInterfaceA-pkg1." +
             "UsedInterface-java.lang.String-\">"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "<a href=\"../../pkg1/C10.html#withTypeParametersOfType-java.lang.Class-\">" +
+            "<a href=\"../C10.html#withTypeParametersOfType-java.lang.Class-\">" +
             "withTypeParametersOfType</a>"
         );
         checkOutput("pkg1/class-use/UsedInterface.html", true,
-            "Subinterfaces of <a href=\"../../pkg1/UsedInterface.html\" title=\"interface in pkg1\">"
-            + "UsedInterface</a> in <a href=\"../../pkg1/package-summary.html\">pkg1",
+            "Subinterfaces of <a href=\"../UsedInterface.html\" title=\"interface in pkg1\">"
+            + "UsedInterface</a> in <a href=\"../package-summary.html\">pkg1",
             "<td class=\"colFirst\"><code>interface&nbsp;</code></td>\n<th class=\"colSecond\" scope=\"row\">"
-            + "<code><span class=\"memberNameLink\"><a href=\"../../pkg1/SubInterface.html\" "
+            + "<code><span class=\"memberNameLink\"><a href=\"../SubInterface.html\" "
             + "title=\"interface in pkg1\">SubInterface</a>&lt;T&gt;</span></code></th>"
         );
         checkOutput("pkg1/class-use/UsedThrowable.html", true,
-            "Methods in <a href=\"../../pkg1/package-summary.html\">pkg1</a> that throw "
-            + "<a href=\"../../pkg1/UsedThrowable.html\" title=\"class in pkg1\">UsedThrowable</a>",
+            "Methods in <a href=\"../package-summary.html\">pkg1</a> that throw "
+            + "<a href=\"../UsedThrowable.html\" title=\"class in pkg1\">UsedThrowable</a>",
             "<td class=\"colFirst\"><code>void</code></td>\n<th class=\"colSecond\" scope=\"row\"><span class="
             + "\"typeNameLabel\">C1.</span><code><span class=\"memberNameLink\">"
-            + "<a href=\"../../pkg1/C1.html#methodInC1ThrowsThrowable--\">methodInC1ThrowsThrowable"
+            + "<a href=\"../C1.html#methodInC1ThrowsThrowable--\">methodInC1ThrowsThrowable"
             + "</a></span>()</code></th>"
         );
     }
@@ -169,9 +169,9 @@
                 "-package", "unique");
         checkExit(Exit.OK);
         checkUnique("unique/class-use/UseMe.html",
-                "<a href=\"../../unique/C1.html#umethod1-unique.UseMe-unique.UseMe:A-\">",
-                "<a href=\"../../unique/C1.html#umethod2-unique.UseMe-unique.UseMe-\">",
-                "<a href=\"../../unique/C1.html#umethod3-unique.UseMe-unique.UseMe-\">",
-                "<a href=\"../../unique/C1.html#C1-unique.UseMe-unique.UseMe-\">");
+                "<a href=\"../C1.html#umethod1-unique.UseMe-unique.UseMe:A-\">",
+                "<a href=\"../C1.html#umethod2-unique.UseMe-unique.UseMe-\">",
+                "<a href=\"../C1.html#umethod3-unique.UseMe-unique.UseMe-\">",
+                "<a href=\"../C1.html#C1-unique.UseMe-unique.UseMe-\">");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testValueTag/TestValueTag.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testValueTag/TestValueTag.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,19 +52,19 @@
                 // Base case:  using @value on a constant.
                 "Result:  \"Test 1 passes\"",
                 // Retrieve value of constant in same class.
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</a>");
+                "Result:  <a href=\"#TEST_2_PASSES\">\"Test 2 passes\"</a>",
+                "Result:  <a href=\"#TEST_3_PASSES\">\"Test 3 passes\"</a>",
+                "Result:  <a href=\"#TEST_4_PASSES\">\"Test 4 passes\"</a>",
+                "Result:  <a href=\"#TEST_5_PASSES\">\"Test 5 passes\"</a>",
+                "Result:  <a href=\"#TEST_6_PASSES\">\"Test 6 passes\"</a>");
 
         checkOutput("pkg1/Class2.html", true,
                 // Retrieve value of constant in different class.
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>",
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>",
+                "Result:  <a href=\"Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>",
+                "Result:  <a href=\"Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>",
+                "Result:  <a href=\"Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>",
+                "Result:  <a href=\"Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>",
+                "Result:  <a href=\"Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>",
                 // Retrieve value of constant in different package
                 "Result:  <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</a>",
                 "Result:  <a href=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</a>",
@@ -74,7 +74,7 @@
 
         checkOutput("pkg2/package-summary.html", true,
                 // Retrieve value of constant from a package page
-                "Result: <a href=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>");
+                "Result: <a href=\"Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>");
 
         checkOutput("pkg1/CustomTagUsage.html", true,
                 // Test @value tag used with custom tag.
@@ -104,7 +104,7 @@
 
         checkOutput("pkg1/Class1.html", false,
                 // Base case:  using @value on a constant.
-                "Result:  <a href=\"../pkg1/Class1.html#TEST_12_ERROR\">\"Test 12 "
+                "Result:  <a href=\"#TEST_12_ERROR\">\"Test 12 "
                 + "generates an error message\"</a>");
 
         checkForException();
@@ -141,9 +141,9 @@
         checkExit(Exit.OK);
 
         checkOrder("pkg3/RT.html",
-                "The value is <a href=\"../pkg3/RT.html#CONSTANT\">\"constant\"</a>.",
-                "The value1 is <a href=\"../pkg3/RT.html#CONSTANT\">\"constant\"</a>.",
-                "The value2 is <a href=\"../pkg3/RT.html#CONSTANT\">\"constant\"</a>.",
+                "The value is <a href=\"#CONSTANT\">\"constant\"</a>.",
+                "The value1 is <a href=\"#CONSTANT\">\"constant\"</a>.",
+                "The value2 is <a href=\"#CONSTANT\">\"constant\"</a>.",
                 "The value3 is <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">"
                 + "\"Test 12 passes\"</a>.");
     }
--- a/test/langtools/jdk/javadoc/doclet/testWarnings/TestWarnings.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testWarnings/TestWarnings.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -78,8 +78,8 @@
         checkExit(Exit.ERROR);
 
         checkOutput("pkg/X.html", true,
-            "<a href=\"../pkg/X.html#m--\"><code>m()</code></a><br/>",
-            "<a href=\"../pkg/X.html#X--\"><code>X()</code></a><br/>",
-            "<a href=\"../pkg/X.html#f\"><code>f</code></a><br/>");
+            "<a href=\"#m--\"><code>m()</code></a><br/>",
+            "<a href=\"#X--\"><code>X()</code></a><br/>",
+            "<a href=\"#f\"><code>f</code></a><br/>");
     }
 }
--- a/test/langtools/jdk/javadoc/tool/CheckResourceKeys.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/tool/CheckResourceKeys.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -117,7 +117,7 @@
     }
 
     void usageTests(boolean xflag) {
-        String[] argarray = { xflag ? "-X" : "-help" };
+        String[] argarray = { xflag ? "-X" : "--help" };
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter(sw);
         if (jdk.javadoc.internal.tool.Main.execute(argarray, pw) == 0) {
--- a/test/langtools/jdk/javadoc/tool/ToolProviderTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/javadoc/tool/ToolProviderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,7 +69,7 @@
     public void testOneStream() throws Exception {
         StringWriter sw = new StringWriter();
         try (PrintWriter pw = new PrintWriter(sw)) {
-            int rc = javadoc.run(pw, pw, "-help");
+            int rc = javadoc.run(pw, pw, "--help");
             if (rc != 0) {
                 error("unexpected exit code: " + rc);
             }
@@ -86,7 +86,7 @@
         StringWriter swErr = new StringWriter();
         try (PrintWriter pwOut = new PrintWriter(swOut);
                 PrintWriter pwErr = new PrintWriter(swErr)) {
-            int rc = javadoc.run(pwOut, pwErr, "-help");
+            int rc = javadoc.run(pwOut, pwErr, "--help");
             if (rc != 0) {
                 error("unexpected exit code: " + rc);
             }
--- a/test/langtools/jdk/jshell/InaccessibleExpressionTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/InaccessibleExpressionTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 /*
- * @test 8190939
+ * @test 8190939 8191842
  * @summary test expressions whose type is inaccessible
  * @modules jdk.compiler/com.sun.tools.javac.api
  *          jdk.compiler/com.sun.tools.javac.main
@@ -86,6 +86,8 @@
         assertEval(list.name() + ".size()", "0");
         VarSnippet one = varKey(assertEval("priv()", "One"));
         assertEquals(one.typeName(), "priv.GetPriv.Count");
+        assertEval("var v = down();", "Packp");
+        assertDeclareFail("v.toString()", "compiler.err.not.def.access.class.intf.cant.access");
     }
 
     public void testInternal() {
--- a/test/langtools/jdk/jshell/StartOptionTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/StartOptionTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -214,7 +214,7 @@
 
     // Test that the usage message is printed
     public void testUsage() {
-        for (String opt : new String[]{"-h", "--help"}) {
+        for (String opt : new String[]{"-?", "-h", "--help"}) {
             startCo(s -> {
                 assertTrue(s.split("\n").length >= 7, "Not enough usage lines: " + s);
                 assertTrue(s.startsWith("Usage:   jshell <option>..."), "Unexpect usage start: " + s);
--- a/test/langtools/jdk/jshell/ToolShiftTabTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/ToolShiftTabTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,7 +23,7 @@
 
 /**
  * @test
- * @bug 8166334
+ * @bug 8166334 8188894
  * @summary test shift-tab shortcuts "fixes"
  * @modules
  *     jdk.jshell/jdk.internal.jshell.tool.resources:open
@@ -107,11 +107,12 @@
 
     public void testFixImport() throws Exception {
         doRunTest((inputSink, out) -> {
-            inputSink.write("Frame");
-            inputSink.write(FIX + "i");
-            inputSink.write("1");
-            inputSink.write(".WIDTH\n");
-            waitOutput(out, "==> 1");
+            do {
+                inputSink.write("Frame");
+                inputSink.write(FIX + "i");
+                inputSink.write("1");
+                inputSink.write(".WIDTH\n");
+            } while (!waitOutput(out, "==> 1", "Results may be incomplete"));
             inputSink.write("/import\n");
             waitOutput(out, "|    import java.awt.Frame");
 
--- a/test/langtools/jdk/jshell/ToolSimpleTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/ToolSimpleTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103  8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 8180508 8177466 8172154 8192979
+ * @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103  8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 8180508 8177466 8172154 8192979 8191842
  * @summary Simple jshell tool tests
  * @modules jdk.compiler/com.sun.tools.javac.api
  *          jdk.compiler/com.sun.tools.javac.main
@@ -786,7 +786,11 @@
                 (a) -> assertCommandOutputContains(a, "var r1 = new Object() {}", "r1"),
                 (a) -> assertCommandOutputContains(a, "/vars r1", "|    <anonymous class extending Object> r1 = "),
                 (a) -> assertCommandOutputContains(a, "var r2 = new Runnable() { public void run() { } }", "r2"),
-                (a) -> assertCommandOutputContains(a, "/vars r2", "|    <anonymous class implementing Runnable> r2 = ")
+                (a) -> assertCommandOutputContains(a, "/vars r2", "|    <anonymous class implementing Runnable> r2 = "),
+                (a) -> assertCommandOutputContains(a, "import java.util.stream.*;", ""),
+                (a) -> assertCommandOutputContains(a, "var list = Stream.of(1, 2, 3).map(j -> new Object() { int i = j; }).collect(Collectors.toList());",
+                                                      "list"),
+                (a) -> assertCommandOutputContains(a, "/vars list", "|    List<<anonymous class extending Object>> list = ")
         );
     }
 }
--- a/test/langtools/jdk/jshell/TypeNameTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/TypeNameTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8144903 8171981 8191802
+ * @bug 8144903 8171981 8191802 8191842
  * @summary Tests for determining the type from the expression
  * @build KullaTesting TestingInputStream
  * @run testng TypeNameTest
@@ -38,8 +38,12 @@
 
 
     private void assertType(String expr, String type) {
+        assertType(expr, type, type);
+    }
+
+    private void assertType(String expr, String type, String inferType) {
         assertEquals(varKey(assertEval(expr)).typeName(), type);
-        assertInferredType(expr, type);
+        assertInferredType(expr, inferType);
     }
 
     public void testTypeInference() {
@@ -58,7 +62,7 @@
         assertType("d.getS()", "D<?>");
         assertType("null", "Object");
         assertType("Class.forName( \"java.util.ArrayList\" )", "Class<?>");
-        assertType("new ArrayList<Boolean>() {}", "ArrayList<Boolean>");
+        assertType("new ArrayList<Boolean>() {}", "<anonymous class extending ArrayList<Boolean>>", "ArrayList<Boolean>");
         assertType("new ArrayList<String>().stream()", "java.util.stream.Stream<String>");
         assertType("Arrays.asList( 1, 2, 3)", "List<Integer>");
         assertType("new ArrayList().getClass().getClass()", "Class<? extends Class>");
@@ -188,7 +192,7 @@
         assertType("arrayOf(99)[0]", "Integer");
 
         assertEval("<Z> Z choose(Z z1, Z z2) { return z1; }");
-        assertType("choose(1, 1L);", "Object");
+        assertType("choose(1, 1L);", "Number&Comparable<? extends Number&Comparable<?>>", "Object");
     }
 
     public void testVariableTypeName() {
@@ -215,7 +219,7 @@
     public void testAnonymousClassName() {
         assertEval("class C {}");
         assertType("new C();", "C");
-        assertType("new C() { int x; };", "C");
+        assertType("new C() { int x; };", "<anonymous class extending C>", "C");
     }
 
     public void testCapturedTypeName() {
@@ -243,7 +247,7 @@
         assertType("test1.get()", "CharSequence");
         assertEval("class Test2<X extends Number & CharSequence> { public X get() { return null; } }");
         assertEval("Test2<?> test2 = new Test2<>();");
-        assertType("test2.get()", "Object");
+        assertType("test2.get()", "Number&CharSequence", "Object");
         assertEval("class Test3<T> { T[][] get() { return null; } }");
         assertEval("Test3<? extends String> test3 = new Test3<>();");
         assertType("test3.get()", "String[][]");
--- a/test/langtools/jdk/jshell/UITesting.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/UITesting.java	Fri Feb 02 01:52:03 2018 +0000
@@ -135,8 +135,19 @@
     }
 
     protected void waitOutput(StringBuilder out, String expected) {
+        waitOutput(out, expected, null);
+    }
+
+    // Return true if expected is found, false if secondary is found,
+    // otherwise, time out with an IllegalStateException
+    protected boolean waitOutput(StringBuilder out, String expected, String secondary) {
         expected = expected.replaceAll("\n", laxLineEndings ? "\r?\n" : System.getProperty("line.separator"));
         Pattern expectedPattern = Pattern.compile(expected, Pattern.DOTALL);
+        Pattern secondaryPattern = null;
+        if (secondary != null) {
+            secondary = secondary.replaceAll("\n", laxLineEndings ? "\r?\n" : System.getProperty("line.separator"));
+            secondaryPattern = Pattern.compile(secondary, Pattern.DOTALL);
+        }
         synchronized (out) {
             long s = System.currentTimeMillis();
 
@@ -144,7 +155,14 @@
                 Matcher m = expectedPattern.matcher(out);
                 if (m.find()) {
                     out.delete(0, m.end());
-                    return ;
+                    return true;
+                }
+                if (secondaryPattern != null) {
+                    m = secondaryPattern.matcher(out);
+                    if (m.find()) {
+                        out.delete(0, m.end());
+                        return false;
+                    }
                 }
                 long e =  System.currentTimeMillis();
                 if ((e - s) > TIMEOUT) {
--- a/test/langtools/jdk/jshell/VariablesTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/jdk/jshell/VariablesTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,18 @@
 
 /*
  * @test
- * @bug 8144903 8177466
+ * @bug 8144903 8177466 8191842
  * @summary Tests for EvaluationState.variables
- * @build KullaTesting TestingInputStream ExpectedDiagnostic
+ * @library /tools/lib
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.main
+ *          jdk.jshell
+ * @build Compiler KullaTesting TestingInputStream ExpectedDiagnostic
  * @run testng VariablesTest
  */
 
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.List;
 import javax.tools.Diagnostic;
 
@@ -37,6 +43,7 @@
 import jdk.jshell.VarSnippet;
 import jdk.jshell.Snippet.SubKind;
 import jdk.jshell.SnippetEvent;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import static java.util.stream.Collectors.toList;
@@ -362,5 +369,157 @@
         assertEval("class O2 { public class Inner { public Inner(int i) { } public String test() { return \"good\"; } } }");
         assertEval("var r5 = new O2().new Inner(1) { public String get() { return \"good\"; } };");
         assertEval("r5.get()", "\"good\"");
+        assertEval("<Z> Z identity(Z z) { return z; }");
+        assertEval("var r6 = identity(new Object() { String s = \"good\"; });");
+        assertEval("r6.s", "\"good\"");
+        assertEval("interface I<B, C> { C get(B b); }");
+        assertEval("<A, B, C> C cascade(A a, I<A, B> c1, I<B, C> c2) { return c2.get(c1.get(a)); }");
+        assertEval("var r7 = cascade(\"good\", a -> new Object() { String s = a; }, b -> new java.util.ArrayList<String>(5) { String s = b.s; });");
+        assertEval("r7.s", "\"good\"");
+        assertEval("var r8 = cascade(\"good\", a -> new Object() { String s = a; public String getS() { return s; } }, b -> new java.util.ArrayList<String>(5) { String s = b.getS(); public String getS() { return s; } });");
+        assertEval("r8.getS()", "\"good\"");
+        assertEval("var r9 = new Object() { class T { class Inner { public String g() { return outer(); } } public String outer() { return \"good\"; } public String test() { return new Inner() {}.g(); } } public String test() { return new T().test(); } };");
+        assertEval("r9.test()", "\"good\"");
+        assertEval("var nested1 = new Object() { class N { public String get() { return \"good\"; } } };");
+        assertEval("nested1.new N().get()", "\"good\"");
+        assertEval("var nested2 = cascade(\"good\", a -> new Object() { abstract class G { abstract String g(); } G g = new G() { String g() { return a; } }; }, b -> new java.util.ArrayList<String>(5) { String s = b.g.g(); });");
+        assertEval("nested2.s", "\"good\"");
+        assertEval("<A, B> B convert(A a, I<A, B> c) { return c.get(a); }");
+        assertEval("var r10 = convert(\"good\", a -> new api.C(12) { public String val = \"\" + i + s + l + a; } );");
+        assertEval("r10.val", "\"12empty[empty]good\"");
+        assertEval("var r11 = convert(\"good\", a -> new api.C(\"a\") { public String val = \"\" + i + s + l + a; } );");
+        assertEval("r11.val", "\"3a[empty]good\"");
+        assertEval("import api.C;");
+        assertEval("var r12 = convert(\"good\", a -> new C(java.util.List.of(\"a\")) { public String val = \"\" + i + s + l + a; } );");
+        assertEval("r12.val", "\"4empty[a]good\"");
+        assertEval("var r13 = convert(\"good\", a -> new api.G<String>(java.util.List.of(\"b\")) { public String val = \"\" + l + a; } );");
+        assertEval("r13.val", "\"[b]good\"");
+        assertEval("var r14 = convert(\"good\", a -> new api.J<String>() { public java.util.List<String> get() { return java.util.List.of(a, \"c\"); } } );");
+        assertEval("r14.get()", "[good, c]");
+        assertEval("var r15a = new java.util.ArrayList<String>();");
+        assertEval("r15a.add(\"a\");");
+        assertEval("var r15b = r15a.get(0);");
+        assertEval("r15b", "\"a\"");
+    }
+
+    public void test8191842() {
+        assertEval("import java.util.stream.*;");
+        assertEval("var list = Stream.of(1, 2, 3).map(j -> new Object() { int i = j; }).collect(Collectors.toList());");
+        assertEval("list.stream().map(a -> String.valueOf(a.i)).collect(Collectors.joining(\", \"));", "\"1, 2, 3\"");
+    }
+
+    public void lvtiRecompileDependentsWithIntersectionTypes() {
+        assertEval("<Z extends Runnable & CharSequence> Z get1() { return null; }", added(VALID));
+        VarSnippet var = varKey(assertEval("var i1 = get1();", added(VALID)));
+        assertEval("import java.util.stream.*;", added(VALID),
+                                                 ste(var, VALID, VALID, true, MAIN_SNIPPET));
+        assertEval("void t1() { i1.run(); i1.length(); }", added(VALID));
+    }
+
+    public void arrayInit() {
+        assertEval("int[] d = {1, 2, 3};");
+    }
+
+    public void testAnonymousVar() {
+        assertEval("new Object() { public String get() { return \"a\"; } }");
+        assertEval("$1.get()", "\"a\"");
+    }
+
+    public void testIntersectionVar() {
+        assertEval("<Z extends Runnable & CharSequence> Z get() { return null; }", added(VALID));
+        assertEval("get();", added(VALID));
+        assertEval("void t1() { $1.run(); $1.length(); }", added(VALID));
+    }
+
+    public void multipleCaptures() {
+        assertEval("class D { D(int foo, String bar) { this.foo = foo; this.bar = bar; } int foo; String bar; } ");
+        assertEval("var d = new D(34, \"hi\") { String z = foo + bar; };");
+        assertEval("d.z", "\"34hi\"");
+    }
+
+    public void multipleAnonymous() {
+        VarSnippet v1 = varKey(assertEval("new Object() { public int i = 42; public int i1 = i; public int m1() { return i1; } };"));
+        VarSnippet v2 = varKey(assertEval("new Object() { public int i = 42; public int i2 = i; public int m2() { return i2; } };"));
+        assertEval(v1.name() + ".i", "42");
+        assertEval(v1.name() + ".i1", "42");
+        assertEval(v1.name() + ".m1()", "42");
+        assertDeclareFail(v1.name() + ".i2",
+                          new ExpectedDiagnostic("compiler.err.cant.resolve.location", 0, 5, 2,
+                                                 -1, -1, Diagnostic.Kind.ERROR));
+        assertEval(v2.name() + ".i", "42");
+        assertEval(v2.name() + ".i2", "42");
+        assertEval(v2.name() + ".m2()", "42");
+        assertDeclareFail(v2.name() + ".i1",
+                          new ExpectedDiagnostic("compiler.err.cant.resolve.location", 0, 5, 2,
+                                                 -1, -1, Diagnostic.Kind.ERROR));
+    }
+
+    public void displayName() {
+        assertVarDisplayName("var v1 = 234;", "int");
+        assertVarDisplayName("var v2 = new int[] {234};", "int[]");
+        assertEval("<Z extends Runnable & CharSequence> Z get() { return null; }", added(VALID));
+        assertVarDisplayName("var v3 = get();", "CharSequence&Runnable");
+        assertVarDisplayName("var v4a = new java.util.ArrayList<String>();", "java.util.ArrayList<String>");
+        assertEval("v4a.add(\"a\");");
+        assertVarDisplayName("var v4b = v4a.get(0);", "String");
+        assertVarDisplayName("var v5 = new Object() { };", "<anonymous class extending Object>");
+        assertVarDisplayName("var v6 = new Runnable() { public void run() { } };", "<anonymous class implementing Runnable>");
+    }
+
+    private void assertVarDisplayName(String var, String typeName) {
+        assertEquals(varKey(assertEval(var)).typeName(), typeName);
+    }
+
+    @BeforeMethod
+    @Override
+    public void setUp() {
+        Path path = Paths.get("cp");
+        Compiler compiler = new Compiler();
+        compiler.compile(path,
+                "package api;\n" +
+                "\n" +
+                "import java.util.List;\n" +
+                "\n" +
+                "public class C {\n" +
+                "   public int i;\n" +
+                "   public String s;\n" +
+                "   public List<String> l;\n" +
+                "   public C(int i) {\n" +
+                "       this.i = i;\n" +
+                "       this.s = \"empty\";\n" +
+                "       this.l = List.of(\"empty\");\n" +
+                "   }\n" +
+                "   public C(String s) {\n" +
+                "       this.i = 3;\n" +
+                "       this.s = s;\n" +
+                "       this.l = List.of(\"empty\");\n" +
+                "   }\n" +
+                "   public C(List<String> l) {\n" +
+                "       this.i = 4;\n" +
+                "       this.s = \"empty\";\n" +
+                "       this.l = l;\n" +
+                "   }\n" +
+                "}\n",
+                "package api;\n" +
+                "\n" +
+                "import java.util.List;\n" +
+                "\n" +
+                "public class G<T> {\n" +
+                "   public List<T> l;\n" +
+                "   public G(List<T> l) {\n" +
+                "       this.l = l;\n" +
+                "   }\n" +
+                "}\n",
+                "package api;\n" +
+                "\n" +
+                "import java.util.List;\n" +
+                "\n" +
+                "public interface J<T> {\n" +
+                "   public List<T> get();\n" +
+                "}\n");
+        String tpath = compiler.getPath(path).toString();
+        setUp(b -> b
+                .remoteVMOptions("--class-path", tpath)
+                .compilerOptions("--class-path", tpath));
     }
 }
--- a/test/langtools/tools/javac/6330997/T6330997.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/6330997/T6330997.java	Fri Feb 02 01:52:03 2018 +0000
@@ -32,8 +32,8 @@
  *          jdk.compiler/com.sun.tools.javac.main
  *          jdk.compiler/com.sun.tools.javac.util
  * @clean T1 T2
- * @compile -source 10 -target 10 T1.java
- * @compile -source 10 -target 10 T2.java
+ * @compile -source 10 -target 11 T1.java
+ * @compile -source 10 -target 11 T2.java
  * @run main/othervm T6330997
  */
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/8194932/Foo.jcod	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,115 @@
+class Foo {
+  0xCAFEBABE;
+  0; // minor version
+  52; // version
+  [] { // Constant Pool
+    ; // first element is empty
+    Method #4 #14; // #1
+    String #15; // #2
+    class #16; // #3
+    class #17; // #4
+    Utf8 "<init>"; // #5
+    Utf8 "()V"; // #6
+    Utf8 "Code"; // #7
+    Utf8 "LineNumberTable"; // #8
+    Utf8 "m"; // #9
+    Utf8 "m2"; // #10
+    Utf8 "()Ljava/lang/String;"; // #11
+    Utf8 "SourceFile"; // #12
+    Utf8 "Foo.java"; // #13
+    NameAndType #5 #6; // #14
+    Utf8 "Hello"; // #15
+    Utf8 "Foo"; // #16
+    Utf8 "java/lang/Object"; // #17
+  } // Constant Pool
+
+  0x0020; // access
+  #3;// this_cpx
+  #4;// super_cpx
+
+  [] { // Interfaces
+  } // Interfaces
+
+  [] { // fields
+  } // fields
+
+  [] { // methods
+    { // Member
+      0x0000; // access
+      #5; // name_cpx
+      #6; // sig_cpx
+      [] { // Attributes
+        Attr(#7) { // Code
+          1; // max_stack
+          1; // max_locals
+          Bytes[]{
+            0x2AB70001B1;
+          };
+          [] { // Traps
+          } // end Traps
+          [] { // Attributes
+            Attr(#8) { // LineNumberTable
+              [] { // LineNumberTable
+                0  1;
+              }
+            } // end LineNumberTable
+          } // Attributes
+        } // end Code
+      } // Attributes
+    } // Member
+    ;
+    { // Member
+      0x0000; // access
+      #9; // name_cpx
+      #6; // sig_cpx
+      [] { // Attributes
+        Attr(#7) { // Code
+          0; // max_stack
+          1; // max_locals
+          Bytes[]{
+            0xB1;
+          };
+          [] { // Traps
+          } // end Traps
+          [] { // Attributes
+            Attr(#8) { // LineNumberTable
+              [] { // LineNumberTable
+                0  2;
+              }
+            } // end LineNumberTable
+          } // Attributes
+        } // end Code
+      } // Attributes
+    } // Member
+    ;
+    { // Member
+      0x0000; // access
+      #9; // name_cpx
+      #11; // sig_cpx
+      [] { // Attributes
+        Attr(#7) { // Code
+          1; // max_stack
+          1; // max_locals
+          Bytes[]{
+            0x1202B0;
+          };
+          [] { // Traps
+          } // end Traps
+          [] { // Attributes
+            Attr(#8) { // LineNumberTable
+              [] { // LineNumberTable
+                0  3;
+              }
+            } // end LineNumberTable
+          } // Attributes
+        } // end Code
+      } // Attributes
+    } // Member
+  } // methods
+
+  [] { // Attributes
+    Attr(#12) { // SourceFile
+      #13;
+    } // end SourceFile
+  } // Attributes
+} // end class Foo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/8194932/T8194932.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,13 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8194932
+ * @summary no ambuguity error is emitted if classfile contains two identical methods with different return types
+ * @build Foo
+ * @compile/fail/ref=T8194932.out -XDrawDiagnostics T8194932.java
+ */
+
+class T8194932 {
+    void test(Foo foo) {
+        foo.m(); //should get an ambiguity here
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/8194932/T8194932.out	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,2 @@
+T8194932.java:11:12: compiler.err.ref.ambiguous: m, kindname.method, m(), Foo, kindname.method, m(), Foo
+1 error
--- a/test/langtools/tools/javac/BadCovar.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/BadCovar.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-BadCovar.java:22:10: compiler.err.types.incompatible.diff.ret: bad.covar.B, bad.covar.A, f()
+BadCovar.java:22:10: compiler.err.types.incompatible: bad.covar.B, bad.covar.A, (compiler.misc.incompatible.diff.ret: f, )
 1 error
--- a/test/langtools/tools/javac/InconsistentInheritedSignature.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/InconsistentInheritedSignature.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-InconsistentInheritedSignature.java:17:1: compiler.err.types.incompatible.diff.ret: I2, I1, f()
+InconsistentInheritedSignature.java:17:1: compiler.err.types.incompatible: I2, I1, (compiler.misc.incompatible.diff.ret: f, )
 1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/MethodParameters/ClassReaderTest/ClassReaderTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2017 Google Inc. 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8007720 8177486
+ * @summary class reading of named parameters
+ * @library /tools/javac/lib
+ * @modules java.compiler
+ *          jdk.compiler
+ * @compile -parameters ClassReaderTest.java MethodParameterProcessor.java
+ * @compile/process/ref=ClassReaderTest.out -proc:only -processor MethodParameterProcessor ClassReaderTest ClassReaderTest$I ClassReaderTest$E
+ */
+
+import static java.lang.annotation.RetentionPolicy.CLASS;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+
+public class ClassReaderTest {
+
+    @Retention(RUNTIME)
+    @interface RuntimeAnnoOne {
+        int value() default 0;
+    }
+
+    @Retention(RUNTIME)
+    @interface RuntimeAnnoTwo {
+        int value() default 0;
+    }
+
+    @Retention(CLASS)
+    @interface ClassAnno {
+        int value() default 0;
+    }
+
+    @MethodParameterProcessor.ParameterNames
+    void f(
+            @RuntimeAnnoOne(1) @RuntimeAnnoTwo(2) @ClassAnno(3) int a,
+            @RuntimeAnnoOne(4) @RuntimeAnnoTwo(5) @ClassAnno(6) String b) {}
+
+    class I {
+        @MethodParameterProcessor.ParameterNames
+        I(@ClassAnno(7) int d, @RuntimeAnnoOne(8) String e, Object o) {}
+    }
+
+    enum E {
+        ONE(42, "");
+
+        @MethodParameterProcessor.ParameterNames
+        E(int x, @RuntimeAnnoOne(9) String s) {}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/MethodParameters/ClassReaderTest/ClassReaderTest.out	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,3 @@
+Note: ClassReaderTest.E.<init>(x, @ClassReaderTest.RuntimeAnnoOne(9) s)
+Note: ClassReaderTest.I.<init>(@ClassReaderTest.ClassAnno(7) d, @ClassReaderTest.RuntimeAnnoOne(8) e, o)
+Note: ClassReaderTest.f(@ClassReaderTest.ClassAnno(3) @ClassReaderTest.RuntimeAnnoOne(1) @ClassReaderTest.RuntimeAnnoTwo(2) a, @ClassReaderTest.ClassAnno(6) @ClassReaderTest.RuntimeAnnoOne(4) @ClassReaderTest.RuntimeAnnoTwo(5) b)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/MethodParameters/ClassReaderTest/MethodParameterProcessor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 Google Inc. 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.
+ *
+ * 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.
+ */
+
+import static java.util.stream.Collectors.joining;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.element.TypeElement;
+import javax.tools.Diagnostic.Kind;
+
+@SupportedAnnotationTypes("MethodParameterProcessor.ParameterNames")
+public class MethodParameterProcessor extends JavacTestingAbstractProcessor {
+
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+    @interface ParameterNames {
+        String[] value() default {};
+    }
+
+    @Override
+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+        for (Element element : roundEnv.getElementsAnnotatedWith(ParameterNames.class)) {
+            ExecutableElement exec = (ExecutableElement)element;
+            String message = printNamesAndAnnotations(exec);
+            messager.printMessage(Kind.NOTE, message);
+        }
+        return false;
+    }
+
+    private String printNamesAndAnnotations(ExecutableElement exec) {
+        return String.format("%s.%s(%s)",
+                exec.getEnclosingElement(),
+                exec.getSimpleName(),
+                exec.getParameters().stream().map(this::printParameter).collect(joining(", ")));
+    }
+
+    private String printParameter(VariableElement param) {
+        return param.getAnnotationMirrors().stream().map(String::valueOf).collect(joining(" "))
+                + (param.getAnnotationMirrors().isEmpty() ? "" : " ")
+                + param.getSimpleName();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/MethodParameters/DefaultParamNames.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2017 Google Inc. 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8194268
+ * @summary Incorrect parameter names for synthetic methods
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.code
+ *          jdk.compiler/com.sun.tools.javac.tree
+ *          jdk.compiler/com.sun.tools.javac.util
+ * @compile DefaultParamNames.java
+ * @run main DefaultParamNames
+ */
+
+import static java.util.stream.Collectors.joining;
+
+import com.sun.tools.javac.api.BasicJavacTask;
+import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.code.Symbol.MethodSymbol;
+import com.sun.tools.javac.code.Symtab;
+import com.sun.tools.javac.code.Type.MethodType;
+import com.sun.tools.javac.util.Assert;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.List;
+import com.sun.tools.javac.util.Names;
+import java.util.Objects;
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
+
+public class DefaultParamNames {
+
+    public static void main(String[] args) {
+        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+        BasicJavacTask task = (BasicJavacTask) compiler.getTask(null, null, null, null, null, null);
+        Context context = task.getContext();
+        Names names = Names.instance(context);
+        Symtab symtab = Symtab.instance(context);
+        MethodType mt =
+                new MethodType(
+                        List.of(symtab.intType, symtab.stringType, symtab.objectType),
+                        symtab.voidType,
+                        List.nil(),
+                        symtab.methodClass);
+        MethodSymbol ms =
+                new MethodSymbol(Flags.SYNTHETIC, names.fromString("test"), mt, symtab.methodClass);
+        String paramNames =
+                ms.params().stream().map(p -> p.getSimpleName().toString()).collect(joining(","));
+        assertEquals("arg0,arg1,arg2", paramNames);
+    }
+
+    static void assertEquals(Object expected, Object actual) {
+        Assert.check(
+                Objects.equals(expected, actual),
+                String.format("expected: %s, but was: %s", expected, actual));
+    }
+}
--- a/test/langtools/tools/javac/OverrideChecks/InconsistentReturn.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/OverrideChecks/InconsistentReturn.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-InconsistentReturn.java:17:1: compiler.err.types.incompatible.diff.ret: I2, I1, f()
+InconsistentReturn.java:17:1: compiler.err.types.incompatible: I2, I1, (compiler.misc.incompatible.diff.ret: f, )
 1 error
--- a/test/langtools/tools/javac/api/T6265137.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/api/T6265137.java	Fri Feb 02 01:52:03 2018 +0000
@@ -52,7 +52,7 @@
             String srcdir = System.getProperty("test.src");
             Iterable<? extends JavaFileObject> files =
                 fm.getJavaFileObjectsFromFiles(Arrays.asList(new File(srcdir, "T6265137a.java")));
-            javac.getTask(null, fm, dl, Arrays.asList("-target","10"), null, files).call();
+            javac.getTask(null, fm, dl, Arrays.asList("-target","11"), null, files).call();
         }
     }
 }
--- a/test/langtools/tools/javac/api/T6395981.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/api/T6395981.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug     6395981 6458819 7025784 8028543 8028544
+ * @bug     6395981 6458819 7025784 8028543 8028544 8193291
  * @summary JavaCompilerTool and Tool must specify version of JLS and JVMS
  * @author  Peter von der Ah\u00e9
  * @modules java.compiler
@@ -31,7 +31,7 @@
  * @run main/fail T6395981
  * @run main/fail T6395981 RELEASE_3 RELEASE_5 RELEASE_6
  * @run main/fail T6395981 RELEASE_0 RELEASE_1 RELEASE_2 RELEASE_3 RELEASE_4 RELEASE_5 RELEASE_6
- * @run main T6395981 RELEASE_3 RELEASE_4 RELEASE_5 RELEASE_6 RELEASE_7 RELEASE_8 RELEASE_9 RELEASE_10
+ * @run main T6395981 RELEASE_3 RELEASE_4 RELEASE_5 RELEASE_6 RELEASE_7 RELEASE_8 RELEASE_9 RELEASE_10 RELEASE_11
  */
 
 import java.util.EnumSet;
--- a/test/langtools/tools/javac/classfiles/ClassVersionChecker.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/classfiles/ClassVersionChecker.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 7157626 8001112 8188870
+ * @bug 7157626 8001112 8188870 8173382
  * @summary Test major version for all legal combinations for -source and -target
  * @author sgoel
  *
@@ -38,7 +38,7 @@
 public class ClassVersionChecker {
 
     int errors;
-    String[] jdk = {"", "1.6", "1.7", "1.8", "1.9", "1.10"};
+    String[] jdk = {"", "1.6", "1.7", "1.8", "1.9", "1.10", "11"};
     File javaFile = null;
 
     public static void main(String[] args) throws Throwable {
@@ -58,11 +58,12 @@
          * -1 => invalid combinations
          */
         int[][] ver =
-                {{54, -1, -1, -1, -1, -1},
-                 {54, 50, 51, 52, 53, 54},
-                 {54, -1, 51, 52, 53, 54},
-                 {54, -1, -1, 52, 53, 54},
-                 {54, -1, -1, -1, 53, 54}};
+                {{55, -1, -1, -1, -1, -1, -1},
+                 {55, 50, 51, 52, 53, 54, 55},
+                 {55, -1, 51, 52, 53, 54, 55},
+                 {55, -1, -1, 52, 53, 54, 55},
+                 {55, -1, -1, -1, 53, 54, 55},
+                 {55, -1, -1, -1, -1, 54, 55}};
 
         // Loop to run all possible combinations of source/target values
         for (int i = 0; i< ver.length; i++) {
--- a/test/langtools/tools/javac/defaultMethods/Neg01.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/defaultMethods/Neg01.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-Neg01.java:14:12: compiler.err.types.incompatible.unrelated.defaults: kindname.class, Neg01.AB, m, , Neg01.IA, Neg01.IB
+Neg01.java:14:12: compiler.err.types.incompatible: Neg01.IA, Neg01.IB, (compiler.misc.incompatible.unrelated.defaults: kindname.class, Neg01.AB, m, , Neg01.IA, Neg01.IB)
 1 error
--- a/test/langtools/tools/javac/defaultMethods/Neg02.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/defaultMethods/Neg02.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-Neg02.java:16:13: compiler.err.types.incompatible.unrelated.defaults: kindname.class, Neg02.X, m, , Neg02.A, Neg02.B
+Neg02.java:16:13: compiler.err.types.incompatible: Neg02.A, Neg02.B, (compiler.misc.incompatible.unrelated.defaults: kindname.class, Neg02.X, m, , Neg02.A, Neg02.B)
 1 error
--- a/test/langtools/tools/javac/defaultMethods/Neg14.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/defaultMethods/Neg14.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-Neg14.java:10:14: compiler.err.types.incompatible.abstract.default: kindname.class, Neg14.AB, m, , Neg14.IB, Neg14.IA
+Neg14.java:10:14: compiler.err.types.incompatible: Neg14.IB, Neg14.IA, (compiler.misc.incompatible.abstract.default: kindname.class, Neg14.AB, m, , Neg14.IB, Neg14.IA)
 1 error
--- a/test/langtools/tools/javac/diags/examples/IncompatibleDescsInFunctionalIntf.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/diags/examples/IncompatibleDescsInFunctionalIntf.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,8 @@
  * questions.
  */
 
-// key: compiler.err.types.incompatible.diff.ret
+// key: compiler.err.types.incompatible
+// key: compiler.misc.incompatible.diff.ret
 // key: compiler.err.prob.found.req
 // key: compiler.misc.incompatible.descs.in.functional.intf
 // key: compiler.misc.descriptor
--- a/test/langtools/tools/javac/diags/examples/TypesIncompatible.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/diags/examples/TypesIncompatible.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,8 @@
  * questions.
  */
 
-// key: compiler.err.types.incompatible.diff.ret
+// key: compiler.err.types.incompatible
+// key: compiler.misc.incompatible.diff.ret
 
 interface A {
     int m();
--- a/test/langtools/tools/javac/diags/examples/TypesIncompatibleAbstractDefault.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/diags/examples/TypesIncompatibleAbstractDefault.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,8 @@
  * questions.
  */
 
-// key: compiler.err.types.incompatible.abstract.default
+// key: compiler.err.types.incompatible
+// key: compiler.misc.incompatible.abstract.default
 
 class TypesIncompatibleAbstractDefault {
     interface A {
--- a/test/langtools/tools/javac/diags/examples/TypesIncompatibleUnrelatedDefaults.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/diags/examples/TypesIncompatibleUnrelatedDefaults.java	Fri Feb 02 01:52:03 2018 +0000
@@ -21,7 +21,8 @@
  * questions.
  */
 
-// key: compiler.err.types.incompatible.unrelated.defaults
+// key: compiler.err.types.incompatible
+// key: compiler.misc.incompatible.unrelated.defaults
 
 class TypesIncompatibleUnrelatedDefaults {
     interface A {
--- a/test/langtools/tools/javac/generics/6294779/T6294779c.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/6294779/T6294779c.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T6294779c.java:29:5: compiler.err.types.incompatible.diff.ret: T6294779c.I2, T6294779c.I1, get()
+T6294779c.java:29:5: compiler.err.types.incompatible: T6294779c.I2, T6294779c.I1, (compiler.misc.incompatible.diff.ret: get, )
 1 error
--- a/test/langtools/tools/javac/generics/abstract/T4717181c.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/abstract/T4717181c.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T4717181c.java:15:21: compiler.err.types.incompatible.diff.ret: T4717181c.A<java.lang.Integer>, T4717181c.A<java.lang.Integer>, f(java.lang.Integer)
+T4717181c.java:15:21: compiler.err.types.incompatible: T4717181c.A<java.lang.Integer>, T4717181c.A<java.lang.Integer>, (compiler.misc.incompatible.diff.ret: f, java.lang.Integer)
 1 error
--- a/test/langtools/tools/javac/generics/rawOverride/7157798/Test3.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/rawOverride/7157798/Test3.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,6 +1,6 @@
-Test3.java:14:1: compiler.err.types.incompatible.diff.ret: B, A, m()
-Test3.java:19:1: compiler.err.types.incompatible.diff.ret: D, C, m()
-Test3.java:27:1: compiler.err.types.incompatible.diff.ret: E<T>, B, m()
-Test3.java:33:1: compiler.err.types.incompatible.diff.ret: F<V>, E<U>, m()
-Test3.java:37:1: compiler.err.types.incompatible.diff.ret: F<V>, E<U>, m()
+Test3.java:14:1: compiler.err.types.incompatible: B, A, (compiler.misc.incompatible.diff.ret: m, )
+Test3.java:19:1: compiler.err.types.incompatible: D, C, (compiler.misc.incompatible.diff.ret: m, )
+Test3.java:27:1: compiler.err.types.incompatible: E<T>, B, (compiler.misc.incompatible.diff.ret: m, )
+Test3.java:33:1: compiler.err.types.incompatible: F<V>, E<U>, (compiler.misc.incompatible.diff.ret: m, )
+Test3.java:37:1: compiler.err.types.incompatible: F<V>, E<U>, (compiler.misc.incompatible.diff.ret: m, )
 5 errors
--- a/test/langtools/tools/javac/generics/typevars/4856983/T4856983a.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/typevars/4856983/T4856983a.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T4856983a.java:13:6: compiler.err.types.incompatible.diff.ret: I2, I1, m()
+T4856983a.java:13:6: compiler.err.types.incompatible: I2, I1, (compiler.misc.incompatible.diff.ret: m, )
 1 error
--- a/test/langtools/tools/javac/generics/typevars/4856983/T4856983b.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/typevars/4856983/T4856983b.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T4856983b.java:12:24: compiler.err.types.incompatible.diff.ret: I2, I1, m()
+T4856983b.java:12:24: compiler.err.types.incompatible: I2, I1, (compiler.misc.incompatible.diff.ret: m, )
 1 error
--- a/test/langtools/tools/javac/generics/typevars/6199146/T6199146.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/typevars/6199146/T6199146.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T6199146.java:9:25: compiler.err.types.incompatible.diff.ret: T6199146.I2, T6199146.I1, getFoo()
+T6199146.java:9:25: compiler.err.types.incompatible: T6199146.I2, T6199146.I1, (compiler.misc.incompatible.diff.ret: getFoo, )
 1 error
--- a/test/langtools/tools/javac/generics/wildcards/7034495/T7034495.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/generics/wildcards/7034495/T7034495.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T7034495.java:40:17: compiler.err.types.incompatible.diff.ret: T7034495.B<compiler.misc.type.captureof: 1, ?>, T7034495.A<compiler.misc.type.captureof: 2, ?>, foo()
+T7034495.java:40:17: compiler.err.types.incompatible: T7034495.B<compiler.misc.type.captureof: 1, ?>, T7034495.A<compiler.misc.type.captureof: 2, ?>, (compiler.misc.incompatible.diff.ret: foo, )
 1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/jvm/VerboseClassPathTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2018, Google Inc. 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8179373
+ * @summary javac -verbose logs the class path multiple times
+ * @modules jdk.compiler
+ * @run main VerboseClassPathTest
+ */
+
+import java.io.BufferedReader;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.spi.ToolProvider;
+
+public class VerboseClassPathTest {
+    public static void main(String... args) throws Exception {
+        new VerboseClassPathTest().run();
+    }
+
+    void run() throws Exception {
+        String className = getClass().getName();
+        Path testSrc = Paths.get(System.getProperty("test.src"));
+        Path file = testSrc.resolve(className + ".java");
+        ToolProvider javac = ToolProvider.findFirst("javac").orElseThrow();
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw, true);
+        int rc =
+                javac.run(
+                        pw,
+                        pw,
+                        "-d",
+                        ",",
+                        "-source",
+                        "8",
+                        "-target",
+                        "8",
+                        "-verbose",
+                        file.toString());
+        String log = sw.toString();
+        System.out.println(log);
+        if (rc != 0) {
+            throw new Exception("compilation failed: rc=" + rc);
+        }
+        String expect = "[search path for class files:";
+        long count =
+                new BufferedReader(new StringReader(log))
+                        .lines()
+                        .filter(line -> line.startsWith(expect))
+                        .count();
+        if (count != 1) {
+            throw new Exception("expected '" + expect + "' to appear once, actual: " + count);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/jvm/VerboseOutTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8194893
+ * @summary javac -verbose prints wrong paths for output files
+ * @modules jdk.compiler
+ * @run main VerboseOutTest
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.spi.ToolProvider;
+
+public class VerboseOutTest {
+    public static void main(String... args) throws Exception {
+        new VerboseOutTest().run();
+    }
+
+    void run() throws Exception {
+        String className = getClass().getName();
+        Path testSrc = Paths.get(System.getProperty("test.src"));
+        Path file = testSrc.resolve(className + ".java");
+        ToolProvider javac = ToolProvider.findFirst("javac").orElseThrow();
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw, true);
+        int rc = javac.run(pw, pw,
+                "-d", ".",
+                "-verbose",
+                file.toString());
+        String log = sw.toString();
+        System.out.println(log);
+        if (rc != 0) {
+            throw new Exception("compilation failed: rc=" + rc);
+        }
+        String expected = "[wrote ./" + className + ".class]";
+        if (!log.contains(expected)) {
+            throw new Exception("expected output not found: " + expected);
+        }
+    }
+}
+
--- a/test/langtools/tools/javac/lambda/BadConv04.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/lambda/BadConv04.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,3 +1,3 @@
-BadConv04.java:19:5: compiler.err.types.incompatible.diff.ret: BadConv04.I2, BadConv04.I1, m()
+BadConv04.java:19:5: compiler.err.types.incompatible: BadConv04.I2, BadConv04.I1, (compiler.misc.incompatible.diff.ret: m, )
 BadConv04.java:21:13: compiler.err.prob.found.req: (compiler.misc.incompatible.descs.in.functional.intf: kindname.interface, BadConv04.SAM,{(compiler.misc.descriptor: m, , long, ),(compiler.misc.descriptor: m, , int, )})
 2 errors
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/lambda/T8195598.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8195598
+ * @summary Reference to overloaded method is ambiguous with 3 methods but works with 2
+ * @compile T8195598.java
+ */
+
+import java.util.concurrent.*;
+import java.util.function.*;
+
+class T8195598 {
+    public CompletableFuture<?> test() {
+        return ok(() -> System.out.append("aaa"));
+    }
+    public <T> CompletableFuture<T> ok(Supplier<T> action) {
+        return CompletableFuture.supplyAsync(action);
+    }
+    public <T> CompletableFuture<T> ok(T body) {
+        return CompletableFuture.completedFuture(body);
+    }
+    public CompletableFuture<Void> ok(Runnable action) {
+        return CompletableFuture.runAsync(action);
+    }
+}
--- a/test/langtools/tools/javac/lambda/bridge/template_tests/BridgeMethodsTemplateTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/lambda/bridge/template_tests/BridgeMethodsTemplateTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1001,18 +1001,18 @@
 
     public void testA5() throws IOException, ReflectiveOperationException {
         compileSpec("C(A(Id0),Jd0)",
-                    "compiler.err.types.incompatible.unrelated.defaults");
+                    "compiler.err.types.incompatible");
     }
 
     public void testA6() throws IOException, ReflectiveOperationException {
         compileSpec("C(A(Ia0,Jd0))",
                     "compiler.err.does.not.override.abstract",
-                    "compiler.err.types.incompatible.abstract.default");
+                    "compiler.err.types.incompatible");
     }
 
     public void testA7() throws IOException, ReflectiveOperationException {
         compileSpec("C(A(Id0,Jd0))",
-                    "compiler.err.types.incompatible.unrelated.defaults");
+                    "compiler.err.types.incompatible");
     }
 
     public void testA8() throws IOException, ReflectiveOperationException {
--- a/test/langtools/tools/javac/lambda/funcInterfaces/NonSAM2.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/lambda/funcInterfaces/NonSAM2.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,4 +1,4 @@
-NonSAM2.java:13:1: compiler.err.types.incompatible.diff.ret: Bar1, Foo1, getAge(java.lang.String)
+NonSAM2.java:13:1: compiler.err.types.incompatible: Bar1, Foo1, (compiler.misc.incompatible.diff.ret: getAge, java.lang.String)
 NonSAM2.java:15:1: compiler.err.name.clash.same.erasure.no.override: getOldest, java.util.List<?>, C, getOldest, java.util.List<java.lang.Number>, A
 NonSAM2.java:17:1: compiler.err.name.clash.same.erasure.no.override: getOldest, java.util.List<java.lang.Integer>, D, getOldest, java.util.List<java.lang.Number>, A
 NonSAM2.java:21:1: compiler.err.name.clash.same.erasure.no.override: m, T2, Bar2, m, T1, Foo2
--- a/test/langtools/tools/javac/lib/DPrinter.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/lib/DPrinter.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1233,7 +1233,6 @@
         public Void visitMethodSymbol(MethodSymbol sym, Void ignore) {
             // code
             printList("params", sym.params);
-            printList("savedParameterNames", sym.savedParameterNames);
             return visitSymbol(sym, null);
         }
 
--- a/test/langtools/tools/javac/lib/JavacTestingAbstractProcessor.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/lib/JavacTestingAbstractProcessor.java	Fri Feb 02 01:52:03 2018 +0000
@@ -110,7 +110,7 @@
      * corresponding platform visitor type.
      */
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static abstract class AbstractAnnotationValueVisitor<R, P> extends AbstractAnnotationValueVisitor9<R, P> {
 
         /**
@@ -121,7 +121,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static abstract class AbstractElementVisitor<R, P> extends AbstractElementVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses to call.
@@ -131,7 +131,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static abstract class AbstractTypeVisitor<R, P> extends AbstractTypeVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses to call.
@@ -141,7 +141,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static class ElementKindVisitor<R, P> extends ElementKindVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses; uses {@code null} for the
@@ -162,7 +162,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static class ElementScanner<R, P> extends ElementScanner9<R, P> {
         /**
          * Constructor for concrete subclasses; uses {@code null} for the
@@ -181,7 +181,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static class SimpleAnnotationValueVisitor<R, P> extends SimpleAnnotationValueVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses; uses {@code null} for the
@@ -202,7 +202,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static class SimpleElementVisitor<R, P> extends SimpleElementVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses; uses {@code null} for the
@@ -223,7 +223,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static class SimpleTypeVisitor<R, P> extends SimpleTypeVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses; uses {@code null} for the
@@ -244,7 +244,7 @@
         }
     }
 
-    @SupportedSourceVersion(RELEASE_10)
+    @SupportedSourceVersion(RELEASE_11)
     public static class TypeKindVisitor<R, P> extends TypeKindVisitor9<R, P> {
         /**
          * Constructor for concrete subclasses to call; uses {@code null}
--- a/test/langtools/tools/javac/miranda/4711056/T1.out	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/miranda/4711056/T1.out	Fri Feb 02 01:52:03 2018 +0000
@@ -1,2 +1,2 @@
-T4.java:3:10: compiler.err.types.incompatible.diff.ret: iclss01004_2, iclss01004_1, foo(int)
+T4.java:3:10: compiler.err.types.incompatible: iclss01004_2, iclss01004_1, (compiler.misc.incompatible.diff.ret: foo, int)
 1 error
--- a/test/langtools/tools/javac/processing/model/TestSourceVersion.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/processing/model/TestSourceVersion.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 7025809 8028543 6415644 8028544 8029942 8187951
+ * @bug 7025809 8028543 6415644 8028544 8029942 8187951 8193291 8196551
  * @summary Test latest, latestSupported, underscore as keyword, etc.
  * @author  Joseph D. Darcy
  * @modules java.compiler
@@ -46,11 +46,20 @@
     }
 
     private static void testLatestSupported() {
-        if (SourceVersion.latest() != RELEASE_10 ||
-            SourceVersion.latestSupported() != RELEASE_10)
+        SourceVersion[] values = SourceVersion.values();
+        SourceVersion last = values[values.length - 1];
+        SourceVersion latest = SourceVersion.latest();
+        SourceVersion latestSupported = SourceVersion.latestSupported();
+
+        if (latest == last &&
+            latestSupported == SourceVersion.valueOf("RELEASE_" + Runtime.version().feature()) &&
+            (latest == latestSupported || (latest.ordinal() - latestSupported.ordinal() == 1)) )
+            return;
+        else {
             throw new RuntimeException("Unexpected release value(s) found:\n" +
-                                       "latest:\t" + SourceVersion.latest() + "\n" +
-                                       "latestSupported:\t" + SourceVersion.latestSupported());
+                                       "latest:\t" + latest + "\n" +
+                                       "latestSupported:\t" + latestSupported);
+        }
     }
 
     private static void testVersionVaryingKeywords() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/processing/warnings/TypeAlreadyExists/A.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2017, Google Inc. 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.
+ *
+ * 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.
+ */
+
+public class A {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/processing/warnings/TypeAlreadyExists/B.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2017, Google Inc. 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.
+ *
+ * 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.
+ */
+
+class B {
+    A a;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/processing/warnings/TypeAlreadyExists/TestProcTypeAlreadyExistsWarning.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2017, Google Inc. 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8193216
+ * @summary Filer should warn if processors redefine symbols from the classpath or sourcepath
+ * @library /tools/javac/lib
+ * @modules java.compiler
+ *          jdk.compiler
+ * @build JavacTestingAbstractProcessor TestProcTypeAlreadyExistsWarning
+ * @compile A.java
+ * @compile/ref=warn.out -XDrawDiagnostics -Xlint:processing -processor TestProcTypeAlreadyExistsWarning B.java
+ */
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.io.IOError;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Set;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.element.TypeElement;
+
+@SupportedAnnotationTypes("*")
+public class TestProcTypeAlreadyExistsWarning extends JavacTestingAbstractProcessor {
+
+    int round = 0;
+
+    @Override
+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+        round++;
+
+        if (round == 1) {
+            try (OutputStream os =
+                    processingEnv.getFiler().createSourceFile("A").openOutputStream()) {
+                os.write("class A {}".getBytes(UTF_8));
+            } catch (IOException e) {
+                throw new IOError(e);
+            }
+        }
+
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/processing/warnings/TypeAlreadyExists/warn.out	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,2 @@
+- compiler.warn.proc.type.already.exists: A
+1 warning
--- a/test/langtools/tools/javac/profiles/ProfileOptionTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/profiles/ProfileOptionTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -149,6 +149,7 @@
                         break;
                     case JDK1_9:
                     case JDK1_10:
+                    case JDK1_11:
                         if (p == Profile.DEFAULT)
                             break;
                         if (ise == null)
--- a/test/langtools/tools/javac/versions/Versions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javac/versions/Versions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112 8028545 8000961 8030610 8028546 8188870
+ * @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112 8028545 8000961 8030610 8028546 8188870 8173382 8173382
  * @summary Check interpretation of -target and -source options
  * @modules java.compiler
  *          jdk.compiler
@@ -64,28 +64,35 @@
         String TC = "";
         System.out.println("Version.java: Starting");
 
-        check("54.0");
-        check("54.0", "-source 1.6");
-        check("54.0", "-source 1.7");
-        check("54.0", "-source 1.8");
-        check("54.0", "-source 1.9");
-        check("54.0", "-source 1.10");
+        check("55.0");
+        check("55.0", "-source 1.6");
+        check("55.0", "-source 1.7");
+        check("55.0", "-source 1.8");
+        check("55.0", "-source 1.9");
+        check("55.0", "-source 1.10");
+        check("55.0", "-source 11");
 
-        check_source_target("50.0", "6", "6");
-        check_source_target("51.0", "6", "7");
-        check_source_target("51.0", "7", "7");
-        check_source_target("52.0", "6", "8");
-        check_source_target("52.0", "7", "8");
-        check_source_target("52.0", "8", "8");
-        check_source_target("53.0", "6", "9");
-        check_source_target("53.0", "7", "9");
-        check_source_target("53.0", "8", "9");
-        check_source_target("53.0", "9", "9");
-        check_source_target("54.0", "6", "10");
-        check_source_target("54.0", "7", "10");
-        check_source_target("54.0", "8", "10");
-        check_source_target("54.0", "9", "10");
-        check_source_target("54.0", "10", "10");
+        check_source_target(true, "50.0", "6", "6");
+        check_source_target(true, "51.0", "6", "7");
+        check_source_target(true, "51.0", "7", "7");
+        check_source_target(true, "52.0", "6", "8");
+        check_source_target(true, "52.0", "7", "8");
+        check_source_target(true, "52.0", "8", "8");
+        check_source_target(true, "53.0", "6", "9");
+        check_source_target(true, "53.0", "7", "9");
+        check_source_target(true, "53.0", "8", "9");
+        check_source_target(true, "53.0", "9", "9");
+        check_source_target(true, "54.0", "6", "10");
+        check_source_target(true, "54.0", "7", "10");
+        check_source_target(true, "54.0", "8", "10");
+        check_source_target(true, "54.0", "9", "10");
+        check_source_target(true, "54.0", "10", "10");
+        check_source_target(false, "55.0", "6", "11");
+        check_source_target(false, "55.0", "7", "11");
+        check_source_target(false, "55.0", "8", "11");
+        check_source_target(false, "55.0", "9", "11");
+        check_source_target(false, "55.0", "10", "11");
+        check_source_target(false, "55.0", "11", "11");
 
         checksrc16("-source 1.6");
         checksrc16("-source 6");
@@ -108,8 +115,9 @@
         checksrc110("-source 10");
         checksrc110("-source 1.10", "-target 1.10");
         checksrc110("-source 10", "-target 10");
-        checksrc110("-target 1.10");
-        checksrc110("-target 10");
+        checksrc111("-source 11");
+        checksrc111("-source 11", "-target 11");
+        checksrc111("-target 11");
 
         fail("-source 7", "-target 1.6", "Base.java");
         fail("-source 8", "-target 1.6", "Base.java");
@@ -118,6 +126,8 @@
         fail("-source 9", "-target 1.8", "Base.java");
         fail("-source 10", "-target 1.7", "Base.java");
         fail("-source 10", "-target 1.8", "Base.java");
+        fail("-source 11", "-target 1.9", "Base.java");
+        fail("-source 11", "-target 1.10", "Base.java");
 
         fail("-source 1.5", "-target 1.5", "Base.java");
         fail("-source 1.4", "-target 1.4", "Base.java");
@@ -139,20 +149,24 @@
         System.out.printf("\n", fname);
     }
 
-    protected void check_source_target(String... args) {
+    protected void check_source_target(boolean dotOne, String... args) {
         printargs("check_source_target", args);
-        check_target(args[0], args[1], args[2]);
-        check_target(args[0], "1." + args[1], args[2]);
+        check_target(dotOne, args[0], args[1], args[2]);
+        if (dotOne) {
+            check_target(dotOne, args[0], "1." + args[1], args[2]);
+        }
     }
 
-    protected void check_target(String... args) {
+    protected void check_target(boolean dotOne, String... args) {
         check(args[0], "-source " + args[1], "-target " + args[2]);
-        check(args[0], "-source " + args[1], "-target 1." + args[2]);
+        if (dotOne) {
+            check(args[0], "-source " + args[1], "-target 1." + args[2]);
+        }
     }
 
     protected void check(String major, String... args) {
         printargs("check", args);
-        List<String> jcargs = new ArrayList<String>();
+        List<String> jcargs = new ArrayList<>();
         jcargs.add("-Xlint:-options");
 
         // add in args conforming to List requrements of JavaCompiler
@@ -207,6 +221,8 @@
         pass(newargs);
         newargs[asize] = "New18.java";
         pass(newargs);
+        newargs[asize] = "New110.java";
+        fail(newargs);
     }
 
     protected void checksrc19(String... args) {
@@ -216,7 +232,20 @@
 
     protected void checksrc110(String... args) {
         printargs("checksrc110", args);
-        checksrc19(args);
+        int asize = args.length;
+        String[] newargs = new String[asize+1];
+        System.arraycopy(args, 0, newargs,0 , asize);
+        newargs[asize] = "New17.java";
+        pass(newargs);
+        newargs[asize] = "New18.java";
+        pass(newargs);
+        newargs[asize] = "New110.java";
+        pass(newargs);
+    }
+
+    protected void checksrc111(String... args) {
+        printargs("checksrc111", args);
+        checksrc110(args);
     }
 
     protected void pass(String... args) {
@@ -347,6 +376,17 @@
             "} \n"
         );
 
+        /*
+         * Create a file with a new feature in 1.10, not in 1.9 : var
+         */
+        writeSourceFile("New110.java",
+            "public class New110 { \n" +
+            "    void m() { \n" +
+            "    var tmp = new Thread(() -> { }); \n" +
+            "    } \n" +
+            "} \n"
+        );
+
     }
 
     protected boolean checkClassFileVersion
--- a/test/langtools/tools/javap/InvalidOptions.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/javap/InvalidOptions.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,7 +42,7 @@
     void run() throws Exception {
         test(2, "-b", "Error: unknown option: -b",
                       "Usage: javap <options> <classes>",
-                      "use -help for a list of possible options");
+                      "use --help for a list of possible options");
         if (errorCount > 0)
             throw new Exception(errorCount + " errors received");
     }
--- a/test/langtools/tools/jdeps/MultiReleaseJar.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/jdeps/MultiReleaseJar.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -118,7 +118,7 @@
         checkResult(r, false,
                 "Error: unknown option: -multi-release",
                 "Usage: jdeps <options> <path",
-                "use -h, -?, -help, or --help"
+                "use --help"
         );
 
         r = run("jdeps -v -R -cp Version.jar --multi-release 9 test/Main.class");
--- a/test/langtools/tools/jdeps/jdkinternals/RemovedJDKInternals.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/jdeps/jdkinternals/RemovedJDKInternals.java	Fri Feb 02 01:52:03 2018 +0000
@@ -85,7 +85,8 @@
                 .reference("p.Main", "java.lang.Object", "java.base")
                 .reference("p.Main", "java.util.Iterator", "java.base")
                 .reference("p.S", "java.lang.Object", "java.base")
-                .jdkInternal("p.Main", "sun.reflect.Reflection", "jdk.unsupported")
+                .jdkInternal("p.Main", "sun.reflect.ReflectionFactory", "jdk.unsupported")
+                .removedJdkInternal("p.Main", "sun.reflect.Reflection")
                 .removedJdkInternal("p.Main", "com.sun.image.codec.jpeg.JPEGCodec")
                 .removedJdkInternal("p.Main", "sun.misc.Service")
                 .removedJdkInternal("p.Main", "sun.misc.SoftCache")
@@ -118,7 +119,8 @@
         "com.sun.image.codec.jpeg.JPEGCodec", "Use javax.imageio @since 1.4",
         "sun.misc.Service", "Use java.util.ServiceLoader @since 1.6",
         "sun.misc.SoftCache", "Removed. See http://openjdk.java.net/jeps/260",
-        "sun.reflect.Reflection", "Use java.lang.StackWalker @since 9"
+        "sun.reflect.Reflection", "Use java.lang.StackWalker @since 9",
+        "sun.reflect.ReflectionFactory", "See http://openjdk.java.net/jeps/260"
     );
 
     @Test
@@ -139,6 +141,8 @@
             int pos = line.indexOf("Use ");
             if (pos < 0)
                 pos = line.indexOf("Removed. ");
+            if (pos < 0)
+                pos = line.indexOf("See ");
 
             assertTrue(pos > 0);
             String name = line.substring(0, pos).trim();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/jdeps/jdkinternals/patches/jdk.unsupported/sun/reflect/Reflection.java	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2017, 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.
+ *
+ * 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 sun.reflect;
+
+/*
+ * JDK removed internal API
+ */
+public class Reflection {
+    public static Class<?> getCallerClass(int depth) {
+        return null;
+    }
+}
--- a/test/langtools/tools/jdeps/jdkinternals/src/p/Main.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/jdeps/jdkinternals/src/p/Main.java	Fri Feb 02 01:52:03 2018 +0000
@@ -27,10 +27,14 @@
 import sun.misc.Service;
 import sun.misc.SoftCache;
 import sun.reflect.Reflection;
+import sun.reflect.ReflectionFactory;
 
 public class Main {
     public static void main() {
         // in jdk.unsupported
+        ReflectionFactory factory = ReflectionFactory.getReflectionFactory();
+
+        // removed from jdk.unsupported in JDK 11
         Class<?> caller = Reflection.getCallerClass(2);
 
         // removed
--- a/test/langtools/tools/jdeps/listdeps/ListModuleDeps.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/langtools/tools/jdeps/listdeps/ListModuleDeps.java	Fri Feb 02 01:52:03 2018 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -88,6 +88,8 @@
     public Object[][] jdkModules() {
         return new Object[][]{
             {"jdk.compiler", new String[]{
+                                "java.base/jdk.internal.jmod",
+                                "java.base/jdk.internal.misc",
                                 "java.base/sun.reflect.annotation",
                                 "java.compiler",
                              }
--- a/test/nashorn/TEST.ROOT	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/nashorn/TEST.ROOT	Fri Feb 02 01:52:03 2018 +0000
@@ -8,7 +8,7 @@
 groups=TEST.groups
 
 # Minimum jtreg version
-requiredVersion=4.2 b08
+requiredVersion=4.2 b11
 
 # Use new module options
 useNewOptions=true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nashorn/script/basic/JDK-8157251.js	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/**
+ * JDK-8157251: BeanLinker relinks array length operations for array types
+ *
+ * @test
+ * @run
+ */
+
+var intArray = Java.type("int[]")
+var doubleArray = Java.type("double[]")
+var arrs = [new intArray(20), new doubleArray(0)]
+for (var i in arrs)
+   print(arrs[i].length)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nashorn/script/basic/JDK-8157251.js.EXPECTED	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,2 @@
+20
+0
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nashorn/script/basic/JDK-8195829.js	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8195829 : Parsing a nameless ES6 class results in a thrown NullPointerException.
+ *
+ * @test
+ * @run
+ */
+
+var Parser = Java.type("jdk.nashorn.api.tree.Parser");
+var SimpleTreeVisitor = Java.type("jdk.nashorn.api.tree.SimpleTreeVisitorES6");
+var parser = Parser.create("--language=es6"); 
+var ast = parser.parse("test.js", "(class {});", print);
+var reachedClassExpr = false;
+ast.accept(new (Java.extend(SimpleTreeVisitor)) {
+    visitClassExpression: function(node, extra) {
+        reachedClassExpr = true;
+        Assert.assertTrue(node.name === null);
+    }
+}, null);
+
+Assert.assertTrue(reachedClassExpr);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nashorn/script/nosecurity/jjs-option-t.js	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+/**
+ * JDK-8147614: add jjs test for -t option.
+ * @test
+ * @option -scripting
+ * @run
+ * @summary Test -t flag and its basic functionality
+ */
+
+load(__DIR__ + "jjs-common.js")
+
+var timezone = Java.type("java.util.TimeZone")
+var currentTimezone = timezone.getDefault().getID()
+var msg_flag = "print($OPTIONS._timezone.ID)"
+var e_outp = "Asia/Tokyo"
+var e_outn = currentTimezone
+
+var msg_func=<<EOD
+var d= new Date(0)
+print(d.getTimezoneOffset())
+EOD
+
+var func_cond_p = <<'EOD'
+out==-540
+EOD
+
+var func_cond_n = <<'EOD'
+out==-timezone.getDefault().getRawOffset()/60000
+EOD
+
+var arg_p = "-t=Asia/Tokyo ${testfunc_file}"
+var arg_n = "${testfunc_file}"
+
+testjjs_flag_and_func("-t","=Asia/Tokyo")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nashorn/script/nosecurity/jjs-option-t.js.EXPECTED	Fri Feb 02 01:52:03 2018 +0000
@@ -0,0 +1,6 @@
+-t flag positive test:
+flag test PASSED
+functionality test PASSED
+-t flag negative test:
+flag test PASSED
+functionality test PASSED
--- a/test/nashorn/src/jdk/nashorn/api/scripting/test/ScriptEngineSecurityTest.java	Thu Feb 01 11:58:38 2018 +0100
+++ b/test/nashorn/src/jdk/nashorn/api/scripting/test/ScriptEngineSecurityTest.java	Fri Feb 02 01:52:03 2018 +0000
@@ -133,7 +133,7 @@
         }
     }
 
-
+    // This also covers overriding finalizer in JavaAdapter such as JDK-8194985
     @Test
     public void securitySystemExitFromFinalizerThread() throws ScriptException {
         if (System.getSecurityManager() == null) {