OpenJDK / portola / portola
changeset 27828:0fc73cd5d893
Merge
author | duke |
---|---|
date | Wed, 05 Jul 2017 20:09:40 +0200 |
parents | 5e4ae56d68ac e2e575ceb846 |
children | 413d643357c0 |
files | hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/EdenSpace.java hotspot/make/solaris/makefiles/add_gnu_debuglink.make hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make hotspot/src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c hotspot/src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c hotspot/test/compiler/5057225/Test5057225.java hotspot/test/compiler/5091921/Test5091921.java hotspot/test/compiler/5091921/Test6186134.java hotspot/test/compiler/5091921/Test6196102.java hotspot/test/compiler/5091921/Test6357214.java hotspot/test/compiler/5091921/Test6559156.java hotspot/test/compiler/5091921/Test6753639.java hotspot/test/compiler/5091921/Test6850611.java hotspot/test/compiler/5091921/Test6890943.java hotspot/test/compiler/5091921/Test6897150.java hotspot/test/compiler/5091921/Test6905845.java hotspot/test/compiler/5091921/Test6931567.java hotspot/test/compiler/5091921/Test6935022.java hotspot/test/compiler/5091921/Test6959129.java hotspot/test/compiler/5091921/Test6985295.java hotspot/test/compiler/5091921/Test6992759.java hotspot/test/compiler/5091921/Test7005594.java hotspot/test/compiler/5091921/Test7005594.sh hotspot/test/compiler/5091921/Test7020614.java hotspot/test/compiler/5091921/input6890943.txt hotspot/test/compiler/5091921/output6890943.txt hotspot/test/compiler/6340864/TestByteVect.java hotspot/test/compiler/6340864/TestDoubleVect.java hotspot/test/compiler/6340864/TestFloatVect.java hotspot/test/compiler/6340864/TestIntVect.java hotspot/test/compiler/6340864/TestLongVect.java hotspot/test/compiler/6340864/TestShortVect.java hotspot/test/compiler/6378821/Test6378821.java hotspot/test/compiler/6431242/Test.java hotspot/test/compiler/6443505/Test6443505.java hotspot/test/compiler/6478991/NullCheckTest.java hotspot/test/compiler/6539464/Test.java hotspot/test/compiler/6579789/Test6579789.java hotspot/test/compiler/6589834/InlinedArrayCloneTestCase.java hotspot/test/compiler/6589834/Test_ia32.java hotspot/test/compiler/6603011/Test.java hotspot/test/compiler/6636138/Test1.java hotspot/test/compiler/6636138/Test2.java hotspot/test/compiler/6646019/Test.java hotspot/test/compiler/6646020/Tester.java hotspot/test/compiler/6659207/Test.java hotspot/test/compiler/6661247/Test.java hotspot/test/compiler/6663621/IVTest.java hotspot/test/compiler/6663848/Tester.java hotspot/test/compiler/6663854/Test6663854.java hotspot/test/compiler/6689060/Test.java hotspot/test/compiler/6695810/Test.java hotspot/test/compiler/6700047/Test6700047.java hotspot/test/compiler/6711100/Test.java hotspot/test/compiler/6711117/Test.java hotspot/test/compiler/6712835/Test6712835.java hotspot/test/compiler/6714694/Tester.java hotspot/test/compiler/6716441/Tester.java hotspot/test/compiler/6724218/Test.java hotspot/test/compiler/6726999/Test.java hotspot/test/compiler/6732154/Test6732154.java hotspot/test/compiler/6741738/Tester.java hotspot/test/compiler/6756768/Test6756768.java hotspot/test/compiler/6756768/Test6756768_2.java hotspot/test/compiler/6757316/Test6757316.java hotspot/test/compiler/6758234/Test6758234.java hotspot/test/compiler/6769124/TestArrayCopy6769124.java hotspot/test/compiler/6769124/TestDeoptInt6769124.java hotspot/test/compiler/6769124/TestUnalignedLoad6769124.java hotspot/test/compiler/6772683/InterruptedTest.java hotspot/test/compiler/6775880/Test.java hotspot/test/compiler/6778657/Test.java hotspot/test/compiler/6792161/Test6792161.java hotspot/test/compiler/6795161/Test.java hotspot/test/compiler/6795362/Test6795362.java hotspot/test/compiler/6795465/Test6795465.java hotspot/test/compiler/6796786/Test6796786.java hotspot/test/compiler/6797305/Test6797305.java hotspot/test/compiler/6799693/Test.java hotspot/test/compiler/6800154/Test6800154.java hotspot/test/compiler/6805724/Test6805724.java hotspot/test/compiler/6814842/Test6814842.java hotspot/test/compiler/6823354/Test6823354.java hotspot/test/compiler/6823453/Test.java hotspot/test/compiler/6826736/Test.java hotspot/test/compiler/6832293/Test.java hotspot/test/compiler/6833129/Test.java hotspot/test/compiler/6837011/Test6837011.java hotspot/test/compiler/6837094/Test.java hotspot/test/compiler/6843752/Test.java hotspot/test/compiler/6849574/Test.java hotspot/test/compiler/6851282/Test.java hotspot/test/compiler/6852078/Test6852078.java hotspot/test/compiler/6855164/Test.java hotspot/test/compiler/6855215/Test6855215.java hotspot/test/compiler/6857159/Test6857159.java hotspot/test/compiler/6857159/Test6857159.sh hotspot/test/compiler/6859338/Test6859338.java hotspot/test/compiler/6860469/Test.java hotspot/test/compiler/6863155/Test6863155.java hotspot/test/compiler/6863420/Test.java hotspot/test/compiler/6865031/Test.java hotspot/test/compiler/6865265/StackOverflowBug.java hotspot/test/compiler/6866651/Test.java hotspot/test/compiler/6875866/Test.java hotspot/test/compiler/6877254/Test.java hotspot/test/compiler/6879902/Test6879902.java hotspot/test/compiler/6880034/Test6880034.java hotspot/test/compiler/6885584/Test6885584.java hotspot/test/compiler/6891750/Test6891750.java hotspot/test/compiler/6892265/Test.java hotspot/test/compiler/6894807/IsInstanceTest.java hotspot/test/compiler/6894807/Test6894807.sh hotspot/test/compiler/6895383/Test.java hotspot/test/compiler/6896617/Test6896617.java hotspot/test/compiler/6896727/Test.java hotspot/test/compiler/6901572/Test.java hotspot/test/compiler/6909839/Test6909839.java hotspot/test/compiler/6910484/Test.java hotspot/test/compiler/6910605/Test.java hotspot/test/compiler/6910618/Test.java hotspot/test/compiler/6912517/Test.java hotspot/test/compiler/6916644/Test6916644.java hotspot/test/compiler/6921969/TestMultiplyLongHiZero.java hotspot/test/compiler/6930043/Test6930043.java hotspot/test/compiler/6932496/Test6932496.java hotspot/test/compiler/6934604/TestByteBoxing.java hotspot/test/compiler/6934604/TestDoubleBoxing.java hotspot/test/compiler/6934604/TestFloatBoxing.java hotspot/test/compiler/6934604/TestIntBoxing.java hotspot/test/compiler/6934604/TestLongBoxing.java hotspot/test/compiler/6934604/TestShortBoxing.java hotspot/test/compiler/6935535/Test.java hotspot/test/compiler/6942326/Test.java hotspot/test/compiler/6946040/TestCharShortByteSwap.java hotspot/test/compiler/6956668/Test6956668.java hotspot/test/compiler/6958485/Test.java hotspot/test/compiler/6968348/Test6968348.java hotspot/test/compiler/6973329/Test.java hotspot/test/compiler/6982370/Test6982370.java hotspot/test/compiler/6990212/Test6990212.java hotspot/test/compiler/7002666/Test7002666.java hotspot/test/compiler/7009231/Test7009231.java hotspot/test/compiler/7009359/Test7009359.java hotspot/test/compiler/7017746/Test.java hotspot/test/compiler/7024475/Test7024475.java hotspot/test/compiler/7029152/Test.java hotspot/test/compiler/7041100/Test7041100.java hotspot/test/compiler/7042153/Test7042153.java hotspot/test/compiler/7044738/Test7044738.java hotspot/test/compiler/7046096/Test7046096.java hotspot/test/compiler/7047069/Test7047069.java hotspot/test/compiler/7048332/Test7048332.java hotspot/test/compiler/7052494/Test7052494.java hotspot/test/compiler/7068051/Test7068051.java hotspot/test/compiler/7068051/Test7068051.sh hotspot/test/compiler/7070134/Stemmer.java hotspot/test/compiler/7070134/Test7070134.sh hotspot/test/compiler/7070134/words hotspot/test/compiler/7082949/Test7082949.java hotspot/test/compiler/7088020/Test7088020.java hotspot/test/compiler/7088419/CRCTest.java hotspot/test/compiler/7090976/Test7090976.java hotspot/test/compiler/7100757/Test7100757.java hotspot/test/compiler/7103261/Test7103261.java hotspot/test/compiler/7110586/Test7110586.java hotspot/test/compiler/7116216/LargeFrame.java hotspot/test/compiler/7116216/StackOverflow.java hotspot/test/compiler/7119644/TestBooleanVect.java hotspot/test/compiler/7119644/TestByteDoubleVect.java hotspot/test/compiler/7119644/TestByteFloatVect.java hotspot/test/compiler/7119644/TestByteIntVect.java hotspot/test/compiler/7119644/TestByteLongVect.java hotspot/test/compiler/7119644/TestByteShortVect.java hotspot/test/compiler/7119644/TestByteVect.java hotspot/test/compiler/7119644/TestCharShortVect.java hotspot/test/compiler/7119644/TestCharVect.java hotspot/test/compiler/7119644/TestDoubleVect.java hotspot/test/compiler/7119644/TestFloatDoubleVect.java hotspot/test/compiler/7119644/TestFloatVect.java hotspot/test/compiler/7119644/TestIntDoubleVect.java hotspot/test/compiler/7119644/TestIntFloatVect.java hotspot/test/compiler/7119644/TestIntLongVect.java hotspot/test/compiler/7119644/TestIntVect.java hotspot/test/compiler/7119644/TestLongDoubleVect.java hotspot/test/compiler/7119644/TestLongFloatVect.java hotspot/test/compiler/7119644/TestLongVect.java hotspot/test/compiler/7119644/TestShortDoubleVect.java hotspot/test/compiler/7119644/TestShortFloatVect.java hotspot/test/compiler/7119644/TestShortIntVect.java hotspot/test/compiler/7119644/TestShortLongVect.java hotspot/test/compiler/7119644/TestShortVect.java hotspot/test/compiler/7123108/Test7123108.java hotspot/test/compiler/7125879/Test7125879.java hotspot/test/compiler/7141637/SpreadNullArg.java hotspot/test/compiler/7160610/Test7160610.java hotspot/test/compiler/7169782/Test7169782.java hotspot/test/compiler/7174363/Test7174363.java hotspot/test/compiler/7177917/Test7177917.java hotspot/test/compiler/7179138/Test7179138_1.java hotspot/test/compiler/7179138/Test7179138_2.java hotspot/test/compiler/7184394/TestAESBase.java hotspot/test/compiler/7184394/TestAESDecode.java hotspot/test/compiler/7184394/TestAESEncode.java hotspot/test/compiler/7184394/TestAESMain.java hotspot/test/compiler/7190310/Test7190310.java hotspot/test/compiler/7190310/Test7190310_unsafe.java hotspot/test/compiler/7192963/TestByteVect.java hotspot/test/compiler/7192963/TestDoubleVect.java hotspot/test/compiler/7192963/TestFloatVect.java hotspot/test/compiler/7192963/TestIntVect.java hotspot/test/compiler/7192963/TestLongVect.java hotspot/test/compiler/7192963/TestShortVect.java hotspot/test/compiler/7196199/Test7196199.java hotspot/test/compiler/7199742/Test7199742.java hotspot/test/compiler/7200264/Test7200264.sh hotspot/test/compiler/7200264/TestIntVect.java hotspot/test/compiler/8000805/Test8000805.java hotspot/test/compiler/8001183/TestCharVect.java hotspot/test/compiler/8002069/Test8002069.java hotspot/test/compiler/8004051/Test8004051.java hotspot/test/compiler/8004741/Test8004741.java hotspot/test/compiler/8004867/TestIntAtomicCAS.java hotspot/test/compiler/8004867/TestIntAtomicOrdered.java hotspot/test/compiler/8004867/TestIntAtomicVolatile.java hotspot/test/compiler/8004867/TestIntUnsafeCAS.java hotspot/test/compiler/8004867/TestIntUnsafeOrdered.java hotspot/test/compiler/8004867/TestIntUnsafeVolatile.java hotspot/test/compiler/8005033/Test8005033.java hotspot/test/compiler/8005419/Test8005419.java hotspot/test/compiler/8005956/PolynomialRoot.java hotspot/test/compiler/8007294/Test8007294.java hotspot/test/compiler/8007722/Test8007722.java hotspot/test/compiler/8009761/Test8009761.java hotspot/test/compiler/8010927/Test8010927.java hotspot/test/compiler/8011706/Test8011706.java hotspot/test/compiler/8011771/Test8011771.java hotspot/test/compiler/8011901/Test8011901.java hotspot/test/compiler/8015436/Test8015436.java hotspot/test/compiler/EliminateAutoBox/UnsignedLoads.java hotspot/test/compiler/EscapeAnalysis/Test8020215.java hotspot/test/compiler/EscapeAnalysis/TestAllocatedEscapesPtrComparison.java hotspot/test/compiler/EscapeAnalysis/TestUnsafePutAddressNullObjMustNotEscape.java hotspot/test/compiler/IntegerArithmetic/TestIntegerComparison.java hotspot/test/gc/concurrentMarkSweep/CheckAllocateAndSystemGC.java hotspot/test/gc/concurrentMarkSweep/SystemGCOnForegroundCollector.java hotspot/test/gc/startup_warnings/TestCMSForegroundFlags.java hotspot/test/gc/startup_warnings/TestCMSIncrementalMode.java hotspot/test/gc/startup_warnings/TestCMSNoIncrementalMode.java hotspot/test/gc/startup_warnings/TestIncGC.java jdk/src/java.base/share/classes/java/util/zip/package.html jdk/src/java.desktop/share/classes/sun/awt/datatransfer/META-INF/services/sun.datatransfer.DesktopDatatransferService jdk/test/sun/tools/jinfo/Basic.sh |
diffstat | 1172 files changed, 177465 insertions(+), 170542 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags-top-repo Thu Dec 04 15:23:04 2014 -0800 +++ b/.hgtags-top-repo Wed Jul 05 20:09:40 2017 +0200 @@ -283,3 +283,4 @@ d42c0a90afc3c66ca87543076ec9aafd4b4680de jdk9-b38 512dbbeb1730edcebfec873fc3f1455660b32000 jdk9-b39 cf136458ee747e151a27aa9ea0c1492ea55ef3e7 jdk9-b40 +67395f7ca2db3b52e3a62a84888487de5cb9210a jdk9-b41
--- a/Makefile Thu Dec 04 15:23:04 2014 -0800 +++ b/Makefile Wed Jul 05 20:09:40 2017 +0200 @@ -33,7 +33,7 @@ # The shell code below will be executed on /usr/ccs/bin/make on Solaris, but not in GNU make. # /usr/ccs/bin/make lacks basically every other flow control mechanism. -TEST_FOR_NON_GNUMAKE:sh=echo You are not using GNU make/gmake, this is a requirement. Check your path. 1>&2 && exit 1 +.TEST_FOR_NON_GNUMAKE:sh=echo You are not using GNU make/gmake, this is a requirement. Check your path. 1>&2 && exit 1 # Assume we have GNU make, but check version. ifeq ($(strip $(foreach v, 3.81% 3.82% 4.%, $(filter $v, $(MAKE_VERSION)))), ) @@ -46,7 +46,17 @@ else makefile_path:=$(lastword $(MAKEFILE_LIST)) endif -root_dir:=$(dir $(makefile_path)) +root_dir:=$(patsubst %/,%,$(dir $(makefile_path))) + +ifneq ($(findstring qp,$(MAKEFLAGS)),) + # When called with -qp, assume an external part (e.g. bash completion) is trying + # to understand our targets. + # Duplication of global targets, needed before ParseConfAndSpec in case we have + # no configurations. + help: + # If CONF is not set, look for all available configurations + CONF?= +endif # ... and then we can include our helper functions include $(root_dir)/make/MakeHelpers.gmk @@ -89,6 +99,7 @@ # The wrapper target was called so we now have a single configuration. Load the spec file # and call the real Main.gmk. include $(SPEC) + include $(SRC_ROOT)/make/common/MakeBase.gmk ### Clean up from previous run # Remove any build.log from a previous run, if they exist
--- a/common/autoconf/basics.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/basics.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -69,7 +69,7 @@ # This will make sure the given variable points to a full and proper # path. This means: -# 1) There will be no spaces in the path. On posix platforms, +# 1) There will be no spaces in the path. On unix platforms, # spaces in the path will result in an error. On Windows, # the path will be rewritten using short-style to be space-free. # 2) The path will be absolute, and it will be in unix-style (on @@ -82,7 +82,7 @@ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then BASIC_FIXUP_PATH_MSYS($1) else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="[$]$1" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -102,7 +102,7 @@ # This will make sure the given variable points to a executable # with a full and proper path. This means: -# 1) There will be no spaces in the path. On posix platforms, +# 1) There will be no spaces in the path. On unix platforms, # spaces in the path will result in an error. On Windows, # the path will be rewritten using short-style to be space-free. # 2) The path will be absolute, and it will be in unix-style (on @@ -118,7 +118,7 @@ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then BASIC_FIXUP_EXECUTABLE_MSYS($1) else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="[$]$1" @@ -268,7 +268,7 @@ fi ]) -# Setup a tool for the given variable. If correctly specified by the user, +# Setup a tool for the given variable. If correctly specified by the user, # use that value, otherwise search for the tool using the supplied code snippet. # $1: variable to set # $2: code snippet to call to look for the tool @@ -546,7 +546,7 @@ XCODEBUILD= AC_SUBST(XCODEBUILD) fi - + AC_MSG_CHECKING([for sdk name]) AC_ARG_WITH([sdk-name], [AS_HELP_STRING([--with-sdk-name], [use the platform SDK of the given name. @<:@macosx@:>@])],
--- a/common/autoconf/boot-jdk.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/boot-jdk.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -24,31 +24,31 @@ # ######################################################################## -# This file handles detection of the Boot JDK. The Boot JDK detection -# process has been developed as a response to solve a complex real-world -# problem. Initially, it was simple, but it has grown as platform after +# This file handles detection of the Boot JDK. The Boot JDK detection +# process has been developed as a response to solve a complex real-world +# problem. Initially, it was simple, but it has grown as platform after # platform, idiosyncracy after idiosyncracy has been supported. # # The basic idea is this: # 1) You need an acceptable *) JDK to use as a Boot JDK -# 2) There are several ways to locate a JDK, that are mostly platform +# 2) There are several ways to locate a JDK, that are mostly platform # dependent **) # 3) You can have multiple JDKs installed -# 4) If possible, configure should try to dig out an acceptable JDK +# 4) If possible, configure should try to dig out an acceptable JDK # automatically, without having to resort to command-line options # -# *) acceptable means e.g. JDK7 for building JDK8, a complete JDK (with -# javac) and not a JRE, etc. +# *) acceptable means e.g. JDK7 for building JDK8, a complete JDK (with +# javac) and not a JRE, etc. # -# **) On Windows we typically use a well-known path. +# **) On Windows we typically use a well-known path. # On MacOSX we typically use the tool java_home. -# On Linux we typically find javac in the $PATH, and then follow a -# chain of symlinks that often ends up in a real JDK. +# On Linux we typically find javac in the $PATH, and then follow a +# chain of symlinks that often ends up in a real JDK. # -# This leads to the code where we check in different ways to locate a -# JDK, and if one is found, check if it is acceptable. If not, we print -# our reasons for rejecting it (useful when debugging non-working -# configure situations) and continue checking the next one. +# This leads to the code where we check in different ways to locate a +# JDK, and if one is found, check if it is acceptable. If not, we print +# our reasons for rejecting it (useful when debugging non-working +# configure situations) and continue checking the next one. ######################################################################## # Execute the check given as argument, and verify the result @@ -244,7 +244,7 @@ AC_DEFUN([BOOTJDK_CHECK_TOOL_IN_BOOTJDK], [ # Use user overridden value if available, otherwise locate tool in the Boot JDK. - BASIC_SETUP_TOOL($1, + BASIC_SETUP_TOOL($1, [ AC_MSG_CHECKING([for $2 in Boot JDK]) $1=$BOOT_JDK/bin/$2
--- a/common/autoconf/bootcycle-spec.gmk.in Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/bootcycle-spec.gmk.in Wed Jul 05 20:09:40 2017 +0200 @@ -56,4 +56,3 @@ NATIVE2ASCII_CMD:=$(BOOT_JDK)/bin/native2ascii JARSIGNER_CMD:=$(BOOT_JDK)/bin/jarsigner SJAVAC_SERVER_JAVA_CMD:=$(JAVA_CMD) -
--- a/common/autoconf/build-aux/config.guess Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/build-aux/config.guess Wed Jul 05 20:09:40 2017 +0200 @@ -77,7 +77,7 @@ fi # Test and fix little endian PowerPC64. -# TODO: should be handled by autoconf-config.guess. +# TODO: should be handled by autoconf-config.guess. if [ "x$OUT" = x ]; then if [ `uname -m` = ppc64le ]; then if [ `uname -s` = Linux ]; then
--- a/common/autoconf/build-aux/install.sh Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/build-aux/install.sh Wed Jul 05 20:09:40 2017 +0200 @@ -1,5 +1,5 @@ -#!/bin/sh -echo >&2 "No suitable 'install' command found.'" -echo >&2 "If automake is installed, running 'automake -fa'" -echo >&2 "(and ignoring the errors) might produce one." -exit 1 +#!/bin/sh +echo >&2 "No suitable 'install' command found.'" +echo >&2 "If automake is installed, running 'automake -fa'" +echo >&2 "(and ignoring the errors) might produce one." +exit 1
--- a/common/autoconf/compare.sh.in Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/compare.sh.in Wed Jul 05 20:09:40 2017 +0200 @@ -48,6 +48,7 @@ JAVAP="@FIXPATH@ @BOOT_JDK@/bin/javap @JAVA_TOOL_FLAGS_SMALL@" JIMAGE="@FIXPATH@ @BUILD_OUTPUT@/jdk/bin/jimage" LDD="@LDD@" +LN="@LN@" MKDIR="@MKDIR@" NAWK="@NAWK@" NM="@GNM@"
--- a/common/autoconf/configure.ac Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/configure.ac Wed Jul 05 20:09:40 2017 +0200 @@ -275,3 +275,4 @@ # Finally output some useful information to the user HELP_PRINT_SUMMARY_AND_WARNINGS CUSTOM_SUMMARY_AND_WARNINGS_HOOK +HELP_REPEAT_WARNINGS
--- a/common/autoconf/flags.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/flags.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -94,9 +94,9 @@ # On Windows, we need to set RC flags. if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then - RC_FLAGS="-nologo -l 0x409 -r" + RC_FLAGS="-nologo -l0x409" if test "x$VARIANT" = xOPT; then - RC_FLAGS="$RC_FLAGS -d NDEBUG" + RC_FLAGS="$RC_FLAGS -DNDEBUG" fi # The version variables used to create RC_FLAGS may be overridden @@ -105,13 +105,13 @@ # The \$ are escaped to the shell, and the $(...) variables # are evaluated by make. RC_FLAGS="$RC_FLAGS \ - -d \"JDK_BUILD_ID=\$(FULL_VERSION)\" \ - -d \"JDK_COMPANY=\$(COMPANY_NAME)\" \ - -d \"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ - -d \"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0).\$(COOKED_BUILD_NUMBER)\" \ - -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ - -d \"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ - -d \"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" + -D\"JDK_BUILD_ID=\$(FULL_VERSION)\" \ + -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \ + -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ + -D\"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0).\$(COOKED_BUILD_NUMBER)\" \ + -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ + -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ + -D\"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" fi AC_SUBST(RC_FLAGS) @@ -348,10 +348,6 @@ # Add runtime stack smashing and undefined behavior checks CFLAGS_DEBUG_OPTIONS="-fstack-protector-all --param ssp-buffer-size=1" CXXFLAGS_DEBUG_OPTIONS="-fstack-protector-all --param ssp-buffer-size=1" - if test "x$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" = "xtrue"; then - CFLAGS_DEBUG_OPTIONS="$CFLAGS_DEBUG_OPTIONS $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG" - CXXFLAGS_DEBUG_OPTIONS="$CXXFLAGS_DEBUG_OPTIONS $CFLAG_DETECT_UNDEFINED_BEHAVIsOR_FLAG" - fi ;; esac fi @@ -668,7 +664,7 @@ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ -I${JDK_TOPDIR}/src/java.base/share/native/include \ -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \ - -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_API_DIR/native/include" + -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include" # The shared libraries are compiled using the picflag. CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" @@ -746,25 +742,6 @@ LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" fi - if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then - # If undefined behaviour detection is enabled then we need to tell linker. - case $DEBUG_LEVEL in - release | fastdebug ) - ;; - slowdebug ) - AC_MSG_WARN([$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR]) - if test "x$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" = "xtrue"; then - # enable undefined behaviour checking - LDFLAGS_JDK="$LDFLAGS_JDK `$ECHO -n $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG | sed -e "s/[ ]*\([^ ]\+\)/ -Xlinker \1/g"`" - LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK `$ECHO -n $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG | sed -e "s/[ ]*\([^ ]\+\)/ -Xlinker \1/g"`" - fi - ;; - * ) - AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) - ;; - esac - fi - # Customize LDFLAGS for executables LDFLAGS_JDKEXE="${LDFLAGS_JDK}"
--- a/common/autoconf/generated-configure.sh Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/generated-configure.sh Wed Jul 05 20:09:40 2017 +0200 @@ -906,7 +906,6 @@ DEFINE_CROSS_COMPILE_ARCH LP64 OPENJDK_TARGET_OS_EXPORT_DIR -OPENJDK_TARGET_OS_API_DIR OPENJDK_TARGET_CPU_JLI_CFLAGS OPENJDK_TARGET_CPU_OSARCH OPENJDK_TARGET_CPU_ISADIR @@ -921,14 +920,14 @@ OPENJDK_TARGET_CPU_ARCH OPENJDK_TARGET_CPU OPENJDK_TARGET_OS_ENV -OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_TYPE OPENJDK_TARGET_OS OPENJDK_BUILD_CPU_ENDIAN OPENJDK_BUILD_CPU_BITS OPENJDK_BUILD_CPU_ARCH OPENJDK_BUILD_CPU OPENJDK_BUILD_OS_ENV -OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_TYPE OPENJDK_BUILD_OS OPENJDK_BUILD_AUTOCONF_NAME OPENJDK_TARGET_AUTOCONF_NAME @@ -1063,6 +1062,7 @@ with_update_version with_user_release_suffix with_build_number +with_copyright_year with_boot_jdk with_add_source_root with_override_source_root @@ -1904,6 +1904,7 @@ Add a custom string to the version string if build number is not set.[username_builddateb00] --with-build-number Set build number value for build [b00] + --with-copyright-year Set copyright year value for build [current year] --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] --with-add-source-root for each and every source directory, look in this additional source root for the same directory; if it @@ -3410,7 +3411,7 @@ # This will make sure the given variable points to a full and proper # path. This means: -# 1) There will be no spaces in the path. On posix platforms, +# 1) There will be no spaces in the path. On unix platforms, # spaces in the path will result in an error. On Windows, # the path will be rewritten using short-style to be space-free. # 2) The path will be absolute, and it will be in unix-style (on @@ -3420,7 +3421,7 @@ # This will make sure the given variable points to a executable # with a full and proper path. This means: -# 1) There will be no spaces in the path. On posix platforms, +# 1) There will be no spaces in the path. On unix platforms, # spaces in the path will result in an error. On Windows, # the path will be rewritten using short-style to be space-free. # 2) The path will be absolute, and it will be in unix-style (on @@ -3968,6 +3969,8 @@ + + # # Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -4097,7 +4100,7 @@ # Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD. # Converts autoconf style OS name to OpenJDK style, into -# VAR_OS and VAR_OS_API. +# VAR_OS, VAR_OS_TYPE and VAR_OS_ENV. # Expects $host_os $host_cpu $build_os and $build_cpu @@ -4326,7 +4329,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1416999037 +DATE_WHEN_GENERATED=1417630847 ############################################################################### # @@ -13523,38 +13526,31 @@ case "$build_os" in *linux*) VAR_OS=linux - VAR_OS_API=posix - VAR_OS_ENV=linux + VAR_OS_TYPE=unix ;; *solaris*) VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_ENV=solaris + VAR_OS_TYPE=unix ;; *darwin*) VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_ENV=macosx + VAR_OS_TYPE=unix ;; *bsd*) VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_ENV=bsd + VAR_OS_TYPE=unix ;; *cygwin*) VAR_OS=windows - VAR_OS_API=winapi VAR_OS_ENV=windows.cygwin ;; *mingw*) VAR_OS=windows - VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; *aix*) VAR_OS=aix - VAR_OS_API=posix - VAR_OS_ENV=aix + VAR_OS_TYPE=unix ;; *) as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 @@ -13631,8 +13627,16 @@ # ..and setup our own variables. (Do this explicitely to facilitate searching) OPENJDK_BUILD_OS="$VAR_OS" - OPENJDK_BUILD_OS_API="$VAR_OS_API" - OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + if test "x$VAR_OS_TYPE" != x; then + OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE" + else + OPENJDK_BUILD_OS_TYPE="$VAR_OS" + fi + if test "x$VAR_OS_ENV" != x; then + OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + else + OPENJDK_BUILD_OS_ENV="$VAR_OS" + fi OPENJDK_BUILD_CPU="$VAR_CPU" OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" @@ -13655,38 +13659,31 @@ case "$host_os" in *linux*) VAR_OS=linux - VAR_OS_API=posix - VAR_OS_ENV=linux + VAR_OS_TYPE=unix ;; *solaris*) VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_ENV=solaris + VAR_OS_TYPE=unix ;; *darwin*) VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_ENV=macosx + VAR_OS_TYPE=unix ;; *bsd*) VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_ENV=bsd + VAR_OS_TYPE=unix ;; *cygwin*) VAR_OS=windows - VAR_OS_API=winapi VAR_OS_ENV=windows.cygwin ;; *mingw*) VAR_OS=windows - VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; *aix*) VAR_OS=aix - VAR_OS_API=posix - VAR_OS_ENV=aix + VAR_OS_TYPE=unix ;; *) as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 @@ -13763,8 +13760,16 @@ # ... and setup our own variables. (Do this explicitely to facilitate searching) OPENJDK_TARGET_OS="$VAR_OS" - OPENJDK_TARGET_OS_API="$VAR_OS_API" - OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" + if test "x$VAR_OS_TYPE" != x; then + OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE" + else + OPENJDK_TARGET_OS_TYPE="$VAR_OS" + fi + if test "x$VAR_OS_ENV" != x; then + OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" + else + OPENJDK_TARGET_OS_ENV="$VAR_OS" + fi OPENJDK_TARGET_CPU="$VAR_CPU" OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" @@ -13932,19 +13937,10 @@ fi - # Setup OPENJDK_TARGET_OS_API_DIR, used in source paths. - if test "x$OPENJDK_TARGET_OS_API" = xposix; then - OPENJDK_TARGET_OS_API_DIR="unix" - fi - if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then - OPENJDK_TARGET_OS_API_DIR="windows" - fi - - if test "x$OPENJDK_TARGET_OS" = xmacosx; then OPENJDK_TARGET_OS_EXPORT_DIR=macosx else - OPENJDK_TARGET_OS_EXPORT_DIR=${OPENJDK_TARGET_OS_API_DIR} + OPENJDK_TARGET_OS_EXPORT_DIR=${OPENJDK_TARGET_OS_TYPE} fi @@ -14194,7 +14190,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$CURDIR" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -14316,7 +14312,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$TOPDIR" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -14836,7 +14832,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$with_devkit" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -15310,7 +15306,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$OUTPUT_ROOT" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -15677,7 +15673,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$FOUND_MAKE" @@ -16050,7 +16046,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$FOUND_MAKE" @@ -16420,7 +16416,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$FOUND_MAKE" @@ -16795,7 +16791,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$FOUND_MAKE" @@ -17164,7 +17160,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$FOUND_MAKE" @@ -20132,7 +20128,19 @@ - COPYRIGHT_YEAR=`date +'%Y'` + +# Check whether --with-copyright-year was given. +if test "${with_copyright_year+set}" = set; then : + withval=$with_copyright_year; +fi + + if test "x$with_copyright_year" = xyes; then + as_fn_error $? "Copyright year must have a value" "$LINENO" 5 + elif test "x$with_copyright_year" != x; then + COPYRIGHT_YEAR="$with_copyright_year" + else + COPYRIGHT_YEAR=`date +'%Y'` + fi if test "x$JDK_UPDATE_VERSION" != x; then @@ -20319,7 +20327,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -20651,7 +20659,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -20845,7 +20853,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -21032,7 +21040,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -21218,7 +21226,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -21404,7 +21412,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -21581,7 +21589,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -21727,7 +21735,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$JAVA_HOME_PROCESSED" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -21899,7 +21907,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -22227,7 +22235,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -22442,7 +22450,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -22622,7 +22630,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -22830,7 +22838,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -23010,7 +23018,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -23218,7 +23226,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -23398,7 +23406,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -23606,7 +23614,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -23786,7 +23794,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -23981,7 +23989,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -24159,7 +24167,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -24355,7 +24363,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -24533,7 +24541,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -24728,7 +24736,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -24906,7 +24914,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -25102,7 +25110,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -25280,7 +25288,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -25457,7 +25465,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$BOOT_JDK" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -27484,7 +27492,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$VS_ENV_CMD" @@ -28144,7 +28152,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$CC" @@ -28601,7 +28609,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$PROPER_COMPILER_CC" @@ -29884,7 +29892,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$CXX" @@ -30341,7 +30349,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$PROPER_COMPILER_CXX" @@ -31203,7 +31211,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$CPP" @@ -31618,7 +31626,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$CXXCPP" @@ -31962,7 +31970,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$LD" @@ -32457,7 +32465,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$AS" @@ -33085,7 +33093,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$AR" @@ -33621,7 +33629,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$OBJC" @@ -34089,7 +34097,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$LIPO" @@ -34430,7 +34438,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$MT" @@ -34767,7 +34775,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$RC" @@ -35086,7 +35094,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$DUMPBIN" @@ -35601,7 +35609,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$STRIP" @@ -36069,7 +36077,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$NM" @@ -36537,7 +36545,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$GNM" @@ -37006,7 +37014,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$MCS" @@ -37586,7 +37594,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$STRIP" @@ -38164,7 +38172,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$NM" @@ -38751,7 +38759,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$OBJCOPY" @@ -39335,7 +39343,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$OBJDUMP" @@ -39828,7 +39836,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$BUILD_CC" @@ -40296,7 +40304,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$BUILD_CXX" @@ -40764,7 +40772,7 @@ fi else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) # First separate the path from the arguments. This will split at the first # space. complete="$BUILD_LD" @@ -40993,74 +41001,6 @@ fi - # "-fsanitize=undefined" supported for GCC 4.9 and later - CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG="-fsanitize=undefined -fsanitize-recover" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"$CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG\"" >&5 -$as_echo_n "checking if compiler supports \"$CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG\"... " >&6; } - supports=yes - - saved_cflags="$CFLAGS" - CFLAGS="$CFLAGS $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int i; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - supports=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - CFLAGS="$saved_cflags" - - saved_cxxflags="$CXXFLAGS" - CXXFLAGS="$CXXFLAG $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int i; -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - supports=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - CXXFLAGS="$saved_cxxflags" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 -$as_echo "$supports" >&6; } - if test "x$supports" = "xyes" ; then - HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR=true - else - HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR=false - fi - - # "-z relro" supported in GNU binutils 2.17 and later LINKER_RELRO_FLAG="-Xlinker -z -Xlinker relro" @@ -41316,7 +41256,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$JT_HOME" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -41617,9 +41557,9 @@ # On Windows, we need to set RC flags. if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then - RC_FLAGS="-nologo -l 0x409 -r" + RC_FLAGS="-nologo -l0x409" if test "x$VARIANT" = xOPT; then - RC_FLAGS="$RC_FLAGS -d NDEBUG" + RC_FLAGS="$RC_FLAGS -DNDEBUG" fi # The version variables used to create RC_FLAGS may be overridden @@ -41628,13 +41568,13 @@ # The \$ are escaped to the shell, and the $(...) variables # are evaluated by make. RC_FLAGS="$RC_FLAGS \ - -d \"JDK_BUILD_ID=\$(FULL_VERSION)\" \ - -d \"JDK_COMPANY=\$(COMPANY_NAME)\" \ - -d \"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ - -d \"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0).\$(COOKED_BUILD_NUMBER)\" \ - -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ - -d \"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ - -d \"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" + -D\"JDK_BUILD_ID=\$(FULL_VERSION)\" \ + -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \ + -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ + -D\"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0).\$(COOKED_BUILD_NUMBER)\" \ + -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ + -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ + -D\"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" fi @@ -41844,8 +41784,8 @@ LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" elif test "x$COMPILE_TYPE" = xreduced; then - if test "x$OPENJDK_TARGET_OS" != xwindows; then - # Specify -m if running reduced on other Posix platforms + if test "x$OPENJDK_TARGET_OS_TYPE" = xunix; then + # Specify -m if running reduced on unix platforms # When we add flags to the "official" CFLAGS etc, we need to # keep track of these additions in ADDED_CFLAGS etc. These @@ -42404,10 +42344,6 @@ # Add runtime stack smashing and undefined behavior checks CFLAGS_DEBUG_OPTIONS="-fstack-protector-all --param ssp-buffer-size=1" CXXFLAGS_DEBUG_OPTIONS="-fstack-protector-all --param ssp-buffer-size=1" - if test "x$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" = "xtrue"; then - CFLAGS_DEBUG_OPTIONS="$CFLAGS_DEBUG_OPTIONS $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG" - CXXFLAGS_DEBUG_OPTIONS="$CXXFLAGS_DEBUG_OPTIONS $CFLAG_DETECT_UNDEFINED_BEHAVIsOR_FLAG" - fi ;; esac fi @@ -42737,7 +42673,7 @@ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ -I${JDK_TOPDIR}/src/java.base/share/native/include \ -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \ - -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_API_DIR/native/include" + -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include" # The shared libraries are compiled using the picflag. CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" @@ -42815,26 +42751,6 @@ LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" fi - if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then - # If undefined behaviour detection is enabled then we need to tell linker. - case $DEBUG_LEVEL in - release | fastdebug ) - ;; - slowdebug ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" >&5 -$as_echo "$as_me: WARNING: $HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" >&2;} - if test "x$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" = "xtrue"; then - # enable undefined behaviour checking - LDFLAGS_JDK="$LDFLAGS_JDK `$ECHO -n $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG | sed -e "s/ *\(^ \+\)/ -Xlinker \1/g"`" - LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK `$ECHO -n $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG | sed -e "s/ *\(^ \+\)/ -Xlinker \1/g"`" - fi - ;; - * ) - as_fn_error $? "Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL" "$LINENO" 5 - ;; - esac - fi - # Customize LDFLAGS for executables LDFLAGS_JDKEXE="${LDFLAGS_JDK}" @@ -44723,7 +44639,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -44845,7 +44761,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -45076,7 +44992,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -45198,7 +45114,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -45690,7 +45606,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -45812,7 +45728,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46018,7 +45934,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46140,7 +46056,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46337,7 +46253,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46459,7 +46375,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46656,7 +46572,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46778,7 +46694,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -46976,7 +46892,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -47098,7 +47014,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -47297,7 +47213,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -47419,7 +47335,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -47614,7 +47530,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -47736,7 +47652,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -47931,7 +47847,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -48053,7 +47969,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$POTENTIAL_FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -48231,7 +48147,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$FREETYPE_INCLUDE_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -48361,7 +48277,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$FREETYPE_LIB_PATH" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -50260,7 +50176,7 @@ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") else - # We're on a posix platform. Hooray! :) + # We're on a unix platform. Hooray! :) path="$MSVCR_DLL" has_space=`$ECHO "$path" | $GREP " "` if test "x$has_space" != x; then @@ -52405,15 +52321,15 @@ printf "====================================================\n" if test "x$no_create" != "xyes"; then if test "x$IS_RECONFIGURE" != "xyes"; then - printf "A new configuration has been successfully created in\n %s\n" "$OUTPUT_ROOT" - else - printf "The existing configuration has been successfully updated in\n %s\n" "$OUTPUT_ROOT" + printf "A new configuration has been successfully created in\n%s\n" "$OUTPUT_ROOT" + else + printf "The existing configuration has been successfully updated in\n%s\n" "$OUTPUT_ROOT" fi else if test "x$IS_RECONFIGURE" != "xyes"; then printf "A configuration has been successfully checked but not created\n" else - printf "The existing configuration has been successfully checked in\n %s\n" "$OUTPUT_ROOT" + printf "The existing configuration has been successfully checked in\n%s\n" "$OUTPUT_ROOT" fi fi if test "x$CONFIGURE_COMMAND_LINE" != x; then @@ -52485,3 +52401,15 @@ fi + +if test -e "$OUTPUT_ROOT/config.log"; then + $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1 + if test $? -eq 0; then + printf "The following warnings were produced. Repeated here for convenience:\n" + # We must quote sed expression (using []) to stop m4 from eating the []. + $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e 's/^configure:[0-9]*: //' + printf "\n" + fi +fi + +
--- a/common/autoconf/help.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/help.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -178,15 +178,15 @@ printf "====================================================\n" if test "x$no_create" != "xyes"; then if test "x$IS_RECONFIGURE" != "xyes"; then - printf "A new configuration has been successfully created in\n %s\n" "$OUTPUT_ROOT" + printf "A new configuration has been successfully created in\n%s\n" "$OUTPUT_ROOT" else - printf "The existing configuration has been successfully updated in\n %s\n" "$OUTPUT_ROOT" + printf "The existing configuration has been successfully updated in\n%s\n" "$OUTPUT_ROOT" fi else if test "x$IS_RECONFIGURE" != "xyes"; then printf "A configuration has been successfully checked but not created\n" else - printf "The existing configuration has been successfully checked in\n %s\n" "$OUTPUT_ROOT" + printf "The existing configuration has been successfully checked in\n%s\n" "$OUTPUT_ROOT" fi fi if test "x$CONFIGURE_COMMAND_LINE" != x; then @@ -257,3 +257,17 @@ printf "\n" fi ]) + +AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS], +[ +if test -e "$OUTPUT_ROOT/config.log"; then + $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1 + if test $? -eq 0; then + printf "The following warnings were produced. Repeated here for convenience:\n" + # We must quote sed expression (using []) to stop m4 from eating the []. + $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ] + printf "\n" + fi +fi + +])
--- a/common/autoconf/jdk-options.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/jdk-options.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -549,7 +549,15 @@ AC_SUBST(MACOSX_BUNDLE_NAME_BASE) AC_SUBST(MACOSX_BUNDLE_ID_BASE) - COPYRIGHT_YEAR=`date +'%Y'` + AC_ARG_WITH(copyright-year, [AS_HELP_STRING([--with-copyright-year], + [Set copyright year value for build @<:@current year@:>@])]) + if test "x$with_copyright_year" = xyes; then + AC_MSG_ERROR([Copyright year must have a value]) + elif test "x$with_copyright_year" != x; then + COPYRIGHT_YEAR="$with_copyright_year" + else + COPYRIGHT_YEAR=`date +'%Y'` + fi AC_SUBST(COPYRIGHT_YEAR) if test "x$JDK_UPDATE_VERSION" != x; then
--- a/common/autoconf/libraries.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/libraries.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -355,7 +355,7 @@ FOUND_FREETYPE=no fi fi - + if test "x$FOUND_FREETYPE" = xyes; then # Include file found, let's continue the sanity check. AC_MSG_NOTICE([Found freetype include files at $POTENTIAL_FREETYPE_INCLUDE_PATH using $METHOD])
--- a/common/autoconf/platform.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/platform.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -98,44 +98,37 @@ # Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD. # Converts autoconf style OS name to OpenJDK style, into -# VAR_OS and VAR_OS_API. +# VAR_OS, VAR_OS_TYPE and VAR_OS_ENV. AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], [ case "$1" in *linux*) VAR_OS=linux - VAR_OS_API=posix - VAR_OS_ENV=linux + VAR_OS_TYPE=unix ;; *solaris*) VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_ENV=solaris + VAR_OS_TYPE=unix ;; *darwin*) VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_ENV=macosx + VAR_OS_TYPE=unix ;; *bsd*) VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_ENV=bsd + VAR_OS_TYPE=unix ;; *cygwin*) VAR_OS=windows - VAR_OS_API=winapi VAR_OS_ENV=windows.cygwin ;; *mingw*) VAR_OS=windows - VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; *aix*) VAR_OS=aix - VAR_OS_API=posix - VAR_OS_ENV=aix + VAR_OS_TYPE=unix ;; *) AC_MSG_ERROR([unsupported operating system $1]) @@ -165,14 +158,22 @@ PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu) # ..and setup our own variables. (Do this explicitely to facilitate searching) OPENJDK_BUILD_OS="$VAR_OS" - OPENJDK_BUILD_OS_API="$VAR_OS_API" - OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + if test "x$VAR_OS_TYPE" != x; then + OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE" + else + OPENJDK_BUILD_OS_TYPE="$VAR_OS" + fi + if test "x$VAR_OS_ENV" != x; then + OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + else + OPENJDK_BUILD_OS_ENV="$VAR_OS" + fi OPENJDK_BUILD_CPU="$VAR_CPU" OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" AC_SUBST(OPENJDK_BUILD_OS) - AC_SUBST(OPENJDK_BUILD_OS_API) + AC_SUBST(OPENJDK_BUILD_OS_TYPE) AC_SUBST(OPENJDK_BUILD_OS_ENV) AC_SUBST(OPENJDK_BUILD_CPU) AC_SUBST(OPENJDK_BUILD_CPU_ARCH) @@ -187,14 +188,22 @@ PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu) # ... and setup our own variables. (Do this explicitely to facilitate searching) OPENJDK_TARGET_OS="$VAR_OS" - OPENJDK_TARGET_OS_API="$VAR_OS_API" - OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" + if test "x$VAR_OS_TYPE" != x; then + OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE" + else + OPENJDK_TARGET_OS_TYPE="$VAR_OS" + fi + if test "x$VAR_OS_ENV" != x; then + OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" + else + OPENJDK_TARGET_OS_ENV="$VAR_OS" + fi OPENJDK_TARGET_CPU="$VAR_CPU" OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" AC_SUBST(OPENJDK_TARGET_OS) - AC_SUBST(OPENJDK_TARGET_OS_API) + AC_SUBST(OPENJDK_TARGET_OS_TYPE) AC_SUBST(OPENJDK_TARGET_OS_ENV) AC_SUBST(OPENJDK_TARGET_CPU) AC_SUBST(OPENJDK_TARGET_CPU_ARCH) @@ -331,19 +340,10 @@ fi AC_SUBST(OPENJDK_TARGET_CPU_JLI_CFLAGS) - # Setup OPENJDK_TARGET_OS_API_DIR, used in source paths. - if test "x$OPENJDK_TARGET_OS_API" = xposix; then - OPENJDK_TARGET_OS_API_DIR="unix" - fi - if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then - OPENJDK_TARGET_OS_API_DIR="windows" - fi - AC_SUBST(OPENJDK_TARGET_OS_API_DIR) - if test "x$OPENJDK_TARGET_OS" = xmacosx; then OPENJDK_TARGET_OS_EXPORT_DIR=macosx else - OPENJDK_TARGET_OS_EXPORT_DIR=${OPENJDK_TARGET_OS_API_DIR} + OPENJDK_TARGET_OS_EXPORT_DIR=${OPENJDK_TARGET_OS_TYPE} fi AC_SUBST(OPENJDK_TARGET_OS_EXPORT_DIR) @@ -472,8 +472,8 @@ # And -q on AIX because otherwise the compiler produces 32-bit objects by default PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS elif test "x$COMPILE_TYPE" = xreduced; then - if test "x$OPENJDK_TARGET_OS" != xwindows; then - # Specify -m if running reduced on other Posix platforms + if test "x$OPENJDK_TARGET_OS_TYPE" = xunix; then + # Specify -m if running reduced on unix platforms PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS fi fi
--- a/common/autoconf/spec.gmk.in Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/spec.gmk.in Wed Jul 05 20:09:40 2017 +0200 @@ -36,6 +36,7 @@ X:= SPACE:=$(X) $(X) COMMA:=, +DOLLAR:=$$ HASH:=\# LEFT_PAREN:=( RIGHT_PAREN:=) @@ -82,7 +83,7 @@ # The built jdk will run in this target system. OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ -OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@ +OPENJDK_TARGET_OS_TYPE:=@OPENJDK_TARGET_OS_TYPE@ OPENJDK_TARGET_OS_ENV:=@OPENJDK_TARGET_OS_ENV@ OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ @@ -99,13 +100,12 @@ OPENJDK_TARGET_CPU_LEGACY_LIB:=@OPENJDK_TARGET_CPU_LEGACY_LIB@ OPENJDK_TARGET_CPU_OSARCH:=@OPENJDK_TARGET_CPU_OSARCH@ OPENJDK_TARGET_CPU_JLI_CFLAGS:=@OPENJDK_TARGET_CPU_JLI_CFLAGS@ -OPENJDK_TARGET_OS_API_DIR:=@OPENJDK_TARGET_OS_API_DIR@ OPENJDK_TARGET_OS_EXPORT_DIR:=@OPENJDK_TARGET_OS_EXPORT_DIR@ # We are building on this build system. # When not cross-compiling, it is the same as the target. OPENJDK_BUILD_OS:=@OPENJDK_BUILD_OS@ -OPENJDK_BUILD_OS_API:=@OPENJDK_BUILD_OS_API@ +OPENJDK_BUILD_OS_TYPE:=@OPENJDK_BUILD_OS_TYPE@ OPENJDK_BUILD_OS_ENV:=@OPENJDK_BUILD_OS_ENV@ OPENJDK_BUILD_CPU:=@OPENJDK_BUILD_CPU@ @@ -343,7 +343,7 @@ CPP:=@FIXPATH@ @CPP@ #CPPFLAGS:=@CPPFLAGS@ -# The linker can be gcc or ld on posix systems, or link.exe on windows systems. +# The linker can be gcc or ld on unix systems, or link.exe on windows systems. LD:=@FIXPATH@ @LD@ # Xcode SDK path @@ -384,7 +384,7 @@ AS:=@FIXPATH@ @AS@ -# AR is used to create a static library (is ar in posix, lib.exe in windows) +# AR is used to create a static library (is ar in unix, lib.exe in windows) AR:=@FIXPATH@ @AR@ ARFLAGS:=@ARFLAGS@ @@ -448,7 +448,7 @@ JAVA_TOOL_FLAGS_SMALL:=@JAVA_TOOL_FLAGS_SMALL@ SJAVAC_SERVER_JAVA_FLAGS:=@SJAVAC_SERVER_JAVA_FLAGS@ -# The *_CMD variables are defined separately to be easily overridden in bootcycle-spec.gmk +# The *_CMD variables are defined separately to be easily overridden in bootcycle-spec.gmk # for bootcycle-images build. Make sure to keep them in sync. Do not use the *_CMD # versions of the variables directly. JAVA_CMD:=@JAVA@ @@ -562,10 +562,10 @@ # Where the build output is stored for your convenience. BUILD_LOG:=@BUILD_LOG@ BUILD_LOG_PREVIOUS:=@BUILD_LOG_PREVIOUS@ -# Disable the build log wrapper on sjavac+winapi until +# Disable the build log wrapper on sjavac+windows until # we have solved how to prevent the log wrapper to wait # for the background sjavac server process. -ifeq (@ENABLE_SJAVAC@X@OPENJDK_BUILD_OS_API@,yesXwinapi) +ifeq (@ENABLE_SJAVAC@X@OPENJDK_BUILD_OS@,yesXwindows) BUILD_LOG_WRAPPER:= else BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@ @@ -702,7 +702,7 @@ # This macro is called to allow inclusion of closed source counterparts. # Unless overridden in closed sources, it expands to nothing. -# Usage: This function is called in an open makefile, with the following +# Usage: This function is called in an open makefile, with the following # arguments: # $1 the name of the repo, or empty if the top-level repo. # $2 the name of the makefile
--- a/common/autoconf/toolchain.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/toolchain.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -712,12 +712,6 @@ [HAS_CFLAG_OPTIMIZE_DEBUG=true], [HAS_CFLAG_OPTIMIZE_DEBUG=false]) - # "-fsanitize=undefined" supported for GCC 4.9 and later - CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG="-fsanitize=undefined -fsanitize-recover" - FLAGS_COMPILER_CHECK_ARGUMENTS([$CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG], - [HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR=true], - [HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR=false]) - # "-z relro" supported in GNU binutils 2.17 and later LINKER_RELRO_FLAG="-Xlinker -z -Xlinker relro" FLAGS_LINKER_CHECK_ARGUMENTS([$LINKER_RELRO_FLAG],
--- a/common/autoconf/toolchain_windows.m4 Thu Dec 04 15:23:04 2014 -0800 +++ b/common/autoconf/toolchain_windows.m4 Wed Jul 05 20:09:40 2017 +0200 @@ -248,7 +248,7 @@ METHOD="$2" if test -e "$POSSIBLE_MSVCR_DLL"; then AC_MSG_NOTICE([Found msvcr100.dll at $POSSIBLE_MSVCR_DLL using $METHOD]) - + # Need to check if the found msvcr is correct architecture AC_MSG_CHECKING([found msvcr100.dll architecture]) MSVCR_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVCR_DLL"` @@ -291,7 +291,7 @@ AC_MSG_ERROR([Could not find a proper msvcr100.dll as specified by --with-msvcr-dll]) fi fi - + if test "x$MSVCR_DLL" = x; then # Probe: Using well-known location from Visual Studio 10.0 if test "x$VCINSTALLDIR" != x; then @@ -311,9 +311,9 @@ POSSIBLE_MSVCR_DLL="$BOOT_JDK/bin/msvcr100.dll" TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [well-known location in Boot JDK]) fi - + if test "x$MSVCR_DLL" = x; then - # Probe: Look in the Windows system32 directory + # Probe: Look in the Windows system32 directory CYGWIN_SYSTEMROOT="$SYSTEMROOT" BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_SYSTEMROOT) POSSIBLE_MSVCR_DLL="$CYGWIN_SYSTEMROOT/system32/msvcr100.dll" @@ -333,7 +333,7 @@ TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [search of VS100COMNTOOLS]) fi fi - + if test "x$MSVCR_DLL" = x; then # Probe: Search wildly in the VCINSTALLDIR. We've probably lost by now. # (This was the original behaviour; kept since it might turn up something) @@ -347,11 +347,11 @@ POSSIBLE_MSVCR_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name msvcr100.dll | $HEAD --lines 1` fi fi - + TOOLCHAIN_CHECK_POSSIBLE_MSVCR_DLL([$POSSIBLE_MSVCR_DLL], [search of VCINSTALLDIR]) fi fi - + if test "x$MSVCR_DLL" = x; then AC_MSG_CHECKING([for msvcr100.dll]) AC_MSG_RESULT([no])
--- a/common/bin/compare_exceptions.sh.incl Thu Dec 04 15:23:04 2014 -0800 +++ b/common/bin/compare_exceptions.sh.incl Wed Jul 05 20:09:40 2017 +0200 @@ -110,6 +110,7 @@ ./bin/wsimport ./bin/xjc ./jre/bin/java +./jre/bin/jjs ./jre/bin/keytool ./jre/bin/orbd ./jre/bin/pack200 @@ -199,6 +200,7 @@ ./bin/wsimport ./bin/xjc ./jre/bin/java +./jre/bin/jjs ./jre/bin/keytool ./jre/bin/orbd ./jre/bin/pack200 @@ -924,11 +926,6 @@ /META-INF/INDEX.LIST " -KNOWN_BIN_DIFF=" -./jre/lib/libJObjC.dylib -./lib/libJObjC.dylib -" - ACCEPTED_BIN_DIFF=" ./bin/appletviewer ./bin/idlj @@ -980,34 +977,82 @@ ./jre/bin/tnameserv ./jre/lib/libsaproc.dylib ./jre/lib/server/libjvm.dylib +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.dylib +./demo/jvmti/gctest/lib/libgctest.dylib +./demo/jvmti/heapTracker/lib/libheapTracker.dylib +./demo/jvmti/heapViewer/lib/libheapViewer.dylib +./demo/jvmti/minst/lib/libminst.dylib +./demo/jvmti/mtrace/lib/libmtrace.dylib +./demo/jvmti/versionCheck/lib/libversionCheck.dylib +./demo/jvmti/waiters/lib/libwaiters.dylib +./Contents/Home/lib/libAppleScriptEngine.dylib +./Contents/Home/lib/libattach.dylib +./Contents/Home/lib/libawt_lwawt.dylib +./Contents/Home/lib/libdeploy.dylib +./Contents/Home/lib/libdt_socket.dylib +./Contents/Home/lib/libhprof.dylib +./Contents/Home/lib/libinstrument.dylib +./Contents/Home/lib/libjava_crw_demo.dylib +./Contents/Home/lib/libjdwp.dylib +./Contents/Home/lib/libjsdt.dylib +./Contents/Home/lib/libjsig.dylib +./Contents/Home/lib/libmanagement.dylib +./Contents/Home/lib/libnpjp2.dylib +./Contents/Home/lib/libosx.dylib +./Contents/Home/lib/libosxapp.dylib +./Contents/Home/lib/libsaproc.dylib +./Contents/Home/lib/libsplashscreen.dylib +./Contents/Home/lib/libverify.dylib +./Contents/Home/lib/server/libjsig.dylib +./Contents/Home/lib/server/libjvm.dylib +./jre/lib/libAppleScriptEngine.dylib +./jre/lib/libattach.dylib +./jre/lib/libawt_lwawt.dylib +./jre/lib/libdeploy.dylib +./jre/lib/libdt_socket.dylib +./jre/lib/libhprof.dylib +./jre/lib/libinstrument.dylib +./jre/lib/libjava_crw_demo.dylib +./jre/lib/libjdwp.dylib +./jre/lib/libjsdt.dylib +./jre/lib/libjsig.dylib +./jre/lib/libmanagement.dylib +./jre/lib/libosx.dylib +./jre/lib/libosxapp.dylib +./jre/lib/libsaproc.dylib +./jre/lib/libsplashscreen.dylib +./jre/lib/libverify.dylib +./jre/lib/server/libjvm.dylib +./lib/libAppleScriptEngine.dylib +./lib/libattach.dylib +./lib/libawt_lwawt.dylib +./lib/libdeploy.dylib +./lib/libdt_socket.dylib +./lib/libhprof.dylib +./lib/libinstrument.dylib +./lib/libjava_crw_demo.dylib +./lib/libjdwp.dylib +./lib/libjsdt.dylib +./lib/libjsig.dylib +./lib/libmanagement.dylib +./lib/libnpjp2.dylib +./lib/libosx.dylib +./lib/libosxapp.dylib +./lib/libverify.dylib ./lib/libsaproc.dylib +./lib/libsplashscreen.dylib ./lib/server/libjvm.dylib ./lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel " -KNOWN_SIZE_DIFF=" -./jre/lib/libJObjC.dylib -./lib/libJObjC.dylib -" - SORT_SYMBOLS=" -./jre/lib/libJObjC.dylib -./lib/libJObjC.dylib +./Contents/Home/lib/libsaproc.dylib +./jre/lib/libsaproc.dylib +./lib/libsaproc.dylib " -KNOWN_SYM_DIFF=" -./jre/lib/libJObjC.dylib -./lib/libJObjC.dylib +ACCEPTED_SMALL_SIZE_DIFF=" +./bin/javaws +./Contents/Home/bin/_javaws " - -KNOWN_ELF_DIFF=" -./jre/lib/libJObjC.dylib -./lib/libJObjC.dylib -" - -KNOWN_DIS_DIFF=" -./jre/lib/libJObjC.dylib -./lib/libJObjC.dylib -" - fi
--- a/common/bin/logger.sh Thu Dec 04 15:23:04 2014 -0800 +++ b/common/bin/logger.sh Wed Jul 05 20:09:40 2017 +0200 @@ -22,10 +22,10 @@ # questions. # -# Usage: ./logger.sh theloggfile acommand arg1 arg2 +# Usage: ./logger.sh theloggfile acommand arg1 arg2 # # Execute acommand with args, in such a way that -# both stdout and stderr from acommand are appended to +# both stdout and stderr from acommand are appended to # theloggfile. # # Preserve stdout and stderr, so that the stdout
--- a/common/bin/shell-tracer.sh Thu Dec 04 15:23:04 2014 -0800 +++ b/common/bin/shell-tracer.sh Wed Jul 05 20:09:40 2017 +0200 @@ -26,12 +26,12 @@ # # This shell script is supposed to be set as a replacement for SHELL in make, # causing it to be called whenever make wants to execute shell commands. -# The <shell command line> is suitable for passing on to the old shell, +# The <shell command line> is suitable for passing on to the old shell, # typically beginning with -c. # -# This script will make sure the shell command line is executed with +# This script will make sure the shell command line is executed with # OLD_SHELL -x, and it will also store a simple log of the the time it takes to -# execute the command in the OUTPUT_FILE, using the "time" utility as pointed +# execute the command in the OUTPUT_FILE, using the "time" utility as pointed # to by TIME_CMD. If TIME_CMD is "-", no timestamp will be stored. TIME_CMD="$1"
--- a/common/bin/test_builds.sh Thu Dec 04 15:23:04 2014 -0800 +++ b/common/bin/test_builds.sh Wed Jul 05 20:09:40 2017 +0200 @@ -171,7 +171,7 @@ ) 2>&1 | tee ${t3}.build.txt checkErrors -# Compare old build to build-infra build +# Compare old build to build-infra build ( \ sh ${t0}/common/bin/compareimage.sh \ ${t3}/build/*/j2sdk-image \ @@ -181,4 +181,3 @@ checkErrors exit 0 -
--- a/common/bin/unshuffle_patch.sh Thu Dec 04 15:23:04 2014 -0800 +++ b/common/bin/unshuffle_patch.sh Wed Jul 05 20:09:40 2017 +0200 @@ -80,7 +80,7 @@ if [ $repo = "$r" ] ; then found="true" break; - fi + fi done if [ $found = "false" ] ; then echo "ERROR: Unknown repo: $repo. Should be one of [$repos]." >&2 @@ -200,4 +200,3 @@ printf "%s\n" "$line" >> $output fi done < "$input" -
--- a/corba/.hgtags Thu Dec 04 15:23:04 2014 -0800 +++ b/corba/.hgtags Wed Jul 05 20:09:40 2017 +0200 @@ -283,3 +283,4 @@ 8acf056126e819cf536eef02aee0f61f207a6b52 jdk9-b38 53bf36cb722db50815712258a77cb6bbe25a2f5f jdk9-b39 e27c725d6c9d155667b35255f442d4ceb8c3c084 jdk9-b40 +1908b886ba1eda46fa725cf1160fe5d30fd1a7e5 jdk9-b41
--- a/hotspot/.hgtags Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/.hgtags Wed Jul 05 20:09:40 2017 +0200 @@ -443,3 +443,4 @@ c363a8b87e477ee45d6d3cb2a36cb365141bc596 jdk9-b38 9cb75e5e394827ccbaf2e15524108a412dc4ddc5 jdk9-b39 6b09b3193d731e3288e2a240c504a20d0a06c766 jdk9-b40 +1d29b13e8a515a7ea3b882f140576d5d675bc11f jdk9-b41
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/DefNewGeneration.java Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/DefNewGeneration.java Wed Jul 05 20:09:40 2017 +0200 @@ -64,8 +64,8 @@ } // Accessing spaces - public EdenSpace eden() { - return (EdenSpace) VMObjectFactory.newObject(EdenSpace.class, edenSpaceField.getValue(addr)); + public ContiguousSpace eden() { + return (ContiguousSpace) VMObjectFactory.newObject(ContiguousSpace.class, edenSpaceField.getValue(addr)); } public ContiguousSpace from() {
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/EdenSpace.java Thu Dec 04 15:23:04 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -/** <P> Class EdenSpace describes eden-space in new - generation. (Currently it does not add any significant - functionality beyond ContiguousSpace.) */ - -public class EdenSpace extends ContiguousSpace { - public EdenSpace(Address addr) { - super(addr); - } -}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java Wed Jul 05 20:09:40 2017 +0200 @@ -219,7 +219,7 @@ if (threadNameField == null) { SystemDictionary sysDict = VM.getVM().getSystemDictionary(); InstanceKlass k = sysDict.getThreadKlass(); - threadNameField = (OopField) k.findField("name", "[C"); + threadNameField = (OopField) k.findField("name", "Ljava/lang/String;"); threadGroupField = (OopField) k.findField("group", "Ljava/lang/ThreadGroup;"); threadEETopField = (LongField) k.findField("eetop", "J"); threadTIDField = (LongField) k.findField("tid", "J"); @@ -258,7 +258,7 @@ public static String threadOopGetName(Oop threadOop) { initThreadFields(); - return charArrayToString((TypeArray) threadNameField.getValue(threadOop)); + return stringOopToString(threadNameField.getValue(threadOop)); } /** May return null if, e.g., thread was not started */
--- a/hotspot/make/bsd/makefiles/sa.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/bsd/makefiles/sa.make Wed Jul 05 20:09:40 2017 +0200 @@ -40,6 +40,8 @@ include $(GAMMADIR)/make/sa.files +-include $(HS_ALT_MAKE)/bsd/makefiles/sa.make + TOPDIR = $(shell echo `pwd`) GENERATED = $(TOPDIR)/../generated
--- a/hotspot/make/linux/makefiles/gcc.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/linux/makefiles/gcc.make Wed Jul 05 20:09:40 2017 +0200 @@ -214,7 +214,7 @@ WARNINGS_ARE_ERRORS += -Wno-return-type -Wno-empty-body endif -WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 +WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 -Wreturn-type ifeq ($(USE_CLANG),) # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit
--- a/hotspot/make/solaris/makefiles/add_gnu_debuglink.make Thu Dec 04 15:23:04 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# 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. -# -# - -# Rules to build add_gnu_debuglink, used by vm.make on Solaris - -# Allow $(ADD_GNU_DEBUGLINK) to be called from any directory. -# We don't set or use the GENERATED macro to avoid affecting -# other HotSpot Makefiles. -TOPDIR = $(shell echo `pwd`) -ADD_GNU_DEBUGLINK = $(TOPDIR)/../generated/add_gnu_debuglink - -ADD_GNU_DEBUGLINK_DIR = $(GAMMADIR)/src/os/solaris/add_gnu_debuglink -ADD_GNU_DEBUGLINK_SRC = $(ADD_GNU_DEBUGLINK_DIR)/add_gnu_debuglink.c -ADD_GNU_DEBUGLINK_FLAGS = -LIBS_ADD_GNU_DEBUGLINK += -lelf - -ifeq ("${Platform_compiler}", "sparcWorks") -# Enable the following ADD_GNU_DEBUGLINK_FLAGS addition if you need to -# compare the built ELF objects. -# -# The -g option makes static data global and the "-W0,-noglobal" -# option tells the compiler to not globalize static data using a unique -# globalization prefix. Instead force the use of a static globalization -# prefix based on the source filepath so the objects from two identical -# compilations are the same. -# -# Note: The blog says to use "-W0,-xglobalstatic", but that doesn't -# seem to work. I got "-W0,-noglobal" from Kelly and that works. -#ADD_GNU_DEBUGLINK_FLAGS += -W0,-noglobal -endif # Platform_compiler == sparcWorks - -$(ADD_GNU_DEBUGLINK): $(ADD_GNU_DEBUGLINK_SRC) - $(CC) -g -o $@ $< $(ADD_GNU_DEBUGLINK_FLAGS) $(LIBS_ADD_GNU_DEBUGLINK)
--- a/hotspot/make/solaris/makefiles/defs.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/solaris/makefiles/defs.make Wed Jul 05 20:09:40 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -138,6 +138,55 @@ OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) endif + ifneq ($(OBJCOPY),) + # OBJCOPY version check: + # - version number is last blank separate word on first line + # - version number formats that have been seen: + # - <major>.<minor> + # - <major>.<minor>.<micro> + # + # Full Debug Symbols on Solaris needs version 2.21.1 or newer. + # + OBJCOPY_VERS_CHK := $(shell \ + $(OBJCOPY) --version \ + | sed -n \ + -e 's/.* //' \ + -e '/^[01]\./b bad' \ + -e '/^2\./{' \ + -e ' s/^2\.//' \ + -e ' /^[0-9]$$/b bad' \ + -e ' /^[0-9]\./b bad' \ + -e ' /^1[0-9]$$/b bad' \ + -e ' /^1[0-9]\./b bad' \ + -e ' /^20\./b bad' \ + -e ' /^21\.0$$/b bad' \ + -e ' /^21\.0\./b bad' \ + -e '}' \ + -e ':good' \ + -e 's/.*/VALID_VERSION/p' \ + -e 'q' \ + -e ':bad' \ + -e 's/.*/BAD_VERSION/p' \ + -e 'q' \ + ) + ifeq ($(OBJCOPY_VERS_CHK),BAD_VERSION) + _JUNK_ := $(shell \ + echo >&2 "WARNING: $(OBJCOPY) --version info:"; \ + $(OBJCOPY) --version | sed -n -e 's/^/WARNING: /p' -e 'q' >&2; \ + echo >&2 "WARNING: an objcopy version of 2.21.1 or newer" \ + "is needed to create valid .debuginfo files."; \ + echo >&2 "WARNING: ignoring above objcopy command."; \ + echo >&2 "WARNING: patch 149063-01 or newer contains the" \ + "correct Solaris 10 SPARC version."; \ + echo >&2 "WARNING: patch 149064-01 or newer contains the" \ + "correct Solaris 10 X86 version."; \ + echo >&2 "WARNING: Solaris 11 Update 1 contains the" \ + "correct version."; \ + ) + OBJCOPY= + endif + endif + ifeq ($(OBJCOPY),) $(eval $(call print_info, "no objcopy cmd found so cannot create .debuginfo files.")) ENABLE_FULL_DEBUG_SYMBOLS=0
--- a/hotspot/make/solaris/makefiles/dtrace.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/solaris/makefiles/dtrace.make Wed Jul 05 20:09:40 2017 +0200 @@ -101,25 +101,16 @@ XLIBJVM_DTRACE_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DEBUGINFO) XLIBJVM_DTRACE_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DIZ) -$(XLIBJVM_DB): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE) +$(XLIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE) @echo $(LOG_INFO) Making $@ $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \ $(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. -I$(GENERATED) \ $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. -# Clear the SHF_ALLOC flag (if set) from empty section headers. -# An empty section header has sh_addr == 0 and sh_size == 0. -# This problem has only been seen on Solaris X64, but we call this tool -# on all Solaris builds just in case. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DB_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. -# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ; # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not # in the link name: - ( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ) + ( cd $(XLIBJVM_DIR) && $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ) ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -136,20 +127,16 @@ endif endif -$(XLIBJVM_DTRACE): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) +$(XLIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) @echo $(LOG_INFO) Making $@ $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \ $(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. \ $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# Clear the SHF_ALLOC flag (if set) from empty section headers. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DTRACE_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ; # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not # in the link name: - ( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ) + ( cd $(XLIBJVM_DIR) && $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ) ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -206,17 +193,13 @@ $(JVMOFFS.o): $(JVMOFFS).h $(JVMOFFS).cpp $(QUIETLY) $(CXX) -c -I. -o $@ $(ARCHFLAG) -D$(TYPE) $(JVMOFFS).cpp -$(LIBJVM_DB): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE) +$(LIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE) @echo $(LOG_INFO) Making $@ $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. -I$(GENERATED) \ $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# Clear the SHF_ALLOC flag (if set) from empty section headers. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DB_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJVM_DB_DEBUGINFO) $@ + $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -231,17 +214,13 @@ endif endif -$(LIBJVM_DTRACE): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) +$(LIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) @echo $(LOG_INFO) Making $@ $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. \ $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# Clear the SHF_ALLOC flag (if set) from empty section headers. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DTRACE_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJVM_DTRACE_DEBUGINFO) $@ + $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else
--- a/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make Thu Dec 04 15:23:04 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# 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. -# -# - -# Rules to build fix_empty_sec_hdr_flags, used by vm.make on Solaris - -# Allow $(FIX_EMPTY_SEC_HDR_FLAGS) to be called from any directory. -# We don't set or use the GENERATED macro to avoid affecting -# other HotSpot Makefiles. -TOPDIR = $(shell echo `pwd`) -FIX_EMPTY_SEC_HDR_FLAGS = $(TOPDIR)/../generated/fix_empty_sec_hdr_flags - -FIX_EMPTY_SEC_HDR_FLAGS_DIR = $(GAMMADIR)/src/os/solaris/fix_empty_sec_hdr_flags -FIX_EMPTY_SEC_HDR_FLAGS_SRC = $(FIX_EMPTY_SEC_HDR_FLAGS_DIR)/fix_empty_sec_hdr_flags.c -FIX_EMPTY_SEC_HDR_FLAGS_FLAGS = -LIBS_FIX_EMPTY_SEC_HDR_FLAGS += -lelf - -ifeq ("${Platform_compiler}", "sparcWorks") -# Enable the following FIX_EMPTY_SEC_HDR_FLAGS_FLAGS addition if you need to -# compare the built ELF objects. -# -# The -g option makes static data global and the "-W0,-noglobal" -# option tells the compiler to not globalize static data using a unique -# globalization prefix. Instead force the use of a static globalization -# prefix based on the source filepath so the objects from two identical -# compilations are the same. -# -# Note: The blog says to use "-W0,-xglobalstatic", but that doesn't -# seem to work. I got "-W0,-noglobal" from Kelly and that works. -#FIX_EMPTY_SEC_HDR_FLAGS_FLAGS += -W0,-noglobal -endif # Platform_compiler == sparcWorks - -$(FIX_EMPTY_SEC_HDR_FLAGS): $(FIX_EMPTY_SEC_HDR_FLAGS_SRC) - $(CC) -g -o $@ $< $(FIX_EMPTY_SEC_HDR_FLAGS_FLAGS) $(LIBS_FIX_EMPTY_SEC_HDR_FLAGS)
--- a/hotspot/make/solaris/makefiles/jsig.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/solaris/makefiles/jsig.make Wed Jul 05 20:09:40 2017 +0200 @@ -47,22 +47,13 @@ LFLAGS_JSIG += -mt -xnolib endif -$(LIBJSIG): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) +$(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) @echo $(LOG_INFO) Making signal interposition lib... $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ $(LFLAGS_JSIG) -o $@ $(JSIGSRCDIR)/jsig.c -ldl ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. -# Clear the SHF_ALLOC flag (if set) from empty section headers. -# An empty section header has sh_addr == 0 and sh_size == 0. -# This problem has only been seen on Solaris X64, but we call this tool -# on all Solaris builds just in case. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJSIG_DEBUGINFO) $@ + $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else
--- a/hotspot/make/solaris/makefiles/saproc.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/solaris/makefiles/saproc.make Wed Jul 05 20:09:40 2017 +0200 @@ -90,7 +90,7 @@ #SOLARIS_11_B159_OR_LATER=-DSOLARIS_11_B159_OR_LATER -$(LIBSAPROC): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(SASRCFILES) $(SADISOBJ) $(SAMAPFILE) +$(LIBSAPROC): $(SASRCFILES) $(SADISOBJ) $(SAMAPFILE) $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ exit 1; \ @@ -121,17 +121,8 @@ -c -o $(SADISOBJ) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. -# Clear the SHF_ALLOC flag (if set) from empty section headers. -# An empty section header has sh_addr == 0 and sh_size == 0. -# This problem has only been seen on Solaris X64, but we call this tool -# on all Solaris builds just in case. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBSAPROC_DEBUGINFO) $@ + $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else
--- a/hotspot/make/solaris/makefiles/vm.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/solaris/makefiles/vm.make Wed Jul 05 20:09:40 2017 +0200 @@ -155,14 +155,6 @@ include $(MAKEFILES_DIR)/dtrace.make #---------------------------------------------------------------------- -# add_gnu_debuglink tool -include $(MAKEFILES_DIR)/add_gnu_debuglink.make - -#---------------------------------------------------------------------- -# fix_empty_sec_hdr_flags tool -include $(MAKEFILES_DIR)/fix_empty_sec_hdr_flags.make - -#---------------------------------------------------------------------- # JVM JVM = jvm @@ -302,7 +294,7 @@ LINK_VM = $(LINK_LIB.CXX) endif # making the library: -$(LIBJVM): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(LIBJVM.o) $(LIBJVM_MAPFILE) +$(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) ifeq ($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),) @echo $(LOG_INFO) Linking vm... $(QUIETLY) $(LINK_LIB.CXX/PRE_HOOK) @@ -310,17 +302,8 @@ $(QUIETLY) $(LINK_LIB.CXX/POST_HOOK) $(QUIETLY) rm -f $@.1 && ln -s $@ $@.1 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. -# Clear the SHF_ALLOC flag (if set) from empty section headers. -# An empty section header has sh_addr == 0 and sh_size == 0. -# This problem has only been seen on Solaris X64, but we call this tool -# on all Solaris builds just in case. - $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) -# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJVM_DEBUGINFO) $@ + $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else
--- a/hotspot/make/windows/makefiles/sa.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/windows/makefiles/sa.make Wed Jul 05 20:09:40 2017 +0200 @@ -122,7 +122,7 @@ SA_LFLAGS = $(SA_LFLAGS) -map -debug !endif !if "$(BUILDARCH)" == "i486" -SA_LFLAGS = $(SAFESEH_FLAG) $(SA_LFLAGS) +SA_LFLAGS = /SAFESEH $(SA_LFLAGS) !endif SA_CFLAGS = $(SA_CFLAGS) $(MP_FLAG)
--- a/hotspot/make/windows/makefiles/vm.make Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/make/windows/makefiles/vm.make Wed Jul 05 20:09:40 2017 +0200 @@ -89,19 +89,24 @@ # If you modify exports below please do the corresponding changes in # src/share/tools/ProjectCreator/WinGammaPlatformVC7.java -LD_FLAGS=$(LD_FLAGS) $(STACK_SIZE) /subsystem:windows /dll /base:0x8000000 \ - /export:JNI_GetDefaultJavaVMInitArgs \ - /export:JNI_CreateJavaVM \ - /export:JVM_FindClassFromBootLoader \ - /export:JNI_GetCreatedJavaVMs \ - /export:jio_snprintf \ - /export:jio_printf \ - /export:jio_fprintf \ - /export:jio_vfprintf \ - /export:jio_vsnprintf \ - $(AGCT_EXPORT) \ - /export:JVM_GetVersionInfo \ - /export:JVM_InitAgentProperties +!if "$(BUILDARCH)" == "amd64" +EXPORT_LIST= +!else +EXPORT_LIST=/export:JNI_GetDefaultJavaVMInitArgs \ + /export:JNI_CreateJavaVM \ + /export:JVM_FindClassFromBootLoader \ + /export:JNI_GetCreatedJavaVMs \ + /export:jio_snprintf \ + /export:jio_printf \ + /export:jio_fprintf \ + /export:jio_vfprintf \ + /export:jio_vsnprintf \ + $(AGCT_EXPORT) \ + /export:JVM_GetVersionInfo \ + /export:JVM_InitAgentProperties +!endif + +LD_FLAGS=$(LD_FLAGS) $(STACK_SIZE) /subsystem:windows /dll /base:0x8000000 $(EXPORT_LIST) CXX_INCLUDE_DIRS=/I "..\generated"
--- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -27,6 +27,7 @@ #define CPU_PPC_VM_MACROASSEMBLER_PPC_HPP #include "asm/assembler.hpp" +#include "utilities/macros.hpp" // MacroAssembler extends Assembler by a few frequently used macros.
--- a/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -3513,7 +3513,7 @@ Rtags = R3_ARG1, Rindex = R5_ARG3; - const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; + const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc(); // -------------------------------------------------------------------------- // Check if fast case is possible.
--- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -2734,12 +2734,12 @@ // box->dhw disposition - post-conditions at DONE_LABEL. // - Successful inflated lock: box->dhw != 0. // Any non-zero value suffices. -// Consider G2_thread, rsp, boxReg, or unused_mark() +// Consider G2_thread, rsp, boxReg, or markOopDesc::unused_mark() // - Successful Stack-lock: box->dhw == mark. // box->dhw must contain the displaced mark word value // - Failure -- icc.ZFlag == 0 and box->dhw is undefined. // The slow-path fast_enter() and slow_enter() operators -// are responsible for setting box->dhw = NonZero (typically ::unused_mark). +// are responsible for setting box->dhw = NonZero (typically markOopDesc::unused_mark()). // - Biased: box->dhw is undefined // // SPARC refworkload performance - specifically jetstream and scimark - are @@ -2855,7 +2855,7 @@ // If m->owner != null goto IsLocked // Pessimistic form: Test-and-CAS vs CAS // The optimistic form avoids RTS->RTO cache line upgrades. - ld_ptr(Rmark, ObjectMonitor::owner_offset_in_bytes() - 2, Rscratch); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), Rscratch); andcc(Rscratch, Rscratch, G0); brx(Assembler::notZero, false, Assembler::pn, done); delayed()->nop(); @@ -2864,7 +2864,7 @@ // Try to CAS m->owner from null to Self // Invariant: if we acquire the lock then _recursions should be 0. - add(Rmark, ObjectMonitor::owner_offset_in_bytes()-2, Rmark); + add(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), Rmark); mov(G2_thread, Rscratch); cas_ptr(Rmark, G0, Rscratch); cmp(Rscratch, G0); @@ -2948,7 +2948,7 @@ // Test-and-CAS vs CAS // Pessimistic form avoids futile (doomed) CAS attempts // The optimistic form avoids RTS->RTO cache line upgrades. - ld_ptr(Rmark, ObjectMonitor::owner_offset_in_bytes() - 2, Rscratch); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), Rscratch); andcc(Rscratch, Rscratch, G0); brx(Assembler::notZero, false, Assembler::pn, done); delayed()->nop(); @@ -2957,13 +2957,13 @@ // Try to CAS m->owner from null to Self // Invariant: if we acquire the lock then _recursions should be 0. - add(Rmark, ObjectMonitor::owner_offset_in_bytes()-2, Rmark); + add(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), Rmark); mov(G2_thread, Rscratch); cas_ptr(Rmark, G0, Rscratch); cmp(Rscratch, G0); // ST box->displaced_header = NonZero. // Any non-zero value suffices: - // unused_mark(), G2_thread, RBox, RScratch, rsp, etc. + // markOopDesc::unused_mark(), G2_thread, RBox, RScratch, rsp, etc. st_ptr(Rbox, Rbox, BasicLock::displaced_header_offset_in_bytes()); // Intentional fall-through into done } @@ -3031,30 +3031,30 @@ // Note that we use 1-0 locking by default for the inflated case. We // close the resultant (and rare) race by having contented threads in // monitorenter periodically poll _owner. - ld_ptr(Rmark, ObjectMonitor::owner_offset_in_bytes() - 2, Rscratch); - ld_ptr(Rmark, ObjectMonitor::recursions_offset_in_bytes() - 2, Rbox); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), Rscratch); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(recursions), Rbox); xor3(Rscratch, G2_thread, Rscratch); orcc(Rbox, Rscratch, Rbox); brx(Assembler::notZero, false, Assembler::pn, done); delayed()-> - ld_ptr(Rmark, ObjectMonitor::EntryList_offset_in_bytes() - 2, Rscratch); - ld_ptr(Rmark, ObjectMonitor::cxq_offset_in_bytes() - 2, Rbox); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(EntryList), Rscratch); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(cxq), Rbox); orcc(Rbox, Rscratch, G0); if (EmitSync & 65536) { Label LSucc ; brx(Assembler::notZero, false, Assembler::pn, LSucc); delayed()->nop(); ba(done); - delayed()->st_ptr(G0, Rmark, ObjectMonitor::owner_offset_in_bytes() - 2); + delayed()->st_ptr(G0, Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)); bind(LSucc); - st_ptr(G0, Rmark, ObjectMonitor::owner_offset_in_bytes() - 2); + st_ptr(G0, Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)); if (os::is_MP()) { membar (StoreLoad); } - ld_ptr(Rmark, ObjectMonitor::succ_offset_in_bytes() - 2, Rscratch); + ld_ptr(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(succ), Rscratch); andcc(Rscratch, Rscratch, G0); brx(Assembler::notZero, false, Assembler::pt, done); delayed()->andcc(G0, G0, G0); - add(Rmark, ObjectMonitor::owner_offset_in_bytes()-2, Rmark); + add(Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), Rmark); mov(G2_thread, Rscratch); cas_ptr(Rmark, G0, Rscratch); // invert icc.zf and goto done @@ -3066,7 +3066,7 @@ brx(Assembler::notZero, false, Assembler::pn, done); delayed()->nop(); ba(done); - delayed()->st_ptr(G0, Rmark, ObjectMonitor::owner_offset_in_bytes() - 2); + delayed()->st_ptr(G0, Rmark, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)); } bind (LStacked); @@ -3196,7 +3196,7 @@ assert(0 <= con_size_in_bytes && Assembler::is_simm13(con_size_in_bytes), "illegal object size"); assert((con_size_in_bytes & MinObjAlignmentInBytesMask) == 0, "object size is not multiple of alignment"); - if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { + if (!Universe::heap()->supports_inline_contig_alloc()) { // No allocation in the shared eden. ba(slow_case); delayed()->nop(); @@ -3331,7 +3331,7 @@ assert_different_registers(top, t1, t2, t3, G4, G5 /* preserve G4 and G5 */); Label do_refill, discard_tlab; - if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { + if (!Universe::heap()->supports_inline_contig_alloc()) { // No allocation in the shared eden. ba(slow_case); delayed()->nop();
--- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -4813,6 +4813,7 @@ StubRoutines::_atomic_add_entry = generate_atomic_add(); StubRoutines::_atomic_xchg_ptr_entry = StubRoutines::_atomic_xchg_entry; StubRoutines::_atomic_cmpxchg_ptr_entry = StubRoutines::_atomic_cmpxchg_entry; + StubRoutines::_atomic_cmpxchg_byte_entry = ShouldNotCallThisStub(); StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long(); StubRoutines::_atomic_add_ptr_entry = StubRoutines::_atomic_add_entry; #endif // COMPILER2 !=> _LP64
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -3309,7 +3309,7 @@ // (creates a new TLAB, etc.) const bool allow_shared_alloc = - Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; + Universe::heap()->supports_inline_contig_alloc(); if(UseTLAB) { Register RoldTopValue = RallocatedObject;
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -1297,6 +1297,17 @@ emit_operand(reg, adr); } +// The 8-bit cmpxchg compares the value at adr with the contents of rax, +// and stores reg into adr if so; otherwise, the value at adr is loaded into rax,. +// The ZF is set if the compared values were equal, and cleared otherwise. +void Assembler::cmpxchgb(Register reg, Address adr) { // cmpxchg + InstructionMark im(this); + prefix(adr, reg, true); + emit_int8(0x0F); + emit_int8((unsigned char)0xB0); + emit_operand(reg, adr); +} + void Assembler::comisd(XMMRegister dst, Address src) { // NOTE: dbx seems to decode this as comiss even though the // 0x66 is there. Strangly ucomisd comes out correct
--- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -1006,6 +1006,7 @@ void cmpxchg8 (Address adr); + void cmpxchgb(Register reg, Address adr); void cmpxchgl(Register reg, Address adr); void cmpxchgq(Register reg, Address adr);
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -1450,8 +1450,7 @@ void MacroAssembler::rtm_retry_lock_on_busy(Register retry_count_Reg, Register box_Reg, Register tmp_Reg, Register scr_Reg, Label& retryLabel) { Label SpinLoop, SpinExit, doneRetry; - // Clean monitor_value bit to get valid pointer - int owner_offset = ObjectMonitor::owner_offset_in_bytes() - markOopDesc::monitor_value; + int owner_offset = OM_OFFSET_NO_MONITOR_VALUE_TAG(owner); testl(retry_count_Reg, retry_count_Reg); jccb(Assembler::zero, doneRetry); @@ -1532,7 +1531,7 @@ // Use RTM for inflating locks // inputs: objReg (object to lock) // boxReg (on-stack box address (displaced header location) - KILLED) -// tmpReg (ObjectMonitor address + 2(monitor_value)) +// tmpReg (ObjectMonitor address + markOopDesc::monitor_value) void MacroAssembler::rtm_inflated_locking(Register objReg, Register boxReg, Register tmpReg, Register scrReg, Register retry_on_busy_count_Reg, Register retry_on_abort_count_Reg, @@ -1543,8 +1542,7 @@ assert(tmpReg == rax, ""); assert(scrReg == rdx, ""); Label L_rtm_retry, L_decrement_retry, L_on_abort; - // Clean monitor_value bit to get valid pointer - int owner_offset = ObjectMonitor::owner_offset_in_bytes() - markOopDesc::monitor_value; + int owner_offset = OM_OFFSET_NO_MONITOR_VALUE_TAG(owner); // Without cast to int32_t a movptr will destroy r10 which is typically obj movptr(Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())); @@ -1716,7 +1714,7 @@ atomic_incl(ExternalAddress((address)counters->total_entry_count_addr()), scrReg); } if (EmitSync & 1) { - // set box->dhw = unused_mark (3) + // set box->dhw = markOopDesc::unused_mark() // Force all sync thru slow-path: slow_enter() and slow_exit() movptr (Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())); cmpptr (rsp, (int32_t)NULL_WORD); @@ -1769,7 +1767,7 @@ // at [FETCH], below, will never observe a biased encoding (*101b). // If this invariant is not held we risk exclusion (safety) failure. if (UseBiasedLocking && !UseOptoBiasInlining) { - biased_locking_enter(boxReg, objReg, tmpReg, scrReg, true, DONE_LABEL, NULL, counters); + biased_locking_enter(boxReg, objReg, tmpReg, scrReg, false, DONE_LABEL, NULL, counters); } #if INCLUDE_RTM_OPT @@ -1811,7 +1809,7 @@ jmp(DONE_LABEL); bind(IsInflated); - // The object is inflated. tmpReg contains pointer to ObjectMonitor* + 2(monitor_value) + // The object is inflated. tmpReg contains pointer to ObjectMonitor* + markOopDesc::monitor_value #if INCLUDE_RTM_OPT // Use the same RTM locking code in 32- and 64-bit VM. @@ -1823,25 +1821,10 @@ #ifndef _LP64 // The object is inflated. - // - // TODO-FIXME: eliminate the ugly use of manifest constants: - // Use markOopDesc::monitor_value instead of "2". - // use markOop::unused_mark() instead of "3". - // The tmpReg value is an objectMonitor reference ORed with - // markOopDesc::monitor_value (2). We can either convert tmpReg to an - // objectmonitor pointer by masking off the "2" bit or we can just - // use tmpReg as an objectmonitor pointer but bias the objectmonitor - // field offsets with "-2" to compensate for and annul the low-order tag bit. - // - // I use the latter as it avoids AGI stalls. - // As such, we write "mov r, [tmpReg+OFFSETOF(Owner)-2]" - // instead of "mov r, [tmpReg+OFFSETOF(Owner)]". - // - #define OFFSET_SKEWED(f) ((ObjectMonitor::f ## _offset_in_bytes())-2) // boxReg refers to the on-stack BasicLock in the current frame. // We'd like to write: - // set box->_displaced_header = markOop::unused_mark(). Any non-0 value suffices. + // set box->_displaced_header = markOopDesc::unused_mark(). Any non-0 value suffices. // This is convenient but results a ST-before-CAS penalty. The following CAS suffers // additional latency as we have another ST in the store buffer that must drain. @@ -1853,7 +1836,7 @@ if (os::is_MP()) { lock(); } - cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + cmpxchgptr(scrReg, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); } else if ((EmitSync & 128) == 0) { // avoid ST-before-CAS movptr(scrReg, boxReg); @@ -1862,7 +1845,7 @@ // Using a prefetchw helps avoid later RTS->RTO upgrades and cache probes if ((EmitSync & 2048) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { // prefetchw [eax + Offset(_owner)-2] - prefetchw(Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + prefetchw(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); } if ((EmitSync & 64) == 0) { @@ -1871,7 +1854,7 @@ } else { // Can suffer RTS->RTO upgrades on shared or cold $ lines // Test-And-CAS instead of CAS - movptr(tmpReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); // rax, = m->_owner + movptr(tmpReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); // rax, = m->_owner testptr(tmpReg, tmpReg); // Locked ? jccb (Assembler::notZero, DONE_LABEL); } @@ -1887,11 +1870,11 @@ if (os::is_MP()) { lock(); } - cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + cmpxchgptr(scrReg, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); movptr(Address(scrReg, 0), 3); // box->_displaced_header = 3 jccb (Assembler::notZero, DONE_LABEL); get_thread (scrReg); // beware: clobbers ICCs - movptr(Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2), scrReg); + movptr(Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), scrReg); xorptr(boxReg, boxReg); // set icc.ZFlag = 1 to indicate success // If the CAS fails we can either retry or pass control to the slow-path. @@ -1908,7 +1891,7 @@ // Using a prefetchw helps avoid later RTS->RTO upgrades and cache probes if ((EmitSync & 2048) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { // prefetchw [eax + Offset(_owner)-2] - prefetchw(Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + prefetchw(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); } if ((EmitSync & 64) == 0) { @@ -1916,7 +1899,7 @@ xorptr (tmpReg, tmpReg); } else { // Can suffer RTS->RTO upgrades on shared or cold $ lines - movptr(tmpReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); // rax, = m->_owner + movptr(tmpReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); // rax, = m->_owner testptr(tmpReg, tmpReg); // Locked ? jccb (Assembler::notZero, DONE_LABEL); } @@ -1928,7 +1911,7 @@ if (os::is_MP()) { lock(); } - cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + cmpxchgptr(scrReg, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); // If the CAS fails we can either retry or pass control to the slow-path. // We use the latter tactic. @@ -1951,7 +1934,7 @@ movptr(Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())); movptr (boxReg, tmpReg); - movptr (tmpReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + movptr(tmpReg, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); testptr(tmpReg, tmpReg); jccb (Assembler::notZero, DONE_LABEL); @@ -1959,7 +1942,7 @@ if (os::is_MP()) { lock(); } - cmpxchgptr(r15_thread, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + cmpxchgptr(r15_thread, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); // Intentional fall-through into DONE_LABEL ... #endif // _LP64 @@ -2065,8 +2048,7 @@ #if INCLUDE_RTM_OPT if (use_rtm) { Label L_regular_inflated_unlock; - // Clean monitor_value bit to get valid pointer - int owner_offset = ObjectMonitor::owner_offset_in_bytes() - markOopDesc::monitor_value; + int owner_offset = OM_OFFSET_NO_MONITOR_VALUE_TAG(owner); movptr(boxReg, Address(tmpReg, owner_offset)); testptr(boxReg, boxReg); jccb(Assembler::notZero, L_regular_inflated_unlock); @@ -2102,7 +2084,7 @@ get_thread (boxReg); if ((EmitSync & 4096) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { // prefetchw [ebx + Offset(_owner)-2] - prefetchw(Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + prefetchw(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); } // Note that we could employ various encoding schemes to reduce @@ -2111,21 +2093,21 @@ // In practice the chain of fetches doesn't seem to impact performance, however. if ((EmitSync & 65536) == 0 && (EmitSync & 256)) { // Attempt to reduce branch density - AMD's branch predictor. - xorptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); - orptr(boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)); - orptr(boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)); - orptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)); + xorptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(recursions))); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(EntryList))); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(cxq))); jccb (Assembler::notZero, DONE_LABEL); - movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD); + movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), NULL_WORD); jmpb (DONE_LABEL); } else { - xorptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); - orptr(boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)); + xorptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(recursions))); jccb (Assembler::notZero, DONE_LABEL); - movptr(boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)); - orptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)); + movptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(EntryList))); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(cxq))); jccb (Assembler::notZero, CheckSucc); - movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD); + movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), NULL_WORD); jmpb (DONE_LABEL); } @@ -2143,7 +2125,7 @@ // Optional pre-test ... it's safe to elide this if ((EmitSync & 16) == 0) { - cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD); + cmpptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(succ)), (int32_t)NULL_WORD); jccb (Assembler::zero, LGoSlowPath); } @@ -2173,7 +2155,7 @@ // We currently use (3), although it's likely that switching to (2) // is correct for the future. - movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD); + movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), NULL_WORD); if (os::is_MP()) { if (VM_Version::supports_sse2() && 1 == FenceInstruction) { mfence(); @@ -2182,18 +2164,18 @@ } } // Ratify _succ remains non-null - cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), 0); + cmpptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(succ)), 0); jccb (Assembler::notZero, LSuccess); xorptr(boxReg, boxReg); // box is really EAX if (os::is_MP()) { lock(); } - cmpxchgptr(rsp, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + cmpxchgptr(rsp, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); jccb (Assembler::notEqual, LSuccess); // Since we're low on registers we installed rsp as a placeholding in _owner. // Now install Self over rsp. This is safe as we're transitioning from // non-null to non=null get_thread (boxReg); - movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), boxReg); + movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), boxReg); // Intentional fall-through into LGoSlowPath ... bind (LGoSlowPath); @@ -2228,36 +2210,36 @@ } #else // _LP64 // It's inflated - movptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + movptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); xorptr(boxReg, r15_thread); - orptr (boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(recursions))); jccb (Assembler::notZero, DONE_LABEL); - movptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)); - orptr (boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)); + movptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(cxq))); + orptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(EntryList))); jccb (Assembler::notZero, CheckSucc); - movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD); + movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), (int32_t)NULL_WORD); jmpb (DONE_LABEL); if ((EmitSync & 65536) == 0) { Label LSuccess, LGoSlowPath ; bind (CheckSucc); - cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD); + cmpptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(succ)), (int32_t)NULL_WORD); jccb (Assembler::zero, LGoSlowPath); // I'd much rather use lock:andl m->_owner, 0 as it's faster than the // the explicit ST;MEMBAR combination, but masm doesn't currently support // "ANDQ M,IMM". Don't use MFENCE here. lock:add to TOS, xchg, etc // are all faster when the write buffer is populated. - movptr (Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD); + movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), (int32_t)NULL_WORD); if (os::is_MP()) { lock (); addl (Address(rsp, 0), 0); } - cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD); + cmpptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(succ)), (int32_t)NULL_WORD); jccb (Assembler::notZero, LSuccess); movptr (boxReg, (int32_t)NULL_WORD); // box is really EAX if (os::is_MP()) { lock(); } - cmpxchgptr(r15_thread, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + cmpxchgptr(r15_thread, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner))); jccb (Assembler::notEqual, LSuccess); // Intentional fall-through into slow-path @@ -2964,7 +2946,7 @@ Label& slow_case) { assert(obj == rax, "obj must be in rax, for cmpxchg"); assert_different_registers(obj, var_size_in_bytes, t1); - if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { + if (!Universe::heap()->supports_inline_contig_alloc()) { jmp(slow_case); } else { Register end = t1; @@ -4437,7 +4419,7 @@ assert_different_registers(top, thread_reg, t1, t2, /* preserve: */ rbx, rdx); Label do_refill, discard_tlab; - if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { + if (!Universe::heap()->supports_inline_contig_alloc()) { // No allocation in the shared eden. jmp(slow_case); }
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -594,9 +594,35 @@ return start; } - // Support for jint atomic::atomic_cmpxchg_long(jlong exchange_value, - // volatile jlong* dest, - // jlong compare_value) + // Support for jbyte atomic::atomic_cmpxchg(jbyte exchange_value, volatile jbyte* dest, + // jbyte compare_value) + // + // Arguments : + // c_rarg0: exchange_value + // c_rarg1: dest + // c_rarg2: compare_value + // + // Result: + // if ( compare_value == *dest ) { + // *dest = exchange_value + // return compare_value; + // else + // return *dest; + address generate_atomic_cmpxchg_byte() { + StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_byte"); + address start = __ pc(); + + __ movsbq(rax, c_rarg2); + if ( os::is_MP() ) __ lock(); + __ cmpxchgb(c_rarg0, Address(c_rarg1, 0)); + __ ret(0); + + return start; + } + + // Support for jlong atomic::atomic_cmpxchg(jlong exchange_value, + // volatile jlong* dest, + // jlong compare_value) // Arguments : // c_rarg0: exchange_value // c_rarg1: dest @@ -3894,6 +3920,7 @@ StubRoutines::_atomic_xchg_entry = generate_atomic_xchg(); StubRoutines::_atomic_xchg_ptr_entry = generate_atomic_xchg_ptr(); StubRoutines::_atomic_cmpxchg_entry = generate_atomic_cmpxchg(); + StubRoutines::_atomic_cmpxchg_byte_entry = generate_atomic_cmpxchg_byte(); StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long(); StubRoutines::_atomic_add_entry = generate_atomic_add(); StubRoutines::_atomic_add_ptr_entry = generate_atomic_add_ptr();
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -3214,7 +3214,7 @@ // (creates a new TLAB, etc.) const bool allow_shared_alloc = - Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; + Universe::heap()->supports_inline_contig_alloc(); const Register thread = rcx; if (UseTLAB || allow_shared_alloc) {
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -3269,7 +3269,7 @@ // (creates a new TLAB, etc.) const bool allow_shared_alloc = - Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; + Universe::heap()->supports_inline_contig_alloc(); if (UseTLAB) { __ movptr(rax, Address(r15_thread, in_bytes(JavaThread::tlab_top_offset())));
--- a/hotspot/src/cpu/x86/vm/x86_32.ad Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/x86/vm/x86_32.ad Wed Jul 05 20:09:40 2017 +0200 @@ -1210,6 +1210,7 @@ Unimplemented(); + return 0; // Mute compiler } #ifndef PRODUCT
--- a/hotspot/src/cpu/zero/vm/stack_zero.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/zero/vm/stack_zero.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -30,7 +30,9 @@ int ZeroStack::suggest_size(Thread *thread) const { assert(needs_setup(), "already set up"); - return align_size_down(abi_stack_available(thread) / 2, wordSize); + int abi_available = abi_stack_available(thread); + assert(abi_available >= 0, "available abi stack must be >= 0"); + return align_size_down(abi_available / 2, wordSize); } void ZeroStack::handle_overflow(TRAPS) {
--- a/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -48,9 +48,11 @@ // to use under normal circumstances. Note that the returned // value can be negative. inline int ZeroStack::abi_stack_available(Thread *thread) const { - int stack_used = thread->stack_base() - (address) &stack_used; + guarantee(Thread::current() == thread, "should run in the same thread"); + int stack_used = thread->stack_base() - (address) &stack_used + + (StackYellowPages+StackRedPages+StackShadowPages) * os::vm_page_size(); int stack_free = thread->stack_size() - stack_used; - return stack_free - shadow_pages_size(); + return stack_free; } #endif // CPU_ZERO_VM_STACK_ZERO_INLINE_HPP
--- a/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -207,6 +207,7 @@ StubRoutines::_atomic_xchg_ptr_entry = ShouldNotCallThisStub(); StubRoutines::_atomic_cmpxchg_entry = ShouldNotCallThisStub(); StubRoutines::_atomic_cmpxchg_ptr_entry = ShouldNotCallThisStub(); + StubRoutines::_atomic_cmpxchg_byte_entry = ShouldNotCallThisStub(); StubRoutines::_atomic_cmpxchg_long_entry = ShouldNotCallThisStub(); StubRoutines::_atomic_add_entry = ShouldNotCallThisStub(); StubRoutines::_atomic_add_ptr_entry = ShouldNotCallThisStub();
--- a/hotspot/src/os/aix/vm/os_aix.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/aix/vm/os_aix.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -107,6 +107,12 @@ #include <sys/vminfo.h> #include <sys/wait.h> +// If RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling +// getrusage() is prepared to handle the associated failure. +#ifndef RUSAGE_THREAD +#define RUSAGE_THREAD (1) /* only the calling thread */ +#endif + // Add missing declarations (should be in procinfo.h but isn't until AIX 6.1). #if !defined(_AIXVERSION_610) extern "C" { @@ -1065,15 +1071,19 @@ return (1000 * 1000); } -// For now, we say that linux does not support vtime. I have no idea -// whether it can actually be made to (DLD, 9/13/05). - -bool os::supports_vtime() { return false; } +bool os::supports_vtime() { return true; } bool os::enable_vtime() { return false; } bool os::vtime_enabled() { return false; } + double os::elapsedVTime() { - // better than nothing, but not much - return elapsedTime(); + struct rusage usage; + int retval = getrusage(RUSAGE_THREAD, &usage); + if (retval == 0) { + return usage.ru_utime.tv_sec + usage.ru_stime.tv_sec + (usage.ru_utime.tv_usec + usage.ru_stime.tv_usec) / (1000.0 * 1000); + } else { + // better than nothing, but not much + return elapsedTime(); + } } jlong os::javaTimeMillis() {
--- a/hotspot/src/os/aix/vm/perfMemory_aix.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/aix/vm/perfMemory_aix.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -422,7 +422,7 @@ // return the name of the user that owns the JVM indicated by the given vmid. // static char* get_user_name(int vmid, TRAPS) { - return get_user_name_slow(vmid, CHECK_NULL); + return get_user_name_slow(vmid, THREAD); } // return the file name of the backing store file for the named
--- a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -422,7 +422,7 @@ // return the name of the user that owns the JVM indicated by the given vmid. // static char* get_user_name(int vmid, TRAPS) { - return get_user_name_slow(vmid, CHECK_NULL); + return get_user_name_slow(vmid, THREAD); } // return the file name of the backing store file for the named
--- a/hotspot/src/os/linux/vm/os_linux.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/linux/vm/os_linux.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -68,6 +68,7 @@ #include "utilities/events.hpp" #include "utilities/elfFile.hpp" #include "utilities/growableArray.hpp" +#include "utilities/macros.hpp" #include "utilities/vmError.hpp" // put OS-includes here
--- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -422,7 +422,7 @@ // return the name of the user that owns the JVM indicated by the given vmid. // static char* get_user_name(int vmid, TRAPS) { - return get_user_name_slow(vmid, CHECK_NULL); + return get_user_name_slow(vmid, THREAD); } // return the file name of the backing store file for the named
--- a/hotspot/src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c Thu Dec 04 15:23:04 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -/* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. - * 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. - * - */ - -/* - * Name: add_gnu_debuglink.c - * - * Description: Add a ".gnu_debuglink" section that refers to the specified - * debug_info_path to the specified ELF object. - * - * This program is adapted from the example program shown on the - * elf(3elf) man page and from code from the Solaris compiler - * driver. - */ - -/* - * needed to define SHF_EXCLUDE - */ -#define ELF_TARGET_ALL - -#include <fcntl.h> -#include <stdio.h> -#include <libelf.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -static void failure(void); -static unsigned int gnu_debuglink_crc32(unsigned int crc, unsigned char *buf, - size_t len); - -void -main(int argc, char ** argv) { - /* new ELF section name */ - static char SEC_NAME[] = ".gnu_debuglink"; - - unsigned char buffer[8 * 1024]; /* I/O buffer */ - int buffer_len; /* buffer length */ - char * debug_info_path; /* debug info path */ - void * ehdr; /* ELF header */ - Elf * elf; /* ELF descriptor */ - char * elf_ident; /* ELF identity string */ - char * elf_obj; /* elf_obj file */ - int fd; /* descriptor for files */ - unsigned int file_crc = 0; /* CRC for debug info file */ - int is_elfclass64; /* is an ELFCLASS64 file? */ - Elf_Data * link_dat; /* ELF data for new debug info link */ - Elf_Data * name_dat; /* ELF data for new section name */ - Elf_Scn * new_scn; /* new ELF section descriptor */ - void * new_shdr; /* new ELF section header */ - Elf_Scn * scn; /* ELF section descriptor */ - void * shdr; /* ELF section header */ - - if (argc != 3) { - (void) fprintf(stderr, "Usage: %s debug_info_path elf_obj\n", argv[0]); - exit(2); - } - - debug_info_path = argv[1]; /* save for later */ - if ((fd = open(debug_info_path, O_RDONLY)) == -1) { - (void) fprintf(stderr, "%s: cannot open file.\n", debug_info_path); - exit(3); - } - - (void) printf("Computing CRC for '%s'\n", debug_info_path); - (void) fflush(stdout); - /* compute CRC for the debug info file */ - for (;;) { - int len = read(fd, buffer, sizeof buffer); - if (len <= 0) { - break; - } - file_crc = gnu_debuglink_crc32(file_crc, buffer, len); - } - (void) close(fd); - - /* open the elf_obj */ - elf_obj = argv[2]; - if ((fd = open(elf_obj, O_RDWR)) == -1) { - (void) fprintf(stderr, "%s: cannot open file.\n", elf_obj); - exit(4); - } - - (void) printf("Opening '%s' for update\n", elf_obj); - (void) fflush(stdout); - (void) elf_version(EV_CURRENT); /* coordinate ELF versions */ - - /* obtain the ELF descriptors from the input file */ - if ((elf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) { - failure(); - } - - /* determine if ELFCLASS64 or not? */ - elf_ident = elf_getident(elf, NULL); - is_elfclass64 = (elf_ident[EI_CLASS] == ELFCLASS64); - - /* get the ELF header */ - if (is_elfclass64) { - ehdr = elf64_getehdr(elf); - } else { - ehdr = elf32_getehdr(elf); - } - if (ehdr == NULL) { - failure(); - } - - /* get the ELF section descriptor */ - if (is_elfclass64) { - scn = elf_getscn(elf, ((Elf64_Ehdr *) ehdr)->e_shstrndx); - } else { - scn = elf_getscn(elf, ((Elf32_Ehdr *) ehdr)->e_shstrndx); - } - if (scn == NULL) { - failure(); - } - - /* get the section header */ - if (is_elfclass64) { - shdr = elf64_getshdr(scn); - } else { - shdr = elf32_getshdr(scn); - } - if (shdr == NULL) { - failure(); - } - - (void) printf("Adding ELF data for new section name\n"); - (void) fflush(stdout); - name_dat = elf_newdata(scn); - name_dat->d_buf = (void *) SEC_NAME; - if (is_elfclass64) { - name_dat->d_off = ((Elf64_Shdr *) shdr)->sh_size + 1; - } else { - name_dat->d_off = ((Elf32_Shdr *) shdr)->sh_size + 1; - } - name_dat->d_align = 1; - name_dat->d_size = strlen(SEC_NAME) + 1; - - new_scn = elf_newscn(elf); - - if (is_elfclass64) { - new_shdr = elf64_getshdr(new_scn); - ((Elf64_Shdr *) new_shdr)->sh_flags = SHF_EXCLUDE; - ((Elf64_Shdr *) new_shdr)->sh_type = SHT_PROGBITS; - ((Elf64_Shdr *) new_shdr)->sh_name = ((Elf64_Shdr *) shdr)->sh_size; - ((Elf64_Shdr *) new_shdr)->sh_addralign = 1; - ((Elf64_Shdr *) shdr)->sh_size += (strlen(SEC_NAME) + 1); - } else { - new_shdr = elf32_getshdr(new_scn); - ((Elf32_Shdr *) new_shdr)->sh_flags = SHF_EXCLUDE; - ((Elf32_Shdr *) new_shdr)->sh_type = SHT_PROGBITS; - ((Elf32_Shdr *) new_shdr)->sh_name = ((Elf32_Shdr *) shdr)->sh_size; - ((Elf32_Shdr *) new_shdr)->sh_addralign = 1; - ((Elf32_Shdr *) shdr)->sh_size += (strlen(SEC_NAME) + 1); - } - - (void) printf("Adding ELF data for debug_info_path value\n"); - (void) fflush(stdout); - (void) memset(buffer, 0, sizeof buffer); - buffer_len = strlen(debug_info_path) + 1; /* +1 for NUL */ - (void) strncpy((char *) buffer, debug_info_path, buffer_len); - if (buffer_len % 4 != 0) { - /* not on a 4 byte boundary so pad to the next one */ - buffer_len += (4 - buffer_len % 4); - } - /* save the CRC */ - (void) memcpy(&buffer[buffer_len], &file_crc, sizeof file_crc); - buffer_len += sizeof file_crc; - - link_dat = elf_newdata(new_scn); - link_dat->d_type = ELF_T_BYTE; - link_dat->d_size = buffer_len; - link_dat->d_buf = buffer; - link_dat->d_align = 1; - - (void) printf("Saving updates to '%s'\n", elf_obj); - (void) fflush(stdout); - (void) elf_update(elf, ELF_C_NULL); /* recalc ELF memory structures */ - (void) elf_update(elf, ELF_C_WRITE); /* write out changes to ELF obj */ - (void) elf_end(elf); /* done with ELF obj */ - (void) close(fd); - - (void) printf("Done updating '%s'\n", elf_obj); - (void) fflush(stdout); - exit(0); -} /* end main */ - - -static void -failure() { - (void) fprintf(stderr, "%s\n", elf_errmsg(elf_errno())); - exit(5); -} - - -/* - * The CRC used in gnu_debuglink, retrieved from - * http://sourceware.org/gdb/current/onlinedocs/gdb/Separate-Debug-Files.html#Separate-Debug-Files. - */ - -static unsigned int -gnu_debuglink_crc32(unsigned int crc, unsigned char *buf, size_t len) { - static const unsigned int crc32_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d - }; - - unsigned char *end; - - crc = ~crc & 0xffffffff; - for (end = buf + len; buf < end; ++buf) { - crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); - } - return ~crc & 0xffffffff; -}
--- a/hotspot/src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c Thu Dec 04 15:23:04 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. - * 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. - * - */ - -/* - * Name: fix_empty_sec_hdr_flags.c - * - * Description: Remove the SHF_ALLOC flag from "empty" section headers. - * An "empty" section header has sh_addr == 0 and sh_size == 0. - * - * This program is adapted from the example program shown on the - * elf(3elf) man page and from code from the Solaris compiler - * driver. - */ - -#include <fcntl.h> -#include <stdio.h> -#include <libelf.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -static void failure(void); - -void -main(int argc, char ** argv) { - void * ehdr; /* ELF header */ - unsigned int i; /* section counter */ - int fd; /* descriptor for file */ - Elf * elf; /* ELF descriptor */ - char * elf_ident; /* ELF identity string */ - char * elf_obj; /* elf_obj file */ - int fix_count; /* number of flags fixed */ - int is_elfclass64; /* is an ELFCLASS64 file? */ - Elf_Scn * scn; /* ELF section descriptor */ - void * shdr; /* ELF section header */ - Elf_Data * shstrtab; /* ELF section header string table */ - - if (argc != 2) { - (void) fprintf(stderr, "Usage: %s elf_obj\n", argv[0]); - exit(2); - } - - /* open the elf_obj */ - elf_obj = argv[1]; - if ((fd = open(elf_obj, O_RDWR)) == -1) { - (void) fprintf(stderr, "%s: cannot open file.\n", elf_obj); - exit(3); - } - - (void) printf("Opening '%s' for update\n", elf_obj); - (void) fflush(stdout); - (void) elf_version(EV_CURRENT); /* coordinate ELF versions */ - - /* obtain the ELF descriptors from the input file */ - if ((elf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) { - failure(); - } - - /* determine if ELFCLASS64 or not? */ - elf_ident = elf_getident(elf, NULL); - is_elfclass64 = (elf_ident[EI_CLASS] == ELFCLASS64); - - /* get the ELF header */ - if (is_elfclass64) { - ehdr = elf64_getehdr(elf); - } else { - ehdr = elf32_getehdr(elf); - } - if (ehdr == NULL) { - failure(); - } - - /* get the ELF section descriptor */ - if (is_elfclass64) { - scn = elf_getscn(elf, ((Elf64_Ehdr *) ehdr)->e_shstrndx); - } else { - scn = elf_getscn(elf, ((Elf32_Ehdr *) ehdr)->e_shstrndx); - } - if (scn == NULL) { - failure(); - } - - /* get the section header string table */ - shstrtab = elf_getdata(scn, NULL); - if (shstrtab == NULL) { - failure(); - } - - fix_count = 0; - - /* traverse the sections of the input file */ - for (i = 1, scn = NULL; scn = elf_nextscn(elf, scn); i++) { - int has_flag_set; /* is SHF_ALLOC flag set? */ - int is_empty; /* is section empty? */ - char * name; /* short hand pointer */ - - /* get the section header */ - if (is_elfclass64) { - shdr = elf64_getshdr(scn); - } else { - shdr = elf32_getshdr(scn); - } - if (shdr == NULL) { - failure(); - } - - if (is_elfclass64) { - name = (char *)shstrtab->d_buf + ((Elf64_Shdr *) shdr)->sh_name; - } else { - name = (char *)shstrtab->d_buf + ((Elf32_Shdr *) shdr)->sh_name; - } - - if (is_elfclass64) { - has_flag_set = ((Elf64_Shdr *) shdr)->sh_flags & SHF_ALLOC; - is_empty = ((Elf64_Shdr *) shdr)->sh_addr == 0 && - ((Elf64_Shdr *) shdr)->sh_size == 0; - } else { - has_flag_set = ((Elf32_Shdr *) shdr)->sh_flags & SHF_ALLOC; - is_empty = ((Elf32_Shdr *) shdr)->sh_addr == 0 && - ((Elf32_Shdr *) shdr)->sh_size == 0; - } - - if (is_empty && has_flag_set) { - (void) printf("section[%u] '%s' is empty, " - "but SHF_ALLOC flag is set.\n", i, name); - (void) printf("Clearing the SHF_ALLOC flag.\n"); - - if (is_elfclass64) { - ((Elf64_Shdr *) shdr)->sh_flags &= ~SHF_ALLOC; - } else { - ((Elf32_Shdr *) shdr)->sh_flags &= ~SHF_ALLOC; - } - fix_count++; - } - } /* end for each ELF section */ - - if (fix_count > 0) { - (void) printf("Saving %d updates to '%s'\n", fix_count, elf_obj); - (void) fflush(stdout); - (void) elf_update(elf, ELF_C_NULL); /* recalc ELF memory structures */ - (void) elf_update(elf, ELF_C_WRITE); /* write out changes to ELF obj */ - } else { - (void) printf("No SHF_ALLOC flags needed to be cleared.\n"); - } - - (void) elf_end(elf); /* done with ELF obj */ - (void) close(fd); - - (void) printf("Done %s '%s'\n", - (fix_count > 0) ? "updating" : "with", elf_obj); - (void) fflush(stdout); - exit(0); -} /* end main */ - - -static void -failure() { - (void) fprintf(stderr, "%s\n", elf_errmsg(elf_errno())); - exit(6); -}
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -2601,7 +2601,10 @@ assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned."); assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned."); if (UseLargePages) { - Solaris::setup_large_pages(addr, bytes, alignment_hint); + size_t page_size = Solaris::page_size_for_alignment(alignment_hint); + if (page_size > (size_t) vm_page_size()) { + Solaris::setup_large_pages(addr, bytes, page_size); + } } }
--- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -461,7 +461,7 @@ // since the structured procfs and old procfs interfaces can't be // mixed, we attempt to find the file through a directory search. - return get_user_name_slow(vmid, CHECK_NULL); + return get_user_name_slow(vmid, THREAD); } // return the file name of the backing store file for the named
--- a/hotspot/src/os_cpu/bsd_x86/vm/atomic_bsd_x86.inline.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/bsd_x86/vm/atomic_bsd_x86.inline.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -88,6 +88,15 @@ return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); } +#define VM_HAS_SPECIALIZED_CMPXCHG_BYTE +inline jbyte Atomic::cmpxchg (jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { + int mp = os::is_MP(); + __asm__ volatile (LOCK_IF_MP(%4) "cmpxchgb %1,(%3)" + : "=a" (exchange_value) + : "q" (exchange_value), "a" (compare_value), "r" (dest), "r" (mp) + : "cc", "memory"); + return exchange_value; +} inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { int mp = os::is_MP();
--- a/hotspot/src/os_cpu/linux_x86/vm/atomic_linux_x86.inline.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/linux_x86/vm/atomic_linux_x86.inline.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -88,6 +88,15 @@ return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); } +#define VM_HAS_SPECIALIZED_CMPXCHG_BYTE +inline jbyte Atomic::cmpxchg (jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { + int mp = os::is_MP(); + __asm__ volatile (LOCK_IF_MP(%4) "cmpxchgb %1,(%3)" + : "=a" (exchange_value) + : "q" (exchange_value), "a" (compare_value), "r" (dest), "r" (mp) + : "cc", "memory"); + return exchange_value; +} inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { int mp = os::is_MP();
--- a/hotspot/src/os_cpu/linux_x86/vm/orderAccess_linux_x86.inline.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/linux_x86/vm/orderAccess_linux_x86.inline.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -31,6 +31,11 @@ // Implementation of class OrderAccess. +// A compiler barrier, forcing the C++ compiler to invalidate all memory assumptions +static inline void compiler_barrier() { + __asm__ volatile ("" : : : "memory"); +} + inline void OrderAccess::loadload() { acquire(); } inline void OrderAccess::storestore() { release(); } inline void OrderAccess::loadstore() { acquire(); } @@ -46,9 +51,7 @@ } inline void OrderAccess::release() { - // Avoid hitting the same cache-line from - // different threads. - volatile jint local_dummy = 0; + compiler_barrier(); } inline void OrderAccess::fence() { @@ -62,34 +65,34 @@ } } -inline jbyte OrderAccess::load_acquire(volatile jbyte* p) { return *p; } -inline jshort OrderAccess::load_acquire(volatile jshort* p) { return *p; } -inline jint OrderAccess::load_acquire(volatile jint* p) { return *p; } -inline jlong OrderAccess::load_acquire(volatile jlong* p) { return Atomic::load(p); } -inline jubyte OrderAccess::load_acquire(volatile jubyte* p) { return *p; } -inline jushort OrderAccess::load_acquire(volatile jushort* p) { return *p; } -inline juint OrderAccess::load_acquire(volatile juint* p) { return *p; } -inline julong OrderAccess::load_acquire(volatile julong* p) { return Atomic::load((volatile jlong*)p); } -inline jfloat OrderAccess::load_acquire(volatile jfloat* p) { return *p; } -inline jdouble OrderAccess::load_acquire(volatile jdouble* p) { return jdouble_cast(Atomic::load((volatile jlong*)p)); } +inline jbyte OrderAccess::load_acquire(volatile jbyte* p) { jbyte v = *p; compiler_barrier(); return v; } +inline jshort OrderAccess::load_acquire(volatile jshort* p) { jshort v = *p; compiler_barrier(); return v; } +inline jint OrderAccess::load_acquire(volatile jint* p) { jint v = *p; compiler_barrier(); return v; } +inline jlong OrderAccess::load_acquire(volatile jlong* p) { jlong v = Atomic::load(p); compiler_barrier(); return v; } +inline jubyte OrderAccess::load_acquire(volatile jubyte* p) { jubyte v = *p; compiler_barrier(); return v; } +inline jushort OrderAccess::load_acquire(volatile jushort* p) { jushort v = *p; compiler_barrier(); return v; } +inline juint OrderAccess::load_acquire(volatile juint* p) { juint v = *p; compiler_barrier(); return v; } +inline julong OrderAccess::load_acquire(volatile julong* p) { julong v = Atomic::load((volatile jlong*)p); compiler_barrier(); return v; } +inline jfloat OrderAccess::load_acquire(volatile jfloat* p) { jfloat v = *p; compiler_barrier(); return v; } +inline jdouble OrderAccess::load_acquire(volatile jdouble* p) { jdouble v = jdouble_cast(Atomic::load((volatile jlong*)p)); compiler_barrier(); return v; } -inline intptr_t OrderAccess::load_ptr_acquire(volatile intptr_t* p) { return *p; } -inline void* OrderAccess::load_ptr_acquire(volatile void* p) { return *(void* volatile *)p; } -inline void* OrderAccess::load_ptr_acquire(const volatile void* p) { return *(void* const volatile *)p; } +inline intptr_t OrderAccess::load_ptr_acquire(volatile intptr_t* p) { intptr_t v = *p; compiler_barrier(); return v; } +inline void* OrderAccess::load_ptr_acquire(volatile void* p) { void* v = *(void* volatile *)p; compiler_barrier(); return v; } +inline void* OrderAccess::load_ptr_acquire(const volatile void* p) { void* v = *(void* const volatile *)p; compiler_barrier(); return v; } -inline void OrderAccess::release_store(volatile jbyte* p, jbyte v) { *p = v; } -inline void OrderAccess::release_store(volatile jshort* p, jshort v) { *p = v; } -inline void OrderAccess::release_store(volatile jint* p, jint v) { *p = v; } -inline void OrderAccess::release_store(volatile jlong* p, jlong v) { Atomic::store(v, p); } -inline void OrderAccess::release_store(volatile jubyte* p, jubyte v) { *p = v; } -inline void OrderAccess::release_store(volatile jushort* p, jushort v) { *p = v; } -inline void OrderAccess::release_store(volatile juint* p, juint v) { *p = v; } -inline void OrderAccess::release_store(volatile julong* p, julong v) { Atomic::store((jlong)v, (volatile jlong*)p); } -inline void OrderAccess::release_store(volatile jfloat* p, jfloat v) { *p = v; } +inline void OrderAccess::release_store(volatile jbyte* p, jbyte v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store(volatile jshort* p, jshort v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store(volatile jint* p, jint v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store(volatile jlong* p, jlong v) { compiler_barrier(); Atomic::store(v, p); } +inline void OrderAccess::release_store(volatile jubyte* p, jubyte v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store(volatile jushort* p, jushort v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store(volatile juint* p, juint v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store(volatile julong* p, julong v) { compiler_barrier(); Atomic::store((jlong)v, (volatile jlong*)p); } +inline void OrderAccess::release_store(volatile jfloat* p, jfloat v) { compiler_barrier(); *p = v; } inline void OrderAccess::release_store(volatile jdouble* p, jdouble v) { release_store((volatile jlong *)p, jlong_cast(v)); } -inline void OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { *p = v; } -inline void OrderAccess::release_store_ptr(volatile void* p, void* v) { *(void* volatile *)p = v; } +inline void OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { compiler_barrier(); *p = v; } +inline void OrderAccess::release_store_ptr(volatile void* p, void* v) { compiler_barrier(); *(void* volatile *)p = v; } inline void OrderAccess::store_fence(jbyte* p, jbyte v) { __asm__ volatile ( "xchgb (%2),%0"
--- a/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -542,6 +542,7 @@ err.report_and_die(); ShouldNotReachHere(); + return true; // Mute compiler } void os::Linux::init_thread_fpu_state(void) {
--- a/hotspot/src/os_cpu/solaris_x86/vm/atomic_solaris_x86.inline.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/solaris_x86/vm/atomic_solaris_x86.inline.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -68,6 +68,8 @@ extern "C" { jint _Atomic_add(jint add_value, volatile jint* dest IS_MP_DECL()); jint _Atomic_xchg(jint exchange_value, volatile jint* dest); + jbyte _Atomic_cmpxchg_byte(jbyte exchange_value, volatile jbyte* dest, + jbyte compare_value IS_MP_DECL()); jint _Atomic_cmpxchg(jint exchange_value, volatile jint* dest, jint compare_value IS_MP_DECL()); jlong _Atomic_cmpxchg_long(jlong exchange_value, volatile jlong* dest, @@ -82,6 +84,11 @@ return _Atomic_xchg(exchange_value, dest); } +#define VM_HAS_SPECIALIZED_CMPXCHG_BYTE +inline jbyte Atomic::cmpxchg (jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { + return _Atomic_cmpxchg_byte(exchange_value, dest, compare_value IS_MP_ARG()); +} + inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { return _Atomic_cmpxchg(exchange_value, dest, compare_value IS_MP_ARG()); } @@ -217,6 +224,15 @@ return exchange_value; } + + inline jbyte _Atomic_cmpxchg_byte(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value, int mp) { + __asm__ volatile (LOCK_IF_MP(%4) "cmpxchgb %1,(%3)" + : "=a" (exchange_value) + : "q" (exchange_value), "a" (compare_value), "r" (dest), "r" (mp) + : "cc", "memory"); + return exchange_value; + } + // This is the interface to the atomic instruction in solaris_i486.s. jlong _Atomic_cmpxchg_long_gcc(jlong exchange_value, volatile jlong* dest, jlong compare_value, int mp);
--- a/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.il Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.il Wed Jul 05 20:09:40 2017 +0200 @@ -76,6 +76,23 @@ xchgl (%ecx), %eax .end + // Support for jbyte Atomic::cmpxchg(jbyte exchange_value, + // volatile jbyte *dest, + // jbyte compare_value) + // An additional bool (os::is_MP()) is passed as the last argument. + .inline _Atomic_cmpxchg_byte,4 + movb 8(%esp), %al // compare_value + movb 0(%esp), %cl // exchange_value + movl 4(%esp), %edx // dest + cmp $0, 12(%esp) // MP test + jne 1f + cmpxchgb %cl, (%edx) + jmp 2f +1: lock + cmpxchgb %cl, (%edx) +2: + .end + // Support for jint Atomic::cmpxchg(jint exchange_value, // volatile jint *dest, // jint compare_value)
--- a/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_64.il Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_64.il Wed Jul 05 20:09:40 2017 +0200 @@ -77,6 +77,15 @@ movq %rdi, %rax .end + // Support for jbyte Atomic::cmpxchg(jbyte exchange_value, + // volatile jbyte *dest, + // jbyte compare_value) + .inline _Atomic_cmpxchg_byte,3 + movb %dl, %al // compare_value + lock + cmpxchgb %dil, (%rsi) + .end + // Support for jint Atomic::cmpxchg(jint exchange_value, // volatile jint *dest, // jint compare_value)
--- a/hotspot/src/os_cpu/windows_x86/vm/atomic_windows_x86.inline.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/windows_x86/vm/atomic_windows_x86.inline.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -123,6 +123,11 @@ return (*os::atomic_cmpxchg_func)(exchange_value, dest, compare_value); } +#define VM_HAS_SPECIALIZED_CMPXCHG_BYTE +inline jbyte Atomic::cmpxchg (jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { + return (*os::atomic_cmpxchg_byte_func)(exchange_value, dest, compare_value); +} + inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value) { return (*os::atomic_cmpxchg_long_func)(exchange_value, dest, compare_value); } @@ -212,6 +217,19 @@ return (void*)xchg((jint)exchange_value, (volatile jint*)dest); } +#define VM_HAS_SPECIALIZED_CMPXCHG_BYTE +inline jbyte Atomic::cmpxchg (jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { + // alternative for InterlockedCompareExchange + int mp = os::is_MP(); + __asm { + mov edx, dest + mov cl, exchange_value + mov al, compare_value + LOCK_IF_MP(mp) + cmpxchg byte ptr [edx], cl + } +} + inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { // alternative for InterlockedCompareExchange int mp = os::is_MP();
--- a/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -220,6 +220,7 @@ typedef jint xchg_func_t (jint, volatile jint*); typedef intptr_t xchg_ptr_func_t (intptr_t, volatile intptr_t*); typedef jint cmpxchg_func_t (jint, volatile jint*, jint); +typedef jbyte cmpxchg_byte_func_t (jbyte, volatile jbyte*, jbyte); typedef jlong cmpxchg_long_func_t (jlong, volatile jlong*, jlong); typedef jint add_func_t (jint, volatile jint*); typedef intptr_t add_ptr_func_t (intptr_t, volatile intptr_t*); @@ -272,6 +273,23 @@ *dest = exchange_value; return old_value; } + +jbyte os::atomic_cmpxchg_byte_bootstrap(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) { + // try to use the stub: + cmpxchg_byte_func_t* func = CAST_TO_FN_PTR(cmpxchg_byte_func_t*, StubRoutines::atomic_cmpxchg_byte_entry()); + + if (func != NULL) { + os::atomic_cmpxchg_byte_func = func; + return (*func)(exchange_value, dest, compare_value); + } + assert(Threads::number_of_threads() == 0, "for bootstrap only"); + + jbyte old_value = *dest; + if (old_value == compare_value) + *dest = exchange_value; + return old_value; +} + #endif // AMD64 jlong os::atomic_cmpxchg_long_bootstrap(jlong exchange_value, volatile jlong* dest, jlong compare_value) { @@ -321,6 +339,7 @@ xchg_func_t* os::atomic_xchg_func = os::atomic_xchg_bootstrap; xchg_ptr_func_t* os::atomic_xchg_ptr_func = os::atomic_xchg_ptr_bootstrap; cmpxchg_func_t* os::atomic_cmpxchg_func = os::atomic_cmpxchg_bootstrap; +cmpxchg_byte_func_t* os::atomic_cmpxchg_byte_func = os::atomic_cmpxchg_byte_bootstrap; add_func_t* os::atomic_add_func = os::atomic_add_bootstrap; add_ptr_func_t* os::atomic_add_ptr_func = os::atomic_add_ptr_bootstrap; @@ -635,7 +654,11 @@ #ifndef PRODUCT void os::verify_stack_alignment() { #ifdef AMD64 - assert(((intptr_t)os::current_stack_pointer() & (StackAlignmentInBytes-1)) == 0, "incorrect stack alignment"); + // The current_stack_pointer() calls generated get_previous_sp stub routine. + // Only enable the assert after the routine becomes available. + if (StubRoutines::code1() != NULL) { + assert(((intptr_t)os::current_stack_pointer() & (StackAlignmentInBytes-1)) == 0, "incorrect stack alignment"); + } #endif } #endif
--- a/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -33,6 +33,7 @@ static intptr_t (*atomic_xchg_ptr_func) (intptr_t, volatile intptr_t*); static jint (*atomic_cmpxchg_func) (jint, volatile jint*, jint); + static jbyte (*atomic_cmpxchg_byte_func) (jbyte, volatile jbyte*, jbyte); static jlong (*atomic_cmpxchg_long_func) (jlong, volatile jlong*, jlong); static jint (*atomic_add_func) (jint, volatile jint*); @@ -42,6 +43,7 @@ static intptr_t atomic_xchg_ptr_bootstrap (intptr_t, volatile intptr_t*); static jint atomic_cmpxchg_bootstrap (jint, volatile jint*, jint); + static jbyte atomic_cmpxchg_byte_bootstrap(jbyte, volatile jbyte*, jbyte); #else static jlong (*atomic_cmpxchg_long_func) (jlong, volatile jlong*, jlong);
--- a/hotspot/src/share/tools/ProjectCreator/BuildConfig.java Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/tools/ProjectCreator/BuildConfig.java Wed Jul 05 20:09:40 2017 +0200 @@ -512,7 +512,9 @@ abstract class GenericDebugNonKernelConfig extends GenericDebugConfig { protected void init(Vector includes, Vector defines) { super.init(includes, defines); - getCI().getAdditionalNonKernelLinkerFlags(getV("LinkerFlags")); + if (get("PlatformName").equals("Win32")) { + getCI().getAdditionalNonKernelLinkerFlags(getV("LinkerFlags")); + } } }
--- a/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Wed Jul 05 20:09:40 2017 +0200 @@ -401,16 +401,18 @@ Vector getBaseLinkerFlags(String outDir, String outDll, String platformName) { Vector rv = new Vector(); - addAttr(rv, "AdditionalOptions", - "/export:JNI_GetDefaultJavaVMInitArgs " + - "/export:JNI_CreateJavaVM " + - "/export:JVM_FindClassFromBootLoader "+ - "/export:JNI_GetCreatedJavaVMs "+ - "/export:jio_snprintf /export:jio_printf "+ - "/export:jio_fprintf /export:jio_vfprintf "+ - "/export:jio_vsnprintf "+ - "/export:JVM_GetVersionInfo "+ - "/export:JVM_InitAgentProperties"); + if(platformName.equals("Win32")) { + addAttr(rv, "AdditionalOptions", + "/export:JNI_GetDefaultJavaVMInitArgs " + + "/export:JNI_CreateJavaVM " + + "/export:JVM_FindClassFromBootLoader "+ + "/export:JNI_GetCreatedJavaVMs "+ + "/export:jio_snprintf /export:jio_printf "+ + "/export:jio_fprintf /export:jio_vfprintf "+ + "/export:jio_vsnprintf "+ + "/export:JVM_GetVersionInfo "+ + "/export:JVM_InitAgentProperties"); + } addAttr(rv, "AdditionalDependencies", "kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;Wsock32.lib;winmm.lib;psapi.lib;version.lib"); addAttr(rv, "OutputFile", outDll); addAttr(rv, "SuppressStartupBanner", "true");
--- a/hotspot/src/share/vm/Xusage.txt Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/Xusage.txt Wed Jul 05 20:09:40 2017 +0200 @@ -7,7 +7,6 @@ -Xbootclasspath/p:<directories and zip/jar files separated by ;> prepend in front of bootstrap class path -Xnoclassgc disable class garbage collection - -Xincgc enable incremental garbage collection -Xloggc:<file> log GC status to a file with time stamps -Xbatch disable background compilation -Xms<size> set initial Java heap size
--- a/hotspot/src/share/vm/ci/ciEnv.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciEnv.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -53,6 +53,7 @@ #include "runtime/reflection.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/thread.inline.hpp" +#include "trace/tracing.hpp" #include "utilities/dtrace.hpp" #include "utilities/macros.hpp" #ifdef COMPILER1 @@ -1141,6 +1142,16 @@ } } +void ciEnv::report_failure(const char* reason) { + // Create and fire JFR event + EventCompilerFailure event; + if (event.should_commit()) { + event.set_compileID(compile_id()); + event.set_failure(reason); + event.commit(); + } +} + // ------------------------------------------------------------------ // ciEnv::record_method_not_compilable() void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
--- a/hotspot/src/share/vm/ci/ciEnv.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciEnv.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -450,7 +450,8 @@ // Check for changes to the system dictionary during compilation bool system_dictionary_modification_counter_changed(); - void record_failure(const char* reason); + void record_failure(const char* reason); // Record failure and report later + void report_failure(const char* reason); // Report failure immediately void record_method_not_compilable(const char* reason, bool all_tiers = true); void record_out_of_memory_failure();
--- a/hotspot/src/share/vm/ci/ciMethod.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciMethod.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -68,7 +68,10 @@ // ciMethod::ciMethod // // Loaded method. -ciMethod::ciMethod(methodHandle h_m) : ciMetadata(h_m()) { +ciMethod::ciMethod(methodHandle h_m, ciInstanceKlass* holder) : + ciMetadata(h_m()), + _holder(holder) +{ assert(h_m() != NULL, "no null method"); // These fields are always filled in in loaded methods. @@ -124,7 +127,6 @@ // generating _signature may allow GC and therefore move m. // These fields are always filled in. _name = env->get_symbol(h_m()->name()); - _holder = env->get_instance_klass(h_m()->method_holder()); ciSymbol* sig_symbol = env->get_symbol(h_m()->signature()); constantPoolHandle cpool = h_m()->constants(); _signature = new (env->arena()) ciSignature(_holder, cpool, sig_symbol);
--- a/hotspot/src/share/vm/ci/ciMethod.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciMethod.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -91,7 +91,7 @@ BCEscapeAnalyzer* _bcea; #endif - ciMethod(methodHandle h_m); + ciMethod(methodHandle h_m, ciInstanceKlass* holder); ciMethod(ciInstanceKlass* holder, ciSymbol* name, ciSymbol* signature, ciInstanceKlass* accessor); Method* get_Method() const {
--- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -46,6 +46,7 @@ #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" #include "runtime/fieldType.hpp" +#include "utilities/macros.hpp" #if INCLUDE_ALL_GCS # include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #endif @@ -239,7 +240,7 @@ ciObject* ciObjectFactory::get(oop key) { ASSERT_IN_VM; - assert(key == NULL || Universe::heap()->is_in_reserved(key), "must be"); + assert(Universe::heap()->is_in_reserved(key), "must be"); NonPermObject* &bucket = find_non_perm(key); if (bucket != NULL) { @@ -260,10 +261,10 @@ } // ------------------------------------------------------------------ -// ciObjectFactory::get +// ciObjectFactory::get_metadata // -// Get the ciObject corresponding to some oop. If the ciObject has -// already been created, it is returned. Otherwise, a new ciObject +// Get the ciMetadata corresponding to some Metadata. If the ciMetadata has +// already been created, it is returned. Otherwise, a new ciMetadata // is created. ciMetadata* ciObjectFactory::get_metadata(Metadata* key) { ASSERT_IN_VM; @@ -290,9 +291,9 @@ } #endif if (!is_found_at(index, key, _ci_metadata)) { - // The ciObject does not yet exist. Create it and insert it + // The ciMetadata does not yet exist. Create it and insert it // into the cache. - ciMetadata* new_object = create_new_object(key); + ciMetadata* new_object = create_new_metadata(key); init_ident_of(new_object); assert(new_object->is_metadata(), "must be"); @@ -344,15 +345,28 @@ } // ------------------------------------------------------------------ -// ciObjectFactory::create_new_object +// ciObjectFactory::create_new_metadata // -// Create a new ciObject from a Metadata*. +// Create a new ciMetadata from a Metadata*. // -// Implementation note: this functionality could be virtual behavior -// of the oop itself. For now, we explicitly marshal the object. -ciMetadata* ciObjectFactory::create_new_object(Metadata* o) { +// Implementation note: in order to keep Metadata live, an auxiliary ciObject +// is used, which points to it's holder. +ciMetadata* ciObjectFactory::create_new_metadata(Metadata* o) { EXCEPTION_CONTEXT; + // Hold metadata from unloading by keeping it's holder alive. + if (_initialized && o->is_klass()) { + Klass* holder = ((Klass*)o); + if (holder->oop_is_instance() && InstanceKlass::cast(holder)->is_anonymous()) { + // Though ciInstanceKlass records class loader oop, it's not enough to keep + // VM anonymous classes alive (loader == NULL). Klass holder should be used instead. + // It is enough to record a ciObject, since cached elements are never removed + // during ciObjectFactory lifetime. ciObjectFactory itself is created for + // every compilation and lives for the whole duration of the compilation. + ciObject* h = get(holder->klass_holder()); + } + } + if (o->is_klass()) { KlassHandle h_k(THREAD, (Klass*)o); Klass* k = (Klass*)o; @@ -365,14 +379,16 @@ } } else if (o->is_method()) { methodHandle h_m(THREAD, (Method*)o); - return new (arena()) ciMethod(h_m); + ciEnv *env = CURRENT_THREAD_ENV; + ciInstanceKlass* holder = env->get_instance_klass(h_m()->method_holder()); + return new (arena()) ciMethod(h_m, holder); } else if (o->is_methodData()) { // Hold methodHandle alive - might not be necessary ??? methodHandle h_m(THREAD, ((MethodData*)o)->method()); return new (arena()) ciMethodData((MethodData*)o); } - // The oop is of some type not supported by the compiler interface. + // The Metadata* is of some type not supported by the compiler interface. ShouldNotReachHere(); return NULL; } @@ -701,7 +717,7 @@ // If there is no entry in the cache corresponding to this oop, return // the null tail of the bucket into which the oop should be inserted. ciObjectFactory::NonPermObject* &ciObjectFactory::find_non_perm(oop key) { - assert(Universe::heap()->is_in_reserved_or_null(key), "must be"); + assert(Universe::heap()->is_in_reserved(key), "must be"); ciMetadata* klass = get_metadata(key->klass()); NonPermObject* *bp = &_non_perm_bucket[(unsigned) klass->hash() % NON_PERM_BUCKETS]; for (NonPermObject* p; (p = (*bp)) != NULL; bp = &p->next()) {
--- a/hotspot/src/share/vm/ci/ciObjectFactory.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciObjectFactory.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -73,7 +73,7 @@ void insert(int index, ciMetadata* obj, GrowableArray<ciMetadata*>* objects); ciObject* create_new_object(oop o); - ciMetadata* create_new_object(Metadata* o); + ciMetadata* create_new_metadata(Metadata* o); void ensure_metadata_alive(ciMetadata* m);
--- a/hotspot/src/share/vm/ci/ciReplay.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciReplay.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -332,7 +332,7 @@ // Lookup a klass Klass* resolve_klass(const char* klass, TRAPS) { Symbol* klass_name = SymbolTable::lookup(klass, (int)strlen(klass), CHECK_NULL); - return SystemDictionary::resolve_or_fail(klass_name, _loader, _protection_domain, true, CHECK_NULL); + return SystemDictionary::resolve_or_fail(klass_name, _loader, _protection_domain, true, THREAD); } // Parse the standard tuple of <klass> <name> <signature>
--- a/hotspot/src/share/vm/ci/ciTypeFlow.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/ci/ciTypeFlow.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -35,6 +35,7 @@ #include "interpreter/bytecode.hpp" #include "interpreter/bytecodes.hpp" #include "memory/allocation.inline.hpp" +#include "opto/compile.hpp" #include "runtime/deoptimization.hpp" #include "utilities/growableArray.hpp" @@ -2646,7 +2647,7 @@ assert (!blk->has_pre_order(), ""); blk->set_next_pre_order(); - if (_next_pre_order >= MaxNodeLimit / 2) { + if (_next_pre_order >= (int)Compile::current()->max_node_limit() / 2) { // Too many basic blocks. Bail out. // This can happen when try/finally constructs are nested to depth N, // and there is O(2**N) cloning of jsr bodies. See bug 4697245!
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -31,9 +31,6 @@ #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" -#if INCLUDE_CDS -#include "classfile/systemDictionaryShared.hpp" -#endif #include "classfile/verificationType.hpp" #include "classfile/verifier.hpp" #include "classfile/vmSymbols.hpp" @@ -63,7 +60,11 @@ #include "services/threadService.hpp" #include "utilities/array.hpp" #include "utilities/globalDefinitions.hpp" +#include "utilities/macros.hpp" #include "utilities/ostream.hpp" +#if INCLUDE_CDS +#include "classfile/systemDictionaryShared.hpp" +#endif // We generally try to create the oops directly when parsing, rather than // allocating temporary data structures and copying the bytes twice. A @@ -2059,7 +2060,7 @@ u2** localvariable_table_start; u2* localvariable_type_table_length; u2** localvariable_type_table_start; - u2 method_parameters_length = 0; + int method_parameters_length = -1; u1* method_parameters_data = NULL; bool method_parameters_seen = false; bool parsed_code_attribute = false; @@ -2278,7 +2279,8 @@ } method_parameters_seen = true; method_parameters_length = cfs->get_u1_fast(); - if (method_attribute_length != (method_parameters_length * 4u) + 1u) { + const u2 real_length = (method_parameters_length * 4u) + 1u; + if (method_attribute_length != real_length) { classfile_parse_error( "Invalid MethodParameters method attribute length %u in class file", method_attribute_length, CHECK_(nullHandle)); @@ -2288,7 +2290,7 @@ cfs->skip_u2_fast(method_parameters_length); // ignore this attribute if it cannot be reflected if (!SystemDictionary::Parameter_klass_loaded()) - method_parameters_length = 0; + method_parameters_length = -1; } else if (method_attribute_name == vmSymbols::tag_synthetic()) { if (method_attribute_length != 0) { classfile_parse_error( @@ -3491,17 +3493,18 @@ real_offset = next_nonstatic_oop_offset; next_nonstatic_oop_offset += heapOopSize; } - // Update oop maps + + // Record this oop in the oop maps if( nonstatic_oop_map_count > 0 && nonstatic_oop_offsets[nonstatic_oop_map_count - 1] == real_offset - int(nonstatic_oop_counts[nonstatic_oop_map_count - 1]) * heapOopSize ) { - // Extend current oop map + // This oop is adjacent to the previous one, add to current oop map assert(nonstatic_oop_map_count - 1 < max_nonstatic_oop_maps, "range check"); nonstatic_oop_counts[nonstatic_oop_map_count - 1] += 1; } else { - // Create new oop map + // This oop is not adjacent to the previous one, create new oop map assert(nonstatic_oop_map_count < max_nonstatic_oop_maps, "range check"); nonstatic_oop_offsets[nonstatic_oop_map_count] = real_offset; nonstatic_oop_counts [nonstatic_oop_map_count] = 1; @@ -3623,13 +3626,24 @@ real_offset = next_nonstatic_padded_offset; next_nonstatic_padded_offset += heapOopSize; - // Create new oop map - assert(nonstatic_oop_map_count < max_nonstatic_oop_maps, "range check"); - nonstatic_oop_offsets[nonstatic_oop_map_count] = real_offset; - nonstatic_oop_counts [nonstatic_oop_map_count] = 1; - nonstatic_oop_map_count += 1; - if( first_nonstatic_oop_offset == 0 ) { // Undefined - first_nonstatic_oop_offset = real_offset; + // Record this oop in the oop maps + if( nonstatic_oop_map_count > 0 && + nonstatic_oop_offsets[nonstatic_oop_map_count - 1] == + real_offset - + int(nonstatic_oop_counts[nonstatic_oop_map_count - 1]) * + heapOopSize ) { + // This oop is adjacent to the previous one, add to current oop map + assert(nonstatic_oop_map_count - 1 < max_nonstatic_oop_maps, "range check"); + nonstatic_oop_counts[nonstatic_oop_map_count - 1] += 1; + } else { + // This oop is not adjacent to the previous one, create new oop map + assert(nonstatic_oop_map_count < max_nonstatic_oop_maps, "range check"); + nonstatic_oop_offsets[nonstatic_oop_map_count] = real_offset; + nonstatic_oop_counts [nonstatic_oop_map_count] = 1; + nonstatic_oop_map_count += 1; + if( first_nonstatic_oop_offset == 0 ) { // Undefined + first_nonstatic_oop_offset = real_offset; + } } break;
--- a/hotspot/src/share/vm/classfile/classLoader.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/classLoader.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -30,10 +30,6 @@ #include "classfile/classLoaderData.inline.hpp" #include "classfile/imageFile.hpp" #include "classfile/javaClasses.hpp" -#if INCLUDE_CDS -#include "classfile/sharedPathsMiscInfo.hpp" -#include "classfile/sharedClassUtil.hpp" -#endif #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" @@ -65,8 +61,13 @@ #include "services/management.hpp" #include "services/threadService.hpp" #include "utilities/events.hpp" -#include "utilities/hashtable.hpp" #include "utilities/hashtable.inline.hpp" +#include "utilities/macros.hpp" +#if INCLUDE_CDS +#include "classfile/sharedPathsMiscInfo.hpp" +#include "classfile/sharedClassUtil.hpp" +#endif + // Entry points in zip.dll for loading zip/jar file entries and image file entries @@ -1212,7 +1213,7 @@ h = context.record_result(classpath_index, e, result, THREAD); } else { if (DumpSharedSpaces) { - tty->print_cr("Preload Error: Cannot find %s", class_name); + tty->print_cr("Preload Warning: Cannot find %s", class_name); } }
--- a/hotspot/src/share/vm/classfile/classLoader.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/classLoader.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -27,6 +27,7 @@ #include "classfile/classFileParser.hpp" #include "runtime/perfData.hpp" +#include "utilities/macros.hpp" // The VM class loader. #include <sys/stat.h>
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -65,9 +65,8 @@ #include "utilities/growableArray.hpp" #include "utilities/macros.hpp" #include "utilities/ostream.hpp" - #if INCLUDE_TRACE - #include "trace/tracing.hpp" +#include "trace/tracing.hpp" #endif ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL; @@ -472,7 +471,7 @@ // These anonymous class loaders are to contain classes used for JSR292 ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) { // Add a new class loader data to the graph. - return ClassLoaderDataGraph::add(loader, true, CHECK_NULL); + return ClassLoaderDataGraph::add(loader, true, THREAD); } const char* ClassLoaderData::loader_name() { @@ -978,4 +977,4 @@ event.commit(); } -#endif /* INCLUDE_TRACE */ +#endif // INCLUDE_TRACE
--- a/hotspot/src/share/vm/classfile/classLoaderData.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/classLoaderData.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -31,8 +31,9 @@ #include "memory/metaspaceCounters.hpp" #include "runtime/mutex.hpp" #include "utilities/growableArray.hpp" +#include "utilities/macros.hpp" #if INCLUDE_TRACE -# include "utilities/ticks.hpp" +#include "utilities/ticks.hpp" #endif //
--- a/hotspot/src/share/vm/classfile/classLoaderExt.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/classLoaderExt.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -63,6 +63,9 @@ ClassPathEntry* new_entry) { ClassLoader::add_to_list(new_entry); } + static void append_boot_classpath(ClassPathEntry* new_entry) { + ClassLoader::add_to_list(new_entry); + } static void setup_search_paths() {} };
--- a/hotspot/src/share/vm/classfile/defaultMethods.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/defaultMethods.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -493,7 +493,7 @@ }; Symbol* MethodFamily::generate_no_defaults_message(TRAPS) const { - return SymbolTable::new_symbol("No qualifying defaults found", CHECK_NULL); + return SymbolTable::new_symbol("No qualifying defaults found", THREAD); } Symbol* MethodFamily::generate_method_message(Symbol *klass_name, Method* method, TRAPS) const { @@ -506,7 +506,7 @@ ss.write((const char*)name->bytes(), name->utf8_length()); ss.write((const char*)signature->bytes(), signature->utf8_length()); ss.print(" is abstract"); - return SymbolTable::new_symbol(ss.base(), (int)ss.size(), CHECK_NULL); + return SymbolTable::new_symbol(ss.base(), (int)ss.size(), THREAD); } Symbol* MethodFamily::generate_conflicts_message(GrowableArray<Method*>* methods, TRAPS) const { @@ -521,7 +521,7 @@ ss.print("."); ss.write((const char*)name->bytes(), name->utf8_length()); } - return SymbolTable::new_symbol(ss.base(), (int)ss.size(), CHECK_NULL); + return SymbolTable::new_symbol(ss.base(), (int)ss.size(), THREAD); }
--- a/hotspot/src/share/vm/classfile/dictionary.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/dictionary.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -223,7 +223,7 @@ } free_entry(probe); ResourceMark rm; - tty->print_cr("Removed error class: %s", ik->external_name()); + tty->print_cr("Preload Warning: Removed error class: %s", ik->external_name()); continue; }
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -41,6 +41,7 @@ #include "oops/method.hpp" #include "oops/symbol.hpp" #include "oops/typeArrayOop.hpp" +#include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/fieldDescriptor.hpp" #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.hpp" @@ -944,7 +945,7 @@ assert(_group_offset == 0, "offsets should be initialized only once"); Klass* k = SystemDictionary::Thread_klass(); - compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::char_array_signature()); + compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature()); compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature()); compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature()); @@ -974,15 +975,12 @@ } -typeArrayOop java_lang_Thread::name(oop java_thread) { - oop name = java_thread->obj_field(_name_offset); - assert(name == NULL || (name->is_typeArray() && TypeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking"); - return typeArrayOop(name); -} - - -void java_lang_Thread::set_name(oop java_thread, typeArrayOop name) { - assert(java_thread->obj_field(_name_offset) == NULL, "name should be NULL"); +oop java_lang_Thread::name(oop java_thread) { + return java_thread->obj_field(_name_offset); +} + + +void java_lang_Thread::set_name(oop java_thread, oop name) { java_thread->obj_field_put(_name_offset, name); } @@ -1952,7 +1950,7 @@ // This class is eagerly initialized during VM initialization, since we keep a refence // to one of the methods assert(InstanceKlass::cast(klass)->is_initialized(), "must be initialized"); - return InstanceKlass::cast(klass)->allocate_instance_handle(CHECK_NH); + return InstanceKlass::cast(klass)->allocate_instance_handle(THREAD); } oop java_lang_reflect_Method::clazz(oop reflect) { @@ -2130,7 +2128,7 @@ instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); - return klass->allocate_instance_handle(CHECK_NH); + return klass->allocate_instance_handle(THREAD); } oop java_lang_reflect_Constructor::clazz(oop reflect) { @@ -2270,7 +2268,7 @@ instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); - return klass->allocate_instance_handle(CHECK_NH); + return klass->allocate_instance_handle(THREAD); } oop java_lang_reflect_Field::clazz(oop reflect) { @@ -2397,7 +2395,7 @@ instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); - return klass->allocate_instance_handle(CHECK_NH); + return klass->allocate_instance_handle(THREAD); } oop java_lang_reflect_Parameter::name(oop param) { @@ -2447,7 +2445,7 @@ instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); - return klass->allocate_instance_handle(CHECK_NH); + return klass->allocate_instance_handle(THREAD); } @@ -2797,12 +2795,35 @@ return (Metadata*)mname->address_field(_vmtarget_offset); } +bool java_lang_invoke_MemberName::is_method(oop mname) { + assert(is_instance(mname), "must be MemberName"); + return (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0; +} + #if INCLUDE_JVMTI // Can be executed on VM thread only -void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Metadata* ref) { - assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type"); +void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Method* old_method, + Method* new_method, bool* trace_name_printed) { + assert(is_method(mname), "wrong type"); assert(Thread::current()->is_VM_thread(), "not VM thread"); - mname->address_field_put(_vmtarget_offset, (address)ref); + + Method* target = (Method*)mname->address_field(_vmtarget_offset); + if (target == old_method) { + mname->address_field_put(_vmtarget_offset, (address)new_method); + + if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { + if (!(*trace_name_printed)) { + // RC_TRACE_MESG macro has an embedded ResourceMark + RC_TRACE_MESG(("adjust: name=%s", + old_method->method_holder()->external_name())); + *trace_name_printed = true; + } + // RC_TRACE macro has an embedded ResourceMark + RC_TRACE(0x00400000, ("MemberName method update: %s(%s)", + new_method->name()->as_C_string(), + new_method->signature()->as_C_string())); + } + } } #endif // INCLUDE_JVMTI
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -345,8 +345,8 @@ // Set JavaThread for instance static void set_thread(oop java_thread, JavaThread* thread); // Name - static typeArrayOop name(oop java_thread); - static void set_name(oop java_thread, typeArrayOop name); + static oop name(oop java_thread); + static void set_name(oop java_thread, oop name); // Priority static ThreadPriority priority(oop java_thread); static void set_priority(oop java_thread, ThreadPriority priority); @@ -1100,7 +1100,8 @@ static Metadata* vmtarget(oop mname); static void set_vmtarget(oop mname, Metadata* target); #if INCLUDE_JVMTI - static void adjust_vmtarget(oop mname, Metadata* target); + static void adjust_vmtarget(oop mname, Method* old_method, Method* new_method, + bool* trace_name_printed); #endif // INCLUDE_JVMTI static intptr_t vmindex(oop mname); @@ -1114,6 +1115,8 @@ return obj != NULL && is_subclass(obj->klass()); } + static bool is_method(oop obj); + // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants): enum { MN_IS_METHOD = 0x00010000, // method (not constructor)
--- a/hotspot/src/share/vm/classfile/stringTable.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/stringTable.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -36,6 +36,7 @@ #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" +#include "utilities/macros.hpp" #if INCLUDE_ALL_GCS #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #include "gc_implementation/g1/g1StringDedup.hpp"
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -235,7 +235,7 @@ MutexLocker ml(SymbolTable_lock, THREAD); // Otherwise, add to symbol to table - return the_table()->basic_add(index, (u1*)name, len, hashValue, true, CHECK_NULL); + return the_table()->basic_add(index, (u1*)name, len, hashValue, true, THREAD); } Symbol* SymbolTable::lookup(const Symbol* sym, int begin, int end, TRAPS) { @@ -274,7 +274,7 @@ // Grab SymbolTable_lock first. MutexLocker ml(SymbolTable_lock, THREAD); - return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true, CHECK_NULL); + return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true, THREAD); } Symbol* SymbolTable::lookup_only(const char* name, int len,
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -31,10 +31,6 @@ #include "classfile/resolutionErrors.hpp" #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" -#if INCLUDE_CDS -#include "classfile/sharedClassUtil.hpp" -#include "classfile/systemDictionaryShared.hpp" -#endif #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" #include "interpreter/bytecodeStream.hpp" @@ -65,9 +61,12 @@ #include "services/threadService.hpp" #include "utilities/macros.hpp" #include "utilities/ticks.hpp" - +#if INCLUDE_CDS +#include "classfile/sharedClassUtil.hpp" +#include "classfile/systemDictionaryShared.hpp" +#endif #if INCLUDE_TRACE - #include "trace/tracing.hpp" +#include "trace/tracing.hpp" #endif Dictionary* SystemDictionary::_dictionary = NULL; @@ -123,7 +122,7 @@ ClassLoaderData* SystemDictionary::register_loader(Handle class_loader, TRAPS) { if (class_loader() == NULL) return ClassLoaderData::the_null_class_loader_data(); - return ClassLoaderDataGraph::find_or_create(class_loader, CHECK_NULL); + return ClassLoaderDataGraph::find_or_create(class_loader, THREAD); } // ---------------------------------------------------------------------------- @@ -233,15 +232,15 @@ class_name->as_C_string(), class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string())); if (FieldType::is_array(class_name)) { - return resolve_array_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL); + return resolve_array_class_or_null(class_name, class_loader, protection_domain, THREAD); } else if (FieldType::is_obj(class_name)) { ResourceMark rm(THREAD); // Ignore wrapping L and ;. TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1, class_name->utf8_length() - 2, CHECK_NULL); - return resolve_instance_class_or_null(name, class_loader, protection_domain, CHECK_NULL); + return resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD); } else { - return resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL); + return resolve_instance_class_or_null(class_name, class_loader, protection_domain, THREAD); } } @@ -2660,7 +2659,7 @@ class_loader->klass() : (Klass*)NULL); event.commit(); } -#endif /* INCLUDE_TRACE */ +#endif // INCLUDE_TRACE } #ifndef PRODUCT
--- a/hotspot/src/share/vm/classfile/verificationType.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/verificationType.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -289,7 +289,7 @@ if (is_reference() && from.is_reference()) { return is_reference_assignable_from(from, context, from_field_is_protected, - CHECK_false); + THREAD); } else { return false; }
--- a/hotspot/src/share/vm/classfile/verifier.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/classfile/verifier.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -1927,7 +1927,7 @@ return SystemDictionary::resolve_or_fail( name, Handle(THREAD, loader), Handle(THREAD, protection_domain), - true, CHECK_NULL); + true, THREAD); } bool ClassVerifier::is_protected_access(instanceKlassHandle this_class,
--- a/hotspot/src/share/vm/code/codeBlob.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/code/codeBlob.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -43,7 +43,7 @@ #include "c1/c1_Runtime1.hpp" #endif -unsigned int align_code_offset(int offset) { +unsigned int CodeBlob::align_code_offset(int offset) { // align the size to CodeEntryAlignment return ((offset + (int)CodeHeap::header_size() + (CodeEntryAlignment-1)) & ~(CodeEntryAlignment-1))
--- a/hotspot/src/share/vm/code/codeBlob.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/code/codeBlob.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -83,6 +83,7 @@ public: // Returns the space needed for CodeBlob static unsigned int allocation_size(CodeBuffer* cb, int header_size); + static unsigned int align_code_offset(int offset); // Creation // a) simple CodeBlob @@ -207,7 +208,7 @@ } }; - +class WhiteBox; //---------------------------------------------------------------------------------------------------- // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc. @@ -215,6 +216,7 @@ friend class VMStructs; friend class AdapterBlob; friend class MethodHandlesAdapterBlob; + friend class WhiteBox; private: // Creation support
--- a/hotspot/src/share/vm/code/codeCache.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/code/codeCache.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -305,7 +305,7 @@ MemoryService::add_code_heap_memory_pool(heap, name); } -CodeHeap* CodeCache::get_code_heap(CodeBlob* cb) { +CodeHeap* CodeCache::get_code_heap(const CodeBlob* cb) { assert(cb != NULL, "CodeBlob is null"); FOR_ALL_HEAPS(heap) { if ((*heap)->contains(cb)) {
--- a/hotspot/src/share/vm/code/codeCache.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/code/codeCache.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -77,6 +77,7 @@ class CodeCache : AllStatic { friend class VMStructs; friend class NMethodIterator; + friend class WhiteBox; private: // CodeHeaps of the cache static GrowableArray<CodeHeap*>* _heaps; @@ -98,7 +99,7 @@ static void initialize_heaps(); // Initializes the CodeHeaps // Creates a new heap with the given name and size, containing CodeBlobs of the given type static void add_heap(ReservedSpace rs, const char* name, size_t size_initial, int code_blob_type); - static CodeHeap* get_code_heap(CodeBlob* cb); // Returns the CodeHeap for the given CodeBlob + static CodeHeap* get_code_heap(const CodeBlob* cb); // Returns the CodeHeap for the given CodeBlob static CodeHeap* get_code_heap(int code_blob_type); // Returns the CodeHeap for the given CodeBlobType // Returns the name of the VM option to set the size of the corresponding CodeHeap static const char* get_code_heap_flag_name(int code_blob_type);
--- a/hotspot/src/share/vm/code/dependencies.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/code/dependencies.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -912,6 +912,8 @@ bool is_witness(Klass* k) { if (doing_subtype_search()) { return Dependencies::is_concrete_klass(k); + } else if (!k->oop_is_instance()) { + return false; // no methods to find in an array type } else { Method* m = InstanceKlass::cast(k)->find_method(_name, _signature); if (m == NULL || !Dependencies::is_concrete_method(m)) return false; @@ -1118,7 +1120,7 @@ Klass* chain; // scratch variable #define ADD_SUBCLASS_CHAIN(k) { \ assert(chaini < CHAINMAX, "oob"); \ - chain = InstanceKlass::cast(k)->subklass(); \ + chain = k->subklass(); \ if (chain != NULL) chains[chaini++] = chain; } // Look for non-abstract subclasses. @@ -1129,35 +1131,37 @@ // (Their subclasses are additional indirect implementors. // See InstanceKlass::add_implementor.) // (Note: nof_implementors is always zero for non-interfaces.) - int nof_impls = InstanceKlass::cast(context_type)->nof_implementors(); - if (nof_impls > 1) { - // Avoid this case: *I.m > { A.m, C }; B.m > C - // Here, I.m has 2 concrete implementations, but m appears unique - // as A.m, because the search misses B.m when checking C. - // The inherited method B.m was getting missed by the walker - // when interface 'I' was the starting point. - // %%% Until this is fixed more systematically, bail out. - // (Old CHA had the same limitation.) - return context_type; - } - if (nof_impls > 0) { - Klass* impl = InstanceKlass::cast(context_type)->implementor(); - assert(impl != NULL, "just checking"); - // If impl is the same as the context_type, then more than one - // implementor has seen. No exact info in this case. - if (impl == context_type) { - return context_type; // report an inexact witness to this sad affair + if (top_level_call) { + int nof_impls = InstanceKlass::cast(context_type)->nof_implementors(); + if (nof_impls > 1) { + // Avoid this case: *I.m > { A.m, C }; B.m > C + // Here, I.m has 2 concrete implementations, but m appears unique + // as A.m, because the search misses B.m when checking C. + // The inherited method B.m was getting missed by the walker + // when interface 'I' was the starting point. + // %%% Until this is fixed more systematically, bail out. + // (Old CHA had the same limitation.) + return context_type; } - if (do_counts) - { NOT_PRODUCT(deps_find_witness_steps++); } - if (is_participant(impl)) { - if (!participants_hide_witnesses) { + if (nof_impls > 0) { + Klass* impl = InstanceKlass::cast(context_type)->implementor(); + assert(impl != NULL, "just checking"); + // If impl is the same as the context_type, then more than one + // implementor has seen. No exact info in this case. + if (impl == context_type) { + return context_type; // report an inexact witness to this sad affair + } + if (do_counts) + { NOT_PRODUCT(deps_find_witness_steps++); } + if (is_participant(impl)) { + if (!participants_hide_witnesses) { + ADD_SUBCLASS_CHAIN(impl); + } + } else if (is_witness(impl) && !ignore_witness(impl)) { + return impl; + } else { ADD_SUBCLASS_CHAIN(impl); } - } else if (is_witness(impl) && !ignore_witness(impl)) { - return impl; - } else { - ADD_SUBCLASS_CHAIN(impl); } }
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -35,6 +35,7 @@ #include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/nativeLookup.hpp" +#include "prims/whitebox.hpp" #include "runtime/arguments.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/compilationPolicy.hpp" @@ -593,7 +594,7 @@ * Add a CompileTask to a CompileQueue. */ void CompileQueue::add(CompileTask* task) { - assert(lock()->owned_by_self(), "must own lock"); + assert(MethodCompileQueue_lock->owned_by_self(), "must own lock"); task->set_next(NULL); task->set_prev(NULL); @@ -624,7 +625,7 @@ } // Notify CompilerThreads that a task is available. - lock()->notify_all(); + MethodCompileQueue_lock->notify_all(); } /** @@ -634,7 +635,7 @@ * compilation is disabled. */ void CompileQueue::free_all() { - MutexLocker mu(lock()); + MutexLocker mu(MethodCompileQueue_lock); CompileTask* next = _first; // Iterate over all tasks in the compile queue @@ -652,14 +653,14 @@ _first = NULL; // Wake up all threads that block on the queue. - lock()->notify_all(); + MethodCompileQueue_lock->notify_all(); } /** * Get the next CompileTask from a CompileQueue */ CompileTask* CompileQueue::get() { - MutexLocker locker(lock()); + MutexLocker locker(MethodCompileQueue_lock); // If _first is NULL we have no more compile jobs. There are two reasons for // having no compile jobs: First, we compiled everything we wanted. Second, // we ran out of code cache so compilation has been disabled. In the latter @@ -680,7 +681,7 @@ // We need a timed wait here, since compiler threads can exit if compilation // is disabled forever. We use 5 seconds wait time; the exiting of compiler threads // is not critical and we do not want idle compiler threads to wake up too often. - lock()->wait(!Mutex::_no_safepoint_check_flag, 5*1000); + MethodCompileQueue_lock->wait(!Mutex::_no_safepoint_check_flag, 5*1000); } if (CompileBroker::is_compilation_disabled_forever()) { @@ -700,7 +701,7 @@ // Clean & deallocate stale compile tasks. // Temporarily releases MethodCompileQueue lock. void CompileQueue::purge_stale_tasks() { - assert(lock()->owned_by_self(), "must own lock"); + assert(MethodCompileQueue_lock->owned_by_self(), "must own lock"); if (_first_stale != NULL) { // Stale tasks are purged when MCQ lock is released, // but _first_stale updates are protected by MCQ lock. @@ -709,7 +710,7 @@ CompileTask* head = _first_stale; _first_stale = NULL; { - MutexUnlocker ul(lock()); + MutexUnlocker ul(MethodCompileQueue_lock); for (CompileTask* task = head; task != NULL; ) { CompileTask* next_task = task->next(); CompileTaskWrapper ctw(task); // Frees the task @@ -721,7 +722,7 @@ } void CompileQueue::remove(CompileTask* task) { - assert(lock()->owned_by_self(), "must own lock"); + assert(MethodCompileQueue_lock->owned_by_self(), "must own lock"); if (task->prev() != NULL) { task->prev()->set_next(task->next()); } else { @@ -741,7 +742,7 @@ } void CompileQueue::remove_and_mark_stale(CompileTask* task) { - assert(lock()->owned_by_self(), "must own lock"); + assert(MethodCompileQueue_lock->owned_by_self(), "must own lock"); remove(task); // Enqueue the task for reclamation (should be done outside MCQ lock) @@ -779,7 +780,7 @@ } void CompileQueue::print(outputStream* st) { - assert(lock()->owned_by_self(), "must own lock"); + assert(MethodCompileQueue_lock->owned_by_self(), "must own lock"); st->print_cr("Contents of %s", name()); st->print_cr("----------------------------"); CompileTask* task = _first; @@ -1065,11 +1066,11 @@ #endif // !ZERO && !SHARK // Initialize the compilation queue if (c2_compiler_count > 0) { - _c2_compile_queue = new CompileQueue("C2 compile queue", MethodCompileQueue_lock); + _c2_compile_queue = new CompileQueue("C2 compile queue"); _compilers[1]->set_num_compiler_threads(c2_compiler_count); } if (c1_compiler_count > 0) { - _c1_compile_queue = new CompileQueue("C1 compile queue", MethodCompileQueue_lock); + _c1_compile_queue = new CompileQueue("C1 compile queue"); _compilers[0]->set_num_compiler_threads(c1_compiler_count); } @@ -1213,7 +1214,7 @@ // Acquire our lock. { - MutexLocker locker(queue->lock(), thread); + MutexLocker locker(MethodCompileQueue_lock, thread); // Make sure the method has not slipped into the queues since // last we checked; note that those checks were "fast bail-outs". @@ -1806,7 +1807,7 @@ os::file_separator(), thread_id, os::current_process_id()); } - fp = fopen(file_name, "at"); + fp = fopen(file_name, "wt"); if (fp != NULL) { if (LogCompilation && Verbose) { tty->print_cr("Opening compilation log %s", file_name); @@ -1963,6 +1964,12 @@ if (comp == NULL) { ci_env.record_method_not_compilable("no compiler", !TieredCompilation); } else { + if (WhiteBoxAPI && WhiteBox::compilation_locked) { + MonitorLockerEx locker(Compilation_lock, Mutex::_no_safepoint_check_flag); + while (WhiteBox::compilation_locked) { + locker.wait(Mutex::_no_safepoint_check_flag); + } + } comp->compile_method(&ci_env, target, osr_bci); } @@ -1978,6 +1985,7 @@ if (ci_env.failing()) { task->set_failure_reason(ci_env.failure_reason()); + ci_env.report_failure(ci_env.failure_reason()); const char* retry_message = ci_env.retry_message(); if (_compilation_log != NULL) { _compilation_log->log_failure(thread, task, ci_env.failure_reason(), retry_message);
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/compiler/compileBroker.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -195,7 +195,6 @@ class CompileQueue : public CHeapObj<mtCompiler> { private: const char* _name; - Monitor* _lock; CompileTask* _first; CompileTask* _last; @@ -206,9 +205,8 @@ void purge_stale_tasks(); public: - CompileQueue(const char* name, Monitor* lock) { + CompileQueue(const char* name) { _name = name; - _lock = lock; _first = NULL; _last = NULL; _size = 0; @@ -216,7 +214,6 @@ } const char* name() const { return _name; } - Monitor* lock() const { return _lock; } void add(CompileTask* task); void remove(CompileTask* task); @@ -418,6 +415,7 @@ shutdown_compilaton = 2 }; + static jint get_compilation_activity_mode() { return _should_compile_new_jobs; } static bool should_compile_new_jobs() { return UseCompiler && (_should_compile_new_jobs == run_compilation); } static bool set_should_compile_new_jobs(jint new_state) { // Return success if the current caller set it
--- a/hotspot/src/share/vm/compiler/compileLog.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/compiler/compileLog.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -56,8 +56,10 @@ } CompileLog::~CompileLog() { - delete _out; + delete _out; // Close fd in fileStream::~fileStream() _out = NULL; + // Remove partial file after merging in CompileLog::finish_log_on_error + unlink(_file); FREE_C_HEAP_ARRAY(char, _identities, mtCompiler); FREE_C_HEAP_ARRAY(char, _file, mtCompiler); } @@ -278,10 +280,9 @@ } file->print_raw_cr("</compilation_log>"); close(partial_fd); - unlink(partial_file); } CompileLog* next_log = log->_next; - delete log; + delete log; // Removes partial file log = next_log; } _first = NULL;
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -89,9 +89,3 @@ _gc_policy_counters = new GCPolicyCounters("Copy:CMS", 2, 3); } } - -// Returns true if the incremental mode is enabled. -bool ConcurrentMarkSweepPolicy::has_soft_ended_eden() -{ - return CMSIncrementalMode; -}
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -42,9 +42,6 @@ virtual void initialize_size_policy(size_t init_eden_size, size_t init_promo_size, size_t init_survivor_size); - - // Returns true if the incremental mode is enabled. - virtual bool has_soft_ended_eden(); }; #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSCOLLECTORPOLICY_HPP
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -2083,17 +2083,13 @@ } // Support for compaction - void CompactibleFreeListSpace::prepare_for_compaction(CompactPoint* cp) { - SCAN_AND_FORWARD(cp,end,block_is_obj,block_size); + scan_and_forward(this, cp); // Prepare_for_compaction() uses the space between live objects // so that later phase can skip dead space quickly. So verification // of the free lists doesn't work after. } -#define obj_size(q) adjustObjectSize(oop(q)->size()) -#define adjust_obj_size(s) adjustObjectSize(s) - void CompactibleFreeListSpace::adjust_pointers() { // In other versions of adjust_pointers(), a bail out // based on the amount of live data in the generation @@ -2101,12 +2097,12 @@ // Cannot test used() == 0 here because the free lists have already // been mangled by the compaction. - SCAN_AND_ADJUST_POINTERS(adjust_obj_size); + scan_and_adjust_pointers(this); // See note about verification in prepare_for_compaction(). } void CompactibleFreeListSpace::compact() { - SCAN_AND_COMPACT(obj_size); + scan_and_compact(this); } // Fragmentation metric = 1 - [sum of (fbs**2) / (sum of fbs)**2] @@ -2629,7 +2625,7 @@ // Get the #blocks we want to claim size_t n_blks = (size_t)_blocks_to_claim[word_sz].average(); assert(n_blks > 0, "Error"); - assert(ResizePLAB || n_blks == OldPLABSize, "Error"); + assert(ResizeOldPLAB || n_blks == OldPLABSize, "Error"); // In some cases, when the application has a phase change, // there may be a sudden and sharp shift in the object survival // profile, and updating the counts at the end of a scavenge
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Wed Jul 05 20:09:40 2017 +0200 @@ -73,6 +73,13 @@ friend class CMSCollector; // Local alloc buffer for promotion into this space. friend class CFLS_LAB; + // Allow scan_and_* functions to call (private) overrides of the auxiliary functions on this class + template <typename SpaceType> + friend void CompactibleSpace::scan_and_adjust_pointers(SpaceType* space); + template <typename SpaceType> + friend void CompactibleSpace::scan_and_compact(SpaceType* space); + template <typename SpaceType> + friend void CompactibleSpace::scan_and_forward(SpaceType* space, CompactPoint* cp); // "Size" of chunks of work (executed during parallel remark phases // of CMS collection); this probably belongs in CMSCollector, although @@ -288,6 +295,28 @@ _bt.freed(start, size); } + // Auxiliary functions for scan_and_{forward,adjust_pointers,compact} support. + // See comments for CompactibleSpace for more information. + inline HeapWord* scan_limit() const { + return end(); + } + + inline bool scanned_block_is_obj(const HeapWord* addr) const { + return CompactibleFreeListSpace::block_is_obj(addr); // Avoid virtual call + } + + inline size_t scanned_block_size(const HeapWord* addr) const { + return CompactibleFreeListSpace::block_size(addr); // Avoid virtual call + } + + inline size_t adjust_obj_size(size_t size) const { + return adjustObjectSize(size); + } + + inline size_t obj_size(const HeapWord* addr) const { + return adjustObjectSize(oop(addr)->size()); + } + protected: // Reset the indexed free list to its initial empty condition. void resetIndexedFreeListArray();
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Dec 04 15:23:04 2014 -0800 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Jul 05 20:09:40 2017 +0200 @@ -167,16 +167,6 @@ }; -// Wrapper class to temporarily disable icms during a foreground cms collection. -class ICMSDisabler: public StackObj { - public: - // The ctor disables icms and wakes up the thread so it notices the change; - // the dtor re-enables icms. Note that the CMSCollector methods will check - // CMSIncrementalMode. - ICMSDisabler() { CMSCollector::disable_icms(); CMSCollector::start_icms(); } - ~ICMSDisabler() { CMSCollector::enable_icms(); } -}; - ////////////////////////////////////////////////////////////////// // Concurrent Mark-Sweep Generation ///////////////////////////// ////////////////////////////////////////////////////////////////// @@ -202,7 +192,6 @@ FreeBlockDictionary<FreeChunk>::DictionaryChoice dictionaryChoice) : CardGeneration(rs, initial_byte_size, level, ct), _dilatation_factor(((double)MinChunkSize)/((double)(CollectedHeap::min_fill_size()))), - _debug_collection_type(Concurrent_collection_type), _did_compact(false) { HeapWord* bottom = (HeapWord*) _virtual_space.low(); @@ -363,7 +352,6 @@ _cms_used_at_gc0_end = 0; _allow_duty_cycle_reduction = false; _valid_bits = 0; - _icms_duty_cycle = CMSIncrementalDutyCycle; } double CMSStats::cms_free_adjustment_factor(size_t free) const { @@ -442,86 +430,17 @@ return work - deadline; } -// Return a duty cycle based on old_duty_cycle and new_duty_cycle, limiting the -// amount of change to prevent wild oscillation. -unsigned int CMSStats::icms_damped_duty_cycle(unsigned int old_duty_cycle, - unsigned int new_duty_cycle) { - assert(old_duty_cycle <= 100, "bad input value"); - assert(new_duty_cycle <= 100, "bad input value"); - - // Note: use subtraction with caution since it may underflow (values are - // unsigned). Addition is safe since we're in the range 0-100. - unsigned int damped_duty_cycle = new_duty_cycle; - if (new_duty_cycle < old_duty_cycle) { - const unsigned int largest_delta = MAX2(old_duty_cycle / 4, 5U); - if (new_duty_cycle + largest_delta < old_duty_cycle) { - damped_duty_cycle = old_duty_cycle - largest_delta; - } - } else if (new_duty_cycle > old_duty_cycle) { - const unsigned int largest_delta = MAX2(old_duty_cycle / 4, 15U); - if (new_duty_cycle > old_duty_cycle + largest_delta) { - damped_duty_cycle = MIN2(old_duty_cycle + largest_delta, 100U); - } - } - assert(damped_duty_cycle <= 100, "invalid duty cycle computed"); - - if (CMSTraceIncrementalPacing) { - gclog_or_tty->print(" [icms_damped_duty_cycle(%d,%d) = %d] ", - old_duty_cycle, new_duty_cycle, damped_duty_cycle); - } - return damped_duty_cycle; -} - -unsigned int CMSStats::icms_update_duty_cycle_impl() { - assert(CMSIncrementalPacing && valid(), - "should be handled in icms_update_duty_cycle()"); - - double cms_time_so_far = cms_timer().seconds(); - double scaled_duration = cms_duration_per_mb() * _cms_used_at_gc0_end / M; - double scaled_duration_remaining = fabsd(scaled_duration - cms_time_so_far); - - // Avoid division by 0. - double time_until_full = MAX2(time_until_cms_gen_full(), 0.01); - double duty_cycle_dbl = 100.0 * scaled_duration_remaining / time_until_full; - - unsigned int new_duty_cycle = MIN2((unsigned int)duty_cycle_dbl, 100U); - if (new_duty_cycle > _icms_duty_cycle) { - // Avoid very small duty cycles (1 or 2); 0 is allowed. - if (new_duty_cycle > 2) { - _icms_duty_cycle = icms_damped_duty_cycle(_icms_duty_cycle, - new_duty_cycle); - } - } else if (_allow_duty_cycle_reduction) { - // The duty cycle is reduced only once per cms cycle (see record_cms_end()). - new_duty_cycle = icms_damped_duty_cycle(_icms_duty_cycle, new_duty_cycle); - // Respect the minimum duty cycle. - unsigned int min_duty_cycle = (unsigned int)CMSIncrementalDutyCycleMin; - _icms_duty_cycle = MAX2(new_duty_cycle, min_duty_cycle); - } - - if (PrintGCDetails || CMSTraceIncrementalPacing) { - gclog_or_tty->print(" icms_dc=%d ", _icms_duty_cycle); - } - - _allow_duty_cycle_reduction = false; - return _icms_duty_cycle; -} - #ifndef PRODUCT void CMSStats::print_on(outputStream *st) const { st->print(" gc0_alpha=%d,cms_alpha=%d", _gc0_alpha, _cms_alpha); st->print(",gc0_dur=%g,gc0_per=%g,gc0_promo=" SIZE_FORMAT, gc0_duration(), gc0_period(), gc0_promoted()); - st->print(",cms_dur=%g,cms_dur_per_mb=%g,cms_per=%g,cms_alloc=" SIZE_FORMAT, - cms_duration(), cms_duration_per_mb(), - cms_period(), cms_allocated()); + st->print(",cms_dur=%g,cms_per=%g,cms_alloc=" SIZE_FORMAT, + cms_duration(), cms_period(), cms_allocated()); st->print(",cms_since_beg=%g,cms_since_end=%g", cms_time_since_begin(), cms_time_since_end()); st->print(",cms_used_beg=" SIZE_FORMAT ",cms_used_end=" SIZE_FORMAT, _cms_used_at_gc0_begin, _cms_used_at_gc0_end); - if (CMSIncrementalMode) { - st->print(",dc=%d", icms_duty_cycle()); - } if (valid()) { st->print(",promo_rate=%g,cms_alloc_rate=%g", @@ -579,8 +498,6 @@ #endif _collection_count_start(0), _verifying(false), - _icms_start_limit(NULL), - _icms_stop_limit(NULL), _verification_mark_bm(0, Mutex::leaf + 1, "CMS_verification_mark_bm_lock"), _completed_initialization(false), _collector_policy(cp), @@ -694,8 +611,6 @@ // Clip CMSBootstrapOccupancy between 0 and 100. _bootstrap_occupancy = ((double)CMSBootstrapOccupancy)/(double)100; - _full_gcs_since_conc_gc = 0; - // Now tell CMS generations the identity of their collector ConcurrentMarkSweepGeneration::set_collector(this); @@ -1116,137 +1031,6 @@ } } -static inline size_t percent_of_space(Space* space, HeapWord* addr) -{ - size_t delta = pointer_delta(addr, space->bottom()); - return (size_t)(delta * 100.0 / (space->capacity() / HeapWordSize)); -} - -void CMSCollector::icms_update_allocation_limits() -{ - Generation* young = GenCollectedHeap::heap()->get_gen(0); - EdenSpace* eden = young->as_DefNewGeneration()->eden(); - - const unsigned int duty_cycle = stats().icms_update_duty_cycle(); - if (CMSTraceIncrementalPacing) { - stats().print(); - } - - assert(duty_cycle <= 100, "invalid duty cycle"); - if (duty_cycle != 0) { - // The duty_cycle is a percentage between 0 and 100; convert to words and - // then compute the offset from the endpoints of the space. - size_t free_words = eden->free() / HeapWordSize; - double free_words_dbl = (double)free_words; - size_t duty_cycle_words = (size_t)(free_words_dbl * duty_cycle / 100.0); - size_t offset_words = (free_words - duty_cycle_words) / 2; - - _icms_start_limit = eden->top() + offset_words; - _icms_stop_limit = eden->end() - offset_words; - - // The limits may be adjusted (shifted to the right) by - // CMSIncrementalOffset, to allow the application more mutator time after a - // young gen gc (when all mutators were stopped) and before CMS starts and - // takes away one or more cpus. - if (CMSIncrementalOffset != 0) { - double adjustment_dbl = free_words_dbl * CMSIncrementalOffset / 100.0; - size_t adjustment = (size_t)adjustment_dbl; - HeapWord* tmp_stop = _icms_stop_limit + adjustment; - if (tmp_stop > _icms_stop_limit && tmp_stop < eden->end()) { - _icms_start_limit += adjustment; - _icms_stop_limit = tmp_stop; - } - } - } - if (duty_cycle == 0 || (_icms_start_limit == _icms_stop_limit)) { - _icms_start_limit = _icms_stop_limit = eden->end(); - } - - // Install the new start limit. - eden->set_soft_end(_icms_start_limit); - - if (CMSTraceIncrementalMode) { - gclog_or_tty->print(" icms alloc limits: " - PTR_FORMAT "," PTR_FORMAT - " (" SIZE_FORMAT "%%," SIZE_FORMAT "%%) ", - p2i(_icms_start_limit), p2i(_icms_stop_limit), - percent_of_space(eden, _icms_start_limit), - percent_of_space(eden, _icms_stop_limit)); - if (Verbose) { - gclog_or_tty->print("eden: "); - eden->print_on(gclog_or_tty); - } - } -} - -// Any changes here should try to maintain the invariant -// that if this method is called with _icms_start_limit -// and _icms_stop_limit both NULL, then it should return NULL -// and not notify the icms thread. -HeapWord* -CMSCollector::allocation_limit_reached(Space* space, HeapWord* top, - size_t word_size) -{ - // A start_limit equal to end() means the duty cycle is 0, so treat that as a - // nop. - if (CMSIncrementalMode && _icms_start_limit != space->end()) { - if (top <= _icms_start_limit) { - if (CMSTraceIncrementalMode) { - space->print_on(gclog_or_tty); - gclog_or_tty->stamp(); - gclog_or_tty->print_cr(" start limit top=" PTR_FORMAT - ", new limit=" PTR_FORMAT - " (" SIZE_FORMAT "%%)", - p2i(top), p2i(_icms_stop_limit), - percent_of_space(space, _icms_stop_limit)); - } - ConcurrentMarkSweepThread::start_icms(); - assert(top < _icms_stop_limit, "Tautology"); - if (word_size < pointer_delta(_icms_stop_limit, top)) { - return _icms_stop_limit; - } - - // The allocation will cross both the _start and _stop limits, so do the - // stop notification also and return end(). - if (CMSTraceIncrementalMode) { - space->print_on(gclog_or_tty); - gclog_or_tty->stamp(); - gclog_or_tty->print_cr(" +stop limit top=" PTR_FORMAT - ", new limit=" PTR_FORMAT - " (" SIZE_FORMAT "%%)", - p2i(top), p2i(space->end()), - percent_of_space(space, space->end())); - } - ConcurrentMarkSweepThread::stop_icms(); - return space->end(); - } - - if (top <= _icms_stop_limit) { - if (CMSTraceIncrementalMode) { - space->print_on(gclog_or_tty); - gclog_or_tty->stamp(); - gclog_or_tty->print_cr(" stop limit top=" PTR_FORMAT - ", new limit=" PTR_FORMAT - " (" SIZE_FORMAT "%%)", - top, space->end(), - percent_of_space(space, space->end())); - } - ConcurrentMarkSweepThread::stop_icms(); - return space->end(); - } - - if (CMSTraceIncrementalMode) { - space->print_on(gclog_or_tty); - gclog_or_tty->stamp(); - gclog_or_tty->print_cr(" end limit top=" PTR_FORMAT - ", new limit=" PTR_FORMAT, - top, NULL); - } - } - - return NULL; -} - oop ConcurrentMarkSweepGeneration::promote(oop obj, size_t obj_size) { assert(obj_size == (size_t)obj->size(), "bad obj_size passed in"); // allocate, copy and if necessary update promoinfo -- @@ -1289,14 +1073,6 @@ } -HeapWord* -ConcurrentMarkSweepGeneration::allocation_limit_reached(Space* space, - HeapWord* top, - size_t word_sz) -{ - return collector()->allocation_limit_reached(space, top, word_sz); -} - // IMPORTANT: Notes on object size recognition in CMS. // --------------------------------------------------- // A block of storage in the CMS generation is always in @@ -1468,20 +1244,6 @@ return true; } - // For debugging purposes, change the type of collection. - // If the rotation is not on the concurrent collection - // type, don't start a concurrent collection. - NOT_PRODUCT( - if (RotateCMSCollectionTypes && - (_cmsGen->debug_collection_type() != - ConcurrentMarkSweepGeneration::Concurrent_collection_type)) { - assert(_cmsGen->debug_collection_type() != - ConcurrentMarkSweepGeneration::Unknown_collection_type, - "Bad cms collection type"); - return false; - } - ) - FreelistLocker x(this); // ------------------------------------------------------------------ // Print out lots of information which affects the initiation of @@ -1662,16 +1424,6 @@ size_t size, bool tlab) { - if (!UseCMSCollectionPassing && _collectorState > Idling) { - // For debugging purposes skip the collection if the state - // is not currently idle - if (TraceCMSState) { - gclog_or_tty->print_cr("Thread " INTPTR_FORMAT " skipped full:%d CMS state %d", - Thread::current(), full, _collectorState); - } - return; - } - // The following "if" branch is present for defensive reasons. // In the current uses of this interface, it can be replaced with: // assert(!GC_locker.is_active(), "Can't be called otherwise"); @@ -1687,7 +1439,6 @@ return; } acquire_control_and_collect(full, clear_all_soft_refs); - _full_gcs_since_conc_gc++; } void CMSCollector::request_full_gc(unsigned int full_gc_count, GCCause::Cause cause) { @@ -1809,9 +1560,6 @@ // we want to do a foreground collection. _foregroundGCIsActive = true; - // Disable incremental mode during a foreground collection. - ICMSDisabler icms_disabler; - // release locks and wait for a notify from the background collector // releasing the locks in only necessary for phases which // do yields to improve the granularity of the collection. @@ -1860,66 +1608,52 @@ gclog_or_tty->print_cr(" gets control with state %d", _collectorState); } - // Check if we need to do a compaction, or if not, whether - // we need to start the mark-sweep from scratch. - bool should_compact = false; - bool should_start_over = false; - decide_foreground_collection_type(clear_all_soft_refs, - &should_compact, &should_start_over); - -NOT_PRODUCT( - if (RotateCMSCollectionTypes) { - if (_cmsGen->debug_collection_type() == - ConcurrentMarkSweepGeneration::MSC_foreground_collection_type) { - should_compact = true; - } else if (_cmsGen->debug_collection_type() == - ConcurrentMarkSweepGeneration::MS_foreground_collection_type) { - should_compact = false; - } - } -) + // Inform cms gen if this was due to partial collection failing. + // The CMS gen may use this fact to determine its expansion policy. + GenCollectedHeap* gch = GenCollectedHeap::heap(); + if (gch->incremental_collection_will_fail(false /* don't consult_young */)) { + assert(!_cmsGen->incremental_collection_failed(), + "Should have been noticed, reacted to and cleared"); + _cmsGen->set_incremental_collection_failed(); + } if (first_state > Idling) { report_concurrent_mode_interruption(); } - set_did_compact(should_compact); - if (should_compact) { - // If the collection is being acquired from the background - // collector, there may be references on the discovered - // references lists that have NULL referents (being those - // that were concurrently cleared by a mutator) or - // that are no longer active (having been enqueued concurrently - // by the mutator). - // Scrub the list of those references because Mark-Sweep-Compact - // code assumes referents are not NULL and that all discovered - // Reference objects are active. - ref_processor()->clean_up_discovered_references(); - - if (first_state > Idling) { - save_heap_summary(); - } - - do_compaction_work(clear_all_soft_refs); - - // Has the GC time limit been exceeded? - DefNewGeneration* young_gen = _young_gen->as_DefNewGeneration(); - size_t max_eden_size = young_gen-&g