Merge
This commit is contained in:
commit
414e05f6d7
3
.hgtags
3
.hgtags
@ -460,7 +460,8 @@ a2008587c13fa05fa2dbfcb09fe987576fbedfd1 jdk-10+32
|
||||
bbd692ad4fa300ecca7939ffbe3b1d5e52a28cc6 jdk-10+33
|
||||
89deac44e51517841491ba86ff44aa82a5ca96b3 jdk-10+34
|
||||
d8c634b016c628622c9abbdc6bf50509e5dedbec jdk-10+35
|
||||
cb54a299aa91419cb7caef3992592e7b22488163 jdk-10+36
|
||||
0ee20aad71c4f33c426372b4c8bcc1235ce2ec08 jdk-11+0
|
||||
959f2f7cbaa6d2ee45d50029744efb219721576c jdk-10+36
|
||||
4f830b447edf04fb4a52151a5ad44d9bb60723cd jdk-10+37
|
||||
e569e83139fdfbecfeb3cd9014d560917787f158 jdk-10+38
|
||||
5b834ec962366e00d4445352a999a3ac14e26f64 jdk-10+39
|
||||
|
48
bin/idea.sh
48
bin/idea.sh
@ -30,9 +30,10 @@ usage() {
|
||||
}
|
||||
|
||||
SCRIPT_DIR=`dirname $0`
|
||||
PWD=`pwd`
|
||||
#assume TOP is the dir from which the script has been called
|
||||
TOP=`pwd`
|
||||
cd $SCRIPT_DIR; SCRIPT_DIR=`pwd`
|
||||
cd ../; TOP=`pwd`; cd $PWD
|
||||
cd $TOP;
|
||||
|
||||
IDEA_OUTPUT=$TOP/.idea
|
||||
VERBOSE="false"
|
||||
@ -66,30 +67,42 @@ done
|
||||
mkdir $IDEA_OUTPUT || exit 1
|
||||
cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd`
|
||||
|
||||
IDEA_MAKE="$TOP/make/idea"
|
||||
MAKE_DIR="$SCRIPT_DIR/../make"
|
||||
IDEA_MAKE="$MAKE_DIR/idea"
|
||||
IDEA_TEMPLATE="$IDEA_MAKE/template"
|
||||
IML_TEMPLATE="$IDEA_TEMPLATE/jdk.iml"
|
||||
ANT_TEMPLATE="$IDEA_TEMPLATE/ant.xml"
|
||||
MISC_TEMPLATE="$IDEA_TEMPLATE/misc.xml"
|
||||
IDEA_IML="$IDEA_OUTPUT/jdk.iml"
|
||||
IDEA_ANT="$IDEA_OUTPUT/ant.xml"
|
||||
IDEA_MISC="$IDEA_OUTPUT/misc.xml"
|
||||
|
||||
cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
|
||||
|
||||
#init template variables
|
||||
for file in `ls -p $IDEA_TEMPLATE | grep -v /`; do
|
||||
VAR_SUFFIX=`echo $file | cut -d'.' -f1 | tr [:lower:] [:upper:]`
|
||||
eval "$VAR_SUFFIX"_TEMPLATE="$IDEA_TEMPLATE"/$file
|
||||
eval IDEA_"$VAR_SUFFIX"="$IDEA_OUTPUT"/$file
|
||||
done
|
||||
|
||||
#override template variables
|
||||
if [ -d "$TEMPLATES_OVERRIDE" ] ; then
|
||||
for file in `ls -p "$TEMPLATES_OVERRIDE" | grep -v /`; do
|
||||
cp "$TEMPLATES_OVERRIDE"/$file "$IDEA_OUTPUT"/
|
||||
VAR_SUFFIX=`echo $file | cut -d'.' -f1 | tr [:lower:] [:upper:]`
|
||||
eval "$VAR_SUFFIX"_TEMPLATE="$TEMPLATES_OVERRIDE"/$file
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$VERBOSE" = "true" ] ; then
|
||||
echo "output dir: $IDEA_OUTPUT"
|
||||
echo "idea template dir: $IDEA_TEMPLATE"
|
||||
fi
|
||||
|
||||
if [ ! -f "$IML_TEMPLATE" ] ; then
|
||||
echo "FATAL: cannot find $IML_TEMPLATE" >&2; exit 1
|
||||
if [ ! -f "$JDK_TEMPLATE" ] ; then
|
||||
echo "FATAL: cannot find $JDK_TEMPLATE" >&2; exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$ANT_TEMPLATE" ] ; then
|
||||
echo "FATAL: cannot find $ANT_TEMPLATE" >&2; exit 1
|
||||
fi
|
||||
|
||||
cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
|
||||
cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I make/common idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1
|
||||
cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I $MAKE_DIR/.. idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1
|
||||
cd $SCRIPT_DIR
|
||||
|
||||
. $IDEA_OUTPUT/env.cfg
|
||||
@ -118,11 +131,12 @@ addSourceFolder() {
|
||||
root=$@
|
||||
relativePath="`echo "$root" | sed -e s@"$TOP/\(.*$\)"@"\1"@`"
|
||||
folder="`echo "$SOURCE_FOLDER" | sed -e s@"\(.*/\)####\(.*\)"@"\1$relativePath\2"@`"
|
||||
printf "%s\n" "$folder" >> $IDEA_IML
|
||||
printf "%s\n" "$folder" >> $IDEA_JDK
|
||||
}
|
||||
|
||||
### Generate project iml
|
||||
rm -f $IDEA_IML
|
||||
|
||||
rm -f $IDEA_JDK
|
||||
while IFS= read -r line
|
||||
do
|
||||
if echo "$line" | egrep "^ .* <sourceFolder.*####" > /dev/null ; then
|
||||
@ -133,9 +147,9 @@ do
|
||||
done
|
||||
fi
|
||||
else
|
||||
printf "%s\n" "$line" >> $IDEA_IML
|
||||
printf "%s\n" "$line" >> $IDEA_JDK
|
||||
fi
|
||||
done < "$IML_TEMPLATE"
|
||||
done < "$JDK_TEMPLATE"
|
||||
|
||||
|
||||
MODULE_NAME=" <property name=\"module.name\" value=\"####\" />"
|
||||
|
@ -637,7 +637,7 @@ else
|
||||
# Declare dependencies between hotspot-<variant>* targets
|
||||
$(foreach v, $(JVM_VARIANTS), \
|
||||
$(eval hotspot-$v: hotspot-$v-gensrc hotspot-$v-libs) \
|
||||
$(eval hotspot-$v-libs: hotspot-$v-gensrc) \
|
||||
$(eval hotspot-$v-libs: hotspot-$v-gensrc java.base-copy) \
|
||||
)
|
||||
|
||||
hotspot-ide-project: hotspot exploded-image
|
||||
@ -691,8 +691,9 @@ else
|
||||
jdk.jdwp.agent-libs: jdk.jdwp.agent-gensrc
|
||||
|
||||
# The swing beans need to have java base properly generated to avoid errors
|
||||
# in javadoc.
|
||||
java.desktop-gensrc-src: java.base-gensrc
|
||||
# in javadoc. The X11 wrappers need the java.base include files to have been
|
||||
# copied and processed.
|
||||
java.desktop-gensrc-src: java.base-gensrc java.base-copy
|
||||
|
||||
# The annotation processing for jdk.internal.vm.ci and jdk.internal.vm.compiler
|
||||
# needs classes from the current JDK.
|
||||
|
@ -586,69 +586,71 @@ AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
|
||||
[
|
||||
AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
|
||||
[use this devkit for compilers, tools and resources])],
|
||||
[
|
||||
BASIC_FIXUP_PATH([with_devkit])
|
||||
DEVKIT_ROOT="$with_devkit"
|
||||
# Check for a meta data info file in the root of the devkit
|
||||
if test -f "$DEVKIT_ROOT/devkit.info"; then
|
||||
. $DEVKIT_ROOT/devkit.info
|
||||
# This potentially sets the following:
|
||||
# A descriptive name of the devkit
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
|
||||
# Corresponds to --with-extra-path
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
|
||||
# Corresponds to --with-toolchain-path
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
|
||||
# Corresponds to --with-sysroot
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
|
||||
[use this devkit for compilers, tools and resources])])
|
||||
|
||||
# Identifies the Visual Studio version in the devkit
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
|
||||
# The Visual Studio include environment variable
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
|
||||
# The Visual Studio lib environment variable
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
|
||||
# Corresponds to --with-msvcr-dll
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
|
||||
# Corresponds to --with-msvcp-dll
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
|
||||
fi
|
||||
if test "x$with_devkit" = xyes; then
|
||||
AC_MSG_ERROR([--with-devkit must have a value])
|
||||
elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
|
||||
BASIC_FIXUP_PATH([with_devkit])
|
||||
DEVKIT_ROOT="$with_devkit"
|
||||
# Check for a meta data info file in the root of the devkit
|
||||
if test -f "$DEVKIT_ROOT/devkit.info"; then
|
||||
. $DEVKIT_ROOT/devkit.info
|
||||
# This potentially sets the following:
|
||||
# A descriptive name of the devkit
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
|
||||
# Corresponds to --with-extra-path
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
|
||||
# Corresponds to --with-toolchain-path
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
|
||||
# Corresponds to --with-sysroot
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
|
||||
|
||||
AC_MSG_CHECKING([for devkit])
|
||||
if test "x$DEVKIT_NAME" != x; then
|
||||
AC_MSG_RESULT([$DEVKIT_NAME in $DEVKIT_ROOT])
|
||||
else
|
||||
AC_MSG_RESULT([$DEVKIT_ROOT])
|
||||
fi
|
||||
# Identifies the Visual Studio version in the devkit
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
|
||||
# The Visual Studio include environment variable
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
|
||||
# The Visual Studio lib environment variable
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
|
||||
# Corresponds to --with-msvcr-dll
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
|
||||
# Corresponds to --with-msvcp-dll
|
||||
BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
|
||||
fi
|
||||
|
||||
BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
|
||||
AC_MSG_CHECKING([for devkit])
|
||||
if test "x$DEVKIT_NAME" != x; then
|
||||
AC_MSG_RESULT([$DEVKIT_NAME in $DEVKIT_ROOT])
|
||||
else
|
||||
AC_MSG_RESULT([$DEVKIT_ROOT])
|
||||
fi
|
||||
|
||||
# Fallback default of just /bin if DEVKIT_PATH is not defined
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
|
||||
DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
|
||||
fi
|
||||
BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$DEVKIT_TOOLCHAIN_PATH)
|
||||
BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
|
||||
|
||||
# If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
|
||||
# places for backwards compatiblity.
|
||||
if test "x$DEVKIT_SYSROOT" != x; then
|
||||
SYSROOT="$DEVKIT_SYSROOT"
|
||||
elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
|
||||
elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host/sys-root"
|
||||
fi
|
||||
# Fallback default of just /bin if DEVKIT_PATH is not defined
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
|
||||
DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
|
||||
fi
|
||||
BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$DEVKIT_TOOLCHAIN_PATH)
|
||||
|
||||
if test "x$DEVKIT_ROOT" != x; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
|
||||
fi
|
||||
AC_SUBST(DEVKIT_LIB_DIR)
|
||||
fi
|
||||
]
|
||||
)
|
||||
# If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
|
||||
# places for backwards compatiblity.
|
||||
if test "x$DEVKIT_SYSROOT" != x; then
|
||||
SYSROOT="$DEVKIT_SYSROOT"
|
||||
elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
|
||||
elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host/sys-root"
|
||||
fi
|
||||
|
||||
if test "x$DEVKIT_ROOT" != x; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
|
||||
fi
|
||||
AC_SUBST(DEVKIT_LIB_DIR)
|
||||
fi
|
||||
fi
|
||||
|
||||
# You can force the sysroot if the sysroot encoded into the compiler tools
|
||||
# is not correct.
|
||||
@ -1185,9 +1187,6 @@ AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS],
|
||||
|
||||
AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
|
||||
[
|
||||
# Did user specify any unknown variables?
|
||||
BASIC_CHECK_LEFTOVER_OVERRIDDEN
|
||||
|
||||
AC_MSG_CHECKING([if build directory is on local disk])
|
||||
BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUTDIR,
|
||||
[OUTPUT_DIR_IS_LOCAL="yes"],
|
||||
|
@ -55,6 +55,7 @@ OPENJDK_TARGET_CPU_ARCH := @OPENJDK_BUILD_CPU_ARCH@
|
||||
OPENJDK_TARGET_CPU_BITS := @OPENJDK_BUILD_CPU_BITS@
|
||||
OPENJDK_TARGET_CPU_ENDIAN := @OPENJDK_BUILD_CPU_ENDIAN@
|
||||
OPENJDK_TARGET_CPU_LEGACY := @OPENJDK_BUILD_CPU_LEGACY@
|
||||
OPENJDK_TARGET_OS_INCLUDE_SUBDIR := @OPENJDK_BUILD_OS_INCLUDE_SUBDIR@
|
||||
|
||||
HOTSPOT_TARGET_OS := @HOTSPOT_BUILD_OS@
|
||||
HOTSPOT_TARGET_OS_TYPE := @HOTSPOT_BUILD_OS_TYPE@
|
||||
|
@ -280,6 +280,9 @@ CUSTOM_LATE_HOOK
|
||||
# This needs to be done after CUSTOM_LATE_HOOK since we can setup custom features.
|
||||
HOTSPOT_VALIDATE_JVM_FEATURES
|
||||
|
||||
# Did user specify any unknown variables?
|
||||
BASIC_CHECK_LEFTOVER_OVERRIDDEN
|
||||
|
||||
# We're messing a bit with internal autoconf variables to put the config.status
|
||||
# in the output directory instead of the current directory.
|
||||
CONFIG_STATUS="$CONFIGURESUPPORT_OUTPUTDIR/config.status"
|
||||
|
@ -1162,9 +1162,7 @@ AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER],
|
||||
# Setup some hard coded includes
|
||||
$2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \
|
||||
-I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
|
||||
-I${TOPDIR}/src/java.base/share/native/include \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_$1_OS/native/include \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/include \
|
||||
-I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
|
||||
-I${TOPDIR}/src/java.base/share/native/libjava \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/libjava \
|
||||
-I${TOPDIR}/src/hotspot/share/include \
|
||||
|
@ -886,6 +886,8 @@ JAVA
|
||||
BOOT_JDK
|
||||
JAVA_CHECK
|
||||
JAVAC_CHECK
|
||||
VERSION_CLASSFILE_MINOR
|
||||
VERSION_CLASSFILE_MAJOR
|
||||
VENDOR_VERSION_STRING
|
||||
VERSION_DATE
|
||||
VERSION_IS_GA
|
||||
@ -970,6 +972,7 @@ JDK_VARIANT
|
||||
USERNAME
|
||||
TOPDIR
|
||||
PATH_SEP
|
||||
OPENJDK_BUILD_OS_INCLUDE_SUBDIR
|
||||
HOTSPOT_BUILD_CPU_DEFINE
|
||||
HOTSPOT_BUILD_CPU_ARCH
|
||||
HOTSPOT_BUILD_CPU
|
||||
@ -980,6 +983,7 @@ OPENJDK_BUILD_CPU_OSARCH
|
||||
OPENJDK_BUILD_CPU_ISADIR
|
||||
OPENJDK_BUILD_CPU_LEGACY_LIB
|
||||
OPENJDK_BUILD_CPU_LEGACY
|
||||
OPENJDK_TARGET_OS_INCLUDE_SUBDIR
|
||||
HOTSPOT_TARGET_CPU_DEFINE
|
||||
HOTSPOT_TARGET_CPU_ARCH
|
||||
HOTSPOT_TARGET_CPU
|
||||
@ -5113,7 +5117,7 @@ TOOLCHAIN_MINIMUM_VERSION_xlc=""
|
||||
|
||||
################################################################################
|
||||
# The order of these defines the priority by which we try to find them.
|
||||
VALID_VS_VERSIONS="2013 2012 2010"
|
||||
VALID_VS_VERSIONS="2013 2012 2010 2015 2017"
|
||||
|
||||
VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
|
||||
VS_VERSION_INTERNAL_2010=100
|
||||
@ -5146,6 +5150,30 @@ VS_SDK_INSTALLDIR_2013=
|
||||
VS_VS_PLATFORM_NAME_2013="v120"
|
||||
VS_SDK_PLATFORM_NAME_2013=
|
||||
|
||||
VS_DESCRIPTION_2015="Microsoft Visual Studio 2015 - CURRENTLY NOT WORKING"
|
||||
VS_VERSION_INTERNAL_2015=140
|
||||
VS_MSVCR_2015=vcruntime140.dll
|
||||
VS_MSVCP_2015=msvcp140.dll
|
||||
VS_ENVVAR_2015="VS140COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2015="Microsoft Visual Studio 14.0"
|
||||
VS_SDK_INSTALLDIR_2015=
|
||||
VS_VS_PLATFORM_NAME_2015="v140"
|
||||
VS_SDK_PLATFORM_NAME_2015=
|
||||
# The vcvars of 2015 breaks if 2017 is also installed. Work around this by
|
||||
# explicitly specifying Windows Kit 8.1 to be used.
|
||||
VS_ENV_ARGS_2015="8.1"
|
||||
|
||||
VS_DESCRIPTION_2017="Microsoft Visual Studio 2017 - CURRENTLY NOT WORKING"
|
||||
VS_VERSION_INTERNAL_2017=141
|
||||
VS_MSVCR_2017=vcruntime140.dll
|
||||
VS_MSVCP_2017=msvcp140.dll
|
||||
VS_ENVVAR_2017="VS150COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
|
||||
VS_EDITIONS_2017="Community Professional Enterprise"
|
||||
VS_SDK_INSTALLDIR_2017=
|
||||
VS_VS_PLATFORM_NAME_2017="v141"
|
||||
VS_SDK_PLATFORM_NAME_2017=
|
||||
|
||||
################################################################################
|
||||
|
||||
|
||||
@ -5187,7 +5215,7 @@ VS_SDK_PLATFORM_NAME_2013=
|
||||
#CUSTOM_AUTOCONF_INCLUDE
|
||||
|
||||
# Do not change or remove the following line, it is needed for consistency checks:
|
||||
DATE_WHEN_GENERATED=1516225089
|
||||
DATE_WHEN_GENERATED=1517274450
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@ -16318,6 +16346,14 @@ $as_echo "$COMPILE_TYPE" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# For historical reasons, the OS include directories have odd names.
|
||||
OPENJDK_TARGET_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
|
||||
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
OPENJDK_TARGET_OS_INCLUDE_SUBDIR="win32"
|
||||
elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
OPENJDK_TARGET_OS_INCLUDE_SUBDIR="darwin"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Also store the legacy naming of the cpu.
|
||||
@ -16469,6 +16505,14 @@ $as_echo "$COMPILE_TYPE" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# For historical reasons, the OS include directories have odd names.
|
||||
OPENJDK_BUILD_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
|
||||
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
OPENJDK_BUILD_OS_INCLUDE_SUBDIR="win32"
|
||||
elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
OPENJDK_BUILD_OS_INCLUDE_SUBDIR="darwin"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
@ -17093,6 +17137,12 @@ $as_echo "$as_me: Unknown variant(s) specified: $INVALID_VARIANTS" >&6;}
|
||||
# Check whether --with-devkit was given.
|
||||
if test "${with_devkit+set}" = set; then :
|
||||
withval=$with_devkit;
|
||||
fi
|
||||
|
||||
|
||||
if test "x$with_devkit" = xyes; then
|
||||
as_fn_error $? "--with-devkit must have a value" "$LINENO" 5
|
||||
elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
|
||||
|
||||
# Only process if variable expands to non-empty
|
||||
|
||||
@ -17225,77 +17275,77 @@ $as_echo "$as_me: The path of with_devkit, which resolves as \"$path\", is inval
|
||||
fi
|
||||
fi
|
||||
|
||||
DEVKIT_ROOT="$with_devkit"
|
||||
# Check for a meta data info file in the root of the devkit
|
||||
if test -f "$DEVKIT_ROOT/devkit.info"; then
|
||||
. $DEVKIT_ROOT/devkit.info
|
||||
# This potentially sets the following:
|
||||
# A descriptive name of the devkit
|
||||
DEVKIT_ROOT="$with_devkit"
|
||||
# Check for a meta data info file in the root of the devkit
|
||||
if test -f "$DEVKIT_ROOT/devkit.info"; then
|
||||
. $DEVKIT_ROOT/devkit.info
|
||||
# This potentially sets the following:
|
||||
# A descriptive name of the devkit
|
||||
|
||||
if test "x$DEVKIT_NAME" = x; then
|
||||
eval DEVKIT_NAME="\${DEVKIT_NAME_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# Corresponds to --with-extra-path
|
||||
# Corresponds to --with-extra-path
|
||||
|
||||
if test "x$DEVKIT_EXTRA_PATH" = x; then
|
||||
eval DEVKIT_EXTRA_PATH="\${DEVKIT_EXTRA_PATH_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# Corresponds to --with-toolchain-path
|
||||
# Corresponds to --with-toolchain-path
|
||||
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
|
||||
eval DEVKIT_TOOLCHAIN_PATH="\${DEVKIT_TOOLCHAIN_PATH_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# Corresponds to --with-sysroot
|
||||
# Corresponds to --with-sysroot
|
||||
|
||||
if test "x$DEVKIT_SYSROOT" = x; then
|
||||
eval DEVKIT_SYSROOT="\${DEVKIT_SYSROOT_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
|
||||
# Identifies the Visual Studio version in the devkit
|
||||
# Identifies the Visual Studio version in the devkit
|
||||
|
||||
if test "x$DEVKIT_VS_VERSION" = x; then
|
||||
eval DEVKIT_VS_VERSION="\${DEVKIT_VS_VERSION_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# The Visual Studio include environment variable
|
||||
# The Visual Studio include environment variable
|
||||
|
||||
if test "x$DEVKIT_VS_INCLUDE" = x; then
|
||||
eval DEVKIT_VS_INCLUDE="\${DEVKIT_VS_INCLUDE_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# The Visual Studio lib environment variable
|
||||
# The Visual Studio lib environment variable
|
||||
|
||||
if test "x$DEVKIT_VS_LIB" = x; then
|
||||
eval DEVKIT_VS_LIB="\${DEVKIT_VS_LIB_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# Corresponds to --with-msvcr-dll
|
||||
# Corresponds to --with-msvcr-dll
|
||||
|
||||
if test "x$DEVKIT_MSVCR_DLL" = x; then
|
||||
eval DEVKIT_MSVCR_DLL="\${DEVKIT_MSVCR_DLL_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
# Corresponds to --with-msvcp-dll
|
||||
# Corresponds to --with-msvcp-dll
|
||||
|
||||
if test "x$DEVKIT_MSVCP_DLL" = x; then
|
||||
eval DEVKIT_MSVCP_DLL="\${DEVKIT_MSVCP_DLL_${OPENJDK_TARGET_CPU}}"
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for devkit" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for devkit" >&5
|
||||
$as_echo_n "checking for devkit... " >&6; }
|
||||
if test "x$DEVKIT_NAME" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_NAME in $DEVKIT_ROOT" >&5
|
||||
if test "x$DEVKIT_NAME" != x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_NAME in $DEVKIT_ROOT" >&5
|
||||
$as_echo "$DEVKIT_NAME in $DEVKIT_ROOT" >&6; }
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_ROOT" >&5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEVKIT_ROOT" >&5
|
||||
$as_echo "$DEVKIT_ROOT" >&6; }
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if test "x$DEVKIT_EXTRA_PATH" != x; then
|
||||
@ -17307,10 +17357,10 @@ $as_echo "$DEVKIT_ROOT" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# Fallback default of just /bin if DEVKIT_PATH is not defined
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
|
||||
DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
|
||||
fi
|
||||
# Fallback default of just /bin if DEVKIT_PATH is not defined
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
|
||||
DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
|
||||
fi
|
||||
|
||||
if test "x$DEVKIT_TOOLCHAIN_PATH" != x; then
|
||||
if test "x$TOOLCHAIN_PATH" = x; then
|
||||
@ -17321,27 +17371,24 @@ $as_echo "$DEVKIT_ROOT" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
|
||||
# places for backwards compatiblity.
|
||||
if test "x$DEVKIT_SYSROOT" != x; then
|
||||
SYSROOT="$DEVKIT_SYSROOT"
|
||||
elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
|
||||
elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host/sys-root"
|
||||
fi
|
||||
# If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
|
||||
# places for backwards compatiblity.
|
||||
if test "x$DEVKIT_SYSROOT" != x; then
|
||||
SYSROOT="$DEVKIT_SYSROOT"
|
||||
elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
|
||||
elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
|
||||
SYSROOT="$DEVKIT_ROOT/$host/sys-root"
|
||||
fi
|
||||
|
||||
if test "x$DEVKIT_ROOT" != x; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test "x$DEVKIT_ROOT" != x; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
# You can force the sysroot if the sysroot encoded into the compiler tools
|
||||
# is not correct.
|
||||
@ -25524,6 +25571,10 @@ fi
|
||||
VENDOR_VERSION_STRING="$with_vendor_version_string"
|
||||
fi
|
||||
|
||||
# We could define --with flags for these, if really needed
|
||||
VERSION_CLASSFILE_MAJOR="$DEFAULT_VERSION_CLASSFILE_MAJOR"
|
||||
VERSION_CLASSFILE_MINOR="$DEFAULT_VERSION_CLASSFILE_MINOR"
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for version string" >&5
|
||||
$as_echo_n "checking for version string... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $VERSION_STRING" >&5
|
||||
@ -25545,6 +25596,9 @@ $as_echo "$VERSION_STRING" >&6; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Setup BootJDK, used to bootstrap the build.
|
||||
@ -32272,7 +32326,11 @@ $as_echo "$as_me: The following toolchain versions are valid on this platform:"
|
||||
elif test "x$DEVKIT_VS_VERSION" != x; then
|
||||
VS_VERSION=$DEVKIT_VS_VERSION
|
||||
TOOLCHAIN_VERSION=$VS_VERSION
|
||||
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
|
||||
# If the devkit has a name, use that as description
|
||||
VS_DESCRIPTION="$DEVKIT_NAME"
|
||||
if test "x$VS_DESCRIPTION" = x; then
|
||||
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
|
||||
fi
|
||||
eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
|
||||
eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
|
||||
eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
|
||||
@ -32340,7 +32398,9 @@ $as_echo "$as_me: Valid Visual Studio versions: $VALID_VS_VERSIONS." >&6;}
|
||||
eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
|
||||
eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
|
||||
eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
|
||||
eval VS_EDITIONS="\${VS_EDITIONS_${VS_VERSION}}"
|
||||
eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
|
||||
eval VS_ENV_ARGS="\${VS_ENV_ARGS_${VS_VERSION}}"
|
||||
|
||||
# When using --with-tools-dir, assume it points to the correct and default
|
||||
# version of Visual Studio or that --with-toolchain-version was also set.
|
||||
@ -32351,12 +32411,6 @@ $as_echo "$as_me: Valid Visual Studio versions: $VALID_VS_VERSIONS." >&6;}
|
||||
VS_BASE="$with_tools_dir/../.."
|
||||
METHOD="--with-tools-dir"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32367,19 +32421,42 @@ $as_echo "$as_me: Valid Visual Studio versions: $VALID_VS_VERSIONS." >&6;}
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32390,12 +32467,6 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$with_tools_dir/../../.."
|
||||
METHOD="--with-tools-dir"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32406,19 +32477,42 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32437,7 +32531,6 @@ $as_echo "$as_me: directory within the Visual Studio installation" >&6;}
|
||||
fi
|
||||
|
||||
VS_ENV_CMD=""
|
||||
VS_ENV_ARGS=""
|
||||
|
||||
if test "x$VS_COMNTOOLS" != x; then
|
||||
|
||||
@ -32446,12 +32539,6 @@ $as_echo "$as_me: directory within the Visual Studio installation" >&6;}
|
||||
VS_BASE="$VS_COMNTOOLS/../.."
|
||||
METHOD="$VS_COMNTOOLS_VAR variable"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32462,19 +32549,42 @@ $as_echo "$as_me: directory within the Visual Studio installation" >&6;}
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32487,12 +32597,6 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$PROGRAMFILES/$VS_INSTALL_DIR"
|
||||
METHOD="well-known name"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32503,19 +32607,42 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32530,12 +32657,6 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$PROGRAMFILES_X86/$VS_INSTALL_DIR"
|
||||
METHOD="well-known name"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32546,19 +32667,42 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32570,12 +32714,6 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="C:/Program Files/$VS_INSTALL_DIR"
|
||||
METHOD="well-known name"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32586,19 +32724,42 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32609,12 +32770,6 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="C:/Program Files (x86)/$VS_INSTALL_DIR"
|
||||
METHOD="well-known name"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
fi
|
||||
|
||||
|
||||
windows_path="$VS_BASE"
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -32625,19 +32780,42 @@ $as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studi
|
||||
VS_BASE="$unix_path"
|
||||
fi
|
||||
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS_BASE using $METHOD" >&5
|
||||
$as_echo "$as_me: Found Visual Studio installation at $VS_BASE using $METHOD" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;}
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&5
|
||||
$as_echo "$as_me: Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring" >&6;}
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -32890,6 +33068,11 @@ $as_echo "$as_me: Found $VS_DESCRIPTION" >&6;}
|
||||
fi
|
||||
done
|
||||
|
||||
TOOLCHAIN_DESCRIPTION="$VS_DESCRIPTION"
|
||||
if test "$TOOLCHAIN_VERSION" -gt 2013; then
|
||||
UNSUPPORTED_TOOLCHAIN_VERSION=yes
|
||||
fi
|
||||
|
||||
|
||||
# If we have a devkit, skip all of the below.
|
||||
if test "x$DEVKIT_VS_VERSION" = x; then
|
||||
@ -33222,6 +33405,9 @@ $as_echo "$as_me: Trying to extract Visual Studio environment variables" >&6;}
|
||||
# This will end up something like:
|
||||
# call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
|
||||
$ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# In some cases, the VS_ENV_CMD will change directory, change back so
|
||||
# the set-vs-env.sh ends up in the right place.
|
||||
$ECHO 'cd %~dp0' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# These will end up something like:
|
||||
# C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
|
||||
# The trailing space for everyone except PATH is no typo, but is needed due
|
||||
@ -33643,7 +33829,7 @@ $as_echo "$as_me: or run \"bash.exe -l\" from a VS command prompt and then run c
|
||||
if test "x$XCODE_VERSION_OUTPUT" != x; then
|
||||
# For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
|
||||
TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
|
||||
TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode"
|
||||
TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
|
||||
else
|
||||
# Currently we do not define this for other toolchains. This might change as the need arise.
|
||||
TOOLCHAIN_VERSION=
|
||||
@ -52817,9 +53003,7 @@ fi
|
||||
# Setup some hard coded includes
|
||||
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
|
||||
-I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
|
||||
-I${TOPDIR}/src/java.base/share/native/include \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include \
|
||||
-I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
|
||||
-I${TOPDIR}/src/java.base/share/native/libjava \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/libjava \
|
||||
-I${TOPDIR}/src/hotspot/share/include \
|
||||
@ -53700,9 +53884,7 @@ fi
|
||||
# Setup some hard coded includes
|
||||
OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK \
|
||||
-I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
|
||||
-I${TOPDIR}/src/java.base/share/native/include \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_BUILD_OS/native/include \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_BUILD_OS_TYPE/native/include \
|
||||
-I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
|
||||
-I${TOPDIR}/src/java.base/share/native/libjava \
|
||||
-I${TOPDIR}/src/java.base/$OPENJDK_BUILD_OS_TYPE/native/libjava \
|
||||
-I${TOPDIR}/src/hotspot/share/include \
|
||||
@ -55865,7 +56047,6 @@ $as_echo "$as_me: The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE"
|
||||
MSVC_DLL=
|
||||
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
# Probe: Using well-known location from Visual Studio 10.0
|
||||
if test "x$VCINSTALLDIR" != x; then
|
||||
CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
|
||||
|
||||
@ -55878,15 +56059,27 @@ $as_echo "$as_me: The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE"
|
||||
CYGWIN_VC_INSTALL_DIR="$unix_path"
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
if test "$VS_VERSION" -lt 2017; then
|
||||
# Probe: Using well-known location from Visual Studio 12.0 and older
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
fi
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
# Probe: Using well-known location from VS 2017
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
|
||||
fi
|
||||
fi
|
||||
$ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
|
||||
# In case any of the above finds more than one file, loop over them.
|
||||
for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
|
||||
$ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
|
||||
|
||||
DLL_NAME="$DLL_NAME"
|
||||
POSSIBLE_MSVC_DLL="$POSSIBLE_MSVC_DLL"
|
||||
POSSIBLE_MSVC_DLL="$possible_msvc_dll"
|
||||
METHOD="well-known location in VCINSTALLDIR"
|
||||
if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD" >&5
|
||||
@ -56059,6 +56252,7 @@ $as_echo "$as_me: The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE"
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -57214,7 +57408,6 @@ $as_echo "$as_me: The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE"
|
||||
MSVC_DLL=
|
||||
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
# Probe: Using well-known location from Visual Studio 10.0
|
||||
if test "x$VCINSTALLDIR" != x; then
|
||||
CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
|
||||
|
||||
@ -57227,15 +57420,27 @@ $as_echo "$as_me: The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE"
|
||||
CYGWIN_VC_INSTALL_DIR="$unix_path"
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
if test "$VS_VERSION" -lt 2017; then
|
||||
# Probe: Using well-known location from Visual Studio 12.0 and older
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
fi
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
# Probe: Using well-known location from VS 2017
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
|
||||
fi
|
||||
fi
|
||||
$ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
|
||||
# In case any of the above finds more than one file, loop over them.
|
||||
for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
|
||||
$ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
|
||||
|
||||
DLL_NAME="$DLL_NAME"
|
||||
POSSIBLE_MSVC_DLL="$POSSIBLE_MSVC_DLL"
|
||||
POSSIBLE_MSVC_DLL="$possible_msvc_dll"
|
||||
METHOD="well-known location in VCINSTALLDIR"
|
||||
if test -n "$POSSIBLE_MSVC_DLL" -a -e "$POSSIBLE_MSVC_DLL"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Found $DLL_NAME at $POSSIBLE_MSVC_DLL using $METHOD" >&5
|
||||
@ -57408,6 +57613,7 @@ $as_echo "$as_me: The file type of the located $DLL_NAME is $MSVC_DLL_FILETYPE"
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -68877,16 +69083,6 @@ $as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# Did user specify any unknown variables?
|
||||
|
||||
if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
|
||||
# Replace the separating ! with spaces before presenting for end user.
|
||||
unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The following variables might be unknown to configure: $unknown_variables" >&5
|
||||
$as_echo "$as_me: WARNING: The following variables might be unknown to configure: $unknown_variables" >&2;}
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5
|
||||
$as_echo_n "checking if build directory is on local disk... " >&6; }
|
||||
|
||||
@ -68968,6 +69164,16 @@ $as_echo "$JVM_FEATURES_TO_TEST" >&6; }
|
||||
done
|
||||
|
||||
|
||||
# Did user specify any unknown variables?
|
||||
|
||||
if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
|
||||
# Replace the separating ! with spaces before presenting for end user.
|
||||
unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The following variables might be unknown to configure: $unknown_variables" >&5
|
||||
$as_echo "$as_me: WARNING: The following variables might be unknown to configure: $unknown_variables" >&2;}
|
||||
fi
|
||||
|
||||
|
||||
# We're messing a bit with internal autoconf variables to put the config.status
|
||||
# in the output directory instead of the current directory.
|
||||
CONFIG_STATUS="$CONFIGURESUPPORT_OUTPUTDIR/config.status"
|
||||
@ -70200,10 +70406,7 @@ fi
|
||||
printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n"
|
||||
fi
|
||||
printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
|
||||
if test "x$TOOLCHAIN_VERSION" != "x"; then
|
||||
print_version=" $TOOLCHAIN_VERSION"
|
||||
fi
|
||||
printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
|
||||
printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
|
||||
printf "* C Compiler: Version $CC_VERSION_NUMBER (at $CC)\n"
|
||||
printf "* C++ Compiler: Version $CXX_VERSION_NUMBER (at $CXX)\n"
|
||||
|
||||
@ -70251,6 +70454,12 @@ fi
|
||||
printf "\n"
|
||||
fi
|
||||
|
||||
if test "x$UNSUPPORTED_TOOLCHAIN_VERSION" = "xyes"; then
|
||||
printf "WARNING: The toolchain version used is known to have issues. Please\n"
|
||||
printf "consider using a supported version unless you know what you are doing.\n"
|
||||
printf "\n"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Locate config.log.
|
||||
|
@ -242,10 +242,7 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
|
||||
printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n"
|
||||
fi
|
||||
printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
|
||||
if test "x$TOOLCHAIN_VERSION" != "x"; then
|
||||
print_version=" $TOOLCHAIN_VERSION"
|
||||
fi
|
||||
printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
|
||||
printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
|
||||
printf "* C Compiler: Version $CC_VERSION_NUMBER (at $CC)\n"
|
||||
printf "* C++ Compiler: Version $CXX_VERSION_NUMBER (at $CXX)\n"
|
||||
|
||||
@ -292,6 +289,12 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
|
||||
printf "You should run without '--no-create | -n' to create the configuration.\n"
|
||||
printf "\n"
|
||||
fi
|
||||
|
||||
if test "x$UNSUPPORTED_TOOLCHAIN_VERSION" = "xyes"; then
|
||||
printf "WARNING: The toolchain version used is known to have issues. Please\n"
|
||||
printf "consider using a supported version unless you know what you are doing.\n"
|
||||
printf "\n"
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS],
|
||||
|
@ -381,6 +381,10 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
VENDOR_VERSION_STRING="$with_vendor_version_string"
|
||||
fi
|
||||
|
||||
# We could define --with flags for these, if really needed
|
||||
VERSION_CLASSFILE_MAJOR="$DEFAULT_VERSION_CLASSFILE_MAJOR"
|
||||
VERSION_CLASSFILE_MINOR="$DEFAULT_VERSION_CLASSFILE_MINOR"
|
||||
|
||||
AC_MSG_CHECKING([for version string])
|
||||
AC_MSG_RESULT([$VERSION_STRING])
|
||||
|
||||
@ -398,4 +402,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
AC_SUBST(VERSION_IS_GA)
|
||||
AC_SUBST(VERSION_DATE)
|
||||
AC_SUBST(VENDOR_VERSION_STRING)
|
||||
AC_SUBST(VERSION_CLASSFILE_MAJOR)
|
||||
AC_SUBST(VERSION_CLASSFILE_MINOR)
|
||||
|
||||
])
|
||||
|
@ -478,6 +478,14 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
|
||||
fi
|
||||
AC_SUBST(HOTSPOT_$1_CPU_DEFINE)
|
||||
|
||||
# For historical reasons, the OS include directories have odd names.
|
||||
OPENJDK_$1_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
|
||||
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
OPENJDK_$1_OS_INCLUDE_SUBDIR="win32"
|
||||
elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
OPENJDK_$1_OS_INCLUDE_SUBDIR="darwin"
|
||||
fi
|
||||
AC_SUBST(OPENJDK_$1_OS_INCLUDE_SUBDIR)
|
||||
])
|
||||
|
||||
AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -78,6 +78,7 @@ OPENJDK_TARGET_CPU_ISADIR:=@OPENJDK_TARGET_CPU_ISADIR@
|
||||
OPENJDK_TARGET_CPU_LEGACY:=@OPENJDK_TARGET_CPU_LEGACY@
|
||||
OPENJDK_TARGET_CPU_LEGACY_LIB:=@OPENJDK_TARGET_CPU_LEGACY_LIB@
|
||||
OPENJDK_TARGET_CPU_OSARCH:=@OPENJDK_TARGET_CPU_OSARCH@
|
||||
OPENJDK_TARGET_OS_INCLUDE_SUBIDR:=@OPENJDK_TARGET_OS_INCLUDE_SUBDIR@
|
||||
|
||||
HOTSPOT_TARGET_OS := @HOTSPOT_TARGET_OS@
|
||||
HOTSPOT_TARGET_OS_TYPE := @HOTSPOT_TARGET_OS_TYPE@
|
||||
@ -100,6 +101,8 @@ OPENJDK_BUILD_CPU_ARCH:=@OPENJDK_BUILD_CPU_ARCH@
|
||||
OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@
|
||||
OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@
|
||||
|
||||
OPENJDK_BUILD_OS_INCLUDE_SUBIDR:=@OPENJDK_TARGET_OS_INCLUDE_SUBDIR@
|
||||
|
||||
# Target platform value in ModuleTarget class file attribute.
|
||||
OPENJDK_MODULE_TARGET_PLATFORM:=@OPENJDK_MODULE_TARGET_PLATFORM@
|
||||
|
||||
@ -189,6 +192,10 @@ VERSION_DATE := @VERSION_DATE@
|
||||
# Vendor version string
|
||||
VENDOR_VERSION_STRING := @VENDOR_VERSION_STRING@
|
||||
|
||||
# Class-file version
|
||||
VERSION_CLASSFILE_MAJOR := @VERSION_CLASSFILE_MAJOR@
|
||||
VERSION_CLASSFILE_MINOR := @VERSION_CLASSFILE_MINOR@
|
||||
|
||||
# Convenience CFLAGS settings for passing version information into native programs.
|
||||
VERSION_CFLAGS := \
|
||||
-DVERSION_FEATURE=$(VERSION_FEATURE) \
|
||||
@ -204,6 +211,8 @@ VERSION_CFLAGS := \
|
||||
-DVERSION_SPECIFICATION='"$(VERSION_SPECIFICATION)"' \
|
||||
-DVERSION_DATE='"$(VERSION_DATE)"' \
|
||||
-DVENDOR_VERSION_STRING='"$(VENDOR_VERSION_STRING)"' \
|
||||
-DVERSION_CLASSFILE_MAJOR=$(VERSION_CLASSFILE_MAJOR) \
|
||||
-DVERSION_CLASSFILE_MINOR=$(VERSION_CLASSFILE_MINOR) \
|
||||
#
|
||||
|
||||
ifneq ($(COMPANY_NAME),)
|
||||
@ -604,6 +613,8 @@ INTERIM_LANGTOOLS_BASE_MODULES := java.compiler jdk.compiler jdk.javadoc
|
||||
INTERIM_LANGTOOLS_MODULES := $(addsuffix .interim, $(INTERIM_LANGTOOLS_BASE_MODULES))
|
||||
INTERIM_LANGTOOLS_ADD_EXPORTS := \
|
||||
--add-exports java.base/sun.reflect.annotation=jdk.compiler.interim \
|
||||
--add-exports java.base/jdk.internal.jmod=jdk.compiler.interim \
|
||||
--add-exports java.base/jdk.internal.misc=jdk.compiler.interim \
|
||||
#
|
||||
INTERIM_LANGTOOLS_MODULES_COMMA := $(strip $(subst $(SPACE),$(COMMA),$(strip \
|
||||
$(INTERIM_LANGTOOLS_MODULES))))
|
||||
|
@ -286,7 +286,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
|
||||
if test "x$XCODE_VERSION_OUTPUT" != x; then
|
||||
# For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
|
||||
TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
|
||||
TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode"
|
||||
TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
|
||||
else
|
||||
# Currently we do not define this for other toolchains. This might change as the need arise.
|
||||
TOOLCHAIN_VERSION=
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
################################################################################
|
||||
# The order of these defines the priority by which we try to find them.
|
||||
VALID_VS_VERSIONS="2013 2012 2010"
|
||||
VALID_VS_VERSIONS="2013 2012 2010 2015 2017"
|
||||
|
||||
VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
|
||||
VS_VERSION_INTERNAL_2010=100
|
||||
@ -58,6 +58,30 @@ VS_SDK_INSTALLDIR_2013=
|
||||
VS_VS_PLATFORM_NAME_2013="v120"
|
||||
VS_SDK_PLATFORM_NAME_2013=
|
||||
|
||||
VS_DESCRIPTION_2015="Microsoft Visual Studio 2015 - CURRENTLY NOT WORKING"
|
||||
VS_VERSION_INTERNAL_2015=140
|
||||
VS_MSVCR_2015=vcruntime140.dll
|
||||
VS_MSVCP_2015=msvcp140.dll
|
||||
VS_ENVVAR_2015="VS140COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2015="Microsoft Visual Studio 14.0"
|
||||
VS_SDK_INSTALLDIR_2015=
|
||||
VS_VS_PLATFORM_NAME_2015="v140"
|
||||
VS_SDK_PLATFORM_NAME_2015=
|
||||
# The vcvars of 2015 breaks if 2017 is also installed. Work around this by
|
||||
# explicitly specifying Windows Kit 8.1 to be used.
|
||||
VS_ENV_ARGS_2015="8.1"
|
||||
|
||||
VS_DESCRIPTION_2017="Microsoft Visual Studio 2017 - CURRENTLY NOT WORKING"
|
||||
VS_VERSION_INTERNAL_2017=141
|
||||
VS_MSVCR_2017=vcruntime140.dll
|
||||
VS_MSVCP_2017=msvcp140.dll
|
||||
VS_ENVVAR_2017="VS150COMNTOOLS"
|
||||
VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
|
||||
VS_EDITIONS_2017="Community Professional Enterprise"
|
||||
VS_SDK_INSTALLDIR_2017=
|
||||
VS_VS_PLATFORM_NAME_2017="v141"
|
||||
VS_SDK_PLATFORM_NAME_2017=
|
||||
|
||||
################################################################################
|
||||
|
||||
AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
|
||||
@ -67,23 +91,41 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
|
||||
VS_BASE="$2"
|
||||
METHOD="$3"
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILE="vc/bin/vcvars32.bat"
|
||||
else
|
||||
VCVARSFILE="vc/bin/amd64/vcvars64.bat"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
|
||||
# In VS 2017, the default installation is in a subdir named after the edition.
|
||||
# Find the first one present and use that.
|
||||
if test "x$VS_EDITIONS" != x; then
|
||||
for edition in $VS_EDITIONS; do
|
||||
if test -d "$VS_BASE/$edition"; then
|
||||
VS_BASE="$VS_BASE/$edition"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
|
||||
if test -d "$VS_BASE"; then
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
|
||||
# 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
|
||||
else
|
||||
AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
|
||||
AC_MSG_NOTICE([Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring])
|
||||
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
|
||||
vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
|
||||
fi
|
||||
|
||||
for VCVARSFILE in $VCVARSFILES; do
|
||||
if test -f "$VS_BASE/$VCVARSFILE"; then
|
||||
VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$VS_ENV_CMD" = x; then
|
||||
AC_MSG_NOTICE([Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring])
|
||||
else
|
||||
# PLATFORM_TOOLSET is used during the compilation of the freetype sources
|
||||
# (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
|
||||
# 'v110' or 'v120' for VS 2010, 2012 or VS2013
|
||||
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -133,7 +175,9 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE],
|
||||
eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
|
||||
eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
|
||||
eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
|
||||
eval VS_EDITIONS="\${VS_EDITIONS_${VS_VERSION}}"
|
||||
eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
|
||||
eval VS_ENV_ARGS="\${VS_ENV_ARGS_${VS_VERSION}}"
|
||||
|
||||
# When using --with-tools-dir, assume it points to the correct and default
|
||||
# version of Visual Studio or that --with-toolchain-version was also set.
|
||||
@ -153,7 +197,6 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE],
|
||||
fi
|
||||
|
||||
VS_ENV_CMD=""
|
||||
VS_ENV_ARGS=""
|
||||
|
||||
if test "x$VS_COMNTOOLS" != x; then
|
||||
TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
|
||||
@ -213,7 +256,11 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
|
||||
elif test "x$DEVKIT_VS_VERSION" != x; then
|
||||
VS_VERSION=$DEVKIT_VS_VERSION
|
||||
TOOLCHAIN_VERSION=$VS_VERSION
|
||||
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
|
||||
# If the devkit has a name, use that as description
|
||||
VS_DESCRIPTION="$DEVKIT_NAME"
|
||||
if test "x$VS_DESCRIPTION" = x; then
|
||||
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
|
||||
fi
|
||||
eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
|
||||
eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
|
||||
eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
|
||||
@ -267,6 +314,11 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
TOOLCHAIN_DESCRIPTION="$VS_DESCRIPTION"
|
||||
if test "$TOOLCHAIN_VERSION" -gt 2013; then
|
||||
UNSUPPORTED_TOOLCHAIN_VERSION=yes
|
||||
fi
|
||||
])
|
||||
|
||||
################################################################################
|
||||
@ -320,6 +372,9 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
|
||||
# This will end up something like:
|
||||
# call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
|
||||
$ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# In some cases, the VS_ENV_CMD will change directory, change back so
|
||||
# the set-vs-env.sh ends up in the right place.
|
||||
$ECHO 'cd %~dp0' >> $EXTRACT_VC_ENV_BAT_FILE
|
||||
# These will end up something like:
|
||||
# C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
|
||||
# The trailing space for everyone except PATH is no typo, but is needed due
|
||||
@ -483,18 +538,30 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
|
||||
MSVC_DLL=
|
||||
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
# Probe: Using well-known location from Visual Studio 10.0
|
||||
if test "x$VCINSTALLDIR" != x; then
|
||||
CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR)
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
if test "$VS_VERSION" -lt 2017; then
|
||||
# Probe: Using well-known location from Visual Studio 12.0 and older
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
fi
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
|
||||
# Probe: Using well-known location from VS 2017
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
|
||||
else
|
||||
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
|
||||
fi
|
||||
fi
|
||||
$ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
|
||||
[well-known location in VCINSTALLDIR])
|
||||
# In case any of the above finds more than one file, loop over them.
|
||||
for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
|
||||
$ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$possible_msvc_dll],
|
||||
[well-known location in VCINSTALLDIR])
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -576,7 +643,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
|
||||
fi
|
||||
fi
|
||||
MSVCR_DLL="$MSVC_DLL"
|
||||
else
|
||||
TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
|
||||
@ -599,7 +666,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
|
||||
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
|
||||
if test "x$MSVC_DLL" = x; then
|
||||
AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
|
||||
fi
|
||||
fi
|
||||
MSVCP_DLL="$MSVC_DLL"
|
||||
else
|
||||
TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
|
||||
|
@ -30,6 +30,8 @@ DEFAULT_VERSION_INTERIM=0
|
||||
DEFAULT_VERSION_UPDATE=0
|
||||
DEFAULT_VERSION_PATCH=0
|
||||
DEFAULT_VERSION_DATE=2018-03-20
|
||||
DEFAULT_VERSION_CLASSFILE_MAJOR=55 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
|
||||
DEFAULT_VERSION_CLASSFILE_MINOR=0
|
||||
|
||||
LAUNCHER_NAME=openjdk
|
||||
PRODUCT_NAME=OpenJDK
|
||||
|
@ -26,13 +26,16 @@
|
||||
ifndef _SETUP_GMK
|
||||
_SETUP_GMK := 1
|
||||
|
||||
# Include custom extension hook
|
||||
$(eval $(call IncludeCustomExtension, common/SetupJavaCompilers.gmk))
|
||||
|
||||
include JavaCompilation.gmk
|
||||
|
||||
DISABLE_WARNINGS := -Xlint:all,-deprecation,-removal,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough,-try,-varargs,-empty,-finally
|
||||
DISABLE_WARNINGS ?= -Xlint:all,-deprecation,-removal,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough,-try,-varargs,-empty,-finally
|
||||
|
||||
# If warnings needs to be non-fatal for testing purposes use a command like:
|
||||
# make JAVAC_WARNINGS="-Xlint:all -Xmaxwarns 10000"
|
||||
JAVAC_WARNINGS := -Xlint:all -Werror
|
||||
JAVAC_WARNINGS ?= -Xlint:all -Werror
|
||||
|
||||
# The BOOT_JAVAC setup uses the boot jdk compiler to compile the tools
|
||||
# and the interim javac, to be run by the boot jdk.
|
||||
@ -69,7 +72,7 @@ $(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \
|
||||
$(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \
|
||||
JVM := $(JAVA_JAVAC), \
|
||||
JAVAC := $(NEW_JAVAC), \
|
||||
FLAGS := -source 10 -target 10 --doclint-format html5 \
|
||||
FLAGS := -source 11 -target 11 --doclint-format html5 \
|
||||
-encoding ascii -XDignore.symbol.file=true $(JAVAC_WARNINGS), \
|
||||
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
||||
SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
|
||||
@ -79,7 +82,7 @@ $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \
|
||||
$(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE_NOWARNINGS, \
|
||||
JVM := $(JAVA_JAVAC), \
|
||||
JAVAC := $(NEW_JAVAC), \
|
||||
FLAGS := -source 10 -target 10 \
|
||||
FLAGS := -source 11 -target 11 \
|
||||
-encoding ascii -XDignore.symbol.file=true $(DISABLE_WARNINGS), \
|
||||
SERVER_DIR := $(SJAVAC_SERVER_DIR), \
|
||||
SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
|
||||
|
@ -829,7 +829,7 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
jtreg: {
|
||||
server: "javare",
|
||||
revision: "4.2",
|
||||
build_number: "b10",
|
||||
build_number: "b11",
|
||||
checksum_file: "MD5_VALUES",
|
||||
file: "jtreg_bin-4.2.zip",
|
||||
environment_name: "JT_HOME",
|
||||
|
@ -24,6 +24,7 @@
|
||||
#
|
||||
|
||||
include CopyCommon.gmk
|
||||
include TextFileProcessing.gmk
|
||||
|
||||
$(eval $(call IncludeCustomExtension, copy/Copy-java.base.gmk))
|
||||
|
||||
@ -244,3 +245,16 @@ ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Generate classfile_constants.h
|
||||
|
||||
$(eval $(call SetupTextFileProcessing, CREATE_CLASSFILE_CONSTANTS_H, \
|
||||
SOURCE_FILES := $(TOPDIR)/src/java.base/share/native/include/classfile_constants.h.template, \
|
||||
OUTPUT_FILE := $(SUPPORT_OUTPUTDIR)/modules_include/java.base/classfile_constants.h, \
|
||||
REPLACEMENTS := \
|
||||
@@VERSION_CLASSFILE_MAJOR@@ => $(VERSION_CLASSFILE_MAJOR) ; \
|
||||
@@VERSION_CLASSFILE_MINOR@@ => $(VERSION_CLASSFILE_MINOR) ; , \
|
||||
))
|
||||
|
||||
TARGETS += $(CREATE_CLASSFILE_CONSTANTS_H)
|
||||
|
||||
################################################################################
|
||||
|
@ -39,20 +39,12 @@ ifneq ($(wildcard $(INCLUDE_SOURCE_DIR)/*), )
|
||||
$(eval $(call SetupCopyFiles, COPY_EXPORTED_INCLUDE, \
|
||||
SRC := $(INCLUDE_SOURCE_DIR), \
|
||||
DEST := $(INCLUDE_TARGET_DIR), \
|
||||
FILES := $(shell $(FIND) $(INCLUDE_SOURCE_DIR) -type f), \
|
||||
FILES := $(filter %.h, $(call CacheFind, $(INCLUDE_SOURCE_DIR))), \
|
||||
))
|
||||
|
||||
TARGETS += $(COPY_EXPORTED_INCLUDE)
|
||||
endif
|
||||
|
||||
# For historical reasons, the OS include directories have odd names.
|
||||
INCLUDE_TARGET_OS_SUBDIR := $(OPENJDK_TARGET_OS)
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
INCLUDE_TARGET_OS_SUBDIR := win32
|
||||
else ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
INCLUDE_TARGET_OS_SUBDIR := darwin
|
||||
endif
|
||||
|
||||
# Use the most specific of OS and OS_TYPE.
|
||||
INCLUDE_SOURCE_OS_DIR := $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS)/native/include
|
||||
ifeq ($(wildcard $(INCLUDE_SOURCE_OS_DIR)/*), )
|
||||
@ -62,8 +54,8 @@ endif
|
||||
ifneq ($(wildcard $(INCLUDE_SOURCE_OS_DIR)/*), )
|
||||
$(eval $(call SetupCopyFiles, COPY_EXPORTED_INCLUDE_OS, \
|
||||
SRC := $(INCLUDE_SOURCE_OS_DIR), \
|
||||
DEST := $(INCLUDE_TARGET_DIR)/$(INCLUDE_TARGET_OS_SUBDIR), \
|
||||
FILES := $(shell $(FIND) $(INCLUDE_SOURCE_OS_DIR) -type f), \
|
||||
DEST := $(INCLUDE_TARGET_DIR)/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR), \
|
||||
FILES := $(filter %.h, $(call CacheFind, $(INCLUDE_SOURCE_OS_DIR))), \
|
||||
))
|
||||
|
||||
TARGETS += $(COPY_EXPORTED_INCLUDE_OS)
|
||||
|
@ -25,6 +25,8 @@
|
||||
|
||||
package java.lang;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/** The CharacterData class encapsulates the large tables found in
|
||||
Java.lang.Character. */
|
||||
|
||||
@ -159,20 +161,39 @@ class CharacterDataLatin1 extends CharacterData {
|
||||
return toUpperCase(ch);
|
||||
}
|
||||
|
||||
// Digit values for codePoints in the 0-255 range. Contents generated using:
|
||||
// for (char i = 0; i < 256; i++) {
|
||||
// int v = -1;
|
||||
// if (i >= '0' && i <= '9') { v = i - '0'; }
|
||||
// else if (i >= 'A' && i <= 'Z') { v = i - 'A' + 10; }
|
||||
// else if (i >= 'a' && i <= 'z') { v = i - 'a' + 10; }
|
||||
// if (i % 20 == 0) System.out.println();
|
||||
// System.out.printf("%2d, ", v);
|
||||
// }
|
||||
//
|
||||
// Analysis has shown that generating the whole array allows the JIT to generate
|
||||
// better code compared to a slimmed down array, such as one cutting off after 'z'
|
||||
private static final byte[] DIGITS = new byte[] {
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1,
|
||||
-1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, 10, 11, 12,
|
||||
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
|
||||
33, 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
|
||||
|
||||
int digit(int ch, int radix) {
|
||||
int value = -1;
|
||||
if (radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
|
||||
int val = getProperties(ch);
|
||||
int kind = val & $$maskType;
|
||||
if (kind == Character.DECIMAL_DIGIT_NUMBER) {
|
||||
value = ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit;
|
||||
}
|
||||
else if ((val & $$maskNumericType) == $$valueJavaSupradecimal) {
|
||||
// Java supradecimal digit
|
||||
value = (ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit) + 10;
|
||||
}
|
||||
int value = DIGITS[ch];
|
||||
if (value >= 0 && radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
|
||||
value = (value < radix) ? value : -1;
|
||||
}
|
||||
return (value < radix) ? value : -1;
|
||||
return value;
|
||||
}
|
||||
|
||||
int getNumericValue(int ch) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, 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
|
||||
@ -869,7 +869,6 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"section in "
|
||||
"<cite>The Java™ Virtual Machine Specification</cite>. "
|
||||
"Since JDWP version 1.5."
|
||||
"<p>
|
||||
(Out
|
||||
(referenceType refType "The reference type ID.")
|
||||
)
|
||||
@ -2723,7 +2722,6 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
"<P>"
|
||||
"The events that are grouped in a composite event are restricted in the "
|
||||
"following ways: "
|
||||
"<P>"
|
||||
"<UL>"
|
||||
"<LI>Only with other thread start events for the same thread:"
|
||||
" <UL>"
|
||||
|
142
make/devkit/createWindowsDevkit2015.sh
Normal file
142
make/devkit/createWindowsDevkit2015.sh
Normal file
@ -0,0 +1,142 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This script copies parts of a Visual Studio installation into a devkit
|
||||
# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin.
|
||||
# erik.joelsson@oracle.com
|
||||
|
||||
VS_VERSION="2015"
|
||||
VS_VERSION_NUM="14.0"
|
||||
VS_VERSION_NUM_NODOT="140"
|
||||
SDK_VERSION="8.1"
|
||||
VS_VERSION_SP="update3"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
|
||||
DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}${VS_VERSION_SP}-devkit"
|
||||
DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
|
||||
|
||||
echo "Creating devkit in $DEVKIT_ROOT"
|
||||
|
||||
MSVCR_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/vcruntime${VS_VERSION_NUM_NODOT}.dll
|
||||
MSVCP_DLL=Microsoft.VC${VS_VERSION_NUM_NODOT}.CRT/msvcp${VS_VERSION_NUM_NODOT}.dll
|
||||
|
||||
################################################################################
|
||||
# Copy Visual Studio files
|
||||
|
||||
eval VSNNNCOMNTOOLS="\"\${VS${VS_VERSION_NUM_NODOT}COMNTOOLS}\""
|
||||
VS_INSTALL_DIR="$(cygpath "$VSNNNCOMNTOOLS/../..")"
|
||||
echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
|
||||
|
||||
if [ ! -d $DEVKIT_ROOT/VC ]; then
|
||||
echo "Copying VC..."
|
||||
mkdir -p $DEVKIT_ROOT/VC/bin
|
||||
cp -r "$VS_INSTALL_DIR/VC/bin/amd64" $DEVKIT_ROOT/VC/bin/
|
||||
cp "$VS_INSTALL_DIR/VC/bin/"*.* $DEVKIT_ROOT/VC/bin/
|
||||
cp -r "$VS_INSTALL_DIR/VC/bin/1033/" $DEVKIT_ROOT/VC/bin/
|
||||
mkdir -p $DEVKIT_ROOT/VC/lib
|
||||
cp -r "$VS_INSTALL_DIR/VC/lib/amd64" $DEVKIT_ROOT/VC/lib/
|
||||
cp "$VS_INSTALL_DIR/VC/lib/"*.* $DEVKIT_ROOT/VC/lib/
|
||||
cp -r "$VS_INSTALL_DIR/VC/include" $DEVKIT_ROOT/VC/
|
||||
mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
|
||||
cp -r "$VS_INSTALL_DIR/VC/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
|
||||
cp -r "$VS_INSTALL_DIR/VC/atlmfc/lib/amd64" $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
cp "$VS_INSTALL_DIR/VC/atlmfc/lib/"*.* $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
mkdir -p $DEVKIT_ROOT/VC/redist
|
||||
cp -r "$VS_INSTALL_DIR/VC/redist/x64" $DEVKIT_ROOT/VC/redist/
|
||||
cp -r "$VS_INSTALL_DIR/VC/redist/x86" $DEVKIT_ROOT/VC/redist/
|
||||
# The redist runtime libs are needed to run the compiler but may not be
|
||||
# installed on the machine where the devkit will be used.
|
||||
cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/
|
||||
cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/amd64/
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/amd64/
|
||||
# The msvcdis dll is needed to run some of the tools in VC/bin but is not
|
||||
# shipped in that directory. Copy it from the common dir.
|
||||
cp "$VS_INSTALL_DIR/Common7/IDE/msvcdis${VS_VERSION_NUM_NODOT}.dll" \
|
||||
$DEVKIT_ROOT/VC/bin/
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# Copy SDK files
|
||||
|
||||
PROGRAMFILES_X86="`env | sed -n 's/^ProgramFiles(x86)=//p'`"
|
||||
SDK_INSTALL_DIR="$(cygpath "$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION")"
|
||||
echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
|
||||
|
||||
if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then
|
||||
echo "Copying SDK..."
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
|
||||
cp -r "$SDK_INSTALL_DIR/bin/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
|
||||
cp -r "$SDK_INSTALL_DIR/bin/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
|
||||
cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x64 $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/"winv*/um/x86 $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/include" $DEVKIT_ROOT/$SDK_VERSION/
|
||||
# In 2015, the new Universal CRT is delivered in the sdk 10 directory
|
||||
# so need to include that as well.
|
||||
mkdir -p $DEVKIT_ROOT/10/lib
|
||||
cp -r "$SDK_INSTALL_DIR/../10/lib/10.0.10240.0/ucrt" $DEVKIT_ROOT/10/lib/
|
||||
mkdir -p $DEVKIT_ROOT/10/include
|
||||
cp -r "$SDK_INSTALL_DIR/../10/include/10.0.10240.0/ucrt" $DEVKIT_ROOT/10/include/
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# Generate devkit.info
|
||||
|
||||
echo-info() {
|
||||
echo "$1" >> $DEVKIT_ROOT/devkit.info
|
||||
}
|
||||
|
||||
echo "Generating devkit.info..."
|
||||
rm -f $DEVKIT_ROOT/devkit.info
|
||||
echo-info "# This file describes to configure how to interpret the contents of this devkit"
|
||||
echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
|
||||
echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt;\$DEVKIT_ROOT/10/include/ucrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib;\$DEVKIT_ROOT/VC/atlmfc/lib;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86;\$DEVKIT_ROOT/10/lib/ucrt/x86\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/amd64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt;\$DEVKIT_ROOT/10/include/ucrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/amd64;\$DEVKIT_ROOT/VC/atlmfc/lib/amd64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64;\$DEVKIT_ROOT/10/lib/ucrt/x64\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
|
||||
|
||||
################################################################################
|
||||
# Copy this script
|
||||
|
||||
echo "Copying this script..."
|
||||
cp $0 $DEVKIT_ROOT/
|
||||
|
||||
################################################################################
|
||||
# Create bundle
|
||||
|
||||
echo "Creating bundle: $DEVKIT_BUNDLE"
|
||||
(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
|
172
make/devkit/createWindowsDevkit2017.sh
Normal file
172
make/devkit/createWindowsDevkit2017.sh
Normal file
@ -0,0 +1,172 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This script copies parts of a Visual Studio installation into a devkit
|
||||
# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin.
|
||||
# erik.joelsson@oracle.com
|
||||
|
||||
VS_VERSION="2017"
|
||||
VS_VERSION_NUM_NODOT="150"
|
||||
VS_DLL_VERSION="140"
|
||||
SDK_VERSION="10"
|
||||
SDK_FULL_VERSION="10.0.16299.0"
|
||||
MSVC_DIR="Microsoft.VC141.CRT"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
|
||||
|
||||
################################################################################
|
||||
# Prepare settings
|
||||
|
||||
# Work around the insanely named ProgramFiles(x86) env variable
|
||||
PROGRAMFILES_X86="$(cygpath "$(env | sed -n 's/^ProgramFiles(x86)=//p')")"
|
||||
|
||||
# Find Visual Studio installation dir
|
||||
eval VSNNNCOMNTOOLS="\"\${VS${VS_VERSION_NUM_NODOT}COMNTOOLS}\""
|
||||
if [ -d "$VSNNNCOMNTOOLS" ]; then
|
||||
VS_INSTALL_DIR="$(cygpath "$VSNNNCOMNTOOLS/../..")"
|
||||
else
|
||||
VS_INSTALL_DIR="${PROGRAMFILES_X86}/Microsoft Visual Studio/2017"
|
||||
VS_INSTALL_DIR="$(ls -d "${VS_INSTALL_DIR}/"{Community,Professional} 2>/dev/null | head -n1)"
|
||||
VS_INSTALL_DIR="$(cygpath "$VS_INSTALL_DIR")"
|
||||
fi
|
||||
echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
|
||||
|
||||
# Extract semantic version
|
||||
POTENTIAL_INI_FILES="Common7\IDE\wdexpress.isolation.ini Common7\IDE\devenv.isolation.ini"
|
||||
for f in $POTENTIAL_INI_FILES; do
|
||||
if [ -f "$VS_INSTALL_DIR/$f" ]; then
|
||||
VS_VERSION_SP="$(grep ^SemanticVersion= "$VS_INSTALL_DIR/$f")"
|
||||
# Remove SemnaticVersion=
|
||||
VS_VERSION_SP="${VS_VERSION_SP#*=}"
|
||||
# Remove suffix of too detailed numbering starting with +
|
||||
VS_VERSION_SP="${VS_VERSION_SP%+*}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$VS_VERSION_SP" ]; then
|
||||
echo "Failed to find SP version"
|
||||
exit 1
|
||||
fi
|
||||
echo "Found Version SP: $VS_VERSION_SP"
|
||||
|
||||
# Setup output dirs
|
||||
DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}-${VS_VERSION_SP}-devkit"
|
||||
DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
|
||||
|
||||
echo "Creating devkit in $DEVKIT_ROOT"
|
||||
|
||||
MSVCR_DLL=${MSVC_DIR}/vcruntime${VS_DLL_VERSION}.dll
|
||||
MSVCP_DLL=${MSVC_DIR}/msvcp${VS_DLL_VERSION}.dll
|
||||
|
||||
################################################################################
|
||||
# Copy Visual Studio files
|
||||
|
||||
if [ ! -d $DEVKIT_ROOT/VC ]; then
|
||||
VC_SUBDIR="VC/Tools/MSVC/14.12.25827"
|
||||
REDIST_SUBDIR="VC/Redist/MSVC/14.12.25810"
|
||||
echo "Copying VC..."
|
||||
mkdir -p $DEVKIT_ROOT/VC/bin
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/
|
||||
mkdir -p $DEVKIT_ROOT/VC/lib
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/
|
||||
mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
|
||||
mkdir -p $DEVKIT_ROOT/VC/Auxiliary
|
||||
cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/
|
||||
mkdir -p $DEVKIT_ROOT/VC/redist
|
||||
cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/
|
||||
cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/
|
||||
|
||||
# The redist runtime libs are needed to run the compiler but may not be
|
||||
# installed on the machine where the devkit will be used.
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x86
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# Copy SDK files
|
||||
|
||||
SDK_INSTALL_DIR="$(cygpath "$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION")"
|
||||
echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
|
||||
|
||||
if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then
|
||||
echo "Copying SDK..."
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
|
||||
cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
|
||||
cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include
|
||||
cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# Generate devkit.info
|
||||
|
||||
echo-info() {
|
||||
echo "$1" >> $DEVKIT_ROOT/devkit.info
|
||||
}
|
||||
|
||||
echo "Generating devkit.info..."
|
||||
rm -f $DEVKIT_ROOT/devkit.info
|
||||
echo-info "# This file describes to configure how to interpret the contents of this devkit"
|
||||
echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
|
||||
echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
|
||||
|
||||
################################################################################
|
||||
# Copy this script
|
||||
|
||||
echo "Copying this script..."
|
||||
cp $0 $DEVKIT_ROOT/
|
||||
|
||||
################################################################################
|
||||
# Create bundle
|
||||
|
||||
echo "Creating bundle: $DEVKIT_BUNDLE"
|
||||
(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
|
@ -168,3 +168,7 @@ $(foreach t, $(VARHANDLES_BYTE_ARRAY_TYPES), \
|
||||
$(eval $(call GenerateVarHandleByteArray,VAR_HANDLE_BYTE_ARRAY_$t,$t)))
|
||||
|
||||
GENSRC_JAVA_BASE += $(GENSRC_VARHANDLES)
|
||||
|
||||
# Include custom extension post hook
|
||||
$(eval $(call IncludeCustomExtension, gensrc/GensrcVarHandles-post.gmk))
|
||||
|
||||
|
@ -92,10 +92,10 @@ ifneq ($(COMPILE_TYPE), cross)
|
||||
endif
|
||||
|
||||
SIZER_CFLAGS := \
|
||||
-I${TOPDIR}/src/hotspot/share/include \
|
||||
-I${TOPDIR}/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
|
||||
-I$(TOPDIR)/src/java.base/share/native/include \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include \
|
||||
-I$(TOPDIR)/src/hotspot/share/include \
|
||||
-I$(TOPDIR)/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
|
||||
-I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
|
||||
-I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
|
||||
-I$(TOPDIR)/src/java.base/share/native/libjava \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/libjava \
|
||||
-I$(TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
|
||||
|
@ -59,8 +59,8 @@ JVM_CFLAGS_INCLUDES += \
|
||||
-I$(TOPDIR)/src/hotspot/share/precompiled \
|
||||
-I$(TOPDIR)/src/hotspot/share/include \
|
||||
-I$(TOPDIR)/src/hotspot/os/$(HOTSPOT_TARGET_OS_TYPE)/include \
|
||||
-I$(TOPDIR)/src/java.base/share/native/include \
|
||||
-I$(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include \
|
||||
-I$(SUPPORT_OUTPUTDIR)/modules_include/java.base \
|
||||
-I$(SUPPORT_OUTPUTDIR)/modules_include/java.base/$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \
|
||||
-I$(TOPDIR)/src/java.base/share/native/libjimage \
|
||||
#
|
||||
|
||||
|
@ -20,16 +20,9 @@ else #with SPEC
|
||||
SEL_MODULES := $(MODULES)
|
||||
endif
|
||||
|
||||
# Find all source dirs for a particular module
|
||||
# $1 - Module to find source dirs for
|
||||
FindIdeaModuleSrcDirs = \
|
||||
$(strip $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
|
||||
$(wildcard $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
|
||||
|
||||
|
||||
idea:
|
||||
$(ECHO) "SUPPORT=$(SUPPORT_OUTPUTDIR)" >> $(OUT)
|
||||
$(ECHO) "MODULE_ROOTS=\"$(foreach mod, $(SEL_MODULES), $(call FindIdeaModuleSrcDirs,$(mod)))\"" >> $(OUT)
|
||||
$(ECHO) "MODULE_ROOTS=\"$(foreach mod, $(SEL_MODULES), $(call FindModuleSrcDirs,$(mod)))\"" >> $(OUT)
|
||||
$(ECHO) "MODULE_NAMES=\"$(strip $(foreach mod, $(SEL_MODULES), $(mod)))\"" >> $(OUT)
|
||||
$(ECHO) "SEL_MODULES=\"$(SEL_MODULES)\"" >> $(OUT)
|
||||
$(ECHO) "BOOT_JDK=\"$(BOOT_JDK)\"" >> $(OUT)
|
||||
|
@ -3,7 +3,6 @@
|
||||
<component name="AntConfiguration">
|
||||
<buildFile url="file://$PROJECT_DIR$/.idea/build.xml">
|
||||
<properties>
|
||||
<property name="boot.java.home" value="$JDKPath$" />
|
||||
<property name="intellij.ismake" value="$IsMake$" />
|
||||
<property name="build.target.dir" value="specDir" /> <!-- this will be replaced -->
|
||||
<property name="module.name" value="java.base" /> <!-- this will be replaced -->
|
||||
|
@ -6,32 +6,16 @@
|
||||
new JdkLogger(project)
|
||||
</script>
|
||||
|
||||
<!-- java.marker is set to a marker file to check for within a Java install dir.
|
||||
The best file to check for across Solaris/Linux/Windows/MacOS is one of the
|
||||
executables; regrettably, that is OS-specific. -->
|
||||
<condition property="java.marker" value="bin/java">
|
||||
<os family="unix"/>
|
||||
</condition>
|
||||
<condition property="java.marker" value="bin/java.exe">
|
||||
<os family="windows"/>
|
||||
</condition>
|
||||
|
||||
<target name="-check-jtreg.home" depends="-def-check">
|
||||
<check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
|
||||
</target>
|
||||
|
||||
<property name="test.dir" value="${basedir}/jdk/test"/>
|
||||
|
||||
<macrodef name="call-make">
|
||||
<attribute name="dir"/>
|
||||
<attribute name="args"/>
|
||||
<sequential>
|
||||
<exec executable="make" dir="@{dir}" failonerror="true">
|
||||
<arg line="@{args}"/>
|
||||
<env key="CLASSPATH" value = ""/>
|
||||
</exec>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
<attribute name="dir"/>
|
||||
<attribute name="args"/>
|
||||
<sequential>
|
||||
<exec executable="make" dir="@{dir}" failonerror="true">
|
||||
<arg line="@{args}"/>
|
||||
<env key="CLASSPATH" value = ""/>
|
||||
</exec>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
|
||||
<target name="cond-clean" unless="${intellij.ismake}">
|
||||
<antcall target="clean"/>
|
||||
@ -43,71 +27,17 @@
|
||||
**** Global JDK Build Targets
|
||||
-->
|
||||
|
||||
<target name="clean" depends="-do-configure">
|
||||
<target name="clean">
|
||||
<echo message="base = ${basedir}"/>
|
||||
<call-make dir = "${build.target.dir}" args = "reconfigure"/>
|
||||
<call-make dir = "${build.target.dir}" args = "clean"/>
|
||||
</target>
|
||||
|
||||
<target name="-do-configure">
|
||||
<echo message="base = ${basedir}"/>
|
||||
<fail message="Not part of a full JDK forest">
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${basedir}/configure" />
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
<exec executable="sh" dir="${basedir}" failonerror="true">
|
||||
<arg line="configure --with-boot-jdk=${boot.java.home}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="images">
|
||||
<call-make dir = "${build.target.dir}" args = "images"/>
|
||||
</target>
|
||||
|
||||
<target name="jimages">
|
||||
<call-make dir = "${build.target.dir}" args = "jimages"/>
|
||||
</target>
|
||||
|
||||
<target name="check-env">
|
||||
<exec executable="env" dir="${basedir}"/>
|
||||
</target>
|
||||
|
||||
<target name="build-module">
|
||||
<call-make dir = "${build.target.dir}" args = "${module.name}"/>
|
||||
</target>
|
||||
|
||||
<target name="-check-boot.java.home" depends="-def-check">
|
||||
<check name="bootstrap java" property="boot.java.home" marker="${java.marker}"/>
|
||||
</target>
|
||||
|
||||
<target name="-def-check">
|
||||
<macrodef name="check">
|
||||
<attribute name="name"/>
|
||||
<attribute name="property"/>
|
||||
<attribute name="marker" default=""/>
|
||||
<sequential>
|
||||
<fail message="Cannot locate @{name}: please set @{property} to its location">
|
||||
<condition>
|
||||
<not>
|
||||
<isset property="@{property}"/>
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
<fail message="@{name} is not installed in ${@{property}}">
|
||||
<condition>
|
||||
<and>
|
||||
<not>
|
||||
<equals arg1="@{marker}" arg2=""/>
|
||||
</not>
|
||||
<not>
|
||||
<available file="${@{property}}/@{marker}"/>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
</fail>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
</project>
|
||||
|
@ -4,11 +4,9 @@
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/####" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/src" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/make" />
|
||||
</content>
|
||||
</content>
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
</component>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -30,8 +30,8 @@ import java.io.*;
|
||||
class AbstractCommandNode extends AbstractNamedNode {
|
||||
|
||||
void document(PrintWriter writer) {
|
||||
writer.println("<h5><a name=\"" + context.whereC + "\">" + name +
|
||||
" Command</a> (" + nameNode.value() + ")</h5>");
|
||||
writer.println("<h5 id=\"" + context.whereC + "\">" + name +
|
||||
" Command (" + nameNode.value() + ")</h5>");
|
||||
writer.println(comment());
|
||||
writer.println("<dl>");
|
||||
for (Node node : components) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, 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
|
||||
@ -62,8 +62,8 @@ abstract class AbstractNamedNode extends Node {
|
||||
}
|
||||
|
||||
void document(PrintWriter writer) {
|
||||
writer.println("<h4><a name=" + name + ">" + name +
|
||||
" Command Set</a></h4>");
|
||||
writer.println("<h4 id=\"" + name + "\">" + name +
|
||||
" Command Set</h4>");
|
||||
for (Node node : components) {
|
||||
node.document(writer);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -43,11 +43,11 @@ abstract class AbstractTypeListNode extends AbstractNamedNode {
|
||||
if (components.isEmpty()) {
|
||||
writer.println("<dd>(None)");
|
||||
} else {
|
||||
writer.println("<dd><table border=1 cellpadding=3 cellspacing=0 width=\"90%\" summary=\"\"><tr>");
|
||||
writer.println("<dd><table><tr>");
|
||||
for (int i = maxStructIndent; i > 0; --i) {
|
||||
writer.print("<th width=\"4%\">");
|
||||
writer.print("<th style=\"width: 4%\">");
|
||||
}
|
||||
writer.println("<th width=\"15%\"><th width=\"65%\">");
|
||||
writer.println("<th style=\"width: 15%\"><th style=\"width: 65%\">");
|
||||
writer.println("");
|
||||
for (Node node : components) {
|
||||
node.document(writer);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, 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
|
||||
@ -38,8 +38,8 @@ class CommandSetNode extends AbstractNamedNode {
|
||||
}
|
||||
|
||||
void document(PrintWriter writer) {
|
||||
writer.println("<h4><a name=\"" + context.whereC + "\">" + name +
|
||||
" Command Set</a> (" +
|
||||
writer.println("<h4 id=\"" + context.whereC + "\">" + name +
|
||||
" Command Set (" +
|
||||
nameNode.value() + ")</h4>");
|
||||
writer.println(comment());
|
||||
for (Node node : components) {
|
||||
@ -51,11 +51,13 @@ class CommandSetNode extends AbstractNamedNode {
|
||||
writer.print("<li><a href=\"#" + context.whereC + "\">");
|
||||
writer.println(name() + "</a> Command Set (" +
|
||||
nameNode.value() + ")");
|
||||
writer.println("<ul>");
|
||||
for (Node node : components) {
|
||||
node.documentIndex(writer);
|
||||
if (components.size() > 0) {
|
||||
writer.println("<ul>");
|
||||
for (Node node : components) {
|
||||
node.documentIndex(writer);
|
||||
}
|
||||
writer.println("</ul>");
|
||||
}
|
||||
writer.println("</ul>");
|
||||
}
|
||||
|
||||
void genJavaClassSpecifics(PrintWriter writer, int depth) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, 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
|
||||
@ -54,15 +54,15 @@ class ConstantSetNode extends AbstractNamedNode {
|
||||
}
|
||||
|
||||
void document(PrintWriter writer) {
|
||||
writer.println("<h4><a name=\"" + context.whereC + "\">" + name +
|
||||
" Constants</a></h4>");
|
||||
writer.println("<h4 id=\"" + context.whereC + "\">" + name +
|
||||
" Constants</h4>");
|
||||
writer.println(comment());
|
||||
writer.println("<dd><table border=1 cellpadding=3 cellspacing=0 width=\"90%\" summary=\"\"><tr>");
|
||||
writer.println("<th width=\"20%\"><th width=\"5%\"><th width=\"65%\">");
|
||||
writer.println("<table><tr>");
|
||||
writer.println("<th style=\"width: 20%\"><th style=\"width: 5%\"><th style=\"width: 65%\">");
|
||||
ConstantNode n;
|
||||
for (Node node : components) {
|
||||
n = (ConstantNode)node;
|
||||
writer.println("<a NAME=\"" + name + "_" + n.name + "\"></a>");
|
||||
writer.println("<span id=\"" + name + "_" + n.name + "\"></span>");
|
||||
n.document(writer);
|
||||
}
|
||||
writer.println("</table>");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -43,7 +43,7 @@ class ErrorSetNode extends AbstractSimpleNode {
|
||||
if (components.isEmpty()) {
|
||||
writer.println("<dd>(None)");
|
||||
} else {
|
||||
writer.println("<dd><table border=1 cellpadding=3 cellspacing=0 width=\"90%\" summary=\"\">");
|
||||
writer.println("<dd><table>");
|
||||
for (Node node : components) {
|
||||
node.document(writer);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, 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
|
||||
@ -41,11 +41,22 @@ class RootNode extends AbstractNamedNode {
|
||||
|
||||
void document(PrintWriter writer) {
|
||||
writer.println("<!DOCTYPE html>");
|
||||
writer.println("<html><head><title>" + comment() + "</title></head>");
|
||||
writer.println("<body bgcolor=\"white\">");
|
||||
writer.println("<html lang=\"en\">");
|
||||
writer.println("<head>");
|
||||
writer.println("<meta charset=\"utf-8\"/>");
|
||||
writer.println("<title>" + comment() + "</title>");
|
||||
writer.println("<style>");
|
||||
writer.println("body {background-color:white;}");
|
||||
writer.println("table {border: 1px solid grey; border-spacing:0px; border-collapse: separate; width: 90%;}");
|
||||
writer.println("td, th {padding: 3px; border: 1px solid black;}");
|
||||
writer.println("</style>");
|
||||
writer.println("</head>");
|
||||
writer.println("<body>");
|
||||
writer.println("<ul>");
|
||||
for (Node node : components) {
|
||||
node.documentIndex(writer);
|
||||
}
|
||||
writer.println("</ul>");
|
||||
for (Node node : components) {
|
||||
node.document(writer);
|
||||
}
|
||||
|
@ -70,3 +70,7 @@ $(BUILD_LIBMANAGEMENT): $(call FindLib, java.base, java)
|
||||
TARGETS += $(BUILD_LIBMANAGEMENT)
|
||||
|
||||
################################################################################
|
||||
|
||||
# Include custom extension post hook
|
||||
$(eval $(call IncludeCustomExtension, lib/Lib-java.management-post.gmk))
|
||||
|
||||
|
@ -80,3 +80,7 @@ $(BUILD_LIBMANAGEMENT_EXT): $(call FindLib, java.base, java)
|
||||
TARGETS += $(BUILD_LIBMANAGEMENT_EXT)
|
||||
|
||||
################################################################################
|
||||
|
||||
# Include custom extension post hook
|
||||
$(eval $(call IncludeCustomExtension, lib/Lib-jdk.management-post.gmk))
|
||||
|
||||
|
@ -258,7 +258,6 @@ SUNWprivate_1.1 {
|
||||
Java_jdk_internal_reflect_NativeConstructorAccessorImpl_newInstance0;
|
||||
Java_jdk_internal_reflect_NativeMethodAccessorImpl_invoke0;
|
||||
Java_jdk_internal_reflect_Reflection_getCallerClass__;
|
||||
Java_jdk_internal_reflect_Reflection_getCallerClass__I;
|
||||
Java_jdk_internal_reflect_Reflection_getClassAccessFlags;
|
||||
Java_jdk_internal_misc_VM_latestUserDefinedLoader0;
|
||||
Java_jdk_internal_misc_VM_getuid;
|
||||
|
@ -27,7 +27,6 @@ text: .text%Java_java_io_FileDescriptor_initIDs;
|
||||
text: .text%Java_java_io_FileOutputStream_initIDs;
|
||||
text: .text%Java_java_lang_System_setIn0;
|
||||
text: .text%Java_sun_reflect_Reflection_getCallerClass__;
|
||||
text: .text%Java_sun_reflect_Reflection_getCallerClass__I;
|
||||
text: .text%Java_java_lang_Class_forName0;
|
||||
text: .text%Java_java_lang_Object_getClass;
|
||||
text: .text%Java_sun_reflect_Reflection_getClassAccessFlags;
|
||||
|
@ -26,7 +26,6 @@ text: .text%Java_java_io_FileDescriptor_initIDs;
|
||||
text: .text%Java_java_io_FileOutputStream_initIDs;
|
||||
text: .text%Java_java_lang_System_setIn0;
|
||||
text: .text%Java_sun_reflect_Reflection_getCallerClass__;
|
||||
text: .text%Java_sun_reflect_Reflection_getCallerClass__I;
|
||||
text: .text%Java_java_lang_Class_forName0;
|
||||
text: .text%Java_java_lang_String_intern;
|
||||
text: .text%Java_java_lang_StringUTF16_isBigEndian;
|
||||
|
@ -27,7 +27,6 @@ text: .text%Java_java_io_FileDescriptor_initIDs;
|
||||
text: .text%Java_java_io_FileOutputStream_initIDs;
|
||||
text: .text%Java_java_lang_System_setIn0;
|
||||
text: .text%Java_sun_reflect_Reflection_getCallerClass__;
|
||||
text: .text%Java_sun_reflect_Reflection_getCallerClass__I;
|
||||
text: .text%Java_java_lang_Class_forName0;
|
||||
text: .text%Java_java_lang_String_intern;
|
||||
text: .text%Java_java_lang_StringUTF16_isBigEndian;
|
||||
|
@ -44,6 +44,7 @@ $(eval $(call IncludeCustomExtension, test/JtregNativeHotspot.gmk))
|
||||
# Add more directories here when needed.
|
||||
BUILD_HOTSPOT_JTREG_NATIVE_SRC += \
|
||||
$(TOPDIR)/test/hotspot/jtreg/gc/g1/TestJNIWeakG1 \
|
||||
$(TOPDIR)/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC \
|
||||
$(TOPDIR)/test/hotspot/jtreg/gc/stress/gclocker \
|
||||
$(TOPDIR)/test/hotspot/jtreg/gc/cslocker \
|
||||
$(TOPDIR)/test/hotspot/jtreg/native_sanity \
|
||||
|
@ -5844,8 +5844,8 @@ operand immPollPage()
|
||||
operand immByteMapBase()
|
||||
%{
|
||||
// Get base of card map
|
||||
predicate((jbyte*)n->get_ptr() ==
|
||||
((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base);
|
||||
predicate(Universe::heap()->barrier_set()->is_a(BarrierSet::CardTableModRef) &&
|
||||
(jbyte*)n->get_ptr() == ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base);
|
||||
match(ConP);
|
||||
|
||||
op_cost(0);
|
||||
|
@ -848,7 +848,7 @@ public:
|
||||
// architecture. In debug mode we shrink it in order to test
|
||||
// trampolines, but not so small that branches in the interpreter
|
||||
// are out of range.
|
||||
static const unsigned long branch_range = INCLUDE_JVMCI ? 128 * M : NOT_DEBUG(128 * M) DEBUG_ONLY(2 * M);
|
||||
static const unsigned long branch_range = NOT_DEBUG(128 * M) DEBUG_ONLY(2 * M);
|
||||
|
||||
static bool reachable_from_branch_at(address branch, address target) {
|
||||
return uabs(target - branch) < branch_range;
|
||||
@ -2295,23 +2295,32 @@ public:
|
||||
rf(Vn, 5), rf(Rd, 0);
|
||||
}
|
||||
|
||||
#define INSN(NAME, opc, opc2) \
|
||||
#define INSN(NAME, opc, opc2, isSHR) \
|
||||
void NAME(FloatRegister Vd, SIMD_Arrangement T, FloatRegister Vn, int shift){ \
|
||||
starti; \
|
||||
/* The encodings for the immh:immb fields (bits 22:16) are \
|
||||
* 0001 xxx 8B/16B, shift = xxx \
|
||||
* 001x xxx 4H/8H, shift = xxxx \
|
||||
* 01xx xxx 2S/4S, shift = xxxxx \
|
||||
* 1xxx xxx 1D/2D, shift = xxxxxx (1D is RESERVED) \
|
||||
/* The encodings for the immh:immb fields (bits 22:16) in *SHR are \
|
||||
* 0001 xxx 8B/16B, shift = 16 - UInt(immh:immb) \
|
||||
* 001x xxx 4H/8H, shift = 32 - UInt(immh:immb) \
|
||||
* 01xx xxx 2S/4S, shift = 64 - UInt(immh:immb) \
|
||||
* 1xxx xxx 1D/2D, shift = 128 - UInt(immh:immb) \
|
||||
* (1D is RESERVED) \
|
||||
* for SHL shift is calculated as: \
|
||||
* 0001 xxx 8B/16B, shift = UInt(immh:immb) - 8 \
|
||||
* 001x xxx 4H/8H, shift = UInt(immh:immb) - 16 \
|
||||
* 01xx xxx 2S/4S, shift = UInt(immh:immb) - 32 \
|
||||
* 1xxx xxx 1D/2D, shift = UInt(immh:immb) - 64 \
|
||||
* (1D is RESERVED) \
|
||||
*/ \
|
||||
assert((1 << ((T>>1)+3)) > shift, "Invalid Shift value"); \
|
||||
int cVal = (1 << (((T >> 1) + 3) + (isSHR ? 1 : 0))); \
|
||||
int encodedShift = isSHR ? cVal - shift : cVal + shift; \
|
||||
f(0, 31), f(T & 1, 30), f(opc, 29), f(0b011110, 28, 23), \
|
||||
f((1 << ((T>>1)+3))|shift, 22, 16); f(opc2, 15, 10), rf(Vn, 5), rf(Vd, 0); \
|
||||
f(encodedShift, 22, 16); f(opc2, 15, 10), rf(Vn, 5), rf(Vd, 0); \
|
||||
}
|
||||
|
||||
INSN(shl, 0, 0b010101);
|
||||
INSN(sshr, 0, 0b000001);
|
||||
INSN(ushr, 1, 0b000001);
|
||||
INSN(shl, 0, 0b010101, /* isSHR = */ false);
|
||||
INSN(sshr, 0, 0b000001, /* isSHR = */ true);
|
||||
INSN(ushr, 1, 0b000001, /* isSHR = */ true);
|
||||
|
||||
#undef INSN
|
||||
|
||||
|
@ -71,6 +71,13 @@ int CompiledStaticCall::to_interp_stub_size() {
|
||||
return 7 * NativeInstruction::instruction_size;
|
||||
}
|
||||
|
||||
int CompiledStaticCall::to_trampoline_stub_size() {
|
||||
// Somewhat pessimistically, we count 3 instructions here (although
|
||||
// there are only two) because we sometimes emit an alignment nop.
|
||||
// Trampoline stubs are always word aligned.
|
||||
return 3 * NativeInstruction::instruction_size + wordSize;
|
||||
}
|
||||
|
||||
// Relocation entries for call stub, compiled java to interpreter.
|
||||
int CompiledStaticCall::reloc_to_interp_stub() {
|
||||
return 4; // 3 in emit_to_interp_stub + 1 in emit_call
|
||||
|
@ -109,7 +109,7 @@ void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong forei
|
||||
TRACE_jvmci_3("relocating (foreign call) at " PTR_FORMAT, p2i(inst));
|
||||
}
|
||||
|
||||
void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) {
|
||||
void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &cbuf, Handle hotspot_method, jint pc_offset, TRAPS) {
|
||||
#ifdef ASSERT
|
||||
Method* method = NULL;
|
||||
// we need to check, this might also be an unresolved method
|
||||
@ -124,22 +124,22 @@ void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset
|
||||
case INVOKEINTERFACE: {
|
||||
assert(method == NULL || !method->is_static(), "cannot call static method with invokeinterface");
|
||||
NativeCall* call = nativeCall_at(_instructions->start() + pc_offset);
|
||||
call->set_destination(SharedRuntime::get_resolve_virtual_call_stub());
|
||||
_instructions->relocate(call->instruction_address(), virtual_call_Relocation::spec(_invoke_mark_pc));
|
||||
call->trampoline_jump(cbuf, SharedRuntime::get_resolve_virtual_call_stub());
|
||||
break;
|
||||
}
|
||||
case INVOKESTATIC: {
|
||||
assert(method == NULL || method->is_static(), "cannot call non-static method with invokestatic");
|
||||
NativeCall* call = nativeCall_at(_instructions->start() + pc_offset);
|
||||
call->set_destination(SharedRuntime::get_resolve_static_call_stub());
|
||||
_instructions->relocate(call->instruction_address(), relocInfo::static_call_type);
|
||||
call->trampoline_jump(cbuf, SharedRuntime::get_resolve_static_call_stub());
|
||||
break;
|
||||
}
|
||||
case INVOKESPECIAL: {
|
||||
assert(method == NULL || !method->is_static(), "cannot call static method with invokespecial");
|
||||
NativeCall* call = nativeCall_at(_instructions->start() + pc_offset);
|
||||
call->set_destination(SharedRuntime::get_resolve_opt_virtual_call_stub());
|
||||
_instructions->relocate(call->instruction_address(), relocInfo::opt_virtual_call_type);
|
||||
call->trampoline_jump(cbuf, SharedRuntime::get_resolve_opt_virtual_call_stub());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -801,7 +801,7 @@ address MacroAssembler::emit_trampoline_stub(int insts_call_instruction_offset,
|
||||
assert(is_NativeCallTrampolineStub_at(stub_start_addr), "doesn't look like a trampoline");
|
||||
|
||||
end_a_stub();
|
||||
return stub;
|
||||
return stub_start_addr;
|
||||
}
|
||||
|
||||
address MacroAssembler::ic_call(address entry, jint method_index) {
|
||||
|
@ -367,3 +367,24 @@ void NativeCallTrampolineStub::set_destination(address new_destination) {
|
||||
set_ptr_at(data_offset, new_destination);
|
||||
OrderAccess::release();
|
||||
}
|
||||
|
||||
// Generate a trampoline for a branch to dest. If there's no need for a
|
||||
// trampoline, simply patch the call directly to dest.
|
||||
address NativeCall::trampoline_jump(CodeBuffer &cbuf, address dest) {
|
||||
MacroAssembler a(&cbuf);
|
||||
address stub = NULL;
|
||||
|
||||
if (a.far_branches()
|
||||
&& ! is_NativeCallTrampolineStub_at(instruction_address() + displacement())) {
|
||||
stub = a.emit_trampoline_stub(instruction_address() - cbuf.insts()->start(), dest);
|
||||
}
|
||||
|
||||
if (stub == NULL) {
|
||||
// If we generated no stub, patch this call directly to dest.
|
||||
// This will happen if we don't need far branches or if there
|
||||
// already was a trampoline.
|
||||
set_destination(dest);
|
||||
}
|
||||
|
||||
return stub;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ class NativeInstruction VALUE_OBJ_CLASS_SPEC {
|
||||
return uint_at(0);
|
||||
}
|
||||
|
||||
bool is_blr() const { return (encoding() & 0xfffffc1f) == 0xd63f0000; }
|
||||
bool is_blr() const { return (encoding() & 0xff9ffc1f) == 0xd61f0000; } // blr(register) or br(register)
|
||||
bool is_adr_aligned() const { return (encoding() & 0xff000000) == 0x10000000; } // adr Xn, <label>, where label is aligned to 4 bytes (address of instruction).
|
||||
|
||||
inline bool is_nop();
|
||||
@ -143,8 +143,9 @@ inline NativeInstruction* nativeInstruction_at(uint32_t *address) {
|
||||
}
|
||||
|
||||
inline NativeCall* nativeCall_at(address address);
|
||||
// The NativeCall is an abstraction for accessing/manipulating native call imm32/rel32off
|
||||
// instructions (used to manipulate inline caches, primitive & dll calls, etc.).
|
||||
// The NativeCall is an abstraction for accessing/manipulating native
|
||||
// call instructions (used to manipulate inline caches, primitive &
|
||||
// DSO calls, etc.).
|
||||
|
||||
class NativeCall: public NativeInstruction {
|
||||
public:
|
||||
@ -155,7 +156,6 @@ class NativeCall: public NativeInstruction {
|
||||
return_address_offset = 4
|
||||
};
|
||||
|
||||
enum { cache_line_size = BytesPerWord }; // conservative estimate!
|
||||
address instruction_address() const { return addr_at(instruction_offset); }
|
||||
address next_instruction_address() const { return addr_at(return_address_offset); }
|
||||
int displacement() const { return (int_at(displacement_offset) << 6) >> 4; }
|
||||
@ -206,6 +206,7 @@ class NativeCall: public NativeInstruction {
|
||||
void set_destination_mt_safe(address dest, bool assert_lock = true);
|
||||
|
||||
address get_trampoline();
|
||||
address trampoline_jump(CodeBuffer &cbuf, address dest);
|
||||
};
|
||||
|
||||
inline NativeCall* nativeCall_at(address address) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -35,4 +35,10 @@
|
||||
format_width = 0
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
// This platform has no oops in the code that are not also
|
||||
// listed in the oop section.
|
||||
static bool mustIterateImmediateOopsInCode() { return false; }
|
||||
|
||||
#endif // CPU_AARCH64_VM_RELOCINFO_AARCH64_HPP
|
||||
|
@ -3421,7 +3421,6 @@ void TemplateTable::_new() {
|
||||
Label done;
|
||||
Label initialize_header;
|
||||
Label initialize_object; // including clearing the fields
|
||||
Label allocate_shared;
|
||||
|
||||
__ get_cpool_and_tags(r4, r0);
|
||||
// Make sure the class we're about to instantiate has been resolved.
|
||||
@ -3450,18 +3449,24 @@ void TemplateTable::_new() {
|
||||
// test to see if it has a finalizer or is malformed in some way
|
||||
__ tbnz(r3, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case);
|
||||
|
||||
// Allocate the instance
|
||||
// 1) Try to allocate in the TLAB
|
||||
// 2) if fail and the object is large allocate in the shared Eden
|
||||
// 3) if the above fails (or is not applicable), go to a slow case
|
||||
// (creates a new TLAB, etc.)
|
||||
|
||||
// Allocate the instance:
|
||||
// If TLAB is enabled:
|
||||
// Try to allocate in the TLAB.
|
||||
// If fails, go to the slow path.
|
||||
// Else If inline contiguous allocations are enabled:
|
||||
// Try to allocate in eden.
|
||||
// If fails due to heap end, go to slow path.
|
||||
//
|
||||
// If TLAB is enabled OR inline contiguous is enabled:
|
||||
// Initialize the allocation.
|
||||
// Exit.
|
||||
//
|
||||
// Go to slow path.
|
||||
const bool allow_shared_alloc =
|
||||
Universe::heap()->supports_inline_contig_alloc();
|
||||
|
||||
if (UseTLAB) {
|
||||
__ tlab_allocate(r0, r3, 0, noreg, r1,
|
||||
allow_shared_alloc ? allocate_shared : slow_case);
|
||||
__ tlab_allocate(r0, r3, 0, noreg, r1, slow_case);
|
||||
|
||||
if (ZeroTLAB) {
|
||||
// the fields have been already cleared
|
||||
@ -3470,19 +3475,19 @@ void TemplateTable::_new() {
|
||||
// initialize both the header and fields
|
||||
__ b(initialize_object);
|
||||
}
|
||||
} else {
|
||||
// Allocation in the shared Eden, if allowed.
|
||||
//
|
||||
// r3: instance size in bytes
|
||||
if (allow_shared_alloc) {
|
||||
__ eden_allocate(r0, r3, 0, r10, slow_case);
|
||||
__ incr_allocated_bytes(rthread, r3, 0, rscratch1);
|
||||
}
|
||||
}
|
||||
|
||||
// Allocation in the shared Eden, if allowed.
|
||||
//
|
||||
// r3: instance size in bytes
|
||||
if (allow_shared_alloc) {
|
||||
__ bind(allocate_shared);
|
||||
|
||||
__ eden_allocate(r0, r3, 0, r10, slow_case);
|
||||
__ incr_allocated_bytes(rthread, r3, 0, rscratch1);
|
||||
}
|
||||
|
||||
if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// If UseTLAB or allow_shared_alloc are true, the object is created above and
|
||||
// there is an initialize need. Otherwise, skip and go to the slow path.
|
||||
if (UseTLAB || allow_shared_alloc) {
|
||||
// The object is initialized before the header. If the object size is
|
||||
// zero, go directly to the header initialization.
|
||||
__ bind(initialize_object);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -32,4 +32,10 @@
|
||||
format_width = 0
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
// This platform has no oops in the code that are not also
|
||||
// listed in the oop section.
|
||||
static bool mustIterateImmediateOopsInCode() { return false; }
|
||||
|
||||
#endif // CPU_ARM_VM_RELOCINFO_ARM_HPP
|
||||
|
@ -4335,7 +4335,6 @@ void TemplateTable::_new() {
|
||||
Label done;
|
||||
Label initialize_header;
|
||||
Label initialize_object; // including clearing the fields
|
||||
Label allocate_shared;
|
||||
|
||||
const bool allow_shared_alloc =
|
||||
Universe::heap()->supports_inline_contig_alloc();
|
||||
@ -4380,13 +4379,19 @@ void TemplateTable::_new() {
|
||||
// Klass::_lh_instance_slow_path_bit is really a bit mask, not bit number
|
||||
__ tbnz(Rsize, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case);
|
||||
|
||||
// Allocate the instance:
|
||||
// If TLAB is enabled:
|
||||
// Try to allocate in the TLAB.
|
||||
// If fails, go to the slow path.
|
||||
// Else If inline contiguous allocations are enabled:
|
||||
// Try to allocate in eden.
|
||||
// If fails due to heap end, go to slow path.
|
||||
//
|
||||
// Allocate the instance
|
||||
// 1) Try to allocate in the TLAB
|
||||
// 2) if fail and the object is large allocate in the shared Eden
|
||||
// 3) if the above fails (or is not applicable), go to a slow case
|
||||
// (creates a new TLAB, etc.)
|
||||
|
||||
// If TLAB is enabled OR inline contiguous is enabled:
|
||||
// Initialize the allocation.
|
||||
// Exit.
|
||||
//
|
||||
// Go to slow path.
|
||||
if (UseTLAB) {
|
||||
const Register Rtlab_top = R1_tmp;
|
||||
const Register Rtlab_end = R2_tmp;
|
||||
@ -4396,7 +4401,7 @@ void TemplateTable::_new() {
|
||||
__ ldr(Rtlab_end, Address(Rthread, in_bytes(JavaThread::tlab_end_offset())));
|
||||
__ add(Rtlab_top, Robj, Rsize);
|
||||
__ cmp(Rtlab_top, Rtlab_end);
|
||||
__ b(allow_shared_alloc ? allocate_shared : slow_case, hi);
|
||||
__ b(slow_case, hi);
|
||||
__ str(Rtlab_top, Address(Rthread, JavaThread::tlab_top_offset()));
|
||||
if (ZeroTLAB) {
|
||||
// the fields have been already cleared
|
||||
@ -4405,45 +4410,43 @@ void TemplateTable::_new() {
|
||||
// initialize both the header and fields
|
||||
__ b(initialize_object);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Allocation in the shared Eden, if allowed.
|
||||
if (allow_shared_alloc) {
|
||||
const Register Rheap_top_addr = R2_tmp;
|
||||
const Register Rheap_top = R5_tmp;
|
||||
const Register Rheap_end = Rtemp;
|
||||
assert_different_registers(Robj, Rklass, Rsize, Rheap_top_addr, Rheap_top, Rheap_end, LR);
|
||||
|
||||
// Allocation in the shared Eden, if allowed.
|
||||
if (allow_shared_alloc) {
|
||||
__ bind(allocate_shared);
|
||||
// heap_end now (re)loaded in the loop since also used as a scratch register in the CAS
|
||||
__ ldr_literal(Rheap_top_addr, Lheap_top_addr);
|
||||
|
||||
const Register Rheap_top_addr = R2_tmp;
|
||||
const Register Rheap_top = R5_tmp;
|
||||
const Register Rheap_end = Rtemp;
|
||||
assert_different_registers(Robj, Rklass, Rsize, Rheap_top_addr, Rheap_top, Rheap_end, LR);
|
||||
|
||||
// heap_end now (re)loaded in the loop since also used as a scratch register in the CAS
|
||||
__ ldr_literal(Rheap_top_addr, Lheap_top_addr);
|
||||
|
||||
Label retry;
|
||||
__ bind(retry);
|
||||
Label retry;
|
||||
__ bind(retry);
|
||||
|
||||
#ifdef AARCH64
|
||||
__ ldxr(Robj, Rheap_top_addr);
|
||||
__ ldxr(Robj, Rheap_top_addr);
|
||||
#else
|
||||
__ ldr(Robj, Address(Rheap_top_addr));
|
||||
__ ldr(Robj, Address(Rheap_top_addr));
|
||||
#endif // AARCH64
|
||||
|
||||
__ ldr(Rheap_end, Address(Rheap_top_addr, (intptr_t)Universe::heap()->end_addr()-(intptr_t)Universe::heap()->top_addr()));
|
||||
__ add(Rheap_top, Robj, Rsize);
|
||||
__ cmp(Rheap_top, Rheap_end);
|
||||
__ b(slow_case, hi);
|
||||
__ ldr(Rheap_end, Address(Rheap_top_addr, (intptr_t)Universe::heap()->end_addr()-(intptr_t)Universe::heap()->top_addr()));
|
||||
__ add(Rheap_top, Robj, Rsize);
|
||||
__ cmp(Rheap_top, Rheap_end);
|
||||
__ b(slow_case, hi);
|
||||
|
||||
// Update heap top atomically.
|
||||
// If someone beats us on the allocation, try again, otherwise continue.
|
||||
// Update heap top atomically.
|
||||
// If someone beats us on the allocation, try again, otherwise continue.
|
||||
#ifdef AARCH64
|
||||
__ stxr(Rtemp2, Rheap_top, Rheap_top_addr);
|
||||
__ cbnz_w(Rtemp2, retry);
|
||||
__ stxr(Rtemp2, Rheap_top, Rheap_top_addr);
|
||||
__ cbnz_w(Rtemp2, retry);
|
||||
#else
|
||||
__ atomic_cas_bool(Robj, Rheap_top, Rheap_top_addr, 0, Rheap_end/*scratched*/);
|
||||
__ b(retry, ne);
|
||||
__ atomic_cas_bool(Robj, Rheap_top, Rheap_top_addr, 0, Rheap_end/*scratched*/);
|
||||
__ b(retry, ne);
|
||||
#endif // AARCH64
|
||||
|
||||
__ incr_allocated_bytes(Rsize, Rtemp);
|
||||
__ incr_allocated_bytes(Rsize, Rtemp);
|
||||
}
|
||||
}
|
||||
|
||||
if (UseTLAB || allow_shared_alloc) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -34,8 +34,8 @@
|
||||
#include "runtime/basicLock.hpp"
|
||||
#include "runtime/biasedLocking.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
#include "utilities/align.hpp"
|
||||
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -33,36 +33,36 @@
|
||||
// (see c1_globals.hpp)
|
||||
|
||||
#ifndef TIERED
|
||||
define_pd_global(bool, BackgroundCompilation, true );
|
||||
define_pd_global(bool, CICompileOSR, true );
|
||||
define_pd_global(bool, InlineIntrinsics, true );
|
||||
define_pd_global(bool, PreferInterpreterNativeStubs, false);
|
||||
define_pd_global(bool, ProfileTraps, false);
|
||||
define_pd_global(bool, UseOnStackReplacement, true );
|
||||
define_pd_global(bool, TieredCompilation, false);
|
||||
define_pd_global(intx, CompileThreshold, 1000 );
|
||||
define_pd_global(bool, BackgroundCompilation, true);
|
||||
define_pd_global(bool, CICompileOSR, true);
|
||||
define_pd_global(bool, InlineIntrinsics, true);
|
||||
define_pd_global(bool, PreferInterpreterNativeStubs, false);
|
||||
define_pd_global(bool, ProfileTraps, false);
|
||||
define_pd_global(bool, UseOnStackReplacement, true);
|
||||
define_pd_global(bool, TieredCompilation, false);
|
||||
define_pd_global(intx, CompileThreshold, 1000);
|
||||
|
||||
define_pd_global(intx, OnStackReplacePercentage, 1400 );
|
||||
define_pd_global(bool, UseTLAB, true );
|
||||
define_pd_global(bool, ProfileInterpreter, false);
|
||||
define_pd_global(intx, FreqInlineSize, 325 );
|
||||
define_pd_global(bool, ResizeTLAB, true );
|
||||
define_pd_global(intx, ReservedCodeCacheSize, 32*M );
|
||||
define_pd_global(intx, CodeCacheExpansionSize, 32*K );
|
||||
define_pd_global(uintx,CodeCacheMinBlockLength, 1);
|
||||
define_pd_global(uintx,MetaspaceSize, 12*M );
|
||||
define_pd_global(bool, NeverActAsServerClassMachine, true );
|
||||
define_pd_global(intx, NewSizeThreadIncrease, 16*K );
|
||||
define_pd_global(uint64_t,MaxRAM, 1ULL*G);
|
||||
define_pd_global(intx, InitialCodeCacheSize, 160*K);
|
||||
define_pd_global(intx, OnStackReplacePercentage, 1400);
|
||||
define_pd_global(bool, UseTLAB, true);
|
||||
define_pd_global(bool, ProfileInterpreter, false);
|
||||
define_pd_global(intx, FreqInlineSize, 325 );
|
||||
define_pd_global(bool, ResizeTLAB, true);
|
||||
define_pd_global(uintx, ReservedCodeCacheSize, 32*M);
|
||||
define_pd_global(uintx, CodeCacheExpansionSize, 32*K);
|
||||
define_pd_global(uintx, CodeCacheMinBlockLength, 1);
|
||||
define_pd_global(size_t, MetaspaceSize, 12*M);
|
||||
define_pd_global(bool, NeverActAsServerClassMachine, true);
|
||||
define_pd_global(size_t, NewSizeThreadIncrease, 16*K);
|
||||
define_pd_global(uint64_t, MaxRAM, 1ULL*G);
|
||||
define_pd_global(uintx, InitialCodeCacheSize, 160*K);
|
||||
#endif // !TIERED
|
||||
|
||||
define_pd_global(bool, UseTypeProfile, false);
|
||||
define_pd_global(bool, RoundFPResults, false);
|
||||
define_pd_global(bool, UseTypeProfile, false);
|
||||
define_pd_global(bool, RoundFPResults, false);
|
||||
|
||||
define_pd_global(bool, LIRFillDelaySlots, false);
|
||||
define_pd_global(bool, OptimizeSinglePrecision, false);
|
||||
define_pd_global(bool, CSEArrayLength, true );
|
||||
define_pd_global(bool, TwoOperandLIRForm, false);
|
||||
define_pd_global(bool, LIRFillDelaySlots, false);
|
||||
define_pd_global(bool, OptimizeSinglePrecision, false);
|
||||
define_pd_global(bool, CSEArrayLength, true);
|
||||
define_pd_global(bool, TwoOperandLIRForm, false);
|
||||
|
||||
#endif // CPU_PPC_VM_C1_GLOBALS_PPC_HPP
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2016 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -39,7 +39,7 @@ define_pd_global(bool, PreferInterpreterNativeStubs, false);
|
||||
define_pd_global(bool, ProfileTraps, true);
|
||||
define_pd_global(bool, UseOnStackReplacement, true);
|
||||
define_pd_global(bool, ProfileInterpreter, true);
|
||||
define_pd_global(bool, TieredCompilation, true);
|
||||
define_pd_global(bool, TieredCompilation, trueInTiered);
|
||||
define_pd_global(intx, CompileThreshold, 10000);
|
||||
|
||||
define_pd_global(intx, OnStackReplacePercentage, 140);
|
||||
@ -78,27 +78,27 @@ define_pd_global(bool, SuperWordLoopUnrollAnalysis, false);
|
||||
// x.f = 0
|
||||
// loc = x.f
|
||||
// NullCheck loc
|
||||
define_pd_global(bool, OptoScheduling, false);
|
||||
define_pd_global(bool, IdealizeClearArrayNode, true);
|
||||
define_pd_global(bool, OptoScheduling, false);
|
||||
define_pd_global(bool, IdealizeClearArrayNode, true);
|
||||
|
||||
define_pd_global(intx, InitialCodeCacheSize, 2048*K); // Integral multiple of CodeCacheExpansionSize
|
||||
define_pd_global(intx, ReservedCodeCacheSize, 256*M);
|
||||
define_pd_global(intx, NonProfiledCodeHeapSize, 125*M);
|
||||
define_pd_global(intx, ProfiledCodeHeapSize, 126*M);
|
||||
define_pd_global(intx, NonNMethodCodeHeapSize, 5*M );
|
||||
define_pd_global(intx, CodeCacheExpansionSize, 64*K);
|
||||
define_pd_global(uintx, InitialCodeCacheSize, 2048*K); // Integral multiple of CodeCacheExpansionSize
|
||||
define_pd_global(uintx, ReservedCodeCacheSize, 256*M);
|
||||
define_pd_global(uintx, NonProfiledCodeHeapSize, 125*M);
|
||||
define_pd_global(uintx, ProfiledCodeHeapSize, 126*M);
|
||||
define_pd_global(uintx, NonNMethodCodeHeapSize, 5*M );
|
||||
define_pd_global(uintx, CodeCacheExpansionSize, 64*K);
|
||||
|
||||
// Ergonomics related flags
|
||||
define_pd_global(uint64_t, MaxRAM, 4ULL*G);
|
||||
define_pd_global(uintx, CodeCacheMinBlockLength, 4);
|
||||
define_pd_global(uintx, CodeCacheMinimumUseSpace, 400*K);
|
||||
define_pd_global(uint64_t, MaxRAM, 128ULL*G);
|
||||
define_pd_global(uintx, CodeCacheMinBlockLength, 4);
|
||||
define_pd_global(uintx, CodeCacheMinimumUseSpace, 400*K);
|
||||
|
||||
define_pd_global(bool, TrapBasedRangeChecks, true);
|
||||
define_pd_global(bool, TrapBasedRangeChecks, true);
|
||||
|
||||
// Heap related flags
|
||||
define_pd_global(size_t, MetaspaceSize, ScaleForWordSize(16*M));
|
||||
define_pd_global(size_t, MetaspaceSize, ScaleForWordSize(16*M));
|
||||
|
||||
// Ergonomics related flags
|
||||
define_pd_global(bool, NeverActAsServerClassMachine, false);
|
||||
define_pd_global(bool, NeverActAsServerClassMachine, false);
|
||||
|
||||
#endif // CPU_PPC_VM_C2_GLOBALS_PPC_HPP
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,11 +29,11 @@
|
||||
#include "runtime/globals.hpp"
|
||||
#include "utilities/debug.hpp"
|
||||
|
||||
// processor dependent initialization for ppc
|
||||
// Processor dependent initialization of C2 compiler for ppc.
|
||||
|
||||
void Compile::pd_compiler2_init() {
|
||||
|
||||
// Power7 and later
|
||||
// Power7 and later.
|
||||
if (PowerArchitecturePPC64 > 6) {
|
||||
if (FLAG_IS_DEFAULT(UsePopCountInstruction)) {
|
||||
FLAG_SET_ERGO(bool, UsePopCountInstruction, true);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. 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
|
||||
@ -86,14 +86,14 @@ define_pd_global(intx, InitArrayShortSize, 9*BytesPerLong);
|
||||
define_pd_global(bool, ThreadLocalHandshakes, true);
|
||||
|
||||
// Platform dependent flag handling: flags only defined on this platform.
|
||||
#define ARCH_FLAGS(develop, \
|
||||
product, \
|
||||
diagnostic, \
|
||||
#define ARCH_FLAGS(develop, \
|
||||
product, \
|
||||
diagnostic, \
|
||||
experimental, \
|
||||
notproduct, \
|
||||
range, \
|
||||
constraint, \
|
||||
writeable) \
|
||||
notproduct, \
|
||||
range, \
|
||||
constraint, \
|
||||
writeable) \
|
||||
\
|
||||
product(uintx, PowerArchitecturePPC64, 0, \
|
||||
"CPU Version: x for PowerX. Currently recognizes Power5 to " \
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. 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
|
||||
@ -24,7 +24,6 @@
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "assembler_ppc.inline.hpp"
|
||||
#include "runtime/icache.hpp"
|
||||
|
||||
// Use inline assembler to implement icache flush.
|
||||
@ -32,7 +31,7 @@ int ICache::ppc64_flush_icache(address start, int lines, int magic) {
|
||||
address end = start + (unsigned int)lines*ICache::line_size;
|
||||
assert(start <= end, "flush_icache parms");
|
||||
|
||||
// store modified cache lines from data cache
|
||||
// Store modified cache lines from data cache.
|
||||
for (address a = start; a < end; a += ICache::line_size) {
|
||||
__asm__ __volatile__(
|
||||
"dcbst 0, %0 \n"
|
||||
@ -48,7 +47,7 @@ int ICache::ppc64_flush_icache(address start, int lines, int magic) {
|
||||
:
|
||||
: "memory");
|
||||
|
||||
// invalidate respective cache lines in instruction cache
|
||||
// Invalidate respective cache lines in instruction cache.
|
||||
for (address a = start; a < end; a += ICache::line_size) {
|
||||
__asm__ __volatile__(
|
||||
"icbi 0, %0 \n"
|
||||
@ -57,7 +56,7 @@ int ICache::ppc64_flush_icache(address start, int lines, int magic) {
|
||||
: "memory");
|
||||
}
|
||||
|
||||
// discard fetched instructions
|
||||
// Discard fetched instructions.
|
||||
__asm__ __volatile__(
|
||||
"isync \n"
|
||||
:
|
||||
@ -71,6 +70,8 @@ void ICacheStubGenerator::generate_icache_flush(ICache::flush_icache_stub_t* flu
|
||||
|
||||
*flush_icache_stub = (ICache::flush_icache_stub_t)ICache::ppc64_flush_icache;
|
||||
|
||||
// First call to flush itself
|
||||
// First call to flush itself.
|
||||
// Pointless since we call C, but it is expected to get
|
||||
// executed during VM_Version::determine_features().
|
||||
ICache::invalidate_range((address)(*flush_icache_stub), 0);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -32,6 +32,10 @@
|
||||
#include "runtime/safepointMechanism.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
||||
// Implementation of InterpreterMacroAssembler.
|
||||
|
||||
// This file specializes the assembler with interpreter-specific macros.
|
||||
|
||||
#ifdef PRODUCT
|
||||
#define BLOCK_COMMENT(str) // nothing
|
||||
#else
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. 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
|
||||
@ -24,7 +24,7 @@
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "assembler_ppc.inline.hpp"
|
||||
#include "asm/assembler.inline.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "prims/jniFastGetField.hpp"
|
||||
#include "prims/jvm_misc.hpp"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017, SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -2883,10 +2883,6 @@ void MacroAssembler::compiler_fast_lock_object(ConditionRegister flag, Register
|
||||
//assert(ObjectMonitor::recursions_size_in_bytes() == 8, "unexpected size");
|
||||
asm_assert_mem8_is_zero(ObjectMonitor::recursions_offset_in_bytes(), temp,
|
||||
"monitor->_recursions should be 0", -1);
|
||||
// Invariant 2: OwnerIsThread shouldn't be 0.
|
||||
//assert(ObjectMonitor::OwnerIsThread_size_in_bytes() == 4, "unexpected size");
|
||||
//asm_assert_mem4_isnot_zero(ObjectMonitor::OwnerIsThread_offset_in_bytes(), temp,
|
||||
// "monitor->OwnerIsThread shouldn't be 0", -1);
|
||||
# endif
|
||||
|
||||
#if INCLUDE_RTM_OPT
|
||||
@ -5604,12 +5600,17 @@ void MacroAssembler::zap_from_to(Register low, int before, Register high, int af
|
||||
|
||||
#endif // !PRODUCT
|
||||
|
||||
SkipIfEqualZero::SkipIfEqualZero(MacroAssembler* masm, Register temp, const bool* flag_addr) : _masm(masm), _label() {
|
||||
void SkipIfEqualZero::skip_to_label_if_equal_zero(MacroAssembler* masm, Register temp,
|
||||
const bool* flag_addr, Label& label) {
|
||||
int simm16_offset = masm->load_const_optimized(temp, (address)flag_addr, R0, true);
|
||||
assert(sizeof(bool) == 1, "PowerPC ABI");
|
||||
masm->lbz(temp, simm16_offset, temp);
|
||||
masm->cmpwi(CCR0, temp, 0);
|
||||
masm->beq(CCR0, _label);
|
||||
masm->beq(CCR0, label);
|
||||
}
|
||||
|
||||
SkipIfEqualZero::SkipIfEqualZero(MacroAssembler* masm, Register temp, const bool* flag_addr) : _masm(masm), _label() {
|
||||
skip_to_label_if_equal_zero(masm, temp, flag_addr, _label);
|
||||
}
|
||||
|
||||
SkipIfEqualZero::~SkipIfEqualZero() {
|
||||
|
@ -980,6 +980,8 @@ class SkipIfEqualZero : public StackObj {
|
||||
public:
|
||||
// 'Temp' is a temp register that this object can use (and trash).
|
||||
explicit SkipIfEqualZero(MacroAssembler*, Register temp, const bool* flag_addr);
|
||||
static void skip_to_label_if_equal_zero(MacroAssembler*, Register temp,
|
||||
const bool* flag_addr, Label& label);
|
||||
~SkipIfEqualZero();
|
||||
};
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,7 +26,6 @@
|
||||
#ifndef CPU_PPC_VM_NATIVEINST_PPC_HPP
|
||||
#define CPU_PPC_VM_NATIVEINST_PPC_HPP
|
||||
|
||||
#include "asm/assembler.hpp"
|
||||
#include "asm/macroAssembler.hpp"
|
||||
#include "memory/allocation.hpp"
|
||||
#include "runtime/icache.hpp"
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -43,4 +43,10 @@
|
||||
#endif
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
// This platform has no oops in the code that are not also
|
||||
// listed in the oop section.
|
||||
static bool mustIterateImmediateOopsInCode() { return false; }
|
||||
|
||||
#endif // CPU_PPC_VM_RELOCINFO_PPC_HPP
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. 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
|
||||
@ -25,7 +25,6 @@
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#ifdef COMPILER2
|
||||
#include "asm/assembler.inline.hpp"
|
||||
#include "asm/macroAssembler.inline.hpp"
|
||||
#include "classfile/systemDictionary.hpp"
|
||||
#include "code/vmreg.hpp"
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017 SAP SE. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018 SAP SE. 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
|
||||
@ -1912,8 +1912,8 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm,
|
||||
// - *_slot_offset Indicates offset from SP in number of stack slots.
|
||||
// - *_offset Indicates offset from SP in bytes.
|
||||
|
||||
int stack_slots = c_calling_convention(out_sig_bt, out_regs, out_regs2, total_c_args) // 1+2)
|
||||
+ SharedRuntime::out_preserve_stack_slots(); // See c_calling_convention.
|
||||
int stack_slots = c_calling_convention(out_sig_bt, out_regs, out_regs2, total_c_args) + // 1+2)
|
||||
SharedRuntime::out_preserve_stack_slots(); // See c_calling_convention.
|
||||
|
||||
// Now the space for the inbound oop handle area.
|
||||
int total_save_slots = num_java_iarg_registers * VMRegImpl::slots_per_word;
|
||||
@ -2044,7 +2044,8 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm,
|
||||
OopMap *oop_map = new OopMap(stack_slots * 2, 0 /* arg_slots*/);
|
||||
|
||||
if (is_critical_native) {
|
||||
check_needs_gc_for_critical_native(masm, stack_slots, total_in_args, oop_handle_slot_offset, oop_maps, in_regs, in_sig_bt, r_temp_1);
|
||||
check_needs_gc_for_critical_native(masm, stack_slots, total_in_args, oop_handle_slot_offset,
|
||||
oop_maps, in_regs, in_sig_bt, r_temp_1);
|
||||
}
|
||||
|
||||
// Move arguments from register/stack to register/stack.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017, SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -40,6 +40,10 @@
|
||||
#include "runtime/thread.inline.hpp"
|
||||
#include "utilities/align.hpp"
|
||||
|
||||
// Declaration and definition of StubGenerator (no .hpp file).
|
||||
// For a more detailed description of the stub routine structure
|
||||
// see the comment in stubRoutines.hpp.
|
||||
|
||||
#define __ _masm->
|
||||
|
||||
#ifdef PRODUCT
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017, SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -23,6 +23,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "asm/macroAssembler.inline.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -582,25 +582,6 @@ address TemplateInterpreterGenerator::generate_ArrayIndexOutOfBounds_handler(con
|
||||
return entry;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Call special ClassCastException constructor taking object to cast
|
||||
// and target class as arguments.
|
||||
address TemplateInterpreterGenerator::generate_ClassCastException_verbose_handler() {
|
||||
address entry = __ pc();
|
||||
|
||||
// Expression stack must be empty before entering the VM if an
|
||||
// exception happened.
|
||||
__ empty_expression_stack();
|
||||
|
||||
// Thread will be loaded to R3_ARG1.
|
||||
// Target class oop is in register R5_ARG3 by convention!
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose), R17_tos, R5_ARG3);
|
||||
// Above call must not return here since exception pending.
|
||||
DEBUG_ONLY(__ should_not_reach_here();)
|
||||
return entry;
|
||||
}
|
||||
#endif
|
||||
|
||||
address TemplateInterpreterGenerator::generate_ClassCastException_handler() {
|
||||
address entry = __ pc();
|
||||
// Expression stack must be empty before entering the VM if an
|
||||
@ -1896,7 +1877,6 @@ address TemplateInterpreterGenerator::generate_CRC32_update_entry() {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Method entry for static native methods:
|
||||
* int java.util.zip.CRC32.updateBytes( int crc, byte[] b, int off, int len)
|
||||
|
@ -3637,10 +3637,7 @@ void TemplateTable::_new() {
|
||||
transition(vtos, atos);
|
||||
|
||||
Label Lslow_case,
|
||||
Ldone,
|
||||
Linitialize_header,
|
||||
Lallocate_shared,
|
||||
Linitialize_object; // Including clearing the fields.
|
||||
Ldone;
|
||||
|
||||
const Register RallocatedObject = R17_tos,
|
||||
RinstanceKlass = R9_ARG7,
|
||||
@ -3651,8 +3648,6 @@ void TemplateTable::_new() {
|
||||
Rtags = R3_ARG1,
|
||||
Rindex = R5_ARG3;
|
||||
|
||||
const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc();
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// Check if fast case is possible.
|
||||
|
||||
@ -3661,6 +3656,8 @@ void TemplateTable::_new() {
|
||||
// Load index of constant pool entry.
|
||||
__ get_2_byte_integer_at_bcp(1, Rindex, InterpreterMacroAssembler::Unsigned);
|
||||
|
||||
// Note: compared to other architectures, PPC's implementation always goes
|
||||
// to the slow path if TLAB is used and fails.
|
||||
if (UseTLAB) {
|
||||
// Make sure the class we're about to instantiate has been resolved
|
||||
// This is done before loading instanceKlass to be consistent with the order
|
||||
@ -3690,8 +3687,7 @@ void TemplateTable::_new() {
|
||||
// Fast case:
|
||||
// Allocate the instance.
|
||||
// 1) Try to allocate in the TLAB.
|
||||
// 2) If fail, and the TLAB is not full enough to discard, allocate in the shared Eden.
|
||||
// 3) If the above fails (or is not applicable), go to a slow case (creates a new TLAB, etc.).
|
||||
// 2) If the above fails (or is not applicable), go to a slow case (creates a new TLAB, etc.).
|
||||
|
||||
Register RoldTopValue = RallocatedObject; // Object will be allocated here if it fits.
|
||||
Register RnewTopValue = R6_ARG4;
|
||||
@ -3705,53 +3701,13 @@ void TemplateTable::_new() {
|
||||
|
||||
// If there is enough space, we do not CAS and do not clear.
|
||||
__ cmpld(CCR0, RnewTopValue, RendValue);
|
||||
__ bgt(CCR0, allow_shared_alloc ? Lallocate_shared : Lslow_case);
|
||||
__ bgt(CCR0, Lslow_case);
|
||||
|
||||
__ std(RnewTopValue, in_bytes(JavaThread::tlab_top_offset()), R16_thread);
|
||||
|
||||
if (ZeroTLAB) {
|
||||
// The fields have already been cleared.
|
||||
__ b(Linitialize_header);
|
||||
} else {
|
||||
// Initialize both the header and fields.
|
||||
__ b(Linitialize_object);
|
||||
}
|
||||
|
||||
// Fall through: TLAB was too small.
|
||||
if (allow_shared_alloc) {
|
||||
Register RtlabWasteLimitValue = R10_ARG8;
|
||||
Register RfreeValue = RnewTopValue;
|
||||
|
||||
__ bind(Lallocate_shared);
|
||||
// Check if tlab should be discarded (refill_waste_limit >= free).
|
||||
__ ld(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread);
|
||||
__ subf(RfreeValue, RoldTopValue, RendValue);
|
||||
__ srdi(RfreeValue, RfreeValue, LogHeapWordSize); // in dwords
|
||||
__ cmpld(CCR0, RtlabWasteLimitValue, RfreeValue);
|
||||
__ bge(CCR0, Lslow_case);
|
||||
|
||||
// Increment waste limit to prevent getting stuck on this slow path.
|
||||
__ add_const_optimized(RtlabWasteLimitValue, RtlabWasteLimitValue, ThreadLocalAllocBuffer::refill_waste_limit_increment());
|
||||
__ std(RtlabWasteLimitValue, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), R16_thread);
|
||||
}
|
||||
// else: No allocation in the shared eden. // fallthru: __ b(Lslow_case);
|
||||
}
|
||||
// else: Always go the slow path.
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// slow case
|
||||
__ bind(Lslow_case);
|
||||
call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex);
|
||||
|
||||
if (UseTLAB) {
|
||||
__ b(Ldone);
|
||||
// --------------------------------------------------------------------------
|
||||
// Init1: Zero out newly allocated memory.
|
||||
|
||||
if (!ZeroTLAB || allow_shared_alloc) {
|
||||
// Clear object fields.
|
||||
__ bind(Linitialize_object);
|
||||
|
||||
if (!ZeroTLAB) {
|
||||
// --------------------------------------------------------------------------
|
||||
// Init1: Zero out newly allocated memory.
|
||||
// Initialize remaining object fields.
|
||||
Register Rbase = Rtags;
|
||||
__ addi(Rinstance_size, Rinstance_size, 7 - (int)sizeof(oopDesc));
|
||||
@ -3760,13 +3716,10 @@ void TemplateTable::_new() {
|
||||
|
||||
// Clear out object skipping header. Takes also care of the zero length case.
|
||||
__ clear_memory_doubleword(Rbase, Rinstance_size);
|
||||
// fallthru: __ b(Linitialize_header);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// Init2: Initialize the header: mark, klass
|
||||
__ bind(Linitialize_header);
|
||||
|
||||
// Init mark.
|
||||
if (UseBiasedLocking) {
|
||||
__ ld(Rscratch, in_bytes(Klass::prototype_header_offset()), RinstanceKlass);
|
||||
@ -3780,14 +3733,19 @@ void TemplateTable::_new() {
|
||||
__ store_klass(RallocatedObject, RinstanceKlass, Rscratch); // klass (last for cms)
|
||||
|
||||
// Check and trigger dtrace event.
|
||||
{
|
||||
SkipIfEqualZero skip_if(_masm, Rscratch, &DTraceAllocProbes);
|
||||
__ push(atos);
|
||||
__ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc));
|
||||
__ pop(atos);
|
||||
}
|
||||
SkipIfEqualZero::skip_to_label_if_equal_zero(_masm, Rscratch, &DTraceAllocProbes, Ldone);
|
||||
__ push(atos);
|
||||
__ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc));
|
||||
__ pop(atos);
|
||||
|
||||
__ b(Ldone);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// slow case
|
||||
__ bind(Lslow_case);
|
||||
call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex);
|
||||
|
||||
// continue
|
||||
__ bind(Ldone);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2018 SAP SE. 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
|
||||
@ -42,11 +42,6 @@ class Bytes: AllStatic {
|
||||
//
|
||||
// In short, it makes no sense on z/Architecture to piecemeal get or put unaligned data.
|
||||
|
||||
// Only swap on little endian machines => suffix `_le'.
|
||||
static inline u2 swap_u2_le(u2 x) { return x; }
|
||||
static inline u4 swap_u4_le(u4 x) { return x; }
|
||||
static inline u8 swap_u8_le(u8 x) { return x; }
|
||||
|
||||
static inline u2 get_native_u2(address p) { return *(u2*)p; }
|
||||
static inline u4 get_native_u4(address p) { return *(u4*)p; }
|
||||
static inline u8 get_native_u8(address p) { return *(u8*)p; }
|
||||
@ -55,7 +50,8 @@ class Bytes: AllStatic {
|
||||
static inline void put_native_u4(address p, u4 x) { *(u4*)p = x; }
|
||||
static inline void put_native_u8(address p, u8 x) { *(u8*)p = x; }
|
||||
|
||||
#include "bytes_linux_s390.inline.hpp"
|
||||
// The following header contains the implementations of swap_u2, swap_u4, and swap_u8.
|
||||
#include OS_CPU_HEADER_INLINE(bytes)
|
||||
|
||||
// Efficient reading and writing of unaligned unsigned data in Java byte ordering (i.e. big-endian ordering)
|
||||
static inline u2 get_Java_u2(address p) { return get_native_u2(p); }
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2018 SAP SE. 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
|
||||
@ -48,7 +48,7 @@ define_pd_global(bool, UseTLAB, true);
|
||||
define_pd_global(bool, ProfileInterpreter, false);
|
||||
define_pd_global(intx, FreqInlineSize, 325);
|
||||
define_pd_global(bool, ResizeTLAB, true);
|
||||
define_pd_global(intx, ReservedCodeCacheSize, 32*M);
|
||||
define_pd_global(uintx, ReservedCodeCacheSize, 32*M);
|
||||
define_pd_global(uintx, NonProfiledCodeHeapSize, 13*M);
|
||||
define_pd_global(uintx, ProfiledCodeHeapSize, 14*M);
|
||||
define_pd_global(uintx, NonNMethodCodeHeapSize, 5*M);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2018 SAP SE. 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
|
||||
@ -58,7 +58,7 @@ define_pd_global(intx, LoopUnrollLimit, 60);
|
||||
define_pd_global(intx, LoopPercentProfileLimit, 10);
|
||||
define_pd_global(intx, MinJumpTableSize, 18);
|
||||
|
||||
// Peephole and CISC spilling both break the graph, and so makes the
|
||||
// Peephole and CISC spilling both break the graph, and so make the
|
||||
// scheduler sick.
|
||||
define_pd_global(bool, OptoPeephole, false);
|
||||
define_pd_global(bool, UseCISCSpill, true);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2016, 2018 SAP SE. 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
|
||||
@ -87,7 +87,14 @@ define_pd_global(intx, InitArrayShortSize, 1*BytesPerLong);
|
||||
|
||||
define_pd_global(bool, ThreadLocalHandshakes, true);
|
||||
|
||||
#define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct, range, constraint, writeable) \
|
||||
#define ARCH_FLAGS(develop, \
|
||||
product, \
|
||||
diagnostic, \
|
||||
experimental, \
|
||||
notproduct, \
|
||||
range, \
|
||||
constraint, \
|
||||
writeable) \
|
||||
\
|
||||
/* Reoptimize code-sequences of calls at runtime, e.g. replace an */ \
|
||||
/* indirect call by a direct call. */ \
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016 SAP SE. All rights reserved.
|
||||
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2018 SAP SE. 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
|
||||
@ -110,6 +110,10 @@
|
||||
pcrel_data_format = 3 // Relocation is for the target data of a pc-relative instruction.
|
||||
};
|
||||
|
||||
// This platform has no oops in the code that are not also
|
||||
// listed in the oop section.
|
||||
static bool mustIterateImmediateOopsInCode() { return false; }
|
||||
|
||||
// Store the new target address into an oop_Relocation cell, if any.
|
||||
// Return indication if update happened.
|
||||
static bool update_oop_pool(address begin, address end, address newTarget, CodeBlob* cb);
|
||||
|
@ -73,6 +73,11 @@ address CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf, address mark)
|
||||
}
|
||||
#undef __
|
||||
|
||||
int CompiledStaticCall::to_trampoline_stub_size() {
|
||||
// SPARC doesn't use trampolines.
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CompiledStaticCall::to_interp_stub_size() {
|
||||
// This doesn't need to be accurate but it must be larger or equal to
|
||||
// the real size of the stub.
|
||||
|
@ -115,7 +115,7 @@ void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong forei
|
||||
TRACE_jvmci_3("relocating (foreign call) at " PTR_FORMAT, p2i(inst));
|
||||
}
|
||||
|
||||
void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) {
|
||||
void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &, Handle hotspot_method, jint pc_offset, TRAPS) {
|
||||
#ifdef ASSERT
|
||||
Method* method = NULL;
|
||||
// we need to check, this might also be an unresolved method
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -38,6 +38,11 @@
|
||||
format_width = 1
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
// This platform has no oops in the code that are not also
|
||||
// listed in the oop section.
|
||||
static bool mustIterateImmediateOopsInCode() { return false; }
|
||||
|
||||
//Reconciliation History
|
||||
// 1.3 97/10/15 15:38:36 relocInfo_i486.hpp
|
||||
|
@ -3259,11 +3259,19 @@ void TemplateTable::_new() {
|
||||
__ br(Assembler::notZero, false, Assembler::pn, slow_case);
|
||||
__ delayed()->nop();
|
||||
|
||||
// allocate the instance
|
||||
// 1) Try to allocate in the TLAB
|
||||
// 2) if fail, and the TLAB is not full enough to discard, allocate in the shared Eden
|
||||
// 3) if the above fails (or is not applicable), go to a slow case
|
||||
// (creates a new TLAB, etc.)
|
||||
// Allocate the instance:
|
||||
// If TLAB is enabled:
|
||||
// Try to allocate in the TLAB.
|
||||
// If fails, go to the slow path.
|
||||
// Else If inline contiguous allocations are enabled:
|
||||
// Try to allocate in eden.
|
||||
// If fails due to heap end, go to slow path.
|
||||
//
|
||||
// If TLAB is enabled OR inline contiguous is enabled:
|
||||
// Initialize the allocation.
|
||||
// Exit.
|
||||
//
|
||||
// Go to slow path.
|
||||
|
||||
const bool allow_shared_alloc =
|
||||
Universe::heap()->supports_inline_contig_alloc();
|
||||
@ -3291,61 +3299,43 @@ void TemplateTable::_new() {
|
||||
}
|
||||
__ delayed()->st_ptr(RnewTopValue, G2_thread, in_bytes(JavaThread::tlab_top_offset()));
|
||||
|
||||
// Allocation does not fit in the TLAB.
|
||||
__ ba_short(slow_case);
|
||||
} else {
|
||||
// Allocation in the shared Eden
|
||||
if (allow_shared_alloc) {
|
||||
// Check if tlab should be discarded (refill_waste_limit >= free)
|
||||
__ ld_ptr(G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), RtlabWasteLimitValue);
|
||||
__ sub(RendValue, RoldTopValue, RfreeValue);
|
||||
__ srlx(RfreeValue, LogHeapWordSize, RfreeValue);
|
||||
__ cmp_and_brx_short(RtlabWasteLimitValue, RfreeValue, Assembler::greaterEqualUnsigned, Assembler::pt, slow_case); // tlab waste is small
|
||||
Register RoldTopValue = G1_scratch;
|
||||
Register RtopAddr = G3_scratch;
|
||||
Register RnewTopValue = RallocatedObject;
|
||||
Register RendValue = Rscratch;
|
||||
|
||||
// increment waste limit to prevent getting stuck on this slow path
|
||||
if (Assembler::is_simm13(ThreadLocalAllocBuffer::refill_waste_limit_increment())) {
|
||||
__ add(RtlabWasteLimitValue, ThreadLocalAllocBuffer::refill_waste_limit_increment(), RtlabWasteLimitValue);
|
||||
} else {
|
||||
// set64 does not use the temp register if the given constant is 32 bit. So
|
||||
// we can just use any register; using G0 results in ignoring of the upper 32 bit
|
||||
// of that value.
|
||||
__ set64(ThreadLocalAllocBuffer::refill_waste_limit_increment(), G4_scratch, G0);
|
||||
__ add(RtlabWasteLimitValue, G4_scratch, RtlabWasteLimitValue);
|
||||
}
|
||||
__ st_ptr(RtlabWasteLimitValue, G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()));
|
||||
} else {
|
||||
// No allocation in the shared eden.
|
||||
__ ba_short(slow_case);
|
||||
__ set((intptr_t)Universe::heap()->top_addr(), RtopAddr);
|
||||
|
||||
Label retry;
|
||||
__ bind(retry);
|
||||
__ set((intptr_t)Universe::heap()->end_addr(), RendValue);
|
||||
__ ld_ptr(RendValue, 0, RendValue);
|
||||
__ ld_ptr(RtopAddr, 0, RoldTopValue);
|
||||
__ add(RoldTopValue, Roffset, RnewTopValue);
|
||||
|
||||
// RnewTopValue contains the top address after the new object
|
||||
// has been allocated.
|
||||
__ cmp_and_brx_short(RnewTopValue, RendValue, Assembler::greaterUnsigned, Assembler::pn, slow_case);
|
||||
|
||||
__ cas_ptr(RtopAddr, RoldTopValue, RnewTopValue);
|
||||
|
||||
// if someone beat us on the allocation, try again, otherwise continue
|
||||
__ cmp_and_brx_short(RoldTopValue, RnewTopValue, Assembler::notEqual, Assembler::pn, retry);
|
||||
|
||||
// bump total bytes allocated by this thread
|
||||
// RoldTopValue and RtopAddr are dead, so can use G1 and G3
|
||||
__ incr_allocated_bytes(Roffset, G1_scratch, G3_scratch);
|
||||
}
|
||||
}
|
||||
|
||||
// Allocation in the shared Eden
|
||||
if (allow_shared_alloc) {
|
||||
Register RoldTopValue = G1_scratch;
|
||||
Register RtopAddr = G3_scratch;
|
||||
Register RnewTopValue = RallocatedObject;
|
||||
Register RendValue = Rscratch;
|
||||
|
||||
__ set((intptr_t)Universe::heap()->top_addr(), RtopAddr);
|
||||
|
||||
Label retry;
|
||||
__ bind(retry);
|
||||
__ set((intptr_t)Universe::heap()->end_addr(), RendValue);
|
||||
__ ld_ptr(RendValue, 0, RendValue);
|
||||
__ ld_ptr(RtopAddr, 0, RoldTopValue);
|
||||
__ add(RoldTopValue, Roffset, RnewTopValue);
|
||||
|
||||
// RnewTopValue contains the top address after the new object
|
||||
// has been allocated.
|
||||
__ cmp_and_brx_short(RnewTopValue, RendValue, Assembler::greaterUnsigned, Assembler::pn, slow_case);
|
||||
|
||||
__ cas_ptr(RtopAddr, RoldTopValue, RnewTopValue);
|
||||
|
||||
// if someone beat us on the allocation, try again, otherwise continue
|
||||
__ cmp_and_brx_short(RoldTopValue, RnewTopValue, Assembler::notEqual, Assembler::pn, retry);
|
||||
|
||||
// bump total bytes allocated by this thread
|
||||
// RoldTopValue and RtopAddr are dead, so can use G1 and G3
|
||||
__ incr_allocated_bytes(Roffset, G1_scratch, G3_scratch);
|
||||
}
|
||||
|
||||
if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// If UseTLAB or allow_shared_alloc are true, the object is created above and
|
||||
// there is an initialize need. Otherwise, skip and go to the slow path.
|
||||
if (UseTLAB || allow_shared_alloc) {
|
||||
// clear object fields
|
||||
__ bind(initialize_object);
|
||||
__ deccc(Roffset, sizeof(oopDesc));
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -3167,6 +3167,89 @@ void Assembler::nop(int i) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (UseAddressNop && VM_Version::is_zx()) {
|
||||
//
|
||||
// Using multi-bytes nops "0x0F 0x1F [address]" for ZX
|
||||
// 1: 0x90
|
||||
// 2: 0x66 0x90
|
||||
// 3: 0x66 0x66 0x90 (don't use "0x0F 0x1F 0x00" - need patching safe padding)
|
||||
// 4: 0x0F 0x1F 0x40 0x00
|
||||
// 5: 0x0F 0x1F 0x44 0x00 0x00
|
||||
// 6: 0x66 0x0F 0x1F 0x44 0x00 0x00
|
||||
// 7: 0x0F 0x1F 0x80 0x00 0x00 0x00 0x00
|
||||
// 8: 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
|
||||
// 9: 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
|
||||
// 10: 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
|
||||
// 11: 0x66 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00
|
||||
|
||||
// The rest coding is ZX specific - don't use consecutive address nops
|
||||
|
||||
// 12: 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
|
||||
// 13: 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
|
||||
// 14: 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
|
||||
// 15: 0x66 0x66 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x66 0x66 0x90
|
||||
|
||||
while (i >= 15) {
|
||||
// For ZX don't generate consecutive addess nops (mix with regular nops)
|
||||
i -= 15;
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8(0x66); // size prefix
|
||||
addr_nop_8();
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8((unsigned char)0x90);
|
||||
// nop
|
||||
}
|
||||
switch (i) {
|
||||
case 14:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 13:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 12:
|
||||
addr_nop_8();
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8(0x66); // size prefix
|
||||
emit_int8((unsigned char)0x90);
|
||||
// nop
|
||||
break;
|
||||
case 11:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 10:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 9:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 8:
|
||||
addr_nop_8();
|
||||
break;
|
||||
case 7:
|
||||
addr_nop_7();
|
||||
break;
|
||||
case 6:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 5:
|
||||
addr_nop_5();
|
||||
break;
|
||||
case 4:
|
||||
addr_nop_4();
|
||||
break;
|
||||
case 3:
|
||||
// Don't use "0x0F 0x1F 0x00" - need patching safe padding
|
||||
emit_int8(0x66); // size prefix
|
||||
case 2:
|
||||
emit_int8(0x66); // size prefix
|
||||
case 1:
|
||||
emit_int8((unsigned char)0x90);
|
||||
// nop
|
||||
break;
|
||||
default:
|
||||
assert(i == 0, " ");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Using nops with size prefixes "0x66 0x90".
|
||||
// From AMD Optimization Guide:
|
||||
// 1: 0x90
|
||||
|
@ -73,6 +73,11 @@ int CompiledStaticCall::to_interp_stub_size() {
|
||||
LP64_ONLY(15); // movq (1+1+8); jmp (1+4)
|
||||
}
|
||||
|
||||
int CompiledStaticCall::to_trampoline_stub_size() {
|
||||
// x86 doesn't use trampolines.
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Relocation entries for call stub, compiled java to interpreter.
|
||||
int CompiledStaticCall::reloc_to_interp_stub() {
|
||||
return 4; // 3 in emit_to_interp_stub + 1 in emit_call
|
||||
|
@ -144,7 +144,7 @@ void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong forei
|
||||
TRACE_jvmci_3("relocating (foreign call) at " PTR_FORMAT, p2i(inst));
|
||||
}
|
||||
|
||||
void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) {
|
||||
void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &, Handle hotspot_method, jint pc_offset, TRAPS) {
|
||||
#ifdef ASSERT
|
||||
Method* method = NULL;
|
||||
// we need to check, this might also be an unresolved method
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -40,4 +40,10 @@
|
||||
#endif
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
// Instruct loadConP of x86_64.ad places oops in code that are not also
|
||||
// listed in the oop section.
|
||||
static bool mustIterateImmediateOopsInCode() { return true; }
|
||||
|
||||
#endif // CPU_X86_VM_RELOCINFO_X86_HPP
|
||||
|
@ -433,7 +433,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Support for jint Atomic::xchg(jint exchange_value, volatile jint* dest)
|
||||
// Support for int32_t Atomic::xchg(int32_t exchange_value, volatile int32_t* dest)
|
||||
//
|
||||
// xchg exists as far back as 8086, lock needed for MP only
|
||||
// Stack layout immediately after call:
|
||||
|
@ -611,8 +611,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||
return start;
|
||||
}
|
||||
|
||||
// Support for jbyte atomic::atomic_cmpxchg(jbyte exchange_value, volatile jbyte* dest,
|
||||
// jbyte compare_value)
|
||||
// Support for int8_t atomic::atomic_cmpxchg(int8_t exchange_value, volatile int8_t* dest,
|
||||
// int8_t compare_value)
|
||||
//
|
||||
// Arguments :
|
||||
// c_rarg0: exchange_value
|
||||
@ -637,9 +637,9 @@ class StubGenerator: public StubCodeGenerator {
|
||||
return start;
|
||||
}
|
||||
|
||||
// Support for jlong atomic::atomic_cmpxchg(jlong exchange_value,
|
||||
// volatile jlong* dest,
|
||||
// jlong compare_value)
|
||||
// Support for int64_t atomic::atomic_cmpxchg(int64_t exchange_value,
|
||||
// volatile int64_t* dest,
|
||||
// int64_t compare_value)
|
||||
// Arguments :
|
||||
// c_rarg0: exchange_value
|
||||
// c_rarg1: dest
|
||||
@ -694,8 +694,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||
// Result:
|
||||
// *dest += add_value
|
||||
// return *dest;
|
||||
address generate_atomic_add_ptr() {
|
||||
StubCodeMark mark(this, "StubRoutines", "atomic_add_ptr");
|
||||
address generate_atomic_add_long() {
|
||||
StubCodeMark mark(this, "StubRoutines", "atomic_add_long");
|
||||
address start = __ pc();
|
||||
|
||||
__ movptr(rax, c_rarg0); // Copy to eax we need a return value anyhow
|
||||
@ -5015,14 +5015,14 @@ class StubGenerator: public StubCodeGenerator {
|
||||
StubRoutines::_catch_exception_entry = generate_catch_exception();
|
||||
|
||||
// atomic calls
|
||||
StubRoutines::_atomic_xchg_entry = generate_atomic_xchg();
|
||||
StubRoutines::_atomic_xchg_long_entry = generate_atomic_xchg_long();
|
||||
StubRoutines::_atomic_cmpxchg_entry = generate_atomic_cmpxchg();
|
||||
StubRoutines::_atomic_cmpxchg_byte_entry = generate_atomic_cmpxchg_byte();
|
||||
StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long();
|
||||
StubRoutines::_atomic_add_entry = generate_atomic_add();
|
||||
StubRoutines::_atomic_add_ptr_entry = generate_atomic_add_ptr();
|
||||
StubRoutines::_fence_entry = generate_orderaccess_fence();
|
||||
StubRoutines::_atomic_xchg_entry = generate_atomic_xchg();
|
||||
StubRoutines::_atomic_xchg_long_entry = generate_atomic_xchg_long();
|
||||
StubRoutines::_atomic_cmpxchg_entry = generate_atomic_cmpxchg();
|
||||
StubRoutines::_atomic_cmpxchg_byte_entry = generate_atomic_cmpxchg_byte();
|
||||
StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long();
|
||||
StubRoutines::_atomic_add_entry = generate_atomic_add();
|
||||
StubRoutines::_atomic_add_long_entry = generate_atomic_add_long();
|
||||
StubRoutines::_fence_entry = generate_orderaccess_fence();
|
||||
|
||||
// platform dependent
|
||||
StubRoutines::x86::_get_previous_fp_entry = generate_get_previous_fp();
|
||||
|
@ -3869,7 +3869,6 @@ void TemplateTable::_new() {
|
||||
Label done;
|
||||
Label initialize_header;
|
||||
Label initialize_object; // including clearing the fields
|
||||
Label allocate_shared;
|
||||
|
||||
__ get_cpool_and_tags(rcx, rax);
|
||||
|
||||
@ -3895,12 +3894,19 @@ void TemplateTable::_new() {
|
||||
__ testl(rdx, Klass::_lh_instance_slow_path_bit);
|
||||
__ jcc(Assembler::notZero, slow_case);
|
||||
|
||||
// Allocate the instance:
|
||||
// If TLAB is enabled:
|
||||
// Try to allocate in the TLAB.
|
||||
// If fails, go to the slow path.
|
||||
// Else If inline contiguous allocations are enabled:
|
||||
// Try to allocate in eden.
|
||||
// If fails due to heap end, go to slow path.
|
||||
//
|
||||
// Allocate the instance
|
||||
// 1) Try to allocate in the TLAB
|
||||
// 2) if fail and the object is large allocate in the shared Eden
|
||||
// 3) if the above fails (or is not applicable), go to a slow case
|
||||
// (creates a new TLAB, etc.)
|
||||
// If TLAB is enabled OR inline contiguous is enabled:
|
||||
// Initialize the allocation.
|
||||
// Exit.
|
||||
//
|
||||
// Go to slow path.
|
||||
|
||||
const bool allow_shared_alloc =
|
||||
Universe::heap()->supports_inline_contig_alloc();
|
||||
@ -3916,7 +3922,7 @@ void TemplateTable::_new() {
|
||||
__ movptr(rax, Address(thread, in_bytes(JavaThread::tlab_top_offset())));
|
||||
__ lea(rbx, Address(rax, rdx, Address::times_1));
|
||||
__ cmpptr(rbx, Address(thread, in_bytes(JavaThread::tlab_end_offset())));
|
||||
__ jcc(Assembler::above, allow_shared_alloc ? allocate_shared : slow_case);
|
||||
__ jcc(Assembler::above, slow_case);
|
||||
__ movptr(Address(thread, in_bytes(JavaThread::tlab_top_offset())), rbx);
|
||||
if (ZeroTLAB) {
|
||||
// the fields have been already cleared
|
||||
@ -3925,40 +3931,40 @@ void TemplateTable::_new() {
|
||||
// initialize both the header and fields
|
||||
__ jmp(initialize_object);
|
||||
}
|
||||
}
|
||||
|
||||
// Allocation in the shared Eden, if allowed.
|
||||
//
|
||||
// rdx: instance size in bytes
|
||||
if (allow_shared_alloc) {
|
||||
__ bind(allocate_shared);
|
||||
|
||||
ExternalAddress heap_top((address)Universe::heap()->top_addr());
|
||||
ExternalAddress heap_end((address)Universe::heap()->end_addr());
|
||||
|
||||
Label retry;
|
||||
__ bind(retry);
|
||||
__ movptr(rax, heap_top);
|
||||
__ lea(rbx, Address(rax, rdx, Address::times_1));
|
||||
__ cmpptr(rbx, heap_end);
|
||||
__ jcc(Assembler::above, slow_case);
|
||||
|
||||
// Compare rax, with the top addr, and if still equal, store the new
|
||||
// top addr in rbx, at the address of the top addr pointer. Sets ZF if was
|
||||
// equal, and clears it otherwise. Use lock prefix for atomicity on MPs.
|
||||
} else {
|
||||
// Allocation in the shared Eden, if allowed.
|
||||
//
|
||||
// rax,: object begin
|
||||
// rbx,: object end
|
||||
// rdx: instance size in bytes
|
||||
__ locked_cmpxchgptr(rbx, heap_top);
|
||||
if (allow_shared_alloc) {
|
||||
ExternalAddress heap_top((address)Universe::heap()->top_addr());
|
||||
ExternalAddress heap_end((address)Universe::heap()->end_addr());
|
||||
|
||||
// if someone beat us on the allocation, try again, otherwise continue
|
||||
__ jcc(Assembler::notEqual, retry);
|
||||
Label retry;
|
||||
__ bind(retry);
|
||||
__ movptr(rax, heap_top);
|
||||
__ lea(rbx, Address(rax, rdx, Address::times_1));
|
||||
__ cmpptr(rbx, heap_end);
|
||||
__ jcc(Assembler::above, slow_case);
|
||||
|
||||
__ incr_allocated_bytes(thread, rdx, 0);
|
||||
// Compare rax, with the top addr, and if still equal, store the new
|
||||
// top addr in rbx, at the address of the top addr pointer. Sets ZF if was
|
||||
// equal, and clears it otherwise. Use lock prefix for atomicity on MPs.
|
||||
//
|
||||
// rax,: object begin
|
||||
// rbx,: object end
|
||||
// rdx: instance size in bytes
|
||||
__ locked_cmpxchgptr(rbx, heap_top);
|
||||
|
||||
// if someone beat us on the allocation, try again, otherwise continue
|
||||
__ jcc(Assembler::notEqual, retry);
|
||||
|
||||
__ incr_allocated_bytes(thread, rdx, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// If UseTLAB or allow_shared_alloc are true, the object is created above and
|
||||
// there is an initialize need. Otherwise, skip and go to the slow path.
|
||||
if (UseTLAB || allow_shared_alloc) {
|
||||
// The object is initialized before the header. If the object size is
|
||||
// zero, go directly to the header initialization.
|
||||
__ bind(initialize_object);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -628,6 +628,11 @@ void VM_Version::get_processor_features() {
|
||||
if (UseSSE < 1)
|
||||
_features &= ~CPU_SSE;
|
||||
|
||||
//since AVX instructions is slower than SSE in some ZX cpus, force USEAVX=0.
|
||||
if (is_zx() && ((cpu_family() == 6) || (cpu_family() == 7))) {
|
||||
UseAVX = 0;
|
||||
}
|
||||
|
||||
// first try initial setting and detect what we can support
|
||||
int use_avx_limit = 0;
|
||||
if (UseAVX > 0) {
|
||||
@ -1078,6 +1083,66 @@ void VM_Version::get_processor_features() {
|
||||
// UseXmmRegToRegMoveAll == true --> movaps(xmm, xmm), movapd(xmm, xmm).
|
||||
// UseXmmRegToRegMoveAll == false --> movss(xmm, xmm), movsd(xmm, xmm).
|
||||
|
||||
|
||||
if (is_zx()) { // ZX cpus specific settings
|
||||
if (FLAG_IS_DEFAULT(UseStoreImmI16)) {
|
||||
UseStoreImmI16 = false; // don't use it on ZX cpus
|
||||
}
|
||||
if ((cpu_family() == 6) || (cpu_family() == 7)) {
|
||||
if (FLAG_IS_DEFAULT(UseAddressNop)) {
|
||||
// Use it on all ZX cpus
|
||||
UseAddressNop = true;
|
||||
}
|
||||
}
|
||||
if (FLAG_IS_DEFAULT(UseXmmLoadAndClearUpper)) {
|
||||
UseXmmLoadAndClearUpper = true; // use movsd on all ZX cpus
|
||||
}
|
||||
if (FLAG_IS_DEFAULT(UseXmmRegToRegMoveAll)) {
|
||||
if (supports_sse3()) {
|
||||
UseXmmRegToRegMoveAll = true; // use movaps, movapd on new ZX cpus
|
||||
} else {
|
||||
UseXmmRegToRegMoveAll = false;
|
||||
}
|
||||
}
|
||||
if (((cpu_family() == 6) || (cpu_family() == 7)) && supports_sse3()) { // new ZX cpus
|
||||
#ifdef COMPILER2
|
||||
if (FLAG_IS_DEFAULT(MaxLoopPad)) {
|
||||
// For new ZX cpus do the next optimization:
|
||||
// don't align the beginning of a loop if there are enough instructions
|
||||
// left (NumberOfLoopInstrToAlign defined in c2_globals.hpp)
|
||||
// in current fetch line (OptoLoopAlignment) or the padding
|
||||
// is big (> MaxLoopPad).
|
||||
// Set MaxLoopPad to 11 for new ZX cpus to reduce number of
|
||||
// generated NOP instructions. 11 is the largest size of one
|
||||
// address NOP instruction '0F 1F' (see Assembler::nop(i)).
|
||||
MaxLoopPad = 11;
|
||||
}
|
||||
#endif // COMPILER2
|
||||
if (FLAG_IS_DEFAULT(UseXMMForArrayCopy)) {
|
||||
UseXMMForArrayCopy = true; // use SSE2 movq on new ZX cpus
|
||||
}
|
||||
if (supports_sse4_2()) { // new ZX cpus
|
||||
if (FLAG_IS_DEFAULT(UseUnalignedLoadStores)) {
|
||||
UseUnalignedLoadStores = true; // use movdqu on newest ZX cpus
|
||||
}
|
||||
}
|
||||
if (supports_sse4_2()) {
|
||||
if (FLAG_IS_DEFAULT(UseSSE42Intrinsics)) {
|
||||
FLAG_SET_DEFAULT(UseSSE42Intrinsics, true);
|
||||
}
|
||||
} else {
|
||||
if (UseSSE42Intrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
|
||||
warning("SSE4.2 intrinsics require SSE4.2 instructions or higher. Intrinsics will be disabled.");
|
||||
}
|
||||
FLAG_SET_DEFAULT(UseSSE42Intrinsics, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (FLAG_IS_DEFAULT(AllocatePrefetchInstr) && supports_3dnow_prefetch()) {
|
||||
FLAG_SET_DEFAULT(AllocatePrefetchInstr, 3);
|
||||
}
|
||||
}
|
||||
|
||||
if( is_amd() ) { // AMD cpus specific settings
|
||||
if( supports_sse2() && FLAG_IS_DEFAULT(UseAddressNop) ) {
|
||||
// Use it on new AMD cpus starting from Opteron.
|
||||
@ -1374,6 +1439,14 @@ void VM_Version::get_processor_features() {
|
||||
#endif
|
||||
}
|
||||
|
||||
if (is_zx() && ((cpu_family() == 6) || (cpu_family() == 7)) && supports_sse4_2()) {
|
||||
#ifdef COMPILER2
|
||||
if (FLAG_IS_DEFAULT(UseFPUForSpilling)) {
|
||||
FLAG_SET_DEFAULT(UseFPUForSpilling, true);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef _LP64
|
||||
// Prefetch settings
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -305,6 +305,9 @@ protected:
|
||||
enum Extended_Family {
|
||||
// AMD
|
||||
CPU_FAMILY_AMD_11H = 0x11,
|
||||
// ZX
|
||||
CPU_FAMILY_ZX_CORE_F6 = 6,
|
||||
CPU_FAMILY_ZX_CORE_F7 = 7,
|
||||
// Intel
|
||||
CPU_FAMILY_INTEL_CORE = 6,
|
||||
CPU_MODEL_NEHALEM = 0x1e,
|
||||
@ -549,6 +552,16 @@ protected:
|
||||
}
|
||||
}
|
||||
|
||||
// ZX features.
|
||||
if (is_zx()) {
|
||||
if (_cpuid_info.ext_cpuid1_ecx.bits.lzcnt_intel != 0)
|
||||
result |= CPU_LZCNT;
|
||||
// for ZX, ecx.bits.misalignsse bit (bit 8) indicates support for prefetchw
|
||||
if (_cpuid_info.ext_cpuid1_ecx.bits.misalignsse != 0) {
|
||||
result |= CPU_3DNOW_PREFETCH;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -657,6 +670,7 @@ public:
|
||||
static bool is_P6() { return cpu_family() >= 6; }
|
||||
static bool is_amd() { assert_is_initialized(); return _cpuid_info.std_vendor_name_0 == 0x68747541; } // 'htuA'
|
||||
static bool is_intel() { assert_is_initialized(); return _cpuid_info.std_vendor_name_0 == 0x756e6547; } // 'uneG'
|
||||
static bool is_zx() { assert_is_initialized(); return (_cpuid_info.std_vendor_name_0 == 0x746e6543) || (_cpuid_info.std_vendor_name_0 == 0x68532020); } // 'tneC'||'hS '
|
||||
static bool is_atom_family() { return ((cpu_family() == 0x06) && ((extended_cpu_model() == 0x36) || (extended_cpu_model() == 0x37) || (extended_cpu_model() == 0x4D))); } //Silvermont and Centerton
|
||||
static bool is_knights_family() { return ((cpu_family() == 0x06) && ((extended_cpu_model() == 0x57) || (extended_cpu_model() == 0x85))); } // Xeon Phi 3200/5200/7200 and Future Xeon Phi
|
||||
|
||||
@ -680,6 +694,15 @@ public:
|
||||
}
|
||||
} else if (is_amd()) {
|
||||
result = (_cpuid_info.ext_cpuid8_ecx.bits.cores_per_cpu + 1);
|
||||
} else if (is_zx()) {
|
||||
bool supports_topology = supports_processor_topology();
|
||||
if (supports_topology) {
|
||||
result = _cpuid_info.tpl_cpuidB1_ebx.bits.logical_cpus /
|
||||
_cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
|
||||
}
|
||||
if (!supports_topology || result == 0) {
|
||||
result = (_cpuid_info.dcp_cpuid4_eax.bits.cores_per_cpu + 1);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -688,6 +711,8 @@ public:
|
||||
uint result = 1;
|
||||
if (is_intel() && supports_processor_topology()) {
|
||||
result = _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
|
||||
} else if (is_zx() && supports_processor_topology()) {
|
||||
result = _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
|
||||
} else if (_cpuid_info.std_cpuid1_edx.bits.ht != 0) {
|
||||
if (cpu_family() >= 0x17) {
|
||||
result = _cpuid_info.ext_cpuid1E_ebx.bits.threads_per_core + 1;
|
||||
@ -705,6 +730,8 @@ public:
|
||||
result = (_cpuid_info.dcp_cpuid4_ebx.bits.L1_line_size + 1);
|
||||
} else if (is_amd()) {
|
||||
result = _cpuid_info.ext_cpuid5_ecx.bits.L1_line_size;
|
||||
} else if (is_zx()) {
|
||||
result = (_cpuid_info.dcp_cpuid4_ebx.bits.L1_line_size + 1);
|
||||
}
|
||||
if (result < 32) // not defined ?
|
||||
result = 32; // 32 bytes by default on x86 and other x64
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2007 Red Hat, Inc.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -34,4 +34,8 @@
|
||||
format_width = 1
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
static bool mustIterateImmediateOopsInCode() { return true; }
|
||||
|
||||
#endif // CPU_ZERO_VM_RELOCINFO_ZERO_HPP
|
||||
|
@ -258,7 +258,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||
StubRoutines::_atomic_cmpxchg_byte_entry = ShouldNotCallThisStub();
|
||||
StubRoutines::_atomic_cmpxchg_long_entry = ShouldNotCallThisStub();
|
||||
StubRoutines::_atomic_add_entry = ShouldNotCallThisStub();
|
||||
StubRoutines::_atomic_add_ptr_entry = ShouldNotCallThisStub();
|
||||
StubRoutines::_atomic_add_long_entry = ShouldNotCallThisStub();
|
||||
StubRoutines::_fence_entry = ShouldNotCallThisStub();
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2017 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -1723,7 +1723,7 @@ void os::signal_notify(int sig) {
|
||||
local_sem_post();
|
||||
}
|
||||
|
||||
static int check_pending_signals(bool wait) {
|
||||
static int check_pending_signals() {
|
||||
Atomic::store(0, &sigint_count);
|
||||
for (;;) {
|
||||
for (int i = 0; i < NSIG + 1; i++) {
|
||||
@ -1732,9 +1732,6 @@ static int check_pending_signals(bool wait) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
if (!wait) {
|
||||
return -1;
|
||||
}
|
||||
JavaThread *thread = JavaThread::current();
|
||||
ThreadBlockInVM tbivm(thread);
|
||||
|
||||
@ -1763,12 +1760,8 @@ static int check_pending_signals(bool wait) {
|
||||
}
|
||||
}
|
||||
|
||||
int os::signal_lookup() {
|
||||
return check_pending_signals(false);
|
||||
}
|
||||
|
||||
int os::signal_wait() {
|
||||
return check_pending_signals(true);
|
||||
return check_pending_signals();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -52,13 +52,13 @@
|
||||
#include "runtime/orderAccess.inline.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
#include "runtime/perfMemory.hpp"
|
||||
#include "runtime/semaphore.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
#include "runtime/statSampler.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
#include "runtime/thread.inline.hpp"
|
||||
#include "runtime/threadCritical.hpp"
|
||||
#include "runtime/timer.hpp"
|
||||
#include "semaphore_bsd.hpp"
|
||||
#include "services/attachListener.hpp"
|
||||
#include "services/memTracker.hpp"
|
||||
#include "services/runtimeService.hpp"
|
||||
@ -91,7 +91,6 @@
|
||||
# include <time.h>
|
||||
# include <pwd.h>
|
||||
# include <poll.h>
|
||||
# include <semaphore.h>
|
||||
# include <fcntl.h>
|
||||
# include <string.h>
|
||||
# include <sys/param.h>
|
||||
@ -1829,135 +1828,28 @@ int os::sigexitnum_pd() {
|
||||
|
||||
// a counter for each possible signal value
|
||||
static volatile jint pending_signals[NSIG+1] = { 0 };
|
||||
|
||||
// Bsd(POSIX) specific hand shaking semaphore.
|
||||
#ifdef __APPLE__
|
||||
typedef semaphore_t os_semaphore_t;
|
||||
|
||||
#define SEM_INIT(sem, value) semaphore_create(mach_task_self(), &sem, SYNC_POLICY_FIFO, value)
|
||||
#define SEM_WAIT(sem) semaphore_wait(sem)
|
||||
#define SEM_POST(sem) semaphore_signal(sem)
|
||||
#define SEM_DESTROY(sem) semaphore_destroy(mach_task_self(), sem)
|
||||
#else
|
||||
typedef sem_t os_semaphore_t;
|
||||
|
||||
#define SEM_INIT(sem, value) sem_init(&sem, 0, value)
|
||||
#define SEM_WAIT(sem) sem_wait(&sem)
|
||||
#define SEM_POST(sem) sem_post(&sem)
|
||||
#define SEM_DESTROY(sem) sem_destroy(&sem)
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
// OS X doesn't support unamed POSIX semaphores, so the implementation in os_posix.cpp can't be used.
|
||||
|
||||
static const char* sem_init_strerror(kern_return_t value) {
|
||||
switch (value) {
|
||||
case KERN_INVALID_ARGUMENT: return "Invalid argument";
|
||||
case KERN_RESOURCE_SHORTAGE: return "Resource shortage";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
OSXSemaphore::OSXSemaphore(uint value) {
|
||||
kern_return_t ret = SEM_INIT(_semaphore, value);
|
||||
|
||||
guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s", sem_init_strerror(ret));
|
||||
}
|
||||
|
||||
OSXSemaphore::~OSXSemaphore() {
|
||||
SEM_DESTROY(_semaphore);
|
||||
}
|
||||
|
||||
void OSXSemaphore::signal(uint count) {
|
||||
for (uint i = 0; i < count; i++) {
|
||||
kern_return_t ret = SEM_POST(_semaphore);
|
||||
|
||||
assert(ret == KERN_SUCCESS, "Failed to signal semaphore");
|
||||
}
|
||||
}
|
||||
|
||||
void OSXSemaphore::wait() {
|
||||
kern_return_t ret;
|
||||
while ((ret = SEM_WAIT(_semaphore)) == KERN_ABORTED) {
|
||||
// Semaphore was interrupted. Retry.
|
||||
}
|
||||
assert(ret == KERN_SUCCESS, "Failed to wait on semaphore");
|
||||
}
|
||||
|
||||
jlong OSXSemaphore::currenttime() {
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
return (tv.tv_sec * NANOSECS_PER_SEC) + (tv.tv_usec * 1000);
|
||||
}
|
||||
|
||||
bool OSXSemaphore::trywait() {
|
||||
return timedwait(0, 0);
|
||||
}
|
||||
|
||||
bool OSXSemaphore::timedwait(unsigned int sec, int nsec) {
|
||||
kern_return_t kr = KERN_ABORTED;
|
||||
mach_timespec_t waitspec;
|
||||
waitspec.tv_sec = sec;
|
||||
waitspec.tv_nsec = nsec;
|
||||
|
||||
jlong starttime = currenttime();
|
||||
|
||||
kr = semaphore_timedwait(_semaphore, waitspec);
|
||||
while (kr == KERN_ABORTED) {
|
||||
jlong totalwait = (sec * NANOSECS_PER_SEC) + nsec;
|
||||
|
||||
jlong current = currenttime();
|
||||
jlong passedtime = current - starttime;
|
||||
|
||||
if (passedtime >= totalwait) {
|
||||
waitspec.tv_sec = 0;
|
||||
waitspec.tv_nsec = 0;
|
||||
} else {
|
||||
jlong waittime = totalwait - (current - starttime);
|
||||
waitspec.tv_sec = waittime / NANOSECS_PER_SEC;
|
||||
waitspec.tv_nsec = waittime % NANOSECS_PER_SEC;
|
||||
}
|
||||
|
||||
kr = semaphore_timedwait(_semaphore, waitspec);
|
||||
}
|
||||
|
||||
return kr == KERN_SUCCESS;
|
||||
}
|
||||
|
||||
#else
|
||||
// Use POSIX implementation of semaphores.
|
||||
|
||||
struct timespec PosixSemaphore::create_timespec(unsigned int sec, int nsec) {
|
||||
struct timespec ts;
|
||||
unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec);
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
||||
#endif // __APPLE__
|
||||
|
||||
static os_semaphore_t sig_sem;
|
||||
|
||||
#ifdef __APPLE__
|
||||
static OSXSemaphore sr_semaphore;
|
||||
#else
|
||||
static PosixSemaphore sr_semaphore;
|
||||
#endif
|
||||
static Semaphore* sig_sem = NULL;
|
||||
|
||||
void os::signal_init_pd() {
|
||||
// Initialize signal structures
|
||||
::memset((void*)pending_signals, 0, sizeof(pending_signals));
|
||||
|
||||
// Initialize signal semaphore
|
||||
::SEM_INIT(sig_sem, 0);
|
||||
sig_sem = new Semaphore();
|
||||
}
|
||||
|
||||
void os::signal_notify(int sig) {
|
||||
Atomic::inc(&pending_signals[sig]);
|
||||
::SEM_POST(sig_sem);
|
||||
if (sig_sem != NULL) {
|
||||
Atomic::inc(&pending_signals[sig]);
|
||||
sig_sem->signal();
|
||||
} else {
|
||||
// Signal thread is not created with ReduceSignalUsage and signal_init_pd
|
||||
// initialization isn't called.
|
||||
assert(ReduceSignalUsage, "signal semaphore should be created");
|
||||
}
|
||||
}
|
||||
|
||||
static int check_pending_signals(bool wait) {
|
||||
static int check_pending_signals() {
|
||||
Atomic::store(0, &sigint_count);
|
||||
for (;;) {
|
||||
for (int i = 0; i < NSIG + 1; i++) {
|
||||
@ -1966,9 +1858,6 @@ static int check_pending_signals(bool wait) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
if (!wait) {
|
||||
return -1;
|
||||
}
|
||||
JavaThread *thread = JavaThread::current();
|
||||
ThreadBlockInVM tbivm(thread);
|
||||
|
||||
@ -1976,7 +1865,7 @@ static int check_pending_signals(bool wait) {
|
||||
do {
|
||||
thread->set_suspend_equivalent();
|
||||
// cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
|
||||
::SEM_WAIT(sig_sem);
|
||||
sig_sem->wait();
|
||||
|
||||
// were we externally suspended while we were waiting?
|
||||
threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
|
||||
@ -1985,7 +1874,7 @@ static int check_pending_signals(bool wait) {
|
||||
// another thread suspended us. We don't want to continue running
|
||||
// while suspended because that would surprise the thread that
|
||||
// suspended us.
|
||||
::SEM_POST(sig_sem);
|
||||
sig_sem->signal();
|
||||
|
||||
thread->java_suspend_self();
|
||||
}
|
||||
@ -1993,12 +1882,8 @@ static int check_pending_signals(bool wait) {
|
||||
}
|
||||
}
|
||||
|
||||
int os::signal_lookup() {
|
||||
return check_pending_signals(false);
|
||||
}
|
||||
|
||||
int os::signal_wait() {
|
||||
return check_pending_signals(true);
|
||||
return check_pending_signals();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@ -2663,6 +2548,12 @@ static void suspend_save_context(OSThread *osthread, siginfo_t* siginfo, ucontex
|
||||
//
|
||||
// Currently only ever called on the VMThread or JavaThread
|
||||
//
|
||||
#ifdef __APPLE__
|
||||
static OSXSemaphore sr_semaphore;
|
||||
#else
|
||||
static PosixSemaphore sr_semaphore;
|
||||
#endif
|
||||
|
||||
static void SR_handler(int sig, siginfo_t* siginfo, ucontext_t* context) {
|
||||
// Save and restore errno to avoid confusing native code with EINTR
|
||||
// after sigsuspend.
|
||||
|
107
src/hotspot/os/bsd/semaphore_bsd.cpp
Normal file
107
src/hotspot/os/bsd/semaphore_bsd.cpp
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (c) 2018, 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 "precompiled/precompiled.hpp"
|
||||
#include "semaphore_bsd.hpp"
|
||||
#include "utilities/debug.hpp"
|
||||
|
||||
#include <semaphore.h>
|
||||
|
||||
#ifdef __APPLE__
|
||||
// OS X doesn't support unamed POSIX semaphores, so the implementation in os_posix.cpp can't be used.
|
||||
|
||||
static const char* sem_init_strerror(kern_return_t value) {
|
||||
switch (value) {
|
||||
case KERN_INVALID_ARGUMENT: return "Invalid argument";
|
||||
case KERN_RESOURCE_SHORTAGE: return "Resource shortage";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
OSXSemaphore::OSXSemaphore(uint value) {
|
||||
kern_return_t ret = semaphore_create(mach_task_self(), &_semaphore, SYNC_POLICY_FIFO, value);
|
||||
|
||||
guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s", sem_init_strerror(ret));
|
||||
}
|
||||
|
||||
OSXSemaphore::~OSXSemaphore() {
|
||||
semaphore_destroy(mach_task_self(), _semaphore);
|
||||
}
|
||||
|
||||
void OSXSemaphore::signal(uint count) {
|
||||
for (uint i = 0; i < count; i++) {
|
||||
kern_return_t ret = semaphore_signal(_semaphore);
|
||||
|
||||
assert(ret == KERN_SUCCESS, "Failed to signal semaphore");
|
||||
}
|
||||
}
|
||||
|
||||
void OSXSemaphore::wait() {
|
||||
kern_return_t ret;
|
||||
while ((ret = semaphore_wait(_semaphore)) == KERN_ABORTED) {
|
||||
// Semaphore was interrupted. Retry.
|
||||
}
|
||||
assert(ret == KERN_SUCCESS, "Failed to wait on semaphore");
|
||||
}
|
||||
|
||||
int64_t OSXSemaphore::currenttime() {
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
return (tv.tv_sec * NANOSECS_PER_SEC) + (tv.tv_usec * 1000);
|
||||
}
|
||||
|
||||
bool OSXSemaphore::trywait() {
|
||||
return timedwait(0, 0);
|
||||
}
|
||||
|
||||
bool OSXSemaphore::timedwait(unsigned int sec, int nsec) {
|
||||
kern_return_t kr = KERN_ABORTED;
|
||||
mach_timespec_t waitspec;
|
||||
waitspec.tv_sec = sec;
|
||||
waitspec.tv_nsec = nsec;
|
||||
|
||||
int64_t starttime = currenttime();
|
||||
|
||||
kr = semaphore_timedwait(_semaphore, waitspec);
|
||||
while (kr == KERN_ABORTED) {
|
||||
int64_t totalwait = (sec * NANOSECS_PER_SEC) + nsec;
|
||||
|
||||
int64_t current = currenttime();
|
||||
int64_t passedtime = current - starttime;
|
||||
|
||||
if (passedtime >= totalwait) {
|
||||
waitspec.tv_sec = 0;
|
||||
waitspec.tv_nsec = 0;
|
||||
} else {
|
||||
int64_t waittime = totalwait - (current - starttime);
|
||||
waitspec.tv_sec = waittime / NANOSECS_PER_SEC;
|
||||
waitspec.tv_nsec = waittime % NANOSECS_PER_SEC;
|
||||
}
|
||||
|
||||
kr = semaphore_timedwait(_semaphore, waitspec);
|
||||
}
|
||||
|
||||
return kr == KERN_SUCCESS;
|
||||
}
|
||||
#endif // __APPLE__
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2018, 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
|
||||
@ -53,7 +53,7 @@ class OSXSemaphore : public CHeapObj<mtInternal>{
|
||||
bool timedwait(unsigned int sec, int nsec);
|
||||
|
||||
private:
|
||||
static jlong currenttime();
|
||||
static int64_t currenttime();
|
||||
};
|
||||
|
||||
typedef OSXSemaphore SemaphoreImpl;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2018, 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
|
||||
@ -95,7 +95,6 @@
|
||||
# include <sys/wait.h>
|
||||
# include <pwd.h>
|
||||
# include <poll.h>
|
||||
# include <semaphore.h>
|
||||
# include <fcntl.h>
|
||||
# include <string.h>
|
||||
# include <syscall.h>
|
||||
@ -2479,11 +2478,11 @@ void* os::user_handler() {
|
||||
return CAST_FROM_FN_PTR(void*, UserHandler);
|
||||
}
|
||||
|
||||
struct timespec PosixSemaphore::create_timespec(unsigned int sec, int nsec) {
|
||||
static struct timespec create_semaphore_timespec(unsigned int sec, int nsec) {
|
||||
struct timespec ts;
|
||||
// Semaphore's are always associated with CLOCK_REALTIME
|
||||
os::Linux::clock_gettime(CLOCK_REALTIME, &ts);
|
||||
// see unpackTime for discussion on overflow checking
|
||||
// see os_posix.cpp for discussion on overflow checking
|
||||
if (sec >= MAX_SECS) {
|
||||
ts.tv_sec += MAX_SECS;
|
||||
ts.tv_nsec = 0;
|
||||
@ -2535,7 +2534,7 @@ int os::sigexitnum_pd() {
|
||||
static volatile jint pending_signals[NSIG+1] = { 0 };
|
||||
|
||||
// Linux(POSIX) specific hand shaking semaphore.
|
||||
static sem_t sig_sem;
|
||||
static Semaphore* sig_sem = NULL;
|
||||
static PosixSemaphore sr_semaphore;
|
||||
|
||||
void os::signal_init_pd() {
|
||||
@ -2543,15 +2542,21 @@ void os::signal_init_pd() {
|
||||
::memset((void*)pending_signals, 0, sizeof(pending_signals));
|
||||
|
||||
// Initialize signal semaphore
|
||||
::sem_init(&sig_sem, 0, 0);
|
||||
sig_sem = new Semaphore();
|
||||
}
|
||||
|
||||
void os::signal_notify(int sig) {
|
||||
Atomic::inc(&pending_signals[sig]);
|
||||
::sem_post(&sig_sem);
|
||||
if (sig_sem != NULL) {
|
||||
Atomic::inc(&pending_signals[sig]);
|
||||
sig_sem->signal();
|
||||
} else {
|
||||
// Signal thread is not created with ReduceSignalUsage and signal_init_pd
|
||||
// initialization isn't called.
|
||||
assert(ReduceSignalUsage, "signal semaphore should be created");
|
||||
}
|
||||
}
|
||||
|
||||
static int check_pending_signals(bool wait) {
|
||||
static int check_pending_signals() {
|
||||
Atomic::store(0, &sigint_count);
|
||||
for (;;) {
|
||||
for (int i = 0; i < NSIG + 1; i++) {
|
||||
@ -2560,9 +2565,6 @@ static int check_pending_signals(bool wait) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
if (!wait) {
|
||||
return -1;
|
||||
}
|
||||
JavaThread *thread = JavaThread::current();
|
||||
ThreadBlockInVM tbivm(thread);
|
||||
|
||||
@ -2570,7 +2572,7 @@ static int check_pending_signals(bool wait) {
|
||||
do {
|
||||
thread->set_suspend_equivalent();
|
||||
// cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
|
||||
::sem_wait(&sig_sem);
|
||||
sig_sem->wait();
|
||||
|
||||
// were we externally suspended while we were waiting?
|
||||
threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
|
||||
@ -2579,7 +2581,7 @@ static int check_pending_signals(bool wait) {
|
||||
// another thread suspended us. We don't want to continue running
|
||||
// while suspended because that would surprise the thread that
|
||||
// suspended us.
|
||||
::sem_post(&sig_sem);
|
||||
sig_sem->signal();
|
||||
|
||||
thread->java_suspend_self();
|
||||
}
|
||||
@ -2587,12 +2589,8 @@ static int check_pending_signals(bool wait) {
|
||||
}
|
||||
}
|
||||
|
||||
int os::signal_lookup() {
|
||||
return check_pending_signals(false);
|
||||
}
|
||||
|
||||
int os::signal_wait() {
|
||||
return check_pending_signals(true);
|
||||
return check_pending_signals();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@ -4317,7 +4315,7 @@ static bool do_suspend(OSThread* osthread) {
|
||||
|
||||
// managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED
|
||||
while (true) {
|
||||
if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
|
||||
if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
|
||||
break;
|
||||
} else {
|
||||
// timeout
|
||||
@ -4351,7 +4349,7 @@ static void do_resume(OSThread* osthread) {
|
||||
|
||||
while (true) {
|
||||
if (sr_notify(osthread) == 0) {
|
||||
if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) {
|
||||
if (sr_semaphore.timedwait(create_semaphore_timespec(0, 2 * NANOSECS_PER_MILLISEC))) {
|
||||
if (osthread->sr.is_running()) {
|
||||
return;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,14 +31,8 @@
|
||||
#include "utilities/macros.hpp"
|
||||
#include "utilities/vmError.hpp"
|
||||
|
||||
#ifndef __APPLE__
|
||||
// POSIX unamed semaphores are not supported on OS X.
|
||||
#include "semaphore_posix.hpp"
|
||||
#endif
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <pthread.h>
|
||||
#include <semaphore.h>
|
||||
#include <signal.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/resource.h>
|
||||
@ -1499,67 +1493,6 @@ void os::ThreadCrashProtection::check_crash_protection(int sig,
|
||||
}
|
||||
}
|
||||
|
||||
// POSIX unamed semaphores are not supported on OS X.
|
||||
#ifndef __APPLE__
|
||||
|
||||
PosixSemaphore::PosixSemaphore(uint value) {
|
||||
int ret = sem_init(&_semaphore, 0, value);
|
||||
|
||||
guarantee_with_errno(ret == 0, "Failed to initialize semaphore");
|
||||
}
|
||||
|
||||
PosixSemaphore::~PosixSemaphore() {
|
||||
sem_destroy(&_semaphore);
|
||||
}
|
||||
|
||||
void PosixSemaphore::signal(uint count) {
|
||||
for (uint i = 0; i < count; i++) {
|
||||
int ret = sem_post(&_semaphore);
|
||||
|
||||
assert_with_errno(ret == 0, "sem_post failed");
|
||||
}
|
||||
}
|
||||
|
||||
void PosixSemaphore::wait() {
|
||||
int ret;
|
||||
|
||||
do {
|
||||
ret = sem_wait(&_semaphore);
|
||||
} while (ret != 0 && errno == EINTR);
|
||||
|
||||
assert_with_errno(ret == 0, "sem_wait failed");
|
||||
}
|
||||
|
||||
bool PosixSemaphore::trywait() {
|
||||
int ret;
|
||||
|
||||
do {
|
||||
ret = sem_trywait(&_semaphore);
|
||||
} while (ret != 0 && errno == EINTR);
|
||||
|
||||
assert_with_errno(ret == 0 || errno == EAGAIN, "trywait failed");
|
||||
|
||||
return ret == 0;
|
||||
}
|
||||
|
||||
bool PosixSemaphore::timedwait(struct timespec ts) {
|
||||
while (true) {
|
||||
int result = sem_timedwait(&_semaphore, &ts);
|
||||
if (result == 0) {
|
||||
return true;
|
||||
} else if (errno == EINTR) {
|
||||
continue;
|
||||
} else if (errno == ETIMEDOUT) {
|
||||
return false;
|
||||
} else {
|
||||
assert_with_errno(false, "timedwait failed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // __APPLE__
|
||||
|
||||
|
||||
// Shared pthread_mutex/cond based PlatformEvent implementation.
|
||||
// Not currently usable by Solaris.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user