OpenJDK / jdk / jdk
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, 32640 insertions(+), 33384 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 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 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 IDL exceptions</A> + * <p>See also {@extLink jidlexception documentation on Java 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 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 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 IDL, please see: <ul> - <li><a href="../../../../technotes/guides/idl/index.html"> - Java IDL home page</a> + <li>{@extLink idl_guides Java 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 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; + } + + 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); - 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; + 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; - } + 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><agent-lib-name></i><code>=</code><i><options></i></dt> <dd> @@ -494,10 +494,10 @@ Typically, the <i><agent-lib-name></i> is expanded to an operating system specific file name. The <i><options></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><options></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_<agent-lib-name></code> entry point where - <agent-lib-name> is the basename of the + <agent-lib-name> 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_<agent-lib-name></code> function with - <i><options></i> as the second argument - + <i><options></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>=<options></i> is not specified, + If <i>=<options></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_<agent-lib-name></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_<agent-lib-name></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><vm></i> is the Java VM. The <i><options></i> argument is the startup options provided to the agent. <i><options></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_<agent-lib-name></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_<agent-lib-name ></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_<agent-lib-name></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(&class_count, &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, &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 & JVMTI_THREAD_STATE_IN_OBJECT_WAIT) { + if (state & JVMTI_THREAD_STATE_IN_OBJECT_WAIT) { if (state & 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)->GetStackTrace(jvmti, aThread, 0, 5, +err = (*jvmti)->GetStackTrace(jvmti, aThread, 0, 5, frames, &count); if (err == JVMTI_ERROR_NONE && count >= 1) { char *methodName; - err = (*jvmti)->GetMethodName(jvmti, frames[0].method, + err = (*jvmti)->GetMethodName(jvmti, frames[0].method, &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)->GetAllStackTraces(jvmti, MAX_FRAMES, &stack_info, &thread_count); +err = (*jvmti)->GetAllStackTraces(jvmti, MAX_FRAMES, &stack_info, &thread_count); if (err != JVMTI_ERROR_NONE) { - ... + ... } for (ti = 0; ti < thread_count; ++ti) { jvmtiStackInfo *infop = &stack_info[ti]; @@ -2577,9 +2577,9 @@ } } /* this one Deallocate call frees all data allocated by GetAllStackTraces */ -err = (*jvmti)->Deallocate(jvmti, stack_info); +err = (*jvmti)->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