changeset 47067:9e0f3b2a2c66

Merge
author prr
date Fri, 23 Jun 2017 09:53:43 -0700
parents 098910995d15 9927a9f16738
children fb4a834e02b8
files jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/Catalog.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogEntry.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogException.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogManager.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/Resolver.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/BootstrapResolver.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/Debug.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/FileURL.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/Namespaces.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/PublicId.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/CatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogParser.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/ExtendedXMLCatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/OASISXMLCatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogParser.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXParserHandler.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/TR9401CatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/TextCatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/XCatalogReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/utils/AttList.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOMHelper.java jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/DOMOrder.java jaxp/src/java.xml/share/classes/javax/xml/catalog/package.html jaxp/src/java.xml/share/classes/javax/xml/datatype/package.html jaxp/src/java.xml/share/classes/javax/xml/namespace/package.html jaxp/src/java.xml/share/classes/javax/xml/parsers/package.html jaxp/src/java.xml/share/classes/javax/xml/transform/dom/package.html jaxp/src/java.xml/share/classes/javax/xml/transform/package.html jaxp/src/java.xml/share/classes/javax/xml/transform/sax/package.html jaxp/src/java.xml/share/classes/javax/xml/transform/stax/package.html jaxp/src/java.xml/share/classes/javax/xml/transform/stream/package.html jaxp/src/java.xml/share/classes/javax/xml/validation/package.html jaxp/src/java.xml/share/classes/javax/xml/xpath/package.html jaxp/src/java.xml/share/classes/org/w3c/dom/package.html jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/package.html jaxp/src/java.xml/share/classes/org/xml/sax/ext/package.html jaxp/src/java.xml/share/classes/org/xml/sax/helpers/package.html jaxp/src/java.xml/share/classes/org/xml/sax/package.html jdk/src/java.base/share/classes/overview-core.html jdk/src/java.base/share/specs/serialization/class.md jdk/src/java.base/share/specs/serialization/examples.md jdk/src/java.base/share/specs/serialization/exceptions.md jdk/src/java.base/share/specs/serialization/images/version.gif jdk/src/java.base/share/specs/serialization/index.md jdk/src/java.base/share/specs/serialization/input.md jdk/src/java.base/share/specs/serialization/output.md jdk/src/java.base/share/specs/serialization/protocol.md jdk/src/java.base/share/specs/serialization/security.md jdk/src/java.base/share/specs/serialization/serial-arch.md jdk/src/java.base/share/specs/serialization/version.md jdk/src/java.desktop/share/specs/AWT_Native_Interface.html jdk/src/java.management/share/specs/JVM-MANAGEMENT-MIB.mib jdk/test/java/io/File/MacPathTest.sh jdk/test/java/io/File/basic.sh jdk/test/java/io/FileOutputStream/FileOpen.sh jdk/test/java/io/FileOutputStream/FileOpenNeg.java jdk/test/java/io/FileOutputStream/FileOpenPos.java jdk/test/java/io/Serializable/class/NonSerialA_1.java jdk/test/java/io/Serializable/class/NonSerialA_2.java jdk/test/java/io/Serializable/class/SerialA.java jdk/test/java/io/Serializable/class/SerialA_1.java jdk/test/java/io/Serializable/class/SerialA_2.java jdk/test/java/io/Serializable/class/SerialA_3.java jdk/test/java/io/Serializable/class/Test.java jdk/test/java/io/Serializable/class/run.sh jdk/test/java/nio/channels/Selector/lots_of_updates.sh jdk/test/java/nio/channels/SocketChannel/Open.sh jdk/test/java/nio/channels/spi/AsynchronousChannelProvider/custom_provider.sh jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh jdk/test/java/nio/charset/Charset/default.sh jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh jdk/test/java/nio/charset/spi/Test.java jdk/test/java/nio/charset/spi/basic.sh jdk/test/java/nio/file/Files/delete_on_close.sh jdk/test/java/nio/file/Files/walkFileTree/PrintFileTree.java jdk/test/java/nio/file/Files/walkFileTree/find.sh jdk/test/java/nio/file/Path/MacPathTest.sh jdk/test/java/util/Arrays/ParallelPrefix.java jdk/test/java/util/ResourceBundle/modules/appbasic/src/test/jdk/test/resources/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/appbasic2/src/test/jdk/test/resources/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/basic/src/mainbundles/jdk/test/resources/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/simple/src/bundles/jdk/test/resources/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/visibility/src/exported.named.bundles/jdk/test/resources/exported/classes/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/classes/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/visibility/src/named.bundles/jdk/test/resources/props/MyResourcesProvider.java jdk/test/java/util/ResourceBundle/modules/xmlformat/src/bundles/jdk/test/resources/MyResourcesProvider.java jdk/test/lib/testlibrary/CompilerUtils.java jdk/test/lib/testlibrary/jdk/testlibrary/TimeLimitedRunner.java jdk/test/sun/net/InetAddress/nameservice/dns/cname.sh jdk/test/sun/net/ftp/MarkResetTest.sh jdk/test/sun/net/www/protocol/file/DirPermissionDenied.sh jdk/test/sun/net/www/protocol/jar/B5105410.sh jdk/test/sun/net/www/protocol/jar/copyin.sh jdk/test/sun/net/www/protocol/jar/getcontenttype.sh jdk/test/sun/net/www/protocol/jar/jarbug/run.sh jdk/test/sun/net/www/protocol/jar/jarbug/src/test/RunAllTests.java jdk/test/sun/net/www/protocol/jrt/other_resources.sh langtools/make/src/classes/build/tools/listjdkinternals/ListJDKInternals.java langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/LayoutParser.java langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/XMLNode.java langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclet.xml make/CompileJavaModules.gmk
diffstat 1455 files changed, 32599 insertions(+), 33070 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Jun 02 14:46:29 2017 -0700
+++ b/.hgtags	Fri Jun 23 09:53:43 2017 -0700
@@ -1,3 +1,6 @@
+94680c6d60ecd9ed3ffd1847706efde7eb947afc jdk-9+174
+6dd7fda42bab7ecf648cafb0a4e9b4ca11b3094f jdk-9+173
+dad6746278facbbea57dd462cb56fb743dc0a5f0 jdk-9+172
 643b5f18c2656fe91b69fea85b07b98d5fad394d jdk-9+171
 898cbe31fbdae2d25d141384fac746cc244a730c jdk-9+170
 c7efde2b60fc1ec04630be769d9ad60efb39c39c jdk-9+169
@@ -424,3 +427,6 @@
 30e75693ae99fd8e47fd2f5116527aff1b59aff9 jdk-10+7
 c42dc7b58b4d4301ea676a76326fd9bbd403d595 jdk-10+8
 aa5b01f5e5620438fd39efdb2e2f6365a2c7d898 jdk-10+9
+b0f2b8ff25a2209b2c807785d75f20e5086bbfc2 jdk-10+10
+036dbf8b381798e5d31065109714d04d97bf98a4 jdk-10+11
+e6d70017f5b9adbb2ec82d826973d0251800a3c3 jdk-10+12
--- a/.hgtags-top-repo	Fri Jun 02 14:46:29 2017 -0700
+++ b/.hgtags-top-repo	Fri Jun 23 09:53:43 2017 -0700
@@ -425,3 +425,8 @@
 b94be69cbb1d2943b886bf2d458745756df146e4 jdk-10+9
 4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171
 6558c37afe832582238d338578d598f30c6fdd75 jdk-10+10
+2c25fc24103251f9711a1c280c31e1e41016d90f jdk-9+172
+6b750cdb823a029a25ff2e560302cc2d28a86cb6 jdk-10+11
+88d7fd969e7df0e07a53b201cfd29393ca33ede9 jdk-9+173
+5466f409346e0446ee9a6daeb7f5d75c8fc76823 jdk-9+174
+8d4ed1e06fe184c9cb08c5b708e7d6f5c066644f jdk-10+12
--- a/common/autoconf/generated-configure.sh	Fri Jun 02 14:46:29 2017 -0700
+++ b/common/autoconf/generated-configure.sh	Fri Jun 23 09:53:43 2017 -0700
@@ -688,6 +688,7 @@
 LIBFFI_CFLAGS
 ALSA_LIBS
 ALSA_CFLAGS
+FREETYPE_LICENSE
 FREETYPE_BUNDLE_LIB_PATH
 FREETYPE_LIBS
 FREETYPE_CFLAGS
@@ -1200,6 +1201,7 @@
 with_freetype_lib
 with_freetype_src
 enable_freetype_bundling
+with_freetype_license
 with_alsa
 with_alsa_include
 with_alsa_lib
@@ -2153,6 +2155,7 @@
   --with-freetype-src     specify directory with freetype sources to
                           automatically build the library (experimental,
                           Windows-only)
+  --with-freetype-license if bundling freetype, also bundle this license file
   --with-alsa             specify prefix directory for the alsa package
                           (expecting the libraries under PATH/lib and the
                           headers under PATH/include)
@@ -5186,7 +5189,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1494858828
+DATE_WHEN_GENERATED=1496926402
 
 ###############################################################################
 #
@@ -57906,6 +57909,12 @@
 fi
 
 
+# Check whether --with-freetype-license was given.
+if test "${with_freetype_license+set}" = set; then :
+  withval=$with_freetype_license;
+fi
+
+
   # Need to specify explicitly since it needs to be overridden on some versions of macosx
   FREETYPE_BASE_NAME=freetype
   FREETYPE_CFLAGS=
@@ -63852,6 +63861,153 @@
 
   fi # end freetype needed
 
+  FREETYPE_LICENSE=""
+  if test "x$with_freetype_license" = "xyes"; then
+    as_fn_error $? "--with-freetype-license must have a value" "$LINENO" 5
+  elif test "x$with_freetype_license" != "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype license" >&5
+$as_echo_n "checking for freetype license... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_freetype_license" >&5
+$as_echo "$with_freetype_license" >&6; }
+    FREETYPE_LICENSE="$with_freetype_license"
+
+  # Only process if variable expands to non-empty
+
+  if test "x$FREETYPE_LICENSE" != x; then
+    if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+
+  # Input might be given as Windows format, start by converting to
+  # unix format.
+  path="$FREETYPE_LICENSE"
+  new_path=`$CYGPATH -u "$path"`
+
+  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
+  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
+  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
+  # "foo.exe" is OK but "foo" is an error.
+  #
+  # This test is therefore slightly more accurate than "test -f" to check for file precense.
+  # It is also a way to make sure we got the proper file name for the real test later on.
+  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
+  if test "x$test_shortpath" = x; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FREETYPE_LICENSE, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of FREETYPE_LICENSE, which resolves as \"$path\", is invalid." >&6;}
+    as_fn_error $? "Cannot locate the the path of FREETYPE_LICENSE" "$LINENO" 5
+  fi
+
+  # Call helper function which possibly converts this using DOS-style short mode.
+  # If so, the updated path is stored in $new_path.
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
+    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
+    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
+      # Going to short mode and back again did indeed matter. Since short mode is
+      # case insensitive, let's make it lowercase to improve readability.
+      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+      # Now convert it back to Unix-style (cygpath)
+      input_path=`$CYGPATH -u "$shortmode_path"`
+      new_path="$input_path"
+    fi
+  fi
+
+  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
+  if test "x$test_cygdrive_prefix" = x; then
+    # As a simple fix, exclude /usr/bin since it's not a real path.
+    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
+      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
+      # a path prefixed by /cygdrive for fixpath to work.
+      new_path="$CYGWIN_ROOT_PATH$input_path"
+    fi
+  fi
+
+
+  if test "x$path" != "x$new_path"; then
+    FREETYPE_LICENSE="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FREETYPE_LICENSE to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting FREETYPE_LICENSE to \"$new_path\"" >&6;}
+  fi
+
+    elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+
+  path="$FREETYPE_LICENSE"
+  has_colon=`$ECHO $path | $GREP ^.:`
+  new_path="$path"
+  if test "x$has_colon" = x; then
+    # Not in mixed or Windows style, start by that.
+    new_path=`cmd //c echo $path`
+  fi
+
+
+  input_path="$new_path"
+  # Check if we need to convert this using DOS-style short mode. If the path
+  # contains just simple characters, use it. Otherwise (spaces, weird characters),
+  # take no chances and rewrite it.
+  # Note: m4 eats our [], so we need to use [ and ] instead.
+  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
+  if test "x$has_forbidden_chars" != x; then
+    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+  fi
+
+
+  windows_path="$new_path"
+  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+    unix_path=`$CYGPATH -u "$windows_path"`
+    new_path="$unix_path"
+  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+    new_path="$unix_path"
+  fi
+
+  if test "x$path" != "x$new_path"; then
+    FREETYPE_LICENSE="$new_path"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FREETYPE_LICENSE to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting FREETYPE_LICENSE to \"$new_path\"" >&6;}
+  fi
+
+  # Save the first 10 bytes of this path to the storage, so fixpath can work.
+  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
+
+    else
+      # We're on a unix platform. Hooray! :)
+      path="$FREETYPE_LICENSE"
+      has_space=`$ECHO "$path" | $GREP " "`
+      if test "x$has_space" != x; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FREETYPE_LICENSE, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of FREETYPE_LICENSE, which resolves as \"$path\", is invalid." >&6;}
+        as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
+      fi
+
+      # Use eval to expand a potential ~
+      eval path="$path"
+      if test ! -f "$path" && test ! -d "$path"; then
+        as_fn_error $? "The path of FREETYPE_LICENSE, which resolves as \"$path\", is not found." "$LINENO" 5
+      fi
+
+      if test -d "$path"; then
+        FREETYPE_LICENSE="`cd "$path"; $THEPWDCMD -L`"
+      else
+        dir="`$DIRNAME "$path"`"
+        base="`$BASENAME "$path"`"
+        FREETYPE_LICENSE="`cd "$dir"; $THEPWDCMD -L`/$base"
+      fi
+    fi
+  fi
+
+    if test ! -f "$FREETYPE_LICENSE"; then
+      as_fn_error $? "$FREETYPE_LICENSE cannot be found" "$LINENO" 5
+    fi
+  fi
+
+
 
 
 
--- a/common/autoconf/lib-freetype.m4	Fri Jun 02 14:46:29 2017 -0700
+++ b/common/autoconf/lib-freetype.m4	Fri Jun 23 09:53:43 2017 -0700
@@ -194,6 +194,8 @@
       [specify directory with freetype sources to automatically build the library (experimental, Windows-only)])])
   AC_ARG_ENABLE(freetype-bundling, [AS_HELP_STRING([--disable-freetype-bundling],
       [disable bundling of the freetype library with the build result @<:@enabled on Windows or when using --with-freetype, disabled otherwise@:>@])])
+  AC_ARG_WITH(freetype-license, [AS_HELP_STRING([--with-freetype-license],
+      [if bundling freetype, also bundle this license file])])
 
   # Need to specify explicitly since it needs to be overridden on some versions of macosx
   FREETYPE_BASE_NAME=freetype
@@ -443,7 +445,21 @@
 
   fi # end freetype needed
 
+  FREETYPE_LICENSE=""
+  if test "x$with_freetype_license" = "xyes"; then
+    AC_MSG_ERROR([--with-freetype-license must have a value])
+  elif test "x$with_freetype_license" != "x"; then
+    AC_MSG_CHECKING([for freetype license])
+    AC_MSG_RESULT([$with_freetype_license])
+    FREETYPE_LICENSE="$with_freetype_license"
+    BASIC_FIXUP_PATH(FREETYPE_LICENSE)
+    if test ! -f "$FREETYPE_LICENSE"; then
+      AC_MSG_ERROR([$FREETYPE_LICENSE cannot be found])
+    fi
+  fi
+
   AC_SUBST(FREETYPE_BUNDLE_LIB_PATH)
   AC_SUBST(FREETYPE_CFLAGS)
   AC_SUBST(FREETYPE_LIBS)
+  AC_SUBST(FREETYPE_LICENSE)
 ])
--- a/common/autoconf/spec.gmk.in	Fri Jun 02 14:46:29 2017 -0700
+++ b/common/autoconf/spec.gmk.in	Fri Jun 23 09:53:43 2017 -0700
@@ -312,6 +312,7 @@
 FREETYPE_LIBS:=@FREETYPE_LIBS@
 FREETYPE_CFLAGS:=@FREETYPE_CFLAGS@
 FREETYPE_BUNDLE_LIB_PATH=@FREETYPE_BUNDLE_LIB_PATH@
+FREETYPE_LICENSE=@FREETYPE_LICENSE@
 CUPS_CFLAGS:=@CUPS_CFLAGS@
 ALSA_LIBS:=@ALSA_LIBS@
 ALSA_CFLAGS:=@ALSA_CFLAGS@
--- a/common/conf/jib-profiles.js	Fri Jun 02 14:46:29 2017 -0700
+++ b/common/conf/jib-profiles.js	Fri Jun 23 09:53:43 2017 -0700
@@ -387,7 +387,7 @@
     // on such hardware.
     if (input.build_cpu == "sparcv9") {
        var cpu_brand = $EXEC("bash -c \"kstat -m cpu_info | grep brand | head -n1 | awk '{ print \$2 }'\"");
-       if (cpu_brand.trim().match('SPARC-.7')) {
+       if (cpu_brand.trim().match('SPARC-.[78]')) {
            boot_jdk_revision = "8u20";
            boot_jdk_subdirpart = "1.8.0_20";
        }
@@ -893,6 +893,16 @@
             }
         });
 
+    // The windows ri profile needs to add the freetype license file
+    profilesRiFreetype = {
+        "windows-x86-ri": {
+            configure_args: "--with-freetype-license="
+                + input.get("freetype", "install_path")
+                + "/freetype-2.7.1-v120-x86/freetype.md"
+        }
+    };
+    profiles = concatObjects(profiles, profilesRiFreetype);
+
     // Generate the missing platform attributes
     profiles = generatePlatformAttributes(profiles);
     profiles = generateDefaultMakeTargetsConfigureArg(common, profiles);
--- a/corba/.hgtags	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/.hgtags	Fri Jun 23 09:53:43 2017 -0700
@@ -424,3 +424,9 @@
 648b0a00824eb29e71936bc3258d309a25e3b8c0 jdk-10+8
 54c6621f7b34cc6ce6c0882d047f61fe0962c257 jdk-10+9
 c62e5964cfcf144d8f72e9ba69757897785349a9 jdk-9+171
+080c37fd77e2c4629b91059298e37758afbdbc46 jdk-10+10
+95ed14547ca9246baed34f90ef3ca13217538a8c jdk-9+172
+8ef8a0f1c4dfea17e10125e1f885920538e63085 jdk-10+11
+534ba4f8cfcf12accc5b9adb943103f2ff79fe16 jdk-9+173
+3615768c12904e29bb2ec1b506cd4633cd8a9ced jdk-9+174
+00ae6307d78bac49883ddc85d687aa88c49f3971 jdk-10+12
--- a/corba/src/java.corba/share/classes/javax/rmi/PortableRemoteObject.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/javax/rmi/PortableRemoteObject.java	Fri Jun 23 09:53:43 2017 -0700
@@ -62,6 +62,8 @@
  * attempts to narrow it to conform to
  * the given interface. If the operation is successful the result will be an
  * object of the specified type, otherwise an exception will be thrown.
+ *
+ * <p>See also {@extLink rmi_iiop_guides RMI-IIOP developer's guides}.</p>
  */
 public class PortableRemoteObject {
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_COMPLETED.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_COMPLETED.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * the Activity, or that the Activity completed in a manner other than that
  * originally requested.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_REQUIRED.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/ACTIVITY_REQUIRED.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,8 +31,8 @@
  * Activity context was necessary to perform the invoked operation, but one
  * was not found associated with the calling thread.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_CONTEXT.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_CONTEXT.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since    JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_INV_ORDER.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_INV_ORDER.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_OPERATION.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_OPERATION.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_PARAM.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_PARAM.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,10 +37,9 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning of
- * minor codes</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions},
+ * {@extLink jidlexception_minorcodes meaning of minor codes}
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_QOS.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_QOS.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
  * support the quality of service required by an invocation parameter that
  * has a quality of service semantics associated with it.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_TYPECODE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/BAD_TYPECODE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/Bounds.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/Bounds.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
  * the legal bounds for the object that a method is trying
  * to access.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class Bounds extends org.omg.CORBA.UserException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/CODESET_INCOMPATIBLE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/CODESET_INCOMPATIBLE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,8 +29,8 @@
  * This exception is raised whenever meaningful communication is not possible
  * between client and server native code sets.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/COMM_FAILURE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/COMM_FAILURE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,11 +33,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning
- * of minor codes</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning of
- * minor codes</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/DATA_CONVERSION.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/DATA_CONVERSION.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,11 +35,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning
- * of minor codes</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/FREE_MEM.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/FREE_MEM.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/IMP_LIMIT.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/IMP_LIMIT.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INITIALIZE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INITIALIZE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INTERNAL.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INTERNAL.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,11 +33,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">meaning
- * of minor codes</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes meaning of minor codes}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INTF_REPOS.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INTF_REPOS.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_ACTIVITY.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_ACTIVITY.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * suspended. It is also raised when an attempted invocation is made that
  * is incompatible with the Activity's current state.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_TRANSACTION.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INVALID_TRANSACTION.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   JDK1.2
  *
  */
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_FLAG.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_FLAG.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_IDENT.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_IDENT.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_OBJREF.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_OBJREF.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,11 +37,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/INV_POLICY.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/INV_POLICY.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class INV_POLICY extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/MARSHAL.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/MARSHAL.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,8 +39,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
  * @since       JDK1.2
  */
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_IMPLEMENT.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_IMPLEMENT.java	Fri Jun 23 09:53:43 2017 -0700
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
  * @since       JDK1.2
  */
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_MEMORY.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_MEMORY.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_PERMISSION.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_PERMISSION.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESOURCES.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESOURCES.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESPONSE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/NO_RESPONSE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/OBJECT_NOT_EXIST.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/OBJECT_NOT_EXIST.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,11 +39,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/OBJ_ADAPTER.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/OBJ_ADAPTER.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,11 +34,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meanings}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since       JDK1.2
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/ORB.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/ORB.java	Fri Jun 23 09:53:43 2017 -0700
@@ -184,6 +184,8 @@
  * Therefore, the implementation first checks the ${java.home}/conf directory for orb.properties,
  * and thereafter the ${java.home}/lib directory.
  *
+ * <p>See also {@extLink idl_guides IDL developer's guide}.</p>
+ *
  * @since   JDK1.2
  */
 abstract public class ORB {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/PERSIST_STORE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/PERSIST_STORE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class PERSIST_STORE extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/REBIND.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/REBIND.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * This exception is also raised if the current effective RebindPolicy has
  * a value of NO_RECONNECT and a connection must be reopened.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/SystemException.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/SystemException.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,8 +44,8 @@
  * declared in signatures of the Java methods mapped from operations in
  * IDL interfaces.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public abstract class SystemException extends java.lang.RuntimeException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TIMEOUT.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TIMEOUT.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
  * specified time-to-live period has been exceeded. It is a standard system
  * exception because time-to-live QoS can be applied to any invocation.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- *      Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @since   J2SE 1.5
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_MODE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_MODE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,8 +35,8 @@
  * a string describing the exception.
  * The OMG CORBA core 2.4 specification has details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_MODE extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_REQUIRED.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_REQUIRED.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,8 @@
  * a string describing the exception.
  * The OMG Transaction Service specfication has details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_REQUIRED extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_ROLLEDBACK extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,8 +35,8 @@
  * a string describing the exception.
  * The OMG CORBA core 2.4 specification has details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSACTION_UNAVAILABLE extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSIENT.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/TRANSIENT.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,8 +36,8 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class TRANSIENT extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/UNKNOWN.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/UNKNOWN.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,11 +39,11 @@
  * what caused the exception, and a completion status. It may also contain
  * a string describing the exception.
  * <P>
- * See the section <A href="../../../../technotes/guides/idl/jidlExceptions.html#minorcodemeanings">Minor
- * Code Meanings</A> to see the minor codes for this exception.
+ * See the section {@extLink jidlexception_minorcodes Minor Code Meaning}
+ * to see the minor codes for this exception.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class UNKNOWN extends SystemException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/UnknownUserException.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/UnknownUserException.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,8 +32,8 @@
  * <code>UnknownUserException</code> object. This is available from the
  * <code>Environment</code> object returned by the method <code>Request.env</code>.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  * @see Request
  */
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/UserException.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/UserException.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,8 +31,8 @@
  * means that they need to
  * be declared in method signatures.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 public abstract class UserException extends java.lang.Exception implements org.omg.CORBA.portable.IDLEntity {
 
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/WrongTransaction.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/WrongTransaction.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,8 @@
  * which the client originally sent the request.
  * See the OMG Transaction Service Specification for details.
  *
- * @see <A href="../../../../technotes/guides/idl/jidlExceptions.html">documentation on
- * Java&nbsp;IDL exceptions</A>
+ * <p>See also {@extLink jidlexception documentation on Java&nbsp;IDL exceptions}.
+ * </p>
  */
 
 public final class WrongTransaction extends UserException {
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/doc-files/generatedfiles.html	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/doc-files/generatedfiles.html	Fri Jun 23 09:53:43 2017 -0700
@@ -42,7 +42,7 @@
 </UL>
 
 
-<H2><a name="helper">Helper Files</a></H2>
+<H2><a id="helper">Helper Files</a></H2>
 
 <P>Helper files supply several static methods needed to manipulate the type.
 These include <code>Any</code> insert and extract operations for the type,
@@ -57,7 +57,7 @@
 is raised to indicate other kinds of errors. Trying to narrow
 a null will always succeed with a return value of null.
 
-<H2><a name="holder">Holder Files</a></H2>
+<H2><a id="holder">Holder Files</a></H2>
 
 <P>Support for out and inout parameter passing modes requires the use of additional holder classes.
 These classes are available for all of the basic IDL datatypes in the <code>org.omg.CORBA</code> package
@@ -74,7 +74,7 @@
 the <code>org.omg.CORBA.portable.Streamable</code> interface.
 
 
-<H2><a name="operations">Operations Files</a></H2>
+<H2><a id="operations">Operations Files</a></H2>
 
 <P>A non abstract IDL interface is mapped to two public Java interfaces:
 a <em>signature</em> interface and an <em>operations</em> interface.
@@ -96,7 +96,7 @@
 interface and operations interface hierarchies.
 
 
-<H2><a name="stub">Stubs</a></H2>
+<H2><a id="stub">Stubs</a></H2>
 
 <P>For the mapping of a non-object-oriented language, there will be
 a programming interface to the stubs for each interface type. Generally, the stubs
--- a/corba/src/java.corba/share/classes/org/omg/CORBA/package.html	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CORBA/package.html	Fri Jun 23 09:53:43 2017 -0700
@@ -147,9 +147,7 @@
 <code><b>register_initial_reference</b>(String id, org.omg.CORBA.Object obj)</code>
 </UL>
 
-<P>An example that uses some of these methods is <A
-HREF="{@docRoot}/../technotes/guides/idl/GShome.html">
-<em>Getting Started with Java IDL</em></A>.
+<P>An example that uses some of these methods is {@extLink idl_getting_started Getting Started with Java IDL}.
 
 <H2>
 Exceptions</H2>
@@ -158,9 +156,8 @@
 then any code using that method must have a <code>try</code>/<code>catch</code>
 block and handle that exception when it is thrown.
 
-<P>The documentation on <A 
-HREF="{@docRoot}/../technotes/guides/idl/jidlExceptions.html"><em>Java
-IDL exceptions</em></A> has more information and explains the difference between
+<P>The documentation on {@extLink jidlexception Java&nbsp;IDL exceptions }
+has more information and explains the difference between
 system exceptions and user-defined exceptions.
 
 <P>The following is a list of the system exceptions (which are unchecked
@@ -447,8 +444,8 @@
 will take an object in the Java programming language.  The helper class for a
 non-abstract interface that has at least one abstract base interface will provide
 both versions of the <code>narrow</code> method.
-<P>The <A HREF="{@docRoot}/../technotes/guides/idl/jidlExample.html"><em>Hello World</em></A>
-tutorial uses a <code>narrow</code> method that looks like this:
+<P>The {@extLink idl_guides Hello World tutorial}
+uses a <code>narrow</code> method that looks like this:
 <PRE>
         // create and initialize the ORB
         ORB orb = ORB.init(args, null);
@@ -548,6 +545,7 @@
 }
 </PRE>
 
+<a id="value"></a>
 <h3>Value Type Helper Classes</h3>
 A helper class for a value type includes different renderings of
 the same methods generated for non-value type methods. The main difference
@@ -861,8 +859,8 @@
 Related Documentation</H1>
 For overviews, guides, and a tutorial, please see:
 <UL>
-<LI>
-<A HREF="{@docRoot}/../technotes/guides/idl/index.html">Java IDL home page</A>
+<LI> {@extLink idl_guides Java&nbsp;IDL tutorial page}.</LI>
+<LI> {@extLink rmi_iiop_guides RMI-IIOP developer's guide}.</LI>
 </UL>
 
 
--- a/corba/src/java.corba/share/classes/org/omg/CosNaming/package.html	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/CosNaming/package.html	Fri Jun 23 09:53:43 2017 -0700
@@ -3,7 +3,7 @@
 <head>
 <!--
 /*
-* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
@@ -334,14 +334,12 @@
 For an overview and examples of how to use the
 <code>CosNaming</code> API, please see:
 <ul>
-  <li><a href="../../../../technotes/guides/idl/tnameserv.html">
-    Naming Service</a>
+  <li>{@extLink tnameserv NamingService}
 </ul>
 <p>
 For an overview of Java&nbsp;IDL, please see:
 <ul>
-  <li><a href="../../../../technotes/guides/idl/index.html">
-    Java&nbsp;IDL home page</a>
+  <li>{@extLink idl_guides  Java&nbsp;IDL developer's home page}
 </ul>
 
 @since JDK1.3
--- a/corba/src/java.corba/share/classes/org/omg/PortableServer/package.html	Fri Jun 02 14:46:29 2017 -0700
+++ b/corba/src/java.corba/share/classes/org/omg/PortableServer/package.html	Fri Jun 23 09:53:43 2017 -0700
@@ -157,7 +157,7 @@
 <H2>Related Documentation</H2>
 
 <P>For an overview of Java IDL, please see:
-<A HREF="../../../../technotes/guides/idl/index.html">Java IDL home page</A>.
+{@extLink idl_guides Java&nbsp;IDL home page}.
 
 <H2>Example Code</H2>
 <a id="sampleserver"></a>
--- a/hotspot/.hgtags	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/.hgtags	Fri Jun 23 09:53:43 2017 -0700
@@ -584,3 +584,9 @@
 f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8
 233647e3d3800e76d7612014b745b37a88098f63 jdk-10+9
 d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171
+c6cd3ec8d46b034e57c86399380ffcf7f25706e4 jdk-10+10
+1ae9e84f68b359420d2d153ecfe5ee2903e33a2e jdk-9+172
+7f14e550f1e8abea41c223e5fdad2261e99ba929 jdk-10+11
+e64b1cb48d6e7703928a9d1da106fc27f8cb65fd jdk-9+173
+944791f8160185bffa13fbb821fc09b6198f1f25 jdk-9+174
+070aa7a2eb14c4645f7eb31384cba0a2ba72a4b5 jdk-10+12
--- a/hotspot/src/cpu/arm/vm/relocInfo_arm.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/cpu/arm/vm/relocInfo_arm.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -139,7 +139,7 @@
 #ifdef AARCH64
 #ifdef COMPILER2
   NativeMovConstReg* ni = nativeMovConstReg_at(addr());
-  if (ni->is_movz()) {
+  if (ni->is_mov_slow()) {
     return;
   }
 #endif
--- a/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Fri Jun 23 09:53:43 2017 -0700
@@ -26,6 +26,15 @@
 /**
  * Defines the implementation of the HotSpot Serviceability Agent.
  *
+ * <p> This module includes the <em>{@index jhsdb jhsdb tool}</em> tool to
+ * attach to a running Java Virtual Machine (JVM) or launch a postmortem
+ * debugger to analyze the content of a core-dump from a crashed JVM.
+ *
+ * <dl style="font-family:'DejaVu Sans', Arial, Helvetica, sans serif">
+ * <dt class="simpleTagLabel">Tool Guides:</dt>
+ * <dd> {@extLink jhsdb_tool_reference jhsdb}</dd>
+ * </dl>
+ *
  * @moduleGraph
  * @since 9
  */
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaThread.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaThread.java	Fri Jun 23 09:53:43 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,6 +50,7 @@
   private static AddressField  osThreadField;
   private static AddressField  stackBaseField;
   private static CIntegerField stackSizeField;
+  private static CIntegerField terminatedField;
 
   private static JavaThreadPDAccess access;
 
@@ -66,6 +67,9 @@
   private static int           BLOCKED;
   private static int           BLOCKED_TRANS;
 
+  private static int           NOT_TERMINATED;
+  private static int           EXITING;
+
   static {
     VM.registerVMInitializedObserver(new Observer() {
         public void update(Observable o, Object data) {
@@ -87,6 +91,7 @@
     osThreadField     = type.getAddressField("_osthread");
     stackBaseField    = type.getAddressField("_stack_base");
     stackSizeField    = type.getCIntegerField("_stack_size");
+    terminatedField   = type.getCIntegerField("_terminated");
 
     UNINITIALIZED     = db.lookupIntConstant("_thread_uninitialized").intValue();
     NEW               = db.lookupIntConstant("_thread_new").intValue();
@@ -99,6 +104,10 @@
     IN_JAVA_TRANS     = db.lookupIntConstant("_thread_in_Java_trans").intValue();
     BLOCKED           = db.lookupIntConstant("_thread_blocked").intValue();
     BLOCKED_TRANS     = db.lookupIntConstant("_thread_blocked_trans").intValue();
+
+    NOT_TERMINATED    = db.lookupIntConstant("JavaThread::_not_terminated").intValue();
+    EXITING           = db.lookupIntConstant("JavaThread::_thread_exiting").intValue();
+
   }
 
   public JavaThread(Address addr) {
@@ -128,6 +137,14 @@
       example, "SolarisSPARCCompilerThread".) */
   public boolean isJavaThread() { return true; }
 
+  public boolean isExiting () {
+      return (getTerminated() == EXITING) || isTerminated();
+  }
+
+  public boolean isTerminated() {
+      return (getTerminated() != NOT_TERMINATED) && (getTerminated() != EXITING);
+  }
+
   public static AddressField getAnchorField() { return anchorField; }
 
   /** Get the last Java stack pointer */
@@ -329,6 +346,10 @@
     return stackSizeField.getValue(addr);
   }
 
+  public int getTerminated() {
+      return (int) terminatedField.getValue(addr);
+  }
+
   /** Gets the Java-side thread object for this JavaThread */
   public Oop getThreadObj() {
     Oop obj = null;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/StackFrameInfo.java	Fri Jun 23 09:53:43 2017 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.runtime;
+
+import sun.jvm.hotspot.oops.*;
+
+public class StackFrameInfo {
+    private Method      method;
+    int                 bci;
+    Oop                 classHolder;
+
+    public StackFrameInfo(JavaVFrame vf) {
+        this.method = vf.getMethod();
+        this.bci = vf.getBCI();
+    }
+
+    public Method getMethod() {
+        return method;
+    }
+
+    public int getBCI() {
+        return bci;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/ThreadStackTrace.java	Fri Jun 23 09:53:43 2017 -0700
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.runtime;
+
+import java.util.*;
+
+public class ThreadStackTrace {
+    private JavaThread                        thread;
+    private int                               depth;  // number of stack frames added
+    private ArrayList<StackFrameInfo>         frames;
+
+    public ThreadStackTrace(JavaThread t) {
+        this.thread = t;
+        this.depth = 0;
+        this.frames = new ArrayList<StackFrameInfo>();
+    }
+
+    public int getStackDepth() {
+        return depth;
+    }
+
+    public StackFrameInfo stackFrameAt(int index) {
+        return frames.get(index);
+    }
+
+    public void dumpStack(int maxDepth) {
+        if (!thread.isJavaThread()) {
+            System.out.println("dumpStack: not java Thread returning");
+            return;
+        }
+        try {
+            for (JavaVFrame vf = thread.getLastJavaVFrameDbg(); vf != null; vf = vf.javaSender()) {
+                StackFrameInfo frame = new StackFrameInfo(vf);
+                frames.add(frame);
+                depth++;
+
+                if (maxDepth > 0 && depth == maxDepth) {
+                    // Skip frames if more than maxDepth
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            System.out.println("Error occurred during stack walking:");
+            e.printStackTrace();
+        }
+    }
+}
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java	Fri Jun 23 09:53:43 2017 -0700
@@ -379,6 +379,10 @@
     private static final long MAX_U4_VALUE = 0xFFFFFFFFL;
     int serialNum = 1;
 
+    public HeapHprofBinWriter() {
+        this.KlassMap = new ArrayList<Klass>();
+    }
+
     public synchronized void write(String fileName) throws IOException {
         // open file stream and create buffered data output stream
         fos = new FileOutputStream(fileName);
@@ -426,6 +430,9 @@
         // HPROF_LOAD_CLASS records for all classes
         writeClasses();
 
+        // write HPROF_FRAME and HPROF_TRACE records
+        dumpStackTraces();
+
         // write CLASS_DUMP records
         writeClassDumpRecords();
 
@@ -700,6 +707,67 @@
         }
     }
 
+    private void dumpStackTraces() throws IOException {
+        // write a HPROF_TRACE record without any frames to be referenced as object alloc sites
+        writeHeader(HPROF_TRACE, 3 * (int)INT_SIZE );
+        out.writeInt(DUMMY_STACK_TRACE_ID);
+        out.writeInt(0);                    // thread number
+        out.writeInt(0);                    // frame count
+
+        int frameSerialNum = 0;
+        int numThreads = 0;
+        Threads threads = VM.getVM().getThreads();
+
+        for (JavaThread thread = threads.first(); thread != null; thread = thread.next()) {
+            Oop threadObj = thread.getThreadObj();
+            if (threadObj != null && !thread.isExiting() && !thread.isHiddenFromExternalView()) {
+
+                // dump thread stack trace
+                ThreadStackTrace st = new ThreadStackTrace(thread);
+                st.dumpStack(-1);
+                numThreads++;
+
+                // write HPROF_FRAME records for this thread's stack trace
+                int depth = st.getStackDepth();
+                int threadFrameStart = frameSerialNum;
+                for (int j=0; j < depth; j++) {
+                    StackFrameInfo frame = st.stackFrameAt(j);
+                    Method m = frame.getMethod();
+                    int classSerialNum = KlassMap.indexOf(m.getMethodHolder()) + 1;
+                    // the class serial number starts from 1
+                    assert classSerialNum > 0:"class not found";
+                    dumpStackFrame(++frameSerialNum, classSerialNum, m, frame.getBCI());
+                }
+
+                // write HPROF_TRACE record for one thread
+                writeHeader(HPROF_TRACE, 3 * (int)INT_SIZE + depth * (int)VM.getVM().getOopSize());
+                int stackSerialNum = numThreads + DUMMY_STACK_TRACE_ID;
+                out.writeInt(stackSerialNum);      // stack trace serial number
+                out.writeInt(numThreads);          // thread serial number
+                out.writeInt(depth);               // frame count
+                for (int j=1; j <= depth; j++) {
+                    writeObjectID(threadFrameStart + j);
+                }
+            }
+        }
+    }
+
+    private void dumpStackFrame(int frameSN, int classSN, Method m, int bci) throws IOException {
+        int lineNumber;
+        if (m.isNative()) {
+            lineNumber = -3; // native frame
+        } else {
+            lineNumber = m.getLineNumberFromBCI(bci);
+        }
+        writeHeader(HPROF_FRAME, 4 * (int)VM.getVM().getOopSize() + 2 * (int)INT_SIZE);
+        writeObjectID(frameSN);                                  // frame serial number
+        writeSymbolID(m.getName());                              // method's name
+        writeSymbolID(m.getSignature());                         // method's signature
+        writeSymbolID(m.getMethodHolder().getSourceFileName());  // source file name
+        out.writeInt(classSN);                                   // class serial number
+        out.writeInt(lineNumber);                                // line number
+    }
+
     protected void writeJavaThread(JavaThread jt, int index) throws IOException {
         out.writeByte((byte) HPROF_GC_ROOT_THREAD_OBJ);
         writeObjectID(jt.getThreadObj());
@@ -1030,6 +1098,7 @@
                         writeHeader(HPROF_LOAD_CLASS, 2 * (OBJ_ID_SIZE + 4));
                         out.writeInt(serialNum);
                         writeObjectID(clazz);
+                        KlassMap.add(serialNum - 1, k);
                         out.writeInt(DUMMY_STACK_TRACE_ID);
                         writeSymbolID(k.getName());
                         serialNum++;
@@ -1045,6 +1114,7 @@
                         writeHeader(HPROF_LOAD_CLASS, 2 * (OBJ_ID_SIZE + 4));
                         out.writeInt(serialNum);
                         writeObjectID(clazz);
+                        KlassMap.add(serialNum - 1, k);
                         out.writeInt(DUMMY_STACK_TRACE_ID);
                         writeSymbolID(k.getName());
                         serialNum++;
@@ -1157,6 +1227,7 @@
     private Debugger dbg;
     private ObjectHeap objectHeap;
     private SymbolTable symTbl;
+    private ArrayList<Klass> KlassMap;
 
     // oopSize of the debuggee
     private int OBJ_ID_SIZE;
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/StandardGraphBuilderPlugins.java	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/StandardGraphBuilderPlugins.java	Fri Jun 23 09:53:43 2017 -0700
@@ -251,7 +251,13 @@
 
         for (JavaKind kind : new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object}) {
             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
-            r.register5("compareAndSwap" + kind.name(), Receiver.class, Object.class, long.class, javaClass, javaClass, new InvocationPlugin() {
+            String casName;
+            if (Java8OrEarlier) {
+                casName = "compareAndSwap";
+            } else {
+                casName = "compareAndSet";
+            }
+            r.register5(casName + kind.name(), Receiver.class, Object.class, long.class, javaClass, javaClass, new InvocationPlugin() {
                 @Override
                 public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode expected, ValueNode x) {
                     // Emits a null-check for the otherwise unused receiver
--- a/hotspot/src/share/vm/code/relocInfo.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/code/relocInfo.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -129,9 +129,9 @@
   if (nm == NULL && begin != NULL) {
     // allow nmethod to be deduced from beginning address
     CodeBlob* cb = CodeCache::find_blob(begin);
-    nm = cb->as_compiled_method_or_null();
+    nm = (cb != NULL) ? cb->as_compiled_method_or_null() : NULL;
   }
-  assert(nm != NULL, "must be able to deduce nmethod from other arguments");
+  guarantee(nm != NULL, "must be able to deduce nmethod from other arguments");
 
   _code    = nm;
   _current = nm->relocation_begin() - 1;
--- a/hotspot/src/share/vm/compiler/oopMap.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/compiler/oopMap.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -350,16 +350,14 @@
         omv = oms.current();
         oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map);
         guarantee(loc != NULL, "missing saved register");
+        oop *derived_loc = loc;
         oop *base_loc    = fr->oopmapreg_to_location(omv.content_reg(), reg_map);
-        oop *derived_loc = loc;
-        oop val = *base_loc;
-        if (val == (oop)NULL || Universe::is_narrow_oop_base(val)) {
-          // Ignore NULL oops and decoded NULL narrow oops which
-          // equal to Universe::narrow_oop_base when a narrow oop
-          // implicit null check is used in compiled code.
-          // The narrow_oop_base could be NULL or be the address
-          // of the page below heap depending on compressed oops mode.
-        } else {
+        // Ignore NULL oops and decoded NULL narrow oops which
+        // equal to Universe::narrow_oop_base when a narrow oop
+        // implicit null check is used in compiled code.
+        // The narrow_oop_base could be NULL or be the address
+        // of the page below heap depending on compressed oops mode.
+        if (base_loc != NULL && *base_loc != (oop)NULL && !Universe::is_narrow_oop_base(*base_loc)) {
           derived_oop_fn(base_loc, derived_loc);
         }
         oms.next();
--- a/hotspot/src/share/vm/opto/arraycopynode.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/arraycopynode.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -25,6 +25,7 @@
 #include "precompiled.hpp"
 #include "opto/arraycopynode.hpp"
 #include "opto/graphKit.hpp"
+#include "runtime/sharedRuntime.hpp"
 
 ArrayCopyNode::ArrayCopyNode(Compile* C, bool alloc_tightly_coupled, bool has_negative_length_guard)
   : CallNode(arraycopy_type(), NULL, TypeRawPtr::BOTTOM),
@@ -631,42 +632,76 @@
   return CallNode::may_modify_arraycopy_helper(dest_t, t_oop, phase);
 }
 
-bool ArrayCopyNode::may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, ArrayCopyNode*& ac) {
-  if (n->Opcode() == Op_StoreCM ||
-      n->Opcode() == Op_StoreB) {
-    // Ignore card mark stores
-    n = n->in(MemNode::Memory);
-  }
-
-  if (n->is_Proj()) {
-    n = n->in(0);
-    if (n->is_Call() && n->as_Call()->may_modify(t_oop, phase)) {
-      if (n->isa_ArrayCopy() != NULL) {
-        ac = n->as_ArrayCopy();
-      }
-      return true;
-    }
+bool ArrayCopyNode::may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, CallNode*& call) {
+  if (n != NULL &&
+      n->is_Call() &&
+      n->as_Call()->may_modify(t_oop, phase) &&
+      (n->as_Call()->is_ArrayCopy() || n->as_Call()->is_call_to_arraycopystub())) {
+    call = n->as_Call();
+    return true;
   }
   return false;
 }
 
-bool ArrayCopyNode::may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac) {
-  Node* mem = mb->in(TypeFunc::Memory);
-
-  if (mem->is_MergeMem()) {
-    Node* n = mem->as_MergeMem()->memory_at(Compile::AliasIdxRaw);
-    if (may_modify_helper(t_oop, n, phase, ac)) {
-      return true;
-    } else if (n->is_Phi()) {
-      for (uint i = 1; i < n->req(); i++) {
-        if (n->in(i) != NULL) {
-          if (may_modify_helper(t_oop, n->in(i), phase, ac)) {
-            return true;
+static Node* step_over_gc_barrier(Node* c) {
+  if (UseG1GC && !GraphKit::use_ReduceInitialCardMarks() &&
+      c != NULL && c->is_Region() && c->req() == 3) {
+    for (uint i = 1; i < c->req(); i++) {
+      if (c->in(i) != NULL && c->in(i)->is_Region() &&
+          c->in(i)->req() == 3) {
+        Node* r = c->in(i);
+        for (uint j = 1; j < r->req(); j++) {
+          if (r->in(j) != NULL && r->in(j)->is_Proj() &&
+              r->in(j)->in(0) != NULL &&
+              r->in(j)->in(0)->Opcode() == Op_CallLeaf &&
+              r->in(j)->in(0)->as_Call()->entry_point() == CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post)) {
+            Node* call = r->in(j)->in(0);
+            c = c->in(i == 1 ? 2 : 1);
+            if (c != NULL) {
+              c = c->in(0);
+              if (c != NULL) {
+                c = c->in(0);
+                assert(call->in(0) == NULL ||
+                       call->in(0)->in(0) == NULL ||
+                       call->in(0)->in(0)->in(0) == NULL ||
+                       call->in(0)->in(0)->in(0)->in(0) == NULL ||
+                       call->in(0)->in(0)->in(0)->in(0)->in(0) == NULL ||
+                       c == call->in(0)->in(0)->in(0)->in(0)->in(0), "bad barrier shape");
+                return c;
+              }
+            }
           }
         }
       }
     }
   }
+  return c;
+}
+
+bool ArrayCopyNode::may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac) {
+
+  Node* c = mb->in(0);
+
+  // step over g1 gc barrier if we're at a clone with ReduceInitialCardMarks off
+  c = step_over_gc_barrier(c);
+
+  CallNode* call = NULL;
+  if (c != NULL && c->is_Region()) {
+    for (uint i = 1; i < c->req(); i++) {
+      if (c->in(i) != NULL) {
+        Node* n = c->in(i)->in(0);
+        if (may_modify_helper(t_oop, n, phase, call)) {
+          ac = call->isa_ArrayCopy();
+          assert(c == mb->in(0), "only for clone");
+          return true;
+        }
+      }
+    }
+  } else if (may_modify_helper(t_oop, c->in(0), phase, call)) {
+    ac = call->isa_ArrayCopy();
+    assert(c == mb->in(0) || (ac != NULL && ac->is_clonebasic() && !GraphKit::use_ReduceInitialCardMarks()), "only for clone");
+    return true;
+  }
 
   return false;
 }
@@ -677,37 +712,77 @@
 // between offset_lo and offset_hi
 // if must_modify is true, return true if the copy is guaranteed to
 // write between offset_lo and offset_hi
-bool ArrayCopyNode::modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify) {
+bool ArrayCopyNode::modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify) const {
   assert(_kind == ArrayCopy || _kind == CopyOf || _kind == CopyOfRange, "only for real array copies");
 
-  Node* dest = in(ArrayCopyNode::Dest);
-  Node* src_pos = in(ArrayCopyNode::SrcPos);
-  Node* dest_pos = in(ArrayCopyNode::DestPos);
-  Node* len = in(ArrayCopyNode::Length);
+  Node* dest = in(Dest);
+  Node* dest_pos = in(DestPos);
+  Node* len = in(Length);
 
   const TypeInt *dest_pos_t = phase->type(dest_pos)->isa_int();
   const TypeInt *len_t = phase->type(len)->isa_int();
   const TypeAryPtr* ary_t = phase->type(dest)->isa_aryptr();
 
-  if (dest_pos_t != NULL && len_t != NULL && ary_t != NULL) {
-    BasicType ary_elem = ary_t->klass()->as_array_klass()->element_type()->basic_type();
-    uint header = arrayOopDesc::base_offset_in_bytes(ary_elem);
-    uint elemsize = type2aelembytes(ary_elem);
+  if (dest_pos_t == NULL || len_t == NULL || ary_t == NULL) {
+    return !must_modify;
+  }
 
-    jlong dest_pos_plus_len_lo = (((jlong)dest_pos_t->_lo) + len_t->_lo) * elemsize + header;
-    jlong dest_pos_plus_len_hi = (((jlong)dest_pos_t->_hi) + len_t->_hi) * elemsize + header;
-    jlong dest_pos_lo = ((jlong)dest_pos_t->_lo) * elemsize + header;
-    jlong dest_pos_hi = ((jlong)dest_pos_t->_hi) * elemsize + header;
+  BasicType ary_elem = ary_t->klass()->as_array_klass()->element_type()->basic_type();
+  uint header = arrayOopDesc::base_offset_in_bytes(ary_elem);
+  uint elemsize = type2aelembytes(ary_elem);
 
-    if (must_modify) {
-      if (offset_lo >= dest_pos_hi && offset_hi < dest_pos_plus_len_lo) {
-        return true;
-      }
-    } else {
-      if (offset_hi >= dest_pos_lo && offset_lo < dest_pos_plus_len_hi) {
-        return true;
-      }
+  jlong dest_pos_plus_len_lo = (((jlong)dest_pos_t->_lo) + len_t->_lo) * elemsize + header;
+  jlong dest_pos_plus_len_hi = (((jlong)dest_pos_t->_hi) + len_t->_hi) * elemsize + header;
+  jlong dest_pos_lo = ((jlong)dest_pos_t->_lo) * elemsize + header;
+  jlong dest_pos_hi = ((jlong)dest_pos_t->_hi) * elemsize + header;
+
+  if (must_modify) {
+    if (offset_lo >= dest_pos_hi && offset_hi < dest_pos_plus_len_lo) {
+      return true;
+    }
+  } else {
+    if (offset_hi >= dest_pos_lo && offset_lo < dest_pos_plus_len_hi) {
+      return true;
     }
   }
   return false;
 }
+
+// We try to replace a load from the destination of an arraycopy with
+// a load from the source so the arraycopy has a chance to be
+// eliminated. It's only valid if the arraycopy doesn't change the
+// element that would be loaded from the source array.
+bool ArrayCopyNode::can_replace_dest_load_with_src_load(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase) const {
+  assert(_kind == ArrayCopy || _kind == CopyOf || _kind == CopyOfRange, "only for real array copies");
+
+  Node* src = in(Src);
+  Node* dest = in(Dest);
+
+  // Check whether, assuming source and destination are the same
+  // array, the arraycopy modifies the element from the source we
+  // would load.
+  if ((src != dest && in(SrcPos) == in(DestPos)) || !modifies(offset_lo, offset_hi, phase, false)) {
+    // if not the transformation is legal
+    return true;
+  }
+
+  AllocateNode* src_alloc = AllocateNode::Ideal_allocation(src, phase);
+  AllocateNode* dest_alloc = AllocateNode::Ideal_allocation(dest, phase);
+
+  // Check whether source and destination can be proved to be
+  // different arrays
+  const TypeOopPtr* t_src = phase->type(src)->isa_oopptr();
+  const TypeOopPtr* t_dest = phase->type(dest)->isa_oopptr();
+
+  if (t_src != NULL && t_dest != NULL &&
+      (t_src->is_known_instance() || t_dest->is_known_instance()) &&
+      t_src->instance_id() != t_dest->instance_id()) {
+    return true;
+  }
+
+  if (MemNode::detect_ptr_independence(src->uncast(), src_alloc, dest->uncast(), dest_alloc, phase)) {
+    return true;
+  }
+
+  return false;
+}
--- a/hotspot/src/share/vm/opto/arraycopynode.hpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/arraycopynode.hpp	Fri Jun 23 09:53:43 2017 -0700
@@ -108,7 +108,7 @@
                             BasicType copy_type, const Type* value_type, int count);
   bool finish_transform(PhaseGVN *phase, bool can_reshape,
                         Node* ctl, Node *mem);
-  static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, ArrayCopyNode*& ac);
+  static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, CallNode*& call);
 
 public:
 
@@ -167,7 +167,8 @@
   bool has_negative_length_guard() const { return _has_negative_length_guard; }
 
   static bool may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac);
-  bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify);
+  bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify) const;
+  bool can_replace_dest_load_with_src_load(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase) const;
 
 #ifndef PRODUCT
   virtual void dump_spec(outputStream *st) const;
--- a/hotspot/src/share/vm/opto/loopnode.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/loopnode.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -1860,6 +1860,9 @@
   if (_required_safept != NULL && _required_safept->size() > 0) {
     tty->print(" req={"); _required_safept->dump_simple(); tty->print(" }");
   }
+  if (Verbose) {
+    tty->print(" body={"); _body.dump_simple(); tty->print(" }");
+  }
   tty->cr();
 }
 
--- a/hotspot/src/share/vm/opto/loopopts.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/loopopts.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -913,7 +913,11 @@
 
   if (n->is_ConstraintCast()) {
     Node* dom_cast = n->as_ConstraintCast()->dominating_cast(this);
-    if (dom_cast != NULL) {
+    // ConstraintCastNode::dominating_cast() uses node control input to determine domination.
+    // Node control inputs don't necessarily agree with loop control info (due to
+    // transformations happened in between), thus additional dominance check is needed
+    // to keep loop info valid.
+    if (dom_cast != NULL && is_dominator(get_ctrl(dom_cast), get_ctrl(n))) {
       _igvn.replace_node(n, dom_cast);
       return dom_cast;
     }
--- a/hotspot/src/share/vm/opto/macro.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/macro.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -1047,7 +1047,9 @@
         // opportunities for allocation elimination
         Node* src = ac->in(ArrayCopyNode::Src);
         ac->replace_edge(src, top());
-        if (src->outcnt() == 0) {
+        // src can be top at this point if src and dest of the
+        // arraycopy were the same
+        if (src->outcnt() == 0 && !src->is_top()) {
           _igvn.remove_dead_node(src);
         }
 
--- a/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -718,6 +718,15 @@
   _igvn.replace_node(_ioproj_fallthrough, *io);
   _igvn.replace_node(_fallthroughcatchproj, *ctrl);
 
+#ifdef ASSERT
+  const TypeOopPtr* dest_t = _igvn.type(dest)->is_oopptr();
+  if (dest_t->is_known_instance()) {
+    ArrayCopyNode* ac = NULL;
+    assert(ArrayCopyNode::may_modify(dest_t, (*ctrl)->in(0)->as_MemBar(), &_igvn, ac), "dependency on arraycopy lost");
+    assert(ac == NULL, "no arraycopy anymore");
+  }
+#endif
+
   return out_mem;
 }
 
@@ -1139,8 +1148,25 @@
   const TypeAryPtr* top_src = src_type->isa_aryptr();
   const TypeAryPtr* top_dest = dest_type->isa_aryptr();
 
-  if (top_src  == NULL || top_src->klass()  == NULL ||
-      top_dest == NULL || top_dest->klass() == NULL) {
+  BasicType src_elem = T_CONFLICT;
+  BasicType dest_elem = T_CONFLICT;
+
+  if (top_dest != NULL && top_dest->klass() != NULL) {
+    dest_elem = top_dest->klass()->as_array_klass()->element_type()->basic_type();
+  }
+  if (top_src != NULL && top_src->klass() != NULL) {
+    src_elem = top_src->klass()->as_array_klass()->element_type()->basic_type();
+  }
+  if (src_elem  == T_ARRAY)  src_elem  = T_OBJECT;
+  if (dest_elem == T_ARRAY)  dest_elem = T_OBJECT;
+
+  if (ac->is_arraycopy_validated() &&
+      dest_elem != T_CONFLICT &&
+      src_elem == T_CONFLICT) {
+    src_elem = dest_elem;
+  }
+
+  if (src_elem == T_CONFLICT || dest_elem == T_CONFLICT) {
     // Conservatively insert a memory barrier on all memory slices.
     // Do not let writes into the source float below the arraycopy.
     {
@@ -1169,13 +1195,11 @@
     }
     return;
   }
+
+  assert(!ac->is_arraycopy_validated() || (src_elem == dest_elem && dest_elem != T_VOID), "validated but different basic types");
+
   // (2) src and dest arrays must have elements of the same BasicType
   // Figure out the size and type of the elements we will be copying.
-  BasicType src_elem  = top_src->klass()->as_array_klass()->element_type()->basic_type();
-  BasicType dest_elem = top_dest->klass()->as_array_klass()->element_type()->basic_type();
-  if (src_elem  == T_ARRAY)  src_elem  = T_OBJECT;
-  if (dest_elem == T_ARRAY)  dest_elem = T_OBJECT;
-
   if (src_elem != dest_elem || dest_elem == T_VOID) {
     // The component types are not the same or are not recognized.  Punt.
     // (But, avoid the native method wrapper to JVM_ArrayCopy.)
--- a/hotspot/src/share/vm/opto/memnode.cpp	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Fri Jun 23 09:53:43 2017 -0700
@@ -908,10 +908,11 @@
         ld->set_req(0, ld_alloc->in(0));
       }
     } else {
+      Node* src = ac->in(ArrayCopyNode::Src);
       Node* addp = in(MemNode::Address)->clone();
       assert(addp->in(AddPNode::Base) == addp->in(AddPNode::Address), "should be");
-      addp->set_req(AddPNode::Base, ac->in(ArrayCopyNode::Src));
-      addp->set_req(AddPNode::Address, ac->in(ArrayCopyNode::Src));
+      addp->set_req(AddPNode::Base, src);
+      addp->set_req(AddPNode::Address, src);
 
       const TypeAryPtr* ary_t = phase->type(in(MemNode::Address))->isa_aryptr();
       BasicType ary_elem  = ary_t->klass()->as_array_klass()->element_type()->basic_type();
@@ -928,6 +929,12 @@
       addp->set_req(AddPNode::Offset, offset);
       ld->set_req(MemNode::Address, phase->transform(addp));
 
+      const TypeX *ld_offs_t = phase->type(offset)->isa_intptr_t();
+
+      if (!ac->as_ArrayCopy()->can_replace_dest_load_with_src_load(ld_offs_t->_lo, ld_offs_t->_hi, phase)) {
+        return NULL;
+      }
+
       if (in(0) != NULL) {
         assert(ac->in(0) != NULL, "alloc must have control");
         ld->set_req(0, ac->in(0));
--- a/hotspot/src/share/vm/prims/jvmti.xml	Fri Jun 02 14:46:29 2017 -0700
+++ b/hotspot/src/share/vm/prims/jvmti.xml	Fri Jun 23 09:53:43 2017 -0700
@@ -24,11 +24,11 @@
 -->
 
 <!DOCTYPE specification [
-   <!ELEMENT specification (title, intro*, functionsection, errorsection, 
+   <!ELEMENT specification (title, intro*, functionsection, errorsection,
                             eventsection, datasection, issuessection, changehistory)>
-   <!ATTLIST specification label CDATA #REQUIRED 
-                           majorversion CDATA #REQUIRED 
-                           minorversion CDATA #REQUIRED 
+   <!ATTLIST specification label CDATA #REQUIRED
+                           majorversion CDATA #REQUIRED
+                           minorversion CDATA #REQUIRED
                            microversion CDATA #REQUIRED>
 
    <!ELEMENT title (#PCDATA|jvmti|tm)*>
@@ -41,13 +41,13 @@
    <!ELEMENT functionsection (intro*, category*)>
    <!ATTLIST functionsection label CDATA #REQUIRED>
 
-   <!ELEMENT category ((intro|typedef|uniontypedef|capabilitiestypedef)*, 
+   <!ELEMENT category ((intro|typedef|uniontypedef|capabilitiestypedef)*,
                           (function|callback|elide)*)>
    <!ATTLIST category id CDATA #REQUIRED
                       label CDATA #REQUIRED>
 
    <!ELEMENT function (synopsis, typedef*, description?, origin,
-                         (capabilities|eventcapabilities), 
+                         (capabilities|eventcapabilities),
                          parameters, errors)>
    <!ATTLIST function id CDATA #REQUIRED
                       num CDATA #REQUIRED
@@ -77,7 +77,7 @@
                      since CDATA "1.0">
 
    <!ELEMENT field ((jmethodID|jfieldID|jframeID|jrawMonitorID|jclass|jthread|jthreadGroup|jobject|
-                     jvalue|enum|jint|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|allocfieldbuf|inptr|inbuf|outbuf|vmbuf|ptrtype|struct), 
+                     jvalue|enum|jint|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|allocfieldbuf|inptr|inbuf|outbuf|vmbuf|ptrtype|struct),
                     description)>
    <!ATTLIST field id CDATA #REQUIRED>
 
@@ -107,7 +107,7 @@
 
    <!ELEMENT param ((jmethodID|jfieldID|jframeID|jrawMonitorID|jclass|jthread|jthreadGroup|jobject|
                      jvalue|enum|jint|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|varargs|struct|ptrtype|
-                     outptr|allocbuf|allocallocbuf|inptr|inbuf|outbuf|vmbuf|agentbuf), 
+                     outptr|allocbuf|allocallocbuf|inptr|inbuf|outbuf|vmbuf|agentbuf),
                     description)>
    <!ATTLIST param id CDATA #REQUIRED>
 
@@ -292,16 +292,16 @@
    <!ATTLIST eventphaselist phase (onload|start|live|any) #REQUIRED>
 
    <!ELEMENT issue ANY>
-   
+
    <!ELEMENT rationale ANY>
-   
+
    <!ELEMENT todo ANY>
-   
+
    <!ELEMENT origin (#PCDATA)*>
 
    <!ELEMENT elide (intro|function|callback|event)*>
    <!ATTLIST elide why CDATA #IMPLIED>
-   
+
    <!ELEMENT constants (constant*)>
    <!ATTLIST constants id CDATA #REQUIRED
                        label CDATA #REQUIRED
@@ -361,11 +361,11 @@
   <title subtitle="Version">
     <tm>JVM</tm> Tool Interface
   </title>
-  
+
   <intro id="whatIs" label="What is the JVM Tool Interface?">
-    The <tm>JVM</tm> Tool Interface (<jvmti/>) 
-    is a programming interface used by development and monitoring tools. 
-    It provides both a way to inspect the state and 
+    The <tm>JVM</tm> Tool Interface (<jvmti/>)
+    is a programming interface used by development and monitoring tools.
+    It provides both a way to inspect the state and
     to control the execution of applications running in the
     <tm>Java</tm> virtual machine (VM).
     <p/>
@@ -376,21 +376,21 @@
     <jvmti/> may not be available in all implementations of the <tm>Java</tm> virtual
     machine.
     <p/>
-    <jvmti/> is a two-way interface. 
+    <jvmti/> is a two-way interface.
     A client of <jvmti/>, hereafter called an <i>agent</i>,
     can be notified of
-    interesting occurrences through <internallink id="EventSection">events</internallink>. 
+    interesting occurrences through <internallink id="EventSection">events</internallink>.
     <jvmti/>
-    can query and control the application through many 
-    <internallink id="FunctionSection">functions</internallink>, 
-    either in response to events or 
+    can query and control the application through many
+    <internallink id="FunctionSection">functions</internallink>,
+    either in response to events or
     independent of them.
     <p/>
-    Agents run in the same process with and communicate directly with 
+    Agents run in the same process with and communicate directly with
     the virtual machine executing
     the application being examined.  This communication is
     through a native interface (<jvmti/>). The native in-process interface allows
-    maximal control with minimal intrusion on the part of a tool. 
+    maximal control with minimal intrusion on the part of a tool.
     Typically, agents are relatively compact. They can be controlled
     by a separate process which implements the bulk of a tool's
     function without interfering with the target application's normal execution.
@@ -400,12 +400,12 @@
     Tools can be written directly to <jvmti/> or indirectly
     through higher level interfaces.
     The Java Platform Debugger Architecture includes <jvmti/>, but also
-    contains higher-level, out-of-process debugger interfaces. The higher-level 
-    interfaces are more appropriate than <jvmti/> for many tools. 
-    For more information on the Java Platform Debugger Architecture, 
-    see the 
-    <externallink id="docs/technotes/guides/jpda/architecture.html">Java 
-      Platform Debugger Architecture website</externallink>. 
+    contains higher-level, out-of-process debugger interfaces. The higher-level
+    interfaces are more appropriate than <jvmti/> for many tools.
+    For more information on the Java Platform Debugger Architecture,
+    see the
+    <externallink id="docs/technotes/guides/jpda/architecture.html">Java
+      Platform Debugger Architecture website</externallink>.
   </intro>
 
   <intro id="writingAgents" label="Writing Agents">
@@ -424,16 +424,16 @@
   </intro>
 
   <intro id="deployingAgents" label="Deploying Agents">
-    An agent is deployed in a platform specific manner but is typically the 
-    platform equivalent of a dynamic library. On the <tm>Windows</tm> operating 
-    system, for example, an agent library is a "Dynamic Linked Library" (DLL). 
+    An agent is deployed in a platform specific manner but is typically the
+    platform equivalent of a dynamic library. On the <tm>Windows</tm> operating
+    system, for example, an agent library is a "Dynamic Linked Library" (DLL).
     On the <tm>Solaris</tm> Operating Environment, an agent library is a shared
     object (<code>.so</code> file).
     <p/>
 
     An agent may be started at VM startup by specifying the agent library
     name using a <internallink id="starting">command line option</internallink>.
-    Some implementations may support a mechanism to <internallink id="onattach"> 
+    Some implementations may support a mechanism to <internallink id="onattach">
     start agents</internallink> in the live <functionlink id="GetPhase">phase</functionlink>.
     The details of how this is initiated are implementation specific.
   </intro>
@@ -460,7 +460,7 @@
       a function is exported, at the same point during VM execution as it would
       have called the dynamic entry point Agent_OnUnLoad. A statically loaded
       agent cannot be unloaded. The Agent_OnUnload_L function will still be
-      called to do any other agent shutdown related tasks. 
+      called to do any other agent shutdown related tasks.
       If a <i>statically linked</i> agent L exports a function called
       Agent_OnUnLoad_L and a function called Agent_OnUnLoad, the Agent_OnUnLoad
       function will be ignored.
@@ -472,19 +472,19 @@
       Agent_OnAttach_L and a function called Agent_OnAttach, the Agent_OnAttach
       function will be ignored.
 </intro>
-  
+
   <intro id="starting" label="Agent Command Line Options">
     The term "command-line option" is used below to
     mean options supplied in the <code>JavaVMInitArgs</code> argument
     to the <code>JNI_CreateJavaVM</code> function of the JNI
     Invocation API.
     <p/>
-    One of the two following 
-    command-line options is used on VM startup to 
+    One of the two following
+    command-line options is used on VM startup to
     properly load and run agents.
-    These arguments identify the library containing 
+    These arguments identify the library containing
     the agent as well as an options
-    string to be passed in at startup. 
+    string to be passed in at startup.
     <dl>
       <dt><code>-agentlib:</code><i>&lt;agent-lib-name&gt;</i><code>=</code><i>&lt;options&gt;</i></dt>
       <dd>
@@ -494,10 +494,10 @@
 	Typically, the <i>&lt;agent-lib-name&gt;</i> is expanded to an
 	operating system specific file name.
 	The <i>&lt;options&gt;</i> will be passed to the agent on start-up.
-	For example, if the option 
-	<code>-agentlib:foo=opt1,opt2</code> is specified, the VM will attempt to 
+	For example, if the option
+	<code>-agentlib:foo=opt1,opt2</code> is specified, the VM will attempt to
 	load the shared library <code>foo.dll</code> from the system <code>PATH</code>
-        under <tm>Windows</tm> or <code>libfoo.so</code> from the 
+        under <tm>Windows</tm> or <code>libfoo.so</code> from the
 	<code>LD_LIBRARY_PATH</code> under the <tm>Solaris</tm> operating
         environment.
         If the agent library is statically linked into the executable
@@ -510,8 +510,8 @@
 	to load the library.
 	No library name expansion will occur.
 	The <i>&lt;options&gt;</i> will be passed to the agent on start-up.
-	For example, if the option 
-	<code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code> is specified, the VM will attempt to 
+	For example, if the option
+	<code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code> is specified, the VM will attempt to
 	load the shared library <code>c:\myLibs\foo.dll</code>. If the agent
         library is statically linked into the executable
         then no actual loading takes place.
@@ -523,13 +523,13 @@
     in the library will be invoked. If the agent library is statically linked
     into the executable then the system will attempt to invoke the
     <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code> entry point where
-    &lt;agent-lib-name&gt; is the basename of the 
+    &lt;agent-lib-name&gt; is the basename of the
     agent. In the above example <code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code>,
     the system will attempt to find and call the <code>Agent_OnLoad_foo</code> start-up routine.
     <p/>
     Libraries loaded with <code>-agentlib:</code> or <code>-agentpath:</code>
     will be searched for JNI native method implementations to facilitate the
-    use of Java programming language code in tools, as is needed for 
+    use of Java programming language code in tools, as is needed for
     <internallink id="bci">bytecode instrumentation</internallink>.
     <p/>
     The agent libraries will be searched after all other libraries have been
@@ -537,11 +537,11 @@
     implementations of non-agent methods can use the
     <eventlink id="NativeMethodBind">NativeMethodBind event</eventlink>).
     <p/>
-    These switches do the above and nothing more - they do not change the 
-    state of the VM or <jvmti/>.  No command line options are needed 
-    to enable <jvmti/> 
+    These switches do the above and nothing more - they do not change the
+    state of the VM or <jvmti/>.  No command line options are needed
+    to enable <jvmti/>
     or aspects of <jvmti/>, this is handled programmatically
-    by the use of 
+    by the use of
     <internallink id="capability">capabilities</internallink>.
   </intro>
 
@@ -557,29 +557,29 @@
     <internallink id="onattach"><code>Agent_OnAttach</code></internallink>
     or <internallink id="onattach"><code>Agent_OnAttach_L</code></internallink>
     for statically linked agents will be invoked.
-    Exactly one call to a start-up function is made per agent.  
+    Exactly one call to a start-up function is made per agent.
   </intro>
 
   <intro id="onload" label="Agent Start-Up (OnLoad phase)">
     If an agent is started during the <code>OnLoad</code> phase then its
     agent library must export a start-up function with the following prototype:
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnLoad(JavaVM *vm, char *options, void *reserved)</example>
     Or for a statically linked agent named 'L':
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnLoad_L(JavaVM *vm, char *options, void *reserved)</example>
 
-    The VM will start the agent by calling this function.  
+    The VM will start the agent by calling this function.
     It will be called early enough in VM initialization that:
     <ul>
       <li><functionlink id="SetSystemProperty">system properties</functionlink>
 	may be set before they have been used in the start-up of the VM</li>
-      <li>the full set of 
+      <li>the full set of
 	<internallink id="capability">capabilities</internallink>
 	is still available (note that capabilities that configure the VM
-	may only be available at this time--see the 
+	may only be available at this time--see the
 	<internallink id="capability">Capability function section</internallink>)</li>
       <li>no bytecodes have executed</li>
       <li>no classes have been loaded</li>
@@ -588,13 +588,13 @@
     <p/>
     The VM will call the <code>Agent_OnLoad</code> or
     <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code> function with
-    <i>&lt;options&gt;</i> as the second argument - 
+    <i>&lt;options&gt;</i> as the second argument -
     that is, using the command-line option examples,
-    <code>"opt1,opt2"</code> will be passed to the <code>char *options</code> 
+    <code>"opt1,opt2"</code> will be passed to the <code>char *options</code>
     argument of <code>Agent_OnLoad</code>.
     The <code>options</code> argument is encoded as a
     <internallink id="mUTF">modified UTF-8</internallink> string.
-    If <i>=&lt;options&gt;</i> is not specified, 
+    If <i>=&lt;options&gt;</i> is not specified,
     a zero length string is passed to <code>options</code>.
     The lifespan of the <code>options</code> string is the
     <code>Agent_OnLoad</code> or <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code>
@@ -602,26 +602,26 @@
     be copied.
     The period between when <code>Agent_OnLoad</code> is called and when it
     returns is called the <i>OnLoad phase</i>.
-    Since the VM is not initialized during the OnLoad 
+    Since the VM is not initialized during the OnLoad
     <functionlink id="GetPhase">phase</functionlink>,
-    the set of allowed operations 
+    the set of allowed operations
     inside <code>Agent_OnLoad</code> is restricted (see the function descriptions for the
-    functionality available at this time). 
-    The agent can safely process the options and set 
-    event callbacks with <functionlink id="SetEventCallbacks"></functionlink>. Once  
-    the VM initialization event is received 
-    (that is, the <eventlink id="VMInit">VMInit</eventlink> 
+    functionality available at this time).
+    The agent can safely process the options and set
+    event callbacks with <functionlink id="SetEventCallbacks"></functionlink>. Once
+    the VM initialization event is received
+    (that is, the <eventlink id="VMInit">VMInit</eventlink>
     callback is invoked), the agent
     can complete its initialization.
     <rationale>
       Early startup is required so that agents can set the desired capabilities,
       many of which must be set before the VM is initialized.
-      In JVMDI, the -Xdebug command-line option provided 
-      very coarse-grain control of capabilities. 
+      In JVMDI, the -Xdebug command-line option provided
+      very coarse-grain control of capabilities.
       JVMPI implementations use various tricks to provide a single "JVMPI on" switch.
-      No reasonable command-line 
+      No reasonable command-line
       option could provide the fine-grain of control required to balance needed capabilities vs
-      performance impact.  
+      performance impact.
       Early startup is also needed so that agents can control the execution
       environment - modifying the file system and system properties to install
       their functionality.
@@ -631,75 +631,75 @@
     <code>Agent_OnLoad_&lt;agent-lib-name&gt;</code> is used to indicate an error.
     Any value other than zero indicates an error and causes termination of the VM.
   </intro>
-  
+
   <intro id="onattach" label="Agent Start-Up (Live phase)">
-    A VM may support a mechanism that allows agents to be started in the VM during the live 
+    A VM may support a mechanism that allows agents to be started in the VM during the live
     <functionlink id="GetPhase">phase</functionlink>. The details of how this is supported,
-    are implementation specific. For example, a tool may use some platform specific mechanism, 
+    are implementation specific. For example, a tool may use some platform specific mechanism,
     or implementation specific API, to attach to the running VM, and request it start a given
     agent.
     <p/>
     If an agent is started during the live phase then its agent library
-    must export a start-up function 
+    must export a start-up function
     with the following prototype:
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnAttach(JavaVM* vm, char *options, void *reserved)</example>
 Or for a statically linked agent named 'L':
     <example>
-JNIEXPORT jint JNICALL 
+JNIEXPORT jint JNICALL
 Agent_OnAttach_L(JavaVM* vm, char *options, void *reserved)</example>
 
-    <p/>         
-    The VM will start the agent by calling this function.  
+    <p/>
+    The VM will start the agent by calling this function.
     It will be called in the context of a thread
     that is attached to the VM. The first argument <i>&lt;vm&gt;</i> is the Java VM.
     The <i>&lt;options&gt;</i> argument is the startup options provided to the agent.
     <i>&lt;options&gt;</i> is encoded as a <internallink id="mUTF">modified UTF-8
     </internallink> string.
-    If startup options were not provided, a zero length string is passed to 
-    <code>options</code>. The lifespan of the <code>options</code> string is the 
+    If startup options were not provided, a zero length string is passed to
+    <code>options</code>. The lifespan of the <code>options</code> string is the
     <code>Agent_OnAttach</code> or <code>Agent_OnAttach_&lt;agent-lib-name&gt;</code> call.
     If needed beyond this time the string or parts of the string must be copied.
     <p/>
-    Note that some <internallink id="capability">capabilities</internallink> 
+    Note that some <internallink id="capability">capabilities</internallink>
     may not be available in the live phase.
     <p/>
     The <code>Agent_OnAttach</code> or <code>Agent_OnAttach_&lt;agent-lib-name
     &gt;</code> function initializes the agent and returns a value
-    to the VM to indicate if an error occurred. Any value other than zero indicates an error. 
-    An error does not cause the VM to terminate. Instead the VM ignores the error, or takes 
-    some implementation specific action -- for example it might print an error to standard error, 
+    to the VM to indicate if an error occurred. Any value other than zero indicates an error.
+    An error does not cause the VM to terminate. Instead the VM ignores the error, or takes
+    some implementation specific action -- for example it might print an error to standard error,
     or record the error in a system log.
   </intro>
 
   <intro id="onunload" label="Agent Shutdown">
-    The library may optionally export a 
+    The library may optionally export a
     shutdown function with the following prototype:
     <example>
-JNIEXPORT void JNICALL 
+JNIEXPORT void JNICALL
 Agent_OnUnload(JavaVM *vm)</example>
     Or for a statically linked agent named 'L':
     <example>
-JNIEXPORT void JNICALL 
+JNIEXPORT void JNICALL
 Agent_OnUnload_L(JavaVM *vm)</example>
 
     This function will be called by the VM when the library is about to be unloaded.
     The library will be unloaded (unless it is statically linked into the
-    executable) and this function will be called if some platform specific 
+    executable) and this function will be called if some platform specific
     mechanism causes the unload (an unload mechanism is not specified in this document)
-    or the library is (in effect) unloaded by the termination of the VM whether through 
+    or the library is (in effect) unloaded by the termination of the VM whether through
     normal termination or VM failure, including start-up failure.
     Uncontrolled shutdown is, of couse, an exception to this rule.
-    Note the distinction between this function and the 
+    Note the distinction between this function and the
     <eventlink id="VMDeath">VM Death event</eventlink>: for the VM Death event
-    to be sent, the VM must have run at least to the point of initialization and a valid 
+    to be sent, the VM must have run at least to the point of initialization and a valid
     <jvmti/> environment must exist which has set a callback for VMDeath
     and enabled the event.
     None of these are required for <code>Agent_OnUnload</code> or
     <code>Agent_OnUnload_&lt;agent-lib-name&gt;</code> and this function
     is also called if the library is unloaded for other reasons.
-    In the case that a VM Death event is sent, it will be sent before this 
+    In the case that a VM Death event is sent, it will be sent before this
     function is called (assuming this function is called due to VM termination).
     This function can be used to clean-up resources allocated by the agent.
   </intro>
@@ -709,17 +709,17 @@
     or simply VMs launched deep within scripts, a <code>JAVA_TOOL_OPTIONS</code> variable is
     provided so that agents may be launched in these cases.
     <p/>
-    Platforms which support environment variables or other named strings, may support the 
-    <code>JAVA_TOOL_OPTIONS</code> variable.  This variable will be broken into options at white-space 
-    boundaries.  White-space characters include space, tab, carriage-return, new-line, 
-    vertical-tab, and form-feed.  Sequences of white-space characters are considered 
-    equivalent to a single white-space character.  No white-space is included in the options 
+    Platforms which support environment variables or other named strings, may support the
+    <code>JAVA_TOOL_OPTIONS</code> variable.  This variable will be broken into options at white-space
+    boundaries.  White-space characters include space, tab, carriage-return, new-line,
+    vertical-tab, and form-feed.  Sequences of white-space characters are considered
+    equivalent to a single white-space character.  No white-space is included in the options
     unless quoted.  Quoting is as follows:
     <ul>
-        <li>All characters enclosed between a pair of single quote marks (''), except a single 
+        <li>All characters enclosed between a pair of single quote marks (''), except a single
         quote, are quoted.</li>
         <li>Double quote characters have no special meaning inside a pair of single quote marks.</li>
-        <li>All characters enclosed between a pair of double quote marks (""), except a double 
+        <li>All characters enclosed between a pair of double quote marks (""), except a double
         quote, are quoted.</li>
         <li>Single quote characters have no special meaning inside a pair of double quote marks.</li>
         <li>A quoted part can start or end anywhere in the variable.</li>
@@ -727,24 +727,24 @@
         the option like any other character and do not mark white-space boundaries.</li>
         <li>The pair of quote marks is not included in the option.</li>
     </ul>
-    <code>JNI_CreateJavaVM</code> (in the JNI Invocation API) will prepend these options to the options supplied 
-    in its <code>JavaVMInitArgs</code> argument. Platforms may disable this feature in cases where security is 
-    a concern; for example, the Reference Implementation disables this feature on Unix systems when 
-    the effective user or group ID differs from the real ID.  
-    This feature is intended to support the initialization of tools -- specifically including the 
-    launching of native or Java programming language agents.  Multiple tools may wish to use this 
-    feature, so the variable should not be overwritten, instead,  options should be appended to 
-    the variable.  Note that since the variable is processed at the time of the JNI Invocation 
+    <code>JNI_CreateJavaVM</code> (in the JNI Invocation API) will prepend these options to the options supplied
+    in its <code>JavaVMInitArgs</code> argument. Platforms may disable this feature in cases where security is
+    a concern; for example, the Reference Implementation disables this feature on Unix systems when
+    the effective user or group ID differs from the real ID.
+    This feature is intended to support the initialization of tools -- specifically including the
+    launching of native or Java programming language agents.  Multiple tools may wish to use this
+    feature, so the variable should not be overwritten, instead,  options should be appended to
+    the variable.  Note that since the variable is processed at the time of the JNI Invocation
     API create VM call, options processed by a launcher (e.g., VM selection options) will not be handled.
   </intro>
 
   <intro id="environments" label="Environments">
     The <jvmti/> specification supports the use of multiple simultaneous
     <jvmti/> agents.
-    Each agent has its own <jvmti/> environment.  
+    Each agent has its own <jvmti/> environment.
     That is, the <jvmti/> state is
     separate for each agent - changes to one environment do not affect the
-    others.  The state of a <jvmti/> 
+    others.  The state of a <jvmti/>
     environment includes:
     <ul>
       <li><functionlink id="SetEventCallbacks">the event callbacks</functionlink></li>
@@ -752,7 +752,7 @@
       <li><internallink id="capability">the capabilities</internallink></li>
       <li><internallink id="memory">the memory allocation/deallocation hooks</internallink></li>
     </ul>
-    Although their <jvmti/> state 
+    Although their <jvmti/> state
     is separate, agents inspect and modify the shared state
     of the VM, they also share the native environment in which they execute.
     As such, an agent can perturb the results of other agents or cause them
@@ -761,30 +761,30 @@
     of preventing destructive interactions between agents. Techniques to reduce
     the likelihood of these occurrences are beyond the scope of this document.
     <p/>
-    An agent creates a <jvmti/> environment 
-    by passing a <jvmti/> version 
-    as the interface ID to the JNI Invocation API function 
-    <externallink id="docs/technotes/guides/jni/spec/invocation.html#GetEnv">
+    An agent creates a <jvmti/> environment
+    by passing a <jvmti/> version
+    as the interface ID to the JNI Invocation API function
+    <externallink id="jni/invocation.html#getenv">
       <code>GetEnv</code></externallink>.
     See <internallink id="jvmtiEnvAccess">Accessing <jvmti/> Functions</internallink>
-    for more details on the creation and use of 
+    for more details on the creation and use of
     <jvmti/> environments.
-    Typically, <jvmti/> environments are created by calling <code>GetEnv</code> from 
+    Typically, <jvmti/> environments are created by calling <code>GetEnv</code> from
     <internallink id="onload"><code>Agent_OnLoad</code></internallink>.
   </intro>
 
   <intro id="bci" label="Bytecode Instrumentation">
     This interface does not include some events that one might expect in an interface with
     profiling support.  Some examples include object allocation events and full speed
-    method enter and exit events.  The interface instead provides support for 
+    method enter and exit events.  The interface instead provides support for
     <i>bytecode instrumentation</i>, the ability to alter the Java virtual machine
     bytecode instructions which comprise the target program.  Typically, these alterations
     are to add "events" to the code of a method - for example, to add, at the beginning of a method,
-    a call to <code>MyProfiler.methodEntered()</code>.  
+    a call to <code>MyProfiler.methodEntered()</code>.
     Since the changes are purely additive, they do not modify application
     state or behavior.
     Because the inserted agent code is standard bytecodes, the VM can run at full speed,
-    optimizing not only the target program but also the instrumentation.  If the 
+    optimizing not only the target program but also the instrumentation.  If the
     instrumentation does not involve switching from bytecode execution, no expensive
     state transitions are needed.  The result is high performance events.
     This approach also provides complete control to the agent: instrumentation can be
@@ -792,14 +792,14 @@
     can be conditional.  Instrumentation can run entirely in Java programming language
     code or can call into the native agent.  Instrumentation can simply maintain
     counters or can statistically sample events.
-    <p/>  
+    <p/>
     Instrumentation can be inserted in one of three ways:
     <ul>
       <li>
 	Static Instrumentation: The class file is instrumented before it
 	is loaded into the VM - for example, by creating a duplicate directory of
 	<code>*.class</code> files which have been modified to add the instrumentation.
-	This method is extremely awkward and, in general, an agent cannot know 
+	This method is extremely awkward and, in general, an agent cannot know
 	the origin of the class files which will be loaded.
       </li>
       <li>
@@ -817,21 +817,21 @@
 	<functionlink id="RetransformClasses"/> function.
 	Classes can be modified multiple times and can be returned to their
 	original state.
-	The mechanism allows instrumentation which changes during the 
+	The mechanism allows instrumentation which changes during the
 	course of execution.
       </li>
     </ul>
-    <p/>  
+    <p/>
     The class modification functionality provided in this interface
     is intended to provide a mechanism for instrumentation
     (the <eventlink id="ClassFileLoadHook"/> event
     and the <functionlink id="RetransformClasses"/> function)
     and, during development, for fix-and-continue debugging
     (the <functionlink id="RedefineClasses"/> function).
-    <p/>  
-    Care must be taken to avoid perturbing dependencies, especially when 
+    <p/>
+    Care must be taken to avoid perturbing dependencies, especially when
     instrumenting core classes.  For example, an approach to getting notification
-    of every object allocation is to instrument the constructor on 
+    of every object allocation is to instrument the constructor on
     <code>Object</code>.  Assuming that the constructor is initially
     empty, the constructor could be changed to:
     <example>
@@ -839,15 +839,15 @@
         MyProfiler.allocationTracker(this);
       }
     </example>
-    However, if this change was made using the 
+    However, if this change was made using the
     <eventlink id="ClassFileLoadHook"/>
-    event then this might impact a typical VM as follows: 
+    event then this might impact a typical VM as follows:
     the first created object will call the constructor causing a class load of
     <code>MyProfiler</code>; which will then cause
     object creation, and since <code>MyProfiler</code> isn't loaded yet,
     infinite recursion; resulting in a stack overflow.  A refinement of this
     would be to delay invoking the tracking method until a safe time.  For
-    example, <code>trackAllocations</code> could be set in the 
+    example, <code>trackAllocations</code> could be set in the
     handler for the <code>VMInit</code> event.
     <example>
       static boolean trackAllocations = false;
@@ -881,17 +881,17 @@
   <intro id="mUTF" label="Modified UTF-8 String Encoding">
     <jvmti/> uses modified UTF-8 to encode character strings.
     This is the same encoding used by JNI.
-    Modified UTF-8 differs 
-    from standard UTF-8 in the representation of supplementary characters 
+    Modified UTF-8 differs
+    from standard UTF-8 in the representation of supplementary characters
     and of the null character. See the
-    <externallink id="docs/technotes/guides/jni/spec/types.html#modified_utf_8_strings">
+    <externallink id="jni/types.html#modified-utf-8-strings">
       Modified UTF-8 Strings</externallink>
     section of the JNI specification for details.
   </intro>
 
   <intro id="context" label="Specification Context">
     Since this interface provides access to the state of applications running in the
-    Java virtual machine; 
+    Java virtual machine;
     terminology refers to the Java platform and not the native
     platform (unless stated otherwise).  For example:
     <ul>
@@ -903,20 +903,20 @@
     </ul>
     <p/>
     Sun, Sun Microsystems, the Sun logo, Java, and JVM
-    are trademarks or registered trademarks of Oracle 
+    are trademarks or registered trademarks of Oracle
     and/or its affiliates, in the U.S. and other countries.
   </intro>
 
 
 <functionsection label="Functions">
   <intro id="jvmtiEnvAccess" label="Accessing Functions">
-    Native code accesses <jvmti/> features 
-    by calling <jvmti/> functions. 
+    Native code accesses <jvmti/> features
+    by calling <jvmti/> functions.
     Access to <jvmti/> functions is by use of an interface pointer
-    in the same manner as 
-    <externallink id="docs/technotes/guides/jni/spec/design.html">Java 
+    in the same manner as
+    <externallink id="jni/design.html">Java
       Native Interface (JNI) functions</externallink> are accessed.
-    The <jvmti/> interface pointer is called the 
+    The <jvmti/> interface pointer is called the
     <i>environment pointer</i>.
     <p/>
     An environment pointer is a pointer to an environment and has
@@ -924,8 +924,8 @@
     An environment has information about its <jvmti/> connection.
     The first value in the environment is a pointer to the function table.
     The function table is an array of pointers to <jvmti/> functions.
-    Every function pointer is at a predefined offset inside the 
-    array. 
+    Every function pointer is at a predefined offset inside the
+    array.
     <p/>
     When used from the C language:
     double indirection is used to access the functions;
@@ -945,7 +945,7 @@
 ...
 jvmtiError err = jvmti->GetLoadedClasses(&amp;class_count, &amp;classes);
     </example>
-    Unless otherwise stated, all examples and declarations in this 
+    Unless otherwise stated, all examples and declarations in this
     specification use the C language.
     <p/>
     A <jvmti/> environment can be obtained through the JNI Invocation API
@@ -955,24 +955,24 @@
 ...
 (*jvm)->GetEnv(jvm, &amp;jvmti, JVMTI_VERSION_1_0);
     </example>
-    Each call to <code>GetEnv</code> 
+    Each call to <code>GetEnv</code>
     creates a new <jvmti/> connection and thus
-    a new <jvmti/> environment. 
+    a new <jvmti/> environment.
     The <code>version</code> argument of <code>GetEnv</code> must be
     a <jvmti/> version.
     The returned environment may have a different version than the
     requested version but the returned environment must be compatible.
-    <code>GetEnv</code> will return <code>JNI_EVERSION</code> if a 
+    <code>GetEnv</code> will return <code>JNI_EVERSION</code> if a
     compatible version is not available, if <jvmti/> is not supported or
     <jvmti/> is not supported in the current VM configuration.
     Other interfaces may be added for creating <jvmti/> environments
     in specific contexts.
     Each environment has its own state (for example,
-    <functionlink id="SetEventNotificationMode">desired events</functionlink>, 
-    <functionlink id="SetEventCallbacks">event handling functions</functionlink>, and 
-    <functionlink id="AddCapabilities">capabilities</functionlink>). 
-    An environment is released with 
-    <functionlink id="DisposeEnvironment"></functionlink>. 
+    <functionlink id="SetEventNotificationMode">desired events</functionlink>,
+    <functionlink id="SetEventCallbacks">event handling functions</functionlink>, and
+    <functionlink id="AddCapabilities">capabilities</functionlink>).
+    An environment is released with
+    <functionlink id="DisposeEnvironment"></functionlink>.
     Thus, unlike JNI which has one environment per thread, <jvmti/> environments work
     across threads and are created dynamically.
   </intro>
@@ -980,12 +980,12 @@
   <intro id="functionReturn" label="Function Return Values">
     <jvmti/> functions always return an
     <internallink id="ErrorSection">error code</internallink> via the
-    <datalink id="jvmtiError"/> function return value. 
+    <datalink id="jvmtiError"/> function return value.
     Some functions can return additional
-    values through pointers provided by the calling function. 
+    values through pointers provided by the calling function.
     In some cases, <jvmti/> functions allocate memory that your program must
     explicitly deallocate. This is indicated in the individual <jvmti/>
-    function descriptions.  Empty lists, arrays, sequences, etc are 
+    function descriptions.  Empty lists, arrays, sequences, etc are
     returned as <code>NULL</code>.
     <p/>
     In the event that the <jvmti/> function encounters
@@ -996,26 +996,26 @@
   </intro>
 
 <intro id="refs" label="Managing JNI Object References">
-    <jvmti/> functions identify objects with JNI references 
+    <jvmti/> functions identify objects with JNI references
     (<datalink id="jobject"/> and <datalink id="jclass"/>)
     and their derivatives
     (<datalink id="jthread"/> and <datalink id="jthreadGroup"/>).
-    References passed to 
-    <jvmti/> functions can be either global or local, but they must be 
-    strong references. All references returned by <jvmti/> functions are 
-    local references--these local references are created 
+    References passed to
+    <jvmti/> functions can be either global or local, but they must be
+    strong references. All references returned by <jvmti/> functions are
+    local references--these local references are created
     during the <jvmti/> call.
-    Local references are a resource that must be managed (see the 
-    <externallink id="docs/technotes/guides/jni/spec/functions.html#local_references">
-      JNI Documentation</externallink>).  
+    Local references are a resource that must be managed (see the
+    <externallink id="jni/functions.html#local-references">
+      JNI Documentation</externallink>).
     When threads return from native code all local references
     are freed.  Note that some threads, including typical
     agent threads, will never return from native code.
-    A thread is ensured the ability to create sixteen local 
+    A thread is ensured the ability to create sixteen local
     references without the need for any explicit management.
     For threads executing a limited number of <jvmti/> calls before
     returning from native code
-    (for example, threads processing events), 
+    (for example, threads processing events),
     it may be determined that no explicit management
     is needed.
     However, long running agent threads will need explicit
@@ -1023,7 +1023,7 @@
     <code>PushLocalFrame</code> and <code>PopLocalFrame</code>.
     Conversely, to preserve references beyond the
     return from native code, they must be converted to global references.
-    These rules do not apply to <datalink id="jmethodID"/> and <datalink id="jfieldID"/> 
+    These rules do not apply to <datalink id="jmethodID"/> and <datalink id="jfieldID"/>
     as they are not <datalink id="jobject"/>s.
 </intro>
 
@@ -1035,21 +1035,21 @@
     </intro>
 
     <intro id="functionsExceptions" label="Exceptions and Functions">
-      <jvmti/> functions never throw exceptions; error conditions are 
-      communicated via the 
+      <jvmti/> functions never throw exceptions; error conditions are
+      communicated via the
       <internallink id="functionReturn">function return value</internallink>.
-      Any existing exception state is preserved across a call to a 
+      Any existing exception state is preserved across a call to a
       <jvmti/> function.
       See the
-      <externallink 
-        id="docs/technotes/guides/jni/spec/design.html#java_exceptions"
+      <externallink
+        id="jni/design.html#java-exceptions"
              >Java Exceptions</externallink>
       section of the JNI specification for information on handling exceptions.
     </intro>
 
   <category id="memory" label="Memory Management">
     <intro>
-      These functions provide for the allocation and deallocation of 
+      These functions provide for the allocation and deallocation of
       memory used by <jvmti/> functionality and can be used to provide
       working memory for agents.
       Memory managed by <jvmti/> is not compatible with other memory
@@ -1059,7 +1059,7 @@
     <function id="Allocate" jkernel="yes" phase="any" callbacksafe="safe" impl="notrace" num="46">
       <synopsis>Allocate</synopsis>
       <description>
-	Allocate an area of memory through the <jvmti/> allocator. 
+	Allocate an area of memory through the <jvmti/> allocator.
         The allocated
 	memory should be freed with <functionlink id="Deallocate"></functionlink>.
       </description>
@@ -1097,9 +1097,9 @@
     <function id="Deallocate" jkernel="yes" phase="any" callbacksafe="safe" impl="notrace" num="47">
       <synopsis>Deallocate</synopsis>
       <description>
-	Deallocate <code>mem</code>  using the <jvmti/> allocator. 
+	Deallocate <code>mem</code>  using the <jvmti/> allocator.
         This function should
-	be used to deallocate any memory allocated and returned 
+	be used to deallocate any memory allocated and returned
         by a <jvmti/> function
 	(including memory allocated with <functionlink id="Allocate"></functionlink>).
         All allocated memory must be deallocated
@@ -1143,60 +1143,60 @@
                     <li><i>Why not alive?</i>
                       <ul>
                         <li>New.</li>
-                        <li>Terminated (<datalink 
+                        <li>Terminated (<datalink
                             id="JVMTI_THREAD_STATE_TERMINATED"><code>JVMTI_THREAD_STATE_TERMINATED</code></datalink>)</li>
                       </ul>
                     </li>
                   </ul>
                 </li>
-                <li>Alive (<datalink 
+                <li>Alive (<datalink
                     id="JVMTI_THREAD_STATE_ALIVE"><code>JVMTI_THREAD_STATE_ALIVE</code></datalink>)
                   <ul type="circle">
                     <li><i>Suspended?</i>
                       <ul>
-                        <li>Suspended (<datalink 
+                        <li>Suspended (<datalink
                             id="JVMTI_THREAD_STATE_SUSPENDED"><code>JVMTI_THREAD_STATE_SUSPENDED</code></datalink>)</li>
                         <li>Not suspended</li>
                       </ul>
                     </li>
                     <li><i>Interrupted?</i>
                       <ul>
-                        <li>Interrupted (<datalink 
+                        <li>Interrupted (<datalink
                             id="JVMTI_THREAD_STATE_INTERRUPTED"><code>JVMTI_THREAD_STATE_INTERRUPTED</code></datalink>)</li>
                         <li>Not interrupted.</li>
                       </ul>
                     </li>
                     <li><i>In native?</i>
                       <ul>
-                        <li>In native code (<datalink 
+                        <li>In native code (<datalink
                             id="JVMTI_THREAD_STATE_IN_NATIVE"><code>JVMTI_THREAD_STATE_IN_NATIVE</code></datalink>)</li>
                         <li>In Java programming language code</li>
                       </ul>
                     </li>
                     <li><i>What alive state?</i>
                       <ul>
-                        <li>Runnable (<datalink 
+                        <li>Runnable (<datalink
                             id="JVMTI_THREAD_STATE_RUNNABLE"><code>JVMTI_THREAD_STATE_RUNNABLE</code></datalink>)</li>
-                        <li>Blocked (<datalink 
+                        <li>Blocked (<datalink
                             id="JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER"><code>JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER</code></datalink>)</li>
-                        <li>Waiting (<datalink 
+                        <li>Waiting (<datalink
                             id="JVMTI_THREAD_STATE_WAITING"><code>JVMTI_THREAD_STATE_WAITING</code></datalink>)
                           <ul type="circle">
                             <li><i>Timed wait?</i>
                               <ul>
-                                <li>Indefinite (<datalink 
+                                <li>Indefinite (<datalink
                                     id="JVMTI_THREAD_STATE_WAITING_INDEFINITELY"><code>JVMTI_THREAD_STATE_WAITING_INDEFINITELY</code></datalink></li>
-                                <li>Timed (<datalink 
+                                <li>Timed (<datalink
                                     id="JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT"><code>JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT</code></datalink>)</li>
                               </ul>
                             </li>
                             <li><i>Why waiting?</i>
                               <ul>
-                                <li>Object.wait (<datalink 
+                                <li>Object.wait (<datalink
                                     id="JVMTI_THREAD_STATE_IN_OBJECT_WAIT"><code>JVMTI_THREAD_STATE_IN_OBJECT_WAIT</code></datalink>)</li>
-                                <li>LockSupport.park (<datalink 
+                                <li>LockSupport.park (<datalink
                                     id="JVMTI_THREAD_STATE_PARKED"><code>JVMTI_THREAD_STATE_PARKED</code></datalink>)</li>
-                                <li>Sleeping (<datalink 
+                                <li>Sleeping (<datalink
                                     id="JVMTI_THREAD_STATE_SLEEPING"><code>JVMTI_THREAD_STATE_SLEEPING</code></datalink>)</li>
                               </ul>
                             </li>
@@ -1210,7 +1210,7 @@
             </li>
           </ul>
         <p/>
-	The answers are represented by the following bit vector. 
+	The answers are represented by the following bit vector.
 	<constants id="jvmtiThreadState" label="Thread State Flags" kind="bits">
 	  <constant id="JVMTI_THREAD_STATE_ALIVE" num="0x0001">
 	    Thread is alive. Zero if thread is new (not started) or terminated.
@@ -1223,7 +1223,7 @@
 	  </constant>
 	  <constant id="JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER" num="0x0400">
 	    Thread is waiting to enter a synchronization block/method or,
-            after an <code>Object.wait()</code>, waiting to re-enter a 
+            after an <code>Object.wait()</code>, waiting to re-enter a
             synchronization block/method.
 	  </constant>
 	  <constant id="JVMTI_THREAD_STATE_WAITING" num="0x0080">
@@ -1250,8 +1250,8 @@
 	  <constant id="JVMTI_THREAD_STATE_SUSPENDED" num="0x100000">
 	    Thread suspended.
 	    <code>java.lang.Thread.suspend()</code>
-	    or a <jvmti/> suspend function 
-            (such as <functionlink id="SuspendThread"></functionlink>) 
+	    or a <jvmti/> suspend function
+            (such as <functionlink id="SuspendThread"></functionlink>)
             has been called on the thread. If this bit
 	    is set, the other bits refer to the thread state before suspension.
 	  </constant>
@@ -1313,7 +1313,7 @@
         <b>Rules</b>
         <p/>
         There can be no more than one answer to a question, although there can be no
-        answer (because the answer is unknown, does not apply, or none of the answers is 
+        answer (because the answer is unknown, does not apply, or none of the answers is
         correct).  An answer is set only when the enclosing answers match.
         That is, no more than one of
           <ul type="circle">
@@ -1322,32 +1322,32 @@
               <li><code>JVMTI_THREAD_STATE_WAITING</code></li>
           </ul>
         can be set (a <tm>J2SE</tm> compliant implementation will always set
-        one of these if <code>JVMTI_THREAD_STATE_ALIVE</code> is set). 
-        And if any of these are set, the enclosing answer 
-        <code>JVMTI_THREAD_STATE_ALIVE</code> is set. 
+        one of these if <code>JVMTI_THREAD_STATE_ALIVE</code> is set).
+        And if any of these are set, the enclosing answer
+        <code>JVMTI_THREAD_STATE_ALIVE</code> is set.
         No more than one of
           <ul type="circle">
               <li><code>JVMTI_THREAD_STATE_WAITING_INDEFINITELY</code></li>
               <li><code>JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT</code></li>
           </ul>
         can be set (a <tm>J2SE</tm> compliant implementation will always set
-        one of these if <code>JVMTI_THREAD_STATE_WAITING</code> is set). 
-        And if either is set, the enclosing answers 
-        <code>JVMTI_THREAD_STATE_ALIVE</code> and 
-        <code>JVMTI_THREAD_STATE_WAITING</code> are set. 
+        one of these if <code>JVMTI_THREAD_STATE_WAITING</code> is set).
+        And if either is set, the enclosing answers
+        <code>JVMTI_THREAD_STATE_ALIVE</code> and
+        <code>JVMTI_THREAD_STATE_WAITING</code> are set.
         No more than one of
           <ul type="circle">
               <li><code>JVMTI_THREAD_STATE_IN_OBJECT_WAIT</code></li>
               <li><code>JVMTI_THREAD_STATE_PARKED</code></li>
               <li><code>JVMTI_THREAD_STATE_SLEEPING</code></li>
           </ul>
-        can be set. And if any of these is set, the enclosing answers 
-        <code>JVMTI_THREAD_STATE_ALIVE</code> and 
-        <code>JVMTI_THREAD_STATE_WAITING</code> are set. 
+        can be set. And if any of these is set, the enclosing answers
+        <code>JVMTI_THREAD_STATE_ALIVE</code> and
+        <code>JVMTI_THREAD_STATE_WAITING</code> are set.
         Also, if <code>JVMTI_THREAD_STATE_SLEEPING</code> is set,
         then <code>JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT</code> is set.
-        If a state <i>A</i> is implemented using the mechanism of 
-        state <i>B</i> then it is state <i>A</i> which 
+        If a state <i>A</i> is implemented using the mechanism of
+        state <i>B</i> then it is state <i>A</i> which
         is returned by this function.
         For example, if <code>Thread.sleep(long)</code>
         is implemented using <code>Object.wait(long)</code>
@@ -1364,16 +1364,16 @@
         <p/>
         And finally,
         <code>JVMTI_THREAD_STATE_TERMINATED</code> cannot be set unless
-        <code>JVMTI_THREAD_STATE_ALIVE</code> is not set.  
+        <code>JVMTI_THREAD_STATE_ALIVE</code> is not set.
         <p/>
         The thread state representation is designed for extension in future versions
         of the specification; thread state values should be used accordingly, that is
-        they should not be used as ordinals.  
+        they should not be used as ordinals.
         Most queries can be made by testing a single bit, if use in a switch statement is desired,
         the state bits should be masked with the interesting bits.
-        All bits not defined above are reserved for future use.  
+        All bits not defined above are reserved for future use.
         A VM, compliant to the current specification, must set reserved bits to zero.
-        An agent should ignore reserved bits -- 
+        An agent should ignore reserved bits --
         they should not be assumed to be zero and thus should not be included in comparisons.
         <p/>
         <b>Examples</b>
@@ -1390,8 +1390,8 @@
         </example>
         The state of a thread at a <code>Object.wait(3000)</code> would be:
         <example>
-            JVMTI_THREAD_STATE_ALIVE + JVMTI_THREAD_STATE_WAITING + 
-                JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT + 
+            JVMTI_THREAD_STATE_ALIVE + JVMTI_THREAD_STATE_WAITING +
+                JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +
                 JVMTI_THREAD_STATE_MONITOR_WAITING
         </example>
         The state of a thread suspended while runnable would be:
@@ -1423,7 +1423,7 @@
         </example>
         To distinguish timed from untimed <code>Object.wait</code>:
         <example>
-	   if (state &amp; JVMTI_THREAD_STATE_IN_OBJECT_WAIT)  {  
+	   if (state &amp; JVMTI_THREAD_STATE_IN_OBJECT_WAIT)  {
              if (state &amp; JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT)  {
                printf("in Object.wait(long timeout)\n");
              } else {
@@ -1436,7 +1436,7 @@
         <p/>
         The thread state represented by <code>java.lang.Thread.State</code>
         returned from <code>java.lang.Thread.getState()</code> is a subset of the
-        information returned from this function.  
+        information returned from this function.
         The corresponding <code>java.lang.Thread.State</code> can be determined
         by using the provided conversion masks.
         For example, this returns the name of the <code>java.lang.Thread.State</code> thread state:
@@ -1466,7 +1466,7 @@
 	<param id="thread">
 	  <jthread null="current" started="maybe" impl="noconvert"/>
 	    <description>
-	      The thread to query. 
+	      The thread to query.
 	    </description>
 	</param>
 	<param id="thread_state_ptr">
@@ -1484,15 +1484,15 @@
     <function id="GetCurrentThread" phase="start" num="18" since="1.1">
       <synopsis>Get Current Thread</synopsis>
       <description>
-        Get the current thread.  
+        Get the current thread.
         The current thread is the Java programming language thread which has called the function.
         The function may return <code>NULL</code> in the start phase if the
         <internallink id="jvmtiCapabilities.can_generate_early_vmstart">
         <code>can_generate_early_vmstart</code></internallink> capability is enabled
         and the <code>java.lang.Thread</code> class has not been initialized yet.
         <p/>
-        Note that most <jvmti/> functions that take a thread 
-        as an argument will accept <code>NULL</code> to mean 
+        Note that most <jvmti/> functions that take a thread
+        as an argument will accept <code>NULL</code> to mean
         the current thread.
       </description>
       <origin>new</origin>
@@ -1516,12 +1516,12 @@
         Get all live threads.
         The threads are Java programming language threads;
         that is, threads that are attached to the VM.
-        A thread is live if <code>java.lang.Thread.isAlive()</code> 
+        A thread is live if <code>java.lang.Thread.isAlive()</code>
         would return <code>true</code>, that is, the thread has
         been started and has not yet died.
         The universe of threads is determined by the context of the <jvmti/>
         environment, which typically is all threads attached to the VM.
-        Note that this includes <jvmti/> agent threads 
+        Note that this includes <jvmti/> agent threads
         (see <functionlink id="RunAgentThread"/>).
       </description>
       <origin>jvmdi</origin>
@@ -1549,8 +1549,8 @@
     <function id="SuspendThread" num="5">
       <synopsis>Suspend Thread</synopsis>
       <description>
-        Suspend the specified thread. If the calling thread is specified, 
-        this function will not return until some other thread calls 
+        Suspend the specified thread. If the calling thread is specified,
+        this function will not return until some other thread calls
         <functionlink id="ResumeThread"></functionlink>.
         If the thread is currently suspended, this function
         does nothing and returns an error.
@@ -1563,7 +1563,7 @@
         <param id="thread">
 	  <jthread null="current"/>
 	    <description>
-	      The thread to suspend. 
+	      The thread to suspend.
 	    </description>
 	</param>
       </parameters>
@@ -1592,22 +1592,22 @@
         The threads are Java programming language threads;
         native threads which are not attached to the VM are not
         Java programming language threads.
-        A thread is live if <code>java.lang.Thread.isAlive()</code> 
+        A thread is live if <code>java.lang.Thread.isAlive()</code>
         would return <code>true</code>, that is, the thread has
         been started and has not yet died.
-        The universe of threads is determined 
+        The universe of threads is determined
         by the context of the <jvmti/>
         environment, which, typically, is all threads attached to the VM,
-        except critical VM internal threads and <jvmti/> agent threads 
+        except critical VM internal threads and <jvmti/> agent threads
 	(see <functionlink id="RunAgentThread"/>).
         <p/>
-        If the calling thread is specified, 
+        If the calling thread is specified,
         all other threads are suspended first then the caller thread is suspended -
-        this function will not return until some other thread calls 
+        this function will not return until some other thread calls
         <functionlink id="ResumeThread"></functionlink>.
         <p/>
         The list of actually
-        suspended threads is returned in 
+        suspended threads is returned in
         <paramlink id="suspended_list_ptr"></paramlink>.
         Suspension is as defined in <functionlink id="SuspendThread"></functionlink>.
         <functionlink id="ResumeThreadList"></functionlink>
@@ -1662,13 +1662,13 @@
     <function id="SuspendThreadList" num="92">
       <synopsis>Suspend Thread List</synopsis>
       <description>
-        Suspend the <paramlink id="request_count"></paramlink> 
-        threads specified in the 
-        <paramlink id="request_list"></paramlink> array. 
+        Suspend the <paramlink id="request_count"></paramlink>
+        threads specified in the
+        <paramlink id="request_list"></paramlink> array.
         Threads may be resumed with
         <functionlink id="ResumeThreadList"></functionlink> or
         <functionlink id="ResumeThread"></functionlink>.
-        If the calling thread is specified in the 
+        If the calling thread is specified in the
         <paramlink id="request_list"></paramlink> array, this function will
         not return until some other thread resumes it.
         Errors encountered in the suspension of a thread
@@ -1696,11 +1696,11 @@
         <param id="results">
 	  <outbuf incount="request_count"><enum>jvmtiError</enum></outbuf>
 	  <description>
-	    An agent supplied array of 
+	    An agent supplied array of
 	    <paramlink id="request_count"></paramlink> elements.
 	    On return, filled with the error code for
 	    the suspend of the corresponding thread.
-	    The error code will be 
+	    The error code will be
 	    <errorlink id="JVMTI_ERROR_NONE"></errorlink>
 	    if the thread was suspended by this call.
 	    Possible error codes are those specified
@@ -1715,12 +1715,12 @@
     <function id="ResumeThread" num="6">
       <synopsis>Resume Thread</synopsis>
       <description>
-        Resume a suspended thread. 
+        Resume a suspended thread.
         Any threads currently suspended through
         a <jvmti/> suspend function (eg.
-        <functionlink id="SuspendThread"></functionlink>) 
+        <functionlink id="SuspendThread"></functionlink>)
         or <code>java.lang.Thread.suspend()</code>
-        will resume execution;  
+        will resume execution;
 	all other threads are unaffected.
       </description>
       <origin>jvmdi</origin>
@@ -1740,7 +1740,7 @@
           Thread was not suspended.
         </error>
         <error id="JVMTI_ERROR_INVALID_TYPESTATE">
-          The state of the thread has been modified, and is now inconsistent. 
+          The state of the thread has been modified, and is now inconsistent.
         </error>
       </errors>
     </function>
@@ -1748,12 +1748,12 @@
     <function id="ResumeThreadList" num="93">
       <synopsis>Resume Thread List</synopsis>
       <description>
-        Resume the <paramlink id="request_count"></paramlink> 
-        threads specified in the 
-        <paramlink id="request_list"></paramlink> array. 
+        Resume the <paramlink id="request_count"></paramlink>
+        threads specified in the
+        <paramlink id="request_list"></paramlink> array.
         Any thread suspended through
         a <jvmti/> suspend function (eg.
-        <functionlink id="SuspendThreadList"></functionlink>) 
+        <functionlink id="SuspendThreadList"></functionlink>)
         or <code>java.lang.Thread.suspend()</code>
         will resume execution.
       </description>
@@ -1777,11 +1777,11 @@
         <param id="results">
 	  <outbuf incount="request_count"><enum>jvmtiError</enum></outbuf>
 	  <description>
-	    An agent supplied array of 
+	    An agent supplied array of
 	    <paramlink id="request_count"></paramlink> elements.
 	    On return, filled with the error code for
 	    the resume of the corresponding thread.
-	    The error code will be 
+	    The error code will be
 	    <errorlink id="JVMTI_ERROR_NONE"></errorlink>
 	    if the thread was suspended by this call.
 	    Possible error codes are those specified
@@ -1796,9 +1796,9 @@
     <function id="StopThread" num="7">
       <synopsis>Stop Thread</synopsis>
       <description>
-	Send the specified asynchronous exception to the specified thread 
+	Send the specified asynchronous exception to the specified thread
 	(similar to <code>java.lang.Thread.stop</code>).
-	Normally, this function is used to kill the specified thread with an 
+	Normally, this function is used to kill the specified thread with an
 	instance of the exception <code>ThreadDeath</code>.
       </description>
       <origin>jvmdi</origin>
@@ -1883,7 +1883,7 @@
 	</field>
       </typedef>
       <description>
-	Get thread information. The fields of the <datalink id="jvmtiThreadInfo"/> structure 
+	Get thread information. The fields of the <datalink id="jvmtiThreadInfo"/> structure
 	are filled in with details of the specified thread.
       </description>
       <origin>jvmdi</origin>
@@ -1910,8 +1910,8 @@
     <function id="GetOwnedMonitorInfo" num="10">
       <synopsis>Get Owned Monitor Info</synopsis>
       <description>
-	Get information about the monitors owned by the 
-	specified thread. 
+	Get information about the monitors owned by the
+	specified thread.
       </description>
       <origin>jvmdiClone</origin>
       <capabilities>
@@ -1943,7 +1943,7 @@
 
     <function id="GetOwnedMonitorStackDepthInfo" num="153" since="1.1">
       <synopsis>Get Owned Monitor Stack Depth Info</synopsis>
-      <typedef id="jvmtiMonitorStackDepthInfo" 
+      <typedef id="jvmtiMonitorStackDepthInfo"
                label="Monitor stack depth information structure">
         <field id="monitor">
 	  <jobject/>
@@ -1954,18 +1954,18 @@
         <field id="stack_depth">
 	  <jint/>
 	  <description>
-	    The stack depth.  Corresponds to the stack depth used in the 
+	    The stack depth.  Corresponds to the stack depth used in the
             <internallink id="stack">Stack Frame functions</internallink>.
             That is, zero is the current frame, one is the frame which
-            called the current frame. And it is negative one if the 
-	    implementation cannot determine the stack depth (e.g., for 
+            called the current frame. And it is negative one if the
+	    implementation cannot determine the stack depth (e.g., for
 	    monitors acquired by JNI <code>MonitorEnter</code>).
 	  </description>
 	</field>
       </typedef>
       <description>
-	Get information about the monitors owned by the 
-	specified thread and the depth of the stack frame which locked them. 
+	Get information about the monitors owned by the
+	specified thread and the depth of the stack frame which locked them.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -2000,7 +2000,7 @@
     <function id="GetCurrentContendedMonitor" num="11">
       <synopsis>Get Current Contended Monitor</synopsis>
       <description>
-	Get the object, if any, whose monitor the specified thread is waiting to 
+	Get the object, if any, whose monitor the specified thread is waiting to
 	enter or waiting to regain through <code>java.lang.Object.wait</code>.
       </description>
       <origin>jvmdi</origin>
@@ -2057,7 +2057,7 @@
               <void/>
             </outptr>
               <description>
-                The <code>arg</code> parameter passed to 
+                The <code>arg</code> parameter passed to
                 <functionlink id="RunAgentThread"></functionlink>.
               </description>
           </param>
@@ -2071,13 +2071,13 @@
 	The parameter <paramlink id="arg"></paramlink> is forwarded on to the
 	<functionlink id="jvmtiStartFunction">start function</functionlink>
 	(specified with <paramlink id="proc"></paramlink>) as its single argument.
-	This function allows the creation of agent threads 
-	for handling communication with another process or for handling events 
-	without the need to load a special subclass of <code>java.lang.Thread</code> or 
-	implementer of <code>java.lang.Runnable</code>. 
+	This function allows the creation of agent threads
+	for handling communication with another process or for handling events
+	without the need to load a special subclass of <code>java.lang.Thread</code> or
+	implementer of <code>java.lang.Runnable</code>.
 	Instead, the created thread can run entirely in native code.
 	However, the created thread does require a newly created instance
-	of <code>java.lang.Thread</code> (referenced by the argument <code>thread</code>) to 
+	of <code>java.lang.Thread</code> (referenced by the argument <code>thread</code>) to
 	which it will be associated.
 	The thread object can be created with JNI calls.
 	<p/>
@@ -2105,14 +2105,14 @@
         added to the thread group and the thread is not seen on queries of the thread
         group at either the Java programming language or <jvmti/> levels.
 	<p/>
-        The thread is not visible to Java programming language queries but is 
-        included in <jvmti/> queries (for example, 
+        The thread is not visible to Java programming language queries but is
+        included in <jvmti/> queries (for example,
         <functionlink id="GetAllThreads"/> and
         <functionlink id="GetAllStackTraces"/>).
 	<p/>
 	Upon execution of <code>proc</code>, the new thread will be attached to the
-	VM -- see the JNI documentation on 
-	<externallink id="docs/technotes/guides/jni/spec/invocation.html#attaching_to_the_vm"
+	VM -- see the JNI documentation on
+	<externallink id="jni/invocation.html#attaching-to-the-vm"
 		      >Attaching to the VM</externallink>.
       </description>
       <origin>jvmdiClone</origin>
@@ -2152,8 +2152,8 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_INVALID_PRIORITY"> 
-            <paramlink id="priority"/> is less than 
+	<error id="JVMTI_ERROR_INVALID_PRIORITY">
+            <paramlink id="priority"/> is less than
             <datalink id="JVMTI_THREAD_MIN_PRIORITY"/>
               or greater than
             <datalink id="JVMTI_THREAD_MAX_PRIORITY"/>
@@ -2169,7 +2169,7 @@
         This value is <code>NULL</code> unless set with this function.
 	Agents can allocate memory in which they store thread specific
         information. By setting thread-local storage it can then be
-	accessed with 
+	accessed with
 	<functionlink id="GetThreadLocalStorage"></functionlink>.
 	<p/>
         This function is called by the agent to set the value of the <jvmti/>
@@ -2188,10 +2188,10 @@
 	    </description>
 	</param>
         <param id="data">
-	  <inbuf> 
-	    <void/> 
-	    <nullok>value is set to <code>NULL</code></nullok> 
-	  </inbuf> 
+	  <inbuf>
+	    <void/>
+	    <nullok>value is set to <code>NULL</code></nullok>
+	  </inbuf>
 	  <description>
 	    The value to be entered into the thread-local storage.
 	  </description>
@@ -2205,7 +2205,7 @@
       <synopsis>Get Thread Local Storage</synopsis>
       <description>
         Called by the agent to get the value of the <jvmti/> thread-local
-        storage. 
+        storage.
       </description>
       <origin>jvmpi</origin>
       <capabilities>
@@ -2220,10 +2220,10 @@
         <param id="data_ptr">
 	  <agentbuf><void/></agentbuf>
 	  <description>
-	    Pointer through which the value of the thread local 
+	    Pointer through which the value of the thread local
 	    storage is returned.
 	    If thread-local storage has not been set with
-	    <functionlink id="SetThreadLocalStorage"></functionlink> the returned 
+	    <functionlink id="SetThreadLocalStorage"></functionlink> the returned
 	    pointer is <code>NULL</code>.
 	  </description>
 	</param>
@@ -2294,8 +2294,8 @@
 	</field>
       </typedef>
       <description>
-	Get information about the thread group. The fields of the 
-	<functionlink id="jvmtiThreadGroupInfo"></functionlink> structure 
+	Get information about the thread group. The fields of the
+	<functionlink id="jvmtiThreadGroupInfo"></functionlink> structure
 	are filled in with details of the specified thread group.
       </description>
       <origin>jvmdi</origin>
@@ -2312,7 +2312,7 @@
 	  <outptr><struct>jvmtiThreadGroupInfo</struct></outptr>
 	  <description>
 	    On return, filled with information describing the specified
-	    thread group. 
+	    thread group.
 	  </description>
 	</param>
       </parameters>
@@ -2373,15 +2373,15 @@
         <p/>
         Stack frames are as described in
         <vmspec chapter="3.6"/>,
-        That is, they correspond to method 
-        invocations (including native methods) but do not correspond to platform native or 
+        That is, they correspond to method
+        invocations (including native methods) but do not correspond to platform native or
         VM internal frames.
         <p/>
         A <jvmti/> implementation may use method invocations to launch a thread and
         the corresponding frames may be included in the stack as presented by these functions --
         that is, there may be frames shown
         deeper than <code>main()</code> and <code>run()</code>.
-        However this presentation must be consistent across all <jvmti/> functionality which 
+        However this presentation must be consistent across all <jvmti/> functionality which
         uses stack frames or stack depth.
     </intro>
 
@@ -2425,16 +2425,16 @@
 	    <struct>jvmtiFrameInfo</struct>
 	  </outbuf>
 	    <description>
-	      On return, this agent allocated buffer is filled 
-	      with stack frame information.  
+	      On return, this agent allocated buffer is filled
+	      with stack frame information.
 	    </description>
 	</field>
         <field id="frame_count">
 	  <jint/>
 	  <description>
-	    On return, the number of records filled into 
+	    On return, the number of records filled into
             <code>frame_buffer</code>.
-            This will be 
+            This will be
             min(<code>max_frame_count</code>, <i>stackDepth</i>).
 	  </description>
 	</field>
@@ -2445,7 +2445,7 @@
       <description>
         Get information about the stack of a thread.
         If <paramlink id="max_frame_count"></paramlink> is less than the depth of the stack,
-        the <paramlink id="max_frame_count"></paramlink> topmost frames are returned, 
+        the <paramlink id="max_frame_count"></paramlink> topmost frames are returned,
         otherwise the entire stack is returned.
         The topmost frames, those most recently invoked, are at the beginning of the returned buffer.
         <p/>
@@ -2457,23 +2457,23 @@
 jint count;
 jvmtiError err;
 
-err = (*jvmti)-&gt;GetStackTrace(jvmti, aThread, 0, 5, 
+err = (*jvmti)-&gt;GetStackTrace(jvmti, aThread, 0, 5,
                                frames, &amp;count);
 if (err == JVMTI_ERROR_NONE &amp;&amp; count &gt;= 1) {
    char *methodName;
-   err = (*jvmti)-&gt;GetMethodName(jvmti, frames[0].method, 
+   err = (*jvmti)-&gt;GetMethodName(jvmti, frames[0].method,
                        &amp;methodName, NULL, NULL);
    if (err == JVMTI_ERROR_NONE) {
       printf("Executing method: %s", methodName);
    }
 }
         </example>
-        <todo> 
+        <todo>
           check example code.
         </todo>
         <p/>
         The <paramlink id="thread"></paramlink> need not be suspended
-        to call this function.  
+        to call this function.
         <p/>
         The <functionlink id="GetLineNumberTable"></functionlink>
         function can be used to map locations to line numbers. Note that
@@ -2492,15 +2492,15 @@
         <param id="start_depth">
 	  <jint/>
 	  <description>
-	    Begin retrieving frames at this depth.  
-            If non-negative, count from the current frame, 
-            the first frame retrieved is at depth <code>start_depth</code>.  
+	    Begin retrieving frames at this depth.
+            If non-negative, count from the current frame,
+            the first frame retrieved is at depth <code>start_depth</code>.
             For example, if zero, start from the current frame; if one, start from the
             caller of the current frame; if two, start from the caller of the
             caller of the current frame; and so on.
             If negative, count from below the oldest frame,
-            the first frame retrieved is at depth <i>stackDepth</i><code> + start_depth</code>,  
-            where <i>stackDepth</i> is the count of frames on the stack.  
+            the first frame retrieved is at depth <i>stackDepth</i><code> + start_depth</code>,
+            where <i>stackDepth</i> is the count of frames on the stack.
             For example, if negative one, only the oldest frame is retrieved;
             if negative two, start from the frame called by the oldest frame.
 	  </description>
@@ -2516,17 +2516,17 @@
 	    <struct>jvmtiFrameInfo</struct>
 	  </outbuf>
 	    <description>
-	      On return, this agent allocated buffer is filled 
-	      with stack frame information.  
+	      On return, this agent allocated buffer is filled
+	      with stack frame information.
 	    </description>
 	</param>
         <param id="count_ptr">
 	  <outptr><jint/></outptr>
 	  <description>
 	    On return, points to the number of records filled in.
-            For non-negative <code>start_depth</code>, this will be 
+            For non-negative <code>start_depth</code>, this will be
             min(<code>max_frame_count</code>, <i>stackDepth</i><code> - start_depth</code>).
-            For negative <code>start_depth</code>, this will be 
+            For negative <code>start_depth</code>, this will be
             min(<code>max_frame_count</code>, <code>-start_depth</code>).
 	  </description>
 	</param>
@@ -2546,23 +2546,23 @@
         Get information about the stacks of all live threads
         (including <internallink id="RunAgentThread">agent threads</internallink>).
         If <paramlink id="max_frame_count"/> is less than the depth of a stack,
-        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread, 
+        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread,
         otherwise the entire stack is returned.
         The topmost frames, those most recently invoked, are at the beginning of the returned buffer.
         <p/>
-        All stacks are collected simultaneously, that is, no changes will occur to the 
+        All stacks are collected simultaneously, that is, no changes will occur to the
         thread state or stacks between the sampling of one thread and the next.
         The threads need not be suspended.
-        
+
         <example>
 jvmtiStackInfo *stack_info;
 jint thread_count;
 int ti;
 jvmtiError err;
 
-err = (*jvmti)-&gt;GetAllStackTraces(jvmti, MAX_FRAMES, &amp;stack_info, &amp;thread_count); 
+err = (*jvmti)-&gt;GetAllStackTraces(jvmti, MAX_FRAMES, &amp;stack_info, &amp;thread_count);
 if (err != JVMTI_ERROR_NONE) {
-   ...   
+   ...
 }
 for (ti = 0; ti &lt; thread_count; ++ti) {
    jvmtiStackInfo *infop = &amp;stack_info[ti];
@@ -2577,9 +2577,9 @@
    }
 }
 /* this one Deallocate call frees all data allocated by GetAllStackTraces */
-err = (*jvmti)-&gt;Deallocate(jvmti, stack_info); 
+err = (*jvmti)-&gt;Deallocate(jvmti, stack_info);
         </example>
-        <todo> 
+        <todo>
           check example code.
         </todo>
 
@@ -2599,12 +2599,12 @@
 	    <struct>jvmtiStackInfo</struct>
 	  </allocbuf>
 	    <description>
-	      On return, this buffer is filled 
-	      with stack information for each thread.  
-              The number of <datalink id="jvmtiStackInfo"/> records is determined 
+	      On return, this buffer is filled
+	      with stack information for each thread.
+              The number of <datalink id="jvmtiStackInfo"/> records is determined
               by <paramlink id="thread_count_ptr"/>.
               <p/>
-              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/> 
+              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/>
               buffers pointed to by <datalink id="jvmtiStackInfo.frame_buffer"/>.
               These buffers must not be separately deallocated.
 	    </description>
@@ -2625,11 +2625,11 @@
       <description>
         Get information about the stacks of the supplied threads.
         If <paramlink id="max_frame_count"/> is less than the depth of a stack,
-        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread, 
+        the <paramlink id="max_frame_count"/> topmost frames are returned for that thread,
         otherwise the entire stack is returned.
         The topmost frames, those most recently invoked, are at the beginning of the returned buffer.
         <p/>
-        All stacks are collected simultaneously, that is, no changes will occur to the 
+        All stacks are collected simultaneously, that is, no changes will occur to the
         thread state or stacks between the sampling one thread and the next.
         The threads need not be suspended.
         <p/>
@@ -2667,12 +2667,12 @@
 	    <struct>jvmtiStackInfo</struct>
 	  </allocbuf>
 	    <description>
-	      On return, this buffer is filled 
-	      with stack information for each thread.  
-              The number of <datalink id="jvmtiStackInfo"/> records is determined 
+	      On return, this buffer is filled
+	      with stack information for each thread.
+              The number of <datalink id="jvmtiStackInfo"/> records is determined
               by <paramlink id="thread_count"/>.
               <p/>
-              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/> 
+              Note that this buffer is allocated to include the <datalink id="jvmtiFrameInfo"/>
               buffers pointed to by <datalink id="jvmtiStackInfo.frame_buffer"/>.
               These buffers must not be separately deallocated.
 	    </description>
@@ -2703,8 +2703,8 @@
       <capabilities>
         <required id="can_get_async_stack_trace"></required>
         <capability id="can_show_JVM_spec_async_frames">
-          If <code>false</code>, 
-          <paramlink id="use_java_stack"></paramlink> 
+          If <code>false</code>,
+          <paramlink id="use_java_stack"></paramlink>
           must be <code>false</code>.
         </capability>
       </capabilities>
@@ -2713,7 +2713,7 @@
 	  <jboolean/>
 	  <description>
 	    Return the stack showing <vmspec/>
-	    model of the stack; 
+	    model of the stack;
 	    otherwise, show the internal representation of the stack with
 	    inlined and optimized methods missing.  If the virtual machine
 	    is using the <i>Java Virtual Machine Specification</i> stack model
@@ -2734,9 +2734,9 @@
 	  </outbuf>
 	    <description>
 	      The agent passes in a buffer
-	      large enough to hold <code>max_count</code> records of 
+	      large enough to hold <code>max_count</code> records of
 	      <datalink id="jvmtiFrameInfo"></datalink>.  This buffer must be
-	      pre-allocated by the agent.  
+	      pre-allocated by the agent.
 	    </description>
 	</param>
         <param id="count_ptr">
@@ -2788,27 +2788,27 @@
       <synopsis>Pop Frame</synopsis>
       <description>
 	Pop the current frame of <code>thread</code>'s stack.
-	Popping a frame takes you to the previous frame.  
-	When the thread is resumed, the execution 
+	Popping a frame takes you to the previous frame.
+	When the thread is resumed, the execution
 	state of the thread is reset to the state
 	immediately before the called method was invoked.
 	That is (using <vmspec/> terminology):
 	  <ul>
 	    <li>the current frame is discarded as the previous frame becomes the current one</li>
 	    <li>the operand stack is restored--the argument values are added back
-	      and if the invoke was not <code>invokestatic</code>, 
+	      and if the invoke was not <code>invokestatic</code>,
 	      <code>objectref</code> is added back as well</li>
 	    <li>the Java virtual machine PC is restored to the opcode
 	      of the invoke instruction</li>
 	  </ul>
 	Note however, that any changes to the arguments, which
-	occurred in the called method, remain; 
-	when execution continues, the first instruction to 
-	execute will be the invoke.  
+	occurred in the called method, remain;
+	when execution continues, the first instruction to
+	execute will be the invoke.
 	<p/>
-	Between calling <code>PopFrame</code> and resuming the 
-	thread the state of the stack is undefined.  
-	To pop frames beyond the first, 
+	Between calling <code>PopFrame</code> and resuming the
+	thread the state of the stack is undefined.
+	To pop frames beyond the first,
 	these three steps must be repeated:
 	<ul>
 	  <li>suspend the thread via an event (step, breakpoint, ...)</li>
@@ -2816,11 +2816,11 @@
 	  <li>resume the thread</li>
 	</ul>
 	<p/>
-	A lock acquired by calling the called method 
-	(if it is a <code>synchronized</code>  method) 
+	A lock acquired by calling the called method
+	(if it is a <code>synchronized</code>  method)
 	and locks acquired by entering <code>synchronized</code>
-	blocks within the called method are released. 
-	Note: this does not apply to native locks or 
+	blocks within the called method are released.
+	Note: this does not apply to native locks or
 	<code>java.util.concurrent.locks</code> locks.
 	<p/>
 	Finally blocks are not executed.
@@ -2829,7 +2829,7 @@
 	<p/>
 	The specified thread must be suspended (which implies it cannot be the current thread).
 	<p/>
-	Both the called method and calling method must be non-native Java programming 
+	Both the called method and calling method must be non-native Java programming
         language methods.
 	<p/>
 	No <jvmti/> events are generated by this function.
@@ -2892,7 +2892,7 @@
 	<param id="location_ptr">
 	  <outptr><jlocation/></outptr>
 	  <description>
-	    On return, points to the index of the currently 
+	    On return, points to the index of the currently
 	    executing instruction.
             Is set to <code>-1</code> if the frame is executing
             a native method.
@@ -2906,11 +2906,11 @@
     <function id="NotifyFramePop" num="20">
       <synopsis>Notify Frame Pop</synopsis>
       <description>
-	When the frame that is currently at <paramlink id="depth"></paramlink> 
+	When the frame that is currently at <paramlink id="depth"></paramlink>
         is popped from the stack, generate a
-	<eventlink id="FramePop"></eventlink> event.  See the 
+	<eventlink id="FramePop"></eventlink> event.  See the
 	<eventlink id="FramePop"></eventlink> event for details.
-        Only frames corresponding to non-native Java programming language 
+        Only frames corresponding to non-native Java programming language
         methods can receive notification.
         <p/>
         The specified thread must either be the current thread
@@ -2922,7 +2922,7 @@
       </capabilities>
       <parameters>
  	<param id="thread">
-	  <jthread null="current" frame="depth"/>	  
+	  <jthread null="current" frame="depth"/>
 	  <description>
 	    The thread of the frame for which the frame pop event will be generated.
 	  </description>
@@ -2935,7 +2935,7 @@
 	</param>
       </parameters>
       <errors>
-	<error id="JVMTI_ERROR_OPAQUE_FRAME"> 
+	<error id="JVMTI_ERROR_OPAQUE_FRAME">
 	  The frame at <code>depth</code> is executing a
           native method.
 	</error>
@@ -2954,7 +2954,7 @@
       The method which will return early is referred to as the <i>called method</i>.
       The called method is the current method
       (as defined by
-      <vmspec chapter="3.6"/>) 
+      <vmspec chapter="3.6"/>)
       for the specified thread at
       the time the function is called.
       <p/>
@@ -2962,17 +2962,17 @@
       The return occurs when execution of Java programming
       language code is resumed on this thread.
       Between calling one of these functions and resumption
-      of thread execution, the state of the stack is undefined.  
+      of thread execution, the state of the stack is undefined.
       <p/>
-      No further instructions are executed in the called method.  
+      No further instructions are executed in the called method.
       Specifically, finally blocks are not executed.
       Note: this can cause inconsistent states in the application.
       <p/>
-      A lock acquired by calling the called method 
-      (if it is a <code>synchronized</code>  method) 
+      A lock acquired by calling the called method
+      (if it is a <code>synchronized</code>  method)
       and locks acquired by entering <code>synchronized</code>
-      blocks within the called method are released. 
-      Note: this does not apply to native locks or 
+      blocks within the called method are released.
+      Note: this does not apply to native locks or
       <code>java.util.concurrent.locks</code> locks.
       <p/>
       Events, such as <eventlink id="MethodExit"></eventlink>,
@@ -2989,7 +2989,7 @@
       <description>
 	This function can be used to return from a method whose
         result type is <code>Object</code>
-        or a subclass of <code>Object</code>. 
+        or a subclass of <code>Object</code>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -3005,7 +3005,7 @@
 	<param id="value">
 	  <jobject/>
 	  <description>
-	    The return value for the called frame. 
+	    The return value for the called frame.
             An object or <code>NULL</code>.
 	  </description>
 	</param>
@@ -3017,12 +3017,12 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The result type of the called method is not 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The result type of the called method is not
           <code>Object</code> or a subclass of <code>Object</code>.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The supplied <paramlink id="value"/> is not compatible with the 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The supplied <paramlink id="value"/> is not compatible with the
           result type of the called method.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3039,8 +3039,8 @@
       <description>
 	This function can be used to return from a method whose
         result type is <code>int</code>, <code>short</code>,
-        <code>char</code>, <code>byte</code>, or 
-	<code>boolean</code>. 
+        <code>char</code>, <code>byte</code>, or
+	<code>boolean</code>.
       </description>
       <origin>new</origin>
       <capabilities>
@@ -3067,10 +3067,10 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The result type of the called method is not 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The result type of the called method is not
           <code>int</code>, <code>short</code>,
-          <code>char</code>, <code>byte</code>, or 
+          <code>char</code>, <code>byte</code>, or
   	  <code>boolean</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3113,7 +3113,7 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The result type of the called method is not <code>long</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3156,7 +3156,7 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The result type of the called method is not <code>float</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3197,7 +3197,7 @@
 	  Attempted to return early from a frame corresponding to a native method.
           Or the implementation is unable to provide this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
 	  The result type of the called method is not <code>double</code>.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
@@ -3234,8 +3234,8 @@
           Or the implementation is unable to provide
           this functionality on this frame.
 	</error>
-	<error id="JVMTI_ERROR_TYPE_MISMATCH"> 
-	  The called method has a result type.  
+	<error id="JVMTI_ERROR_TYPE_MISMATCH">
+	  The called method has a result type.
 	</error>
 	<error id="JVMTI_ERROR_THREAD_NOT_SUSPENDED">
 	  Thread was not the current thread and was not suspended.
@@ -3254,12 +3254,12 @@
       Functionality includes the ability to view the objects in the
       heap and to tag these objects.
     </intro>
-   
+
     <intro id="objectTags" label="Object Tags">
       A <i>tag</i> is a value associated with an object.
       Tags are explicitly set by the agent using the
       <functionlink id="SetTag"></functionlink> function or by
-      callback functions such as <functionlink id="jvmtiHeapIterationCallback"/>.    
+      callback functions such as <functionlink id="jvmtiHeapIterationCallback"/>.
       <p/>
       Tags are local to the environment; that is, the tags of one
       environment are not visible in another.
@@ -3267,10 +3267,10 @@
       Tags are <code>jlong</code> values which can be used
       simply to mark an object or to store a pointer to more detailed
       information.  Objects which have not been tagged have a
-      tag of zero.  
+      tag of zero.
       Setting a tag to zero makes the object untagged.
     </intro>
-   
+
     <intro id="heapCallbacks" label="Heap Callback Functions">
         Heap functions which iterate through the heap and recursively
         follow object references use agent supplied callback functions
@@ -3278,7 +3278,7 @@
         <p/>
         These heap callback functions must adhere to the following restrictions --
         These callbacks must not use JNI functions.
-        These callbacks must not use <jvmti/> functions except 
+        These callbacks must not use <jvmti/> functions except
         <i>callback safe</i> functions which
         specifically allow such use (see the raw monitor, memory management,
         and environment local storage functions).
@@ -3289,7 +3289,7 @@
         be invoked at a time.
         <p/>
         The Heap Filter Flags can be used to prevent reporting
-        based on the tag status of an object or its class.  
+        based on the tag status of an object or its class.
         If no flags are set (the <code>jint</code> is zero), objects
         will not be filtered out.
 
@@ -3310,43 +3310,43 @@
 
         <p/>
         The Heap Visit Control Flags are returned by the heap callbacks
-        and can be used to abort the iteration.  For the 
-        <functionlink id="jvmtiHeapReferenceCallback">Heap 
-        Reference Callback</functionlink>, it can also be used 
+        and can be used to abort the iteration.  For the
+        <functionlink id="jvmtiHeapReferenceCallback">Heap
+        Reference Callback</functionlink>, it can also be used
         to prune the graph of traversed references
         (<code>JVMTI_VISIT_OBJECTS</code> is not set).
 
-        <constants id="jvmtiHeapVisitControl" 
-                   label="Heap Visit Control Flags" 
-                   kind="bits" 
+        <constants id="jvmtiHeapVisitControl"
+                   label="Heap Visit Control Flags"
+                   kind="bits"
                    since="1.1">
 	  <constant id="JVMTI_VISIT_OBJECTS" num="0x100">
             If we are visiting an object and if this callback
-            was initiated by <functionlink id="FollowReferences"/>, 
+            was initiated by <functionlink id="FollowReferences"/>,
             traverse the references of this object.
             Otherwise ignored.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_VISIT_ABORT" num="0x8000">
 	    Abort the iteration.  Ignore all other bits.
 	  </constant>
 	</constants>
 
         <p/>
-        The Heap Reference Enumeration is provided by the 
-        <functionlink id="jvmtiHeapReferenceCallback">Heap 
-        Reference Callback</functionlink> and 
-        <functionlink id="jvmtiPrimitiveFieldCallback">Primitive Field 
-        Callback</functionlink> to 
+        The Heap Reference Enumeration is provided by the
+        <functionlink id="jvmtiHeapReferenceCallback">Heap
+        Reference Callback</functionlink> and
+        <functionlink id="jvmtiPrimitiveFieldCallback">Primitive Field
+        Callback</functionlink> to
         describe the kind of reference
         being reported.
 
-        <constants id="jvmtiHeapReferenceKind" 
-                   label="Heap Reference Enumeration" 
-                   kind="enum" 
+        <constants id="jvmtiHeapReferenceKind"
+                   label="Heap Reference Enumeration"
+                   kind="enum"
                    since="1.1">
 	  <constant id="JVMTI_HEAP_REFERENCE_CLASS" num="1">
 	    Reference from an object to its class.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_FIELD" num="2">
 	    Reference from an object to the value of one of its instance fields.
 	  </constant>
@@ -3361,11 +3361,11 @@
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_PROTECTION_DOMAIN" num="6">
 	    Reference from a class to its protection domain.
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_INTERFACE" num="7">
-            Reference from a class to one of its interfaces. 
+            Reference from a class to one of its interfaces.
             Note: interfaces are defined via a constant pool reference,
-            so the referenced interfaces may also be reported with a 
+            so the referenced interfaces may also be reported with a
             <code>JVMTI_HEAP_REFERENCE_CONSTANT_POOL</code> reference kind.
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_STATIC_FIELD" num="8">
@@ -3375,10 +3375,10 @@
 	    Reference from a class to a resolved entry in the constant pool.
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_SUPERCLASS" num="10">
-            Reference from a class to its superclass. 
+            Reference from a class to its superclass.
             A callback is not sent if the superclass is <code>java.lang.Object</code>.
             Note: loaded classes define superclasses via a constant pool
-            reference, so the referenced superclass may also be reported with 
+            reference, so the referenced superclass may also be reported with
             a <code>JVMTI_HEAP_REFERENCE_CONSTANT_POOL</code> reference kind.
 	  </constant>
 	  <constant id="JVMTI_HEAP_REFERENCE_JNI_GLOBAL" num="21">
@@ -3408,88 +3408,88 @@
         Definitions for the single character type descriptors of
         primitive types.
 
-        <constants id="jvmtiPrimitiveType" 
-                   label="Primitive Type Enumeration" 
-                   kind="enum" 
+        <constants id="jvmtiPrimitiveType"
+                   label="Primitive Type Enumeration"
+                   kind="enum"
                    since="1.1">
 	  <constant id="JVMTI_PRIMITIVE_TYPE_BOOLEAN" num="90">
             'Z' - Java programming language <code>boolean</code> - JNI <code>jboolean</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_BYTE" num="66">
             'B' - Java programming language <code>byte</code> - JNI <code>jbyte</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_CHAR" num="67">
             'C' - Java programming language <code>char</code> - JNI <code>jchar</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_SHORT" num="83">
             'S' - Java programming language <code>short</code> - JNI <code>jshort</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_INT" num="73">
             'I' - Java programming language <code>int</code> - JNI <code>jint</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_LONG" num="74">
             'J' - Java programming language <code>long</code> - JNI <code>jlong</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_FLOAT" num="70">
             'F' - Java programming language <code>float</code> - JNI <code>jfloat</code>
-	  </constant>	  
+	  </constant>
 	  <constant id="JVMTI_PRIMITIVE_TYPE_DOUBLE" num="68">
             'D' - Java programming language <code>double</code> - JNI <code>jdouble</code>
-	  </constant>	  
+	  </constant>
 	</constants>
     </intro>
 
-      <typedef id="jvmtiHeapReferenceInfoField" 
-               label="Reference information structure for Field references" 
+      <typedef id="jvmtiHeapReferenceInfoField"
+               label="Reference information structure for Field references"
                since="1.1">
         <description>
-          Reference information returned for 
-          <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> and 
+          Reference information returned for
+          <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/> and
           <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/> references.
         </description>
 	<field id="index">
 	  <jint/>
-	  <description>	    
-            For <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/>, the 
-            referrer object is not a class or an inteface.  
-            In this case, <code>index</code> is the index of the field 
-            in the class of the referrer object.  
+	  <description>
+            For <datalink id="JVMTI_HEAP_REFERENCE_FIELD"/>, the
+            referrer object is not a class or an inteface.
+            In this case, <code>index</code> is the index of the field
+            in the class of the referrer object.
             This class is referred to below as <i>C</i>.
             <p/>
             For <datalink id="JVMTI_HEAP_REFERENCE_STATIC_FIELD"/>,
             the referrer object is a class (referred to below as <i>C</i>)
             or an interface (referred to below as <i>I</i>).
-            In this case, <code>index</code> is the index of the field in 
+            In this case, <code>index</code> is the index of the field in
             that class or interface.
             <p/>
-            If the referrer object is not an interface, then the field 
-            indices are determined as follows: 
+            If the referrer object is not an interface, then the field
+            indices are determined as follows:
             <ul>
               <li>make a list of all the fields in <i>C</i> and its
-                  superclasses, starting with all the fields in 
+                  superclasses, starting with all the fields in
                   <code>java.lang.Object</code> and ending with all the
                   fields in <i>C</i>.</li>
-              <li>Within this list, put 
+              <li>Within this list, put
                   the fields for a given class in the order returned by
                   <functionlink id="GetClassFields"/>.</li>
-              <li>Assign the fields in this list indices 
-                  <i>n</i>, <i>n</i>+1, ..., in order, where <i>n</i> 
+              <li>Assign the fields in this list indices
+                  <i>n</i>, <i>n</i>+1, ..., in order, where <i>n</i>
                   is the count of the fields in all the interfaces
-                  implemented by <i>C</i>. 
-                  Note that <i>C</i> implements all interfaces 
+                  implemented by <i>C</i>.
+                  Note that <i>C</i> implements all interfaces
                   directly implemented by its superclasses; as well
                   as all superinterfaces of these interfaces.</li>
             </ul>
-            If the referrer object is an interface, then the field 
+            If the referrer object is an interface, then the field
             indices are determined as follows:
             <ul>
-              <li>make a list of the fields dir