Merge
This commit is contained in:
commit
f87dd6a954
2
.hgtags
2
.hgtags
@ -1,3 +1,4 @@
|
||||
898cbe31fbdae2d25d141384fac746cc244a730c jdk-9+170
|
||||
c7efde2b60fc1ec04630be769d9ad60efb39c39c jdk-9+169
|
||||
8fd0a4569191f33c98ee90c2709174a342fefb0d jdk-9+167
|
||||
fcabc74bd44e56c7419d111d59b95669ecb33c55 jdk-9+168
|
||||
@ -420,3 +421,4 @@ d1cab6c7e608479be4ebfad48a25b0ed48600f62 jdk-10+3
|
||||
f113ce12fe24fbd24acf02711372d9f1e1c12426 jdk-10+5
|
||||
1407b19a2ddf6baae162f5a1a5b96af473f4d7d1 jdk-10+6
|
||||
30e75693ae99fd8e47fd2f5116527aff1b59aff9 jdk-10+7
|
||||
c42dc7b58b4d4301ea676a76326fd9bbd403d595 jdk-10+8
|
||||
|
@ -419,4 +419,7 @@ ba5b16c9c6d80632b61959a33d424b1c3398ce62 jdk-9+166
|
||||
111e2e7d00f45c983cdbc9c59ae40552152fcc23 jdk-10+5
|
||||
03fe61bb7670644cf6e46b5cfafb6b27c0e0157e jdk-10+6
|
||||
b25838a28195f4b6dab34668411eedd2d366a16c jdk-9+169
|
||||
4d163ec59d989a9261ed7f848bc6303f90869af5 jdk-9+170
|
||||
|
||||
aa3c97810d7c484c93a2fd75d3c76ff574deb6d8 jdk-10+7
|
||||
df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8
|
||||
|
@ -5186,7 +5186,7 @@ VS_SDK_PLATFORM_NAME_2013=
|
||||
#CUSTOM_AUTOCONF_INCLUDE
|
||||
|
||||
# Do not change or remove the following line, it is needed for consistency checks:
|
||||
DATE_WHEN_GENERATED=1494615666
|
||||
DATE_WHEN_GENERATED=1494858828
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@ -48811,173 +48811,63 @@ $as_echo "yes" >&6; }
|
||||
# Check whether --with-jtreg was given.
|
||||
if test "${with_jtreg+set}" = set; then :
|
||||
withval=$with_jtreg;
|
||||
else
|
||||
with_jtreg=no
|
||||
fi
|
||||
|
||||
|
||||
if test "x$with_jtreg" = xno; then
|
||||
# jtreg disabled
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg" >&5
|
||||
$as_echo_n "checking for jtreg... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg test harness" >&5
|
||||
$as_echo_n "checking for jtreg test harness... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabled" >&5
|
||||
$as_echo "no, disabled" >&6; }
|
||||
elif test "x$with_jtreg" != xyes && test "x$with_jtreg" != x; then
|
||||
# An explicit path is specified, use it.
|
||||
JT_HOME="$with_jtreg"
|
||||
if test ! -d "$JT_HOME"; then
|
||||
as_fn_error $? "jtreg home directory from --with-jtreg=$with_jtreg does not exist" "$LINENO" 5
|
||||
fi
|
||||
|
||||
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
|
||||
as_fn_error $? "jtreg home directory from --with-jtreg=$with_jtreg is not a valid jtreg home" "$LINENO" 5
|
||||
fi
|
||||
|
||||
JTREGEXE="$JT_HOME/bin/jtreg"
|
||||
if test ! -x "$JTREGEXE"; then
|
||||
as_fn_error $? "jtreg home directory from --with-jtreg=$with_jtreg does not contain valid jtreg executable" "$LINENO" 5
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg test harness" >&5
|
||||
$as_echo_n "checking for jtreg test harness... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JT_HOME" >&5
|
||||
$as_echo "$JT_HOME" >&6; }
|
||||
else
|
||||
if test "x$with_jtreg" != xyes; then
|
||||
# with path specified.
|
||||
JT_HOME="$with_jtreg"
|
||||
fi
|
||||
|
||||
# Try to locate jtreg
|
||||
if test "x$JT_HOME" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg" >&5
|
||||
$as_echo_n "checking for jtreg... " >&6; }
|
||||
|
||||
# use JT_HOME enviroment var.
|
||||
|
||||
# Only process if variable expands to non-empty
|
||||
|
||||
if test "x$JT_HOME" != 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="$JT_HOME"
|
||||
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 JT_HOME, which resolves as \"$path\", is invalid." >&5
|
||||
$as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid." >&6;}
|
||||
as_fn_error $? "Cannot locate the the path of JT_HOME" "$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
|
||||
JT_HOME="$new_path"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
|
||||
$as_echo "$as_me: Rewriting JT_HOME to \"$new_path\"" >&6;}
|
||||
fi
|
||||
|
||||
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
|
||||
|
||||
path="$JT_HOME"
|
||||
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
|
||||
JT_HOME="$new_path"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
|
||||
$as_echo "$as_me: Rewriting JT_HOME 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="$JT_HOME"
|
||||
has_space=`$ECHO "$path" | $GREP " "`
|
||||
if test "x$has_space" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JT_HOME, which resolves as \"$path\", is invalid." >&5
|
||||
$as_echo "$as_me: The path of JT_HOME, 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 JT_HOME, which resolves as \"$path\", is not found." "$LINENO" 5
|
||||
fi
|
||||
|
||||
if test -d "$path"; then
|
||||
JT_HOME="`cd "$path"; $THEPWDCMD -L`"
|
||||
# JT_HOME set in environment, use it
|
||||
if test ! -d "$JT_HOME"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring JT_HOME pointing to invalid directory: $JT_HOME" >&5
|
||||
$as_echo "$as_me: WARNING: Ignoring JT_HOME pointing to invalid directory: $JT_HOME" >&2;}
|
||||
JT_HOME=
|
||||
else
|
||||
dir="`$DIRNAME "$path"`"
|
||||
base="`$BASENAME "$path"`"
|
||||
JT_HOME="`cd "$dir"; $THEPWDCMD -L`/$base"
|
||||
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME" >&5
|
||||
$as_echo "$as_me: WARNING: Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME" >&2;}
|
||||
JT_HOME=
|
||||
elif test ! -x "$JT_HOME/bin/jtreg"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring JT_HOME which does not contain valid jtreg executable: $JT_HOME" >&5
|
||||
$as_echo "$as_me: WARNING: Ignoring JT_HOME which does not contain valid jtreg executable: $JT_HOME" >&2;}
|
||||
JT_HOME=
|
||||
else
|
||||
JTREGEXE="$JT_HOME/bin/jtreg"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Located jtreg using JT_HOME from environment" >&5
|
||||
$as_echo "$as_me: Located jtreg using JT_HOME from environment" >&6;}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# jtreg win32 script works for everybody
|
||||
JTREGEXE="$JT_HOME/bin/jtreg"
|
||||
|
||||
if test ! -f "$JTREGEXE"; then
|
||||
as_fn_error $? "JTReg executable does not exist: $JTREGEXE" "$LINENO" 5
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JTREGEXE" >&5
|
||||
$as_echo "$JTREGEXE" >&6; }
|
||||
else
|
||||
# try to find jtreg on path
|
||||
|
||||
if test "x$JT_HOME" = x; then
|
||||
# JT_HOME is not set in environment, or was deemed invalid.
|
||||
# Try to find jtreg on path
|
||||
|
||||
|
||||
# Publish this variable in the help.
|
||||
@ -49175,13 +49065,451 @@ $as_echo "$tool_specified" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
if test "x$JTREGEXE" != x; then
|
||||
# That's good, now try to derive JT_HOME
|
||||
JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)`
|
||||
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring jtreg from path since a valid jtreg home cannot be found" >&5
|
||||
$as_echo "$as_me: WARNING: Ignoring jtreg from path since a valid jtreg home cannot be found" >&2;}
|
||||
JT_HOME=
|
||||
JTREGEXE=
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Located jtreg using jtreg executable in path" >&5
|
||||
$as_echo "$as_me: Located jtreg using jtreg executable in path" >&6;}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$JTREGEXE" = x; then
|
||||
as_fn_error $? "Could not find required tool for JTREGEXE" "$LINENO" 5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jtreg test harness" >&5
|
||||
$as_echo_n "checking for jtreg test harness... " >&6; }
|
||||
if test "x$JT_HOME" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JT_HOME" >&5
|
||||
$as_echo "$JT_HOME" >&6; }
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, not found" >&5
|
||||
$as_echo "no, not found" >&6; }
|
||||
|
||||
if test "x$with_jtreg" = xyes; then
|
||||
as_fn_error $? "--with-jtreg was specified, but no jtreg found." "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
JT_HOME="`$DIRNAME $JTREGEXE`"
|
||||
# Only process if variable expands to non-empty
|
||||
|
||||
if test "x$JTREGEXE" != x; then
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
|
||||
# First separate the path from the arguments. This will split at the first
|
||||
# space.
|
||||
complete="$JTREGEXE"
|
||||
path="${complete%% *}"
|
||||
tmp="$complete EOL"
|
||||
arguments="${tmp#* }"
|
||||
|
||||
# Input might be given as Windows format, start by converting to
|
||||
# unix format.
|
||||
new_path=`$CYGPATH -u "$path"`
|
||||
|
||||
# Now try to locate executable using which
|
||||
new_path=`$WHICH "$new_path" 2> /dev/null`
|
||||
# bat and cmd files are not always considered executable in cygwin causing which
|
||||
# to not find them
|
||||
if test "x$new_path" = x \
|
||||
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
|
||||
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
|
||||
new_path=`$CYGPATH -u "$path"`
|
||||
fi
|
||||
if test "x$new_path" = x; then
|
||||
# Oops. Which didn't find the executable.
|
||||
# The splitting of arguments from the executable at a space might have been incorrect,
|
||||
# since paths with space are more likely in Windows. Give it another try with the whole
|
||||
# argument.
|
||||
path="$complete"
|
||||
arguments="EOL"
|
||||
new_path=`$CYGPATH -u "$path"`
|
||||
new_path=`$WHICH "$new_path" 2> /dev/null`
|
||||
# bat and cmd files are not always considered executable in cygwin causing which
|
||||
# to not find them
|
||||
if test "x$new_path" = x \
|
||||
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
|
||||
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
|
||||
new_path=`$CYGPATH -u "$path"`
|
||||
fi
|
||||
if test "x$new_path" = x; then
|
||||
# It's still not found. Now this is an unrecoverable error.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&5
|
||||
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&6;}
|
||||
has_space=`$ECHO "$complete" | $GREP " "`
|
||||
if test "x$has_space" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5
|
||||
$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;}
|
||||
fi
|
||||
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
|
||||
# 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 presence.
|
||||
# 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
|
||||
# Short path failed, file does not exist as specified.
|
||||
# Try adding .exe or .cmd
|
||||
if test -f "${new_path}.exe"; then
|
||||
input_to_shortpath="${new_path}.exe"
|
||||
elif test -f "${new_path}.cmd"; then
|
||||
input_to_shortpath="${new_path}.cmd"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$new_path\", is invalid." >&5
|
||||
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$new_path\", is invalid." >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5
|
||||
$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;}
|
||||
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
|
||||
fi
|
||||
else
|
||||
input_to_shortpath="$new_path"
|
||||
fi
|
||||
|
||||
# Call helper function which possibly converts this using DOS-style short mode.
|
||||
# If so, the updated path is stored in $new_path.
|
||||
new_path="$input_to_shortpath"
|
||||
|
||||
input_path="$input_to_shortpath"
|
||||
# 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 $input_to_shortpath | $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
|
||||
|
||||
# remove trailing .exe if any
|
||||
new_path="${new_path/%.exe/}"
|
||||
|
||||
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
|
||||
|
||||
# First separate the path from the arguments. This will split at the first
|
||||
# space.
|
||||
complete="$JTREGEXE"
|
||||
path="${complete%% *}"
|
||||
tmp="$complete EOL"
|
||||
arguments="${tmp#* }"
|
||||
|
||||
# Input might be given as Windows format, start by converting to
|
||||
# unix format.
|
||||
new_path="$path"
|
||||
|
||||
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
|
||||
|
||||
|
||||
# Now try to locate executable using which
|
||||
new_path=`$WHICH "$new_path" 2> /dev/null`
|
||||
|
||||
if test "x$new_path" = x; then
|
||||
# Oops. Which didn't find the executable.
|
||||
# The splitting of arguments from the executable at a space might have been incorrect,
|
||||
# since paths with space are more likely in Windows. Give it another try with the whole
|
||||
# argument.
|
||||
path="$complete"
|
||||
arguments="EOL"
|
||||
new_path="$path"
|
||||
|
||||
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
|
||||
|
||||
|
||||
new_path=`$WHICH "$new_path" 2> /dev/null`
|
||||
# bat and cmd files are not always considered executable in MSYS causing which
|
||||
# to not find them
|
||||
if test "x$new_path" = x \
|
||||
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
|
||||
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
|
||||
new_path="$path"
|
||||
|
||||
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
|
||||
|
||||
fi
|
||||
|
||||
if test "x$new_path" = x; then
|
||||
# It's still not found. Now this is an unrecoverable error.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&5
|
||||
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&6;}
|
||||
has_space=`$ECHO "$complete" | $GREP " "`
|
||||
if test "x$has_space" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5
|
||||
$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;}
|
||||
fi
|
||||
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
|
||||
# Now new_path has a complete unix path to the binary
|
||||
if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then
|
||||
# Keep paths in /bin as-is, but remove trailing .exe if any
|
||||
new_path="${new_path/%.exe/}"
|
||||
# Do not save /bin paths to all_fixpath_prefixes!
|
||||
else
|
||||
# Not in mixed or Windows style, start by that.
|
||||
new_path=`cmd //c echo $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 \)
|
||||
new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
fi
|
||||
|
||||
# Output is in $new_path
|
||||
|
||||
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
|
||||
|
||||
# remove trailing .exe if any
|
||||
new_path="${new_path/%.exe/}"
|
||||
|
||||
# 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}")
|
||||
fi
|
||||
|
||||
else
|
||||
# We're on a unix platform. Hooray! :)
|
||||
# First separate the path from the arguments. This will split at the first
|
||||
# space.
|
||||
complete="$JTREGEXE"
|
||||
path="${complete%% *}"
|
||||
tmp="$complete EOL"
|
||||
arguments="${tmp#* }"
|
||||
|
||||
# Cannot rely on the command "which" here since it doesn't always work.
|
||||
is_absolute_path=`$ECHO "$path" | $GREP ^/`
|
||||
if test -z "$is_absolute_path"; then
|
||||
# Path to executable is not absolute. Find it.
|
||||
IFS_save="$IFS"
|
||||
IFS=:
|
||||
for p in $PATH; do
|
||||
if test -f "$p/$path" && test -x "$p/$path"; then
|
||||
new_path="$p/$path"
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$IFS_save"
|
||||
else
|
||||
# This is an absolute path, we can use it without further modifications.
|
||||
new_path="$path"
|
||||
fi
|
||||
|
||||
if test "x$new_path" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&5
|
||||
$as_echo "$as_me: The path of JTREGEXE, which resolves as \"$complete\", is not found." >&6;}
|
||||
has_space=`$ECHO "$complete" | $GREP " "`
|
||||
if test "x$has_space" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5
|
||||
$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;}
|
||||
fi
|
||||
as_fn_error $? "Cannot locate the the path of JTREGEXE" "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
|
||||
# Now join together the path and the arguments once again
|
||||
if test "x$arguments" != xEOL; then
|
||||
new_complete="$new_path ${arguments% *}"
|
||||
else
|
||||
new_complete="$new_path"
|
||||
fi
|
||||
|
||||
if test "x$complete" != "x$new_complete"; then
|
||||
JTREGEXE="$new_complete"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JTREGEXE to \"$new_complete\"" >&5
|
||||
$as_echo "$as_me: Rewriting JTREGEXE to \"$new_complete\"" >&6;}
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Only process if variable expands to non-empty
|
||||
|
||||
if test "x$JT_HOME" != 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="$JT_HOME"
|
||||
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 JT_HOME, which resolves as \"$path\", is invalid." >&5
|
||||
$as_echo "$as_me: The path of JT_HOME, which resolves as \"$path\", is invalid." >&6;}
|
||||
as_fn_error $? "Cannot locate the the path of JT_HOME" "$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
|
||||
JT_HOME="$new_path"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
|
||||
$as_echo "$as_me: Rewriting JT_HOME to \"$new_path\"" >&6;}
|
||||
fi
|
||||
|
||||
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
|
||||
|
||||
path="$JT_HOME"
|
||||
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
|
||||
JT_HOME="$new_path"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JT_HOME to \"$new_path\"" >&5
|
||||
$as_echo "$as_me: Rewriting JT_HOME 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="$JT_HOME"
|
||||
has_space=`$ECHO "$path" | $GREP " "`
|
||||
if test "x$has_space" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: The path of JT_HOME, which resolves as \"$path\", is invalid." >&5
|
||||
$as_echo "$as_me: The path of JT_HOME, 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 JT_HOME, which resolves as \"$path\", is not found." "$LINENO" 5
|
||||
fi
|
||||
|
||||
if test -d "$path"; then
|
||||
JT_HOME="`cd "$path"; $THEPWDCMD -L`"
|
||||
else
|
||||
dir="`$DIRNAME "$path"`"
|
||||
base="`$BASENAME "$path"`"
|
||||
JT_HOME="`cd "$dir"; $THEPWDCMD -L`/$base"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -271,9 +271,6 @@ BUNDLES_OUTPUTDIR=$(BUILD_OUTPUT)/bundles
|
||||
TESTMAKE_OUTPUTDIR=$(BUILD_OUTPUT)/test-make
|
||||
MAKESUPPORT_OUTPUTDIR=$(BUILD_OUTPUT)/make-support
|
||||
|
||||
# By default, output javadoc directly into image
|
||||
JAVADOC_OUTPUTDIR = $(DOCS_IMAGE_DIR)
|
||||
|
||||
# This does not get overridden in a bootcycle build
|
||||
CONFIGURESUPPORT_OUTPUTDIR:=@CONFIGURESUPPORT_OUTPUTDIR@
|
||||
BUILDJDK_OUTPUTDIR=$(BUILD_OUTPUT)/buildjdk
|
||||
@ -819,6 +816,8 @@ INTERIM_IMAGE_DIR := $(SUPPORT_OUTPUTDIR)/interim-image
|
||||
# Docs image
|
||||
DOCS_IMAGE_SUBDIR := docs
|
||||
DOCS_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(DOCS_IMAGE_SUBDIR)
|
||||
# Output docs directly into image
|
||||
DOCS_OUTPUTDIR := $(DOCS_IMAGE_DIR)
|
||||
|
||||
# Macosx bundles directory definitions
|
||||
JDK_MACOSX_BUNDLE_SUBDIR=jdk-bundle
|
||||
|
@ -926,41 +926,82 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
|
||||
AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
|
||||
[
|
||||
AC_ARG_WITH(jtreg, [AS_HELP_STRING([--with-jtreg],
|
||||
[Regression Test Harness @<:@probed@:>@])],
|
||||
[],
|
||||
[with_jtreg=no])
|
||||
[Regression Test Harness @<:@probed@:>@])])
|
||||
|
||||
if test "x$with_jtreg" = xno; then
|
||||
# jtreg disabled
|
||||
AC_MSG_CHECKING([for jtreg])
|
||||
AC_MSG_RESULT(no)
|
||||
else
|
||||
if test "x$with_jtreg" != xyes; then
|
||||
# with path specified.
|
||||
JT_HOME="$with_jtreg"
|
||||
AC_MSG_CHECKING([for jtreg test harness])
|
||||
AC_MSG_RESULT([no, disabled])
|
||||
elif test "x$with_jtreg" != xyes && test "x$with_jtreg" != x; then
|
||||
# An explicit path is specified, use it.
|
||||
JT_HOME="$with_jtreg"
|
||||
if test ! -d "$JT_HOME"; then
|
||||
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg does not exist])
|
||||
fi
|
||||
|
||||
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
|
||||
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg is not a valid jtreg home])
|
||||
fi
|
||||
|
||||
JTREGEXE="$JT_HOME/bin/jtreg"
|
||||
if test ! -x "$JTREGEXE"; then
|
||||
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg does not contain valid jtreg executable])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for jtreg test harness])
|
||||
AC_MSG_RESULT([$JT_HOME])
|
||||
else
|
||||
# Try to locate jtreg
|
||||
if test "x$JT_HOME" != x; then
|
||||
AC_MSG_CHECKING([for jtreg])
|
||||
|
||||
# use JT_HOME enviroment var.
|
||||
BASIC_FIXUP_PATH([JT_HOME])
|
||||
|
||||
# jtreg win32 script works for everybody
|
||||
JTREGEXE="$JT_HOME/bin/jtreg"
|
||||
|
||||
if test ! -f "$JTREGEXE"; then
|
||||
AC_MSG_ERROR([JTReg executable does not exist: $JTREGEXE])
|
||||
# JT_HOME set in environment, use it
|
||||
if test ! -d "$JT_HOME"; then
|
||||
AC_MSG_WARN([Ignoring JT_HOME pointing to invalid directory: $JT_HOME])
|
||||
JT_HOME=
|
||||
else
|
||||
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
|
||||
AC_MSG_WARN([Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME])
|
||||
JT_HOME=
|
||||
elif test ! -x "$JT_HOME/bin/jtreg"; then
|
||||
AC_MSG_WARN([Ignoring JT_HOME which does not contain valid jtreg executable: $JT_HOME])
|
||||
JT_HOME=
|
||||
else
|
||||
JTREGEXE="$JT_HOME/bin/jtreg"
|
||||
AC_MSG_NOTICE([Located jtreg using JT_HOME from environment])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($JTREGEXE)
|
||||
if test "x$JT_HOME" = x; then
|
||||
# JT_HOME is not set in environment, or was deemed invalid.
|
||||
# Try to find jtreg on path
|
||||
BASIC_PATH_PROGS(JTREGEXE, jtreg)
|
||||
if test "x$JTREGEXE" != x; then
|
||||
# That's good, now try to derive JT_HOME
|
||||
JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)`
|
||||
if test ! -e "$JT_HOME/lib/jtreg.jar"; then
|
||||
AC_MSG_WARN([Ignoring jtreg from path since a valid jtreg home cannot be found])
|
||||
JT_HOME=
|
||||
JTREGEXE=
|
||||
else
|
||||
AC_MSG_NOTICE([Located jtreg using jtreg executable in path])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for jtreg test harness])
|
||||
if test "x$JT_HOME" != x; then
|
||||
AC_MSG_RESULT([$JT_HOME])
|
||||
else
|
||||
# try to find jtreg on path
|
||||
BASIC_REQUIRE_PROGS(JTREGEXE, jtreg)
|
||||
JT_HOME="`$DIRNAME $JTREGEXE`"
|
||||
AC_MSG_RESULT([no, not found])
|
||||
|
||||
if test "x$with_jtreg" = xyes; then
|
||||
AC_MSG_ERROR([--with-jtreg was specified, but no jtreg found.])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
BASIC_FIXUP_EXECUTABLE(JTREGEXE)
|
||||
BASIC_FIXUP_PATH(JT_HOME)
|
||||
AC_SUBST(JT_HOME)
|
||||
AC_SUBST(JTREGEXE)
|
||||
])
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2009, 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
|
||||
@ -183,7 +183,7 @@ trap 'nice_exit' EXIT
|
||||
|
||||
subrepos="corba jaxp jaxws langtools jdk hotspot nashorn"
|
||||
jdk_subrepos_extra="closed jdk/src/closed jdk/make/closed jdk/test/closed hotspot/make/closed hotspot/src/closed hotspot/test/closed"
|
||||
subrepos_extra="$jdk_subrepos_extra deploy install sponsors pubs"
|
||||
subrepos_extra="$jdk_subrepos_extra deploy install sponsors"
|
||||
|
||||
# Only look in specific locations for possible forests (avoids long searches)
|
||||
pull_default=""
|
||||
|
@ -997,7 +997,8 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
ext: "tar.gz",
|
||||
revision: "2.38.0-1+1.1",
|
||||
module: "graphviz-" + input.target_platform,
|
||||
configure_args: "DOT=" + input.get("graphviz", "install_path") + "/dot"
|
||||
configure_args: "DOT=" + input.get("graphviz", "install_path") + "/dot",
|
||||
environment_path: input.get("graphviz", "install_path")
|
||||
},
|
||||
|
||||
pandoc: {
|
||||
@ -1005,7 +1006,8 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
ext: "tar.gz",
|
||||
revision: "1.17.2+1.0",
|
||||
module: "pandoc-" + input.target_platform,
|
||||
configure_args: "PANDOC=" + input.get("pandoc", "install_path") + "/pandoc/pandoc"
|
||||
configure_args: "PANDOC=" + input.get("pandoc", "install_path") + "/pandoc/pandoc",
|
||||
environment_path: input.get("pandoc", "install_path") + "/pandoc"
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
<meta name="generator" content="pandoc" />
|
||||
<title>OpenJDK Build README</title>
|
||||
<style type="text/css">code{white-space: pre;}</style>
|
||||
<link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
|
@ -6,9 +6,8 @@
|
||||
<meta name="generator" content="pandoc" />
|
||||
<title>Testing OpenJDK</title>
|
||||
<style type="text/css">code{white-space: pre;}</style>
|
||||
<link rel="stylesheet" href="http://openjdk.java.net/page.css" type="text/css" />
|
||||
<link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
|
||||
<style type="text/css">pre, code, tt { color: #1d6ae5; }</style>
|
||||
<style type="text/css">pre { font-size: 10pt; }</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
|
@ -419,3 +419,6 @@ c7358d703e1282af3dcd8af6c037dc4342de9054 jdk-10+6
|
||||
43de67f51801b9e16507865fcb7e8344f4ca4aa9 jdk-9+167
|
||||
03a2cc9c8a1e8f87924c9863e917bc8b91770d5f jdk-9+168
|
||||
b2218d41edef02ee8f94bb438f885b2ba79bfa08 jdk-9+169
|
||||
8a4ab3b0ab9a86df73d9a1e337134f2dbe006725 jdk-9+170
|
||||
aed5a4edc8275c1c50195503756ff92bfe0197f5 jdk-10+7
|
||||
648b0a00824eb29e71936bc3258d309a25e3b8c0 jdk-10+8
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
@ -6,7 +6,7 @@
|
||||
<title>package</title>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2003, 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
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, 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
|
||||
@ -52,7 +52,7 @@ import org.omg.CORBA.portable.IDLEntity;
|
||||
* </OL>
|
||||
*
|
||||
* <P>
|
||||
* <a name="anyOps"></a>
|
||||
* <a id="anyOps"></a>
|
||||
* A large part of the <code>Any</code> class consists of pairs of methods
|
||||
* for inserting values into and extracting values from an
|
||||
* <code>Any</code> object.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2015, 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
|
||||
@ -85,13 +85,17 @@ import java.security.PrivilegedAction;
|
||||
* three {@code init} methods. Two of the three methods use the properties
|
||||
* (associations of a name with a value) shown in the
|
||||
* table below.<BR>
|
||||
* <TABLE BORDER=1 SUMMARY="Standard Java CORBA Properties">
|
||||
* <TR><TH>Property Name</TH> <TH>Property Value</TH></TR>
|
||||
* <TABLE class="plain">
|
||||
* <CAPTION>Standard Java CORBA Properties:</CAPTION>
|
||||
* <thead>
|
||||
* <TR><TH>Property Name</TH> <TH>Property Value</TH></TR>
|
||||
* </thead>
|
||||
* <tbody>
|
||||
* <TR><TD>org.omg.CORBA.ORBClass</TD>
|
||||
* <TD>class name of an ORB implementation</TD></TR>
|
||||
* <TR><TD>org.omg.CORBA.ORBSingletonClass</TD>
|
||||
* <TD>class name of the ORB returned by {@code init()}</TD></TR>
|
||||
* </tbody>
|
||||
* </TABLE>
|
||||
* <P>
|
||||
* These properties allow a different vendor's {@code ORB}
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html">
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html">
|
||||
|
@ -1,3 +1,4 @@
|
||||
<!doctype html>
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
@ -6,7 +7,7 @@
|
||||
<TITLE>package</TITLE>
|
||||
<!--
|
||||
/*
|
||||
* 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
|
||||
@ -31,9 +32,8 @@
|
||||
*/
|
||||
-->
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFFFF">
|
||||
Provides the mapping of the OMG CORBA APIs to the Java<SUP><FONT
|
||||
SIZE=-2>TM</FONT></SUP>
|
||||
<BODY>
|
||||
Provides the mapping of the OMG CORBA APIs to the Java™
|
||||
programming language, including the class <code>ORB</code>, which is implemented
|
||||
so that a programmer can use it as a fully-functional Object Request Broker
|
||||
(ORB).
|
||||
@ -427,7 +427,7 @@ will contain the static methods needed for manipulating instances of the type,
|
||||
in this case, <code>Account</code> objects.
|
||||
|
||||
|
||||
<a name="narrow"></a>
|
||||
<a id="narrow"></a>
|
||||
<h3>The <code>narrow</code> Method</h3>
|
||||
When an object is the return value for a method, it is returned in the
|
||||
form of a generic object, either an <code>org.omg.CORBA.Object</code> object
|
||||
@ -465,7 +465,7 @@ tutorial uses a <code>narrow</code> method that looks like this:
|
||||
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
|
||||
</PRE>
|
||||
|
||||
<a name="basic"></a>
|
||||
<a id="basic"></a>
|
||||
<h3>Example of a Basic Helper Class</h3>
|
||||
A basic helper class, for purposes of this explanation, is one with
|
||||
the methods that are provided by every helper class, plus a <code>narrow</code>
|
||||
@ -671,7 +671,7 @@ abstract public class AddressHelper
|
||||
WStringSeqHelper
|
||||
WStringValueHelper
|
||||
</code></PRE>
|
||||
<a name="adv"></a>
|
||||
<a id="adv"></a>
|
||||
<H1>
|
||||
Other Classes</H1>
|
||||
The other classes and interfaces in the <code>CORBA</code> package, which are
|
||||
@ -868,17 +868,17 @@ For overviews, guides, and a tutorial, please see:
|
||||
|
||||
|
||||
|
||||
<P><A NAME="unimpl"></A>
|
||||
<P><A id="unimpl"></A>
|
||||
<H1>
|
||||
CORBA Features Not Implemented in Java IDL</H1>
|
||||
|
||||
<P>Some of the API included in <code>org.omg</code> subpackages is provided for
|
||||
conformance with the current OMG CORBA specification but is not implemented
|
||||
in Sun's release of the JDK<SUP><FONT SIZE=-2>TM</FONT></SUP>. This enables
|
||||
in Sun's release of the JDK™. This enables
|
||||
other JDK licensees to provide implementations of this API in standard
|
||||
extensions and products.
|
||||
|
||||
<P><A NAME="NO_IMPLEMENT"></A>
|
||||
<P><A id="NO_IMPLEMENT"></A>
|
||||
<h2>Features That Throw NO_IMPLEMENT</h2>
|
||||
|
||||
<P>Some of the API included in <code>org.omg</code> subpackages throw
|
||||
|
@ -1,8 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<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
|
||||
@ -26,7 +26,7 @@ or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<body>
|
||||
|
||||
Provides a portability layer, that is, a set of ORB APIs
|
||||
that makes it possible for code generated
|
||||
@ -38,7 +38,7 @@ can call into these ORB APIs.
|
||||
|
||||
|
||||
<p>
|
||||
<a name="unimpl"></a>
|
||||
<a id="unimpl"></a>
|
||||
<hr>
|
||||
<h1>CORBA Features Throwing NO_IMPLEMENT() Exceptions</h1>
|
||||
<hr>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
@ -6,7 +6,7 @@
|
||||
<title>package</title>
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,7 +31,7 @@
|
||||
*/
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF">
|
||||
<body>
|
||||
The CORBA_2_3 package defines additions to existing CORBA interfaces
|
||||
in the Java[tm] Standard Edition 6. These changes occurred in recent
|
||||
revisions to the CORBA API defined by the OMG. The new methods were
|
||||
@ -46,7 +46,7 @@ the Java[tm] Platform, Standard Edition 6, ORB complies, see <A
|
||||
HREF="../CORBA/doc-files/compliance.html">Official Specifications for CORBA
|
||||
support in Java[tm] SE 6</A>.
|
||||
<P>
|
||||
<a name="unimpl"></a>
|
||||
<a id="unimpl"></a>
|
||||
The following methods in the abstract class
|
||||
<code>org.omg.CORBA_2_3.ORB</code> are unimplemented:
|
||||
<UL>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2015, 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
|
||||
@ -425,7 +425,7 @@ module IOP {
|
||||
* encoded using GIOP 1.2 with a TCS-W of UTF-16. This service context
|
||||
* may be sent on Reply messages with a reply_status of SYSTEM_EXCEPTION
|
||||
* or USER_EXCEPTION. The usage of this service context is defined
|
||||
* by language mappings. <br/> <br/>
|
||||
* by language mappings. <br> <br>
|
||||
*
|
||||
* IDL/Java: ptc/02-01-22: 1.15.2:
|
||||
* When a System Exception is marshaled, its GIOP Reply message shall
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2015, 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
|
||||
@ -580,7 +580,8 @@ module PortableInterceptor {
|
||||
* to access it will result in a <code>BAD_INV_ORDER</code> being thrown
|
||||
* with a standard minor code of 14.
|
||||
*
|
||||
* <table border=1 summary="Shows the validity of each attribute or operation">
|
||||
* <table class="plain">
|
||||
* <caption style="display:none">Shows the validity of each attribute or operation</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <th> </th>
|
||||
@ -597,42 +598,42 @@ module PortableInterceptor {
|
||||
* <td id="ri" colspan=6><i>Inherited from RequestInfo:</i></td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="req_id"><p align="left">request_id</p></th>
|
||||
* <tr><th id="req_id"><p style="text-align:left">request_id</p></th>
|
||||
* <td headers="ri req_id send_req">yes</td>
|
||||
* <td headers="ri req_id send_poll">yes</td>
|
||||
* <td headers="ri req_id rec_reply">yes</td>
|
||||
* <td headers="ri req_id rec_ex">yes</td>
|
||||
* <td headers="ri req_id rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="op"><p align="left">operation</p></th>
|
||||
* <tr><th id="op"><p style="text-align:left">operation</p></th>
|
||||
* <td headers="ri op send_req">yes</td>
|
||||
* <td headers="ri op send_poll">yes</td>
|
||||
* <td headers="ri op rec_reply">yes</td>
|
||||
* <td headers="ri op rec_ex">yes</td>
|
||||
* <td headers="ri op rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="arg"><p align="left">arguments</p></th>
|
||||
* <tr><th id="arg"><p style="text-align:left">arguments</p></th>
|
||||
* <td headers="ri arg send_req">yes<sub>1</sub></td>
|
||||
* <td headers="ri arg send_poll">no </td>
|
||||
* <td headers="ri arg rec_reply">yes</td>
|
||||
* <td headers="ri arg rec_ex">no </td>
|
||||
* <td headers="ri arg rec_oth">no </td></tr>
|
||||
*
|
||||
* <tr><th id="exc"><p align="left">exceptions</p></th>
|
||||
* <tr><th id="exc"><p style="text-align:left">exceptions</p></th>
|
||||
* <td headers="ri exc send_req">yes</td>
|
||||
* <td headers="ri exc send_poll">no </td>
|
||||
* <td headers="ri exc rec_reply">yes</td>
|
||||
* <td headers="ri exc rec_ex">yes</td>
|
||||
* <td headers="ri exc rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="con"><p align="left">contexts</p></th>
|
||||
* <tr><th id="con"><p style="text-align:left">contexts</p></th>
|
||||
* <td headers="ri con send_req">yes</td>
|
||||
* <td headers="ri con send_poll">no </td>
|
||||
* <td headers="ri con rec_reply">yes</td>
|
||||
* <td headers="ri con rec_ex">yes</td>
|
||||
* <td headers="ri con rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="op_con"><p align="left">operation_context</p></th>
|
||||
* <tr><th id="op_con"><p style="text-align:left">operation_context</p></th>
|
||||
* <td headers="ri op_con send_req">yes</td>
|
||||
* <td headers="ri op_con send_poll">no </td>
|
||||
* <td headers="ri op_con rec_reply">yes</td>
|
||||
@ -640,7 +641,7 @@ module PortableInterceptor {
|
||||
* <td headers="ri op_con rec_oth">yes</td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="result"><p align="left">result</p></th>
|
||||
* <tr><th id="result"><p style="text-align:left">result</p></th>
|
||||
* <td headers="ri result send_req">no </td>
|
||||
* <td headers="ri result send_poll">no </td>
|
||||
* <td headers="ri result rec_reply">yes</td>
|
||||
@ -648,14 +649,14 @@ module PortableInterceptor {
|
||||
* <td headers="ri result rec_oth">no </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="res_exp"><p align="left">response_expected</p></th>
|
||||
* <tr><th id="res_exp"><p style="text-align:left">response_expected</p></th>
|
||||
* <td headers="ri res_exp send_req">yes</td>
|
||||
* <td headers="ri res_exp send_poll">yes</td>
|
||||
* <td headers="ri res_exp rec_reply">yes</td>
|
||||
* <td headers="ri res_exp rec_ex">yes</td>
|
||||
* <td headers="ri res_exp rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="sync_sco"><p align="left">sync_scope</p></th>
|
||||
* <tr><th id="sync_sco"><p style="text-align:left">sync_scope</p></th>
|
||||
* <td headers="ri sync_sco send_req">yes</td>
|
||||
* <td headers="ri sync_sco send_poll">no </td>
|
||||
* <td headers="ri sync_sco rec_reply">yes</td>
|
||||
@ -663,14 +664,14 @@ module PortableInterceptor {
|
||||
* <td headers="ri sync_sco rec_oth">yes</td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="rep_stat"><p align="left">reply_status</p></th>
|
||||
* <tr><th id="rep_stat"><p style="text-align:left">reply_status</p></th>
|
||||
* <td headers="ri rep_stat send_req">no </td>
|
||||
* <td headers="ri rep_stat send_poll">no </td>
|
||||
* <td headers="ri rep_stat rec_reply">yes</td>
|
||||
* <td headers="ri rep_stat rec_ex">yes</td>
|
||||
* <td headers="ri rep_stat rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="for_ref"><p align="left">forward_reference</p></th>
|
||||
* <tr><th id="for_ref"><p style="text-align:left">forward_reference</p></th>
|
||||
* <td headers="ri for_ref send_req">no </td>
|
||||
* <td headers="ri for_ref send_poll">no </td>
|
||||
* <td headers="ri for_ref rec_reply">no </td>
|
||||
@ -678,21 +679,21 @@ module PortableInterceptor {
|
||||
* <td headers="ri for_ref rec_oth">yes<sub>2</sub>
|
||||
* </td></tr>
|
||||
*
|
||||
* <tr><th id="get_slot"><p align="left">get_slot</p></th>
|
||||
* <tr><th id="get_slot"><p style="text-align:left">get_slot</p></th>
|
||||
* <td headers="ri get_slot send_req">yes</td>
|
||||
* <td headers="ri get_slot send_poll">yes</td>
|
||||
* <td headers="ri get_slot rec_reply">yes</td>
|
||||
* <td headers="ri get_slot rec_ex">yes</td>
|
||||
* <td headers="ri get_slot rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="grsc"><p align="left">get_request_service_context</p></th>
|
||||
* <tr><th id="grsc"><p style="text-align:left">get_request_service_context</p></th>
|
||||
* <td headers="ri grsc send_req">yes</td>
|
||||
* <td headers="ri grsc send_poll">no </td>
|
||||
* <td headers="ri grsc rec_reply">yes</td>
|
||||
* <td headers="ri grsc rec_ex">yes</td>
|
||||
* <td headers="ri grsc rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="gpsc"><p align="left">get_reply_service_context</p></th>
|
||||
* <tr><th id="gpsc"><p style="text-align:left">get_reply_service_context</p></th>
|
||||
* <td headers="ri gpsc send_req">no </td>
|
||||
* <td headers="ri gpsc send_poll">no </td>
|
||||
* <td headers="ri gpsc rec_reply">yes</td>
|
||||
@ -704,14 +705,14 @@ module PortableInterceptor {
|
||||
* <td id="cri" colspan=6><i>ClientRequestInfo-specific:</i></td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="target"><p align="left">target</p></th>
|
||||
* <tr><th id="target"><p style="text-align:left">target</p></th>
|
||||
* <td headers="cri target send_req">yes</td>
|
||||
* <td headers="cri target send_poll">yes</td>
|
||||
* <td headers="cri target rec_reply">yes</td>
|
||||
* <td headers="cri target rec_ex">yes</td>
|
||||
* <td headers="cri target rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="eftarget"><p align="left">effective_target</p></th>
|
||||
* <tr><th id="eftarget"><p style="text-align:left">effective_target</p></th>
|
||||
* <td headers="cri eftarget send_req">yes</td>
|
||||
* <td headers="cri eftarget send_poll">yes</td>
|
||||
* <td headers="cri eftarget rec_reply">yes</td>
|
||||
@ -719,49 +720,49 @@ module PortableInterceptor {
|
||||
* <td headers="cri eftarget rec_oth">yes</td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="efprof"><p align="left">effective_profile</p></th>
|
||||
* <tr><th id="efprof"><p style="text-align:left">effective_profile</p></th>
|
||||
* <td headers="cri efprof send_req">yes</td>
|
||||
* <td headers="cri efprof send_poll">yes</td>
|
||||
* <td headers="cri efprof rec_reply">yes</td>
|
||||
* <td headers="cri efprof rec_ex">yes</td>
|
||||
* <td headers="cri efprof rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="rxp"><p align="left">received_exception</p></th>
|
||||
* <tr><th id="rxp"><p style="text-align:left">received_exception</p></th>
|
||||
* <td headers="cri rxp send_req">no </td>
|
||||
* <td headers="cri rxp send_poll">no </td>
|
||||
* <td headers="cri rxp rec_reply">no </td>
|
||||
* <td headers="cri rxp rec_ex">yes</td>
|
||||
* <td headers="cri rxp rec_oth">no </td></tr>
|
||||
*
|
||||
* <tr><th id="rei"><p align="left">received_exception_id</p></th>
|
||||
* <tr><th id="rei"><p style="text-align:left">received_exception_id</p></th>
|
||||
* <td headers="cri rei send_req">no </td>
|
||||
* <td headers="cri rei send_poll">no </td>
|
||||
* <td headers="cri rei rec_reply">no </td>
|
||||
* <td headers="cri rei rec_ex">yes</td>
|
||||
* <td headers="cri rei rec_oth">no </td></tr>
|
||||
*
|
||||
* <tr><th id="gec"><p align="left">get_effective_component</p></th>
|
||||
* <tr><th id="gec"><p style="text-align:left">get_effective_component</p></th>
|
||||
* <td headers="cri gec send_req">yes</td>
|
||||
* <td headers="cri gec send_poll">no </td>
|
||||
* <td headers="cri gec rec_reply">yes</td>
|
||||
* <td headers="cri gec rec_ex">yes</td>
|
||||
* <td headers="cri gec rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="gecs"><p align="left">get_effective_components</p></th>
|
||||
* <tr><th id="gecs"><p style="text-align:left">get_effective_components</p></th>
|
||||
* <td headers="cri gecs send_req">yes</td>
|
||||
* <td headers="cri gecs send_poll">no </td>
|
||||
* <td headers="cri gecs rec_reply">yes</td>
|
||||
* <td headers="cri gecs rec_ex">yes</td>
|
||||
* <td headers="cri gecs rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="grpcy"><p align="left">get_request_policy</p></th>
|
||||
* <tr><th id="grpcy"><p style="text-align:left">get_request_policy</p></th>
|
||||
* <td headers="cri grpcy send_req">yes</td>
|
||||
* <td headers="cri grpcy send_poll">no </td>
|
||||
* <td headers="cri grpcy rec_reply">yes</td>
|
||||
* <td headers="cri grpcy rec_ex">yes</td>
|
||||
* <td headers="cri grpcy rec_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="arsc"><p align="left">add_request_service_context</p></th>
|
||||
* <tr><th id="arsc"><p style="text-align:left">add_request_service_context</p></th>
|
||||
* <td headers="cri arsc send_req">yes</td>
|
||||
* <td headers="cri arsc send_poll">no </td>
|
||||
* <td headers="cri arsc rec_reply">no </td>
|
||||
@ -935,7 +936,8 @@ module PortableInterceptor {
|
||||
* standard minor code of 14.
|
||||
*
|
||||
*
|
||||
* <table border=1 summary="Shows the validity of each attribute or operation">
|
||||
* <table class="plain">
|
||||
* <caption style="display:none">Shows the validity of each attribute or operation</caption>
|
||||
* <thead>
|
||||
* <tr>
|
||||
* <th> </th>
|
||||
@ -953,21 +955,21 @@ module PortableInterceptor {
|
||||
* <td id="ri" colspan=6><i>Inherited from RequestInfo:</i></td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="req_id"><p align="left">request_id</p></th>
|
||||
* <tr><th id="req_id"><p style="text-align:left">request_id</p></th>
|
||||
* <td headers="ri req_id rec_req_ser_con">yes</td>
|
||||
* <td headers="ri req_id rec_req">yes</td>
|
||||
* <td headers="ri req_id send_rep">yes</td>
|
||||
* <td headers="ri req_id send_exc">yes</td>
|
||||
* <td headers="ri req_id send_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="op"><p align="left">operation</p></th>
|
||||
* <tr><th id="op"><p style="text-align:left">operation</p></th>
|
||||
* <td headers="ri op rec_req_ser_con">yes</td>
|
||||
* <td headers="ri op rec_req">yes</td>
|
||||
* <td headers="ri op send_rep">yes</td>
|
||||
* <td headers="ri op send_exc">yes</td>
|
||||
* <td headers="ri op send_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="args"><p align="left">arguments</p></th>
|
||||
* <tr><th id="args"><p style="text-align:left">arguments</p></th>
|
||||
* <td headers="ri args rec_req_ser_con">no </td>
|
||||
* <td headers="ri args rec_req">yes<sub>1</sub></td>
|
||||
* <td headers="ri args send_rep">yes</td>
|
||||
@ -975,21 +977,21 @@ module PortableInterceptor {
|
||||
* <td headers="ri args send_oth">no<sub>2</sub>
|
||||
* </td></tr>
|
||||
*
|
||||
* <tr><th id="exps"><p align="left">exceptions</p></th>
|
||||
* <tr><th id="exps"><p style="text-align:left">exceptions</p></th>
|
||||
* <td headers="ri exps rec_req_ser_con">no </td>
|
||||
* <td headers="ri exps rec_req">yes</td>
|
||||
* <td headers="ri exps send_rep">yes</td>
|
||||
* <td headers="ri exps send_exc">yes</td>
|
||||
* <td headers="ri exps send_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="contexts"><p align="left">contexts</p></th>
|
||||
* <tr><th id="contexts"><p style="text-align:left">contexts</p></th>
|
||||
* <td headers="ri contexts rec_req_ser_con">no </td>
|
||||
* <td headers="ri contexts rec_req">yes</td>
|
||||
* <td headers="ri contexts send_rep">yes</td>
|
||||
* <td headers="ri contexts send_exc">yes</td>
|
||||
* <td headers="ri contexts send_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="op_con"><p align="left">operation_context</p></th>
|
||||
* <tr><th id="op_con"><p style="text-align:left">operation_context</p></th>
|
||||
* <td headers="ri op_con rec_req_ser_con">no </td>
|
||||
* <td headers="ri op_con rec_req">yes</td>
|
||||
* <td headers="ri op_con send_rep">yes</td>
|
||||
@ -997,7 +999,7 @@ module PortableInterceptor {
|
||||
* <td headers="ri op_con send_oth">no </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="result"><p align="left">result</p></th>
|
||||
* <tr><th id="result"><p style="text-align:left">result</p></th>
|
||||
* <td headers="ri result rec_req_ser_con">no </td>
|
||||
* <td headers="ri result rec_req">no </td>
|
||||
* <td headers="ri result send_rep">yes</td>
|
||||
@ -1005,14 +1007,14 @@ module PortableInterceptor {
|
||||
* <td headers="ri result send_oth">no </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr><th id="res_ex"><p align="left">response_expected</p></th>
|
||||
* <tr><th id="res_ex"><p style="text-align:left">response_expected</p></th>
|
||||
* <td headers="ri res_ex rec_req_ser_con">yes</td>
|
||||
* <td headers="ri res_ex rec_req">yes</td>
|
||||
* <td headers="ri res_ex send_rep">yes</td>
|
||||
* <td headers="ri res_ex send_exc">yes</td>
|
||||
* <td headers="ri res_ex send_oth">yes</td></tr>
|
||||
*
|
||||
* <tr><th id="syn_scp"><p align="left">sync_scope</p></th>
|
||||
* <tr><th id="syn_scp"><p style="text-align:left">sync_scope</p></th>
|
||||
* <td headers="ri syn_scp rec_req_ser_con">yes</td>
|
||||
* <td headers="ri syn_scp rec_req">yes</td>
|
||||
* <td headers="ri syn_scp send_rep">yes</td>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2000, 2015, 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
|
||||
@ -29,7 +29,7 @@ questions.
|
||||
-->
|
||||
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<body>
|
||||
|
||||
Provides a mechanism to register ORB hooks through which ORB services
|
||||
can intercept the normal flow of execution of the ORB.
|
||||
@ -52,7 +52,7 @@ See the javadocs for class <code>
|
||||
{@link org.omg.PortableInterceptor.ORBInitializer ORBInitializer}</code>
|
||||
for how to go about registering interceptors.
|
||||
|
||||
<a name="unimpl"></a>
|
||||
<a id="unimpl"></a>
|
||||
<h2>Known limitations / unimplemented methods in package
|
||||
<code>org.omg.PortableInterceptor</code></h2>
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2000, 2015, 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
|
||||
@ -30,7 +30,7 @@
|
||||
-->
|
||||
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<body>
|
||||
Provides classes and interfaces for making the server side of your applications
|
||||
portable across multivendor ORBs.
|
||||
|
||||
@ -160,7 +160,7 @@ follows exactly the same pattern as the other holder classes for basic types.
|
||||
<A HREF="../../../../technotes/guides/idl/index.html">Java IDL home page</A>.
|
||||
|
||||
<H2>Example Code</H2>
|
||||
<a name="sampleserver"></a>
|
||||
<a id="sampleserver"></a>
|
||||
<H3>Example Server Code</H3>
|
||||
<PRE>
|
||||
import javax.naming.InitialContext;
|
||||
|
@ -579,3 +579,6 @@ c92c6416ca03b1464d5ed99cf6201e52b5ba0a70 jdk-9+165
|
||||
1ca7ed1b17b5776930d641d1379834f3140a74e4 jdk-9+167
|
||||
fbb9c802649585d19f6d7e81b4a519d44806225a jdk-9+168
|
||||
16d692be099c5c38eb48cc9aca78b0c900910d5b jdk-9+169
|
||||
38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170
|
||||
9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7
|
||||
f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8
|
||||
|
@ -1,22 +0,0 @@
|
||||
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License version 2 only, as
|
||||
published by the Free Software Foundation. Oracle designates this
|
||||
particular file as subject to the "Classpath" exception as provided
|
||||
by Oracle in the LICENSE file that accompanied this code.
|
||||
|
||||
This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
version 2 for more details (a copy is included in the LICENSE file that
|
||||
accompanied this code).
|
||||
|
||||
You should have received a copy of the GNU General Public License version
|
||||
2 along with this work; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
or visit www.oracle.com if you need additional information or have any
|
||||
questions.
|
@ -1,20 +0,0 @@
|
||||
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
|
||||
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.
|
@ -164,7 +164,7 @@ define_pd_global(intx, InitArrayShortSize, 9*BytesPerLong);
|
||||
product(bool, ZapMemory, false, "Write 0x0101... to empty memory." \
|
||||
" Use this to ease debugging.") \
|
||||
\
|
||||
/* Use Restricted Transactional Memory for lock eliding */ \
|
||||
/* Use Restricted Transactional Memory for lock elision */ \
|
||||
product(bool, UseRTMLocking, false, \
|
||||
"Enable RTM lock eliding for inflated locks in compiled code") \
|
||||
\
|
||||
@ -174,24 +174,30 @@ define_pd_global(intx, InitArrayShortSize, 9*BytesPerLong);
|
||||
product(bool, UseRTMDeopt, false, \
|
||||
"Perform deopt and recompilation based on RTM abort ratio") \
|
||||
\
|
||||
product(uintx, RTMRetryCount, 5, \
|
||||
product(int, RTMRetryCount, 5, \
|
||||
"Number of RTM retries on lock abort or busy") \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMSpinLoopCount, 100, \
|
||||
experimental(int, RTMSpinLoopCount, 100, \
|
||||
"Spin count for lock to become free before RTM retry") \
|
||||
range(0, 32767) /* immediate operand limit on ppc */ \
|
||||
\
|
||||
experimental(intx, RTMAbortThreshold, 1000, \
|
||||
experimental(int, RTMAbortThreshold, 1000, \
|
||||
"Calculate abort ratio after this number of aborts") \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMLockingThreshold, 10000, \
|
||||
experimental(int, RTMLockingThreshold, 10000, \
|
||||
"Lock count at which to do RTM lock eliding without " \
|
||||
"abort ratio calculation") \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMAbortRatio, 50, \
|
||||
experimental(int, RTMAbortRatio, 50, \
|
||||
"Lock abort ratio at which to stop use RTM lock eliding") \
|
||||
range(0, 100) /* natural range, checked in vm_version_ppc.cpp */ \
|
||||
\
|
||||
experimental(intx, RTMTotalCountIncrRate, 64, \
|
||||
experimental(int, RTMTotalCountIncrRate, 64, \
|
||||
"Increment total RTM attempted lock count once every n times") \
|
||||
range(1, 32767) /* immediate operand limit on ppc */ \
|
||||
\
|
||||
experimental(intx, RTMLockingCalculationDelay, 0, \
|
||||
"Number of milliseconds to wait before start calculating aborts " \
|
||||
|
@ -2498,14 +2498,20 @@ void MacroAssembler::rtm_abort_ratio_calculation(Register rtm_counters_Reg,
|
||||
// All transactions = total_count * RTMTotalCountIncrRate
|
||||
// Set no_rtm bit if (Aborted transactions >= All transactions * RTMAbortRatio)
|
||||
ld(R0, RTMLockingCounters::abort_count_offset(), rtm_counters_Reg);
|
||||
cmpdi(CCR0, R0, RTMAbortThreshold);
|
||||
blt(CCR0, L_check_always_rtm2);
|
||||
if (is_simm(RTMAbortThreshold, 16)) { // cmpdi can handle 16bit immediate only.
|
||||
cmpdi(CCR0, R0, RTMAbortThreshold);
|
||||
blt(CCR0, L_check_always_rtm2); // reload of rtm_counters_Reg not necessary
|
||||
} else {
|
||||
load_const_optimized(rtm_counters_Reg, RTMAbortThreshold);
|
||||
cmpd(CCR0, R0, rtm_counters_Reg);
|
||||
blt(CCR0, L_check_always_rtm1); // reload of rtm_counters_Reg required
|
||||
}
|
||||
mulli(R0, R0, 100);
|
||||
|
||||
const Register tmpReg = rtm_counters_Reg;
|
||||
ld(tmpReg, RTMLockingCounters::total_count_offset(), rtm_counters_Reg);
|
||||
mulli(tmpReg, tmpReg, RTMTotalCountIncrRate);
|
||||
mulli(tmpReg, tmpReg, RTMAbortRatio);
|
||||
mulli(tmpReg, tmpReg, RTMTotalCountIncrRate); // allowable range: int16
|
||||
mulli(tmpReg, tmpReg, RTMAbortRatio); // allowable range: int16
|
||||
cmpd(CCR0, R0, tmpReg);
|
||||
blt(CCR0, L_check_always_rtm1); // jump to reload
|
||||
if (method_data != NULL) {
|
||||
@ -2521,7 +2527,13 @@ void MacroAssembler::rtm_abort_ratio_calculation(Register rtm_counters_Reg,
|
||||
load_const_optimized(rtm_counters_Reg, (address)rtm_counters, R0); // reload
|
||||
bind(L_check_always_rtm2);
|
||||
ld(tmpReg, RTMLockingCounters::total_count_offset(), rtm_counters_Reg);
|
||||
cmpdi(CCR0, tmpReg, RTMLockingThreshold / RTMTotalCountIncrRate);
|
||||
int64_t thresholdValue = RTMLockingThreshold / RTMTotalCountIncrRate;
|
||||
if (is_simm(thresholdValue, 16)) { // cmpdi can handle 16bit immediate only.
|
||||
cmpdi(CCR0, tmpReg, thresholdValue);
|
||||
} else {
|
||||
load_const_optimized(R0, thresholdValue);
|
||||
cmpd(CCR0, tmpReg, R0);
|
||||
}
|
||||
blt(CCR0, L_done);
|
||||
if (method_data != NULL) {
|
||||
// Set rtm_state to "always rtm" in MDO.
|
||||
@ -2620,7 +2632,7 @@ void MacroAssembler::rtm_stack_locking(ConditionRegister flag,
|
||||
if (PrintPreciseRTMLockingStatistics || profile_rtm) {
|
||||
Label L_noincrement;
|
||||
if (RTMTotalCountIncrRate > 1) {
|
||||
branch_on_random_using_tb(tmp, (int)RTMTotalCountIncrRate, L_noincrement);
|
||||
branch_on_random_using_tb(tmp, RTMTotalCountIncrRate, L_noincrement);
|
||||
}
|
||||
assert(stack_rtm_counters != NULL, "should not be NULL when profiling RTM");
|
||||
load_const_optimized(tmp, (address)stack_rtm_counters->total_count_addr(), R0);
|
||||
@ -2687,7 +2699,7 @@ void MacroAssembler::rtm_inflated_locking(ConditionRegister flag,
|
||||
if (PrintPreciseRTMLockingStatistics || profile_rtm) {
|
||||
Label L_noincrement;
|
||||
if (RTMTotalCountIncrRate > 1) {
|
||||
branch_on_random_using_tb(R0, (int)RTMTotalCountIncrRate, L_noincrement);
|
||||
branch_on_random_using_tb(R0, RTMTotalCountIncrRate, L_noincrement);
|
||||
}
|
||||
assert(rtm_counters != NULL, "should not be NULL when profiling RTM");
|
||||
load_const(R0, (address)rtm_counters->total_count_addr(), tmpReg);
|
||||
|
@ -3720,7 +3720,7 @@ void TemplateTable::_new() {
|
||||
__ bge(CCR0, Lslow_case);
|
||||
|
||||
// Increment waste limit to prevent getting stuck on this slow path.
|
||||
__ addi(RtlabWasteLimitValue, RtlabWasteLimitValue, (int)ThreadLocalAllocBuffer::refill_waste_limit_increment());
|
||||
__ add_const_optimized(RtlabWasteLimitValue, RtlabWasteLimitValue, ThreadLocalAllocBuffer::refill_waste_limit_increment());
|
||||
__ std(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread);
|
||||
}
|
||||
// else: No allocation in the shared eden. // fallthru: __ b(Lslow_case);
|
||||
|
@ -160,25 +160,30 @@ define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
|
||||
product(bool, UseRTMDeopt, false, \
|
||||
"Perform deopt and recompilation based on RTM abort ratio") \
|
||||
\
|
||||
product(uintx, RTMRetryCount, 5, \
|
||||
product(int, RTMRetryCount, 5, \
|
||||
"Number of RTM retries on lock abort or busy") \
|
||||
range(0, max_uintx) \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMSpinLoopCount, 100, \
|
||||
experimental(int, RTMSpinLoopCount, 100, \
|
||||
"Spin count for lock to become free before RTM retry") \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMAbortThreshold, 1000, \
|
||||
experimental(int, RTMAbortThreshold, 1000, \
|
||||
"Calculate abort ratio after this number of aborts") \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMLockingThreshold, 10000, \
|
||||
experimental(int, RTMLockingThreshold, 10000, \
|
||||
"Lock count at which to do RTM lock eliding without " \
|
||||
"abort ratio calculation") \
|
||||
range(0, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMAbortRatio, 50, \
|
||||
experimental(int, RTMAbortRatio, 50, \
|
||||
"Lock abort ratio at which to stop use RTM lock eliding") \
|
||||
range(0, 100) /* natural range, checked in vm_version_x86.cpp */ \
|
||||
\
|
||||
experimental(intx, RTMTotalCountIncrRate, 64, \
|
||||
experimental(int, RTMTotalCountIncrRate, 64, \
|
||||
"Increment total RTM attempted lock count once every n times") \
|
||||
range(1, max_jint) \
|
||||
\
|
||||
experimental(intx, RTMLockingCalculationDelay, 0, \
|
||||
"Number of milliseconds to wait before start calculating aborts " \
|
||||
|
@ -1492,7 +1492,7 @@ void MacroAssembler::rtm_stack_locking(Register objReg, Register tmpReg, Registe
|
||||
Label L_noincrement;
|
||||
if (RTMTotalCountIncrRate > 1) {
|
||||
// tmpReg, scrReg and flags are killed
|
||||
branch_on_random_using_rdtsc(tmpReg, scrReg, (int)RTMTotalCountIncrRate, L_noincrement);
|
||||
branch_on_random_using_rdtsc(tmpReg, scrReg, RTMTotalCountIncrRate, L_noincrement);
|
||||
}
|
||||
assert(stack_rtm_counters != NULL, "should not be NULL when profiling RTM");
|
||||
atomic_incptr(ExternalAddress((address)stack_rtm_counters->total_count_addr()), scrReg);
|
||||
@ -1553,7 +1553,7 @@ void MacroAssembler::rtm_inflated_locking(Register objReg, Register boxReg, Regi
|
||||
Label L_noincrement;
|
||||
if (RTMTotalCountIncrRate > 1) {
|
||||
// tmpReg, scrReg and flags are killed
|
||||
branch_on_random_using_rdtsc(tmpReg, scrReg, (int)RTMTotalCountIncrRate, L_noincrement);
|
||||
branch_on_random_using_rdtsc(tmpReg, scrReg, RTMTotalCountIncrRate, L_noincrement);
|
||||
}
|
||||
assert(rtm_counters != NULL, "should not be NULL when profiling RTM");
|
||||
atomic_incptr(ExternalAddress((address)rtm_counters->total_count_addr()), scrReg);
|
||||
|
@ -1945,7 +1945,7 @@ void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
|
||||
if (can_be_compiled(m, comp_level)) {
|
||||
if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
|
||||
// Give sweeper a chance to keep up with CTW
|
||||
VM_ForceSafepoint op;
|
||||
VM_CTWThreshold op;
|
||||
VMThread::execute(&op);
|
||||
_codecache_sweep_counter = 0;
|
||||
}
|
||||
|
@ -315,7 +315,11 @@ oop StringTable::intern(const char* utf8_string, TRAPS) {
|
||||
}
|
||||
|
||||
void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
|
||||
buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed);
|
||||
BucketUnlinkContext context;
|
||||
buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), &context);
|
||||
_the_table->bulk_free_entries(&context);
|
||||
*processed = context._num_processed;
|
||||
*removed = context._num_removed;
|
||||
}
|
||||
|
||||
void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
|
||||
@ -324,6 +328,7 @@ void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_aliv
|
||||
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
|
||||
const int limit = the_table()->table_size();
|
||||
|
||||
BucketUnlinkContext context;
|
||||
for (;;) {
|
||||
// Grab next set of buckets to scan
|
||||
int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
|
||||
@ -333,8 +338,11 @@ void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_aliv
|
||||
}
|
||||
|
||||
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
|
||||
buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed);
|
||||
buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, &context);
|
||||
}
|
||||
_the_table->bulk_free_entries(&context);
|
||||
*processed = context._num_processed;
|
||||
*removed = context._num_removed;
|
||||
}
|
||||
|
||||
void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
|
||||
@ -360,7 +368,7 @@ void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
|
||||
}
|
||||
}
|
||||
|
||||
void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) {
|
||||
void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context) {
|
||||
const int limit = the_table()->table_size();
|
||||
|
||||
assert(0 <= start_idx && start_idx <= limit,
|
||||
@ -384,10 +392,9 @@ void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClos
|
||||
p = entry->next_addr();
|
||||
} else {
|
||||
*p = entry->next();
|
||||
the_table()->free_entry(entry);
|
||||
(*removed)++;
|
||||
context->free_entry(entry);
|
||||
}
|
||||
(*processed)++;
|
||||
context->_num_processed++;
|
||||
entry = *p;
|
||||
}
|
||||
}
|
||||
|
@ -61,9 +61,13 @@ private:
|
||||
// Apply the give oop closure to the entries to the buckets
|
||||
// in the range [start_idx, end_idx).
|
||||
static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
|
||||
|
||||
typedef StringTable::BucketUnlinkContext BucketUnlinkContext;
|
||||
// Unlink or apply the give oop closure to the entries to the buckets
|
||||
// in the range [start_idx, end_idx).
|
||||
static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed);
|
||||
// in the range [start_idx, end_idx). Unlinked bucket entries are collected in the given
|
||||
// context to be freed later.
|
||||
// This allows multiple threads to work on the table at once.
|
||||
static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context);
|
||||
|
||||
// Hashing algorithm, used as the hash value used by the
|
||||
// StringTable for bucket selection and comparison (stored in the
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2016, 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
|
||||
@ -98,7 +98,7 @@ int SymbolTable::_symbols_removed = 0;
|
||||
int SymbolTable::_symbols_counted = 0;
|
||||
volatile int SymbolTable::_parallel_claimed_idx = 0;
|
||||
|
||||
void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed) {
|
||||
void SymbolTable::buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context) {
|
||||
for (int i = start_idx; i < end_idx; ++i) {
|
||||
HashtableEntry<Symbol*, mtSymbol>** p = the_table()->bucket_addr(i);
|
||||
HashtableEntry<Symbol*, mtSymbol>* entry = the_table()->bucket(i);
|
||||
@ -111,15 +111,14 @@ void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int
|
||||
break;
|
||||
}
|
||||
Symbol* s = entry->literal();
|
||||
(*processed)++;
|
||||
context->_num_processed++;
|
||||
assert(s != NULL, "just checking");
|
||||
// If reference count is zero, remove.
|
||||
if (s->refcount() == 0) {
|
||||
assert(!entry->is_shared(), "shared entries should be kept live");
|
||||
delete s;
|
||||
(*removed)++;
|
||||
*p = entry->next();
|
||||
the_table()->free_entry(entry);
|
||||
context->free_entry(entry);
|
||||
} else {
|
||||
p = entry->next_addr();
|
||||
}
|
||||
@ -132,17 +131,20 @@ void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int
|
||||
// Remove unreferenced symbols from the symbol table
|
||||
// This is done late during GC.
|
||||
void SymbolTable::unlink(int* processed, int* removed) {
|
||||
size_t memory_total = 0;
|
||||
buckets_unlink(0, the_table()->table_size(), processed, removed);
|
||||
_symbols_removed += *removed;
|
||||
_symbols_counted += *processed;
|
||||
BucketUnlinkContext context;
|
||||
buckets_unlink(0, the_table()->table_size(), &context);
|
||||
_the_table->bulk_free_entries(&context);
|
||||
*processed = context._num_processed;
|
||||
*removed = context._num_removed;
|
||||
|
||||
_symbols_removed = context._num_removed;
|
||||
_symbols_counted = context._num_processed;
|
||||
}
|
||||
|
||||
void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
|
||||
const int limit = the_table()->table_size();
|
||||
|
||||
size_t memory_total = 0;
|
||||
|
||||
BucketUnlinkContext context;
|
||||
for (;;) {
|
||||
// Grab next set of buckets to scan
|
||||
int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
|
||||
@ -152,10 +154,15 @@ void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
|
||||
}
|
||||
|
||||
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
|
||||
buckets_unlink(start_idx, end_idx, processed, removed);
|
||||
buckets_unlink(start_idx, end_idx, &context);
|
||||
}
|
||||
Atomic::add(*processed, &_symbols_counted);
|
||||
Atomic::add(*removed, &_symbols_removed);
|
||||
|
||||
_the_table->bulk_free_entries(&context);
|
||||
*processed = context._num_processed;
|
||||
*removed = context._num_removed;
|
||||
|
||||
Atomic::add(context._num_processed, &_symbols_counted);
|
||||
Atomic::add(context._num_removed, &_symbols_removed);
|
||||
}
|
||||
|
||||
// Create a new table and using alternate hash code, populate the new table
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2016, 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
|
||||
@ -154,8 +154,11 @@ private:
|
||||
|
||||
static volatile int _parallel_claimed_idx;
|
||||
|
||||
// Release any dead symbols
|
||||
static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed);
|
||||
typedef SymbolTable::BucketUnlinkContext BucketUnlinkContext;
|
||||
// Release any dead symbols. Unlinked bucket entries are collected in the given
|
||||
// context to be freed later.
|
||||
// This allows multiple threads to work on the table at once.
|
||||
static void buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context);
|
||||
public:
|
||||
enum {
|
||||
symbol_alloc_batch_size = 8,
|
||||
|
@ -126,8 +126,8 @@ ICStub* InlineCacheBuffer::new_ic_stub() {
|
||||
// We do this by forcing a safepoint
|
||||
EXCEPTION_MARK;
|
||||
|
||||
VM_ForceSafepoint vfs;
|
||||
VMThread::execute(&vfs);
|
||||
VM_ICBufferFull ibf;
|
||||
VMThread::execute(&ibf);
|
||||
// We could potential get an async. exception at this point.
|
||||
// In that case we will rethrow it to ourselvs.
|
||||
if (HAS_PENDING_EXCEPTION) {
|
||||
|
@ -65,22 +65,6 @@ void Symbol::operator delete(void *p) {
|
||||
FreeHeap(p);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Symbol::equals
|
||||
//
|
||||
// Compares the symbol with a string of the given length.
|
||||
bool Symbol::equals(const char* str, int len) const {
|
||||
int l = utf8_length();
|
||||
if (l != len) return false;
|
||||
while (l-- > 0) {
|
||||
if (str[l] != (char) byte_at(l))
|
||||
return false;
|
||||
}
|
||||
assert(l == -1, "we should be at the beginning");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Symbol::starts_with
|
||||
//
|
||||
|
@ -175,7 +175,16 @@ class Symbol : public MetaspaceObj {
|
||||
int utf8_length() const { return _length; }
|
||||
|
||||
// Compares the symbol with a string.
|
||||
bool equals(const char* str, int len) const;
|
||||
bool equals(const char* str, int len) const {
|
||||
int l = utf8_length();
|
||||
if (l != len) return false;
|
||||
while (l-- > 0) {
|
||||
if (str[l] != (char) byte_at(l))
|
||||
return false;
|
||||
}
|
||||
assert(l == -1, "we should be at the beginning");
|
||||
return true;
|
||||
}
|
||||
bool equals(const char* str) const { return equals(str, (int) strlen(str)); }
|
||||
|
||||
// Tests if the symbol starts with the given prefix.
|
||||
|
@ -420,37 +420,38 @@
|
||||
develop(bool, InlineWarmCalls, false, \
|
||||
"Use a heat-based priority queue to govern inlining") \
|
||||
\
|
||||
/* Max values must not exceed WarmCallInfo::MAX_VALUE(). */ \
|
||||
develop(intx, HotCallCountThreshold, 999999, \
|
||||
"large numbers of calls (per method invocation) force hotness") \
|
||||
range(0, max_intx) \
|
||||
range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, HotCallProfitThreshold, 999999, \
|
||||
"highly profitable inlining opportunities force hotness") \
|
||||
range(0, max_intx) \
|
||||
range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, HotCallTrivialWork, -1, \
|
||||
"trivial execution time (no larger than this) forces hotness") \
|
||||
range(-1, max_intx) \
|
||||
range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, HotCallTrivialSize, -1, \
|
||||
"trivial methods (no larger than this) force calls to be hot") \
|
||||
range(-1, max_intx) \
|
||||
range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, WarmCallMinCount, -1, \
|
||||
"number of calls (per method invocation) to enable inlining") \
|
||||
range(-1, max_intx) \
|
||||
range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, WarmCallMinProfit, -1, \
|
||||
"number of calls (per method invocation) to enable inlining") \
|
||||
range(-1, max_intx) \
|
||||
range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, WarmCallMaxWork, 999999, \
|
||||
"execution time of the largest inlinable method") \
|
||||
range(0, max_intx) \
|
||||
range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
develop(intx, WarmCallMaxSize, 999999, \
|
||||
"size of the largest inlinable method") \
|
||||
range(0, max_intx) \
|
||||
range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
|
||||
\
|
||||
product(intx, MaxNodeLimit, 80000, \
|
||||
"Maximum number of nodes") \
|
||||
|
@ -985,8 +985,8 @@ JvmtiEnv::SuspendThreadList(jint request_count, const jthread* request_list, jvm
|
||||
results[i] = JVMTI_ERROR_NONE; // indicate successful suspend
|
||||
}
|
||||
if (needSafepoint > 0) {
|
||||
VM_ForceSafepoint vfs;
|
||||
VMThread::execute(&vfs);
|
||||
VM_ThreadsSuspendJVMTI tsj;
|
||||
VMThread::execute(&tsj);
|
||||
}
|
||||
// per-thread suspend results returned via results parameter
|
||||
return JVMTI_ERROR_NONE;
|
||||
|
@ -276,14 +276,15 @@ Flag::Error OptoLoopAlignmentConstraintFunc(intx value, bool verbose) {
|
||||
return Flag::VIOLATES_CONSTRAINT;
|
||||
}
|
||||
|
||||
#ifdef SPARC
|
||||
// Relevant on ppc, s390, sparc. Will be optimized where
|
||||
// addr_unit() == 1.
|
||||
if (OptoLoopAlignment % relocInfo::addr_unit() != 0) {
|
||||
CommandLineError::print(verbose,
|
||||
"OptoLoopAlignment (" INTX_FORMAT ") must be "
|
||||
"multiple of NOP size\n");
|
||||
"multiple of NOP size (%d)\n",
|
||||
value, relocInfo::addr_unit());
|
||||
return Flag::VIOLATES_CONSTRAINT;
|
||||
}
|
||||
#endif
|
||||
|
||||
return Flag::SUCCESS;
|
||||
}
|
||||
|
@ -396,9 +396,7 @@ void SafepointSynchronize::begin() {
|
||||
GCLocker::set_jni_lock_count(_current_jni_active_count);
|
||||
|
||||
if (log_is_enabled(Debug, safepoint)) {
|
||||
VM_Operation *op = VMThread::vm_operation();
|
||||
log_debug(safepoint)("Entering safepoint region: %s",
|
||||
(op != NULL) ? op->name() : "no vm operation");
|
||||
log_debug(safepoint)("Entering safepoint region: %s", VMThread::vm_safepoint_description());
|
||||
}
|
||||
|
||||
RuntimeService::record_safepoint_synchronized();
|
||||
@ -845,10 +843,8 @@ void SafepointSynchronize::print_safepoint_timeout(SafepointTimeoutReason reason
|
||||
// To debug the long safepoint, specify both DieOnSafepointTimeout &
|
||||
// ShowMessageBoxOnError.
|
||||
if (DieOnSafepointTimeout) {
|
||||
VM_Operation *op = VMThread::vm_operation();
|
||||
fatal("Safepoint sync time longer than " INTX_FORMAT "ms detected when executing %s.",
|
||||
SafepointTimeoutDelay,
|
||||
op != NULL ? op->name() : "no vm operation");
|
||||
SafepointTimeoutDelay, VMThread::vm_safepoint_description());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1063,7 +1063,7 @@ static void InduceScavenge(Thread * Self, const char * Whence) {
|
||||
// Must VM_Operation instance be heap allocated as the op will be enqueue and posted
|
||||
// to the VMthread and have a lifespan longer than that of this activation record.
|
||||
// The VMThread will delete the op when completed.
|
||||
VMThread::execute(new VM_ForceAsyncSafepoint());
|
||||
VMThread::execute(new VM_ScavengeMonitors());
|
||||
|
||||
if (ObjectMonitor::Knob_Verbose) {
|
||||
tty->print_cr("INFO: Monitor scavenge - STW posted @%s (%d)",
|
||||
|
@ -2275,7 +2275,7 @@ void JavaThread::java_suspend() {
|
||||
}
|
||||
}
|
||||
|
||||
VM_ForceSafepoint vm_suspend;
|
||||
VM_ThreadSuspend vm_suspend;
|
||||
VMThread::execute(&vm_suspend);
|
||||
}
|
||||
|
||||
|
@ -676,7 +676,7 @@ typedef RehashableHashtable<Symbol*, mtSymbol> RehashableSymbolHashtable;
|
||||
\
|
||||
nonstatic_field(BasicHashtable<mtInternal>, _table_size, int) \
|
||||
nonstatic_field(BasicHashtable<mtInternal>, _buckets, HashtableBucket<mtInternal>*) \
|
||||
nonstatic_field(BasicHashtable<mtInternal>, _free_list, BasicHashtableEntry<mtInternal>*) \
|
||||
volatile_nonstatic_field(BasicHashtable<mtInternal>, _free_list, BasicHashtableEntry<mtInternal>*) \
|
||||
nonstatic_field(BasicHashtable<mtInternal>, _first_free_entry, char*) \
|
||||
nonstatic_field(BasicHashtable<mtInternal>, _end_block, char*) \
|
||||
nonstatic_field(BasicHashtable<mtInternal>, _entry_size, int) \
|
||||
|
@ -204,6 +204,7 @@ VMThread* VMThread::_vm_thread = NULL;
|
||||
VM_Operation* VMThread::_cur_vm_operation = NULL;
|
||||
VMOperationQueue* VMThread::_vm_queue = NULL;
|
||||
PerfCounter* VMThread::_perf_accumulated_vm_operation_time = NULL;
|
||||
const char* VMThread::_no_op_reason = NULL;
|
||||
|
||||
|
||||
void VMThread::create() {
|
||||
@ -273,6 +274,7 @@ void VMThread::run() {
|
||||
}
|
||||
|
||||
// 4526887 let VM thread exit at Safepoint
|
||||
_no_op_reason = "Halt";
|
||||
SafepointSynchronize::begin();
|
||||
|
||||
if (VerifyBeforeExit) {
|
||||
@ -380,6 +382,25 @@ void VMThread::evaluate_operation(VM_Operation* op) {
|
||||
}
|
||||
}
|
||||
|
||||
bool VMThread::no_op_safepoint_needed(bool check_time) {
|
||||
if (SafepointALot) {
|
||||
_no_op_reason = "SafepointALot";
|
||||
return true;
|
||||
}
|
||||
if (!SafepointSynchronize::is_cleanup_needed()) {
|
||||
return false;
|
||||
}
|
||||
if (check_time) {
|
||||
long interval = SafepointSynchronize::last_non_safepoint_interval();
|
||||
bool max_time_exceeded = GuaranteedSafepointInterval != 0 &&
|
||||
(interval > GuaranteedSafepointInterval);
|
||||
if (!max_time_exceeded) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
_no_op_reason = "Cleanup";
|
||||
return true;
|
||||
}
|
||||
|
||||
void VMThread::loop() {
|
||||
assert(_cur_vm_operation == NULL, "no current one should be executing");
|
||||
@ -418,8 +439,7 @@ void VMThread::loop() {
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (timedout && (SafepointALot ||
|
||||
SafepointSynchronize::is_cleanup_needed())) {
|
||||
if (timedout && VMThread::no_op_safepoint_needed(false)) {
|
||||
MutexUnlockerEx mul(VMOperationQueue_lock,
|
||||
Mutex::_no_safepoint_check_flag);
|
||||
// Force a safepoint since we have not had one for at least
|
||||
@ -542,14 +562,10 @@ void VMThread::loop() {
|
||||
//
|
||||
// We want to make sure that we get to a safepoint regularly.
|
||||
//
|
||||
if (SafepointALot || SafepointSynchronize::is_cleanup_needed()) {
|
||||
long interval = SafepointSynchronize::last_non_safepoint_interval();
|
||||
bool max_time_exceeded = GuaranteedSafepointInterval != 0 && (interval > GuaranteedSafepointInterval);
|
||||
if (SafepointALot || max_time_exceeded) {
|
||||
HandleMark hm(VMThread::vm_thread());
|
||||
SafepointSynchronize::begin();
|
||||
SafepointSynchronize::end();
|
||||
}
|
||||
if (VMThread::no_op_safepoint_needed(true)) {
|
||||
HandleMark hm(VMThread::vm_thread());
|
||||
SafepointSynchronize::begin();
|
||||
SafepointSynchronize::end();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -99,7 +99,12 @@ class VMThread: public NamedThread {
|
||||
static Monitor * _terminate_lock;
|
||||
static PerfCounter* _perf_accumulated_vm_operation_time;
|
||||
|
||||
static const char* _no_op_reason;
|
||||
|
||||
static bool no_op_safepoint_needed(bool check_time);
|
||||
|
||||
void evaluate_operation(VM_Operation* op);
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
VMThread();
|
||||
@ -126,7 +131,10 @@ class VMThread: public NamedThread {
|
||||
static void execute(VM_Operation* op);
|
||||
|
||||
// Returns the current vm operation if any.
|
||||
static VM_Operation* vm_operation() { return _cur_vm_operation; }
|
||||
static VM_Operation* vm_operation() { return _cur_vm_operation; }
|
||||
|
||||
// Returns the current vm operation name or set reason
|
||||
static const char* vm_safepoint_description() { return _cur_vm_operation != NULL ? _cur_vm_operation->name() : _no_op_reason; };
|
||||
|
||||
// Returns the single instance of VMThread.
|
||||
static VMThread* vm_thread() { return _vm_thread; }
|
||||
|
@ -106,6 +106,11 @@
|
||||
template(MarkActiveNMethods) \
|
||||
template(PrintCompileQueue) \
|
||||
template(PrintClassHierarchy) \
|
||||
template(ThreadSuspend) \
|
||||
template(CTWThreshold) \
|
||||
template(ThreadsSuspendJVMTI) \
|
||||
template(ICBufferFull) \
|
||||
template(ScavengeMonitors) \
|
||||
|
||||
class VM_Operation: public CHeapObj<mtInternal> {
|
||||
public:
|
||||
@ -238,20 +243,41 @@ class VM_ClearICs: public VM_Operation {
|
||||
VMOp_Type type() const { return VMOp_ClearICs; }
|
||||
};
|
||||
|
||||
// dummy vm op, evaluated just to force a safepoint
|
||||
// empty vm op, evaluated just to force a safepoint
|
||||
class VM_ForceSafepoint: public VM_Operation {
|
||||
public:
|
||||
VM_ForceSafepoint() {}
|
||||
void doit() {}
|
||||
VMOp_Type type() const { return VMOp_ForceSafepoint; }
|
||||
};
|
||||
|
||||
// dummy vm op, evaluated just to force a safepoint
|
||||
class VM_ForceAsyncSafepoint: public VM_Operation {
|
||||
// empty vm op, when forcing a safepoint to suspend a thread
|
||||
class VM_ThreadSuspend: public VM_ForceSafepoint {
|
||||
public:
|
||||
VM_ForceAsyncSafepoint() {}
|
||||
void doit() {}
|
||||
VMOp_Type type() const { return VMOp_ForceAsyncSafepoint; }
|
||||
VMOp_Type type() const { return VMOp_ThreadSuspend; }
|
||||
};
|
||||
|
||||
// empty vm op, when forcing a safepoint due to ctw threshold is reached for the sweeper
|
||||
class VM_CTWThreshold: public VM_ForceSafepoint {
|
||||
public:
|
||||
VMOp_Type type() const { return VMOp_CTWThreshold; }
|
||||
};
|
||||
|
||||
// empty vm op, when forcing a safepoint to suspend threads from jvmti
|
||||
class VM_ThreadsSuspendJVMTI: public VM_ForceSafepoint {
|
||||
public:
|
||||
VMOp_Type type() const { return VMOp_ThreadsSuspendJVMTI; }
|
||||
};
|
||||
|
||||
// empty vm op, when forcing a safepoint due to inline cache buffers being full
|
||||
class VM_ICBufferFull: public VM_ForceSafepoint {
|
||||
public:
|
||||
VMOp_Type type() const { return VMOp_ICBufferFull; }
|
||||
};
|
||||
|
||||
// empty asynchronous vm op, when forcing a safepoint to scavenge monitors
|
||||
class VM_ScavengeMonitors: public VM_ForceSafepoint {
|
||||
public:
|
||||
VMOp_Type type() const { return VMOp_ScavengeMonitors; }
|
||||
Mode evaluation_mode() const { return _async_safepoint; }
|
||||
bool is_cheap_allocated() const { return true; }
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 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
|
||||
@ -97,7 +97,7 @@ bool MallocSiteTable::initialize() {
|
||||
|
||||
// Instantiate hash entry for hashtable entry allocation callsite
|
||||
MallocSiteHashtableEntry* entry = ::new ((void*)_hash_entry_allocation_site)
|
||||
MallocSiteHashtableEntry(*stack);
|
||||
MallocSiteHashtableEntry(*stack, mtNMT);
|
||||
|
||||
// Add the allocation site to hashtable.
|
||||
int index = hash_to_index(stack->hash());
|
||||
@ -134,14 +134,15 @@ bool MallocSiteTable::walk(MallocSiteWalker* walker) {
|
||||
* Under any of above circumstances, caller should handle the situation.
|
||||
*/
|
||||
MallocSite* MallocSiteTable::lookup_or_add(const NativeCallStack& key, size_t* bucket_idx,
|
||||
size_t* pos_idx) {
|
||||
size_t* pos_idx, MEMFLAGS flags) {
|
||||
assert(flags != mtNone, "Should have a real memory type");
|
||||
unsigned int index = hash_to_index(key.hash());
|
||||
*bucket_idx = (size_t)index;
|
||||
*pos_idx = 0;
|
||||
|
||||
// First entry for this hash bucket
|
||||
if (_table[index] == NULL) {
|
||||
MallocSiteHashtableEntry* entry = new_entry(key);
|
||||
MallocSiteHashtableEntry* entry = new_entry(key, flags);
|
||||
// OOM check
|
||||
if (entry == NULL) return NULL;
|
||||
|
||||
@ -156,13 +157,12 @@ MallocSite* MallocSiteTable::lookup_or_add(const NativeCallStack& key, size_t* b
|
||||
MallocSiteHashtableEntry* head = _table[index];
|
||||
while (head != NULL && (*pos_idx) <= MAX_BUCKET_LENGTH) {
|
||||
MallocSite* site = head->data();
|
||||
if (site->equals(key)) {
|
||||
// found matched entry
|
||||
if (site->flags() == flags && site->equals(key)) {
|
||||
return head->data();
|
||||
}
|
||||
|
||||
if (head->next() == NULL && (*pos_idx) < MAX_BUCKET_LENGTH) {
|
||||
MallocSiteHashtableEntry* entry = new_entry(key);
|
||||
MallocSiteHashtableEntry* entry = new_entry(key, flags);
|
||||
// OOM check
|
||||
if (entry == NULL) return NULL;
|
||||
if (head->atomic_insert(entry)) {
|
||||
@ -191,10 +191,10 @@ MallocSite* MallocSiteTable::malloc_site(size_t bucket_idx, size_t pos_idx) {
|
||||
// Allocates MallocSiteHashtableEntry object. Special call stack
|
||||
// (pre-installed allocation site) has to be used to avoid infinite
|
||||
// recursion.
|
||||
MallocSiteHashtableEntry* MallocSiteTable::new_entry(const NativeCallStack& key) {
|
||||
MallocSiteHashtableEntry* MallocSiteTable::new_entry(const NativeCallStack& key, MEMFLAGS flags) {
|
||||
void* p = AllocateHeap(sizeof(MallocSiteHashtableEntry), mtNMT,
|
||||
*hash_entry_allocation_stack(), AllocFailStrategy::RETURN_NULL);
|
||||
return ::new (p) MallocSiteHashtableEntry(key);
|
||||
return ::new (p) MallocSiteHashtableEntry(key, flags);
|
||||
}
|
||||
|
||||
void MallocSiteTable::reset() {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 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,12 +37,16 @@
|
||||
// MallocSite represents a code path that eventually calls
|
||||
// os::malloc() to allocate memory
|
||||
class MallocSite : public AllocationSite<MemoryCounter> {
|
||||
private:
|
||||
MEMFLAGS _flags;
|
||||
|
||||
public:
|
||||
MallocSite() :
|
||||
AllocationSite<MemoryCounter>(NativeCallStack::EMPTY_STACK) { }
|
||||
AllocationSite<MemoryCounter>(NativeCallStack::EMPTY_STACK), _flags(mtNone) {}
|
||||
|
||||
MallocSite(const NativeCallStack& stack, MEMFLAGS flags) :
|
||||
AllocationSite<MemoryCounter>(stack), _flags(flags) {}
|
||||
|
||||
MallocSite(const NativeCallStack& stack) :
|
||||
AllocationSite<MemoryCounter>(stack) { }
|
||||
|
||||
void allocate(size_t size) { data()->allocate(size); }
|
||||
void deallocate(size_t size) { data()->deallocate(size); }
|
||||
@ -51,6 +55,7 @@ class MallocSite : public AllocationSite<MemoryCounter> {
|
||||
size_t size() const { return peek()->size(); }
|
||||
// The number of calls were made
|
||||
size_t count() const { return peek()->count(); }
|
||||
MEMFLAGS flags() const { return (MEMFLAGS)_flags; }
|
||||
};
|
||||
|
||||
// Malloc site hashtable entry
|
||||
@ -62,8 +67,10 @@ class MallocSiteHashtableEntry : public CHeapObj<mtNMT> {
|
||||
public:
|
||||
MallocSiteHashtableEntry() : _next(NULL) { }
|
||||
|
||||
MallocSiteHashtableEntry(const NativeCallStack& stack):
|
||||
_malloc_site(stack), _next(NULL) { }
|
||||
MallocSiteHashtableEntry(NativeCallStack stack, MEMFLAGS flags):
|
||||
_malloc_site(stack, flags), _next(NULL) {
|
||||
assert(flags != mtNone, "Expect a real memory type");
|
||||
}
|
||||
|
||||
inline const MallocSiteHashtableEntry* next() const {
|
||||
return _next;
|
||||
@ -198,11 +205,11 @@ class MallocSiteTable : AllStatic {
|
||||
// 1. out of memory
|
||||
// 2. overflow hash bucket
|
||||
static inline bool allocation_at(const NativeCallStack& stack, size_t size,
|
||||
size_t* bucket_idx, size_t* pos_idx) {
|
||||
size_t* bucket_idx, size_t* pos_idx, MEMFLAGS flags) {
|
||||
AccessLock locker(&_access_count);
|
||||
if (locker.sharedLock()) {
|
||||
NOT_PRODUCT(_peak_count = MAX2(_peak_count, _access_count);)
|
||||
MallocSite* site = lookup_or_add(stack, bucket_idx, pos_idx);
|
||||
MallocSite* site = lookup_or_add(stack, bucket_idx, pos_idx, flags);
|
||||
if (site != NULL) site->allocate(size);
|
||||
return site != NULL;
|
||||
}
|
||||
@ -228,13 +235,13 @@ class MallocSiteTable : AllStatic {
|
||||
static bool walk_malloc_site(MallocSiteWalker* walker);
|
||||
|
||||
private:
|
||||
static MallocSiteHashtableEntry* new_entry(const NativeCallStack& key);
|
||||
static MallocSiteHashtableEntry* new_entry(const NativeCallStack& key, MEMFLAGS flags);
|
||||
static void reset();
|
||||
|
||||
// Delete a bucket linked list
|
||||
static void delete_linked_list(MallocSiteHashtableEntry* head);
|
||||
|
||||
static MallocSite* lookup_or_add(const NativeCallStack& key, size_t* bucket_idx, size_t* pos_idx);
|
||||
static MallocSite* lookup_or_add(const NativeCallStack& key, size_t* bucket_idx, size_t* pos_idx, MEMFLAGS flags);
|
||||
static MallocSite* malloc_site(size_t bucket_idx, size_t pos_idx);
|
||||
static bool walk(MallocSiteWalker* walker);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 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
|
||||
@ -77,8 +77,8 @@ void MallocHeader::release() const {
|
||||
}
|
||||
|
||||
bool MallocHeader::record_malloc_site(const NativeCallStack& stack, size_t size,
|
||||
size_t* bucket_idx, size_t* pos_idx) const {
|
||||
bool ret = MallocSiteTable::allocation_at(stack, size, bucket_idx, pos_idx);
|
||||
size_t* bucket_idx, size_t* pos_idx, MEMFLAGS flags) const {
|
||||
bool ret = MallocSiteTable::allocation_at(stack, size, bucket_idx, pos_idx, flags);
|
||||
|
||||
// Something went wrong, could be OOM or overflow malloc site table.
|
||||
// We want to keep tracking data under OOM circumstance, so transition to
|
||||
|
@ -275,7 +275,7 @@ class MallocHeader VALUE_OBJ_CLASS_SPEC {
|
||||
if (level == NMT_detail) {
|
||||
size_t bucket_idx;
|
||||
size_t pos_idx;
|
||||
if (record_malloc_site(stack, size, &bucket_idx, &pos_idx)) {
|
||||
if (record_malloc_site(stack, size, &bucket_idx, &pos_idx, flags)) {
|
||||
assert(bucket_idx <= MAX_MALLOCSITE_TABLE_SIZE, "Overflow bucket index");
|
||||
assert(pos_idx <= MAX_BUCKET_LENGTH, "Overflow bucket position index");
|
||||
_bucket_idx = bucket_idx;
|
||||
@ -299,7 +299,7 @@ class MallocHeader VALUE_OBJ_CLASS_SPEC {
|
||||
_size = size;
|
||||
}
|
||||
bool record_malloc_site(const NativeCallStack& stack, size_t size,
|
||||
size_t* bucket_idx, size_t* pos_idx) const;
|
||||
size_t* bucket_idx, size_t* pos_idx, MEMFLAGS flags) const;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
@ -43,11 +43,16 @@ void MemReporterBase::print_total(size_t reserved, size_t committed) const {
|
||||
amount_in_current_scale(reserved), scale, amount_in_current_scale(committed), scale);
|
||||
}
|
||||
|
||||
void MemReporterBase::print_malloc(size_t amount, size_t count) const {
|
||||
void MemReporterBase::print_malloc(size_t amount, size_t count, MEMFLAGS flag) const {
|
||||
const char* scale = current_scale();
|
||||
outputStream* out = output();
|
||||
out->print("(malloc=" SIZE_FORMAT "%s",
|
||||
amount_in_current_scale(amount), scale);
|
||||
if (flag != mtNone) {
|
||||
out->print("(malloc=" SIZE_FORMAT "%s type=%s",
|
||||
amount_in_current_scale(amount), scale, NMTUtil::flag_to_name(flag));
|
||||
} else {
|
||||
out->print("(malloc=" SIZE_FORMAT "%s",
|
||||
amount_in_current_scale(amount), scale);
|
||||
}
|
||||
|
||||
if (count > 0) {
|
||||
out->print(" #" SIZE_FORMAT "", count);
|
||||
@ -200,7 +205,10 @@ void MemDetailReporter::report_malloc_sites() {
|
||||
const NativeCallStack* stack = malloc_site->call_stack();
|
||||
stack->print_on(out);
|
||||
out->print("%29s", " ");
|
||||
print_malloc(malloc_site->size(), malloc_site->count());
|
||||
MEMFLAGS flag = malloc_site->flags();
|
||||
assert((flag >= 0 && flag < (int)mt_number_of_types) && flag != mtNone,
|
||||
"Must have a valid memory type");
|
||||
print_malloc(malloc_site->size(), malloc_site->count(),flag);
|
||||
out->print_cr("\n");
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
@ -76,7 +76,7 @@ class MemReporterBase : public StackObj {
|
||||
|
||||
// Print summary total, malloc and virtual memory
|
||||
void print_total(size_t reserved, size_t committed) const;
|
||||
void print_malloc(size_t amount, size_t count) const;
|
||||
void print_malloc(size_t amount, size_t count, MEMFLAGS flag = mtNone) const;
|
||||
void print_virtual_memory(size_t reserved, size_t committed) const;
|
||||
|
||||
void print_malloc_line(size_t amount, size_t count) const;
|
||||
|
@ -159,6 +159,35 @@ template <MEMFLAGS F> void BasicHashtable<F>::free_buckets() {
|
||||
}
|
||||
}
|
||||
|
||||
template <MEMFLAGS F> void BasicHashtable<F>::BucketUnlinkContext::free_entry(BasicHashtableEntry<F>* entry) {
|
||||
entry->set_next(_removed_head);
|
||||
_removed_head = entry;
|
||||
if (_removed_tail == NULL) {
|
||||
_removed_tail = entry;
|
||||
}
|
||||
_num_removed++;
|
||||
}
|
||||
|
||||
template <MEMFLAGS F> void BasicHashtable<F>::bulk_free_entries(BucketUnlinkContext* context) {
|
||||
if (context->_num_removed == 0) {
|
||||
assert(context->_removed_head == NULL && context->_removed_tail == NULL,
|
||||
"Zero entries in the unlink context, but elements linked from " PTR_FORMAT " to " PTR_FORMAT,
|
||||
p2i(context->_removed_head), p2i(context->_removed_tail));
|
||||
return;
|
||||
}
|
||||
|
||||
// MT-safe add of the list of BasicHashTableEntrys from the context to the free list.
|
||||
BasicHashtableEntry<F>* current = _free_list;
|
||||
while (true) {
|
||||
context->_removed_tail->set_next(current);
|
||||
BasicHashtableEntry<F>* old = (BasicHashtableEntry<F>*)Atomic::cmpxchg_ptr(context->_removed_head, &_free_list, current);
|
||||
if (old == current) {
|
||||
break;
|
||||
}
|
||||
current = old;
|
||||
}
|
||||
Atomic::add(-context->_num_removed, &_number_of_entries);
|
||||
}
|
||||
|
||||
// Copy the table to the shared space.
|
||||
|
||||
@ -192,7 +221,6 @@ template <MEMFLAGS F> void BasicHashtable<F>::copy_table(char** top, char* end)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <class T, MEMFLAGS F> int RehashableHashtable<T, F>::literal_size(Symbol *symbol) {
|
||||
return symbol->size() * HeapWordSize;
|
||||
}
|
||||
|
@ -162,11 +162,11 @@ private:
|
||||
// Instance variables
|
||||
int _table_size;
|
||||
HashtableBucket<F>* _buckets;
|
||||
BasicHashtableEntry<F>* _free_list;
|
||||
BasicHashtableEntry<F>* volatile _free_list;
|
||||
char* _first_free_entry;
|
||||
char* _end_block;
|
||||
int _entry_size;
|
||||
int _number_of_entries;
|
||||
volatile int _number_of_entries;
|
||||
|
||||
protected:
|
||||
|
||||
@ -211,6 +211,24 @@ protected:
|
||||
// Free the buckets in this hashtable
|
||||
void free_buckets();
|
||||
|
||||
// Helper data structure containing context for the bucket entry unlink process,
|
||||
// storing the unlinked buckets in a linked list.
|
||||
// Also avoids the need to pass around these four members as parameters everywhere.
|
||||
struct BucketUnlinkContext {
|
||||
int _num_processed;
|
||||
int _num_removed;
|
||||
// Head and tail pointers for the linked list of removed entries.
|
||||
BasicHashtableEntry<F>* _removed_head;
|
||||
BasicHashtableEntry<F>* _removed_tail;
|
||||
|
||||
BucketUnlinkContext() : _num_processed(0), _num_removed(0), _removed_head(NULL), _removed_tail(NULL) {
|
||||
}
|
||||
|
||||
void free_entry(BasicHashtableEntry<F>* entry);
|
||||
};
|
||||
// Add of bucket entries linked together in the given context to the global free list. This method
|
||||
// is mt-safe wrt. to other calls of this method.
|
||||
void bulk_free_entries(BucketUnlinkContext* context);
|
||||
public:
|
||||
int table_size() { return _table_size; }
|
||||
void set_entry(int index, BasicHashtableEntry<F>* entry);
|
||||
|
@ -24,7 +24,7 @@
|
||||
import static jdk.test.lib.Asserts.assertEQ;
|
||||
import static jdk.test.lib.Asserts.assertFalse;
|
||||
import static jdk.test.lib.Asserts.assertTrue;
|
||||
import jdk.test.lib.DynamicVMOption;
|
||||
import jdk.test.lib.management.DynamicVMOption;
|
||||
|
||||
/**
|
||||
* @test TestDynMaxHeapFreeRatio
|
||||
|
@ -38,7 +38,7 @@
|
||||
import static jdk.test.lib.Asserts.assertEQ;
|
||||
import static jdk.test.lib.Asserts.assertFalse;
|
||||
import static jdk.test.lib.Asserts.assertTrue;
|
||||
import jdk.test.lib.DynamicVMOption;
|
||||
import jdk.test.lib.management.DynamicVMOption;
|
||||
|
||||
public class TestDynMinHeapFreeRatio {
|
||||
|
||||
|
@ -26,7 +26,7 @@ import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import jdk.test.lib.ByteCodeLoader;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.Platform;
|
||||
|
||||
import sun.management.ManagementFactoryHelper;
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @library /test/lib /
|
||||
* @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -Xmx1g -verbose:gc TestDynShrinkHeap
|
||||
*/
|
||||
import jdk.test.lib.DynamicVMOption;
|
||||
import jdk.test.lib.management.DynamicVMOption;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.MemoryUsage;
|
||||
import java.util.ArrayList;
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @run main BootstrapRedefine
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
*/
|
||||
|
||||
import jdk.test.lib.Asserts;
|
||||
import jdk.test.lib.DynamicVMOption;
|
||||
import jdk.test.lib.management.DynamicVMOption;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.dcmd.PidJcmdExecutor;
|
||||
|
@ -29,7 +29,7 @@ import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import jdk.test.lib.DynamicVMOption;
|
||||
import jdk.test.lib.management.DynamicVMOption;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.dcmd.CommandExecutor;
|
||||
@ -383,7 +383,11 @@ public abstract class JVMOption {
|
||||
runJava.add(VMType);
|
||||
}
|
||||
|
||||
if (GCType != null) {
|
||||
if (GCType != null &&
|
||||
!(prepend.contains("-XX:+UseConcMarkSweepGC") ||
|
||||
prepend.contains("-XX:+UseSerialGC") ||
|
||||
prepend.contains("-XX:+UseParallelGC") ||
|
||||
prepend.contains("-XX:+UseG1GC"))) {
|
||||
runJava.add(GCType);
|
||||
}
|
||||
|
||||
|
@ -242,6 +242,9 @@ public class JVMOptionsUtils {
|
||||
option.addPrepend("-XX:SharedArchiveFile=TestOptionsWithRanges.jsa");
|
||||
option.addPrepend("-Xshare:dump");
|
||||
break;
|
||||
case "TLABWasteIncrement":
|
||||
option.addPrepend("-XX:+UseParallelGC");
|
||||
break;
|
||||
default:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
@ -51,7 +51,7 @@ import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import jdk.test.lib.Asserts;
|
||||
import jdk.test.lib.DynamicVMOption;
|
||||
import jdk.test.lib.management.DynamicVMOption;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -34,15 +34,14 @@
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.NoSuchFieldException;
|
||||
import java.lang.NoSuchMethodException;
|
||||
import java.lang.RuntimeException;
|
||||
import java.lang.instrument.ClassDefinition;
|
||||
import java.lang.instrument.ClassFileTransformer;
|
||||
import java.lang.instrument.IllegalClassFormatException;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.security.ProtectionDomain;
|
||||
import jdk.test.lib.*;
|
||||
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
|
||||
public class ModifyAnonymous {
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 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,7 +30,7 @@
|
||||
* java.management
|
||||
* @run main/othervm -XX:+UnlockDiagnosticVMOptions DumpSymbolAndStringTable
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.JDKToolFinder;
|
||||
@ -42,7 +42,7 @@ public class DumpSymbolAndStringTable {
|
||||
|
||||
ProcessBuilder pb = new ProcessBuilder();
|
||||
pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.symboltable", "-verbose"});
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "jcmd-symboltable");
|
||||
try {
|
||||
output.shouldContain("24 2: DumpSymbolAndStringTable\n");
|
||||
} catch (RuntimeException e) {
|
||||
@ -50,7 +50,7 @@ public class DumpSymbolAndStringTable {
|
||||
}
|
||||
|
||||
pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.stringtable", "-verbose"});
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output = CDSTestUtils.executeAndLog(pb, "jcmd-stringtable");
|
||||
try {
|
||||
output.shouldContain("16: java.lang.String\n");
|
||||
} catch (RuntimeException e) {
|
||||
|
@ -40,7 +40,6 @@ import jdk.test.lib.Platform;
|
||||
|
||||
public class LargeSharedSpace {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb;
|
||||
OutputAnalyzer output;
|
||||
|
||||
// Test case 1: -XX:SharedMiscCodeSize=1066924031
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 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,6 +31,7 @@
|
||||
* @run main LimitSharedSizes
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.Platform;
|
||||
@ -150,7 +151,7 @@ public class LimitSharedSizes {
|
||||
option,
|
||||
"-Xshare:dump");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "dump" + counter);
|
||||
|
||||
switch (td.getResult()) {
|
||||
case VALID:
|
||||
@ -167,22 +168,14 @@ public class LimitSharedSizes {
|
||||
"-XX:+PrintSharedArchiveAndExit",
|
||||
"-version");
|
||||
|
||||
try {
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("archive is valid");
|
||||
} catch (RuntimeException e) {
|
||||
// if sharing failed due to ASLR or similar reasons,
|
||||
// check whether sharing was attempted at all (UseSharedSpaces)
|
||||
if ((output.getOutput().contains("Unable to use shared archive") ||
|
||||
output.getOutput().contains("Unable to map ReadOnly shared space at required address.") ||
|
||||
output.getOutput().contains("Unable to map ReadWrite shared space at required address.") ||
|
||||
output.getOutput().contains("Unable to reserve shared space at required address")) &&
|
||||
output.getExitValue() == 1) {
|
||||
System.out.println("Unable to use shared archive: test not executed; assumed passed");
|
||||
continue;
|
||||
}
|
||||
output = CDSTestUtils.executeAndLog(pb, "use" + counter);
|
||||
if(CDSTestUtils.isUnableToMap(output)) {
|
||||
System.out.println("Unable to use shared archive: " +
|
||||
"test not executed; assumed passed");
|
||||
continue;
|
||||
} else {
|
||||
output.shouldHaveExitValue(0);
|
||||
}
|
||||
output.shouldHaveExitValue(0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -30,15 +30,16 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class MaxMetaspaceSize {
|
||||
public static void main(String[] args) throws Exception {
|
||||
String msg = "is not large enough.\n" +
|
||||
"Either don't specify the -XX:MaxMetaspaceSize=<size>\n" +
|
||||
"or increase the size to at least";
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:MaxMetaspaceSize=10m", "-Xshare:dump");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("is not large enough.\nEither don't specify the -XX:MaxMetaspaceSize=<size>\nor increase the size to at least");
|
||||
output.shouldHaveExitValue(2);
|
||||
CDSTestUtils.executeAndLog(pb, "dump").shouldContain(msg).shouldHaveExitValue(2);
|
||||
}
|
||||
}
|
||||
|
@ -95,17 +95,11 @@ public class SASymbolTableTest {
|
||||
"--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.tools=ALL-UNNAMED",
|
||||
"SASymbolTableTestAgent",
|
||||
Long.toString(pid));
|
||||
OutputAnalyzer output = ProcessTools.executeProcess(tool);
|
||||
System.out.println("STDOUT[");
|
||||
System.out.println(output.getOutput());
|
||||
OutputAnalyzer output = CDSTestUtils.executeAndLog(tool, "tool");
|
||||
if (output.getStdout().contains("connected too early")) {
|
||||
System.out.println("SymbolTable not created by VM - test skipped");
|
||||
return;
|
||||
}
|
||||
System.out.println("]");
|
||||
System.out.println("STDERR[");
|
||||
System.out.print(output.getStderr());
|
||||
System.out.println("]");
|
||||
output.shouldHaveExitValue(0);
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException("Test ERROR " + ex, ex);
|
||||
|
@ -32,8 +32,8 @@
|
||||
*/
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.io.InputStream;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import static jdk.test.lib.Asserts.*;
|
||||
|
||||
|
@ -31,12 +31,9 @@
|
||||
* @run main NestedUnsafe
|
||||
*/
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.io.InputStream;
|
||||
import java.lang.*;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import static jdk.test.lib.Asserts.*;
|
||||
|
||||
// package p;
|
||||
|
||||
|
@ -34,11 +34,10 @@
|
||||
|
||||
package p;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.io.InputStream;
|
||||
import java.lang.*;
|
||||
import jdk.test.lib.*;
|
||||
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
|
||||
|
||||
// Test that an anonymous class in package 'p' cannot define its own anonymous class
|
||||
|
@ -34,11 +34,10 @@
|
||||
|
||||
package p;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.io.InputStream;
|
||||
import java.lang.*;
|
||||
import jdk.test.lib.*;
|
||||
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
|
||||
|
||||
// Test that an anonymous class that gets put in its host's package cannot define
|
||||
|
@ -33,7 +33,7 @@
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
@ -38,8 +38,7 @@
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import java.io.File;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
|
||||
public class ModuleStress {
|
||||
|
||||
|
@ -30,10 +30,9 @@
|
||||
* @run main PatchModule2Dirs
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import java.io.File;
|
||||
|
||||
public class PatchModule2Dirs {
|
||||
|
||||
|
@ -31,8 +31,7 @@
|
||||
* @run main PatchModuleCDS
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @run main PatchModuleJavaBase
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @run main PatchModuleTest
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @run main PatchModuleTestJar
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -32,8 +32,8 @@
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -32,8 +32,7 @@
|
||||
* @run main PatchModuleTraceCL
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -36,7 +36,7 @@ import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @run main/othervm XbootcpNoVisibility
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
@ -36,7 +36,7 @@ import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* @run main/native NoClassDefFoundMsg
|
||||
*/
|
||||
|
||||
import jdk.test.lib.InMemoryJavaCompiler;
|
||||
import jdk.test.lib.compiler.InMemoryJavaCompiler;
|
||||
import jdk.internal.misc.Unsafe;
|
||||
|
||||
public class NoClassDefFoundMsg {
|
||||
|
@ -419,3 +419,6 @@ ac697b2bdf486ef18caad2092bd24036e14946ac jdk-10+5
|
||||
646567dcfa64b9a39b33d71330427737d1c1a0d5 jdk-9+167
|
||||
23a87f409371fb8ce7b764cccb3a74c3f6b29900 jdk-9+168
|
||||
5d9d2a65fb26aa183019346c11d9314819621665 jdk-9+169
|
||||
6e78f902f477a093afca85a1042f97410d01eb69 jdk-9+170
|
||||
09cae4c36242734f5450de739b8264523a030809 jdk-10+7
|
||||
856998840907b67b7e1fc49259f785ac085a189b jdk-10+8
|
||||
|
@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -22,14 +23,6 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: FeatureState.java 3024 2011-03-01 03:46:13Z joehw $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xerces.internal.util;
|
||||
|
||||
public class FeatureState {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
|
@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -22,13 +23,6 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: PropertyState.java 3024 2011-03-01 03:46:13Z joehw $
|
||||
*/
|
||||
package com.sun.org.apache.xerces.internal.util;
|
||||
|
||||
public class PropertyState {
|
||||
|
@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -22,13 +23,6 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: Status.java 3024 2011-03-01 03:46:13Z joehw $
|
||||
*/
|
||||
package com.sun.org.apache.xerces.internal.util;
|
||||
|
||||
public enum Status {
|
||||
|
@ -1,32 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
* THIS FILE WAS MODIFIED BY SUN MICROSYSTEMS, INC.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.sun.xml.internal.stream.dtd.nonvalidating;
|
||||
|
@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,48 +22,45 @@ 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.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>javax.xml.transform.stax</title>
|
||||
<head>
|
||||
<title>javax.xml.transform.stax</title>
|
||||
|
||||
<meta name="CVS"
|
||||
content="$Id: package.html,v 1.2 2005/11/03 19:34:28 jeffsuttor Exp $" />
|
||||
<meta name="AUTHOR"
|
||||
content="Jeff.Suttor@Sun.com" />
|
||||
<meta name="AUTHOR"
|
||||
content="Neeraj.Bajaj@Sun.com" />
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Provides for StAX-specific transformation APIs.
|
||||
TODO: better description(s).
|
||||
</p>
|
||||
<meta name="CVS"
|
||||
content="$Id: package.html,v 1.2 2005/11/03 19:34:28 jeffsuttor Exp $" />
|
||||
<meta name="AUTHOR"
|
||||
content="Jeff.Suttor@Sun.com" />
|
||||
<meta name="AUTHOR"
|
||||
content="Neeraj.Bajaj@Sun.com" />
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
This package implements StAX-specific transformation APIs. It provides
|
||||
classes which allow input from a StAX reader, that is,
|
||||
{@link javax.xml.stream.XMLStreamReader} or {@link javax.xml.stream.XMLEventReader},
|
||||
and output to a StAX writer, that is,
|
||||
{@link javax.xml.stream.XMLStreamWriter} or {@link javax.xml.stream.XMLEventWriter}.
|
||||
</p>
|
||||
<p>
|
||||
The {@link javax.xml.transform.stax.StAXSource} class encapsulates a
|
||||
{@link javax.xml.stream.XMLStreamReader} or {@link javax.xml.stream.XMLEventReader}
|
||||
and can be used as an input where a {@link javax.xml.transform.Source}
|
||||
object is accepted.
|
||||
</p>
|
||||
<p>
|
||||
The {@link javax.xml.transform.stax.StAXResult} class encapsulates a
|
||||
{@link javax.xml.stream.XMLStreamWriter} or {@link javax.xml.stream.XMLEventWriter}
|
||||
and can be used as an output where a {@link javax.xml.transform.Result}
|
||||
object is accepted.
|
||||
</p>
|
||||
|
||||
<h2>Package Specification</h2>
|
||||
<ul>
|
||||
<li><a href="http://jcp.org/en/jsr/detail?id=173">JSR 173: Streaming API for XML</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Related Documentation</h2>
|
||||
|
||||
<p>For overviews, tutorials, examples, guides, and tool documentation, please see:</p>
|
||||
<ul>
|
||||
<li><a href="">TODO: Refer to non-spec documentation</a></li>
|
||||
</ul>
|
||||
|
||||
<!-- Put @see and @since tags down here. -->
|
||||
<ul>
|
||||
<li>@see XMLStreamReader</li>
|
||||
<li>@see XMLEventReader</li>
|
||||
</ul>
|
||||
|
||||
@since 1.6
|
||||
</body>
|
||||
@since 1.6
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
@ -422,3 +422,6 @@ ac7e572a6a6ba5bbd7e6aa94a289f88cc86256a4 jdk-10+4
|
||||
1c610f1b4097c64cdd722a7fb59f5a4d9cc15ca9 jdk-9+167
|
||||
2746716dcc5a8c28ccf41df0c8fb620b1a1e7098 jdk-9+168
|
||||
912cf69806d518c5af7fba30b340c4cb5458dd22 jdk-9+169
|
||||
e75d3abe579a7b39b762fc0a1a337c49eb072d82 jdk-9+170
|
||||
b0efae7df1dfa14926058baebaf999e4268c955c jdk-10+7
|
||||
e705867d9989d00e4357f66f18b302c95e13b5e7 jdk-10+8
|
||||
|
@ -419,3 +419,6 @@ d1436b2945383cef15edbdba9bb41ef1656c987b jdk-10+5
|
||||
7828aedcb525df40b7c8122bcc3f997c75ebaf7f jdk-9+167
|
||||
e78da9db6299b3fcba49300d52e2359e82fdd218 jdk-9+168
|
||||
177436a54ca13730ffc725a6e5dbfcd9486f3da3 jdk-9+169
|
||||
ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170
|
||||
cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7
|
||||
f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8
|
||||
|
@ -291,9 +291,21 @@ endif
|
||||
|
||||
################################################################################
|
||||
|
||||
ifneq ($(filter images, $(MAKECMDGOALS)), )
|
||||
$(eval $(call SetupCopyFiles, COPY_TO_TEST_IMAGE, \
|
||||
SRC := $(SUPPORT_OUTPUTDIR)/demos/image, \
|
||||
DEST := $(TEST_IMAGE_DIR)/jdk/demos, \
|
||||
FILES := $(call DoubleDollar, $(call CacheFind, $(SUPPORT_OUTPUTDIR)/demos/image)), \
|
||||
))
|
||||
|
||||
IMAGES_TARGETS := $(COPY_TO_TEST_IMAGE)
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Hook to include the corresponding custom file, if present.
|
||||
$(eval $(call IncludeCustomExtension, jdk, CompileDemos.gmk))
|
||||
|
||||
all: $(TARGETS)
|
||||
images: $(IMAGES_TARGETS)
|
||||
|
||||
.PHONY: all
|
||||
|
@ -23,21 +23,33 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
default: all
|
||||
|
||||
include $(SPEC)
|
||||
include MakeBase.gmk
|
||||
include JavaCompilation.gmk
|
||||
include SetupJavaCompilers.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
TOOLS_CLASSES_DIR := $(BUILDTOOLS_OUTPUTDIR)/tools_jigsaw_classes
|
||||
|
||||
$(eval $(call SetupJavaCompilation,BUILD_JIGSAW_TOOLS, \
|
||||
SETUP := GENERATE_USINGJDKBYTECODE, \
|
||||
SRC := $(JDK_TOPDIR)/make/src/classes, \
|
||||
INCLUDES := build/tools/deps \
|
||||
build/tools/docs \
|
||||
build/tools/jigsaw, \
|
||||
COPY := .properties .html, \
|
||||
BIN := $(TOOLS_CLASSES_DIR), \
|
||||
ADD_JAVAC_FLAGS := \
|
||||
--add-modules jdk.jdeps \
|
||||
--add-exports java.base/jdk.internal.module=ALL-UNNAMED \
|
||||
--add-exports jdk.jdeps/com.sun.tools.jdeps=ALL-UNNAMED \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_JIGSAW_TOOLS)
|
||||
|
||||
################################################################################
|
||||
|
||||
all: $(TARGETS)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user