changeset 2361:55107b4de4d8

Merge
author prr
date Tue, 22 Nov 2016 10:48:24 -0800
parents 48086092c1db 108814a7bae0
children 744d378b8870 9e77806ba96b
files make/common/CORE_PKGS.gmk make/common/NON_CORE_PKGS.gmk
diffstat 24 files changed, 521 insertions(+), 1296 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Mon Nov 14 10:00:15 2016 -0800
+++ b/.hgtags	Tue Nov 22 10:48:24 2016 -0800
@@ -387,3 +387,4 @@
 2b3e5caafe3594ea507c37675c4d3086f415dc64 jdk-9+142
 1fc62b1c629fb80fdaa639d3b59452a184f0d705 jdk-9+143
 8d337fd6333e28c48aa87880144b840aad82baaf jdk-9+144
+ff98aa9ec9fae991e426ce5926fc9036d25f5562 jdk-9+145
--- a/common/autoconf/basics.m4	Mon Nov 14 10:00:15 2016 -0800
+++ b/common/autoconf/basics.m4	Tue Nov 22 10:48:24 2016 -0800
@@ -1048,7 +1048,9 @@
   # These tools might not be installed by default,
   # need hint on how to install them.
   BASIC_REQUIRE_PROGS(UNZIP, unzip)
-  BASIC_REQUIRE_PROGS(ZIP, zip)
+  # Since zip uses "ZIP" as a environment variable for passing options, we need
+  # to name our variable differently, hence ZIPEXE.
+  BASIC_REQUIRE_PROGS(ZIPEXE, zip)
 
   # Non-required basic tools
 
--- a/common/autoconf/generated-configure.sh	Mon Nov 14 10:00:15 2016 -0800
+++ b/common/autoconf/generated-configure.sh	Tue Nov 22 10:48:24 2016 -0800
@@ -945,7 +945,7 @@
 READELF
 OTOOL
 LDD
-ZIP
+ZIPEXE
 UNZIP
 TAR_SUPPORTS_TRANSFORM
 TAR_INCLUDE_PARAM
@@ -1292,7 +1292,7 @@
 NICE
 MAKE
 UNZIP
-ZIP
+ZIPEXE
 LDD
 OTOOL
 READELF
@@ -2236,7 +2236,7 @@
   NICE        Override default value for NICE
   MAKE        Override default value for MAKE
   UNZIP       Override default value for UNZIP
-  ZIP         Override default value for ZIP
+  ZIPEXE      Override default value for ZIPEXE
   LDD         Override default value for LDD
   OTOOL       Override default value for OTOOL
   READELF     Override default value for READELF
@@ -5093,7 +5093,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1479120453
+DATE_WHEN_GENERATED=1479822431
 
 ###############################################################################
 #
@@ -21373,13 +21373,15 @@
   fi
 
 
-
-
-
-  # Publish this variable in the help.
-
-
-  if [ -z "${ZIP+x}" ]; then
+  # Since zip uses "ZIP" as a environment variable for passing options, we need
+  # to name our variable differently, hence ZIPEXE.
+
+
+
+  # Publish this variable in the help.
+
+
+  if [ -z "${ZIPEXE+x}" ]; then
     # The variable is not set by user, try to locate tool using the code snippet
     for ac_prog in zip
 do
@@ -21387,56 +21389,56 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ZIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ZIP in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-ZIP=$ac_cv_path_ZIP
-if test -n "$ZIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5
-$as_echo "$ZIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ZIP" && break
-done
-
-  else
-    # The variable is set, but is it from the command line or the environment?
-
-    # Try to remove the string !ZIP! from our list.
-    try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ZIP!/}
-    if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
-      # If it failed, the variable was not from the command line. Ignore it,
-      # but warn the user (except for BASH, which is always set by the calling BASH).
-      if test "xZIP" != xBASH; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ZIP from the environment. Use command line variables instead." >&5
-$as_echo "$as_me: WARNING: Ignoring value of ZIP from the environment. Use command line variables instead." >&2;}
+if ${ac_cv_path_ZIPEXE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ZIPEXE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ZIPEXE="$ZIPEXE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ZIPEXE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ZIPEXE=$ac_cv_path_ZIPEXE
+if test -n "$ZIPEXE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIPEXE" >&5
+$as_echo "$ZIPEXE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ZIPEXE" && break
+done
+
+  else
+    # The variable is set, but is it from the command line or the environment?
+
+    # Try to remove the string !ZIPEXE! from our list.
+    try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ZIPEXE!/}
+    if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
+      # If it failed, the variable was not from the command line. Ignore it,
+      # but warn the user (except for BASH, which is always set by the calling BASH).
+      if test "xZIPEXE" != xBASH; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ZIPEXE from the environment. Use command line variables instead." >&5
+$as_echo "$as_me: WARNING: Ignoring value of ZIPEXE from the environment. Use command line variables instead." >&2;}
       fi
       # Try to locate tool using the code snippet
       for ac_prog in zip
@@ -21445,135 +21447,135 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ZIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ZIP in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-ZIP=$ac_cv_path_ZIP
-if test -n "$ZIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5
-$as_echo "$ZIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ZIP" && break
-done
-
-    else
-      # If it succeeded, then it was overridden by the user. We will use it
-      # for the tool.
-
-      # First remove it from the list of overridden variables, so we can test
-      # for unknown variables in the end.
-      CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
-
-      # Check if we try to supply an empty value
-      if test "x$ZIP" = x; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool ZIP= (no value)" >&5
-$as_echo "$as_me: Setting user supplied tool ZIP= (no value)" >&6;}
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZIP" >&5
-$as_echo_n "checking for ZIP... " >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
-$as_echo "disabled" >&6; }
-      else
-        # Check if the provided tool contains a complete path.
-        tool_specified="$ZIP"
-        tool_basename="${tool_specified##*/}"
-        if test "x$tool_basename" = "x$tool_specified"; then
-          # A command without a complete path is provided, search $PATH.
-          { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ZIP=$tool_basename" >&5
-$as_echo "$as_me: Will search for user supplied tool ZIP=$tool_basename" >&6;}
-          # Extract the first word of "$tool_basename", so it can be a program name with args.
-set dummy $tool_basename; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ZIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ZIP in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-ZIP=$ac_cv_path_ZIP
-if test -n "$ZIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5
-$as_echo "$ZIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-          if test "x$ZIP" = x; then
-            as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5
-          fi
-        else
-          # Otherwise we believe it is a complete path. Use it as it is.
-          { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ZIP=$tool_specified" >&5
-$as_echo "$as_me: Will use user supplied tool ZIP=$tool_specified" >&6;}
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZIP" >&5
-$as_echo_n "checking for ZIP... " >&6; }
-          if test ! -x "$tool_specified"; then
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
-            as_fn_error $? "User supplied tool ZIP=$tool_specified does not exist or is not executable" "$LINENO" 5
-          fi
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5
-$as_echo "$tool_specified" >&6; }
-        fi
-      fi
-    fi
-
-  fi
-
-
-
-  if test "x$ZIP" = x; then
-    as_fn_error $? "Could not find required tool for ZIP" "$LINENO" 5
+if ${ac_cv_path_ZIPEXE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ZIPEXE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ZIPEXE="$ZIPEXE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ZIPEXE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ZIPEXE=$ac_cv_path_ZIPEXE
+if test -n "$ZIPEXE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIPEXE" >&5
+$as_echo "$ZIPEXE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ZIPEXE" && break
+done
+
+    else
+      # If it succeeded, then it was overridden by the user. We will use it
+      # for the tool.
+
+      # First remove it from the list of overridden variables, so we can test
+      # for unknown variables in the end.
+      CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
+
+      # Check if we try to supply an empty value
+      if test "x$ZIPEXE" = x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool ZIPEXE= (no value)" >&5
+$as_echo "$as_me: Setting user supplied tool ZIPEXE= (no value)" >&6;}
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZIPEXE" >&5
+$as_echo_n "checking for ZIPEXE... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
+$as_echo "disabled" >&6; }
+      else
+        # Check if the provided tool contains a complete path.
+        tool_specified="$ZIPEXE"
+        tool_basename="${tool_specified##*/}"
+        if test "x$tool_basename" = "x$tool_specified"; then
+          # A command without a complete path is provided, search $PATH.
+          { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ZIPEXE=$tool_basename" >&5
+$as_echo "$as_me: Will search for user supplied tool ZIPEXE=$tool_basename" >&6;}
+          # Extract the first word of "$tool_basename", so it can be a program name with args.
+set dummy $tool_basename; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ZIPEXE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ZIPEXE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ZIPEXE="$ZIPEXE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ZIPEXE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ZIPEXE=$ac_cv_path_ZIPEXE
+if test -n "$ZIPEXE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIPEXE" >&5
+$as_echo "$ZIPEXE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+          if test "x$ZIPEXE" = x; then
+            as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5
+          fi
+        else
+          # Otherwise we believe it is a complete path. Use it as it is.
+          { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ZIPEXE=$tool_specified" >&5
+$as_echo "$as_me: Will use user supplied tool ZIPEXE=$tool_specified" >&6;}
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZIPEXE" >&5
+$as_echo_n "checking for ZIPEXE... " >&6; }
+          if test ! -x "$tool_specified"; then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+            as_fn_error $? "User supplied tool ZIPEXE=$tool_specified does not exist or is not executable" "$LINENO" 5
+          fi
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5
+$as_echo "$tool_specified" >&6; }
+        fi
+      fi
+    fi
+
+  fi
+
+
+
+  if test "x$ZIPEXE" = x; then
+    as_fn_error $? "Could not find required tool for ZIPEXE" "$LINENO" 5
   fi
 
 
--- a/common/autoconf/spec.gmk.in	Mon Nov 14 10:00:15 2016 -0800
+++ b/common/autoconf/spec.gmk.in	Tue Nov 22 10:48:24 2016 -0800
@@ -657,8 +657,7 @@
 UNIQ:=@UNIQ@
 WC:=@WC@
 XARGS:=@XARGS@
-ZIPEXE:=@ZIP@
-ZIP:=@ZIP@
+ZIPEXE:=@ZIPEXE@
 UNZIP:=@UNZIP@
 MT:=@FIXPATH@ @MT@
 RC:=@FIXPATH@ @RC@
--- a/common/bin/compare.sh	Mon Nov 14 10:00:15 2016 -0800
+++ b/common/bin/compare.sh	Tue Nov 22 10:48:24 2016 -0800
@@ -372,7 +372,7 @@
                 $CAT $OTHER_DIR/$f | eval "$HTML_FILTER" > $OTHER_FILE &
                 $CAT $THIS_DIR/$f  | eval "$HTML_FILTER" > $THIS_FILE &
                 wait
-            elif [ "$f" = "./lib/classlist" ]; then
+            elif [[ "$f" = *"/lib/classlist" ]]; then
                 # The classlist files may have some lines in random order
                 OTHER_FILE=$WORK_DIR/$f.other
                 THIS_FILE=$WORK_DIR/$f.this
@@ -642,69 +642,18 @@
 
     if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
         unset _NT_SYMBOL_PATH
-        # On windows we need to unzip the debug symbols, if present
-        OTHER_FILE_BASE=${OTHER_FILE/.dll/}
-        OTHER_FILE_BASE=${OTHER_FILE_BASE/.exe/}
-        OTHER_FILE_BASE=${OTHER_FILE_BASE/.cpl/}
-        DIZ_NAME=$(basename $OTHER_FILE_BASE).diz
-        # Some .exe files have the same name as a .dll file. Make sure the exe
-        # files get the right debug symbols.
-        if [ "$NAME" = "java.exe" ] \
-               && [ -f "$OTHER/support/native/java.base/java_objs/java.diz" ]; then
-            OTHER_DIZ_FILE="$OTHER/support/native/java.base/java_objs/java.diz"
-        elif [ "$NAME" = "jimage.exe" ] \
-               && [ -f "$OTHER/support/native/jdk.jlink/jimage_objs/jimage.diz" ]; then
-            OTHER_DIZ_FILE="$OTHER/support/modules_cmds/jdk.jlink/jimage.diz"
-        elif [ "$NAME" = "javacpl.exe" ] \
-               && [ -f "$OTHER/support/native/jdk.plugin/javacpl/javacpl.diz" ]; then
-            OTHER_DIZ_FILE="$OTHER/support/modules_cmds/jdk.deploy.controlpanel/javacpl.diz"
-        elif [ -f "${OTHER_FILE_BASE}.diz" ]; then
-            OTHER_DIZ_FILE=${OTHER_FILE_BASE}.diz
-        else
-            # Some files, jli.dll, appears twice in the image but only one of
-            # them has a diz file next to it.
-            OTHER_DIZ_FILE="$($FIND $OTHER_DIR -name $DIZ_NAME | $SED 1q)"
-            if [ ! -f "$OTHER_DIZ_FILE" ]; then
-                # As a last resort, look for diz file in the whole build output
-                # dir.
-                OTHER_DIZ_FILE="$($FIND $OTHER -name $DIZ_NAME | $SED 1q)"
-            fi
+        if [ "$(uname -o)" = "Cygwin" ]; then
+            THIS=$(cygpath -msa $THIS)
+            OTHER=$(cygpath -msa $OTHER)
         fi
-        if [ -n "$OTHER_DIZ_FILE" ]; then
-            $MKDIR -p $FILE_WORK_DIR/other
-            (cd $FILE_WORK_DIR/other ; $UNARCHIVE -o $OTHER_DIZ_FILE)
-            export _NT_SYMBOL_PATH="$FILE_WORK_DIR/other"
-        fi
-
-        THIS_FILE_BASE=${THIS_FILE/.dll/}
-        THIS_FILE_BASE=${THIS_FILE_BASE/.exe/}
-        THIS_FILE_BASE=${THIS_FILE_BASE/.cpl/}
-        # Some .exe files have the same name as a .dll file. Make sure the exe
-        # files get the right debug symbols.
-        if [ "$NAME" = "java.exe" ] \
-               && [ -f "$THIS/support/native/java.base/java_objs/java.diz" ]; then
-            THIS_DIZ_FILE="$THIS/support/native/java.base/java_objs/java.diz"
-        elif [ "$NAME" = "jimage.exe" ] \
-               && [ -f "$THIS/support/native/jdk.jlink/jimage_objs/jimage.diz" ]; then
-            THIS_DIZ_FILE="$THIS/support/modules_cmds/jdk.jlink/jimage.diz"
-        elif [ "$NAME" = "javacpl.exe" ] \
-               && [ -f "$THIS/support/native/jdk.plugin/javacpl/javacpl.diz" ]; then
-            THIS_DIZ_FILE="$THIS/support/modules_cmds/jdk.deploy.controlpanel/javacpl.diz"
-        elif [ -f "${THIS_FILE_BASE}.diz" ]; then
-            THIS_DIZ_FILE=${THIS_FILE/.dll/}.diz
-        else
-            THIS_DIZ_FILE="$($FIND $THIS_DIR -name $DIZ_NAME | $SED 1q)"
-            if [ ! -f "$THIS_DIZ_FILE" ]; then
-                # As a last resort, look for diz file in the whole build output
-                # dir.
-                THIS_DIZ_FILE="$($FIND $THIS -name $DIZ_NAME | $SED 1q)"
-            fi
-        fi
-        if [ -n "$THIS_DIZ_FILE" ]; then
-            $MKDIR -p $FILE_WORK_DIR/this
-            (cd $FILE_WORK_DIR/this ; $UNARCHIVE -o $THIS_DIZ_FILE)
-            export _NT_SYMBOL_PATH="$_NT_SYMBOL_PATH;$FILE_WORK_DIR/this"
-        fi
+        # Build an _NT_SYMBOL_PATH that contains all known locations for
+        # pdb files.
+        PDB_DIRS="$(ls -d \
+            {$OTHER,$THIS}/support/modules_{cmds,libs}/{*,*/*} \
+            {$OTHER,$THIS}/support/demos/image/jvmti/*/lib \
+            {$OTHER,$THIS}/support/native/java.base/java_objs \
+            )"
+        export _NT_SYMBOL_PATH="$(echo $PDB_DIRS | tr ' ' ';')"
     fi
 
     if [ -z "$SKIP_BIN_DIFF" ]; then
--- a/common/bin/compare_exceptions.sh.incl	Mon Nov 14 10:00:15 2016 -0800
+++ b/common/bin/compare_exceptions.sh.incl	Tue Nov 22 10:48:24 2016 -0800
@@ -431,6 +431,8 @@
 
   ACCEPTED_JARZIP_CONTENTS="
       /modules_libs/java.security.jgss/w2k_lsa_auth.diz
+      /modules_libs/java.security.jgss/w2k_lsa_auth.pdb
+      /modules_libs/java.security.jgss/w2k_lsa_auth.map
       /modules_libs/java.security.jgss/w2k_lsa_auth.dll
       "
 
--- a/make/Bundles.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/Bundles.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -101,7 +101,7 @@
 	          ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) $$($1_SUBDIR) $(TAR_IGNORE_EXIT_VALUE) ) \
 	          | $(GZIP) > $$@
             else ifeq ($$($1_TYPE), zip)
-	      $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1 && $(ZIP) -qr $$@ .
+	      $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1 && $(ZIPEXE) -qr $$@ .
             endif
           endif
         else
@@ -113,7 +113,7 @@
 	        | $(GZIP) > $$@
           else ifeq ($$($1_TYPE), zip)
 	    $(CD) $$($1_BASE_DIR) \
-	        && $(ZIP) -qr $$@ . -i@$(SUPPORT_OUTPUTDIR)/bundles/_$1_files
+	        && $(ZIPEXE) -qr $$@ . -i@$(SUPPORT_OUTPUTDIR)/bundles/_$1_files
           endif
         endif
 
--- a/make/Javadoc.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/Javadoc.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -50,17 +50,6 @@
 # Should we use -Xdocrootparent? Allow custom to overwrite.
 DOCROOTPARENT_FLAG = TRUE
 
-# The core api index file is the target for the core api javadocs rule
-# and needs to be defined early so that all other javadoc rules may
-# depend on it.
-CORE_INDEX_FILE := $(JAVADOC_OUTPUTDIR)/api/index.html
-
-# Symbols
-TRADEMARK := ™
-COPYRIGHT_SYMBOL := &$(HASH)x00a9;
-COPYRIGHT_TEXT := Copyright
-ALL_RIGHTS_RESERVED := All rights reserved.
-
 # URLs
 JAVADOC_BASE_URL := http://docs.oracle.com/javase/$(VERSION_SPECIFICATION)/docs
 BUG_SUBMIT_URL := http://bugreport.java.com/bugreport/
@@ -69,79 +58,131 @@
 # Text snippets
 
 FULL_COMPANY_NAME := Oracle and/or its affiliates
-COMPANY_ADDRESS := 500 Oracle Parkway<br>Redwood Shores, CA 94065 USA.
+COMPANY_ADDRESS := 500 Oracle Parkway<br>Redwood Shores, CA 94065 USA
 BUG_SUBMIT_LINE := <a href="$(BUG_SUBMIT_URL)">Submit a bug or feature</a>
-JAVA_TRADEMARK_LINE := Java is a trademark or registered trademark of \
-    $(FULL_COMPANY_NAME) in the US and other countries.
 
-COMMON_BOTTOM_ADDRESS := $(COMPANY_ADDRESS)
-COMMON_BOTTOM_TEXT := $(BUG_SUBMIT_LINE)<br>$(JAVA_TRADEMARK_LINE)
+COMMON_BOTTOM_TEXT := $(BUG_SUBMIT_LINE)<br> Java is a trademark or registered \
+    trademark of $(FULL_COMPANY_NAME) in the US and other countries.
 
 CORE_BOTTOM_COPYRIGHT_URL := {@docroot}/../legal/cpyr.html
-CORE_BOTTOM_TEXT := $(BUG_SUBMIT_LINE)\
-<br>For further API reference and developer documentation, \
-see <a href="$(JAVADOC_BASE_URL)/index.html" target="_blank">Java SE \
-Documentation</a>. That documentation contains more detailed, \
-developer-targeted descriptions, with conceptual overviews, definitions of \
-terms, workarounds, and working code examples.
+CORE_BOTTOM_TEXT := \
+    $(BUG_SUBMIT_LINE) \
+    <br>For further API reference and developer documentation, see \
+    <a href="$(JAVADOC_BASE_URL)/index.html" target="_blank">Java SE \
+    Documentation</a>. That documentation contains more detailed, \
+    developer-targeted descriptions, with conceptual overviews, definitions of \
+    terms, workarounds, and working code examples.
 
 ifeq ($(VERSION_IS_GA), true)
-  DRAFT_HEADER :=
-  DRAFT_BOTTOM :=
-  DRAFT_WINTITLE :=
-  CORE_TOP_EARLYACCESS :=
+  DRAFT_MARKER :=
+  DRAFT_WINDOW_TITLE_MARKER :=
+  EARLYACCESS_TOP :=
 else
   # We need a draft format when not building the GA version.
-  DRAFT_HEADER := <br><strong>DRAFT&nbsp;$(VERSION_STRING)</strong>
-  DRAFT_BOTTOM := <br><strong>DRAFT&nbsp;$(VERSION_STRING)</strong>
-  DRAFT_WINTITLE := $(VERSION_BUILD)
-  CORE_TOP_EARLYACCESS := \
-<div style="background-color: $$(HASH)EEEEEE"> \
-<div style="padding: 6px; margin-top: 2px; margin-bottom: 6px; \
-margin-left: 6px; margin-right: 6px; text-align: justify; \
-font-size: 80%; font-family: Helvetica, Arial, sans-serif; \
-font-weight: normal;"> \
-Please note that the specifications and other information \
-contained herein are not final and are subject to change. \
-The information is being made available to you solely for purpose of \
-evaluation. \
-</div> </div>
+  DRAFT_MARKER := <br><strong>DRAFT&nbsp;$(VERSION_STRING)</strong>
+  ifeq ($(VERSION_BUILD), 0)
+    DRAFT_WINDOW_TITLE_MARKER := $(SPACE)[ad-hoc build]
+  else
+    DRAFT_WINDOW_TITLE_MARKER := $(SPACE)[build $(VERSION_BUILD)]
+  endif
+  EARLYACCESS_TOP := \
+      <div style="background-color: $$(HASH)EEEEEE"><div style="padding: 6px; \
+      margin-top: 2px; margin-bottom: 6px; margin-left: 6px; margin-right: \
+      6px; text-align: justify; font-size: 80%; font-family: Helvetica, Arial, \
+      sans-serif; font-weight: normal;">Please note that the specifications \
+      and other information contained herein are not final and are subject to \
+      change. The information is being made available to you solely for \
+      purpose of evaluation.</div></div>
 endif
 
 ################################################################################
+# Special treatment for the core package list. All separate "small" javadoc
+# invocation needs to be able to see the core package list.
+
+ALL_PKG_DIRS := $(dir $(filter %.java, $(call CacheFind, \
+    $(wildcard $(JAVADOC_SOURCE_DIRS)))))
+ALL_SRC_PREFIXES := $(addsuffix /%, $(wildcard $(JAVADOC_SOURCE_DIRS)))
+ALL_PKG_DIRNAMES := $(foreach prefix, $(ALL_SRC_PREFIXES), \
+    $(patsubst $(prefix),%, $(filter $(prefix), $(ALL_PKG_DIRS))))
+ALL_PACKAGES := $(sort $(subst /,., $(patsubst %/, %, $(ALL_PKG_DIRNAMES))))
+
+# Core packages are all packages beginning with java, javax or org, except a few
+# excludes.
+JAVA_PACKAGES := $(filter java.%, $(ALL_PACKAGES))
+JAVAX_PACKAGES := $(filter javax.%, $(ALL_PACKAGES))
+ORG_PACKAGES := $(filter org.%, $(ALL_PACKAGES))
+
+# Allow custom makefile to add more excluded packages
+CORE_EXCLUDED_PACKAGES += \
+    java.awt.dnd.peer \
+    java.awt.peer \
+    javax.smartcardio \
+    org.jcp.xml.dsig.internal% \
+    org.w3c.dom.css \
+    org.w3c.dom.html \
+    org.w3c.dom.stylesheets \
+    org.w3c.dom.xpath \
+    #
+
+CORE_PACKAGES := $(filter-out $(CORE_EXCLUDED_PACKAGES), \
+    $(JAVA_PACKAGES) $(JAVAX_PACKAGES) $(ORG_PACKAGES))
+
+CORE_PACKAGES_LIST_DIR := $(SUPPORT_OUTPUTDIR)/docs/core-packages
+CORE_PACKAGES_LIST_FILE := $(CORE_PACKAGES_LIST_DIR)/package-list
+
+CORE_PACKAGES_VARDEPS_FILE := $(call DependOnVariable, CORE_PACKAGES, \
+    $(CORE_PACKAGES_LIST_FILE).vardeps)
+
+$(CORE_PACKAGES_LIST_FILE): $(CORE_PACKAGES_VARDEPS_FILE)
+	$(call MakeDir, $(@D))
+	$(eval $(call ListPathsSafely, CORE_PACKAGES, $@))
+
+################################################################################
 # Support functions for SetupJavadocGeneration
 
-# Print an option line to the target file
-# Arguments:
-# arg 1: the option name
-# arg 2-3: optional arguments to the option
-define AddOption
-	$(PRINTF) "%s$(if $(strip $2), '%s',)$(if $(strip $3), '%s',)\n" \
-	    "$(strip $1)"$(if $(strip $2), '$(strip $2)',)$(if $(strip $3), \
-	    '$(strip $3)',) >> $@
-endef
-
-# This function goes to great pains to exactly mimic the old behavior
-# in all details, including whitespace.
+# Generate the text used in the -bottom argument.
 # Note that COPYRIGHT_YEAR is the current year (from spec.gmk)
 # Arguments:
 # arg 1: first copyright year
 # arg 2: copyright url (optional)
-# arg 3: company address (optional)
-# arg 4: free-form text snippet (optional)
+# arg 3: free-form text snippet (optional)
 define GenerateBottom
-  <font size="-1">$(if $(strip $4), $(strip $4))<br> $(if \
-      $(strip $2),<a href="$(strip $2)">$(COPYRIGHT_TEXT)</a>,$(COPYRIGHT_TEXT)) \
-      $(COPYRIGHT_SYMBOL) $(strip $1), $(COPYRIGHT_YEAR), \
-      $(FULL_COMPANY_NAME). $(strip $3) \
-      $(ALL_RIGHTS_RESERVED)$(if $(strip $4), )</font>
+  <font size="-1">$(if $(strip $3), $(strip $3))<br> $(if \
+      $(strip $2),<a href="$(strip $2)">Copyright</a>,Copyright) \
+      &copy; $(strip $1), $(COPYRIGHT_YEAR), $(FULL_COMPANY_NAME). \
+      $(COMPANY_ADDRESS). All rights reserved.</font>
 endef
 
 # Speed up finding by filling cache
 $(eval $(call FillCacheFind, $(wildcard $(JAVADOC_SOURCE_DIRS))))
 
-# Prevent # from expanding
-EscapeHash = $(subst $(HASH),{hash},$(strip $1))
+# In order to get a specific ordering it's necessary to specify the total
+# ordering of tags as the tags are otherwise ordered in order of definition.
+DEFAULT_JAVADOC_TAGS := \
+    -tag beaninfo:X \
+    -tag revised:X \
+    -tag since.unbundled:X \
+    -tag spec:X \
+    -tag specdefault:X \
+    -tag Note:X \
+    -tag ToDo:X \
+    -tag 'apiNote:a:API Note:' \
+    -tag 'implSpec:a:Implementation Requirements:' \
+    -tag 'implNote:a:Implementation Note:' \
+    -tag param \
+    -tag return \
+    -tag throws \
+    -tag since \
+    -tag version \
+    -tag serialData \
+    -tag factory \
+    -tag see \
+    -tag 'jvms:a:See <cite>The Java&trade; Virtual Machine Specification</cite>:' \
+    -tag 'jls:a:See <cite>The Java&trade; Language Specification</cite>:' \
+    #
+
+DEFAULT_JAVADOC_OPTIONS := -XDignore.symbol.file=true -use -keywords -notimestamp \
+    -serialwarn -encoding ISO-8859-1 -breakiterator --system none
 
 ################################################################################
 # Setup make rules for running javadoc.
@@ -154,7 +195,6 @@
 # Remaining parameters are named arguments. These include:
 #   MODULES - Modules to include
 #   PACKAGES - Packages to include
-#   PACKAGE_FILTER - Filter for packages
 #   IS_CORE - Set to TRUE for the Core API package which needs special treatment
 #   API_ROOT - Where to base the documentation (jre or jdk)
 #   DEST_DIR - A directory relative to the API root
@@ -164,15 +204,10 @@
 #   HEADER_TITLE - Title to use in -header. Computed from TITLE if empty.
 #   DOC_TITLE - Title to use in -doctitle. Computed from TITLE if empty.
 #   FIRST_COPYRIGHT_YEAR - First year this bundle was introduced
-#   DOCLINT - Doclint level. Defaults to "all".
+#   DISABLED_DOCLINT - Doclint warnings to exclude.
 #   DOCLINT_PACKAGES - Optional -Xdoclint/package value
-#   ENCODING - Change character encoding (defaults to 'ascii')
-#   SPLIT_INDEX - Enable -splitIndex
-#   BREAKITERATOR - Enable -breakiterator
-#   NODEPRECATEDLIST - Enable nodeprecatedlist
-#   NOINDEX - Enable -noindex and -nonavbar
+#   SPLIT_INDEX - Enable -splitIndex (split index-all.html if it is too large)
 #   BOTTOM_COPYRIGHT_URL - Copyright URL to use in -bottom
-#   BOTTOM_ADDRESS - Company address to use in -bottom
 #   BOTTOM_TEXT - Extra text to use in -bottom
 #   EXTRA_TOP - Additional -top data
 #
@@ -185,181 +220,104 @@
     $1_JAVA := $$(JAVA_SMALL)
     $1_OUTPUT_DIRNAME := $$($1_API_ROOT)/api/$$($1_DEST_DIR)
 
-    ifeq ($$($1_RELATIVE_CORE_DIR),)
-      # Compute a relative path to core root.
-      # The non-core api javadocs need to be able to access the root of the core
-      # api directory, so for jdk/api or jre/api to get to the core api/
-      # directory we would use this
-      # NOTE: Need to be able to override for broken old code in JShell
-      $1_RELATIVE_CORE_DIR := $$(strip $$(subst $$(call DirToDotDot, \
-          $$(JAVADOC_OUTPUTDIR))/,, $$(call DirToDotDot, \
-          $$(JAVADOC_OUTPUTDIR)/$$($1_OUTPUT_DIRNAME))))
-    endif
+    # Compute a relative path to core root.
+    # The non-core api javadocs need to be able to access the root of the core
+    # api directory, so for jdk/api or jre/api to get to the core api/
+    # directory we would use this
+    $1_RELATIVE_CORE_DIR := $$(call DirToDotDot, $$($1_OUTPUT_DIRNAME))/api
 
-    $1_DEPS += $(CORE_INDEX_FILE)
+    # We need to tell javadoc the directory in which to find the core package-list
+    $1_OPTIONS += -linkoffline $$($1_RELATIVE_CORE_DIR) $$(CORE_PACKAGES_LIST_DIR)
+
+    $1_DEPS += $(CORE_PACKAGES_LIST_FILE)
   endif
 
-  ifneq ($$($1_OVERVIEW), )
-    $1_DEPS +=  $$($1_OVERVIEW)
+  $1_OPTIONS += --add-modules $$(call CommaList, $$($1_MODULES))
+
+  ifneq ($$(LOG_LEVEL), trace)
+    $1_OPTIONS += -quiet
   endif
 
-  ifeq ($$($1_ENCODING), )
-    $1_ENCODING := ascii
+  ifneq ($$($1_DISABLED_DOCLINT), )
+    # Create a string like ",-syntax,-html"
+    $1_DOCLINT_EXCEPTIONS := ,$$(call CommaList, $$(addprefix -, $$($1_DISABLED_DOCLINT)))
   endif
+  $1_OPTIONS += -Xdoclint:all$$($1_DOCLINT_EXCEPTIONS)
 
-  ifeq ($$($1_DOCLINT), )
-    $1_DOCLINT := all
+  ifneq ($$($1_DOCLINT_PACKAGES), )
+    $1_OPTIONS += -Xdoclint/package:$$(call CommaList, $$($1_DOCLINT_PACKAGES))
   endif
 
   ifeq ($$($1_DOC_TITLE), )
     $1_DOC_TITLE := $$($1_TITLE)
   endif
+  $1_OPTIONS += -doctitle '$$($1_DOC_TITLE)'
 
   ifeq ($$($1_WINDOW_TITLE), )
-    $1_WINDOW_TITLE := $$(strip $$(subst $$(TRADEMARK),, $$($1_TITLE)))
+    $1_WINDOW_TITLE := $$(strip $$(subst &trade;,, $$($1_TITLE)))
+  endif
+  $1_OPTIONS += -windowtitle '$$($1_WINDOW_TITLE)$$(DRAFT_WINDOW_TITLE_MARKER)'
+
+  ifeq ($$($1_HEADER_TITLE), )
+    $1_HEADER_TITLE := $$(strip $$(subst &trade;,, $$($1_TITLE)))
+  endif
+  $1_OPTIONS += -header '<strong>$$($1_HEADER_TITLE)</strong>$$(DRAFT_MARKER)'
+
+  ifneq ($$($1_EXTRA_TOP), )
+    $1_OPTIONS += -top '$$($1_EXTRA_TOP)'
   endif
 
-  ifeq ($$($1_HEADER_TITLE), )
-    $1_HEADER_TITLE := $$(strip $$(subst $$(TRADEMARK),, $$($1_TITLE)))
+  ifeq ($$($1_BOTTOM_TEXT), )
+    $1_BOTTOM_TEXT := $(COMMON_BOTTOM_TEXT)
   endif
-  $1_HEADER := <strong>$$($1_HEADER_TITLE)</strong>
+  $1_BOTTOM := $$(call GenerateBottom, $$($1_FIRST_COPYRIGHT_YEAR), \
+      $$($1_BOTTOM_COPYRIGHT_URL), $$($1_BOTTOM_TEXT))
+  $1_OPTIONS += -bottom '$$($1_BOTTOM)$$(DRAFT_MARKER)'
 
-  $1_BOTTOM := $$(call GenerateBottom, $$($1_FIRST_COPYRIGHT_YEAR), \
-      $$($1_BOTTOM_COPYRIGHT_URL), $$($1_BOTTOM_ADDRESS), $$($1_BOTTOM_TEXT))
+  ifneq ($$($1_OVERVIEW), )
+    $1_OPTIONS += -overview $$($1_OVERVIEW)
+    $1_DEPS +=  $$($1_OVERVIEW)
+  endif
 
-  # The index.html, options, and packages files
-  $1_INDEX_FILE := $$(JAVADOC_OUTPUTDIR)/$$($1_OUTPUT_DIRNAME)/index.html
-  $1_OPTIONS_FILE := $$(SUPPORT_OUTPUTDIR)/docs/$1.options
-  $1_PACKAGES_FILE := $$(SUPPORT_OUTPUTDIR)/docs/$1.packages
+  ifneq ($$($1_SPLIT_INDEX), )
+    $1_OPTIONS += -splitIndex
+  endif
 
-  $1_PACKAGES_VARDEPS := $$($1_PACKAGES) $$($1_PACKAGES_SINGLE_CLASS)
-  $1_PACKAGES_VARDEPS_FILE := $$(call DependOnVariable, $1_PACKAGES_VARDEPS, \
-       $$($1_PACKAGES_FILE).vardeps)
+  ifneq ($$($DOCROOTPARENT_FLAG), )
+    $1_OPTIONS += -Xdocrootparent $(JAVADOC_BASE_URL)
+  endif
 
-  # Rule for creating a file with the package names in it
-  $$($1_PACKAGES_FILE): $$($1_PACKAGES_VARDEPS_FILE)
-	$$(call LogInfo, Creating Javadoc package file for $1)
-	$$(call MakeDir, $$(@D))
-        ifeq ($$($1_PACKAGES_SINGLE_CLASS), )
-	  $$(ECHO) $$($1_PACKAGES) | $$(TR) ' ' '\n' > $$@
-        else
-          # NOTE: This is for backwards compatibility for taglet
-	  $$(ECHO) $$($1_PACKAGES_SINGLE_CLASS) > $$@
-        endif
-
-  # NOTE: Not including $$($1_EXTRA_TOP) due to $$(HASH)
-  $1_OPTIONS_VARDEPS := $$(call EscapeHash, \
-      $$($DOCROOTPARENT_FLAG) $$(JAVADOC_BASE_URL) $$($1_NO_COMMON_TAGS) \
-      $$($1_DOCLINT) $$($1_DOCLINT_PACKAGES) $$(JAVADOC_SOURCE_DIRS) \
-      $$($1_MODULES) $$($1_ENCODING) $$($1_NODEPRECATEDLIST) \
-      $$($1_BREAKITERATOR) $$($1_SPLIT_INDEX) $$($1_OVERVIEW) \
-      $$($1_DOC_TITLE) $$($1_WINDOW_TITLE) $$(DRAFT_WINTITLE) \
-      $$($1_HEADER) $$(DRAFT_HEADER) $$($1_NOINDEX) $$($1_EXTRA_TOP_2) \
-      $$($1_BOTTOM) $$(DRAFT_BOTTOM)) $$($1_PACKAGE_FILTER) $$($1_RELATIVE_CORE_DIR) \
-      $$(JAVADOC_OUTPUTDIR) \
-  )
-  $1_OPTIONS_VARDEPS_FILE := $$(call DependOnVariable, $1_OPTIONS_VARDEPS, \
-       $$($1_OPTIONS_FILE).vardeps)
-
-  # Rule for creating a file with javadoc options in it
-  $$($1_OPTIONS_FILE): $$($1_OPTIONS_VARDEPS_FILE)
-	$$(call LogInfo, Creating Javadoc options file for $1)
-	$$(call MakeDir, $$(@D))
-	$$(RM) $$@
-	$$(call AddOption, -XDignore.symbol.file=true)
-        ifneq ($$(LOG_LEVEL), trace)
-	  $$(call AddOption, -quiet)
-        endif
-	$$(call AddOption, -use)
-	$$(call AddOption, -keywords)
-        ifneq ($$($DOCROOTPARENT_FLAG), )
-          # NOTE: Argument to -Xdocrootparent is not quoted to keep backwards compatibility.
-	  $$(call AddOption, -Xdocrootparent $(JAVADOC_BASE_URL))
-        endif
-        ifneq ($$($1_NO_COMMON_TAGS), TRUE)
-          # In order to get a specific ordering it's necessary to specify the total
-          # ordering of tags as the tags are otherwise ordered in order of definition.
-	  $$(call AddOption, -tag, beaninfo:X)
-	  $$(call AddOption, -tag, revised:X)
-	  $$(call AddOption, -tag, since.unbundled:X)
-	  $$(call AddOption, -tag, spec:X)
-	  $$(call AddOption, -tag, specdefault:X)
-	  $$(call AddOption, -tag, Note:X)
-	  $$(call AddOption, -tag, ToDo:X)
-	  $$(call AddOption, -tag, apiNote:a:API Note:)
-	  $$(call AddOption, -tag, implSpec:a:Implementation Requirements:)
-	  $$(call AddOption, -tag, implNote:a:Implementation Note:)
-	  $$(call AddOption, -tag, param)
-	  $$(call AddOption, -tag, return)
-	  $$(call AddOption, -tag, throws)
-	  $$(call AddOption, -tag, since)
-	  $$(call AddOption, -tag, version)
-	  $$(call AddOption, -tag, serialData)
-	  $$(call AddOption, -tag, factory)
-	  $$(call AddOption, -tag, see)
-	  $$(call AddOption, -tag, \
-              jvms:a:See <cite> The Java&trade; Virtual Machine Specification</cite>:)
-	  $$(call AddOption, -tag, \
-              jls:a:See <cite> The Java&trade; Language Specification</cite>:)
-        endif
-	$$(call AddOption, -Xdoclint:$$($1_DOCLINT))
-        ifneq ($$($1_DOCLINT_PACKAGES), )
-	  $$(call AddOption, -Xdoclint/package:$$(call CommaList, $$($1_DOCLINT_PACKAGES)))
-        endif
-	$$(call AddOption, --system, none)
-	$$(call AddOption, --module-source-path, $$(subst ",, $$(call PathList, $$(JAVADOC_SOURCE_DIRS))))
-	$$(call AddOption, --add-modules, $$(call CommaList, $$($1_MODULES)))
-	$$(call AddOption, -encoding, $$($1_ENCODING))
-        ifneq ($$($1_NODEPRECATEDLIST), )
-	  $$(call AddOption, -nodeprecatedlist)
-        endif
-        ifneq ($$($1_BREAKITERATOR), )
-	  $$(call AddOption, -breakiterator)
-        endif
-        ifneq ($$($1_SPLIT_INDEX), )
-	  $$(call AddOption, -splitIndex)
-        endif
-        ifneq ($$($1_OVERVIEW), )
-	  $$(call AddOption, -overview, $$($1_OVERVIEW))
-        endif
-	$$(call AddOption, -doctitle, $$($1_DOC_TITLE))
-	$$(call AddOption, -windowtitle, $$($1_WINDOW_TITLE) $$(DRAFT_WINTITLE))
-	$$(call AddOption, -header, $$($1_HEADER)$$(DRAFT_HEADER))
-        ifneq ($$($1_NOINDEX), )
-	  $$(call AddOption, -nonavbar)
-	  $$(call AddOption, -noindex)
-        endif
-        ifneq ($$($1_EXTRA_TOP_2), )
-	  $$(call AddOption, -top,$$($1_EXTRA_TOP_2))
-        endif
-	$$(call AddOption, -bottom, $$($1_BOTTOM)$$(DRAFT_BOTTOM))
-        ifneq ($$($1_PACKAGE_FILTER), )
-	  $$(call AddOption, -group, Packages, $$($1_PACKAGE_FILTER))
-        endif
-        ifneq ($$($1_RELATIVE_CORE_DIR), )
-	  $$(call AddOption, -linkoffline, $$($1_RELATIVE_CORE_DIR)/api, $$(JAVADOC_OUTPUTDIR)/api/)
-        endif
-        ifneq ($$($1_EXTRA_TOP), )
-	  $$(call AddOption, -top, $$($1_EXTRA_TOP))
-        endif
+  $1_VARDEPS := $$($1_OPTIONS) $$($1_PACKAGES)
+  $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
+       $$(SUPPORT_OUTPUTDIR)/docs/$1.vardeps)
 
   $1_PACKAGE_DEPS := $$(call CacheFind, $$(wildcard $$(foreach p, \
       $$(subst .,/,$$(strip $$($1_PACKAGES))), \
       $$(addsuffix /$$p, $$(wildcard $$(JAVADOC_SOURCE_DIRS))))))
 
+  # If there are many packages, use an @-file...
+  ifneq ($$(word 17, $$($1_PACKAGES)), )
+    $1_PACKAGES_FILE := $$(SUPPORT_OUTPUTDIR)/docs/$1.packages
+    $1_PACKAGES_ARG := @$$($1_PACKAGES_FILE)
+  else
+    $1_PACKAGES_ARG := $$($1_PACKAGES)
+  endif
+
+  # The index.html which is a marker for all the output from javadoc.
+  $1_INDEX_FILE := $$(JAVADOC_OUTPUTDIR)/$$($1_OUTPUT_DIRNAME)/index.html
+
   # Rule for actually running javadoc
-  $$($1_INDEX_FILE): $$($1_OPTIONS_FILE) $$($1_PACKAGES_FILE) \
-    $$($1_PACKAGE_DEPS) $$($1_DEPS)
-	$$(call LogWarn, Generating Javadoc for $$($1_OUTPUT_DIRNAME))
+  $$($1_INDEX_FILE): $$($1_VARDEPS_FILE) $$($1_PACKAGE_DEPS) $$($1_DEPS)
+	$$(call LogWarn, Generating Javadoc from $$(words $$($1_PACKAGES)) package(s) for $$($1_OUTPUT_DIRNAME))
 	$$(call MakeDir, $$(@D))
-        ifneq ($$(findstring $$(LOG_LEVEL), debug trace),)
-	  $$(ECHO) "Contents of $$($1_OPTIONS_FILE):" `$$(CAT) $$($1_OPTIONS_FILE)`
-	  $$(ECHO) "Contents of $$($1_PACKAGES_FILE):" `$$(CAT) $$($1_PACKAGES_FILE)`
+        ifneq ($$($1_PACKAGES_FILE), )
+	  $$(eval $$(call ListPathsSafely, $1_PACKAGES, $$($1_PACKAGES_FILE)))
         endif
 	$$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/docs/$1.javadoc, \
 	    $$($1_JAVA) -Djava.awt.headless=true $(NEW_JAVADOC) -d $$(@D) \
-	    @$$($1_OPTIONS_FILE) @$$($1_PACKAGES_FILE))
-	$$(TOUCH) $$($1_INDEX_FILE)
+	        $$(DEFAULT_JAVADOC_TAGS) $$(DEFAULT_JAVADOC_OPTIONS) \
+	        --module-source-path $$(call PathList, $$(JAVADOC_SOURCE_DIRS)) \
+	        $$($1_OPTIONS) $$($1_PACKAGES_ARG))
 
   # The output returned will be the index.html file
   $1 := $$($1_INDEX_FILE)
@@ -367,250 +325,22 @@
 
 ################################################################################
 
-CORE_PACKAGES := \
-    java.applet \
-    java.awt \
-    java.awt.color \
-    java.awt.datatransfer \
-    java.awt.desktop \
-    java.awt.dnd \
-    java.awt.event \
-    java.awt.font \
-    java.awt.geom \
-    java.awt.im \
-    java.awt.im.spi \
-    java.awt.image \
-    java.awt.image.renderable \
-    java.awt.print \
-    java.beans \
-    java.beans.beancontext \
-    java.io \
-    java.lang \
-    java.lang.annotation \
-    java.lang.instrument \
-    java.lang.invoke \
-    java.lang.management \
-    java.lang.module \
-    java.lang.ref \
-    java.lang.reflect \
-    java.math \
-    java.net \
-    java.net.http \
-    java.net.spi \
-    java.nio \
-    java.nio.channels \
-    java.nio.channels.spi \
-    java.nio.charset \
-    java.nio.charset.spi \
-    java.nio.file \
-    java.nio.file.attribute \
-    java.nio.file.spi \
-    java.rmi \
-    java.rmi.activation \
-    java.rmi.dgc \
-    java.rmi.registry \
-    java.rmi.server \
-    java.security \
-    java.security.acl \
-    java.security.cert \
-    java.security.interfaces \
-    java.security.spec \
-    java.sql \
-    java.text \
-    java.text.spi \
-    java.time \
-    java.time.chrono \
-    java.time.format \
-    java.time.temporal \
-    java.time.zone \
-    java.util \
-    java.util.concurrent \
-    java.util.concurrent.atomic \
-    java.util.concurrent.locks \
-    java.util.function \
-    java.util.jar \
-    java.util.logging \
-    java.util.prefs \
-    java.util.regex \
-    java.util.spi \
-    java.util.stream \
-    java.util.zip \
-    javax.accessibility \
-    javax.activation \
-    javax.activity \
-    javax.annotation \
-    javax.annotation.processing \
-    javax.crypto \
-    javax.crypto.interfaces \
-    javax.crypto.spec \
-    javax.imageio \
-    javax.imageio.event \
-    javax.imageio.metadata \
-    javax.imageio.plugins.jpeg \
-    javax.imageio.plugins.bmp \
-    javax.imageio.plugins.tiff \
-    javax.imageio.spi \
-    javax.imageio.stream \
-    javax.jws \
-    javax.jws.soap \
-    javax.lang.model \
-    javax.lang.model.element \
-    javax.lang.model.type \
-    javax.lang.model.util \
-    javax.management \
-    javax.management.loading \
-    javax.management.monitor \
-    javax.management.relation \
-    javax.management.openmbean \
-    javax.management.timer \
-    javax.management.modelmbean \
-    javax.management.remote \
-    javax.management.remote.rmi \
-    javax.naming \
-    javax.naming.directory \
-    javax.naming.event \
-    javax.naming.ldap \
-    javax.naming.spi \
-    javax.net \
-    javax.net.ssl \
-    javax.print \
-    javax.print.attribute \
-    javax.print.attribute.standard \
-    javax.print.event \
-    javax.rmi \
-    javax.rmi.CORBA \
-    javax.rmi.ssl \
-    javax.script \
-    javax.security.auth \
-    javax.security.auth.callback \
-    javax.security.auth.kerberos \
-    javax.security.auth.login \
-    javax.security.auth.spi \
-    javax.security.auth.x500 \
-    javax.security.cert \
-    javax.security.sasl \
-    javax.sound.sampled \
-    javax.sound.sampled.spi \
-    javax.sound.midi \
-    javax.sound.midi.spi \
-    javax.sql \
-    javax.sql.rowset \
-    javax.sql.rowset.serial \
-    javax.sql.rowset.spi \
-    javax.swing \
-    javax.swing.border \
-    javax.swing.colorchooser \
-    javax.swing.filechooser \
-    javax.swing.event \
-    javax.swing.table \
-    javax.swing.text \
-    javax.swing.text.html \
-    javax.swing.text.html.parser \
-    javax.swing.text.rtf \
-    javax.swing.tree \
-    javax.swing.undo \
-    javax.swing.plaf \
-    javax.swing.plaf.basic \
-    javax.swing.plaf.metal \
-    javax.swing.plaf.multi \
-    javax.swing.plaf.nimbus \
-    javax.swing.plaf.synth \
-    javax.tools \
-    javax.transaction \
-    javax.transaction.xa \
-    javax.xml.catalog \
-    javax.xml.parsers \
-    javax.xml.bind \
-    javax.xml.bind.annotation \
-    javax.xml.bind.annotation.adapters \
-    javax.xml.bind.attachment \
-    javax.xml.bind.helpers \
-    javax.xml.bind.util \
-    javax.xml.soap \
-    javax.xml.ws \
-    javax.xml.ws.handler \
-    javax.xml.ws.handler.soap \
-    javax.xml.ws.http \
-    javax.xml.ws.soap \
-    javax.xml.ws.spi \
-    javax.xml.ws.spi.http \
-    javax.xml.ws.wsaddressing \
-    javax.xml.transform \
-    javax.xml.transform.sax \
-    javax.xml.transform.dom \
-    javax.xml.transform.stax \
-    javax.xml.transform.stream \
-    javax.xml \
-    javax.xml.crypto \
-    javax.xml.crypto.dom \
-    javax.xml.crypto.dsig \
-    javax.xml.crypto.dsig.dom \
-    javax.xml.crypto.dsig.keyinfo \
-    javax.xml.crypto.dsig.spec \
-    javax.xml.datatype \
-    javax.xml.validation \
-    javax.xml.namespace \
-    javax.xml.xpath \
-    javax.xml.stream \
-    javax.xml.stream.events \
-    javax.xml.stream.util \
-    org.ietf.jgss \
-    org.omg.CORBA \
-    org.omg.CORBA.DynAnyPackage \
-    org.omg.CORBA.ORBPackage \
-    org.omg.CORBA.TypeCodePackage \
-    org.omg.stub.java.rmi \
-    org.omg.CORBA.portable \
-    org.omg.CORBA_2_3 \
-    org.omg.CORBA_2_3.portable \
-    org.omg.CosNaming \
-    org.omg.CosNaming.NamingContextExtPackage \
-    org.omg.CosNaming.NamingContextPackage \
-    org.omg.SendingContext \
-    org.omg.PortableServer \
-    org.omg.PortableServer.CurrentPackage \
-    org.omg.PortableServer.POAPackage \
-    org.omg.PortableServer.POAManagerPackage \
-    org.omg.PortableServer.ServantLocatorPackage \
-    org.omg.PortableServer.portable \
-    org.omg.PortableInterceptor \
-    org.omg.PortableInterceptor.ORBInitInfoPackage \
-    org.omg.Messaging \
-    org.omg.IOP \
-    org.omg.IOP.CodecFactoryPackage \
-    org.omg.IOP.CodecPackage \
-    org.omg.Dynamic \
-    org.omg.DynamicAny \
-    org.omg.DynamicAny.DynAnyPackage \
-    org.omg.DynamicAny.DynAnyFactoryPackage \
-    org.w3c.dom \
-    org.w3c.dom.events \
-    org.w3c.dom.bootstrap \
-    org.w3c.dom.ls \
-    org.w3c.dom.ranges \
-    org.w3c.dom.traversal \
-    org.w3c.dom.views \
-    org.xml.sax \
-    org.xml.sax.ext \
-    org.xml.sax.helpers
-
 $(eval $(call SetupJavadocGeneration, coredocs, \
     MODULES := java.se.ee, \
     PACKAGES := $(CORE_PACKAGES), \
     IS_CORE := TRUE, \
     OVERVIEW := $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html, \
     WINDOW_TITLE := Java Platform SE $(VERSION_SPECIFICATION), \
-    HEADER_TITLE := Java$(TRADEMARK)&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;$(VERSION_SPECIFICATION), \
-    DOC_TITLE := Java$(TRADEMARK) Platform$(COMMA) Standard Edition \
+    HEADER_TITLE := Java&trade;&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;$(VERSION_SPECIFICATION), \
+    DOC_TITLE := Java&trade; Platform$(COMMA) Standard Edition \
       $(VERSION_SPECIFICATION)<br>API Specification, \
     FIRST_COPYRIGHT_YEAR := 1993, \
-    DOCLINT := reference, \
+    DISABLED_DOCLINT := accessibility html missing syntax, \
     DOCLINT_PACKAGES := -org.omg.* jdk.internal.logging.*, \
-    ENCODING := ISO-8859-1, \
     SPLIT_INDEX := TRUE, \
     BOTTOM_COPYRIGHT_URL := $(CORE_BOTTOM_COPYRIGHT_URL), \
     BOTTOM_TEXT := $(CORE_BOTTOM_TEXT), \
-    EXTRA_TOP := $(CORE_TOP_EARLYACCESS), \
+    EXTRA_TOP := $(EARLYACCESS_TOP), \
 ))
 
 TARGETS += $(coredocs)
@@ -623,14 +353,10 @@
         jdk.javadoc.doclet \
         jdk.javadoc.doclet.taglet \
         jdk.javadoc.doclets, \
-    PACKAGE_FILTER := jdk.javadoc.doclet*, \
     API_ROOT := jdk, \
     DEST_DIR := javadoc/doclet, \
     TITLE := Doclet API, \
     FIRST_COPYRIGHT_YEAR := 1993, \
-    BREAKITERATOR := TRUE, \
-    BOTTOM_ADDRESS := $(COMMON_BOTTOM_ADDRESS), \
-    BOTTOM_TEXT := $(COMMON_BOTTOM_TEXT), \
 ))
 
 TARGETS += $(docletapi)
@@ -640,36 +366,23 @@
 $(eval $(call SetupJavadocGeneration, old-docletapi, \
     MODULES := jdk.javadoc, \
     PACKAGES := com.sun.javadoc, \
-    PACKAGE_FILTER := com.sun.javadoc, \
     API_ROOT := jdk, \
     DEST_DIR := javadoc/old/doclet, \
     TITLE := Doclet API, \
     FIRST_COPYRIGHT_YEAR := 1993, \
-    BREAKITERATOR := TRUE, \
-    BOTTOM_ADDRESS := $(COMMON_BOTTOM_ADDRESS), \
-    BOTTOM_TEXT := $(COMMON_BOTTOM_TEXT), \
 ))
 
 TARGETS += $(old-docletapi)
 
 ################################################################################
 
-# Specify a single class instead of a package
-TAGLET_PACKAGE_SINGLE_CLASS := com/sun/tools/doclets/Taglet.java
-TAGLET_PACKAGE_DIR := $(LANGTOOLS_TOPDIR)/src/jdk.javadoc/share/classes
-
 $(eval $(call SetupJavadocGeneration, tagletapi, \
     MODULES := jdk.javadoc, \
     PACKAGES := com.sun.tools.doclets, \
-    PACKAGES_SINGLE_CLASS := $(TAGLET_PACKAGE_DIR)/$(TAGLET_PACKAGE_SINGLE_CLASS), \
     API_ROOT := jdk, \
     DEST_DIR := javadoc/old/taglet, \
     TITLE := Taglet API, \
     FIRST_COPYRIGHT_YEAR := 1993, \
-    BREAKITERATOR := TRUE, \
-    NOINDEX := TRUE, \
-    BOTTOM_ADDRESS := $(COMMON_BOTTOM_ADDRESS), \
-    BOTTOM_TEXT := $(COMMON_BOTTOM_TEXT), \
 ))
 
 TARGETS += $(tagletapi)
@@ -691,15 +404,12 @@
         org.w3c.dom.css \
         org.w3c.dom.events \
         org.w3c.dom.views, \
-    PACKAGE_FILTER := org.w3c.dom*, \
     API_ROOT := jre, \
     DEST_DIR := plugin/dom, \
     TITLE := Common DOM API, \
     FIRST_COPYRIGHT_YEAR := 2005, \
-    DOCLINT := none, \
+    DISABLED_DOCLINT := accessibility html missing, \
     SPLIT_INDEX := TRUE, \
-    BOTTOM_ADDRESS := $(COMMON_BOTTOM_ADDRESS), \
-    BOTTOM_TEXT := $(COMMON_BOTTOM_TEXT), \
 ))
 
 TARGETS += $(domapi)
@@ -717,9 +427,10 @@
     API_ROOT := jdk, \
     DEST_DIR := jpda/jdi, \
     OVERVIEW := $(JDK_TOPDIR)/src/jdk.jdi/share/classes/jdi-overview.html, \
-    TITLE := Java$(TRADEMARK) Debug Interface, \
+    TITLE := Java&trade; Debug Interface, \
     FIRST_COPYRIGHT_YEAR := 1999, \
-    DOCLINT := none, \
+    DISABLED_DOCLINT := accessibility missing syntax, \
+    SPLIT_INDEX := TRUE, \
 ))
 
 TARGETS += $(jdi)
@@ -736,9 +447,9 @@
     API_ROOT := jre, \
     DEST_DIR := security/jaas/spec, \
     OVERVIEW := $(JDK_TOPDIR)/src/jdk.security.auth/share/classes/jaas-overview.html, \
-    TITLE := Java$(TRADEMARK) Authentication and Authorization Service, \
+    TITLE := Java&trade; Authentication and Authorization Service, \
     FIRST_COPYRIGHT_YEAR := 1998, \
-    DOCLINT := none, \
+    DISABLED_DOCLINT := missing, \
 ))
 
 TARGETS += $(jaas)
@@ -751,10 +462,8 @@
     API_ROOT := jre, \
     DEST_DIR := security/jgss/spec, \
     OVERVIEW := $(JDK_TOPDIR)/src/java.security.jgss/share/classes/jgss-overview.html, \
-    TITLE := Java$(TRADEMARK) GSS-API Utilities, \
+    TITLE := Java&trade; GSS-API Utilities, \
     FIRST_COPYRIGHT_YEAR := 2000, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
 ))
 
 TARGETS += $(jgss)
@@ -766,10 +475,8 @@
     PACKAGES := javax.smartcardio, \
     API_ROOT := jre, \
     DEST_DIR := security/smartcardio/spec, \
-    TITLE := Java$(TRADEMARK) Smart Card I/O, \
+    TITLE := Java&trade; Smart Card I/O, \
     FIRST_COPYRIGHT_YEAR := 2005, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
 ))
 
 TARGETS += $(smartcardio)
@@ -783,10 +490,9 @@
         com.sun.net.httpserver.spi, \
     API_ROOT := jre, \
     DEST_DIR := net/httpserver/spec, \
-    TITLE := Java$(TRADEMARK) HTTP Server, \
+    TITLE := Java&trade; HTTP Server, \
     FIRST_COPYRIGHT_YEAR := 2005, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
+    DISABLED_DOCLINT := accessibility missing syntax, \
 ))
 
 TARGETS += $(httpserver)
@@ -799,9 +505,7 @@
     API_ROOT := jre, \
     DEST_DIR := plugin/jsobject, \
     FIRST_COPYRIGHT_YEAR := 1993, \
-    TITLE := Java$(TRADEMARK) JSObject Doc, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
+    TITLE := Java&trade; JSObject Doc, \
 ))
 
 TARGETS += $(jsobject)
@@ -814,10 +518,9 @@
     API_ROOT := jre, \
     DEST_DIR := management/extension, \
     OVERVIEW := $(JDK_TOPDIR)/src/java.management/share/classes/mgmt-overview.html, \
-    TITLE := Monitoring and Management Interface for the Java$(TRADEMARK) Platform, \
+    TITLE := Monitoring and Management Interface for the Java&trade; Platform, \
     FIRST_COPYRIGHT_YEAR := 2003, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
+    DISABLED_DOCLINT := accessibility missing reference, \
 ))
 
 TARGETS += $(mgmt)
@@ -833,8 +536,7 @@
     DEST_DIR := attach/spec, \
     TITLE := Attach API, \
     FIRST_COPYRIGHT_YEAR := 2005, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
+    DISABLED_DOCLINT := reference, \
 ))
 
 TARGETS += $(attach)
@@ -848,15 +550,12 @@
     DEST_DIR := jconsole/spec, \
     TITLE := JConsole API, \
     FIRST_COPYRIGHT_YEAR := 2006, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
 ))
 
 TARGETS += $(jconsole)
 
 ################################################################################
 
-# NOTE: Need to override RELATIVE_CORE_DIR to be bug compatible with old code.
 $(eval $(call SetupJavadocGeneration, jshellapi, \
     MODULES := jdk.jshell, \
     PACKAGES := \
@@ -865,10 +564,8 @@
         jdk.jshell.execution, \
     API_ROOT := jdk, \
     DEST_DIR := jshell, \
-    RELATIVE_CORE_DIR := ../../../.., \
     OVERVIEW := $(LANGTOOLS_TOPDIR)/src/jdk.jshell/share/classes/jdk/jshell/overview.html, \
     TITLE := JShell API, \
-    HEADER_TITLE := JSHELL API, \
     FIRST_COPYRIGHT_YEAR := 2015, \
 ))
 
@@ -882,11 +579,11 @@
         com.sun.source.doctree \
         com.sun.source.tree \
         com.sun.source.util, \
-    PACKAGE_FILTER := com.sun.source.*, \
     API_ROOT := jdk, \
     DEST_DIR := javac/tree, \
     TITLE := Compiler Tree API, \
     FIRST_COPYRIGHT_YEAR := 2005, \
+    SPLIT_INDEX := TRUE, \
 ))
 
 TARGETS += $(treeapi)
@@ -898,11 +595,11 @@
     PACKAGES := \
         jdk.nashorn.api.scripting \
         jdk.nashorn.api.tree, \
-    PACKAGE_FILTER := jdk.nashorn.api.*, \
     API_ROOT := jdk, \
     DEST_DIR := nashorn, \
     TITLE := Nashorn API, \
     FIRST_COPYRIGHT_YEAR := 2014, \
+    SPLIT_INDEX := TRUE, \
 ))
 
 TARGETS += $(nashornapi)
@@ -934,8 +631,6 @@
     DEST_DIR := nio/sctp/spec, \
     TITLE := SCTP API, \
     FIRST_COPYRIGHT_YEAR := 2009, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
 ))
 
 TARGETS += $(sctp)
@@ -949,7 +644,6 @@
     DEST_DIR := accessibility/jaccess/spec, \
     TITLE := JACCESS API, \
     FIRST_COPYRIGHT_YEAR := 2002, \
-    NODEPRECATEDLIST := TRUE, \
 ))
 
 TARGETS += $(jaccess)
@@ -963,8 +657,7 @@
     DEST_DIR := net/socketoptions/spec, \
     TITLE := jdk.net API, \
     FIRST_COPYRIGHT_YEAR := 2014, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
+    DISABLED_DOCLINT := missing, \
 ))
 
 TARGETS += $(jdknet)
@@ -980,8 +673,7 @@
     DEST_DIR := jlink, \
     TITLE := JLink Plugin API - EXPERIMENTAL, \
     FIRST_COPYRIGHT_YEAR := 2015, \
-    DOCLINT := none, \
-    NODEPRECATEDLIST := TRUE, \
+    DISABLED_DOCLINT := html missing syntax, \
 ))
 
 TARGETS += $(jlinkplugins)
@@ -1014,19 +706,13 @@
 
 ################################################################################
 # Optional target which bundles all generated javadocs into a zip archive.
-# The dependency on docs is handled in Main.gmk.
-
-# Add the core docs as prerequisite to the archive to trigger a rebuild
-# if the core docs were rebuilt. Ideally any doc rebuild should trigger
-# this, but the way prerequisites are currently setup in this file, that
-# is hard to achieve.
 
 JAVADOC_ARCHIVE_NAME := jdk-$(VERSION_STRING)-docs.zip
 JAVADOC_ARCHIVE_ASSEMBLY_DIR := $(SUPPORT_OUTPUTDIR)/docs/zip-docs
 JAVADOC_ARCHIVE_DIR := $(OUTPUT_ROOT)/bundles
 JAVADOC_ARCHIVE := $(JAVADOC_ARCHIVE_DIR)/$(JAVADOC_ARCHIVE_NAME)
 
-$(JAVADOC_ARCHIVE): $(CORE_INDEX_FILE)
+$(JAVADOC_ARCHIVE): $(TARGETS) $(COPY_TARGETS)
 	$(call LogInfo, Compressing javadoc to single $(JAVADOC_ARCHIVE_NAME))
 	$(MKDIR) -p $(JAVADOC_ARCHIVE_DIR)
 	$(RM) -r $(JAVADOC_ARCHIVE_ASSEMBLY_DIR)
@@ -1038,7 +724,7 @@
 	  name=`$(ECHO) $${target_dir} | $(SED) "s;/spec;;" | $(SED) "s;.*/;;"`; \
 	  $(LN) -s $${target_dir}  $${name}; \
 	done; \
-	$(ZIP) -q -r $(JAVADOC_ARCHIVE) * ; \
+	$(ZIPEXE) -q -r $(JAVADOC_ARCHIVE) * ; \
 	popd ;
 
 ZIP_TARGETS += $(JAVADOC_ARCHIVE)
--- a/make/Jprt.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/Jprt.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -71,11 +71,11 @@
   # This target must be called in the context of a SPEC file
   $(JPRT_ARCHIVE_BUNDLE): product-images
 	$(call MakeDir, $(@D))
-	$(CD) $(SRC_JDK_IMAGE_DIR) && $(ZIP) -y -q -r $@ .
+	$(CD) $(SRC_JDK_IMAGE_DIR) && $(ZIPEXE) -y -q -r $@ .
 
   $(JPRT_ARCHIVE_TEST_BUNDLE): test-image
 	$(call MakeDir, $(@D))
-	$(CD) $(SRC_TEST_IMAGE_DIR) && $(ZIP) -y -q -r $@ .
+	$(CD) $(SRC_TEST_IMAGE_DIR) && $(ZIPEXE) -y -q -r $@ .
 
   ##############################################################################
   # Optional symbols bundle
@@ -85,7 +85,7 @@
 
     $(JPRT_ARCHIVE_SYMBOLS_BUNDLE): product-images
 	$(call MakeDir, $(@D))
-	$(CD) $(SYMBOLS_IMAGE_DIR) && $(ZIP) -y -q -r $@ .
+	$(CD) $(SYMBOLS_IMAGE_DIR) && $(ZIPEXE) -y -q -r $@ .
 
   endif
 
--- a/make/common/CORE_PKGS.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,305 +0,0 @@
-#
-# Copyright (c) 2001, 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.
-#
-
-# EXCLUDE_PKGS is the list of packages to exclude from the
-# Java API Specification. Do not add these to CORE_PKGS.
-# The concatenation of EXCLUDE_PKGS and CORE_PKGS
-# should make up the list of all packages under the
-# src/shared/classes directory of the JDK source tree.
-#
-EXCLUDE_PKGS = \
-    java.awt.peer \
-    java.awt.dnd.peer \
-    sun.* \
-    com.sun.* \
-    org.apache.* \
-    org.jcp.* \
-    org.w3c.dom.css \
-    org.w3c.dom.html \
-    org.w3c.dom.stylesheets \
-    org.omg.stub.javax.management.remote.rmi
-
-#
-# ACTIVE_JSR_PKGS are packages that are part of an active JSR process--
-# one that is doing its own review. These packages are not included when
-# creating diff pages for the platform's JCP process.
-#
-# (see /java/pubs/apisrc/jdk/6.0/beta/make/docs/active_jsr_pkgs)
-# Note:
-# This is a list of regular expressions. So foo.* matches "foo" and "foo.bar".
-#
-ACTIVE_JSR_PKGS= \
-    java.lang.invoke \
-    java.sql \
-    javax.activation \
-    javax.annotation.* \
-    javax.jws.* \
-    javax.lang.* \
-    javax.management.* \
-    javax.script \
-    javax.sql.* \
-    javax.tools.* \
-    javax.xml.* \
-    org.w3c.* \
-    org.xml.sax
-
-#
-# CORE_PKGS is the list of packages that form the
-# Java API Specification.
-#
-### ***IMPORTANT NOTE***
-### There is also a "REGEXP" variable in the docs/makefile that
-### determines which table the packages go in on the main page.
-### Currently, there is only table ("Platform Packages") and
-### everything goes in it, so REGEXP is "*". But if that policy
-### changes, packages added will need to be reflected in that
-### list of wildcard expressions, as well.
-###
-CORE_PKGS = \
-    java.applet \
-    java.awt \
-    java.awt.color \
-    java.awt.datatransfer \
-    java.awt.desktop \
-    java.awt.dnd \
-    java.awt.event \
-    java.awt.font \
-    java.awt.geom \
-    java.awt.im \
-    java.awt.im.spi \
-    java.awt.image \
-    java.awt.image.renderable \
-    java.awt.print \
-    java.beans \
-    java.beans.beancontext \
-    java.io \
-    java.lang \
-    java.lang.annotation \
-    java.lang.instrument \
-    java.lang.invoke \
-    java.lang.management \
-    java.lang.module \
-    java.lang.ref \
-    java.lang.reflect \
-    java.math \
-    java.net \
-    java.net.http \
-    java.net.spi \
-    java.nio \
-    java.nio.channels \
-    java.nio.channels.spi \
-    java.nio.charset \
-    java.nio.charset.spi \
-    java.nio.file \
-    java.nio.file.attribute \
-    java.nio.file.spi \
-    java.rmi \
-    java.rmi.activation \
-    java.rmi.dgc \
-    java.rmi.registry \
-    java.rmi.server \
-    java.security \
-    java.security.acl \
-    java.security.cert \
-    java.security.interfaces \
-    java.security.spec \
-    java.sql \
-    java.text \
-    java.text.spi \
-    java.time \
-    java.time.chrono \
-    java.time.format \
-    java.time.temporal \
-    java.time.zone \
-    java.util \
-    java.util.concurrent \
-    java.util.concurrent.atomic \
-    java.util.concurrent.locks \
-    java.util.function \
-    java.util.jar \
-    java.util.logging \
-    java.util.prefs \
-    java.util.regex \
-    java.util.spi \
-    java.util.stream \
-    java.util.zip \
-    javax.accessibility \
-    javax.activation \
-    javax.activity \
-    javax.annotation \
-    javax.annotation.processing \
-    javax.crypto \
-    javax.crypto.interfaces \
-    javax.crypto.spec \
-    javax.imageio \
-    javax.imageio.event \
-    javax.imageio.metadata \
-    javax.imageio.plugins.jpeg \
-    javax.imageio.plugins.bmp \
-    javax.imageio.plugins.tiff \
-    javax.imageio.spi \
-    javax.imageio.stream \
-    javax.jws \
-    javax.jws.soap \
-    javax.lang.model \
-    javax.lang.model.element \
-    javax.lang.model.type \
-    javax.lang.model.util \
-    javax.management \
-    javax.management.loading \
-    javax.management.monitor \
-    javax.management.relation \
-    javax.management.openmbean \
-    javax.management.timer \
-    javax.management.modelmbean \
-    javax.management.remote \
-    javax.management.remote.rmi \
-    javax.naming \
-    javax.naming.directory \
-    javax.naming.event \
-    javax.naming.ldap \
-    javax.naming.spi \
-    javax.net \
-    javax.net.ssl \
-    javax.print \
-    javax.print.attribute \
-    javax.print.attribute.standard \
-    javax.print.event \
-    javax.rmi \
-    javax.rmi.CORBA \
-    javax.rmi.ssl \
-    javax.script \
-    javax.security.auth \
-    javax.security.auth.callback \
-    javax.security.auth.kerberos \
-    javax.security.auth.login \
-    javax.security.auth.spi \
-    javax.security.auth.x500 \
-    javax.security.cert \
-    javax.security.sasl \
-    javax.sound.sampled \
-    javax.sound.sampled.spi \
-    javax.sound.midi \
-    javax.sound.midi.spi \
-    javax.sql \
-    javax.sql.rowset \
-    javax.sql.rowset.serial \
-    javax.sql.rowset.spi \
-    javax.swing \
-    javax.swing.border \
-    javax.swing.colorchooser \
-    javax.swing.filechooser \
-    javax.swing.event \
-    javax.swing.table \
-    javax.swing.text \
-    javax.swing.text.html \
-    javax.swing.text.html.parser \
-    javax.swing.text.rtf \
-    javax.swing.tree \
-    javax.swing.undo \
-    javax.swing.plaf \
-    javax.swing.plaf.basic \
-    javax.swing.plaf.metal \
-    javax.swing.plaf.multi \
-    javax.swing.plaf.nimbus \
-    javax.swing.plaf.synth \
-    javax.tools \
-    javax.transaction \
-    javax.transaction.xa \
-    javax.xml.catalog \
-    javax.xml.parsers \
-    javax.xml.bind \
-    javax.xml.bind.annotation \
-    javax.xml.bind.annotation.adapters \
-    javax.xml.bind.attachment \
-    javax.xml.bind.helpers \
-    javax.xml.bind.util \
-    javax.xml.soap \
-    javax.xml.ws \
-    javax.xml.ws.handler \
-    javax.xml.ws.handler.soap \
-    javax.xml.ws.http \
-    javax.xml.ws.soap \
-    javax.xml.ws.spi \
-    javax.xml.ws.spi.http \
-    javax.xml.ws.wsaddressing \
-    javax.xml.transform \
-    javax.xml.transform.sax \
-    javax.xml.transform.dom \
-    javax.xml.transform.stax \
-    javax.xml.transform.stream \
-    javax.xml \
-    javax.xml.crypto \
-    javax.xml.crypto.dom \
-    javax.xml.crypto.dsig \
-    javax.xml.crypto.dsig.dom \
-    javax.xml.crypto.dsig.keyinfo \
-    javax.xml.crypto.dsig.spec \
-    javax.xml.datatype \
-    javax.xml.validation \
-    javax.xml.namespace \
-    javax.xml.xpath \
-    javax.xml.stream \
-    javax.xml.stream.events \
-    javax.xml.stream.util \
-    org.ietf.jgss \
-    org.omg.CORBA \
-    org.omg.CORBA.DynAnyPackage \
-    org.omg.CORBA.ORBPackage \
-    org.omg.CORBA.TypeCodePackage \
-    org.omg.stub.java.rmi \
-    org.omg.CORBA.portable \
-    org.omg.CORBA_2_3 \
-    org.omg.CORBA_2_3.portable \
-    org.omg.CosNaming \
-    org.omg.CosNaming.NamingContextExtPackage \
-    org.omg.CosNaming.NamingContextPackage \
-    org.omg.SendingContext \
-    org.omg.PortableServer \
-    org.omg.PortableServer.CurrentPackage \
-    org.omg.PortableServer.POAPackage \
-    org.omg.PortableServer.POAManagerPackage \
-    org.omg.PortableServer.ServantLocatorPackage \
-    org.omg.PortableServer.portable \
-    org.omg.PortableInterceptor \
-    org.omg.PortableInterceptor.ORBInitInfoPackage \
-    org.omg.Messaging \
-    org.omg.IOP \
-    org.omg.IOP.CodecFactoryPackage \
-    org.omg.IOP.CodecPackage \
-    org.omg.Dynamic \
-    org.omg.DynamicAny \
-    org.omg.DynamicAny.DynAnyPackage \
-    org.omg.DynamicAny.DynAnyFactoryPackage \
-    org.w3c.dom \
-    org.w3c.dom.events \
-    org.w3c.dom.bootstrap \
-    org.w3c.dom.ls \
-    org.w3c.dom.ranges \
-    org.w3c.dom.traversal \
-    org.w3c.dom.views \
-    org.xml.sax \
-    org.xml.sax.ext \
-    org.xml.sax.helpers
--- a/make/common/JarArchive.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/common/JarArchive.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -264,7 +264,7 @@
 	  $(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) $$(NEWLINE) \
 	  if [ -s $$($1_DELETESS_FILE) ]; then \
 	    $(ECHO) "  deleting" `$(WC) -l $$($1_DELETESS_FILE) | $(AWK) '{ print $$$$1 }'` files && \
-	    $(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \
+	    $(ZIPEXE) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \
 	  fi $$(NEWLINE) \
 	  $$($1_UPDATE_CONTENTS) true $$(NEWLINE) \
 	  $$($1_JARINDEX) && true )
--- a/make/common/MakeBase.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/common/MakeBase.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -122,6 +122,10 @@
 EscapeDollar = $(subst $$,\$$,$(subst \$$,$$,$(strip $1)))
 
 ################################################################################
+# This macro works just like EscapeDollar above, but for #.
+EscapeHash = $(subst \#,\\\#,$(subst \\\#,\#,$(strip $1)))
+
+################################################################################
 # This macro translates $ into $$ to protect the string from make itself.
 DoubleDollar = $(subst $$,$$$$,$(strip $1))
 
@@ -833,7 +837,7 @@
           $(if $(findstring $(LOG_LEVEL), trace), \
               $(info NewVariable $1: >$(strip $($1))<) \
               $(info OldVariable $1: >$(strip $($1_old))<)) \
-          $(call WriteFile, $1_old:=$(call DoubleDollar,$($1)), \
+          $(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \
               $(call DependOnVariableFileName, $1, $2))) \
         $(call DependOnVariableFileName, $1, $2) \
     )
--- a/make/common/NON_CORE_PKGS.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-#
-# Copyright (c) 2002, 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 file contains the package names of all the "non-core"
-# API published in the Java 2 SDK documentation. "Non-core" means
-# it includes all published API outside of the JDK API specification.
-#
-# These environment variables are used by javadoc in
-# make/docs/Makefile and are referenced by the localization
-# team when determining which APIs to extract javadoc
-# comments from.
-
-DOMAPI_PKGS = org.w3c.dom \
-    org.w3c.dom.bootstrap \
-    org.w3c.dom.ls \
-    org.w3c.dom.ranges \
-    org.w3c.dom.traversal \
-    org.w3c.dom.html \
-    org.w3c.dom.stylesheets \
-    org.w3c.dom.css \
-    org.w3c.dom.events \
-    org.w3c.dom.views
-
-JDI_PKGS = com.sun.jdi \
-    com.sun.jdi.event \
-    com.sun.jdi.request \
-    com.sun.jdi.connect \
-    com.sun.jdi.connect.spi
-
-MGMT_PKGS = com.sun.management
-
-JAAS_PKGS = com.sun.security.auth \
-    com.sun.security.auth.callback \
-    com.sun.security.auth.login \
-    com.sun.security.auth.module
-
-JGSS_PKGS = com.sun.security.jgss
-
-OLD_JSSE_PKGS = com.sun.net.ssl
-
-HTTPSERVER_PKGS = com.sun.net.httpserver \
-    com.sun.net.httpserver.spi
-
-NIO_PKGS = com.sun.nio.file
-
-OLD_DOCLETAPI_PKGS = com.sun.javadoc
-
-DOCLETAPI_PKGS = jdk.javadoc.doclet \
-    jdk.javadoc.doclet.taglet \
-    jdk.javadoc.doclets
-
-TAGLETAPI_FILE = com/sun/tools/doclets/Taglet.java
-
-TAGLETAPI_PKGS = com.sun.tools.doclets
-
-ATTACH_PKGS = com.sun.tools.attach \
-    com.sun.tools.attach.spi
-
-JCONSOLE_PKGS = com.sun.tools.jconsole
-
-JSHELLAPI_PKGS = jdk.jshell \
-    jdk.jshell.spi \
-    jdk.jshell.execution
-
-TREEAPI_PKGS = com.sun.source.doctree \
-    com.sun.source.tree \
-    com.sun.source.util
-
-NASHORNAPI_PKGS = jdk.nashorn.api.scripting \
-    jdk.nashorn.api.tree
-   
-DYNALINKAPI_PKGS = jdk.dynalink \
-    jdk.dynalink.beans \
-    jdk.dynalink.linker \
-    jdk.dynalink.linker.support \
-    jdk.dynalink.support
-
-SMARTCARDIO_PKGS = javax.smartcardio
-
-SCTPAPI_PKGS = com.sun.nio.sctp
-
-ifeq ($(PLATFORM), macosx)
-  APPLE_EXT_PKGS = com.apple.eawt \
-      com.apple.eawt.event \
-      com.apple.eio
-endif
-
-JDK_PKGS = jdk \
-      jdk.net \
-      jdk.management.cmm
-
-JACCESSAPI_PKGS = com.sun.java.accessibility.util
-
-JSOBJECT_PKGS = netscape.javascript
-
-# non-core packages in rt.jar
-NON_CORE_PKGS = $(DOMAPI_PKGS) \
-    $(JSOBJECT_PKGS) \
-    $(MGMT_PKGS) \
-    $(JAAS_PKGS) \
-    $(JGSS_PKGS) \
-    $(NIO_PKGS) \
-    $(OLD_JSSE_PKGS) \
-    $(HTTPSERVER_PKGS) \
-    $(SMARTCARDIO_PKGS) \
-    $(SCTPAPI_PKGS) \
-    $(APPLE_EXT_PKGS) \
-    $(JDK_PKGS) \
-    $(JACCESSAPI_PKGS)
--- a/make/common/NativeCompilation.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/common/NativeCompilation.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -875,7 +875,7 @@
           # to be rebuilt properly.
           $$($1_DEBUGINFO_ZIP): $$($1_DEBUGINFO_FILES) $$($1_TARGET)
 		$(CD) $$($1_OUTPUT_DIR) && \
-		    $(ZIP) -q -r $$@ $$(subst $$($1_OUTPUT_DIR)/,, $$($1_DEBUGINFO_FILES))
+		    $(ZIPEXE) -q -r $$@ $$(subst $$($1_OUTPUT_DIR)/,, $$($1_DEBUGINFO_FILES))
 
         endif
        endif # !STATIC_LIBRARY
--- a/make/common/ZipArchive.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/common/ZipArchive.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -107,7 +107,7 @@
   $$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS)
 	$(MKDIR) -p $$(@D)
 	$(ECHO) Updating $$($1_NAME)
-	$$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$($1_ZIP_OPTIONS) $$@ . $$($1_ZIP_INCLUDES) \
+	$$(foreach i,$$($1_SRC),(cd $$i && $(ZIPEXE) -qru $$($1_ZIP_OPTIONS) $$@ . $$($1_ZIP_INCLUDES) \
 	    $$($1_ZIP_EXCLUDES) -x \*_the.\* \
 	    $$(addprefix -x$(SPACE), $$(patsubst $$i/%,%, $$($1_EXCLUDE_FILES))) \
 	    || test "$$$$?" = "12" )$$(NEWLINE)) true
--- a/make/jprt.properties	Mon Nov 14 10:00:15 2016 -0800
+++ b/make/jprt.properties	Tue Nov 22 10:48:24 2016 -0800
@@ -334,11 +334,7 @@
     solaris_sparcv9_5.11-{product|fastdebug}-c2-jvm98,			\
     solaris_sparcv9_5.11-{product|fastdebug}-c2-jvm98_nontiered,	\
     solaris_sparcv9_5.11-{product|fastdebug}-c2-scimark,		\
-    solaris_sparcv9_5.11-product-c2-runThese8,				\
-    solaris_sparcv9_5.11-{product|fastdebug}-c2-GCBasher_SerialGC,	\
-    solaris_sparcv9_5.11-{product|fastdebug}-c2-GCBasher_ParallelGC,	\
-    solaris_sparcv9_5.11-{product|fastdebug}-c2-GCBasher_CMS,		\
-    solaris_sparcv9_5.11-{product|fastdebug}-c2-GCBasher_G1
+    solaris_sparcv9_5.11-product-c2-runThese8,
 
 my.test.targets.hotspot.solaris.x64=					\
     solaris_x64_5.11-{product|fastdebug}-c2-jvm98,			\
@@ -346,40 +342,24 @@
     solaris_x64_5.11-{product|fastdebug}-c2-scimark,			\
     solaris_x64_5.11-product-c2-runThese8,				\
     solaris_x64_5.11-product-c2-runThese8_Xcomp_lang,			\
-    solaris_x64_5.11-product-c2-runThese8_Xcomp_vm,			\
-    solaris_x64_5.11-{product|fastdebug}-c2-GCBasher_SerialGC,		\
-    solaris_x64_5.11-{product|fastdebug}-c2-GCBasher_ParallelGC,	\
-    solaris_x64_5.11-{product|fastdebug}-c2-GCBasher_CMS,		\
-    solaris_x64_5.11-{product|fastdebug}-c2-GCBasher_G1
+    solaris_x64_5.11-product-c2-runThese8_Xcomp_vm,
 
 my.test.targets.hotspot.linux.i586=					\
     linux_i586_3.8-{product|fastdebug}-c2-jvm98,			\
     linux_i586_3.8-{product|fastdebug}-c2-jvm98_nontiered,		\
     linux_i586_3.8-{product|fastdebug}-c2-scimark,			\
     linux_i586_3.8-fastdebug-c2-runThese8_Xcomp_lang,			\
-    linux_i586_3.8-fastdebug-c2-runThese8_Xcomp_vm,			\
-    linux_i586_3.8-{product|fastdebug}-c2-GCBasher_SerialGC,		\
-    linux_i586_3.8-{product|fastdebug}-c2-GCBasher_ParallelGC,		\
-    linux_i586_3.8-{product|fastdebug}-c2-GCBasher_CMS,			\
-    linux_i586_3.8-{product|fastdebug}-c2-GCBasher_G1
+    linux_i586_3.8-fastdebug-c2-runThese8_Xcomp_vm
 
 my.test.targets.hotspot.linux.x64=					\
     linux_x64_3.8-{product|fastdebug}-c2-jvm98,				\
     linux_x64_3.8-{product|fastdebug}-c2-jvm98_nontiered,		\
-    linux_x64_3.8-{product|fastdebug}-c2-scimark,			\
-    linux_x64_3.8-{product|fastdebug}-c2-GCBasher_SerialGC,		\
-    linux_x64_3.8-{product|fastdebug}-c2-GCBasher_ParallelGC,		\
-    linux_x64_3.8-{product|fastdebug}-c2-GCBasher_CMS,			\
-    linux_x64_3.8-{product|fastdebug}-c2-GCBasher_G1
+    linux_x64_3.8-{product|fastdebug}-c2-scimark
 
 my.test.targets.hotspot.macosx.x64=					\
     macosx_x64_10.9-{product|fastdebug}-c2-jvm98,			\
     macosx_x64_10.9-{product|fastdebug}-c2-jvm98_nontiered,		\
-    macosx_x64_10.9-{product|fastdebug}-c2-scimark,			\
-    macosx_x64_10.9-{product|fastdebug}-c2-GCBasher_SerialGC,		\
-    macosx_x64_10.9-{product|fastdebug}-c2-GCBasher_ParallelGC,		\
-    macosx_x64_10.9-{product|fastdebug}-c2-GCBasher_CMS,		\
-    macosx_x64_10.9-{product|fastdebug}-c2-GCBasher_G1
+    macosx_x64_10.9-{product|fastdebug}-c2-scimark
 
 my.test.targets.hotspot.windows.i586=					\
     windows_i586_6.3-{product|fastdebug}-c2-jvm98,			\
@@ -387,11 +367,7 @@
     windows_i586_6.3-{product|fastdebug}-c2-scimark,			\
     windows_i586_6.3-product-c2-runThese8,				\
     windows_i586_6.3-product-c2-runThese8_Xcomp_lang,			\
-    windows_i586_6.3-product-c2-runThese8_Xcomp_vm,			\
-    windows_i586_6.3-{product|fastdebug}-c2-GCBasher_SerialGC,		\
-    windows_i586_6.3-{product|fastdebug}-c2-GCBasher_ParallelGC,	\
-    windows_i586_6.3-{product|fastdebug}-c2-GCBasher_CMS,		\
-    windows_i586_6.3-{product|fastdebug}-c2-GCBasher_G1
+    windows_i586_6.3-product-c2-runThese8_Xcomp_vm,
 
 my.test.targets.hotspot.windows.x64=					\
     windows_x64_6.3-{product|fastdebug}-c2-jvm98,			\
@@ -399,11 +375,7 @@
     windows_x64_6.3-{product|fastdebug}-c2-scimark,			\
     windows_x64_6.3-product-c2-runThese8,				\
     windows_x64_6.3-product-c2-runThese8_Xcomp_lang,			\
-    windows_x64_6.3-product-c2-runThese8_Xcomp_vm,			\
-    windows_x64_6.3-{product|fastdebug}-c2-GCBasher_SerialGC,		\
-    windows_x64_6.3-{product|fastdebug}-c2-GCBasher_ParallelGC,		\
-    windows_x64_6.3-{product|fastdebug}-c2-GCBasher_CMS,		\
-    windows_x64_6.3-{product|fastdebug}-c2-GCBasher_G1
+    windows_x64_6.3-product-c2-runThese8_Xcomp_vm,
 
 # Some basic "smoke" tests for OpenJDK builds
 my.test.targets.hotspot.open=						\
@@ -468,9 +440,17 @@
   ${my.make.rule.test.targets.hotspot.reg.group:GROUP=hotspot_fast_gc_2},		\
   ${my.make.rule.test.targets.hotspot.reg.group:GROUP=hotspot_fast_gc_closed},		\
   ${my.make.rule.test.targets.hotspot.reg.group:GROUP=hotspot_fast_gc_gcold},		\
+  ${my.make.rule.test.targets.hotspot.reg.group:GROUP=hotspot_fast_gc_gcbasher},	\
   ${my.make.rule.test.targets.hotspot.reg.group:GROUP=hotspot_fast_runtime},		\
   ${my.make.rule.test.targets.hotspot.reg.group:GROUP=hotspot_fast_serviceability},	\
   ${my.make.rule.test.targets.hotspot.reg.group:GROUP=jdk_svc_sanity},			\
+  solaris_sparcv9_5.11-product-c2-hotspot_fast_gc_gcbasher,				\
+  solaris_x64_5.11-product-c2-hotspot_fast_gc_gcbasher,					\
+  linux_i586_3.8-product-c2-hotspot_fast_gc_gcbasher,					\
+  linux_x64_3.8-product-c2-hotspot_fast_gc_gcbasher,					\
+  macosx_x64_10.9-product-c2-hotspot_fast_gc_gcbasher,					\
+  windows_i586_6.3-product-c2-hotspot_fast_gc_gcbasher,					\
+  windows_x64_6.3-product-c2-hotspot_fast_gc_gcbasher,                                  \
   ${my.additional.make.rule.test.targets.hotspot.reg}
 
 # Other Makefile based Hotspot tests
--- a/test/failure_handler/Makefile	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/failure_handler/Makefile	Tue Nov 22 10:48:24 2016 -0800
@@ -86,7 +86,7 @@
 test: require_env build
 	rm -rf "${RUN_DIR}"
 	mkdir -p "${RUN_DIR}"
-	"${JTREG_HOME}"/bin/jtreg                                               \
+	"${JTREG_HOME}"/bin/jtreg                                           \
         -jdk:"${JAVA_HOME}"                                                 \
         ${JTREG_TEST_OPTS}                                                  \
         -timeout:0.1 -va -retain:all                                        \
@@ -94,6 +94,7 @@
         -agentvm                                                            \
         -thd:"${TARGET_JAR}"                                                \
         -th:jdk.test.failurehandler.jtreg.GatherProcessInfoTimeoutHandler   \
+        -thtimeout:0                                                        \
         -od:"${TARGET_JAR}"                                                 \
         -o:jdk.test.failurehandler.jtreg.GatherDiagnosticInfoObserver       \
         -w:"${RUN_DIR}/JTwork"                                              \
--- a/test/failure_handler/src/share/classes/jdk/test/failurehandler/HtmlSection.java	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/failure_handler/src/share/classes/jdk/test/failurehandler/HtmlSection.java	Tue Nov 22 10:48:24 2016 -0800
@@ -49,7 +49,7 @@
 
     private HtmlSection(PrintWriter pw, String id, String name, HtmlSection rootSection) {
         this.pw = pw;
-        textWriter = new PrintWriter(new HtmlFilterWriter(pw));
+        textWriter = new PrintWriter(new HtmlFilterWriter(pw), true);
         this.id = id;
         this.name = name;
         child = null;
--- a/test/failure_handler/src/share/classes/jdk/test/failurehandler/action/ActionHelper.java	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/failure_handler/src/share/classes/jdk/test/failurehandler/action/ActionHelper.java	Tue Nov 22 10:48:24 2016 -0800
@@ -164,7 +164,8 @@
         Stopwatch stopwatch = new Stopwatch();
         stopwatch.start();
 
-        log.printf("%s%n[%tF %<tT] %s%n%1$s%n", line, new Date(), pb.command());
+        log.printf("%s%n[%tF %<tT] %s timeout=%s%n%1$s%n", line, new Date(), pb.command(), params.timeout);
+
         Process process;
         KillerTask killer;
 
@@ -178,30 +179,28 @@
                     out);
             try {
                 result = new ExitCode(process.waitFor());
+            } catch (InterruptedException e) {
+                log.println("WARNING: interrupted when waiting for the tool:%n");
+                e.printStackTrace(log);
+            } finally {
                 killer.cancel();
-            } catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
-                if (!killer.cancel()) {
-                    log.println(
-                            "WARNING: interrupted when waiting for the tool:");
-                    e.printStackTrace(log);
-                }
             }
             if (killer.hasTimedOut()) {
                 log.printf(
                         "WARNING: tool timed out: killed process after %d ms%n",
-                        TimeUnit.MILLISECONDS.toMicros(params.timeout));
+                        params.timeout);
                 result = ExitCode.TIMED_OUT;
             }
         } catch (IOException e) {
+            log.printf("WARNING: caught IOException while running tool%n");
             e.printStackTrace(log);
             result = ExitCode.LAUNCH_ERROR;
         }
 
         stopwatch.stop();
-        log.printf("%s%n[%tF %<tT] exit code : %d time : %d ms%n%1$s%n",
+        log.printf("%s%n[%tF %<tT] exit code: %d time: %d ms%n%1$s%n",
                 line, new Date(), result.value,
-                TimeUnit.MILLISECONDS.toSeconds(stopwatch.getElapsedTimeNs()));
+                TimeUnit.NANOSECONDS.toMillis(stopwatch.getElapsedTimeNs()));
         return result;
     }
 
@@ -247,7 +246,7 @@
             log.printf("WARNING: can't run jps : %s%n", e.getMessage());
             e.printStackTrace(log);
         } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
+            log.printf("WARNING: interrupted%n");
             e.printStackTrace(log);
         }
         return result;
@@ -266,8 +265,7 @@
             try {
                 process.exitValue();
             } catch (IllegalThreadStateException e) {
-                // !prepareProcess.isAlive()
-                process.destroy();
+                process.destroyForcibly();
                 timedOut = true;
             }
         }
@@ -301,11 +299,15 @@
                             exitCode.value);
                     break;
                 }
-                try {
-                    Thread.sleep(params.pause);
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
-                    e.printStackTrace(sectionWriter);
+                // sleep, if this is not the last iteration
+                if (i < n - 1) {
+                    try {
+                        Thread.sleep(params.pause);
+                    } catch (InterruptedException e) {
+                        sectionWriter.printf(
+                                "WARNING: interrupted while sleeping between invocations");
+                        e.printStackTrace(sectionWriter);
+                    }
                 }
             }
         } else {
--- a/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java	Tue Nov 22 10:48:24 2016 -0800
@@ -68,7 +68,7 @@
         boolean needClose = false;
         try {
             log = new PrintWriter(new FileWriter(
-                    workDir.resolve(LOG_FILENAME).toFile(), true));
+                    workDir.resolve(LOG_FILENAME).toFile(), true), true);
             needClose = true;
         } catch (IOException e) {
             log = new PrintWriter(System.out);
@@ -100,7 +100,7 @@
                                EnvironmentInfoGatherer gatherer) {
         File output = workDir.resolve(ENVIRONMENT_OUTPUT).toFile();
         try (HtmlPage html = new HtmlPage(new PrintWriter(
-                new FileWriter(output, true)))) {
+                new FileWriter(output, true), true))) {
             try (ElapsedTimePrinter timePrinter
                          = new ElapsedTimePrinter(new Stopwatch(), name, log)) {
                 gatherer.gatherEnvironmentInfo(html.getRootSection());
--- a/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherProcessInfoTimeoutHandler.java	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherProcessInfoTimeoutHandler.java	Tue Nov 22 10:48:24 2016 -0800
@@ -70,9 +70,9 @@
         String name = getClass().getName();
         PrintWriter actionsLog;
         try {
-            // try to open a separate file for aciton log
+            // try to open a separate file for action log
             actionsLog = new PrintWriter(new FileWriter(
-                    workDir.resolve(LOG_FILENAME).toFile(), true));
+                    workDir.resolve(LOG_FILENAME).toFile(), true), true);
         } catch (IOException e) {
             // use jtreg log as a fallback
             actionsLog = log;
@@ -84,7 +84,7 @@
 
             File output = workDir.resolve(OUTPUT_FILENAME).toFile();
             try {
-                PrintWriter pw = new PrintWriter(new FileWriter(output, true));
+                PrintWriter pw = new PrintWriter(new FileWriter(output, true), true);
                 runGatherer(name, workDir, actionsLog, pw, pid);
             } catch (IOException e) {
                 actionsLog.printf("IOException: cannot open output file[%s] : %s",
--- a/test/jtreg-ext/requires/VMProps.java	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/jtreg-ext/requires/VMProps.java	Tue Nov 22 10:48:24 2016 -0800
@@ -59,6 +59,7 @@
         map.put("vm.bits", vmBits());
         map.put("vm.flightRecorder", vmFlightRecorder());
         map.put("vm.simpleArch", vmArch());
+        map.put("vm.debug", vmDebug());
         vmGC(map); // vm.gc.X = true/false
 
         dump(map);
@@ -148,6 +149,13 @@
     }
 
     /**
+     * @return debug level value extracted from the "jdk.debug" property.
+     */
+    protected String vmDebug() {
+        return "" + System.getProperty("jdk.debug").contains("debug");
+    }
+
+    /**
      * For all existing GC sets vm.gc.X property.
      * Example vm.gc.G1=true means:
      *    VM supports G1
--- a/test/lib/jdk/test/lib/apps/LingeredApp.java	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/lib/jdk/test/lib/apps/LingeredApp.java	Tue Nov 22 10:48:24 2016 -0800
@@ -67,13 +67,14 @@
 public class LingeredApp {
 
     private static final long spinDelay = 1000;
-    private static final int appWaitTime = 100;
 
-    private final String lockFileName;
     private long lockCreationTime;
-    private Process appProcess;
     private final ArrayList<String> storedAppOutput;
 
+    protected Process appProcess;
+    protected static final int appWaitTime = 100;
+    protected final String lockFileName;
+
     /*
      * Drain child process output, store it into string array
      */
@@ -255,14 +256,10 @@
     }
 
     /**
-     * Run the app
-     *
-     * @param vmArguments
-     * @throws IOException
+     * Analyze an environment and prepare a command line to
+     * run the app, app name should be added explicitly
      */
-    public void runApp(List<String> vmArguments)
-            throws IOException {
-
+    public List<String> runAppPrepare(List<String> vmArguments) {
         // We should always use testjava or throw an exception,
         // so we can't use JDKToolFinder.getJDKTool("java");
         // that falls back to compile java on error
@@ -303,28 +300,52 @@
         String classpath = System.getProperty("test.class.path");
         cmd.add((classpath == null) ? "." : classpath);
 
-        cmd.add(this.getAppName());
-        cmd.add(lockFileName);
+        return cmd;
+    }
 
-        // Reporting
+    /**
+     * Assemble command line to a printable string
+     */
+    public void printCommandLine(List<String> cmd) {
+        // A bit of verbosity
         StringBuilder cmdLine = new StringBuilder();
         for (String strCmd : cmd) {
             cmdLine.append("'").append(strCmd).append("' ");
         }
 
-        // A bit of verbosity
         System.out.println("Command line: [" + cmdLine.toString() + "]");
+    }
+
+    public void startGobblerPipe() {
+      // Create pipe reader for process, and read stdin and stderr to array of strings
+      InputGobbler gb = new InputGobbler(appProcess.getInputStream(), storedAppOutput);
+      gb.start();
+    }
+
+    /**
+     * Run the app.
+     *
+     * @param vmArguments
+     * @throws IOException
+     */
+    public void runApp(List<String> vmArguments)
+            throws IOException {
+
+        List<String> cmd = runAppPrepare(vmArguments);
+
+        cmd.add(this.getAppName());
+        cmd.add(lockFileName);
+
+        printCommandLine(cmd);
 
         ProcessBuilder pb = new ProcessBuilder(cmd);
         // we don't expect any error output but make sure we are not stuck on pipe
         // pb.redirectErrorStream(false);
+        // ProcessBuilder.start can throw IOException
         pb.redirectError(ProcessBuilder.Redirect.INHERIT);
-
         appProcess = pb.start();
 
-        // Create pipe reader for process, and read stdin and stderr to array of strings
-        InputGobbler gb = new InputGobbler(appProcess.getInputStream(), storedAppOutput);
-        gb.start();
+        startGobblerPipe();
     }
 
     /**
@@ -334,10 +355,14 @@
      */
     public void stopApp() throws IOException {
         deleteLock();
-        waitAppTerminate();
-        int exitcode = appProcess.exitValue();
-        if (exitcode != 0) {
-            throw new IOException("LingeredApp terminated with non-zero exit code " + exitcode);
+        // The startApp() of the derived app can throw
+        // an exception before the LA actually starts
+        if (appProcess != null) {
+            waitAppTerminate();
+            int exitcode = appProcess.exitValue();
+            if (exitcode != 0) {
+                throw new IOException("LingeredApp terminated with non-zero exit code " + exitcode);
+            }
         }
     }
 
--- a/test/make/TestMakeBase.gmk	Mon Nov 14 10:00:15 2016 -0800
+++ b/test/make/TestMakeBase.gmk	Tue Nov 22 10:48:24 2016 -0800
@@ -226,10 +226,11 @@
     Wrong contents in vardeps file))
 
 # Test with a variable value containing some problematic characters
-VARDEP_TEST_VAR3 := foo '""' "''" bar \$$ORIGIN
+VARDEP_TEST_VAR3 := foo '""' "''" bar \$$ORIGIN &\#x00a9
 VARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3)
 -include $(VARDEP_VALUE_FILE)
-$(eval $(call assert-equals, $(VARDEP_TEST_VAR3_old), $(VARDEP_TEST_VAR3), \
+$(eval $(call assert-equals, $(call EscapeHash,$(VARDEP_TEST_VAR3_old)), \
+    $(call EscapeHash,$(VARDEP_TEST_VAR3)), \
     Wrong contents in vardep file))
 
 TEST_TARGETS += test-vardep