--- a/.hgignore Tue Nov 29 21:58:29 2016 -0800
+++ b/.hgignore Wed Jul 05 22:31:37 2017 +0200
@@ -3,8 +3,7 @@
^.idea/
nbproject/private/
^webrev
-^.hgtip
-^.bridge2
+^.src-rev$
^.jib/
.DS_Store
.metadata/
--- a/.hgtags-top-repo Tue Nov 29 21:58:29 2016 -0800
+++ b/.hgtags-top-repo Wed Jul 05 22:31:37 2017 +0200
@@ -389,3 +389,4 @@
8d337fd6333e28c48aa87880144b840aad82baaf jdk-9+144
ff98aa9ec9fae991e426ce5926fc9036d25f5562 jdk-9+145
a22e2671d88f6b22a4aa82e3966986542ed2a381 jdk-9+146
+5f6920274c48eb00d31afee6c034826a754c13d9 jdk-9+147
--- a/common/autoconf/boot-jdk.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/boot-jdk.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -98,7 +98,7 @@
fi
])
-# Test: Is bootjdk explicitely set by command line arguments?
+# Test: Is bootjdk explicitly set by command line arguments?
AC_DEFUN([BOOTJDK_CHECK_ARGUMENTS],
[
if test "x$with_boot_jdk" != x; then
@@ -238,7 +238,7 @@
$1=$BOOT_JDK/bin/$2
if test ! -x [$]$1; then
AC_MSG_RESULT(not found)
- AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk])
+ AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk])
AC_MSG_ERROR([Could not find $2 in the Boot JDK])
fi
AC_MSG_RESULT(ok)
@@ -262,7 +262,7 @@
# we detected something (if so, the path to the jdk is in BOOT_JDK). But we
# must check if this is indeed valid; otherwise we'll continue looking.
- # Test: Is bootjdk explicitely set by command line arguments?
+ # Test: Is bootjdk explicitly set by command line arguments?
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_ARGUMENTS])
if test "x$with_boot_jdk" != x && test "x$BOOT_JDK_FOUND" = xno; then
# Having specified an argument which is incorrect will produce an instant failure;
@@ -286,7 +286,7 @@
if test "x$BOOT_JDK_FOUND" = xno; then
HELP_MSG_MISSING_DEPENDENCY([openjdk])
AC_MSG_NOTICE([Could not find a valid Boot JDK. $HELP_MSG])
- AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk])
+ AC_MSG_NOTICE([This might be fixed by explicitly setting --with-boot-jdk])
AC_MSG_ERROR([Cannot continue])
fi
--- a/common/autoconf/build-performance.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/build-performance.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -217,6 +217,13 @@
AC_DEFUN([BPERF_SETUP_CCACHE_USAGE],
[
if test "x$CCACHE" != x; then
+ if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then
+ HAS_BAD_CCACHE=[`$ECHO $CCACHE_VERSION | \
+ $GREP -e '^1\.' -e '^2\.' -e '^3\.0\.' -e '^3\.1\.'`]
+ if test "x$HAS_BAD_CCACHE" != "x"; then
+ AC_MSG_ERROR([On macosx, ccache 3.2 or later is required, found $CCACHE_VERSION])
+ fi
+ fi
if test "x$USE_PRECOMPILED_HEADER" = "x1"; then
HAS_BAD_CCACHE=[`$ECHO $CCACHE_VERSION | \
$GREP -e '^1.*' -e '^2.*' -e '^3\.0.*' -e '^3\.1\.[0123]$'`]
--- a/common/autoconf/buildjdk-spec.gmk.in Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/buildjdk-spec.gmk.in Wed Jul 05 22:31:37 2017 +0200
@@ -86,73 +86,13 @@
# Save speed and disk space by not enabling debug symbols for the buildjdk
ENABLE_DEBUG_SYMBOLS := false
-####################################################
-#
-# Legacy Hotspot support
+# Control wether Hotspot builds gtest tests
+BUILD_GTEST := false
-# Legacy setting: OPT or DBG
-VARIANT := OPT
-# Legacy setting: true or false
-FASTDEBUG := false
-# Legacy setting: debugging the class files?
-DEBUG_CLASSFILES := false
+JVM_VARIANTS := server
# Some users still set EXTRA_*FLAGS on the make command line. Must
# make sure to override that when building buildjdk.
override EXTRA_CFLAGS :=
override EXTRA_CXXFLAGS :=
override EXTRA_LDFLAGS :=
-
-# The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the
-# compiler that produces code that can be run on the build platform.
-HOSTCC := $(BUILD_CC)
-HOSTCXX := $(BUILD_CXX)
-
-# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc)
-PLATFORM := $(OPENJDK_BUILD_OS)
-# 32 or 64 bit
-ARCH_DATA_MODEL := $(OPENJDK_BUILD_CPU_BITS)
-
-ALT_BOOTDIR := $(BOOT_JDK)
-# Yet another name for arch used for an extra subdir below the jvm lib.
-# Uses i386 and amd64, instead of x86 and x86_64.
-LIBARCH := @OPENJDK_BUILD_CPU_LEGACY_LIB@
-# Set the cpu architecture. Some users still set ARCH on the make command line. Must
-# make sure to override that when building buildjdk.
-override ARCH := $(OPENJDK_BUILD_CPU_ARCH)
-# Legacy setting for building for a 64 bit machine.
-# If yes then this expands to _LP64 := 1
-ifeq ($(OPENJDK_BUILD_CPU_BITS), 64)
- _LP64 := 1
-endif
-
-ALT_OUTPUTDIR := $(HOTSPOT_OUTPUTDIR)
-ALT_EXPORT_PATH := $(HOTSPOT_DIST)
-
-JVM_INTERPRETER := @JVM_INTERPRETER@
-ifeq ($(JVM_INTERPRETER), cpp)
- CC_INTERP=true
-endif
-
-HOTSPOT_MAKE_ARGS := product docs export_product
-
-# Control wether Hotspot builds gtest tests
-BUILD_GTEST := false
-
-USE_PRECOMPILED_HEADER := @USE_PRECOMPILED_HEADER@
-
-# Hotspot expects the variable FULL_DEBUG_SYMBOLS=1/0 to control debug symbols
-# creation.
-FULL_DEBUG_SYMBOLS := 0
-ZIP_DEBUGINFO_FILES := 0
-# Disable stripping
-STRIP_POLICY := none
-
-JVM_VARIANTS := server
-JVM_VARIANT_SERVER := true
-JVM_VARIANT_CLIENT := false
-JVM_VARIANT_MINIMAL1 := false
-JVM_VARIANT_KERNEL := false
-JVM_VARIANT_ZERO := false
-JVM_VARIANT_ZEROSHARK := false
-JVM_VARIANT_CORE := false
--- a/common/autoconf/configure.ac Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/configure.ac Wed Jul 05 22:31:37 2017 +0200
@@ -182,7 +182,6 @@
# Finally do some processing after the detection phase
TOOLCHAIN_SETUP_BUILD_COMPILERS
-TOOLCHAIN_SETUP_LEGACY
TOOLCHAIN_MISC_CHECKS
# Setup the JTReg Regression Test Harness.
--- a/common/autoconf/flags.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/flags.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -1378,7 +1378,7 @@
AC_MSG_CHECKING([if native warnings are errors])
if test "x$enable_warnings_as_errors" = "xyes"; then
- AC_MSG_RESULT([yes (explicitely set)])
+ AC_MSG_RESULT([yes (explicitly set)])
WARNINGS_AS_ERRORS=true
elif test "x$enable_warnings_as_errors" = "xno"; then
AC_MSG_RESULT([no])
--- a/common/autoconf/generated-configure.sh Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/generated-configure.sh Wed Jul 05 22:31:37 2017 +0200
@@ -700,8 +700,6 @@
JVM_FEATURES_server
INCLUDE_DTRACE
GCOV_ENABLED
-STRIP_POLICY
-DEBUG_BINARIES
ZIP_EXTERNAL_DEBUG_SYMBOLS
COPY_DEBUG_SYMBOLS
COMPILE_WITH_DEBUG_SYMBOLS
@@ -791,11 +789,6 @@
HOTSPOT_TOOLCHAIN_TYPE
USING_BROKEN_SUSE_LD
PACKAGE_PATH
-USE_CLANG
-HOTSPOT_LD
-HOTSPOT_CXX
-HOTSPOT_RC
-HOTSPOT_MT
BUILD_AS
BUILD_LDCXX
BUILD_LD
@@ -1974,8 +1967,8 @@
--enable-debug set the debug level to fastdebug (shorthand for
--with-debug-level=fastdebug) [disabled]
--enable-headless-only only build headless (no GUI) support [disabled]
- --enable-unlimited-crypto
- Enable unlimited crypto policy [disabled]
+ --disable-unlimited-crypto
+ Disable unlimited crypto policy [enabled]
--disable-keep-packaged-modules
Do not keep packaged modules in jdk image [enable]
--enable-static-build enable static library build [disabled]
@@ -3851,7 +3844,7 @@
# $1 A command line (typically autoconf macro) to execute
-# Test: Is bootjdk explicitely set by command line arguments?
+# Test: Is bootjdk explicitly set by command line arguments?
# Test: Is $JAVA_HOME set?
@@ -4911,7 +4904,7 @@
# Minimum supported versions, empty means unspecified
TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
TOOLCHAIN_MINIMUM_VERSION_gcc="4.3"
-TOOLCHAIN_MINIMUM_VERSION_microsoft=""
+TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010
TOOLCHAIN_MINIMUM_VERSION_solstudio="5.13"
TOOLCHAIN_MINIMUM_VERSION_xlc=""
@@ -4982,10 +4975,6 @@
# for this, we can only do this after these have been setup.
-# Setup legacy variables that are still needed as alternative ways to refer to
-# parts of the toolchain.
-
-
# Do some additional checks on the detected tools.
@@ -5093,7 +5082,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1479997904
+DATE_WHEN_GENERATED=1480714260
###############################################################################
#
@@ -15523,7 +15512,7 @@
;;
esac
- # ..and setup our own variables. (Do this explicitely to facilitate searching)
+ # ..and setup our own variables. (Do this explicitly to facilitate searching)
OPENJDK_BUILD_OS="$VAR_OS"
if test "x$VAR_OS_TYPE" != x; then
OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE"
@@ -15662,7 +15651,7 @@
;;
esac
- # ... and setup our own variables. (Do this explicitely to facilitate searching)
+ # ... and setup our own variables. (Do this explicitly to facilitate searching)
OPENJDK_TARGET_OS="$VAR_OS"
if test "x$VAR_OS_TYPE" != x; then
OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE"
@@ -24240,7 +24229,7 @@
if test "${enable_unlimited_crypto+set}" = set; then :
enableval=$enable_unlimited_crypto;
else
- enable_unlimited_crypto=no
+ enable_unlimited_crypto=yes
fi
if test "x$enable_unlimited_crypto" = "xyes"; then
@@ -24400,7 +24389,7 @@
as_fn_error $? "Version string contains + but both 'BUILD' and 'OPT' are missing" "$LINENO" 5
fi
# Stop the version part process from setting default values.
- # We still allow them to explicitely override though.
+ # We still allow them to explicitly override though.
NO_DEFAULT_VERSION_PARTS=true
else
as_fn_error $? "--with-version-string fails to parse as a valid version string: $with_version_string" "$LINENO" 5
@@ -24769,7 +24758,7 @@
# we detected something (if so, the path to the jdk is in BOOT_JDK). But we
# must check if this is indeed valid; otherwise we'll continue looking.
- # Test: Is bootjdk explicitely set by command line arguments?
+ # Test: Is bootjdk explicitly set by command line arguments?
if test "x$BOOT_JDK_FOUND" = xno; then
# Now execute the test
@@ -29887,8 +29876,8 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a valid Boot JDK. $HELP_MSG" >&5
$as_echo "$as_me: Could not find a valid Boot JDK. $HELP_MSG" >&6;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Cannot continue" "$LINENO" 5
fi
@@ -29910,8 +29899,8 @@
if test ! -x $JAVA; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -29938,8 +29927,8 @@
if test ! -x $JAVA; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30048,8 +30037,8 @@
if test ! -x $JAVAC; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30076,8 +30065,8 @@
if test ! -x $JAVAC; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30186,8 +30175,8 @@
if test ! -x $JAVAH; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30214,8 +30203,8 @@
if test ! -x $JAVAH; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30324,8 +30313,8 @@
if test ! -x $JAR; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30352,8 +30341,8 @@
if test ! -x $JAR; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30462,8 +30451,8 @@
if test ! -x $JARSIGNER; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -30490,8 +30479,8 @@
if test ! -x $JARSIGNER; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5
-$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&5
+$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk" >&6;}
as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
@@ -31198,6 +31187,12 @@
if test -d "$IMPORT_MODULES_TOPDIR/modules_src"; then
IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src"
fi
+ # Workaround for using different imported module-info.java in Jake due to a
+ # change in format. Remove once new format is standard in JDK 9 and javafx
+ # delivers just that.
+ if test -d "$IMPORT_MODULES_TOPDIR/modules_src_jake"; then
+ IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src_jake $IMPORT_MODULES_SRC"
+ fi
if test -d "$IMPORT_MODULES_TOPDIR/make"; then
IMPORT_MODULES_MAKE="$IMPORT_MODULES_TOPDIR/make"
fi
@@ -33578,9 +33573,11 @@
if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
# cc -V output typically looks like
# cc: Sun C 5.12 Linux_i386 2011/11/16
+ # or
+ # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31
COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
# Check that this is likely to be the Solaris Studio cc.
- $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null
if test $? -ne 0; then
ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
{ $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
@@ -34875,9 +34872,11 @@
if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
# cc -V output typically looks like
# cc: Sun C 5.12 Linux_i386 2011/11/16
+ # or
+ # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31
COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
# Check that this is likely to be the Solaris Studio cc.
- $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null
if test $? -ne 0; then
ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
{ $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
@@ -35261,9 +35260,9 @@
fi
# We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
- if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
-$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){4} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
if [[ "[$]CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
@@ -35271,7 +35270,7 @@
$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
- COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$CC_VERSION_NUMBER"`
+ COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$CC_VERSION_NUMBER"`
if test "x$TOOLCHAIN_MINIMUM_VERSION" != x; then
@@ -35329,8 +35328,8 @@
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=$TOOLCHAIN_MINIMUM_VERSION
- if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then
- as_fn_error $? "Internal error: Cannot compare to $TOOLCHAIN_MINIMUM_VERSION, only three parts (X.Y.Z) is supported" "$LINENO" 5
+ if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then
+ as_fn_error $? "Internal error: Cannot compare to $TOOLCHAIN_MINIMUM_VERSION, only four parts (W.X.Y.Z) is supported" "$LINENO" 5
fi
if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then
@@ -35338,7 +35337,7 @@
fi
# Version comparison method inspired by http://stackoverflow.com/a/24067243
- COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"`
if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
@@ -46956,9 +46955,11 @@
if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
# cc -V output typically looks like
# cc: Sun C 5.12 Linux_i386 2011/11/16
+ # or
+ # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31
COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
# Check that this is likely to be the Solaris Studio cc.
- $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null
if test $? -ne 0; then
ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
{ $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
@@ -47076,9 +47077,11 @@
if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
# cc -V output typically looks like
# cc: Sun C 5.12 Linux_i386 2011/11/16
+ # or
+ # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31
COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
# Check that this is likely to be the Solaris Studio cc.
- $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null
if test $? -ne 0; then
ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
{ $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
@@ -47198,9 +47201,9 @@
fi
# We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
- if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&5
-$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ (.*\.){4} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
@@ -47208,7 +47211,7 @@
$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
- OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$BUILD_CC_VERSION_NUMBER"`
+ OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$BUILD_CC_VERSION_NUMBER"`
else
# If we are not cross compiling, use the normal target compilers for
@@ -47234,9 +47237,9 @@
fi
# We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
- if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
-$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){4} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has more than four parts (W.X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
if [[ "[$]CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
@@ -47244,80 +47247,18 @@
$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
- OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$CC_VERSION_NUMBER"`
-
- fi
-
-
-
-
-
-
-
-
-
-
-
-
- if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- # For hotspot, we need these in Windows mixed path,
- # so rewrite them all. Need added .exe suffix.
- HOTSPOT_CXX="$CXX.exe"
- HOTSPOT_LD="$LD.exe"
- HOTSPOT_MT="$MT.exe"
- HOTSPOT_RC="$RC.exe"
-
- unix_path="$HOTSPOT_CXX"
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- windows_path=`$CYGPATH -m "$unix_path"`
- HOTSPOT_CXX="$windows_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- windows_path=`cmd //c echo $unix_path`
- HOTSPOT_CXX="$windows_path"
- fi
-
-
- unix_path="$HOTSPOT_LD"
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- windows_path=`$CYGPATH -m "$unix_path"`
- HOTSPOT_LD="$windows_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- windows_path=`cmd //c echo $unix_path`
- HOTSPOT_LD="$windows_path"
- fi
-
-
- unix_path="$HOTSPOT_MT"
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- windows_path=`$CYGPATH -m "$unix_path"`
- HOTSPOT_MT="$windows_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- windows_path=`cmd //c echo $unix_path`
- HOTSPOT_MT="$windows_path"
- fi
-
-
- unix_path="$HOTSPOT_RC"
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- windows_path=`$CYGPATH -m "$unix_path"`
- HOTSPOT_RC="$windows_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- windows_path=`cmd //c echo $unix_path`
- HOTSPOT_RC="$windows_path"
- fi
-
-
-
- else
- HOTSPOT_CXX="$CXX"
- HOTSPOT_LD="$LD"
- fi
-
-
-
- if test "x$TOOLCHAIN_TYPE" = xclang; then
- USE_CLANG=true
- fi
+ OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$CC_VERSION_NUMBER"`
+
+ fi
+
+
+
+
+
+
+
+
+
@@ -49914,8 +49855,8 @@
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=6
- if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then
- as_fn_error $? "Internal error: Cannot compare to 6, only three parts (X.Y.Z) is supported" "$LINENO" 5
+ if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then
+ as_fn_error $? "Internal error: Cannot compare to 6, only four parts (W.X.Y.Z) is supported" "$LINENO" 5
fi
if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then
@@ -49923,7 +49864,7 @@
fi
# Version comparison method inspired by http://stackoverflow.com/a/24067243
- COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"`
if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
@@ -50214,8 +50155,8 @@
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=4.8
- if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then
- as_fn_error $? "Internal error: Cannot compare to 4.8, only three parts (X.Y.Z) is supported" "$LINENO" 5
+ if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then
+ as_fn_error $? "Internal error: Cannot compare to 4.8, only four parts (W.X.Y.Z) is supported" "$LINENO" 5
fi
if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then
@@ -50223,7 +50164,7 @@
fi
# Version comparison method inspired by http://stackoverflow.com/a/24067243
- COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"`
if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
@@ -50737,8 +50678,8 @@
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=6
- if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then
- as_fn_error $? "Internal error: Cannot compare to 6, only three parts (X.Y.Z) is supported" "$LINENO" 5
+ if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then
+ as_fn_error $? "Internal error: Cannot compare to 6, only four parts (W.X.Y.Z) is supported" "$LINENO" 5
fi
if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then
@@ -50746,7 +50687,7 @@
fi
# Version comparison method inspired by http://stackoverflow.com/a/24067243
- COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"`
if test $OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
@@ -51037,8 +50978,8 @@
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=4.8
- if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then
- as_fn_error $? "Internal error: Cannot compare to 4.8, only three parts (X.Y.Z) is supported" "$LINENO" 5
+ if [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ; then
+ as_fn_error $? "Internal error: Cannot compare to 4.8, only four parts (W.X.Y.Z) is supported" "$LINENO" 5
fi
if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then
@@ -51046,7 +50987,7 @@
fi
# Version comparison method inspired by http://stackoverflow.com/a/24067243
- COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", $1, $2, $3, $4) }' <<< "$REFERENCE_VERSION"`
if test $OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
@@ -51917,8 +51858,8 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if native warnings are errors" >&5
$as_echo_n "checking if native warnings are errors... " >&6; }
if test "x$enable_warnings_as_errors" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitely set)" >&5
-$as_echo "yes (explicitely set)" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitly set)" >&5
+$as_echo "yes (explicitly set)" >&6; }
WARNINGS_AS_ERRORS=true
elif test "x$enable_warnings_as_errors" = "xno"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -52583,28 +52524,14 @@
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=true
ZIP_EXTERNAL_DEBUG_SYMBOLS=true
-
- # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
- DEBUG_BINARIES=false
- STRIP_POLICY=min_strip
-
elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
COMPILE_WITH_DEBUG_SYMBOLS=false
COPY_DEBUG_SYMBOLS=false
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
-
- DEBUG_BINARIES=false
- STRIP_POLICY=no_strip
elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=false
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
-
- # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false
- DEBUG_BINARIES=true
- STRIP_POLICY=no_strip
- STRIP=""
-
elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
@@ -52618,10 +52545,6 @@
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=true
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
-
- # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
- DEBUG_BINARIES=false
- STRIP_POLICY=min_strip
else
as_fn_error $? "Allowed native debug symbols are: none, internal, external, zipped" "$LINENO" 5
fi
@@ -52670,10 +52593,6 @@
- # Legacy values
-
-
-
# Check whether --enable-native-coverage was given.
if test "${enable_native_coverage+set}" = set; then :
@@ -53195,7 +53114,7 @@
if test "x$with_msvcr_dll" != x; then
- # If given explicitely by user, do not probe. If not present, fail directly.
+ # If given explicitly by user, do not probe. If not present, fail directly.
DLL_NAME="$MSVCR_NAME"
POSSIBLE_MSVC_DLL="$with_msvcr_dll"
@@ -54544,7 +54463,7 @@
if test "x$MSVCP_NAME" != "x"; then
if test "x$with_msvcp_dll" != x; then
- # If given explicitely by user, do not probe. If not present, fail directly.
+ # If given explicitly by user, do not probe. If not present, fail directly.
DLL_NAME="$MSVCP_NAME"
POSSIBLE_MSVC_DLL="$with_msvcp_dll"
@@ -55903,7 +55822,7 @@
if test "x${with_x}" != x && test "x${with_x}" != xyes; then
# The user has specified a X11 base directory. Use it for includes and
- # libraries, unless explicitely overridden.
+ # libraries, unless explicitly overridden.
if test "x$x_includes" = xNONE; then
x_includes="${with_x}/include"
fi
@@ -65525,6 +65444,13 @@
if test "x$CCACHE" != x; then
if test "x$CCACHE" != x; then
+ if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then
+ HAS_BAD_CCACHE=`$ECHO $CCACHE_VERSION | \
+ $GREP -e '^1\.' -e '^2\.' -e '^3\.0\.' -e '^3\.1\.'`
+ if test "x$HAS_BAD_CCACHE" != "x"; then
+ as_fn_error $? "On macosx, ccache 3.2 or later is required, found $CCACHE_VERSION" "$LINENO" 5
+ fi
+ fi
if test "x$USE_PRECOMPILED_HEADER" = "x1"; then
HAS_BAD_CCACHE=`$ECHO $CCACHE_VERSION | \
$GREP -e '^1.*' -e '^2.*' -e '^3\.0.*' -e '^3\.1\.[0123]$'`
--- a/common/autoconf/jdk-options.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/jdk-options.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -163,9 +163,9 @@
AC_SUBST(CACERTS_FILE)
# Enable or disable unlimited crypto
- AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--enable-unlimited-crypto],
- [Enable unlimited crypto policy @<:@disabled@:>@])],,
- [enable_unlimited_crypto=no])
+ AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--disable-unlimited-crypto],
+ [Disable unlimited crypto policy @<:@enabled@:>@])],,
+ [enable_unlimited_crypto=yes])
if test "x$enable_unlimited_crypto" = "xyes"; then
UNLIMITED_CRYPTO=true
else
@@ -265,28 +265,14 @@
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=true
ZIP_EXTERNAL_DEBUG_SYMBOLS=true
-
- # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
- DEBUG_BINARIES=false
- STRIP_POLICY=min_strip
-
elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
COMPILE_WITH_DEBUG_SYMBOLS=false
COPY_DEBUG_SYMBOLS=false
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
-
- DEBUG_BINARIES=false
- STRIP_POLICY=no_strip
elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=false
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
-
- # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false
- DEBUG_BINARIES=true
- STRIP_POLICY=no_strip
- STRIP=""
-
elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
@@ -300,10 +286,6 @@
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=true
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
-
- # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
- DEBUG_BINARIES=false
- STRIP_POLICY=min_strip
else
AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped])
fi
@@ -321,10 +303,6 @@
AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS)
AC_SUBST(COPY_DEBUG_SYMBOLS)
AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS)
-
- # Legacy values
- AC_SUBST(DEBUG_BINARIES)
- AC_SUBST(STRIP_POLICY)
])
################################################################################
--- a/common/autoconf/jdk-version.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/jdk-version.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -110,7 +110,7 @@
AC_MSG_ERROR([Version string contains + but both 'BUILD' and 'OPT' are missing])
fi
# Stop the version part process from setting default values.
- # We still allow them to explicitely override though.
+ # We still allow them to explicitly override though.
NO_DEFAULT_VERSION_PARTS=true
else
AC_MSG_ERROR([--with-version-string fails to parse as a valid version string: $with_version_string])
--- a/common/autoconf/lib-x11.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/lib-x11.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -42,7 +42,7 @@
if test "x${with_x}" != x && test "x${with_x}" != xyes; then
# The user has specified a X11 base directory. Use it for includes and
- # libraries, unless explicitely overridden.
+ # libraries, unless explicitly overridden.
if test "x$x_includes" = xNONE; then
x_includes="${with_x}/include"
fi
--- a/common/autoconf/platform.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/platform.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -162,7 +162,7 @@
# Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables.
PLATFORM_EXTRACT_VARS_FROM_OS($build_os)
PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu)
- # ..and setup our own variables. (Do this explicitely to facilitate searching)
+ # ..and setup our own variables. (Do this explicitly to facilitate searching)
OPENJDK_BUILD_OS="$VAR_OS"
if test "x$VAR_OS_TYPE" != x; then
OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE"
@@ -192,7 +192,7 @@
# Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables.
PLATFORM_EXTRACT_VARS_FROM_OS($host_os)
PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu)
- # ... and setup our own variables. (Do this explicitely to facilitate searching)
+ # ... and setup our own variables. (Do this explicitly to facilitate searching)
OPENJDK_TARGET_OS="$VAR_OS"
if test "x$VAR_OS_TYPE" != x; then
OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE"
--- a/common/autoconf/source-dirs.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/source-dirs.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -126,6 +126,12 @@
if test -d "$IMPORT_MODULES_TOPDIR/modules_src"; then
IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src"
fi
+ # Workaround for using different imported module-info.java in Jake due to a
+ # change in format. Remove once new format is standard in JDK 9 and javafx
+ # delivers just that.
+ if test -d "$IMPORT_MODULES_TOPDIR/modules_src_jake"; then
+ IMPORT_MODULES_SRC="$IMPORT_MODULES_TOPDIR/modules_src_jake $IMPORT_MODULES_SRC"
+ fi
if test -d "$IMPORT_MODULES_TOPDIR/make"; then
IMPORT_MODULES_MAKE="$IMPORT_MODULES_TOPDIR/make"
fi
--- a/common/autoconf/toolchain.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/toolchain.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -53,7 +53,7 @@
# Minimum supported versions, empty means unspecified
TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
TOOLCHAIN_MINIMUM_VERSION_gcc="4.3"
-TOOLCHAIN_MINIMUM_VERSION_microsoft=""
+TOOLCHAIN_MINIMUM_VERSION_microsoft="16.00.30319.01" # VS2010
TOOLCHAIN_MINIMUM_VERSION_solstudio="5.13"
TOOLCHAIN_MINIMUM_VERSION_xlc=""
@@ -69,15 +69,15 @@
fi
# We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
- if [ [[ "[$]$1CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then
- AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.])
+ if [ [[ "[$]$1CC_VERSION_NUMBER" =~ (.*\.){4} ]] ]; then
+ AC_MSG_WARN([C compiler version number has more than four parts (W.X.Y.Z): [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.])
fi
if [ [[ "[$]$1CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then
AC_MSG_WARN([C compiler version number has a part larger than 99999: [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.])
fi
- $2COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "[$]$1CC_VERSION_NUMBER"`
+ $2COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", [$]1, [$]2, [$]3, [$]4) }' <<< "[$]$1CC_VERSION_NUMBER"`
])
# Check if the configured compiler (C and C++) is of a specific version or
@@ -94,8 +94,8 @@
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=ARG_VERSION
- if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then
- AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only three parts (X.Y.Z) is supported])
+ if [ [[ "$REFERENCE_VERSION" =~ (.*\.){4} ]] ]; then
+ AC_MSG_ERROR([Internal error: Cannot compare to ARG_VERSION, only four parts (W.X.Y.Z) is supported])
fi
if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then
@@ -103,7 +103,7 @@
fi
# Version comparison method inspired by http://stackoverflow.com/a/24067243
- COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"`
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", [$]1, [$]2, [$]3, [$]4) }' <<< "$REFERENCE_VERSION"`
if test [$]ARG_PREFIX[COMPARABLE_ACTUAL_VERSION] -ge $COMPARABLE_REFERENCE_VERSION ; then
:
@@ -333,9 +333,11 @@
if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
# cc -V output typically looks like
# cc: Sun C 5.12 Linux_i386 2011/11/16
+ # or
+ # cc: Studio 12.5 Sun C 5.14 SunOS_sparc 2016/05/31
COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
# Check that this is likely to be the Solaris Studio cc.
- $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.* Sun $COMPILER_NAME" > /dev/null
if test $? -ne 0; then
ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler.])
@@ -827,7 +829,7 @@
BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS"
BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS"
BUILD_AR="$AR"
-
+
TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([], [OPENJDK_BUILD_])
fi
@@ -842,36 +844,6 @@
AC_SUBST(BUILD_AR)
])
-# Setup legacy variables that are still needed as alternative ways to refer to
-# parts of the toolchain.
-AC_DEFUN_ONCE([TOOLCHAIN_SETUP_LEGACY],
-[
- if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- # For hotspot, we need these in Windows mixed path,
- # so rewrite them all. Need added .exe suffix.
- HOTSPOT_CXX="$CXX.exe"
- HOTSPOT_LD="$LD.exe"
- HOTSPOT_MT="$MT.exe"
- HOTSPOT_RC="$RC.exe"
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_CXX)
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_LD)
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_MT)
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_RC)
- AC_SUBST(HOTSPOT_MT)
- AC_SUBST(HOTSPOT_RC)
- else
- HOTSPOT_CXX="$CXX"
- HOTSPOT_LD="$LD"
- fi
- AC_SUBST(HOTSPOT_CXX)
- AC_SUBST(HOTSPOT_LD)
-
- if test "x$TOOLCHAIN_TYPE" = xclang; then
- USE_CLANG=true
- fi
- AC_SUBST(USE_CLANG)
-])
-
# Do some additional checks on the detected tools.
AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
[
--- a/common/autoconf/toolchain_windows.m4 Tue Nov 29 21:58:29 2016 -0800
+++ b/common/autoconf/toolchain_windows.m4 Wed Jul 05 22:31:37 2017 +0200
@@ -566,7 +566,7 @@
[path to microsoft C runtime dll (msvcr*.dll) (Windows only) @<:@probed@:>@])])
if test "x$with_msvcr_dll" != x; then
- # If given explicitely by user, do not probe. If not present, fail directly.
+ # If given explicitly by user, do not probe. If not present, fail directly.
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$with_msvcr_dll], [--with-msvcr-dll])
if test "x$MSVC_DLL" = x; then
AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll])
@@ -589,7 +589,7 @@
if test "x$MSVCP_NAME" != "x"; then
if test "x$with_msvcp_dll" != x; then
- # If given explicitely by user, do not probe. If not present, fail directly.
+ # If given explicitly by user, do not probe. If not present, fail directly.
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$with_msvcp_dll], [--with-msvcp-dll])
if test "x$MSVC_DLL" = x; then
AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll])
--- a/common/bin/compare.sh Tue Nov 29 21:58:29 2016 -0800
+++ b/common/bin/compare.sh Wed Jul 05 22:31:37 2017 +0200
@@ -1295,8 +1295,8 @@
OTHER_JDK="$OTHER/images/jdk"
OTHER_JRE="$OTHER/images/jre"
echo "Selecting jdk images for compare"
- elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk)" ] \
- && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk)" ]
+ elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk 2> /dev/null)" ] \
+ && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk 2> /dev/null)" ]
then
echo "Selecting licensee images for compare"
# Simply override the THIS and OTHER dir with the build dir from
--- a/common/conf/jib-profiles.js Tue Nov 29 21:58:29 2016 -0800
+++ b/common/conf/jib-profiles.js Wed Jul 05 22:31:37 2017 +0200
@@ -427,7 +427,7 @@
jtreg: {
server: "javare",
revision: "4.2",
- build_number: "b03",
+ build_number: "b04",
checksum_file: "MD5_VALUES",
file: "jtreg_bin-4.2.zip",
environment_name: "JT_HOME",
--- a/hotspot/.hgignore Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/.hgignore Wed Jul 05 22:31:37 2017 +0200
@@ -8,7 +8,6 @@
^src/share/tools/IdealGraphVisualizer/dist/
^src/share/tools/IdealGraphVisualizer/nbplatform/
.igv.log
-^.hgtip
.DS_Store
^\.mx.jvmci/env
^\.mx.jvmci/.*\.pyc
--- a/hotspot/.hgtags Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/.hgtags Wed Jul 05 22:31:37 2017 +0200
@@ -549,3 +549,4 @@
6187b582d02aee38341dc8ce4011906e9b364e9f jdk-9+144
61e7ea56312351657e69198c503a6f7bf865af83 jdk-9+145
a82cb5350cad96a0b4de496afebe3ded89f27efa jdk-9+146
+132a72c782071cc11ab25cc7c9ee167c3632fea4 jdk-9+147
--- a/hotspot/make/symbols/symbols-unix Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/make/symbols/symbols-unix Wed Jul 05 22:31:37 2017 +0200
@@ -190,8 +190,6 @@
JVM_AddModuleExportsToAllUnnamed
JVM_AddModulePackage
JVM_AddReadsModule
-JVM_CanReadModule
JVM_DefineModule
-JVM_IsExportedToModule
JVM_SetBootLoaderUnnamedModule
JVM_GetModuleByPackageName
--- a/hotspot/make/test/JtregNative.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/make/test/JtregNative.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -55,6 +55,9 @@
$(HOTSPOT_TOPDIR)/test/compiler/calls \
$(HOTSPOT_TOPDIR)/test/compiler/native \
$(HOTSPOT_TOPDIR)/test/serviceability/jvmti/GetNamedModule \
+ $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/AddModuleReads \
+ $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/AddModuleExportsAndOpens \
+ $(HOTSPOT_TOPDIR)/test/serviceability/jvmti/AddModuleUsesAndProvides \
$(HOTSPOT_TOPDIR)/test/testlibrary/jvmti \
$(HOTSPOT_TOPDIR)/test/compiler/jvmci/jdk.vm.ci.code.test \
$(HOTSPOT_TOPDIR)/test/serviceability/jvmti/GetModulesInfo \
@@ -81,6 +84,9 @@
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_liboverflow := -lc
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libSimpleClassFileLoadHook := -lc
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libGetNamedModuleTest := -lc
+ BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleReadsTest := -lc
+ BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleExportsAndOpensTest := -lc
+ BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleUsesAndProvidesTest := -lc
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAClassFileLoadHook := -lc
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAClassLoadPrepare := -lc
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAThreadStart := -lc
--- a/hotspot/src/jdk.vm.ci/share/classes/module-info.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/jdk.vm.ci/share/classes/module-info.java Wed Jul 05 22:31:37 2017 +0200
@@ -30,9 +30,7 @@
uses jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory;
provides jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory with
- jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory;
- provides jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory with
- jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory;
- provides jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory with
+ jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory,
+ jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory,
jdk.vm.ci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory;
}
--- a/hotspot/src/share/vm/classfile/moduleEntry.hpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/classfile/moduleEntry.hpp Wed Jul 05 22:31:37 2017 +0200
@@ -36,6 +36,8 @@
#include "utilities/ostream.hpp"
#define UNNAMED_MODULE "Unnamed Module"
+#define JAVAPKG "java/"
+#define JAVAPKG_LEN 5
class ModuleClosure;
--- a/hotspot/src/share/vm/classfile/modules.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/classfile/modules.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -34,6 +34,7 @@
#include "classfile/packageEntry.hpp"
#include "classfile/stringTable.hpp"
#include "classfile/symbolTable.hpp"
+#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
#include "logging/log.hpp"
#include "memory/resourceArea.hpp"
@@ -44,6 +45,7 @@
#include "runtime/handles.inline.hpp"
#include "runtime/javaCalls.hpp"
#include "runtime/reflection.hpp"
+#include "utilities/stringUtils.hpp"
#include "utilities/utf8.hpp"
static bool verify_module_name(char *module_name) {
@@ -290,6 +292,14 @@
const char* module_version = get_module_version(version);
+ oop loader = java_lang_reflect_Module::loader(module_handle());
+ // Make sure loader is not the jdk.internal.reflect.DelegatingClassLoader.
+ if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) {
+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
+ "Class loader is an invalid delegating class loader");
+ }
+ Handle h_loader = Handle(THREAD, loader);
+
objArrayOop packages_oop = objArrayOop(JNIHandles::resolve(packages));
objArrayHandle packages_h(THREAD, packages_oop);
int num_packages = (packages_h == NULL ? 0 : packages_h->length());
@@ -310,6 +320,21 @@
err_msg("Invalid package name: %s for module: %s",
package_name, module_name));
}
+
+ // Only modules defined to either the boot or platform class loader, can define a "java/" package.
+ if (!h_loader.is_null() &&
+ !SystemDictionary::is_platform_class_loader(h_loader) &&
+ strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0) {
+ const char* class_loader_name = SystemDictionary::loader_name(h_loader());
+ StringUtils::replace_no_expand(package_name, "/", ".");
+ const char* msg_text1 = "Class loader (instance of): ";
+ const char* msg_text2 = " tried to define prohibited package name: ";
+ size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(package_name) + 1;
+ char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
+ jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, package_name);
+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
+ }
+
Symbol* pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
// append_if_missing() returns FALSE if entry already exists.
if (!pkg_list->append_if_missing(pkg_symbol)) {
@@ -319,20 +344,6 @@
}
}
- oop loader = java_lang_reflect_Module::loader(module_handle());
- // Make sure loader is not the sun.reflect.DelegatingClassLoader.
- if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) {
- THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
- "Class loader is an invalid delegating class loader");
- }
- Handle h_loader = Handle(THREAD, loader);
-
- // Check that loader is a subclass of java.lang.ClassLoader.
- if (loader != NULL && !java_lang_ClassLoader::is_subclass(h_loader->klass())) {
- THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
- "Class loader is not a subclass of java.lang.ClassLoader");
- }
-
ModuleEntryTable* module_table = get_module_entry_table(h_loader, CHECK);
assert(module_table != NULL, "module entry table shouldn't be null");
@@ -595,122 +606,6 @@
}
}
-jboolean Modules::can_read_module(jobject asking_module, jobject target_module, TRAPS) {
- if (asking_module == NULL) {
- THROW_MSG_(vmSymbols::java_lang_NullPointerException(),
- "asking_module is null", JNI_FALSE);
- }
-
- ModuleEntry* asking_module_entry = get_module_entry(asking_module, CHECK_false);
- if (asking_module_entry == NULL) {
- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
- "asking_module is invalid", JNI_FALSE);
- }
-
- // Calling can_read_all_unnamed() with NULL tests if a module is loose.
- if (target_module == NULL) {
- return asking_module_entry->can_read_all_unnamed();
- }
-
- ModuleEntry* target_module_entry = get_module_entry(target_module, CHECK_false);
- if (target_module_entry == NULL) {
- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
- "target_module is invalid", JNI_FALSE);
- }
-
- ResourceMark rm(THREAD);
- log_debug(modules)("can_read_module(): module %s trying to read module %s, allowed = %s",
- asking_module_entry->is_named() ?
- asking_module_entry->name()->as_C_string() : UNNAMED_MODULE,
- target_module_entry->is_named() ?
- target_module_entry->name()->as_C_string() : UNNAMED_MODULE,
- BOOL_TO_STR(asking_module_entry == target_module_entry ||
- (asking_module_entry->can_read_all_unnamed() &&
- !target_module_entry->is_named()) ||
- asking_module_entry->can_read(target_module_entry)));
-
- // Return true if:
- // 1. the modules are the same, or
- // 2. the asking_module is unnamed (because unnamed modules read everybody), or
- // 3. the asking_module is loose and the target module is unnamed, or
- // 4. if can_read() returns true.
- if (asking_module_entry == target_module_entry ||
- (asking_module_entry->can_read_all_unnamed() && !target_module_entry->is_named())) {
- return true;
- }
- return asking_module_entry->can_read(target_module_entry);
-}
-
-jboolean Modules::is_exported_to_module(jobject from_module, jstring package,
- jobject to_module, TRAPS) {
- if (package == NULL) {
- THROW_MSG_(vmSymbols::java_lang_NullPointerException(),
- "package is null", JNI_FALSE);
- }
- if (from_module == NULL) {
- THROW_MSG_(vmSymbols::java_lang_NullPointerException(),
- "from_module is null", JNI_FALSE);
- }
- ModuleEntry* from_module_entry = get_module_entry(from_module, CHECK_false);
- if (from_module_entry == NULL) {
- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
- "from_module is invalid", JNI_FALSE);
- }
- ModuleEntry* to_module_entry;
- if (to_module == NULL) {
- THROW_MSG_(vmSymbols::java_lang_NullPointerException(),
- "to_module is null", JNI_FALSE);
- }
- to_module_entry = get_module_entry(to_module, CHECK_false);
- if (to_module_entry == NULL) {
- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
- "to_module is invalid", JNI_FALSE);
- }
-
- PackageEntry *package_entry = get_package_entry(from_module_entry, package,
- CHECK_false);
- ResourceMark rm(THREAD);
- if (package_entry == NULL) {
- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
- err_msg("Package not found in from_module: %s",
- from_module_entry->is_named() ?
- from_module_entry->name()->as_C_string() : UNNAMED_MODULE),
- JNI_FALSE);
- }
- if (package_entry->module() != from_module_entry) {
- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
- err_msg("Package: %s found in module %s, not in from_module: %s",
- package_entry->name()->as_C_string(),
- package_entry->module()->is_named() ?
- package_entry->module()->name()->as_C_string() : UNNAMED_MODULE,
- from_module_entry->is_named() ?
- from_module_entry->name()->as_C_string() : UNNAMED_MODULE),
- JNI_FALSE);
- }
-
- log_debug(modules)("is_exported_to_module: package %s from module %s checking"
- " if exported to module %s, exported? = %s",
- package_entry->name()->as_C_string(),
- from_module_entry->is_named() ?
- from_module_entry->name()->as_C_string() : UNNAMED_MODULE,
- to_module_entry->is_named() ?
- to_module_entry->name()->as_C_string() : UNNAMED_MODULE,
- BOOL_TO_STR(!from_module_entry->is_named() ||
- package_entry->is_unqual_exported() ||
- from_module_entry == to_module_entry ||
- package_entry->is_qexported_to(to_module_entry)));
-
- // Return true if:
- // 1. from_module is unnamed because unnamed modules export all their packages (by default), or
- // 2. if the package is unqualifiedly exported, or
- // 3. if the modules are the same, or
- // 4. if the package is exported to to_module
- return (!from_module_entry->is_named() ||
- package_entry->is_unqual_exported() ||
- from_module_entry == to_module_entry ||
- package_entry->is_qexported_to(to_module_entry));
-}
-
// This method is called by JFR and JNI.
jobject Modules::get_module(jclass clazz, TRAPS) {
assert(ModuleEntryTable::javabase_defined(), "Attempt to call get_module before java.base is defined");
@@ -860,11 +755,27 @@
err_msg("Invalid package name: %s", package_name));
}
+ ClassLoaderData *loader_data = module_entry->loader_data();
+
+ // Only modules defined to either the boot or platform class loader, can define a "java/" package.
+ if (!loader_data->is_the_null_class_loader_data() &&
+ !loader_data->is_platform_class_loader_data() &&
+ strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0) {
+ const char* class_loader_name = SystemDictionary::loader_name(loader_data);
+ StringUtils::replace_no_expand(package_name, "/", ".");
+ const char* msg_text1 = "Class loader (instance of): ";
+ const char* msg_text2 = " tried to define prohibited package name: ";
+ size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(package_name) + 1;
+ char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
+ jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, package_name);
+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
+ }
+
log_debug(modules)("add_module_package(): Adding package %s to module %s",
package_name, module_entry->name()->as_C_string());
TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
- PackageEntryTable* package_table = module_entry->loader_data()->packages();
+ PackageEntryTable* package_table = loader_data->packages();
assert(package_table != NULL, "Missing package_table");
bool pkg_exists = false;
--- a/hotspot/src/share/vm/classfile/modules.hpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/classfile/modules.hpp Wed Jul 05 22:31:37 2017 +0200
@@ -93,24 +93,6 @@
// module does not exist.
static void add_reads_module(jobject from_module, jobject to_module, TRAPS);
- // can_read_module returns TRUE if module asking_module can read module target_module,
- // or if they are the same module, or if the asking_module is loose and target_module
- // is null.
- //
- // Throws IllegalArgumentException if:
- // * either asking_module or target_module is not a java.lang.reflect.Module
- static jboolean can_read_module(jobject asking_module, jobject target_module, TRAPS);
-
- // If package is valid then this returns TRUE if module from_module exports
- // package to module to_module, if from_module and to_module are the same
- // module, or if package is exported without qualification.
- //
- // IllegalArgumentException is throw if:
- // * Either to_module or from_module does not exist
- // * package is syntactically incorrect
- // * package is not in from_module
- static jboolean is_exported_to_module(jobject from_module, jstring package, jobject to_module, TRAPS);
-
// Return the java.lang.reflect.Module object for this class object.
static jobject get_module(jclass clazz, TRAPS);
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Wed Jul 05 22:31:37 2017 +0200
@@ -451,8 +451,6 @@
template(loader_name, "loader") \
template(module_name, "module") \
template(getModule_name, "getModule") \
- template(addReads_name, "addReads") \
- template(addReads_signature, "(Ljava/lang/reflect/Module;Ljava/lang/reflect/Module;)V") \
template(input_stream_void_signature, "(Ljava/io/InputStream;)V") \
template(definePackage_name, "definePackage") \
template(definePackage_signature, "(Ljava/lang/String;Ljava/lang/reflect/Module;)Ljava/lang/Package;") \
@@ -645,6 +643,15 @@
/* JVMTI/java.lang.instrument support and VM Attach mechanism */ \
template(jdk_internal_module_Modules, "jdk/internal/module/Modules") \
template(jdk_internal_vm_VMSupport, "jdk/internal/vm/VMSupport") \
+ template(addReads_name, "addReads") \
+ template(addReads_signature, "(Ljava/lang/reflect/Module;Ljava/lang/reflect/Module;)V") \
+ template(addExports_name, "addExports") \
+ template(addOpens_name, "addOpens") \
+ template(addExports_signature, "(Ljava/lang/reflect/Module;Ljava/lang/String;Ljava/lang/reflect/Module;)V") \
+ template(addUses_name, "addUses") \
+ template(addUses_signature, "(Ljava/lang/reflect/Module;Ljava/lang/Class;)V") \
+ template(addProvides_name, "addProvides") \
+ template(addProvides_signature, "(Ljava/lang/reflect/Module;Ljava/lang/Class;Ljava/lang/Class;)V") \
template(transformedByAgent_name, "transformedByAgent") \
template(transformedByAgent_signature, "(Ljava/lang/reflect/Module;)V") \
template(appendToClassPathForInstrumentation_name, "appendToClassPathForInstrumentation") \
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -26,6 +26,7 @@
#include "classfile/classFileParser.hpp"
#include "classfile/classFileStream.hpp"
#include "classfile/javaClasses.hpp"
+#include "classfile/moduleEntry.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/systemDictionaryShared.hpp"
#include "classfile/verifier.hpp"
@@ -2383,18 +2384,17 @@
// Only boot and platform class loaders can define classes in "java/" packages.
void InstanceKlass::check_prohibited_package(Symbol* class_name,
- Handle class_loader,
- TRAPS) {
- const char* javapkg = "java/";
+ Handle class_loader,
+ TRAPS) {
ResourceMark rm(THREAD);
if (!class_loader.is_null() &&
!SystemDictionary::is_platform_class_loader(class_loader) &&
class_name != NULL &&
- strncmp(class_name->as_C_string(), javapkg, strlen(javapkg)) == 0) {
+ strncmp(class_name->as_C_string(), JAVAPKG, JAVAPKG_LEN) == 0) {
TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK);
assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'");
char* name = pkg_name->as_C_string();
- const char* class_loader_name = InstanceKlass::cast(class_loader()->klass())->name()->as_C_string();
+ const char* class_loader_name = SystemDictionary::loader_name(class_loader());
StringUtils::replace_no_expand(name, "/", ".");
const char* msg_text1 = "Class loader (instance of): ";
const char* msg_text2 = " tried to load prohibited package name: ";
--- a/hotspot/src/share/vm/prims/jni.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jni.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -3475,40 +3475,6 @@
JNI_END
-JNI_ENTRY(void, jni_AddModuleReads(JNIEnv* env, jobject m1, jobject m2))
- JNIWrapper("AddModuleReads");
- if (m1 == NULL || m2 == NULL) {
- THROW(vmSymbols::java_lang_NullPointerException());
- }
- JavaValue result(T_VOID);
- Handle m1_h(THREAD, JNIHandles::resolve(m1));
- if (!java_lang_reflect_Module::is_instance(m1_h())) {
- THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Bad m1 object");
- }
- Handle m2_h(THREAD, JNIHandles::resolve(m2));
- if (!java_lang_reflect_Module::is_instance(m2_h())) {
- THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Bad m2 object");
- }
- JavaCalls::call_static(&result,
- KlassHandle(THREAD, SystemDictionary::module_Modules_klass()),
- vmSymbols::addReads_name(),
- vmSymbols::addReads_signature(),
- m1_h,
- m2_h,
- THREAD);
-JNI_END
-
-
-JNI_ENTRY(jboolean, jni_CanReadModule(JNIEnv* env, jobject m1, jobject m2))
- JNIWrapper("CanReadModule");
- if (m1 == NULL || m2 == NULL) {
- THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
- }
- jboolean res = Modules::can_read_module(m1, m2, CHECK_false);
- return res;
-JNI_END
-
-
// Structure containing all jni functions
struct JNINativeInterface_ jni_NativeInterface = {
NULL,
@@ -3792,9 +3758,7 @@
// Module features
- jni_GetModule,
- jni_AddModuleReads,
- jni_CanReadModule
+ jni_GetModule
};
--- a/hotspot/src/share/vm/prims/jni.h Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jni.h Wed Jul 05 22:31:37 2017 +0200
@@ -770,12 +770,6 @@
jobject (JNICALL *GetModule)
(JNIEnv* env, jclass clazz);
-
- void (JNICALL *AddModuleReads)
- (JNIEnv* env, jobject m1, jobject m2);
-
- jboolean (JNICALL *CanReadModule)
- (JNIEnv* env, jobject m1, jobject m2);
};
/*
@@ -1874,14 +1868,6 @@
return functions->GetModule(this, clazz);
}
- void AddModuleReads(jobject fromModule, jobject sourceModule) {
- functions->AddModuleReads(this, fromModule, sourceModule);
- }
-
- jboolean CanReadModule(jobject askingModule, jobject sourceModule) {
- return functions->CanReadModule(this, askingModule, sourceModule);
- }
-
#endif /* __cplusplus */
};
--- a/hotspot/src/share/vm/prims/jniCheck.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jniCheck.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -2001,37 +2001,6 @@
return result;
JNI_END
-JNI_ENTRY_CHECKED(void,
- checked_jni_AddModuleReads(JNIEnv *env,
- jobject fromModule,
- jobject sourceModule))
- functionEnter(thr);
- IN_VM(
- jniCheck::validate_object(thr, fromModule);
- if (sourceModule != NULL) {
- jniCheck::validate_object(thr, sourceModule);
- }
- )
- UNCHECKED()->AddModuleReads(env,fromModule,sourceModule);
- functionExit(thr);
-JNI_END
-
-JNI_ENTRY_CHECKED(jboolean,
- checked_jni_CanReadModule(JNIEnv *env,
- jobject askingModule,
- jobject sourceModule))
- functionEnter(thr);
- IN_VM(
- jniCheck::validate_object(thr, askingModule);
- if (sourceModule != NULL) {
- jniCheck::validate_object(thr, sourceModule);
- }
- )
- jboolean result = UNCHECKED()->CanReadModule(env,askingModule,sourceModule);
- functionExit(thr);
- return result;
-JNI_END
-
/*
* Structure containing all checked jni functions
*/
@@ -2317,9 +2286,7 @@
// Module Features
- checked_jni_GetModule,
- checked_jni_AddModuleReads,
- checked_jni_CanReadModule
+ checked_jni_GetModule
};
--- a/hotspot/src/share/vm/prims/jvm.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvm.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -1008,8 +1008,8 @@
// Module support //////////////////////////////////////////////////////////////////////////////
-JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jstring version, jstring location,
- jobjectArray packages))
+JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version,
+ jstring location, jobjectArray packages))
JVMWrapper("JVM_DefineModule");
Modules::define_module(module, version, location, packages, CHECK);
JVM_END
@@ -1039,16 +1039,6 @@
Modules::add_reads_module(from_module, source_module, CHECK);
JVM_END
-JVM_ENTRY(jboolean, JVM_CanReadModule(JNIEnv *env, jobject asking_module, jobject source_module))
- JVMWrapper("JVM_CanReadModule");
- return Modules::can_read_module(asking_module, source_module, THREAD);
-JVM_END
-
-JVM_ENTRY(jboolean, JVM_IsExportedToModule(JNIEnv *env, jobject from_module, jstring package, jobject to_module))
- JVMWrapper("JVM_IsExportedToModule");
- return Modules::is_exported_to_module(from_module, package, to_module, THREAD);
-JVM_END
-
JVM_ENTRY (void, JVM_AddModulePackage(JNIEnv *env, jobject module, jstring package))
JVMWrapper("JVM_AddModulePackage");
Modules::add_module_package(module, package, CHECK);
--- a/hotspot/src/share/vm/prims/jvm.h Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvm.h Wed Jul 05 22:31:37 2017 +0200
@@ -413,8 +413,8 @@
*/
JNIEXPORT void JNICALL
-JVM_DefineModule(JNIEnv *env, jobject module, jstring version, jstring location,
- jobjectArray packages);
+JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version,
+ jstring location, jobjectArray packages);
JNIEXPORT void JNICALL
JVM_SetBootLoaderUnnamedModule(JNIEnv *env, jobject module);
@@ -431,12 +431,6 @@
JNIEXPORT void JNICALL
JVM_AddReadsModule(JNIEnv *env, jobject from_module, jobject source_module);
-JNIEXPORT jboolean JNICALL
-JVM_CanReadModule(JNIEnv *env, jobject asking_module, jobject source_module);
-
-JNIEXPORT jboolean JNICALL
-JVM_IsExportedToModule(JNIEnv *env, jobject from_module, jstring package, jobject to_module);
-
JNIEXPORT void JNICALL
JVM_AddModulePackage(JNIEnv* env, jobject module, jstring package);
--- a/hotspot/src/share/vm/prims/jvmti.xml Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvmti.xml Wed Jul 05 22:31:37 2017 +0200
@@ -863,14 +863,12 @@
</intro>
<intro id="bcimodules" label="Bytecode Instrumentation of code in modules">
- Agents that instrument code in named modules may need to arrange for those
- modules to read other modules. If code is instrumented to invoke a method
- in a support class in another module, then the module of the instrumented
- code should read the module of the supporting class. Furthermore, the
- supporting class will only be accessible to the instrumented code if
- it is <code>public</code> and in a package that is exported by its module.
- Agents can use the JNI functions <code>CanReadModule</code> and
- <code>AddModuleReads</code> to test and update a module to read another.
+ Agents can use the functions <functionlink id="AddModuleReads"/>,
+ <functionlink id="AddModuleExports"/>, <functionlink id="AddModuleOpens"/>,
+ <functionlink id="AddModuleUses"/> and <functionlink id="AddModuleProvides"/>
+ to update a module to expand the set of modules that it reads, the set of
+ packages that it exports or opens to other modules, or the services that it
+ uses and provides.
<p/>
As an aid to agents that deploy supporting classes on the search path of
the bootstrap class loader, or the search path of the class loader that
@@ -6561,6 +6559,227 @@
</error>
</errors>
</function>
+
+ <function id="AddModuleReads" num="94" since="9">
+ <synopsis>Add Module Reads</synopsis>
+ <description>
+ Update a module to read another module. This function is a no-op
+ when <paramlink id="module"></paramlink> is an unnamed module.
+ This function facilitates the instrumentation of code
+ in named modules where that instrumentation requires
+ expanding the set of modules that a module reads.
+ </description>
+ <origin>new</origin>
+ <capabilities>
+ </capabilities>
+ <parameters>
+ <param id="module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module to update.
+ </description>
+ </param>
+ <param id="to_module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The additional module to read.
+ </description>
+ </param>
+ </parameters>
+ <errors>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="module"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="to_module"></paramlink> is not a module object.
+ </error>
+ </errors>
+ </function>
+
+ <function id="AddModuleExports" num="95" since="9">
+ <synopsis>Add Module Exports</synopsis>
+ <description>
+ Update a module to export a package to another module.
+ This function is a no-op when <paramlink id="module"></paramlink>
+ is an unnamed module or an open module.
+ This function facilitates the instrumentation of code
+ in named modules where that instrumentation requires
+ expanding the set of packages that a module exports.
+ </description>
+ <origin>new</origin>
+ <capabilities>
+ </capabilities>
+ <parameters>
+ <param id="module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module to update.
+ </description>
+ </param>
+ <param id="pkg_name">
+ <inbuf><char/></inbuf>
+ <description>
+ The exported package name.
+ </description>
+ </param>
+ <param id="to_module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module the package is exported to.
+ If the <code>to_module</code> is not a subclass of
+ <code>java.lang.reflect.Module</code> this function returns
+ <errorlink id="JVMTI_ERROR_INVALID_MODULE"></errorlink>.
+ </description>
+ </param>
+ </parameters>
+ <errors>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="module"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="to_modules"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">
+ If the package <paramlink id="pkg_name"></paramlink>
+ does not belong to the module.
+ </error>
+ </errors>
+ </function>
+
+ <function id="AddModuleOpens" num="96" since="9">
+ <synopsis>Add Module Opens</synopsis>
+ <description>
+ Update a module to open a package to another module.
+ This function is a no-op when <paramlink id="module"></paramlink>
+ is an unnamed module or an open module.
+ This function facilitates the instrumentation of code
+ in modules where that instrumentation requires
+ expanding the set of packages that a module opens to
+ other modules.
+ </description>
+ <origin>new</origin>
+ <capabilities>
+ </capabilities>
+ <parameters>
+ <param id="module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module to update.
+ </description>
+ </param>
+ <param id="pkg_name">
+ <inbuf><char/></inbuf>
+ <description>
+ The package name of the package to open.
+ </description>
+ </param>
+ <param id="to_module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module with the package to open.
+ If the <code>to_module</code> is not a subclass of
+ <code>java.lang.reflect.Module</code> this function returns
+ <errorlink id="JVMTI_ERROR_INVALID_MODULE"></errorlink>.
+ </description>
+ </param>
+ </parameters>
+ <errors>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="module"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="to_modules"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_ILLEGAL_ARGUMENT">
+ If the package <paramlink id="pkg_name"></paramlink>
+ does not belong to the module.
+ </error>
+ </errors>
+ </function>
+
+ <function id="AddModuleUses" num="97" since="9">
+ <synopsis>Add Module Uses</synopsis>
+ <description>
+ Updates a module to add a service to the set of services that
+ a module uses. This function is a no-op when the module
+ is an unnamed module.
+ This function facilitates the instrumentation of code
+ in named modules where that instrumentation requires
+ expanding the set of services that a module is using.
+ </description>
+ <origin>new</origin>
+ <capabilities>
+ </capabilities>
+ <parameters>
+ <param id="module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module to update.
+ </description>
+ </param>
+ <param id="service">
+ <ptrtype><jclass/></ptrtype>
+ <description>
+ The service to use.
+ </description>
+ </param>
+ </parameters>
+ <errors>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="module"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_INVALID_CLASS">
+ If <paramlink id="service"></paramlink> is not a class object.
+ </error>
+ </errors>
+ </function>
+
+ <function id="AddModuleProvides" num="98" since="9">
+ <synopsis>Add Module Provides</synopsis>
+ <description>
+ Updates a module to add a service to the set of services that
+ a module provides. This function is a no-op when the module
+ is an unnamed module.
+ This function facilitates the instrumentation of code
+ in named modules where that instrumentation requires
+ changes to the services that are provided.
+ </description>
+ <origin>new</origin>
+ <capabilities>
+ </capabilities>
+ <parameters>
+ <param id="module">
+ <ptrtype><jobject/></ptrtype>
+ <description>
+ The module to update.
+ </description>
+ </param>
+ <param id="service">
+ <ptrtype><jclass/></ptrtype>
+ <description>
+ The service to provide.
+ </description>
+ </param>
+ <param id="impl_class">
+ <ptrtype><jclass/></ptrtype>
+ <description>
+ The implementation class for the provided service.
+ </description>
+ </param>
+ </parameters>
+ <errors>
+ <error id="JVMTI_ERROR_INVALID_MODULE">
+ If <paramlink id="module"></paramlink> is not a module object.
+ </error>
+ <error id="JVMTI_ERROR_INVALID_CLASS">
+ If <paramlink id="service"></paramlink> is not a class object.
+ </error>
+ <error id="JVMTI_ERROR_INVALID_CLASS">
+ If <paramlink id="impl_class"></paramlink> is not a class object.
+ </error>
+ </errors>
+ </function>
+
</category>
<category id="class" label="Class">
@@ -11371,6 +11590,9 @@
<errorid id="JVMTI_ERROR_INVALID_FIELDID" num="25">
Invalid field.
</errorid>
+ <errorid id="JVMTI_ERROR_INVALID_MODULE" num="26">
+ Invalid module.
+ </errorid>
<errorid id="JVMTI_ERROR_INVALID_METHODID" num="23">
Invalid method.
</errorid>
@@ -14492,17 +14714,17 @@
<change date="19 June 2013" version="1.2.3">
Added support for statically linked agents.
</change>
- <change date="5 July 2016" version="9.0.0">
+ <change date="13 October 2016" version="9.0.0">
Support for modules:
- The majorversion is 9 now
- The ClassFileLoadHook events are not sent during the primordial phase anymore.
- - Add new function GetAllModules
- - Add new capability can_generate_early_vmstart
- Allow CompiledMethodLoad events at start phase
- - Add new capability can_generate_early_class_hook_events
- - Add new function GetNamedModule
- </change>
- <change date="16 August 2016" version="9.0.0">
+ - Add new capabilities:
+ - can_generate_early_vmstart
+ - can_generate_early_class_hook_events
+ - Add new functions:
+ - GetAllModules
+ - AddModuleReads, AddModuleExports, AddModuleOpens, AddModuleUses, AddModuleProvides
Clarified can_redefine_any_classes, can_retransform_any_classes and IsModifiableClass API to
disallow some implementation defined classes.
</change>
--- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -227,6 +227,119 @@
} /* end GetNamedModule */
+// module - pre-checked for NULL
+// to_module - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleReads(jobject module, jobject to_module) {
+ JavaThread* THREAD = JavaThread::current();
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check to_module
+ Handle h_to_module(THREAD, JNIHandles::resolve(to_module));
+ if (!java_lang_reflect_Module::is_instance(h_to_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ return JvmtiExport::add_module_reads(h_module, h_to_module, THREAD);
+} /* end AddModuleReads */
+
+
+// module - pre-checked for NULL
+// pkg_name - pre-checked for NULL
+// to_module - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleExports(jobject module, const char* pkg_name, jobject to_module) {
+ JavaThread* THREAD = JavaThread::current();
+ Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check to_module
+ Handle h_to_module(THREAD, JNIHandles::resolve(to_module));
+ if (!java_lang_reflect_Module::is_instance(h_to_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ return JvmtiExport::add_module_exports(h_module, h_pkg, h_to_module, THREAD);
+} /* end AddModuleExports */
+
+
+// module - pre-checked for NULL
+// pkg_name - pre-checked for NULL
+// to_module - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleOpens(jobject module, const char* pkg_name, jobject to_module) {
+ JavaThread* THREAD = JavaThread::current();
+ Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check to_module
+ Handle h_to_module(THREAD, JNIHandles::resolve(to_module));
+ if (!java_lang_reflect_Module::is_instance(h_to_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ return JvmtiExport::add_module_opens(h_module, h_pkg, h_to_module, THREAD);
+} /* end AddModuleOpens */
+
+
+// module - pre-checked for NULL
+// service - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleUses(jobject module, jclass service) {
+ JavaThread* THREAD = JavaThread::current();
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check service
+ Handle h_service(THREAD, JNIHandles::resolve_external_guard(service));
+ if (!java_lang_Class::is_instance(h_service()) ||
+ java_lang_Class::is_primitive(h_service())) {
+ return JVMTI_ERROR_INVALID_CLASS;
+ }
+ return JvmtiExport::add_module_uses(h_module, h_service, THREAD);
+} /* end AddModuleUses */
+
+
+// module - pre-checked for NULL
+// service - pre-checked for NULL
+// impl_class - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleProvides(jobject module, jclass service, jclass impl_class) {
+ JavaThread* THREAD = JavaThread::current();
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check service
+ Handle h_service(THREAD, JNIHandles::resolve_external_guard(service));
+ if (!java_lang_Class::is_instance(h_service()) ||
+ java_lang_Class::is_primitive(h_service())) {
+ return JVMTI_ERROR_INVALID_CLASS;
+ }
+ // check impl_class
+ Handle h_impl_class(THREAD, JNIHandles::resolve_external_guard(impl_class));
+ if (!java_lang_Class::is_instance(h_impl_class()) ||
+ java_lang_Class::is_primitive(h_impl_class())) {
+ return JVMTI_ERROR_INVALID_CLASS;
+ }
+ return JvmtiExport::add_module_provides(h_module, h_service, h_impl_class, THREAD);
+} /* end AddModuleProvides */
+
+
//
// Class functions
//
--- a/hotspot/src/share/vm/prims/jvmtiExport.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -434,6 +434,165 @@
}
}
+jvmtiError
+JvmtiExport::add_module_reads(Handle module, Handle to_module, TRAPS) {
+ if (!Universe::is_module_initialized()) {
+ return JVMTI_ERROR_NONE; // extra safety
+ }
+ assert(!module.is_null(), "module should always be set");
+ assert(!to_module.is_null(), "to_module should always be set");
+
+ // Invoke the addReads method
+ JavaValue result(T_VOID);
+ JavaCalls::call_static(&result,
+ SystemDictionary::module_Modules_klass(),
+ vmSymbols::addReads_name(),
+ vmSymbols::addReads_signature(),
+ module,
+ to_module,
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ LogTarget(Trace, jvmti) log;
+ LogStreamCHeap log_stream(log);
+ java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream);
+ log_stream.cr();
+ CLEAR_PENDING_EXCEPTION;
+ return JVMTI_ERROR_INTERNAL;
+ }
+ return JVMTI_ERROR_NONE;
+}
+
+jvmtiError
+JvmtiExport::add_module_exports(Handle module, Handle pkg_name, Handle to_module, TRAPS) {
+ if (!Universe::is_module_initialized()) {
+ return JVMTI_ERROR_NONE; // extra safety
+ }
+ assert(!module.is_null(), "module should always be set");
+ assert(!to_module.is_null(), "to_module should always be set");
+ assert(!pkg_name.is_null(), "pkg_name should always be set");
+
+ // Invoke the addExports method
+ JavaValue result(T_VOID);
+ JavaCalls::call_static(&result,
+ SystemDictionary::module_Modules_klass(),
+ vmSymbols::addExports_name(),
+ vmSymbols::addExports_signature(),
+ module,
+ pkg_name,
+ to_module,
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
+ LogTarget(Trace, jvmti) log;
+ LogStreamCHeap log_stream(log);
+ java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream);
+ log_stream.cr();
+ CLEAR_PENDING_EXCEPTION;
+ if (ex_name == vmSymbols::java_lang_IllegalArgumentException()) {
+ return JVMTI_ERROR_ILLEGAL_ARGUMENT;
+ }
+ return JVMTI_ERROR_INTERNAL;
+ }
+ return JVMTI_ERROR_NONE;
+}
+
+jvmtiError
+JvmtiExport::add_module_opens(Handle module, Handle pkg_name, Handle to_module, TRAPS) {
+ if (!Universe::is_module_initialized()) {
+ return JVMTI_ERROR_NONE; // extra safety
+ }
+ assert(!module.is_null(), "module should always be set");
+ assert(!to_module.is_null(), "to_module should always be set");
+ assert(!pkg_name.is_null(), "pkg_name should always be set");
+
+ // Invoke the addOpens method
+ JavaValue result(T_VOID);
+ JavaCalls::call_static(&result,
+ SystemDictionary::module_Modules_klass(),
+ vmSymbols::addOpens_name(),
+ vmSymbols::addExports_signature(),
+ module,
+ pkg_name,
+ to_module,
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
+ LogTarget(Trace, jvmti) log;
+ LogStreamCHeap log_stream(log);
+ java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream);
+ log_stream.cr();
+ CLEAR_PENDING_EXCEPTION;
+ if (ex_name == vmSymbols::java_lang_IllegalArgumentException()) {
+ return JVMTI_ERROR_ILLEGAL_ARGUMENT;
+ }
+ return JVMTI_ERROR_INTERNAL;
+ }
+ return JVMTI_ERROR_NONE;
+}
+
+jvmtiError
+JvmtiExport::add_module_uses(Handle module, Handle service, TRAPS) {
+ if (!Universe::is_module_initialized()) {
+ return JVMTI_ERROR_NONE; // extra safety
+ }
+ assert(!module.is_null(), "module should always be set");
+ assert(!service.is_null(), "service should always be set");
+
+ // Invoke the addUses method
+ JavaValue result(T_VOID);
+ JavaCalls::call_static(&result,
+ SystemDictionary::module_Modules_klass(),
+ vmSymbols::addUses_name(),
+ vmSymbols::addUses_signature(),
+ module,
+ service,
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ LogTarget(Trace, jvmti) log;
+ LogStreamCHeap log_stream(log);
+ java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream);
+ log_stream.cr();
+ CLEAR_PENDING_EXCEPTION;
+ return JVMTI_ERROR_INTERNAL;
+ }
+ return JVMTI_ERROR_NONE;
+}
+
+jvmtiError
+JvmtiExport::add_module_provides(Handle module, Handle service, Handle impl_class, TRAPS) {
+ if (!Universe::is_module_initialized()) {
+ return JVMTI_ERROR_NONE; // extra safety
+ }
+ assert(!module.is_null(), "module should always be set");
+ assert(!service.is_null(), "service should always be set");
+ assert(!impl_class.is_null(), "impl_class should always be set");
+
+ // Invoke the addProvides method
+ JavaValue result(T_VOID);
+ JavaCalls::call_static(&result,
+ SystemDictionary::module_Modules_klass(),
+ vmSymbols::addProvides_name(),
+ vmSymbols::addProvides_signature(),
+ module,
+ service,
+ impl_class,
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ LogTarget(Trace, jvmti) log;
+ LogStreamCHeap log_stream(log);
+ java_lang_Throwable::print(PENDING_EXCEPTION, &log_stream);
+ log_stream.cr();
+ CLEAR_PENDING_EXCEPTION;
+ return JVMTI_ERROR_INTERNAL;
+ }
+ return JVMTI_ERROR_NONE;
+}
+
void
JvmtiExport::decode_version_values(jint version, int * major, int * minor,
int * micro) {
--- a/hotspot/src/share/vm/prims/jvmtiExport.hpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp Wed Jul 05 22:31:37 2017 +0200
@@ -218,6 +218,21 @@
// Add read edges to the unnamed modules of the bootstrap and app class loaders
static void add_default_read_edges(Handle h_module, TRAPS) NOT_JVMTI_RETURN;
+ // Add a read edge to the module
+ static jvmtiError add_module_reads(Handle module, Handle to_module, TRAPS);
+
+ // Updates a module to export a package
+ static jvmtiError add_module_exports(Handle module, Handle pkg_name, Handle to_module, TRAPS);
+
+ // Updates a module to open a package
+ static jvmtiError add_module_opens(Handle module, Handle pkg_name, Handle to_module, TRAPS);
+
+ // Add a used service to the module
+ static jvmtiError add_module_uses(Handle module, Handle service, TRAPS);
+
+ // Add a service provider to the module
+ static jvmtiError add_module_provides(Handle module, Handle service, Handle impl_class, TRAPS);
+
// let JVMTI know that the JVM_OnLoad code is running
static void enter_onload_phase() NOT_JVMTI_RETURN;
--- a/hotspot/src/share/vm/prims/whitebox.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/prims/whitebox.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -1415,14 +1415,6 @@
Modules::add_reads_module(from_module, source_module, CHECK);
WB_END
-WB_ENTRY(jboolean, WB_CanReadModule(JNIEnv* env, jobject o, jobject asking_module, jobject source_module))
- return Modules::can_read_module(asking_module, source_module, THREAD);
-WB_END
-
-WB_ENTRY(jboolean, WB_IsExportedToModule(JNIEnv* env, jobject o, jobject from_module, jstring package, jobject to_module))
- return Modules::is_exported_to_module(from_module, package, to_module, THREAD);
-WB_END
-
WB_ENTRY(void, WB_AddModulePackage(JNIEnv* env, jobject o, jclass module, jstring package))
Modules::add_module_package(module, package, CHECK);
WB_END
@@ -1866,10 +1858,6 @@
(void*)&WB_AddModuleExports },
{CC"AddReadsModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
(void*)&WB_AddReadsModule },
- {CC"CanReadModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)Z",
- (void*)&WB_CanReadModule },
- {CC"IsExportedToModule", CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Z",
- (void*)&WB_IsExportedToModule },
{CC"AddModulePackage", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
(void*)&WB_AddModulePackage },
{CC"GetModuleByPackageName", CC"(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;",
--- a/hotspot/src/share/vm/runtime/arguments.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -170,6 +170,8 @@
#define ADDEXPORTS_LEN 10
#define ADDREADS "addreads"
#define ADDREADS_LEN 8
+#define ADDOPENS "addopens"
+#define ADDOPENS_LEN 8
#define PATCH "patch"
#define PATCH_LEN 5
#define ADDMODS "addmods"
@@ -196,6 +198,7 @@
const char* property_suffix = property + MODULE_PROPERTY_PREFIX_LEN;
if (matches_property_suffix(property_suffix, ADDEXPORTS, ADDEXPORTS_LEN) ||
matches_property_suffix(property_suffix, ADDREADS, ADDREADS_LEN) ||
+ matches_property_suffix(property_suffix, ADDOPENS, ADDOPENS_LEN) ||
matches_property_suffix(property_suffix, PATCH, PATCH_LEN) ||
matches_property_suffix(property_suffix, ADDMODS, ADDMODS_LEN) ||
matches_property_suffix(property_suffix, LIMITMODS, LIMITMODS_LEN) ||
@@ -2555,6 +2558,7 @@
unsigned int addreads_count = 0;
unsigned int addexports_count = 0;
+unsigned int addopens_count = 0;
unsigned int addmods_count = 0;
unsigned int patch_mod_count = 0;
@@ -2809,6 +2813,10 @@
if (!create_numbered_property("jdk.module.addexports", tail, addexports_count++)) {
return JNI_ENOMEM;
}
+ } else if (match_option(option, "--add-opens=", &tail)) {
+ if (!create_numbered_property("jdk.module.addopens", tail, addopens_count++)) {
+ return JNI_ENOMEM;
+ }
} else if (match_option(option, "--add-modules=", &tail)) {
if (!create_numbered_property("jdk.module.addmods", tail, addmods_count++)) {
return JNI_ENOMEM;
--- a/hotspot/src/share/vm/runtime/javaCalls.cpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/runtime/javaCalls.cpp Wed Jul 05 22:31:37 2017 +0200
@@ -285,6 +285,14 @@
}
+void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS) {
+ JavaCallArguments args; // One oop argument
+ args.push_oop(arg1);
+ args.push_oop(arg2);
+ args.push_oop(arg3);
+ call_static(result, klass, name, signature, &args, CHECK);
+}
+
// -------------------------------------------------
// Implementation of JavaCalls (low level)
--- a/hotspot/src/share/vm/runtime/javaCalls.hpp Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/src/share/vm/runtime/javaCalls.hpp Wed Jul 05 22:31:37 2017 +0200
@@ -210,6 +210,7 @@
static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
+ static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS);
// Low-level interface
static void call(JavaValue* result, const methodHandle& method, JavaCallArguments* args, TRAPS);
--- a/hotspot/test/TEST.ROOT Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/TEST.ROOT Wed Jul 05 22:31:37 2017 +0200
@@ -47,8 +47,8 @@
vm.gc.ConcMarkSweep \
vm.debug
-# Tests using jtreg 4.2 b03 features
-requiredVersion=4.2 b03
+# Tests using jtreg 4.2 b04 features
+requiredVersion=4.2 b04
# Path to libraries in the topmost test directory. This is needed so @library
# does not need ../../ notation to reach them
--- a/hotspot/test/compiler/c2/Test7190310_unsafe.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/c2/Test7190310_unsafe.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,8 @@
* @test
* @bug 7190310
* @summary Inlining WeakReference.get(), and hoisting $referent may lead to non-terminating loops
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
+ * @modules java.base/java.lang.ref:open
*
* @run main/othervm -Xbatch compiler.c2.Test7190310_unsafe
*/
--- a/hotspot/test/compiler/codegen/Test8011901.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/codegen/Test8011901.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8011901
* @summary instruct xaddL_no_res shouldn't allow 64 bit constants.
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main/othervm -XX:-BackgroundCompilation compiler.codegen.Test8011901
*/
--- a/hotspot/test/compiler/escapeAnalysis/TestUnsafePutAddressNullObjMustNotEscape.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/escapeAnalysis/TestUnsafePutAddressNullObjMustNotEscape.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8038048
* @summary assert(null_obj->escape_state() == PointsToNode::NoEscape,etc)
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+DoEscapeAnalysis
* -XX:-TieredCompilation -Xbatch
--- a/hotspot/test/compiler/intrinsics/bigInteger/MontgomeryMultiplyTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/bigInteger/MontgomeryMultiplyTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -27,7 +27,8 @@
* @bug 8130150 8131779 8139907
* @summary Verify that the Montgomery multiply and square intrinsic works and correctly checks their arguments.
* @requires vm.flavor == "server"
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.math:open
* @library /test/lib
*
* @build sun.hotspot.WhiteBox
--- a/hotspot/test/compiler/intrinsics/unsafe/AllocateUninitializedArray.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/unsafe/AllocateUninitializedArray.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8150465
* @summary Unsafe methods to produce uninitialized arrays
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main/othervm -ea -Diters=200 -Xint
* compiler.intrinsics.unsafe.AllocateUninitializedArray
--- a/hotspot/test/compiler/intrinsics/unsafe/TestUnsafeUnalignedMismatchedAccesses.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/unsafe/TestUnsafeUnalignedMismatchedAccesses.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8136473
* @summary Mismatched stores on same slice possible with Unsafe.Put*Unaligned methods
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation
* compiler.intrinsics.unsafe.TestUnsafeUnalignedMismatchedAccesses
--- a/hotspot/test/compiler/intrinsics/unsafe/UnsafeGetAddressTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/unsafe/UnsafeGetAddressTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 6653795
* @summary C2 intrinsic for Unsafe.getAddress performs pointer sign extension on 32-bit systems
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main compiler.intrinsics.unsafe.UnsafeGetAddressTest
*/
--- a/hotspot/test/compiler/intrinsics/unsafe/UnsafeTwoCASLong.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/unsafe/UnsafeTwoCASLong.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8143930
* @summary C1 LinearScan asserts when compiling two back-to-back CompareAndSwapLongs
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run testng/othervm -Diters=200000 -XX:TieredStopAtLevel=1
* compiler.intrinsics.unsafe.UnsafeTwoCASLong
--- a/hotspot/test/compiler/jsr292/RedefineMethodUsedByMultipleMethodHandles.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/jsr292/RedefineMethodUsedByMultipleMethodHandles.java Wed Jul 05 22:31:37 2017 +0200
@@ -30,6 +30,7 @@
* java.compiler
* java.instrument
* java.management
+ * jdk.attach
*
* @run main/othervm compiler.jsr292.RedefineMethodUsedByMultipleMethodHandles
*/
@@ -42,7 +43,6 @@
import jdk.internal.org.objectweb.asm.MethodVisitor;
import jdk.internal.org.objectweb.asm.Opcodes;
-import javax.tools.ToolProvider;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -132,7 +132,7 @@
int p = vmName.indexOf('@');
assert p != -1 : "VM name not in <pid>@<host> format: " + vmName;
String pid = vmName.substring(0, p);
- ClassLoader cl = ToolProvider.getSystemToolClassLoader();
+ ClassLoader cl = ClassLoader.getSystemClassLoader();
Class<?> c = Class.forName("com.sun.tools.attach.VirtualMachine", true, cl);
Method attach = c.getDeclaredMethod("attach", String.class);
Method loadAgent = c.getDeclaredMethod("loadAgent", String.class);
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -27,8 +27,8 @@
* @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64")
* @library / /test/lib
* @library ../common/patches
- * @modules java.base/jdk.internal.misc
- * @modules jdk.vm.ci/jdk.vm.ci.hotspot
+ * @modules java.base/jdk.internal.misc:+open
+ * @modules jdk.vm.ci/jdk.vm.ci.hotspot:+open
*
* @build jdk.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper
* jdk.vm.ci/jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -27,10 +27,10 @@
* @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64")
* @library / /test/lib
* @library ../common/patches
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @modules java.base/jdk.internal.org.objectweb.asm
* java.base/jdk.internal.org.objectweb.asm.tree
- * jdk.vm.ci/jdk.vm.ci.hotspot
+ * @modules jdk.vm.ci/jdk.vm.ci.hotspot:+open
* jdk.vm.ci/jdk.vm.ci.code
* jdk.vm.ci/jdk.vm.ci.meta
* @build jdk.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper
--- a/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,8 +26,8 @@
* @bug 8136421
* @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64")
* @library /test/lib /
- * @modules java.base/jdk.internal.misc
- * @modules jdk.vm.ci/jdk.vm.ci.hotspot
+ * @modules java.base/jdk.internal.misc:open
+ * @modules jdk.vm.ci/jdk.vm.ci.hotspot:open
* jdk.vm.ci/jdk.vm.ci.runtime
* @run main/othervm -XX:+UnlockExperimentalVMOptions
* -Dcompiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives.positive=true
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -27,9 +27,10 @@
* @bug 8161068
* @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64")
* @library /test/lib /compiler/jvmci/jdk.vm.ci.hotspot.test/src
+ * @modules java.base/java.lang.invoke:+open
* @modules jdk.vm.ci/jdk.vm.ci.meta
* jdk.vm.ci/jdk.vm.ci.runtime
- * jdk.vm.ci/jdk.vm.ci.hotspot
+ * @modules jdk.vm.ci/jdk.vm.ci.hotspot:+open
* @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
* jdk.vm.ci.hotspot.test.MethodHandleAccessProviderTest
*/
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -27,6 +27,7 @@
* @library ../../../../../
* @modules jdk.vm.ci/jdk.vm.ci.meta
* jdk.vm.ci/jdk.vm.ci.runtime
+ * jdk.attach
* java.base/jdk.internal.misc
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.RedefineClassTest
*/
@@ -37,7 +38,6 @@
import org.junit.Assert;
import org.junit.Test;
-import javax.tools.ToolProvider;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -137,7 +137,7 @@
int p = vmName.indexOf('@');
assumeTrue(p != -1);
String pid = vmName.substring(0, p);
- ClassLoader cl = ToolProvider.getSystemToolClassLoader();
+ ClassLoader cl = ClassLoader.getSystemClassLoader();
Class<?> c = Class.forName("com.sun.tools.attach.VirtualMachine", true, cl);
Method attach = c.getDeclaredMethod("attach", String.class);
Method loadAgent = c.getDeclaredMethod("loadAgent", String.class, String.class);
--- a/hotspot/test/compiler/rangechecks/TestExplicitRangeChecks.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/rangechecks/TestExplicitRangeChecks.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8073480
* @summary explicit range checks should be recognized by C2
* @library /test/lib /
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -ea -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
--- a/hotspot/test/compiler/runtime/Test8010927.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/runtime/Test8010927.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8010927
* @summary Kitchensink crashed with SIGSEGV, Problematic frame: v ~StubRoutines::checkcast_arraycopy
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @build sun.hotspot.WhiteBox
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
--- a/hotspot/test/compiler/unsafe/GetUnsafeObjectG1PreBarrier.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/GetUnsafeObjectG1PreBarrier.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8016474
* @summary The bug only happens with C1 and G1 using a different ObjectAlignmentInBytes than KlassAlignmentInBytes (which is 8)
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:ObjectAlignmentInBytes=32
* compiler.unsafe.GetUnsafeObjectG1PreBarrier
*/
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestBoolean.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestBoolean.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for boolean
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestBoolean
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestBoolean
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestBoolean
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestByte.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestByte.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for byte
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestByte
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestByte
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestByte
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestChar.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestChar.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for char
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestChar
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestChar
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestChar
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestDouble.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestDouble.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for double
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestDouble
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestDouble
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestDouble
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestFloat.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestFloat.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for float
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestFloat
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestFloat
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestFloat
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestInt.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestInt.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for int
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestInt
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestInt
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestInt
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestLong.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestLong.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for long
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestLong
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestLong
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestLong
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestObject.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestObject.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for Object
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestObject
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestObject
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestObject
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestShort.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestShort.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,7 @@
* @bug 8143628
* @summary Test unsafe access for short
*
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
* @run testng/othervm -Diters=100 -Xint compiler.unsafe.JdkInternalMiscUnsafeAccessTestShort
* @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 compiler.unsafe.JdkInternalMiscUnsafeAccessTestShort
* @run testng/othervm -Diters=20000 -XX:-TieredCompilation compiler.unsafe.JdkInternalMiscUnsafeAccessTestShort
--- a/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8158260
* @summary Test unaligned Unsafe accesses
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main/othervm -Diters=20000 -XX:-UseOnStackReplacement -XX:-BackgroundCompilation
* compiler.unsafe.JdkInternalMiscUnsafeUnalignedAccess
--- a/hotspot/test/compiler/unsafe/TestUnsafeLoadControl.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/compiler/unsafe/TestUnsafeLoadControl.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,7 @@
* @test
* @bug 8077504
* @summary Unsafe load can loose control dependency and cause crash
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:+open
*
* @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement
* compiler.unsafe.TestUnsafeLoadControl
--- a/hotspot/test/gc/g1/TestStringDeduplicationAgeThreshold.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationAgeThreshold.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/g1/TestStringDeduplicationFullGC.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationFullGC.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/g1/TestStringDeduplicationInterned.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationInterned.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/g1/TestStringDeduplicationPrintOptions.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationPrintOptions.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/g1/TestStringDeduplicationTableRehash.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationTableRehash.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/g1/TestStringDeduplicationTableResize.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationTableResize.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/g1/TestStringDeduplicationTools.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationTools.java Wed Jul 05 22:31:37 2017 +0200
@@ -190,6 +190,7 @@
"-Xmx" + Xmx + "m",
"-XX:+UseG1GC",
"-XX:+UnlockDiagnosticVMOptions",
+ "--add-opens=java.base/java.lang=ALL-UNNAMED",
"-XX:+VerifyAfterGC" // Always verify after GC
};
--- a/hotspot/test/gc/g1/TestStringDeduplicationYoungGC.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/g1/TestStringDeduplicationYoungGC.java Wed Jul 05 22:31:37 2017 +0200
@@ -28,7 +28,8 @@
* @key gc
* @requires vm.gc.G1
* @library /test/lib
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* java.management
*/
--- a/hotspot/test/gc/stress/gcbasher/TestGCBasher.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/gc/stress/gcbasher/TestGCBasher.java Wed Jul 05 22:31:37 2017 +0200
@@ -38,7 +38,8 @@
FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
Stream<Path> s = Files.walk(fs.getPath("/"));
for (Path p : (Iterable<Path>)s::iterator) {
- if (p.toString().endsWith(".class")) {
+ if (p.toString().endsWith(".class") &&
+ !p.getFileName().toString().equals("module-info.class")) {
byte[] data = Files.readAllBytes(p);
Decompiler d = new Decompiler(data);
ClassInfo ci = d.getClassInfo();
--- a/hotspot/test/runtime/LocalLong/LocalLongTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/LocalLong/LocalLongTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -39,6 +39,10 @@
public static void main(String... args) throws Exception {
if (Platform.is64bit()) {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xint",
+ "--add-opens",
+ "java.base/java.lang=ALL-UNNAMED",
+ "--add-opens",
+ "java.base/java.lang.invoke=ALL-UNNAMED",
"LocalLongHelper");
OutputAnalyzer o = new OutputAnalyzer(pb.start());
o.shouldHaveExitValue(0);
--- a/hotspot/test/runtime/Throwable/StackTraceLogging.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/Throwable/StackTraceLogging.java Wed Jul 05 22:31:37 2017 +0200
@@ -52,6 +52,8 @@
public static void main(String[] args) throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xlog:stacktrace=info",
"-XX:MaxJavaStackTraceDepth=1024",
+ "--add-opens",
+ "java.base/java.lang=ALL-UNNAMED",
"TestThrowable");
analyzeOutputOn(pb);
}
--- a/hotspot/test/runtime/Throwable/TestThrowable.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/Throwable/TestThrowable.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,8 @@
* @test
* @bug 8150778
* @summary Test exception depths, and code to get stack traces
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* @library /test/lib
* @run main/othervm -XX:MaxJavaStackTraceDepth=1024 TestThrowable
*/
--- a/hotspot/test/runtime/Throwable/ThrowableIntrospectionSegfault.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/Throwable/ThrowableIntrospectionSegfault.java Wed Jul 05 22:31:37 2017 +0200
@@ -25,7 +25,8 @@
* @test
* @bug 8033735
* @summary check backtrace field introspection
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* @run main ThrowableIntrospectionSegfault
*/
--- a/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -100,7 +100,7 @@
ClassFileInstaller.writeClassToDisk("GetSysPkg_package/GetSysClass", klassbuf);
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xbootclasspath/a:bl_dir",
- "--add-exports=java.base/jdk.internal.loader=ALL-UNNAMED", "-cp", "." + File.pathSeparator +
+ "--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED", "-cp", "." + File.pathSeparator +
System.getProperty("test.classes"), "GetSysPkgTest", "do_tests");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldHaveExitValue(0);
--- a/hotspot/test/runtime/modules/AccessCheck/CheckRead.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/CheckRead.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m3")
.exports("p1")
@@ -80,9 +80,9 @@
// Packages: p2
// Packages exported: p2 is exported to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Define module: m3
@@ -90,10 +90,10 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.requires("m2")
- .conceals("p3")
+ .contains("p3")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_CheckRead.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_CheckRead.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m3")
.exports("p1")
@@ -80,9 +80,9 @@
// Packages: p2
// Packages exported: p2 is exported to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Define module: m3
@@ -90,10 +90,10 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.requires("m2")
- .conceals("p3")
+ .contains("p3")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualOther.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualOther.java Wed Jul 05 22:31:37 2017 +0200
@@ -70,7 +70,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.requires("m3")
@@ -82,9 +82,9 @@
// Packages: p2
// Packages exported: p2 is exported to m3
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m3")
+ .exports("p2", Set.of("m3"))
.build();
// Define module: m3
@@ -92,10 +92,10 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.requires("m2")
- .conceals("p3")
+ .contains("p3")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualToM1.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpQualToM1.java Wed Jul 05 22:31:37 2017 +0200
@@ -68,7 +68,7 @@
// Packages: p1
// Packages exported: p1 is exported to unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -79,9 +79,9 @@
// Packages: p2
// Packages exported: package p2 is exported to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpUnqual.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_ExpUnqual.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -80,7 +80,7 @@
// Packages: p2
// Packages exported: package p2 is exported to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
.exports("p2")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_PkgNotExp.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_PkgNotExp.java Wed Jul 05 22:31:37 2017 +0200
@@ -68,7 +68,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -79,9 +79,9 @@
// Packages: p2
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .conceals("p2")
+ .contains("p2")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_Umod.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_Umod.java Wed Jul 05 22:31:37 2017 +0200
@@ -80,7 +80,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p1")
.build();
@@ -129,7 +129,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p1")
.build();
@@ -178,7 +178,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p1")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/DiffCL_UmodUpkg.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/DiffCL_UmodUpkg.java Wed Jul 05 22:31:37 2017 +0200
@@ -75,7 +75,7 @@
// Packages: p3
// Packages exported: p3 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p3")
.build();
@@ -124,7 +124,7 @@
// Packages: p3
// Packages exported: p3 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p3")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/ExpQualOther.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/ExpQualOther.java Wed Jul 05 22:31:37 2017 +0200
@@ -70,7 +70,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.requires("m3")
@@ -82,9 +82,9 @@
// Packages: p2
// Packages exported: p2 is exported to m3
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m3")
+ .exports("p2", Set.of("m3"))
.build();
// Define module: m3
@@ -92,10 +92,10 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.requires("m2")
- .conceals("p3")
+ .contains("p3")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/ExpQualToM1.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/ExpQualToM1.java Wed Jul 05 22:31:37 2017 +0200
@@ -58,7 +58,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -69,9 +69,9 @@
// Packages: p2
// Packages exported: p2 is exported qualifiedly to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/ExpUnqual.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/ExpUnqual.java Wed Jul 05 22:31:37 2017 +0200
@@ -58,7 +58,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -69,7 +69,7 @@
// Packages: p2
// Packages exported: p2 is exported unqualifiedly
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
.exports("p2")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/ExportAllUnnamed.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/ExportAllUnnamed.java Wed Jul 05 22:31:37 2017 +0200
@@ -71,7 +71,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -81,9 +81,9 @@
// Packages: p2
// Packages exported: p2 is exported unqualifiedly
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/PkgNotExp.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/PkgNotExp.java Wed Jul 05 22:31:37 2017 +0200
@@ -68,7 +68,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -79,9 +79,9 @@
// Packages: p2
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .conceals("p2")
+ .contains("p2")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/Umod.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/Umod.java Wed Jul 05 22:31:37 2017 +0200
@@ -80,7 +80,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p1")
.build();
@@ -126,7 +126,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p1")
.build();
@@ -172,7 +172,7 @@
// Packages: p1
// Packages exported: p1 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p1")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpQualOther.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpQualOther.java Wed Jul 05 22:31:37 2017 +0200
@@ -70,7 +70,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -80,9 +80,9 @@
// Packages: p2
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpUnqual.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_ExpUnqual.java Wed Jul 05 22:31:37 2017 +0200
@@ -70,7 +70,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -80,7 +80,7 @@
// Packages: p2
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
.exports("p2")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_PkgNotExp.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodDiffCL_PkgNotExp.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -79,9 +79,9 @@
// Packages: p2
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .conceals("p2")
+ .contains("p2")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUPkg.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodUPkg.java Wed Jul 05 22:31:37 2017 +0200
@@ -75,7 +75,7 @@
// Packages: p3
// Packages exported: p3 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p3")
.build();
@@ -121,7 +121,7 @@
// Packages: p3
// Packages exported: p3 is exported unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.exports("p3")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_ExpQualOther.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_ExpQualOther.java Wed Jul 05 22:31:37 2017 +0200
@@ -70,7 +70,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -80,9 +80,9 @@
// Packages: p6
// Packages exported: p6 exported to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p6", "m1")
+ .exports("p6", Set.of("m1"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_NotExp.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkgDiffCL_NotExp.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -79,9 +79,9 @@
// Packages: p6
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .conceals("p6")
+ .contains("p6")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_ExpQualOther.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_ExpQualOther.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.requires("m3")
@@ -80,9 +80,9 @@
// Packages: p6
// Packages exported: p6 is exported to m3
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p6", "m3")
+ .exports("p6", Set.of("m3"))
.build();
// Define module: m3
@@ -90,7 +90,7 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_NotExp.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/UmodUpkg_NotExp.java Wed Jul 05 22:31:37 2017 +0200
@@ -67,7 +67,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -77,9 +77,9 @@
// Packages: p6
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .conceals("p6")
+ .contains("p6")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/AccessCheck/Umod_ExpQualOther.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/Umod_ExpQualOther.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.requires("m3")
@@ -80,9 +80,9 @@
// Packages: p2
// Packages exported: p2 is exported to m3
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m3")
+ .exports("p2", Set.of("m3"))
.build();
// Define module: m3
@@ -90,7 +90,7 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/Umod_ExpUnqual.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/Umod_ExpUnqual.java Wed Jul 05 22:31:37 2017 +0200
@@ -69,7 +69,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -79,7 +79,7 @@
// Packages: p2
// Packages exported: p2 is exported unqualifiedly
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
.exports("p2")
.build();
--- a/hotspot/test/runtime/modules/AccessCheck/Umod_PkgNotExp.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/AccessCheck/Umod_PkgNotExp.java Wed Jul 05 22:31:37 2017 +0200
@@ -67,7 +67,7 @@
// Packages: none
// Packages exported: none
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.build();
@@ -77,9 +77,9 @@
// Packages: p2
// Packages exported: none
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .conceals("p2")
+ .contains("p2")
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/IgnoreModulePropertiesTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/IgnoreModulePropertiesTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -72,6 +72,6 @@
testOption("--add-reads", "xyzz=yyzd", "jdk.module.addreads.0", "WARNING: Unknown module: xyzz");
testOption("--add-exports", "java.base/xyzz=yyzd", "jdk.module.addexports.0",
"WARNING: package xyzz not in java.base");
- testOption("--patch-module", "=d", "jdk.module.patch.0", "IllegalArgumentException");
+ testOption("--patch-module", "=d", "jdk.module.patch.0", "Missing module name");
}
}
--- a/hotspot/test/runtime/modules/JVMAddModulePackage.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/JVMAddModulePackage.java Wed Jul 05 22:31:37 2017 +0200
@@ -33,6 +33,7 @@
*/
import static jdk.test.lib.Asserts.*;
+import java.sql.Time;
public class JVMAddModulePackage {
@@ -123,6 +124,29 @@
// Expected
}
+ // Add package named "java" to an module defined to a class loader other than the boot or platform loader.
+ try {
+ // module1 is defined to a MyClassLoader class loader.
+ ModuleHelper.AddModulePackage(module1, "java/foo");
+ throw new RuntimeException("Failed to get the expected IAE");
+ } catch(IllegalArgumentException e) {
+ if (!e.getMessage().contains("prohibited package name")) {
+ throw new RuntimeException("Failed to get expected IAE message for prohibited package name: " + e.getMessage());
+ }
+ }
+
+ // Package "javabar" should be ok
+ ModuleHelper.AddModulePackage(module1, "javabar");
+
+ // Package named "java" defined to the boot class loader, should be ok
+ Object module_javabase = module1.getClass().getModule();
+ ModuleHelper.AddModulePackage(module_javabase, "java/foo");
+
+ // Package named "java" defined to the platform class loader, should be ok
+ // The module java.sql is defined to the platform class loader.
+ java.sql.Time jst = new java.sql.Time(45000); // milliseconds
+ Object module_javasql = jst.getClass().getModule();
+ ModuleHelper.AddModulePackage(module_javasql, "java/foo");
}
static class MyClassLoader extends ClassLoader { }
--- a/hotspot/test/runtime/modules/JVMCanReadModule.java Tue Nov 29 21:58:29 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * 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.
- */
-
-/*
- * @test
- * @modules java.base/jdk.internal.misc
- * @library /test/lib ..
- * @build sun.hotspot.WhiteBox
- * @compile/module=java.base java/lang/reflect/ModuleHelper.java
- * @run main ClassFileInstaller sun.hotspot.WhiteBox
- * sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI JVMCanReadModule
- */
-
-import static jdk.test.lib.Asserts.*;
-
-public class JVMCanReadModule {
-
- public static void main(String args[]) throws Throwable {
- MyClassLoader asking_cl = new MyClassLoader();
- MyClassLoader target_cl = new MyClassLoader();
- Object asking_module, target_module;
- boolean result;
-
- asking_module = ModuleHelper.ModuleObject("asking_module", asking_cl, new String[] { "mypackage" });
- assertNotNull(asking_module, "Module should not be null");
- ModuleHelper.DefineModule(asking_module, "9.0", "asking_module/here", new String[] { "mypackage" });
- target_module = ModuleHelper.ModuleObject("target_module", target_cl, new String[] { "yourpackage" });
- assertNotNull(target_module, "Module should not be null");
- ModuleHelper.DefineModule(target_module, "9.0", "target_module/here", new String[] { "yourpackage" });
-
- // Set up relationship
- ModuleHelper.AddReadsModule(asking_module, target_module);
-
- // Null asking_module argument, expect an NPE
- try {
- result = ModuleHelper.CanReadModule(null, target_module);
- throw new RuntimeException("Failed to get the expected NPE");
- } catch(NullPointerException e) {
- // Expected
- }
-
- // Bad asking_module argument, expect an IAE
- try {
- result = ModuleHelper.CanReadModule(asking_cl, target_module);
- throw new RuntimeException("Failed to get the expected IAE");
- } catch(IllegalArgumentException e) {
- // Expected
- }
-
- // Bad target_module argument, expect an IAE
- try {
- result = ModuleHelper.CanReadModule(asking_module, asking_cl);
- throw new RuntimeException("Failed to get the expected IAE");
- } catch(IllegalArgumentException e) {
- // Expected
- }
-
- // Verify strict modules can not read the unnamed module
- result = ModuleHelper.CanReadModule(target_module, null);
- assertFalse(result, "target_module can not read unnamed module");
-
- // Verify asking_module can read itself
- result = ModuleHelper.CanReadModule(asking_module, asking_module);
- assertTrue(result, "asking_module can read itself");
-
- // Verify asking_module can read target_module
- result = ModuleHelper.CanReadModule(asking_module, target_module);
- assertTrue(result, "asking_module can read target_module");
-
- // Verify target_module cannot read asking_module
- result = ModuleHelper.CanReadModule(target_module, asking_module);
- assertTrue(!result, "target_module cannot read asking_module");
- }
-
- static class MyClassLoader extends ClassLoader { }
-}
--- a/hotspot/test/runtime/modules/JVMDefineModule.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/JVMDefineModule.java Wed Jul 05 22:31:37 2017 +0200
@@ -33,6 +33,7 @@
*/
import static jdk.test.lib.Asserts.*;
+import java.sql.Time;
public class JVMDefineModule {
@@ -238,6 +239,39 @@
}
}
+ // Package named "java" defined to a class loader other than the boot or platform class loader, expect an IAE
+ m = ModuleHelper.ModuleObject("modulejavapkg1", cl, new String[] { "java/foo" });
+ try {
+ // module m is defined to an instance of MyClassLoader class loader
+ ModuleHelper.DefineModule(m, "9.0", "modulejavapkg1", new String[] { "java/foo" });
+ throw new RuntimeException("Failed to get expected IAE for package java/foo");
+ } catch(IllegalArgumentException e) {
+ if (!e.getMessage().contains("prohibited package name")) {
+ throw new RuntimeException("Failed to get expected IAE message for prohibited package name: " + e.getMessage());
+ }
+ }
+
+ // Package named "javabar" defined to a class loader other than the boot or platform class loader, should be ok
+ m = ModuleHelper.ModuleObject("modulejavapkg2", cl, new String[] { "javabar" });
+ assertNotNull(m, "Module should not be null");
+ ModuleHelper.DefineModule(m, "9.0", "modulejavapkg2", new String[] { "javabar" });
+
+ // Package named "java" defined to the boot class loader, should be ok
+ // m's type is a java.lang.Object, module is java.base
+ // java.base module is defined to the boot loader
+ ClassLoader boot_loader = m.getClass().getClassLoader();
+ m = ModuleHelper.ModuleObject("modulejavapkg3", boot_loader, new String[] { "java/foo" });
+ assertNotNull(m, "Module should not be null");
+ ModuleHelper.DefineModule(m, "9.0", "modulejavapkg3", new String[] { "java/foo" });
+
+ // Package named "java" defined to the platform class loader, should be ok
+ // java.sql module defined to the platform class loader.
+ java.sql.Time jst = new java.sql.Time(45 * 1000);
+ ClassLoader platform_loader = jst.getClass().getClassLoader();
+ m = ModuleHelper.ModuleObject("modulejavapkg4", platform_loader, new String[] { "java/foo" });
+ assertNotNull(m, "Module should not be null");
+ ModuleHelper.DefineModule(m, "9.0", "modulejavapkg4", new String[] { "java/foo" });
+
// module version that is null, should be okay
m = ModuleHelper.ModuleObject("module8", cl, new String[] { "a_package_8" });
assertNotNull(m, "Module should not be null");
--- a/hotspot/test/runtime/modules/JVMIsExportedToModule.java Tue Nov 29 21:58:29 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * 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.
- */
-
-/*
- * @test
- * @modules java.base/jdk.internal.misc
- * @library /test/lib ..
- * @build sun.hotspot.WhiteBox
- * @compile/module=java.base java/lang/reflect/ModuleHelper.java
- * @run main ClassFileInstaller sun.hotspot.WhiteBox
- * sun.hotspot.WhiteBox$WhiteBoxPermission
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI JVMIsExportedToModule
- */
-
-import static jdk.test.lib.Asserts.*;
-
-public class JVMIsExportedToModule {
-
- public static void main(String args[]) throws Throwable {
- MyClassLoader from_cl = new MyClassLoader();
- MyClassLoader to_cl = new MyClassLoader();
- Object from_module, to_module;
- boolean result;
-
- from_module = ModuleHelper.ModuleObject("from_module", from_cl, new String[] { "mypackage", "this/package" });
- assertNotNull(from_module, "Module from_module should not be null");
- ModuleHelper.DefineModule(from_module, "9.0", "from_module/here", new String[] { "mypackage", "this/package" });
- to_module = ModuleHelper.ModuleObject("to_module", to_cl, new String[] { "yourpackage", "that/package" });
- assertNotNull(to_module, "Module to_module should not be null");
- ModuleHelper.DefineModule(to_module, "9.0", "to_module/here", new String[] { "yourpackage", "that/package" });
-
- Object unnamed_module = JVMIsExportedToModule.class.getModule();
- assertNotNull(unnamed_module, "Module unnamed_module should not be null");
-
- // Null from_module argument, expect an NPE
- try {
- result = ModuleHelper.IsExportedToModule(null, "mypackage", to_module);
- throw new RuntimeException("Failed to get the expected NPE for null from_module");
- } catch(NullPointerException e) {
- // Expected
- }
-
- // Null to_module argument, expect an NPE
- try {
- result = ModuleHelper.IsExportedToModule(from_module, "mypackage", null);
- throw new RuntimeException("Failed to get expected NPE for null to_module");
- } catch(NullPointerException e) {
- // Expected
- }
-
- // Null package argument, expect an NPE
- try {
- result = ModuleHelper.IsExportedToModule(from_module, null, to_module);
- throw new RuntimeException("Failed to get the expected NPE for null package");
- } catch(NullPointerException e) {
- // Expected
- }
-
- // Bad from_module argument, expect an IAE
- try {
- result = ModuleHelper.IsExportedToModule(to_cl, "mypackage", to_module);
- throw new RuntimeException("Failed to get the expected IAE for bad from_module");
- } catch(IllegalArgumentException e) {
- // Expected
- }
-
- // Bad to_module argument, expect an IAE
- try {
- result = ModuleHelper.IsExportedToModule(from_module, "mypackage", from_cl);
- throw new RuntimeException("Failed to get the expected IAE");
- } catch(IllegalArgumentException e) {
- // Expected
- }
-
- // Check that package is exported to its own module
- result = ModuleHelper.IsExportedToModule(from_module, "mypackage", from_module);
- assertTrue(result, "Package is always exported to itself");
-
- // Package is not in to_module, expect an IAE
- try {
- result = ModuleHelper.IsExportedToModule(from_module, "yourpackage", from_cl);
- throw new RuntimeException("Failed to get the expected IAE for package not in to_module");
- } catch(IllegalArgumentException e) {
- // Expected
- }
-
- // Package is accessible when exported to unnamed module
- ModuleHelper.AddModuleExportsToAll(from_module, "mypackage");
- result = ModuleHelper.IsExportedToModule(from_module, "mypackage", to_module);
- assertTrue(result, "Package exported to unnamed module is visible to named module");
-
- result = ModuleHelper.IsExportedToModule(from_module, "mypackage", unnamed_module);
- assertTrue(result, "Package exported to unnamed module is visible to unnamed module");
-
- // Package is accessible only to named module when exported to named module
- ModuleHelper.AddModuleExports(from_module, "this/package", to_module);
- result = ModuleHelper.IsExportedToModule(from_module, "this/package", to_module);
- assertTrue(result, "Package exported to named module is visible to named module");
- result = ModuleHelper.IsExportedToModule(from_module, "this/package", unnamed_module);
- assertTrue(!result, "Package exported to named module is not visible to unnamed module");
- }
-
- static class MyClassLoader extends ClassLoader { }
-}
--- a/hotspot/test/runtime/modules/ModuleHelper.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/ModuleHelper.java Wed Jul 05 22:31:37 2017 +0200
@@ -73,17 +73,6 @@
java.lang.reflect.ModuleHelper.addExportsNoSync((Module)m, pkg, (Module)null);
}
- public static boolean CanReadModule(Object from, Object to) throws Throwable {
- WhiteBox wb = WhiteBox.getWhiteBox();
- return wb.CanReadModule(from, to);
- }
-
- public static boolean IsExportedToModule(Object from, String pkg,
- Object to) throws Throwable {
- WhiteBox wb = WhiteBox.getWhiteBox();
- return wb.IsExportedToModule(from, pkg, to);
- }
-
public static Module ModuleObject(String name, ClassLoader loader, String[] pkgs) throws Throwable {
Set<String> pkg_set = new HashSet<>();
if (pkgs != null) {
@@ -95,7 +84,7 @@
}
ModuleDescriptor descriptor =
- new ModuleDescriptor.Builder(name).conceals(pkg_set).build();
+ ModuleDescriptor.module(name).contains(pkg_set).build();
URI uri = URI.create("module:/" + name);
return java.lang.reflect.ModuleHelper.newModule(loader, descriptor);
--- a/hotspot/test/runtime/modules/ModuleStress/ModuleNonBuiltinCLMain.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/ModuleStress/ModuleNonBuiltinCLMain.java Wed Jul 05 22:31:37 2017 +0200
@@ -57,7 +57,7 @@
// Packages: p1
// Packages exported: p1 is exported to unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -71,7 +71,7 @@
targets.add("m1");
targets.add("m3");
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
.requires("m3")
.exports("p2", targets)
@@ -82,7 +82,7 @@
// Packages: p3
// Packages exported: none
ModuleDescriptor descriptor_m3 =
- new ModuleDescriptor.Builder("m3")
+ ModuleDescriptor.module("m3")
.requires("java.base")
.build();
--- a/hotspot/test/runtime/modules/ModuleStress/ModuleSameCLMain.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/ModuleStress/ModuleSameCLMain.java Wed Jul 05 22:31:37 2017 +0200
@@ -55,7 +55,7 @@
// Packages: p1
// Packages exported: p1 is exported to unqualifiedly
ModuleDescriptor descriptor_m1 =
- new ModuleDescriptor.Builder("m1")
+ ModuleDescriptor.module("m1")
.requires("java.base")
.requires("m2")
.exports("p1")
@@ -66,9 +66,9 @@
// Packages: p2
// Packages exported: package p2 is exported to m1
ModuleDescriptor descriptor_m2 =
- new ModuleDescriptor.Builder("m2")
+ ModuleDescriptor.module("m2")
.requires("java.base")
- .exports("p2", "m1")
+ .exports("p2", Set.of("m1"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
--- a/hotspot/test/runtime/modules/getModuleJNI/GetModule.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/getModuleJNI/GetModule.java Wed Jul 05 22:31:37 2017 +0200
@@ -35,10 +35,6 @@
}
static native Object callGetModule(java.lang.Class clazz);
- static native void callAddModuleReads(java.lang.reflect.Module from_module,
- java.lang.reflect.Module source_module);
- static native boolean callCanReadModule(java.lang.reflect.Module asking_module,
- java.lang.reflect.Module source_module);
public static void main(String[] args) {
Module module;
@@ -144,71 +140,6 @@
} catch(NullPointerException e) {
// Expected
}
-
-
- // Tests for JNI_AddModuleReads() //
-
- Module javaScriptingModule = javax.script.Bindings.class.getModule();
- if (javaScriptingModule == null) {
- throw new RuntimeException("Failed to get java.scripting module");
- }
- Module javaLoggingModule = java.util.logging.Level.class.getModule();
- if (javaLoggingModule == null) {
- throw new RuntimeException("Failed to get java.logging module");
- }
-
- if (callCanReadModule(javaLoggingModule, javaScriptingModule)) {
- throw new RuntimeException(
- "Expected FALSE because javaLoggingModule cannot read javaScriptingModule");
- }
-
- callAddModuleReads(javaLoggingModule, javaScriptingModule);
- callAddModuleReads(javaScriptingModule, GetModule.class.getModule()); // unnamed module
-
- try {
- callAddModuleReads(null, javaLoggingModule);
- throw new RuntimeException(
- "Expected NullPointerException for bad from_module not thrown");
- } catch(NullPointerException e) {
- // expected
- }
-
- try {
- callAddModuleReads(javaLoggingModule, null);
- throw new RuntimeException(
- "Expected NullPointerException for bad source_module not thrown");
- } catch(NullPointerException e) {
- // expected
- }
-
-
- // Tests for JNI_CanReadModule() //
-
- if (!callCanReadModule(javaLoggingModule, javaScriptingModule)) {
- throw new RuntimeException(
- "Expected TRUE because javaLoggingModule can read javaScriptingModule");
- }
-
- if (callCanReadModule(javaBaseModule, javaScriptingModule)) {
- throw new RuntimeException(
- "Expected FALSE because javaBaseModule cannnot read javaScriptingModule");
- }
-
- try {
- callCanReadModule(javaLoggingModule, null);
- throw new RuntimeException(
- "Expected NullPointerException for bad sourceModule not thrown");
- } catch(NullPointerException e) {
- // expected
- }
-
- try {
- callCanReadModule(null, javaScriptingModule);
- throw new RuntimeException(
- "Expected NullPointerException for bad asking_module not thrown");
- } catch(NullPointerException e) {
- // expected
- }
}
static class MyClassLoader extends ClassLoader { }
--- a/hotspot/test/runtime/modules/getModuleJNI/libGetModule.c Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/runtime/modules/getModuleJNI/libGetModule.c Wed Jul 05 22:31:37 2017 +0200
@@ -28,15 +28,3 @@
jobject res = (jobject)((*env)->GetModule(env, clazz));
return res;
}
-
-JNIEXPORT void JNICALL
-Java_GetModule_callAddModuleReads(JNIEnv *env, jclass unused, jobject from_module, jobject source_module) {
- (*env)->AddModuleReads(env, from_module, source_module);
-}
-
-JNIEXPORT jboolean JNICALL
-Java_GetModule_callCanReadModule(JNIEnv *env, jclass unused, jobject asking_module, jobject source_module) {
- jboolean res = (*env)->CanReadModule(env, asking_module, source_module);
- return res;
-}
-
--- a/hotspot/test/serviceability/attach/AttachWithStalePidFile.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/serviceability/attach/AttachWithStalePidFile.java Wed Jul 05 22:31:37 2017 +0200
@@ -26,7 +26,8 @@
* @bug 7162400
* @key regression
* @summary Regression test for attach issue where stale pid files in /tmp lead to connection issues
- * @modules java.base/jdk.internal.misc
+ * @modules java.base/jdk.internal.misc:open
+ * @modules java.base/java.lang:open
* @modules jdk.attach/sun.tools.attach
* @library /test/lib
* @run main AttachWithStalePidFile
--- a/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -32,7 +32,7 @@
* @test
* @summary Tests the modules-related JDWP commands
* @library /test/lib
- * @ignore 8168478
+ * @ignore 8170541
* @modules jdk.jdwp.agent
* @modules java.base/jdk.internal.misc
* @compile AllModulesCommandTestDebuggee.java
@@ -96,8 +96,7 @@
if (modName != null) { // JDWP reports unnamed modules, ignore them
jdwpModuleNames.add(modName);
}
- // Assert the JDWP CANREAD and CLASSLOADER commands
- assertCanRead(modId, modName);
+ // Assert the CLASSLOADER commands
assertClassLoader(modId, modName);
}
@@ -134,13 +133,6 @@
}
}
- private void assertCanRead(long modId, String modName) throws IOException {
- // Simple assert for the CANREAD command
- JdwpCanReadReply reply = new JdwpCanReadCmd(modId, modId).send(channel);
- assertReply(reply);
- assertTrue(reply.canRead(), "canRead() reports false for reading from the same module '" + modName + "', moduleId=" + modId);
- }
-
private void assertClassLoader(long modId, String modName) throws IOException {
// Verify that the module classloader id is valid
JdwpClassLoaderReply reply = new JdwpClassLoaderCmd(modId).send(channel);
--- a/hotspot/test/serviceability/jdwp/JdwpCanReadCmd.java Tue Nov 29 21:58:29 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * 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.
- */
-
-/**
- * The JDWP CANREAD command
- */
-public class JdwpCanReadCmd extends JdwpCmd<JdwpCanReadReply> {
-
- public JdwpCanReadCmd(long modId, long srcModId) {
- super(3, 18, JdwpCanReadReply.class, 2 * refLen());
- putRefId(modId);
- putRefId(srcModId);
- }
-
-}
--- a/hotspot/test/serviceability/jdwp/JdwpCanReadReply.java Tue Nov 29 21:58:29 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * 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.
- */
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * The reply to the JDWP CANREAD command
- */
-public class JdwpCanReadReply extends JdwpReply {
-
- private boolean canRead;
-
- protected void parseData(DataInputStream ds) throws IOException {
- canRead = (ds.read() != 0);
- }
-
- public boolean canRead() {
- return canRead;
- }
-
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleExportsAndOpens/MyPackage/AddModuleExportsAndOpensTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 MyPackage;
+
+/**
+ * @test
+ * @summary Verifies the JVMTI AddModuleExports and AddModuleOpens API
+ * @compile AddModuleExportsAndOpensTest.java
+ * @run main/othervm/native -agentlib:AddModuleExportsAndOpensTest MyPackage.AddModuleExportsAndOpensTest
+ */
+
+import java.io.PrintStream;
+import java.lang.reflect.Module;
+
+public class AddModuleExportsAndOpensTest {
+
+ static {
+ try {
+ System.loadLibrary("AddModuleExportsAndOpensTest");
+ } catch (UnsatisfiedLinkError ule) {
+ System.err.println("Could not load AddModuleExportsAndOpensTest library");
+ System.err.println("java.library.path: "
+ + System.getProperty("java.library.path"));
+ throw ule;
+ }
+ }
+
+ native static int check(Module baseModule, Module thisModule);
+
+ public static void main(String args[]) {
+ Module baseModule = Object.class.getModule();
+ Module thisModule = AddModuleExportsAndOpensTest.class.getClassLoader().getUnnamedModule();
+ int status = check(baseModule, thisModule);
+ if (status != 0) {
+ throw new RuntimeException("Non-zero status returned from the agent: " + status);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleExportsAndOpens/libAddModuleExportsAndOpensTest.c Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,298 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "jvmti.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef JNI_ENV_ARG
+
+#ifdef __cplusplus
+#define JNI_ENV_ARG(x, y) y
+#define JNI_ENV_PTR(x) x
+#else
+#define JNI_ENV_ARG(x,y) x, y
+#define JNI_ENV_PTR(x) (*x)
+#endif
+
+#endif
+
+#define TranslateError(err) "JVMTI error"
+
+#define PASSED 0
+#define FAILED 2
+
+static const char *EXC_CNAME = "java/lang/Exception";
+static const char* MOD_CNAME = "Ljava/lang/reflect/Module;";
+
+static jvmtiEnv *jvmti = NULL;
+static jint result = PASSED;
+
+static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved);
+
+JNIEXPORT
+jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
+ return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT
+jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) {
+ return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT
+jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
+ return JNI_VERSION_1_8;
+}
+
+static
+jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
+ jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti),
+ JVMTI_VERSION_9);
+ if (res != JNI_OK || jvmti == NULL) {
+ printf(" Error: wrong result of a valid call to GetEnv!\n");
+ return JNI_ERR;
+ }
+
+ return JNI_OK;
+}
+
+static
+jint throw_exc(JNIEnv *env, char *msg) {
+ jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME));
+
+ if (exc_class == NULL) {
+ printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME);
+ return -1;
+ }
+ return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg);
+}
+
+static
+jclass jlrM(JNIEnv *env) {
+ jclass cls = NULL;
+
+ cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME));
+ if (cls == NULL) {
+ printf(" Error in JNI FindClass: %s\n", MOD_CNAME);
+ }
+ return cls;
+}
+
+jmethodID
+get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) {
+ jmethodID method = NULL;
+
+ method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig);
+ if (method == NULL) {
+ printf(" Error in JNI GetMethodID %s with signature %s", name, sig);
+ }
+ return method;
+}
+
+static
+jboolean is_exported(JNIEnv *env, jobject module, const char* pkg, jboolean open) {
+ static jmethodID mIsExported = NULL;
+ jstring jstr = NULL;
+ jboolean res = JNI_FALSE;
+
+ if (mIsExported == NULL) {
+ const char* sign = "(Ljava/lang/String;)Z";
+ const char* name = open ? "isOpen" : "isExported";
+ mIsExported = get_method(env, jlrM(env), name, sign);
+ }
+ jstr = JNI_ENV_PTR(env)->NewStringUTF(JNI_ENV_ARG(env, pkg));
+ res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module),
+ mIsExported, jstr);
+ return res;
+}
+
+static
+jboolean is_exported_to(JNIEnv *env, jobject module, const char* pkg, jobject to_module,
+ jboolean open) {
+ static jmethodID mIsExportedTo = NULL;
+ jstring jstr = NULL;
+ jboolean res = JNI_FALSE;
+
+ if (mIsExportedTo == NULL) {
+ const char* sign = "(Ljava/lang/String;Ljava/lang/reflect/Module;)Z";
+ const char* name = open ? "isOpen" : "isExported";
+ mIsExportedTo = get_method(env, jlrM(env), name, sign);
+ }
+ jstr = JNI_ENV_PTR(env)->NewStringUTF(JNI_ENV_ARG(env, pkg));
+ res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module),
+ mIsExportedTo, jstr, to_module);
+ return res;
+}
+
+static
+jvmtiError add_module_exports(jobject baseModule, const char* pkg, jobject thisModule,
+ jboolean open) {
+ jvmtiError err = JVMTI_ERROR_NONE;
+ if (open) {
+ err = (*jvmti)->AddModuleOpens(jvmti, baseModule, pkg, thisModule);
+ } else {
+ err = (*jvmti)->AddModuleExports(jvmti, baseModule, pkg, thisModule);
+ }
+ return err;
+}
+
+static
+jint check_add_module_exports(JNIEnv *env,
+ jclass cls,
+ jobject baseModule,
+ jobject thisModule,
+ jboolean open) {
+ static char strbuf[128] = { '\0' };
+ jvmtiError err = JVMTI_ERROR_NONE;
+ const char* pkg = open ? "jdk.internal.math"
+ : "jdk.internal.misc";
+ const char* bad_pkg = "my.bad.pkg";
+ const char* jvmti_fn = open ? "AddModuleOpens"
+ : "AddModuleExports";
+ jboolean exported = JNI_FALSE;
+
+ // Export from NULL module
+ printf("Check #N1:\n");
+ err = add_module_exports(NULL, pkg, thisModule, open);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#N1: jvmtiError from %s: %d\n", jvmti_fn, err);
+ throw_exc(env, "Check #N1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL");
+ return FAILED;
+ }
+
+ // Export NULL package
+ printf("Check #N2:\n");
+ err = add_module_exports(baseModule, NULL, thisModule, open);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#N2: jvmtiError from %s: %d\n", jvmti_fn, err);
+ throw_exc(env, "Check #N2: failed to return JVMTI_ERROR_NULL_POINTER for pkg==NULL");
+ return FAILED;
+ }
+
+ // Export to NULL module
+ printf("Check #N3:\n");
+ err = add_module_exports(baseModule, pkg, NULL, open);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#N3: jvmtiError from %s: %d\n", jvmti_fn, err);
+ throw_exc(env, "Check #N3: failed to return JVMTI_ERROR_NULL_POINTER for to_module==NULL");
+ return FAILED;
+ }
+
+ // Export a bad package
+ printf("Check #I0:\n");
+ err = add_module_exports(baseModule, bad_pkg, thisModule, open);
+ if (err != JVMTI_ERROR_ILLEGAL_ARGUMENT) {
+ printf("#I0: jvmtiError from %s: %d\n", jvmti_fn, err);
+ throw_exc(env, "Check #I0: did not get expected JVMTI_ERROR_ILLEGAL_ARGUMENT for invalid package");
+ return FAILED;
+ }
+
+ // Export from invalid module (cls)
+ printf("Check #I1:\n");
+ err = add_module_exports((jobject)cls, pkg, thisModule, open);
+ if (err != JVMTI_ERROR_INVALID_MODULE) {
+ printf("#I1: jvmtiError from %s: %d\n", jvmti_fn, err);
+ throw_exc(env, "Check #I1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module");
+ return FAILED;
+ }
+
+ // Export to invalid module (cls)
+ printf("Check #I2:\n");
+ err = add_module_exports(baseModule, pkg, (jobject)cls, open);
+ if (err != JVMTI_ERROR_INVALID_MODULE) {
+ printf("#I2: jvmtiError from %s: %d\n", jvmti_fn, err);
+ throw_exc(env, "Check #I2: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid to_module");
+ return FAILED;
+ }
+
+ // Check the pkg is not exported from baseModule to thisModule
+ printf("Check #C0:\n");
+ exported = is_exported_to(env, baseModule, pkg, thisModule, open);
+ if (exported != JNI_FALSE) {
+ sprintf(strbuf, "Check #C0: unexpected export of %s from base to this", pkg);
+ throw_exc(env, strbuf);
+ return FAILED;
+ }
+
+ // Add export of the pkg from baseModule to thisModule
+ printf("Check #C1:\n");
+ err = add_module_exports(baseModule, pkg, thisModule, open);
+ if (err != JVMTI_ERROR_NONE) {
+ printf("#C1: jvmtiError from %s: %d\n", jvmti_fn, err);
+ sprintf(strbuf, "Check #C1: error in add export of %s from base to this", pkg);
+ throw_exc(env, strbuf);
+ return FAILED;
+ }
+
+ // Check the pkg is exported from baseModule to thisModule
+ printf("Check #C2:\n");
+ exported = is_exported_to(env, baseModule, pkg, thisModule, open);
+ if (exported == JNI_FALSE) {
+ sprintf(strbuf, "Check #C2: failed to export %s from base to this", pkg);
+ throw_exc(env, strbuf);
+ return FAILED;
+ }
+
+ // Check the pkg is not exported to all modules
+ printf("Check #C3:\n");
+ exported = is_exported(env, baseModule, pkg, open);
+ if (exported != JNI_FALSE) {
+ sprintf(strbuf, "Check #C3: unexpected export of %s from base to all modules", pkg);
+ throw_exc(env, strbuf);
+ return FAILED;
+ }
+ return PASSED;
+}
+
+JNIEXPORT jint JNICALL
+Java_MyPackage_AddModuleExportsAndOpensTest_check(JNIEnv *env,
+ jclass cls,
+ jobject baseModule,
+ jobject thisModule) {
+ if (jvmti == NULL) {
+ throw_exc(env, "JVMTI client was not properly loaded!\n");
+ return FAILED;
+ }
+
+ printf("\n*** Checks for JVMTI AddModuleExports ***\n\n");
+ result = check_add_module_exports(env, cls, baseModule, thisModule, JNI_FALSE);
+ if (result != PASSED) {
+ return result;
+ }
+
+ printf("\n*** Checks for JVMTI AddModuleOpens ***\n\n");
+ result = check_add_module_exports(env, cls, baseModule, thisModule, JNI_TRUE);
+ if (result != PASSED) {
+ return result;
+ }
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleReads/MyPackage/AddModuleReadsTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 MyPackage;
+
+/**
+ * @test
+ * @summary Verifies the JVMTI AddModuleReads API
+ * @compile AddModuleReadsTest.java
+ * @run main/othervm/native -agentlib:AddModuleReadsTest MyPackage.AddModuleReadsTest
+ */
+
+import java.io.PrintStream;
+import java.lang.instrument.Instrumentation;
+import java.lang.reflect.Module;
+
+public class AddModuleReadsTest {
+
+ static {
+ try {
+ System.loadLibrary("AddModuleReadsTest");
+ } catch (UnsatisfiedLinkError ule) {
+ System.err.println("Could not load AddModuleReadsTest library");
+ System.err.println("java.library.path: "
+ + System.getProperty("java.library.path"));
+ throw ule;
+ }
+ }
+
+ native static int check(Module unnamed, Module base, Module instrument);
+
+ public static void main(String args[]) {
+ Module unnamed = AddModuleReadsTest.class.getClassLoader().getUnnamedModule();
+ Module base = Object.class.getModule();
+ Module instrument = Instrumentation.class.getModule();
+ int status = check(unnamed, base, instrument);
+ if (status != 0) {
+ throw new RuntimeException("Non-zero status returned from the agent: " + status);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleReads/libAddModuleReadsTest.c Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,265 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "jvmti.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef JNI_ENV_ARG
+
+#ifdef __cplusplus
+#define JNI_ENV_ARG(x, y) y
+#define JNI_ENV_PTR(x) x
+#else
+#define JNI_ENV_ARG(x,y) x, y
+#define JNI_ENV_PTR(x) (*x)
+#endif
+
+#endif
+
+#define TranslateError(err) "JVMTI error"
+
+#define PASSED 0
+#define FAILED 2
+
+static const char *EXC_CNAME = "java/lang/Exception";
+static const char* MOD_CNAME = "Ljava/lang/reflect/Module;";
+
+static jvmtiEnv *jvmti = NULL;
+static jint result = PASSED;
+
+static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved);
+
+JNIEXPORT
+jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
+ return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT
+jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) {
+ return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT
+jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
+ return JNI_VERSION_1_8;
+}
+
+static
+jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
+ jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti),
+ JVMTI_VERSION_9);
+ if (res != JNI_OK || jvmti == NULL) {
+ printf(" Error: wrong result of a valid call to GetEnv!\n");
+ return JNI_ERR;
+ }
+ return JNI_OK;
+}
+
+static
+jint throw_exc(JNIEnv *env, char *msg) {
+ jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME));
+
+ if (exc_class == NULL) {
+ printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME);
+ return -1;
+ }
+ return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg);
+}
+
+static
+jclass jlrM(JNIEnv *env) {
+ jclass cls = NULL;
+
+ cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME));
+ if (cls == NULL) {
+ printf(" Error in JNI FindClass: %s\n", MOD_CNAME);
+ }
+ return cls;
+}
+
+jmethodID
+get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) {
+ jmethodID method = NULL;
+
+ method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig);
+ if (method == NULL) {
+ printf(" Error in JNI GetMethodID %s with signature %s", name, sig);
+ }
+ return method;
+}
+
+static
+jboolean can_module_read(JNIEnv *env, jobject module, jobject to_module) {
+ static jmethodID mCanRead = NULL;
+ jboolean res = JNI_FALSE;
+
+ if (mCanRead == NULL) {
+ const char* sign = "(Ljava/lang/reflect/Module;)Z";
+ mCanRead = get_method(env, jlrM(env), "canRead", sign);
+ }
+ res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module),
+ mCanRead, to_module);
+ return res;
+}
+
+static
+jint check_add_module_reads(JNIEnv *env,
+ jclass cls,
+ jobject unnamedModule,
+ jobject baseModule,
+ jobject instrModule) {
+ jvmtiError err = JVMTI_ERROR_NONE;
+ jboolean can = JNI_FALSE;
+
+ // Add an invalid read edge from NULL module
+ printf("Check #N1:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, NULL, baseModule);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#N1: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #N1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL");
+ return FAILED;
+ }
+
+ // Add an invalid read edge to NULL module
+ printf("Check #N2:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, baseModule, NULL);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#N2: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #N2: failed to return JVMTI_ERROR_NULL_POINTER for to_module==NULL");
+ return FAILED;
+ }
+
+ // Add an invalid read edge from invalid module (cls)
+ printf("Check #I1:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, cls, baseModule);
+ if (err != JVMTI_ERROR_INVALID_MODULE) {
+ printf("#I1: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #I1: failed to return JVMTI_ERROR_INVALID_MODULE for module==cls");
+ return FAILED;
+ }
+
+ // Add an invalid read edge to invalid module (cls)
+ printf("Check #I2:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, baseModule, cls);
+ if (err != JVMTI_ERROR_INVALID_MODULE) {
+ printf("#I2: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #I2: failed to return JVMTI_ERROR_INVALID_MODULE for to_module==cls");
+ return FAILED;
+ }
+
+ // Check the edge baseModule->instrModule is absent
+ printf("Check #C0:\n");
+ can = can_module_read(env, baseModule, instrModule);
+ if (can != JNI_FALSE) {
+ throw_exc(env, "Check #C0: read edge from base to instr is unexpected");
+ return FAILED;
+ }
+
+ // Add read edge baseModule->instrModule
+ printf("Check #C1:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, baseModule, instrModule);
+ if (err != JVMTI_ERROR_NONE) {
+ printf("#C1: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #C1: error in add reads from base to instr");
+ return FAILED;
+ }
+
+ // Check the read edge baseModule->instrModule is present now
+ printf("Check #C2:\n");
+ can = can_module_read(env, baseModule, instrModule);
+ if (can == JNI_FALSE) {
+ throw_exc(env, "Check #C2: failed to add reads from base to instr");
+ return FAILED;
+ }
+
+ // Check the read edge baseModule->unnamedModule is absent
+ printf("Check #C3:\n");
+ can = can_module_read(env, baseModule, unnamedModule);
+ if (can != JNI_FALSE) {
+ throw_exc(env, "Check #C3: got unexpected read edge from base to unnamed");
+ return FAILED;
+ }
+
+ // Add read edge baseModule->unnamedModule
+ printf("Check #C4:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, baseModule, unnamedModule);
+ if (err != JVMTI_ERROR_NONE) {
+ printf("#C4: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #C4: failed to ignore adding read edge from base to unnamed");
+ return FAILED;
+ }
+
+ // Check the read edge baseModule->unnamedModule is present now
+ printf("Check #C5:\n");
+ can = can_module_read(env, baseModule, unnamedModule);
+ if (can == JNI_FALSE) {
+ throw_exc(env, "Check #C5: did not get expected read edge from base to unnamed");
+ return FAILED;
+ }
+
+ // Check the read edge unnamedModule->instrModule is absent
+ printf("Check #C6:\n");
+ can = can_module_read(env, unnamedModule, instrModule);
+ if (can == JNI_FALSE) {
+ throw_exc(env, "Check #C6: did not get expected read edge from unnamed to instr");
+ return FAILED;
+ }
+
+ // Add read edge unnamedModule->instrModule
+ printf("Check #C7:\n");
+ err = (*jvmti)->AddModuleReads(jvmti, unnamedModule, instrModule);
+ if (err != JVMTI_ERROR_NONE) {
+ printf("#C7: jvmtiError from AddModuleReads: %d\n", err);
+ throw_exc(env, "Check #C7: failed to ignore adding read edge from unnamed to instr");
+ return FAILED;
+ }
+ return PASSED;
+}
+
+JNIEXPORT jint JNICALL
+Java_MyPackage_AddModuleReadsTest_check(JNIEnv *env,
+ jclass cls,
+ jobject unnamedModule,
+ jobject baseModule,
+ jobject instrModule) {
+ if (jvmti == NULL) {
+ throw_exc(env, "JVMTI client was not properly loaded!\n");
+ return FAILED;
+ }
+
+ printf("\n*** Checks for JVMTI AddModuleReads ***\n\n");
+ result = check_add_module_reads(env, cls, unnamedModule, baseModule, instrModule);
+ if (result != PASSED) {
+ return result;
+ }
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/MyPackage/AddModuleUsesAndProvidesTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 MyPackage;
+
+/**
+ * @test
+ * @summary Basic test for JVMTI AddModuleUses and AddModuleProvides
+ * @build java.base/java.lang.TestProvider
+ * java.base/jdk.internal.test.TestProviderImpl
+ * @compile AddModuleUsesAndProvidesTest.java
+ * @run main/othervm/native -agentlib:AddModuleUsesAndProvidesTest MyPackage.AddModuleUsesAndProvidesTest
+ */
+
+import java.io.PrintStream;
+import java.lang.TestProvider;
+import java.lang.reflect.Module;
+
+public class AddModuleUsesAndProvidesTest {
+
+ static {
+ try {
+ System.loadLibrary("AddModuleUsesAndProvidesTest");
+ } catch (UnsatisfiedLinkError ule) {
+ System.err.println("Could not load AddModuleUsesAndProvidesTest library");
+ System.err.println("java.library.path: "
+ + System.getProperty("java.library.path"));
+ throw ule;
+ }
+ }
+
+ native static int checkUses(Module baseModule, Class<?> service);
+ native static int checkProvides(Module baseModule, Class<?> service, Class<?> serviceImpl);
+
+ public static void main(String args[]) throws Exception {
+ Module baseModule = Object.class.getModule();
+ Class<?> service = TestProvider.class;
+ Class<?> serviceImpl = Class.forName("jdk.internal.test.TestProviderImpl");
+
+ System.out.println("\n*** Checks for JVMTI AddModuleUses ***\n");
+
+ int status = checkUses(baseModule, service);
+ if (status != 0) {
+ throw new RuntimeException("Non-zero status returned from the agent: " + status);
+ }
+
+ System.out.println("\n*** Checks for JVMTI AddModuleProvides ***\n");
+
+ System.out.println("Check #PC1:");
+ if (TestProvider.providers().iterator().hasNext()) {
+ throw new RuntimeException("Check #PC1: Unexpectedly service is provided");
+ }
+
+ status = checkProvides(baseModule, service, serviceImpl);
+ if (status != 0) {
+ throw new RuntimeException("Non-zero status returned from the agent: " + status);
+ }
+
+ System.out.println("Check #PC3:");
+ if (!TestProvider.providers().iterator().hasNext()) {
+ throw new RuntimeException("Check #PC3: Unexpectedly service is not provided");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/MyPackage/java.base/java/lang/TestProvider.java Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 java.lang;
+
+import java.util.ServiceLoader;
+
+public interface TestProvider {
+ public static Iterable<TestProvider> providers() {
+ return ServiceLoader.load(TestProvider.class);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/MyPackage/java.base/jdk/internal/test/TestProviderImpl.java Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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 jdk.internal.test;
+
+import java.lang.TestProvider;
+
+public class TestProviderImpl implements TestProvider {
+ public TestProviderImpl() { }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/AddModuleUsesAndProvides/libAddModuleUsesAndProvidesTest.c Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,280 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "jvmti.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef JNI_ENV_ARG
+
+#ifdef __cplusplus
+#define JNI_ENV_ARG(x, y) y
+#define JNI_ENV_PTR(x) x
+#else
+#define JNI_ENV_ARG(x,y) x, y
+#define JNI_ENV_PTR(x) (*x)
+#endif
+
+#endif
+
+#define TranslateError(err) "JVMTI error"
+
+#define PASSED 0
+#define FAILED 2
+
+static const char *EXC_CNAME = "java/lang/Exception";
+static const char* MOD_CNAME = "Ljava/lang/reflect/Module;";
+
+static jvmtiEnv *jvmti = NULL;
+static jint result = PASSED;
+
+static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved);
+
+JNIEXPORT
+jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
+ return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT
+jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) {
+ return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT
+jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
+ return JNI_VERSION_1_8;
+}
+
+static
+jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
+ jint res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti),
+ JVMTI_VERSION_9);
+ if (res != JNI_OK || jvmti == NULL) {
+ printf(" Error: wrong result of a valid call to GetEnv!\n");
+ return JNI_ERR;
+ }
+
+ return JNI_OK;
+}
+
+static
+jint throw_exc(JNIEnv *env, char *msg) {
+ jclass exc_class = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, EXC_CNAME));
+
+ if (exc_class == NULL) {
+ printf("throw_exc: Error in FindClass(env, %s)\n", EXC_CNAME);
+ return -1;
+ }
+ return JNI_ENV_PTR(env)->ThrowNew(JNI_ENV_ARG(env, exc_class), msg);
+}
+
+static
+jclass jlrM(JNIEnv *env) {
+ jclass cls = NULL;
+
+ cls = JNI_ENV_PTR(env)->FindClass(JNI_ENV_ARG(env, MOD_CNAME));
+ if (cls == NULL) {
+ printf(" Error in JNI FindClass: %s\n", MOD_CNAME);
+ }
+ return cls;
+}
+
+jmethodID
+get_method(JNIEnv *env, jclass clazz, const char * name, const char *sig) {
+ jmethodID method = NULL;
+
+ method = JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG(env, clazz), name, sig);
+ if (method == NULL) {
+ printf(" Error in JNI GetMethodID %s with signature %s", name, sig);
+ }
+ return method;
+}
+
+static
+jboolean can_use_service(JNIEnv *env, jobject module, jclass service) {
+ static jmethodID mCanUse = NULL;
+ jboolean res = JNI_FALSE;
+
+ if (mCanUse == NULL) {
+ const char* sign = "(Ljava/lang/Class;)Z";
+ mCanUse = get_method(env, jlrM(env), "canUse", sign);
+ }
+ res = JNI_ENV_PTR(env)->CallBooleanMethod(JNI_ENV_ARG(env, module),
+ mCanUse, service);
+ return res;
+}
+
+JNIEXPORT jint JNICALL
+Java_MyPackage_AddModuleUsesAndProvidesTest_checkUses(JNIEnv *env,
+ jclass cls,
+ jobject baseModule,
+ jclass service) {
+ jvmtiError err = JVMTI_ERROR_NONE;
+ jboolean used = JNI_FALSE;
+
+ // Add a service to use to NULL module
+ printf("Check #UN1:\n");
+ err = (*jvmti)->AddModuleUses(jvmti, NULL, service);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#UN1: jvmtiError from AddModuleUses: %d\n", err);
+ throw_exc(env, "Check #UN1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL");
+ return FAILED;
+ }
+
+ // Add NULL service to use to baseModule
+ printf("Check #UN2:\n");
+ err = (*jvmti)->AddModuleUses(jvmti, baseModule, NULL);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#UN2: jvmtiError from AddModuleUses: %d\n", err);
+ throw_exc(env, "Check #UN2: failed to return JVMTI_ERROR_NULL_POINTER for service==NULL");
+ return FAILED;
+ }
+
+ // Add service to use to invalid module (cls)
+ printf("Check #UI1:\n");
+ err = (*jvmti)->AddModuleUses(jvmti, (jobject)cls, service);
+ if (err != JVMTI_ERROR_INVALID_MODULE) {
+ printf("#UI1: jvmtiError from AddModuleUses: %d\n", err);
+ throw_exc(env, "Check #UI1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module");
+ return FAILED;
+ }
+
+ // Add invalid service (thisModule) to use to baseModule
+ printf("Check #UI2:\n");
+ err = (*jvmti)->AddModuleUses(jvmti, baseModule, baseModule);
+ if (err != JVMTI_ERROR_INVALID_CLASS) {
+ printf("#UI2: jvmtiError from AddModuleUses: %d\n", err);
+ throw_exc(env, "Check #UI2: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid service");
+ return FAILED;
+ }
+
+ // Check if the service can not be used
+ printf("Check #UC1:\n");
+ used = can_use_service(env, baseModule, service);
+ if (used != JNI_FALSE) {
+ throw_exc(env, "Check #UC1: unexpected use of service");
+ return FAILED;
+ }
+
+ // Add uses of a correct service
+ printf("Check #UC2:\n");
+ err = (*jvmti)->AddModuleUses(jvmti, baseModule, service);
+ if (err != JVMTI_ERROR_NONE) {
+ printf("#UC2: jvmtiError from AddModuleUses: %d\n", err);
+ throw_exc(env, "Check #UC2: got unexpected JVMTI error");
+ return FAILED;
+ }
+
+ // Check if the service can not be used
+ printf("Check #UC3:\n");
+ used = can_use_service(env, baseModule, service);
+ if (used == JNI_FALSE) {
+ throw_exc(env, "Check #UC3: service can not be used unexpectedly");
+ return FAILED;
+ }
+ fflush(0);
+ return PASSED;
+}
+
+JNIEXPORT jint JNICALL
+Java_MyPackage_AddModuleUsesAndProvidesTest_checkProvides(JNIEnv *env,
+ jclass cls,
+ jobject baseModule,
+ jclass service,
+ jclass serviceImpl) {
+ jvmtiError err = JVMTI_ERROR_NONE;
+ jboolean provided = JNI_FALSE;
+
+ // Add provides to NULL module
+ printf("Check #PN1:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, NULL, service, serviceImpl);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#PN1: jvmtiError from AddModuleProvides: %d\n", err);
+ throw_exc(env, "Check #PN1: failed to return JVMTI_ERROR_NULL_POINTER for module==NULL");
+ return FAILED;
+ }
+
+ // Add provides with NULL service
+ printf("Check #PN2:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, baseModule, NULL, serviceImpl);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#PN2: jvmtiError from AddModuleProvides: %d\n", err);
+ throw_exc(env, "Check #PN2: failed to return JVMTI_ERROR_NULL_POINTER for service==NULL");
+ return FAILED;
+ }
+
+ // Add provides with NULL serviceImpl
+ printf("Check #PN3:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, NULL);
+ if (err != JVMTI_ERROR_NULL_POINTER) {
+ printf("#PN3: jvmtiError from AddModuleProvides: %d\n", err);
+ throw_exc(env, "Check #PN3: failed to return JVMTI_ERROR_NULL_POINTER for serviceImpl==NULL");
+ return FAILED;
+ }
+
+ // Add provides to invalid module (cls)
+ printf("Check #PI1:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, (jobject)cls, service, serviceImpl);
+ if (err != JVMTI_ERROR_INVALID_MODULE) {
+ printf("#PI1: jvmtiError from AddModuleProvides: %d\n", err);
+ throw_exc(env, "Check #PI1: did not get expected JVMTI_ERROR_INVALID_MODULE for invalid module");
+ return FAILED;
+ }
+
+ // Add provides with invalid service (baseModule)
+ printf("Check #PI2:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, baseModule, baseModule, serviceImpl);
+ if (err != JVMTI_ERROR_INVALID_CLASS) {
+ printf("#PI2: jvmtiError from AddModuleProvides: %d\n", err);
+ throw_exc(env, "Check #PI2: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid service");
+ return FAILED;
+ }
+
+ // Add provides with invalid serviceImpl (baseModule)
+ printf("Check #PI3:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, baseModule);
+ if (err != JVMTI_ERROR_INVALID_CLASS) {
+ printf("#PI3: jvmtiError from AddModuleProvides: %d\n", err);
+ throw_exc(env, "Check #PI3: did not get expected JVMTI_ERROR_INVALID_CLASS for invalid serviceImpl");
+ return FAILED;
+ }
+
+ // Add provides to baseModule with correct service and serviceImpl
+ printf("Check #PC2:\n");
+ err = (*jvmti)->AddModuleProvides(jvmti, baseModule, service, serviceImpl);
+ if (err != JVMTI_ERROR_NONE) {
+ printf("#PC2: jvmtiError from AddModuleExports: %d\n", err);
+ throw_exc(env, "Check #PC2: error in add provides to baseModule with correct service and serviceImpl");
+ return FAILED;
+ }
+ fflush(0);
+ return PASSED;
+}
+
+#ifdef __cplusplus
+}
+#endif
--- a/hotspot/test/serviceability/jvmti/GetModulesInfo/JvmtiGetAllModulesTest.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/serviceability/jvmti/GetModulesInfo/JvmtiGetAllModulesTest.java Wed Jul 05 22:31:37 2017 +0200
@@ -72,8 +72,7 @@
// Load a new named module
ModuleDescriptor descriptor
- = new ModuleDescriptor.Builder(MY_MODULE_NAME)
- .build();
+ = ModuleDescriptor.module(MY_MODULE_NAME).build();
ModuleFinder finder = finderOf(descriptor);
ClassLoader loader = new ClassLoader() {};
Configuration parent = Layer.boot().configuration();
--- a/hotspot/test/serviceability/sa/TestInstanceKlassSize.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/serviceability/sa/TestInstanceKlassSize.java Wed Jul 05 22:31:37 2017 +0200
@@ -46,6 +46,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @compile -XDignore.symbol.file=true
+ * --add-modules=jdk.hotspot.agent
* --add-exports=jdk.hotspot.agent/sun.jvm.hotspot=ALL-UNNAMED
* --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.utilities=ALL-UNNAMED
* --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.oops=ALL-UNNAMED
--- a/hotspot/test/serviceability/sa/TestInstanceKlassSizeForInterface.java Tue Nov 29 21:58:29 2016 -0800
+++ b/hotspot/test/serviceability/sa/TestInstanceKlassSizeForInterface.java Wed Jul 05 22:31:37 2017 +0200
@@ -39,6 +39,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* @compile -XDignore.symbol.file=true
+ * --add-modules=jdk.hotspot.agent
* --add-exports=jdk.hotspot.agent/sun.jvm.hotspot=ALL-UNNAMED
* --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.utilities=ALL-UNNAMED
* --add-exports=jdk.hotspot.agent/sun.jvm.hotspot.oops=ALL-UNNAMED
--- a/make/CompileJavaModules.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/CompileJavaModules.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -356,10 +356,6 @@
################################################################################
-jdk.jshell_ADD_JAVAC_FLAGS := -Xlint:-exports
-
-################################################################################
-
jdk.hotspot.agent_ADD_JAVAC_FLAGS := $(DISABLE_WARNINGS),-overrides
jdk.hotspot.agent_COPY := .gif .png sa.js .properties
--- a/make/CreateHgtipFiles.gmk Tue Nov 29 21:58:29 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-default: all
-
-include $(SPEC)
-include MakeBase.gmk
-
-define SetupCreateHgtip
-
- $$(strip $1)/$(HGTIP_FILENAME): FRC
- $(HG) tip --repository $$(strip $1) --template '{node|short}\n' > $$@.tmp
- if [ ! -f $$@ ] || [ "`$(CAT) $$@`" != "`$(CAT) $$@.tmp`" ]; then \
- $(MV) $$@.tmp $$@ ; \
- else \
- $(RM) $$@.tmp ; \
- fi
-
- TARGETS += $$(strip $1)/$(HGTIP_FILENAME)
-
-endef
-
-# Only try to create the tips if finding an actual hg repository. This will be
-# false if building from a source bundle.
-$(foreach r, $(call FindAllReposAbs), \
- $(if $(wildcard $r/.hg), $(eval $(call SetupCreateHgtip, $r))) \
-)
-
-all: $(TARGETS)
-
-FRC:
-
-.PHONY: all
--- a/make/GensrcModuleInfo.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/GensrcModuleInfo.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -60,8 +60,8 @@
################################################################################
-# Name of data file. Keep module-info.java.ext until javafx has changed.
-MOD_FILENAME := module-info.java.extra module-info.java.ext
+# Name of modification file.
+MOD_FILENAME := module-info.java.extra
# Construct all possible src directories for the module.
MODULE_CLASSES_DIRS := $(call FindModuleSrcDirs, $(MODULE))
@@ -74,74 +74,24 @@
# Only make this call if modification files are found for this module
ALL_MODULES := $(call FindAllModules)
- # Read the contents of all the files into a variable. Replace space with / to
- # let space represent new lines in the variable as $(shell) normalizes all
- # whitespace.
- $(foreach f, $(MOD_FILES), \
- $(eval MOD_FILE_CONTENTS += $(shell $(GREP) -v -e ".\*" -e "//" $f | $(TR) ' ' '/')))
-
- # Separate the modifications into qualified exports and the rest
- MODS_QUALIFIED_EXPORTS := $(call containing, /to/, $(MOD_FILE_CONTENTS))
- MODS_REST := $(filter-out $(MODS_QUALIFIED_EXPORTS), $(MOD_FILE_CONTENTS))
-
- # Filter the contents for modules that are actually being built
- ALL_MODULES_FILTER := $(addprefix %/, $(addsuffix ;, $(ALL_MODULES)))
- MODIFICATIONS := $(filter $(ALL_MODULES_FILTER), $(MODS_QUALIFIED_EXPORTS)) \
- $(MODS_REST)
-
- # Returns non empty if the package exists in the current module
- # Param 1 - Name of package with dots
- PackageExists = \
- $(strip $(wildcard $(addsuffix $(subst .,/,/$(strip $1)), \
- $(MODULE_CLASSES_DIRS) \
- $(addsuffix /$(MODULE), $(IMPORT_MODULES_CLASSES)) \
- $(JDK_OUTPUTDIR)/modules/$(MODULE) \
- )))
-
- # Convert the modification lines into arguments for the modification tool.
- # Filter out modifications for non existing to-modules.
- $(foreach line, $(MODIFICATIONS), \
- $(eval split_line := $(subst /,$(SPACE),$(line))) \
- $(eval command := $(word 1, $(split_line))) \
- $(if $(filter $(command), exports), \
- $(eval package := $(patsubst %;,%,$(word 2, $(split_line)))) \
- $(if $(call PackageExists, $(package)), \
- $(eval to_module := $(patsubst %;,%,$(word 4, $(split_line)))) \
- $(if $(to_module), \
- $(eval ARGS += -$(command) $(package)/$(to_module)) \
- , \
- $(eval ARGS += -$(command) $(package)) \
- ) \
- ) \
- , \
- $(if $(filter $(command), provides), \
- $(eval provider := $(patsubst %;,%,$(word 2, $(split_line)))) \
- $(eval class := $(patsubst %;,%,$(word 4, $(split_line)))) \
- $(eval ARGS += -$(command) $(provider)/$(class)) \
- , \
- $(error A module-info.extra in $(MODULE) contains invalid command $(command)) \
- ) \
- ) \
- )
-
- ifneq ($(ARGS), )
- $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/module-info.java: \
- $(firstword $(call FindAllModuleInfos, $(MODULE))) \
- $(BUILD_TOOLS_JDK) \
- $(call DependOnVariable, ARGS)
+ $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/module-info.java: \
+ $(firstword $(call FindAllModuleInfos, $(MODULE))) \
+ $(BUILD_TOOLS_JDK) \
+ $(MOD_FILES) \
+ $(call DependOnVariable, ALL_MODULES)
$(MKDIR) -p $(@D)
$(RM) $@ $@.tmp
- $(TOOL_GENMODULEINFOSOURCE) $(ARGS) -o $@.tmp $<
+ $(TOOL_GENMODULEINFOSOURCE) -o $@.tmp \
+ --source-file $< \
+ --modules $(call CommaList, $(ALL_MODULES)) \
+ $(MOD_FILES)
$(MV) $@.tmp $@
- TARGETS += $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/module-info.java
- endif
+ TARGETS += $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/module-info.java
-endif
-
-# If no modifications are found for this module, remove any module-info.java
-# created by a previous build since that is no longer valid.
-ifeq ($(MODIFICATIONS), )
+else
+ # If no modifications are found for this module, remove any module-info.java
+ # created by a previous build since that is no longer valid.
ifneq ($(wildcard $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/module-info.java), )
$(shell $(RM) $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/module-info.java)
endif
--- a/make/Images.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/Images.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -48,7 +48,8 @@
JDK_MODULES += $(ALL_MODULES)
# Compact builds have additional modules
-COMPACT1_EXTRA_MODULES := jdk.localedata jdk.crypto.pkcs11 jdk.crypto.ec
+COMPACT1_EXTRA_MODULES := jdk.localedata jdk.crypto.pkcs11 jdk.crypto.ec \
+ jdk.unsupported
COMPACT2_EXTRA_MODULES := jdk.xml.dom jdk.httpserver
COMPACT3_EXTRA_MODULES := java.smartcardio jdk.management \
jdk.naming.dns jdk.naming.rmi jdk.sctp jdk.security.auth
@@ -64,47 +65,9 @@
JRE_COMPACT3_MODULES_LIST := $(call CommaList, $(JRE_COMPACT3_MODULES))
################################################################################
-# Release file
BASE_RELEASE_FILE := $(JDK_OUTPUTDIR)/release
-# Common way to emit a line into the release or info file
-define info-file-item # name value
- $(PRINTF) '%s="%s"\n' $1 $2 >> $@
-endef
-
-# Param 1 - The file containing the MODULES list
-define create-info-file
- $(if $(JDK_ARCH_ABI_PROP_NAME), \
- $(call info-file-item, "SUN_ARCH_ABI", "$(JDK_ARCH_ABI_PROP_NAME)"))
- $(call info-file-item, "SOURCE", "$(strip $(ALL_SOURCE_TIPS))")
-endef
-
-# Param 1 - The file containing the MODULES list
-define prepare-info-file
- $(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
- $(MKDIR) -p $(@D)
- $(RM) $@
-endef
-
-define info-file
- $(call prepare-info-file)
- $(call create-info-file)
-endef
-
-# Create a variable dependency file common for all release info files.
-INFO_FILE_VARDEPS := $(call DependOnVariable, create-info-file)
-
-ALL_SOURCE_TIPS = $(shell \
- if [ -f $(SUPPORT_OUTPUTDIR)/source_tips ] ; then \
- $(CAT) $(SUPPORT_OUTPUTDIR)/source_tips ; \
- fi)
-
-$(BASE_RELEASE_FILE): $(INFO_FILE_VARDEPS) $(SUPPORT_OUTPUTDIR)/source_tips
- $(info-file)
-
-################################################################################
-
JMODS := $(wildcard $(IMAGES_OUTPUTDIR)/jmods/*.jmod)
# Use this file inside the image as target for make rule
@@ -124,7 +87,8 @@
/jdk.localedata/** \
#
-JLINK_TOOL := $(JLINK) --module-path $(IMAGES_OUTPUTDIR)/jmods \
+JLINK_TOOL := $(JLINK) -J-Djlink.debug=true \
+ --module-path $(IMAGES_OUTPUTDIR)/jmods \
--endian $(OPENJDK_BUILD_CPU_ENDIAN) \
--release-info $(BASE_RELEASE_FILE) \
--order-resources=$(call CommaList, $(JLINK_ORDER_RESOURCES)) \
@@ -400,16 +364,6 @@
JDK_TARGETS += $(COPY_SAMPLES)
################################################################################
-# jrt-fs.jar
-
-$(eval $(call SetupCopyFiles,COPY_JRTFS_JAR, \
- SRC := $(SUPPORT_OUTPUTDIR), \
- DEST := $(JDK_IMAGE_DIR), \
- FILES := $(SUPPORT_OUTPUTDIR)/jrt-fs.jar))
-
-JDK_TARGETS += $(COPY_JRTFS_JAR)
-
-################################################################################
# Code coverage data files
ifeq ($(GCOV_ENABLED), true)
--- a/make/Init.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/Init.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -157,7 +157,7 @@
# Do not let make delete spec files even if aborted while doing a reconfigure
.PRECIOUS: $(SPECS)
- # Unless reconfigure is explicitely called, let all main targets depend on
+ # Unless reconfigure is explicitly called, let all main targets depend on
# the spec files to be up to date.
ifeq ($(findstring reconfigure, $(INIT_TARGETS)), )
$(MAIN_TARGETS): $(SPECS)
@@ -278,7 +278,7 @@
# MAKEOVERRIDES is automatically set and propagated by Make to sub-Make calls.
# We need to clear it of the init-specific variables. The user-specified
- # variables are explicitely propagated using $(USER_MAKE_VARS).
+ # variables are explicitly propagated using $(USER_MAKE_VARS).
main: MAKEOVERRIDES :=
main: $(INIT_TARGETS)
--- a/make/Javadoc.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/Javadoc.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -33,7 +33,7 @@
# Allow custom to overwrite.
JAVADOC_SOURCE_DIRS = \
$(SUPPORT_OUTPUTDIR)/gensrc/* \
- $(if $(IMPORT_MODULES_SRC), $(IMPORT_MODULES_SRC)/*) \
+ $(addsuffix /*, $(IMPORT_MODULES_SRC)) \
$(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS)/classes \
$(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS_TYPE)/classes \
$(JDK_TOPDIR)/src/*/share/classes \
--- a/make/JrtfsJar.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/JrtfsJar.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -65,7 +65,7 @@
$(eval $(call SetupJarArchive,BUILD_JRTFS_JAR, \
DEPENDENCIES := $(BUILD_JRTFS) $(COPY_JIMAGE_SERVICE_PROVIDER), \
SRCS := $(SUPPORT_OUTPUTDIR)/jrtfs_classes, \
- JAR := $(SUPPORT_OUTPUTDIR)/jrt-fs.jar, \
+ JAR := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/jrt-fs.jar, \
MANIFEST := $(SUPPORT_OUTPUTDIR)/java-main-manifest.mf, \
))
--- a/make/Main.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/Main.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -284,16 +284,11 @@
################################################################################
# Images targets
-# Stores the tips for each repository. This file is be used when constructing
-# the jdk image and can be used to track the exact sources used to build that
-# image.
-source-tips: $(SUPPORT_OUTPUTDIR)/source_tips
-$(SUPPORT_OUTPUTDIR)/source_tips: FRC
- $(call MakeDir, $(@D))
- $(call GetSourceTips)
+store-source-revision:
+ +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f SourceRevision.gmk store-source-revision)
-create-hgtip-files:
- +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateHgtipFiles.gmk)
+create-source-revision-tracker:
+ +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f SourceRevision.gmk create-source-revision-tracker)
BOOTCYCLE_TARGET := product-images
bootcycle-images:
@@ -329,13 +324,16 @@
mac-bundles-jdk:
+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f MacBundles.gmk)
+release-file:
+ +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ReleaseFile.gmk)
+
exploded-image-optimize:
+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ExplodedImageOptimize.gmk)
-ALL_TARGETS += source-tips create-hgtip-files bootcycle-images zip-security \
+ALL_TARGETS += store-source-revision create-source-revision-tracker bootcycle-images zip-security \
zip-source jrtfs-jar jdk-image jre-image \
symbols-image profiles mac-bundles-jdk \
- exploded-image-optimize
+ release-file exploded-image-optimize
################################################################################
# Docs targets
@@ -608,12 +606,12 @@
jdk.jdeps-gendata: java rmic
- # Declare dependencies between jmod targets. Only java.base jmod needs access
- # to the other jmods to be built.
+ # Declare dependencies between jmod targets.
+ # java.base jmod needs jrt-fs.jar and access to the other jmods to be built.
# When creating a BUILDJDK, we don't need to add hashes to java.base, thus
# we don't need to depend on all other jmods
ifneq ($(CREATING_BUILDJDK), true)
- java.base-jmod: $(filter-out java.base-jmod \
+ java.base-jmod: jrtfs-jar $(filter-out java.base-jmod \
$(addsuffix -jmod, $(call FindAllUpgradeableModules)), $(JMOD_TARGETS))
endif
@@ -684,10 +682,12 @@
java.base-jmod jdk-image jre-image: generate-link-opt-data
endif
- jdk-image: jmods zip-source source-tips demos samples jrtfs-jar
- jre-image: jmods source-tips jrtfs-jar
+ release-file: create-source-revision-tracker
- profiles: jmods zip-source source-tips jrtfs-jar
+ jdk-image: jmods zip-source demos samples release-file
+ jre-image: jmods release-file
+
+ profiles: jmods release-file
mac-bundles-jdk: jdk-image jre-image
@@ -794,7 +794,7 @@
# The "exploded image" is a locally runnable JDK in $(BUILD_OUTPUT)/jdk.
exploded-image-base: $(ALL_MODULES)
-exploded-image: exploded-image-base
+exploded-image: exploded-image-base release-file
# When cross compiling, no need to optimize the exploded image since it won't
# be runnable on the host platform anyway.
ifneq ($(COMPILE_TYPE), cross)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/ReleaseFile.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,86 @@
+#
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+default: all
+
+include $(SPEC)
+include MakeBase.gmk
+
+################################################################################
+# This makefile generates the "release" file into the exploded image. Jlink is
+# then responsible for using this as the base for release files in each linked
+# image.
+#
+################################################################################
+
+BASE_RELEASE_FILE := $(JDK_OUTPUTDIR)/release
+
+# Common way to emit a line into the release or info file
+define info-file-item # name value
+ $(PRINTF) '%s="%s"\n' $1 $2 >> $@
+endef
+
+# Param 1 - The file containing the MODULES list
+define create-info-file
+ $(if $(JDK_ARCH_ABI_PROP_NAME), \
+ $(call info-file-item, "SUN_ARCH_ABI", "$(JDK_ARCH_ABI_PROP_NAME)"))
+ $(call info-file-item, "SOURCE", "$(strip $(SOURCE_REVISION))")
+endef
+
+# Param 1 - The file containing the MODULES list
+define prepare-info-file
+ $(call LogInfo, Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@))
+ $(call MakeDir, $(@D))
+ $(RM) $@
+endef
+
+define info-file
+ $(call prepare-info-file)
+ $(call create-info-file)
+endef
+
+# Create a variable dependency file common for all release info files.
+INFO_FILE_VARDEPS := $(call DependOnVariable, create-info-file)
+
+SOURCE_REVISION = $(shell \
+ if [ -f $(SOURCE_REVISION_TRACKER) ] ; then \
+ $(CAT) $(SOURCE_REVISION_TRACKER) ; \
+ fi)
+
+# The SOURCE_REVISION_TRACKER file may not exist. Only depend on it if it does.
+$(BASE_RELEASE_FILE): $(INFO_FILE_VARDEPS) $(wildcard $(SOURCE_REVISION_TRACKER))
+ $(info-file)
+
+TARGETS += $(BASE_RELEASE_FILE)
+
+################################################################################
+
+$(eval $(call IncludeCustomExtension, , ReleaseFile.gmk))
+
+################################################################################
+
+all: $(TARGETS)
+
+.PHONY: all default
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/SourceRevision.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -0,0 +1,131 @@
+#
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+default: all
+
+include $(SPEC)
+include MakeBase.gmk
+
+################################################################################
+# Keep track of what source revision is used to create the build, by creating
+# a tracker file in the output directory. This tracker file is included in the
+# image, and can be used to recreate the source revision used.
+#
+# We're either building directly from a mercurial forest, and if so, use the
+# current revision from mercurial. Otherwise, we are building from a source
+# bundle. As a part of creating this source bundle, the current mercurial
+# revisions of all repos will be stored in a file in the top dir, which is then
+# used when creating the tracker file.
+
+STORED_SOURCE_REVISION := $(TOPDIR)/.src-rev
+
+# Are we using mercurial?
+ifneq ($(and $(HG), $(wildcard $(TOPDIR)/.hg)), )
+
+ # Verify that the entire forest is consistent
+ $(foreach repo, $(call FindAllReposRel), \
+ $(if $(wildcard $(TOPDIR)/$(repo)/.hg),, \
+ $(error Inconsistent revision control: $(repo) is missing .hg directory)) \
+ )
+
+ # Replace "." with "_top" and "/" with "-"
+ MakeFilenameFromRepo = \
+ $(strip $(subst .,top, $(subst /,-, $1)))
+
+ ################################################################################
+ # SetupGetRevisionForRepo defines a make rule for creating a file containing
+ # the name of the repository and the output of "hg id" for that repository.
+ # Argument 1 is the relative path to the repository from the top dir.
+ #
+ SetupGetRevisionForRepo = $(NamedParamsMacroTemplate)
+ define SetupGetRevisionForRepoBody
+ $1_REPO_PATH := $$(TOPDIR)/$$(strip $1)
+ $1_FILENAME := $$(call MakeFilenameFromRepo, $1)
+
+ $$(SUPPORT_OUTPUTDIR)/src-rev/$$($1_FILENAME): FRC
+ $$(call MakeDir, $$(@D))
+ $$(ECHO) $$(strip $1):`$$(HG) id -i --repository $$($1_REPO_PATH)` > $$@
+
+ REPO_REVISIONS += $$(SUPPORT_OUTPUTDIR)/src-rev/$$($1_FILENAME)
+ endef
+
+ # Setup rules for all repos. This makes sure all the "hg id" calls are made
+ # in parallel.
+ $(foreach repo, $(call FindAllReposRel), \
+ $(eval $(call SetupGetRevisionForRepo, $(repo))) \
+ )
+
+ # Create a complete source revision output file from all repos
+ # Param 1: The output file
+ define CreateSourceRevisionFile
+ $1: $$(REPO_REVISIONS)
+ $$(call MakeDir, $$(@D))
+ $$(ECHO) `$$(CAT) $$(REPO_REVISIONS)` > $$@.tmp
+ if [ ! -f $$@ ] || [ "`$$(CAT) $$@`" != "`$$(CAT) $$@.tmp`" ]; then \
+ $$(MV) $$@.tmp $$@ ; \
+ else \
+ $$(RM) $$@.tmp ; \
+ fi
+ endef
+
+ $(eval $(call CreateSourceRevisionFile, $(STORED_SOURCE_REVISION)))
+
+ store-source-revision: $(STORED_SOURCE_REVISION)
+
+ $(eval $(call CreateSourceRevisionFile, $(SOURCE_REVISION_TRACKER)))
+
+ create-source-revision-tracker: $(SOURCE_REVISION_TRACKER)
+
+else
+ # Not using HG
+
+ ifneq ($(wildcard $(STORED_SOURCE_REVISION)), )
+ # We have a stored source revision (.src-rev)
+
+ store-source-revision:
+ $(call LogWarn, Warning: No mercurial configuration present, not updating .src-rev)
+
+ $(SOURCE_REVISION_TRACKER): $(STORED_SOURCE_REVISION)
+ $(install-file)
+
+ create-source-revision-tracker: $(SOURCE_REVISION_TRACKER)
+ else
+ # We don't have a stored source revision. Can't do anything, really.
+
+ store-source-revision:
+ $(call LogWarn, Error: No mercurial configuration present, cannot create .src-rev)
+ exit 2
+
+ create-source-revision-tracker:
+ $(call LogWarn, Warning: No mercurial configuration present and no .src-rev)
+ endif
+
+endif
+
+all: store-source-revision create-source-revision-tracker
+
+FRC: # Force target
+
+.PHONY: all store-source-revision create-source-revision-tracker
--- a/make/common/MakeBase.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/common/MakeBase.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -337,44 +337,21 @@
endif # HAS_FILE_FUNCTION
################################################################################
-# The source tips can come from the Mercurial repository, or in the files
-# $(HGTIP_FILENAME) which contains the tip but is also positioned in the same
-# directory as the original .hg directory. The hgtip files are created in
-# CreateHgtipFiles.gmk.
-HGTIP_FILENAME := .hgtip
+
+# A file containing a way to uniquely identify the source code revision that
+# the build was created from
+SOURCE_REVISION_TRACKER := $(SUPPORT_OUTPUTDIR)/src-rev/source-revision-tracker
+
+# Locate all hg repositories included in the forest, as absolute paths
FindAllReposAbs = \
$(strip $(sort $(dir $(filter-out $(SRC_ROOT)/build/%, $(wildcard \
- $(addprefix $(SRC_ROOT)/, \
- .hg */.hg */*/.hg */*/.hg */*/*/.hg \
- .hgtip */.hgtip */*/.hgtip */*/.hgtip */*/*/.hgtip \
- ) \
+ $(addprefix $(SRC_ROOT)/, .hg */.hg */*/.hg */*/*/.hg) \
)))))
+# Locate all hg repositories included in the forest, as relative paths
FindAllReposRel = \
$(strip $(subst $(SRC_ROOT)/,.,$(patsubst $(SRC_ROOT)/%/, %, $(FindAllReposAbs))))
-# Emit the repo:tip pairs to $@, but only if they changed since last time
-define GetSourceTips
- $(CD) $(SRC_ROOT) ; \
- for i in $(FindAllReposRel) IGNORE ; do \
- if [ "$${i}" = "IGNORE" ] ; then \
- continue; \
- elif [ -d $${i}/.hg -a "$(HG)" != "" ] ; then \
- $(PRINTF) " %s:%s" \
- "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \
- elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \
- $(PRINTF) " %s:%s" \
- "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \
- fi; \
- done > $@.tmp
- $(PRINTF) "\n" >> $@.tmp
- if [ ! -f $@ ] || [ "`$(CAT) $@`" != "`$(CAT) $@.tmp`" ]; then \
- $(MV) $@.tmp $@ ; \
- else \
- $(RM) $@.tmp ; \
- fi
-endef
-
################################################################################
define SetupLogging
--- a/make/common/Modules.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/common/Modules.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -171,12 +171,15 @@
# Find all module-info.java files for the current build target platform and
# configuration.
+# TODO: The $(firstword call is part of a workaround for using different
+# imported module-info.java in Jake due to a change in format. Remove once
+# new format is standard in JDK 9 and javafx delivers just that.
# Param 1 - Module to find for, set to * for finding all
FindAllModuleInfos = \
$(wildcard \
$(foreach sub, $(SRC_SUBDIRS), \
$(patsubst %,%/$(strip $1)/$(sub)/module-info.java, $(TOP_SRC_DIRS))) \
- $(patsubst %,%/$(strip $1)/module-info.java, $(IMPORT_MODULES_SRC)))
+ $(patsubst %,%/$(strip $1)/module-info.java, $(firstword $(IMPORT_MODULES_SRC))))
# Find module-info.java files in the specific source dir
# Param 1 - Src dir to find module-info.java files in
@@ -244,7 +247,7 @@
BEGIN { if (MODULE != "java.base") printf(" java.base"); } \
/requires/ { sub(/;/, ""); \
sub(/requires/, ""); \
- sub(/public/, ""); \
+ sub(/transitive/, ""); \
sub(/\/\/.*/, ""); \
sub(/\/\*.*\*\//, ""); \
gsub(/^ +\*.*/, ""); \
--- a/make/common/NativeCompilation.gmk Tue Nov 29 21:58:29 2016 -0800
+++ b/make/common/NativeCompilation.gmk Wed Jul 05 22:31:37 2017 +0200
@@ -568,17 +568,21 @@
# Sort to remove dupliates and provide a reproducable order on the input files to the linker.
$1_ALL_OBJS := $$(sort $$($1_EXPECTED_OBJS) $$($1_EXTRA_OBJECT_FILES))
- # Pickup extra OPENJDK_TARGET_OS_TYPE and/or OPENJDK_TARGET_OS dependent variables for CFLAGS.
- $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS))
+ # Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS, and/or OPENJDK_TARGET_OS plus
+ # OPENJDK_TARGET_CPU pair dependent variables for CFLAGS.
+ $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) \
+ $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU))
ifneq ($(DEBUG_LEVEL),release)
# Pickup extra debug dependent variables for CFLAGS
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug)
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_debug)
else
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_release)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release)
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_release)
endif
# Pickup extra OPENJDK_TARGET_OS_TYPE and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS.
--- a/test/lib/sun/hotspot/WhiteBox.java Tue Nov 29 21:58:29 2016 -0800
+++ b/test/lib/sun/hotspot/WhiteBox.java Wed Jul 05 22:31:37 2017 +0200
@@ -453,8 +453,6 @@
Object[] packages);
public native void AddModuleExports(Object from_module, String pkg, Object to_module);
public native void AddReadsModule(Object from_module, Object source_module);
- public native boolean CanReadModule(Object asking_module, Object source_module);
- public native boolean IsExportedToModule(Object from_module, String pkg, Object to_module);
public native void AddModulePackage(Object module, String pkg);
public native void AddModuleExportsToAllUnnamed(Object module, String pkg);
public native void AddModuleExportsToAll(Object module, String pkg);