OpenJDK / jdk / jdk12
changeset 34441:b16a4d589b09
Merge
author | duke |
---|---|
date | Wed, 05 Jul 2017 21:05:52 +0200 |
parents | 25e9d31417fa a9aca4c52b23 |
children | d72b3bf8cba1 |
files | hotspot/make/aix/makefiles/sa.make hotspot/make/aix/makefiles/saproc.make hotspot/make/bsd/makefiles/sa.make hotspot/make/linux/makefiles/sa.make hotspot/make/linux/makefiles/saproc.make hotspot/make/sa.files hotspot/make/solaris/makefiles/sa.make hotspot/make/solaris/makefiles/saproc.make hotspot/make/windows/makefiles/sa.make hotspot/src/os/aix/vm/vmError_aix.cpp hotspot/src/os/bsd/vm/vmError_bsd.cpp hotspot/src/os/linux/vm/vmError_linux.cpp hotspot/src/os/solaris/vm/vmError_solaris.cpp hotspot/test/compiler/compilercontrol/parser/DirectiveParser.java hotspot/test/compiler/compilercontrol/share/processors/QuietProcessor.java hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestI.java hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestL.java |
diffstat | 690 files changed, 36516 insertions(+), 9605 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags-top-repo Mon Dec 07 14:20:20 2015 -0800 +++ b/.hgtags-top-repo Wed Jul 05 21:05:52 2017 +0200 @@ -337,3 +337,4 @@ 106c06398f7ab330eef9e335fbd3a5a8ead23b77 jdk9-b92 331fda57dfd323c61804ba0472776790de572937 jdk9-b93 349488425abcaf3ff62f580007860b4b56875d10 jdk9-b94 +12a6fb4f070f8ca8fbca219ab9abf5da8908b317 jdk-9+95
--- a/common/autoconf/basics_windows.m4 Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/basics_windows.m4 Wed Jul 05 21:05:52 2017 +0200 @@ -423,7 +423,10 @@ AC_MSG_ERROR([fixpath did not work!]) fi AC_MSG_RESULT([yes]) + + FIXPATH_DETACH_FLAG="--detach" fi AC_SUBST(FIXPATH) + AC_SUBST(FIXPATH_DETACH_FLAG) ])
--- a/common/autoconf/boot-jdk.m4 Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/boot-jdk.m4 Wed Jul 05 21:05:52 2017 +0200 @@ -375,6 +375,9 @@ JAVA_FLAGS_BIG=$boot_jdk_jvmargs_big AC_SUBST(JAVA_FLAGS_BIG) + # By default, the main javac compilations use big + JAVA_FLAGS_JAVAC="$JAVA_FLAGS_BIG" + AC_SUBST(JAVA_FLAGS_JAVAC) AC_MSG_CHECKING([flags for boot jdk java command for small workloads])
--- a/common/autoconf/bootcycle-spec.gmk.in Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/bootcycle-spec.gmk.in Wed Jul 05 21:05:52 2017 +0200 @@ -59,3 +59,8 @@ JAR_CMD:=$(BOOT_JDK)/bin/jar JARSIGNER_CMD:=$(BOOT_JDK)/bin/jarsigner SJAVAC_SERVER_JAVA_CMD:=$(JAVA_CMD) +# When building a 32bit target, make sure the sjavac server flags are compatible +# with a 32bit JVM. +ifeq ($(OPENJDK_TARGET_CPU_BITS), 32) + SJAVAC_SERVER_JAVA_FLAGS:= -Xms256M -Xmx1500M +endif
--- a/common/autoconf/build-performance.m4 Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/build-performance.m4 Wed Jul 05 21:05:52 2017 +0200 @@ -138,14 +138,6 @@ JOBS="$memory_gb" else JOBS="$NUM_CORES" - # On bigger machines, leave some room for other processes to run - if test "$JOBS" -gt "4"; then - JOBS=`expr $JOBS '*' 90 / 100` - fi - fi - # Cap number of jobs to 16 - if test "$JOBS" -gt "16"; then - JOBS=16 fi if test "$JOBS" -eq "0"; then JOBS=1 @@ -246,6 +238,73 @@ fi ]) +################################################################################ +# +# Optionally enable distributed compilation of native code using icecc/icecream +# +AC_DEFUN([BPERF_SETUP_ICECC], +[ + AC_ARG_ENABLE([icecc], [AS_HELP_STRING([--enable-icecc], + [enable distribted compilation of native code using icecc/icecream @<:@disabled@:>@])]) + + if test "x${enable_icecc}" = "xyes"; then + BASIC_REQUIRE_PROGS(ICECC_CMD, icecc) + old_path="$PATH" + + # Look for icecc-create-env in some known places + PATH="$PATH:/usr/lib/icecc:/usr/lib64/icecc" + BASIC_REQUIRE_PROGS(ICECC_CREATE_ENV, icecc-create-env) + # Use icecc-create-env to create a minimal compilation environment that can + # be sent to the other hosts in the icecream cluster. + icecc_create_env_log="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env.log" + ${MKDIR} -p ${CONFIGURESUPPORT_OUTPUTDIR}/icecc + AC_MSG_CHECKING([for icecc build environment for target compiler]) + if test "x${TOOLCHAIN_TYPE}" = "xgcc"; then + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --gcc ${CC} ${CXX} > ${icecc_create_env_log} + elif test "x$TOOLCHAIN_TYPE" = "xclang"; then + # For clang, the icecc compilerwrapper is needed. It usually resides next + # to icecc-create-env. + BASIC_REQUIRE_PROGS(ICECC_WRAPPER, compilerwrapper) + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} + else + AC_MSG_ERROR([Can only create icecc compiler packages for toolchain types gcc and clang]) + fi + PATH="$old_path" + # The bundle with the compiler gets a name based on checksums. Parse log file + # to find it. + ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`" + ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}" + AC_MSG_RESULT([${ICECC_ENV_BUNDLE}]) + ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${CC} ICECC_CXX=${CXX} ${ICECC_CMD}" + + if test "x${COMPILE_TYPE}" = "xcross"; then + # If cross compiling, create a separate env package for the build compiler + AC_MSG_CHECKING([for icecc build environment for build compiler]) + # Assume "gcc" or "cc" is gcc and "clang" is clang. Otherwise bail. + if test "x${BUILD_CC##*/}" = "xgcc" || test "x${BUILD_CC##*/}" = "xcc"; then + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --gcc ${BUILD_CC} ${BUILD_CXX} > ${icecc_create_env_log} + elif test "x${BUILD_CC##*/}" = "xclang"; then + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} + else + AC_MSG_ERROR([Cannot create icecc compiler package for ${BUILD_CC}]) + fi + ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`" + ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}" + AC_MSG_RESULT([${ICECC_ENV_BUNDLE}]) + BUILD_ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${BUILD_CC} \ + ICECC_CXX=${BUILD_CXX} ${ICECC_CMD}" + else + BUILD_ICECC="${ICECC}" + fi + AC_SUBST(ICECC) + AC_SUBST(BUILD_ICECC) + fi +]) + AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS], [ @@ -258,8 +317,15 @@ [ENABLE_PRECOMPH=${enable_precompiled_headers}], [ENABLE_PRECOMPH=yes]) USE_PRECOMPILED_HEADER=1 + AC_MSG_CHECKING([If precompiled header is enabled]) if test "x$ENABLE_PRECOMPH" = xno; then + AC_MSG_RESULT([no, forced]) USE_PRECOMPILED_HEADER=0 + elif test "x$ICECC" != "x"; then + AC_MSG_RESULT([no, does not work effectively with icecc]) + USE_PRECOMPILED_HEADER=0 + else + AC_MSG_RESULT([yes]) fi if test "x$ENABLE_PRECOMPH" = xyes; then @@ -337,9 +403,9 @@ AC_MSG_RESULT([$ENABLE_SJAVAC]) AC_SUBST(ENABLE_SJAVAC) - AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], - [use only the server part of sjavac for faster javac compiles @<:@disabled@:>@])], - [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER="no"]) + AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--disable-javac-server], + [disable javac server @<:@enabled@:>@])], + [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER="yes"]) if test "x$JVM_ARG_OK" = "xfalse"; then AC_MSG_WARN([Could not set -Xms${MS_VALUE}M -Xmx${MX_VALUE}M, disabling javac server]) ENABLE_JAVAC_SERVER="no" @@ -347,4 +413,10 @@ AC_MSG_CHECKING([whether to use javac server]) AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) AC_SUBST(ENABLE_JAVAC_SERVER) + + if test "x$ENABLE_JAVAC_SERVER" = "xyes" || "x$ENABLE_SJAVAC" = "xyes"; then + # When using a server javac, the small client instances do not need much + # resources. + JAVA_FLAGS_JAVAC="$JAVA_FLAGS_SMALL" + fi ])
--- a/common/autoconf/configure.ac Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/configure.ac Wed Jul 05 21:05:52 2017 +0200 @@ -237,6 +237,9 @@ # Setup smart javac (after cores and memory have been setup) BPERF_SETUP_SMART_JAVAC +# Setup use of icecc if requested +BPERF_SETUP_ICECC + # Can the C/C++ compiler use precompiled headers? BPERF_SETUP_PRECOMPILED_HEADERS
--- a/common/autoconf/flags.m4 Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/flags.m4 Wed Jul 05 21:05:52 2017 +0200 @@ -976,6 +976,19 @@ DISABLE_WARNING_PREFIX= fi CFLAGS_WARNINGS_ARE_ERRORS="-Werror" + # Repeate the check for the BUILD_CC + CC_OLD="$CC" + CC="$BUILD_CC" + FLAGS_COMPILER_CHECK_ARGUMENTS([-Wno-this-is-a-warning-that-do-not-exist], + [BUILD_CC_CAN_DISABLE_WARNINGS=true], + [BUILD_CC_CAN_DISABLE_WARNINGS=false] + ) + if test "x$BUILD_CC_CAN_DISABLE_WARNINGS" = "xtrue"; then + BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-" + else + BUILD_CC_DISABLE_WARNING_PREFIX= + fi + CC="$CC_OLD" ;; clang) DISABLE_WARNING_PREFIX="-Wno-"
--- a/common/autoconf/generated-configure.sh Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/generated-configure.sh Wed Jul 05 21:05:52 2017 +0200 @@ -632,12 +632,18 @@ CFLAGS_CCACHE CCACHE USE_PRECOMPILED_HEADER +BUILD_ICECC +ICECC +ICECC_WRAPPER +ICECC_CREATE_ENV +ICECC_CMD ENABLE_JAVAC_SERVER ENABLE_SJAVAC SJAVAC_SERVER_JAVA_FLAGS SJAVAC_SERVER_JAVA JAVA_TOOL_FLAGS_SMALL JAVA_FLAGS_SMALL +JAVA_FLAGS_JAVAC JAVA_FLAGS_BIG JAVA_FLAGS JOBS @@ -679,6 +685,7 @@ MSVCR_DLL LIBCXX STATIC_CXX_SETTING +FIXPATH_DETACH_FLAG FIXPATH GCOV_ENABLED ZIP_DEBUGINFO_FILES @@ -742,7 +749,10 @@ HOTSPOT_CXX HOTSPOT_RC HOTSPOT_MT +BUILD_AS BUILD_LD +BUILD_AR +BUILD_NM BUILD_CXX BUILD_CC BUILD_SYSROOT_LDFLAGS @@ -1130,6 +1140,7 @@ with_sjavac_server_java enable_sjavac enable_javac_server +enable_icecc enable_precompiled_headers enable_ccache with_ccache_dir @@ -1224,6 +1235,8 @@ OBJDUMP BUILD_CC BUILD_CXX +BUILD_NM +BUILD_AR JTREGEXE XMKMF FREETYPE_CFLAGS @@ -1236,6 +1249,9 @@ PNG_LIBS LCMS_CFLAGS LCMS_LIBS +ICECC_CMD +ICECC_CREATE_ENV +ICECC_WRAPPER CCACHE' @@ -1881,8 +1897,9 @@ --with-freetype, disabled otherwise] --enable-sjavac use sjavac to do fast incremental compiles [disabled] - --enable-javac-server use only the server part of sjavac for faster javac - compiles [disabled] + --disable-javac-server disable javac server [enabled] + --enable-icecc enable distribted compilation of native code using + icecc/icecream [disabled] --disable-precompiled-headers disable using precompiled headers when compiling C++ [enabled] @@ -2130,6 +2147,8 @@ OBJDUMP Override default value for OBJDUMP BUILD_CC Override default value for BUILD_CC BUILD_CXX Override default value for BUILD_CXX + BUILD_NM Override default value for BUILD_NM + BUILD_AR Override default value for BUILD_AR JTREGEXE Override default value for JTREGEXE XMKMF Path to xmkmf, Makefile generator for X Window System FREETYPE_CFLAGS @@ -2145,6 +2164,11 @@ PNG_LIBS linker flags for PNG, overriding pkg-config LCMS_CFLAGS C compiler flags for LCMS, overriding pkg-config LCMS_LIBS linker flags for LCMS, overriding pkg-config + ICECC_CMD Override default value for ICECC_CMD + ICECC_CREATE_ENV + Override default value for ICECC_CREATE_ENV + ICECC_WRAPPER + Override default value for ICECC_WRAPPER CCACHE Override default value for CCACHE Use these variables to override the choices made by `configure' or to help @@ -3742,6 +3766,12 @@ +################################################################################ +# +# Optionally enable distributed compilation of native code using icecc/icecream +# + + @@ -4679,7 +4709,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1447737510 +DATE_WHEN_GENERATED=1449049746 ############################################################################### # @@ -36098,6 +36128,314 @@ fi + elif test "x$TOOLCHAIN_TYPE" = xgcc; then + + + # Publish this variable in the help. + + + if [ -z "${AR+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in ar gcc-ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar gcc-ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in ar gcc-ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar gcc-ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$AR" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool AR= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool AR= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AR" >&5 +$as_echo_n "checking for AR... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$AR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_AR="$AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AR=$ac_cv_path_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AR" >&5 +$as_echo_n "checking for AR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + else @@ -40277,6 +40615,315 @@ fi fi + if test "x$TOOLCHAIN_TYPE" = xgcc; then + + + # Publish this variable in the help. + + + if [ -z "${NM+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in nm gcc-nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NM="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NM" && break + done +fi +if test -z "$NM"; then + ac_ct_NM=$NM + for ac_prog in nm gcc-nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NM="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_NM" && break +done + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +fi + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in nm gcc-nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NM="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NM" && break + done +fi +if test -z "$NM"; then + ac_ct_NM=$NM + for ac_prog in nm gcc-nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NM="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_NM" && break +done + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$NM" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool NM= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool NM= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NM" >&5 +$as_echo_n "checking for NM... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$NM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NM" >&5 +$as_echo_n "checking for NM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + + else # Publish this variable in the help. @@ -40584,6 +41231,7 @@ fi + fi # Only process if variable expands to non-empty @@ -43359,6 +44007,975 @@ fi fi + + + # Publish this variable in the help. + + + if [ -z "${BUILD_NM+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in nm gcc-nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_NM="$BUILD_NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_NM=$ac_cv_path_BUILD_NM +if test -n "$BUILD_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_NM" >&5 +$as_echo "$BUILD_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_NM" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_NM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_NM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_NM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_NM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_NM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in nm gcc-nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_NM="$BUILD_NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_NM=$ac_cv_path_BUILD_NM +if test -n "$BUILD_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_NM" >&5 +$as_echo "$BUILD_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_NM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$BUILD_NM" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool BUILD_NM= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool BUILD_NM= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_NM" >&5 +$as_echo_n "checking for BUILD_NM... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_NM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_NM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_NM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_NM="$BUILD_NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_NM=$ac_cv_path_BUILD_NM +if test -n "$BUILD_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_NM" >&5 +$as_echo "$BUILD_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_NM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_NM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_NM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_NM" >&5 +$as_echo_n "checking for BUILD_NM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_NM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + + + # Only process if variable expands to non-empty + + if test "x$BUILD_NM" != x; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_NM" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file presence. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_NM, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_NM, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_NM" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-style (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in MSYS causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + fi + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_NM" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a unix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Cannot rely on the command "which" here since it doesn't always work. + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test -z "$is_absolute_path"; then + # Path to executable is not absolute. Find it. + IFS_save="$IFS" + IFS=: + for p in $PATH; do + if test -f "$p/$path" && test -x "$p/$path"; then + new_path="$p/$path" + break + fi + done + IFS="$IFS_save" + else + # This is an absolute path, we can use it without further modifications. + new_path="$path" + fi + + if test "x$new_path" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_NM" "$LINENO" 5 + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_NM="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_NM to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_NM to \"$new_complete\"" >&6;} + fi + fi + + + + # Publish this variable in the help. + + + if [ -z "${BUILD_AR+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ar gcc-ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_AR="$BUILD_AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_AR=$ac_cv_path_BUILD_AR +if test -n "$BUILD_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_AR" >&5 +$as_echo "$BUILD_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_AR" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_AR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_AR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_AR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_AR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_AR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ar gcc-ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_AR="$BUILD_AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_AR=$ac_cv_path_BUILD_AR +if test -n "$BUILD_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_AR" >&5 +$as_echo "$BUILD_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_AR" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$BUILD_AR" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool BUILD_AR= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool BUILD_AR= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_AR" >&5 +$as_echo_n "checking for BUILD_AR... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_AR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_AR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_AR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_AR="$BUILD_AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_AR=$ac_cv_path_BUILD_AR +if test -n "$BUILD_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_AR" >&5 +$as_echo "$BUILD_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_AR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_AR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_AR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_AR" >&5 +$as_echo_n "checking for BUILD_AR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_AR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + + + # Only process if variable expands to non-empty + + if test "x$BUILD_AR" != x; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in cygwin causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path=`$CYGPATH -u "$path"` + fi + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_AR" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file presence. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_AR, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_AR, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_AR" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-style (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + # bat and cmd files are not always considered executable in MSYS causing which + # to not find them + if test "x$new_path" = x \ + && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \ + && test "x`$LS \"$path\" 2>/dev/null`" != x; then + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + fi + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_AR" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a unix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Cannot rely on the command "which" here since it doesn't always work. + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test -z "$is_absolute_path"; then + # Path to executable is not absolute. Find it. + IFS_save="$IFS" + IFS=: + for p in $PATH; do + if test -f "$p/$path" && test -x "$p/$path"; then + new_path="$p/$path" + break + fi + done + IFS="$IFS_save" + else + # This is an absolute path, we can use it without further modifications. + new_path="$path" + fi + + if test "x$new_path" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_AR" "$LINENO" 5 + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_AR="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_AR to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_AR to \"$new_complete\"" >&6;} + fi + fi + + # Assume the C compiler is the assembler + BUILD_AS="$BUILD_CC -c" + # Just like for the target compiler, use the compiler as linker BUILD_LD="$BUILD_CC" PATH="$OLDPATH" @@ -43368,9 +44985,15 @@ BUILD_CC="$CC" BUILD_CXX="$CXX" BUILD_LD="$LD" + BUILD_NM="$NM" + BUILD_AS="$AS" BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" - fi + BUILD_AR="$AR" + fi + + + @@ -45694,6 +47317,81 @@ DISABLE_WARNING_PREFIX= fi CFLAGS_WARNINGS_ARE_ERRORS="-Werror" + # Repeate the check for the BUILD_CC + CC_OLD="$CC" + CC="$BUILD_CC" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"-Wno-this-is-a-warning-that-do-not-exist\"" >&5 +$as_echo_n "checking if compiler supports \"-Wno-this-is-a-warning-that-do-not-exist\"... " >&6; } + supports=yes + + saved_cflags="$CFLAGS" + CFLAGS="$CFLAGS -Wno-this-is-a-warning-that-do-not-exist" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + supports=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + CFLAGS="$saved_cflags" + + saved_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAG -Wno-this-is-a-warning-that-do-not-exist" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + supports=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + CXXFLAGS="$saved_cxxflags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 +$as_echo "$supports" >&6; } + if test "x$supports" = "xyes" ; then + BUILD_CC_CAN_DISABLE_WARNINGS=true + else + BUILD_CC_CAN_DISABLE_WARNINGS=false + + fi + + if test "x$BUILD_CC_CAN_DISABLE_WARNINGS" = "xtrue"; then + BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-" + else + BUILD_CC_DISABLE_WARNING_PREFIX= + fi + CC="$CC_OLD" ;; clang) DISABLE_WARNING_PREFIX="-Wno-" @@ -45888,7 +47586,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - fi + + FIXPATH_DETACH_FLAG="--detach" + fi + @@ -55036,14 +56737,6 @@ JOBS="$memory_gb" else JOBS="$NUM_CORES" - # On bigger machines, leave some room for other processes to run - if test "$JOBS" -gt "4"; then - JOBS=`expr $JOBS '*' 90 / 100` - fi - fi - # Cap number of jobs to 16 - if test "$JOBS" -gt "16"; then - JOBS=16 fi if test "$JOBS" -eq "0"; then JOBS=1 @@ -55191,6 +56884,9 @@ JAVA_FLAGS_BIG=$boot_jdk_jvmargs_big + # By default, the main javac compilations use big + JAVA_FLAGS_JAVAC="$JAVA_FLAGS_BIG" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking flags for boot jdk java command for small workloads" >&5 $as_echo_n "checking flags for boot jdk java command for small workloads... " >&6; } @@ -55353,7 +57049,7 @@ if test "${enable_javac_server+set}" = set; then : enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" else - ENABLE_JAVAC_SERVER="no" + ENABLE_JAVAC_SERVER="yes" fi if test "x$JVM_ARG_OK" = "xfalse"; then @@ -55367,6 +57063,691 @@ $as_echo "$ENABLE_JAVAC_SERVER" >&6; } + if test "x$ENABLE_JAVAC_SERVER" = "xyes" || "x$ENABLE_SJAVAC" = "xyes"; then + # When using a server javac, the small client instances do not need much + # resources. + JAVA_FLAGS_JAVAC="$JAVA_FLAGS_SMALL" + fi + + +# Setup use of icecc if requested + + # Check whether --enable-icecc was given. +if test "${enable_icecc+set}" = set; then : + enableval=$enable_icecc; +fi + + + if test "x${enable_icecc}" = "xyes"; then + + + + # Publish this variable in the help. + + + if [ -z "${ICECC_CMD+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in icecc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_CMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_CMD="$ICECC_CMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_CMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_CMD=$ac_cv_path_ICECC_CMD +if test -n "$ICECC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_CMD" >&5 +$as_echo "$ICECC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ICECC_CMD" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ICECC_CMD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ICECC_CMD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xICECC_CMD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ICECC_CMD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ICECC_CMD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in icecc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_CMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_CMD="$ICECC_CMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_CMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_CMD=$ac_cv_path_ICECC_CMD +if test -n "$ICECC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_CMD" >&5 +$as_echo "$ICECC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ICECC_CMD" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$ICECC_CMD" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool ICECC_CMD= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool ICECC_CMD= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICECC_CMD" >&5 +$as_echo_n "checking for ICECC_CMD... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$ICECC_CMD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ICECC_CMD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ICECC_CMD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_CMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_CMD="$ICECC_CMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_CMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_CMD=$ac_cv_path_ICECC_CMD +if test -n "$ICECC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_CMD" >&5 +$as_echo "$ICECC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ICECC_CMD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ICECC_CMD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ICECC_CMD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICECC_CMD" >&5 +$as_echo_n "checking for ICECC_CMD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ICECC_CMD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + + + if test "x$ICECC_CMD" = x; then + as_fn_error $? "Could not find required tool for ICECC_CMD" "$LINENO" 5 + fi + + + old_path="$PATH" + + # Look for icecc-create-env in some known places + PATH="$PATH:/usr/lib/icecc:/usr/lib64/icecc" + + + + # Publish this variable in the help. + + + if [ -z "${ICECC_CREATE_ENV+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in icecc-create-env +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_CREATE_ENV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_CREATE_ENV in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_CREATE_ENV="$ICECC_CREATE_ENV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_CREATE_ENV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_CREATE_ENV=$ac_cv_path_ICECC_CREATE_ENV +if test -n "$ICECC_CREATE_ENV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_CREATE_ENV" >&5 +$as_echo "$ICECC_CREATE_ENV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ICECC_CREATE_ENV" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ICECC_CREATE_ENV! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ICECC_CREATE_ENV!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xICECC_CREATE_ENV" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ICECC_CREATE_ENV from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ICECC_CREATE_ENV from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in icecc-create-env +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_CREATE_ENV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_CREATE_ENV in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_CREATE_ENV="$ICECC_CREATE_ENV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_CREATE_ENV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_CREATE_ENV=$ac_cv_path_ICECC_CREATE_ENV +if test -n "$ICECC_CREATE_ENV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_CREATE_ENV" >&5 +$as_echo "$ICECC_CREATE_ENV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ICECC_CREATE_ENV" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$ICECC_CREATE_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool ICECC_CREATE_ENV= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool ICECC_CREATE_ENV= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICECC_CREATE_ENV" >&5 +$as_echo_n "checking for ICECC_CREATE_ENV... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$ICECC_CREATE_ENV" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ICECC_CREATE_ENV=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ICECC_CREATE_ENV=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_CREATE_ENV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_CREATE_ENV in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_CREATE_ENV="$ICECC_CREATE_ENV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_CREATE_ENV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_CREATE_ENV=$ac_cv_path_ICECC_CREATE_ENV +if test -n "$ICECC_CREATE_ENV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_CREATE_ENV" >&5 +$as_echo "$ICECC_CREATE_ENV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ICECC_CREATE_ENV" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ICECC_CREATE_ENV=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ICECC_CREATE_ENV=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICECC_CREATE_ENV" >&5 +$as_echo_n "checking for ICECC_CREATE_ENV... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ICECC_CREATE_ENV=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + + + if test "x$ICECC_CREATE_ENV" = x; then + as_fn_error $? "Could not find required tool for ICECC_CREATE_ENV" "$LINENO" 5 + fi + + + # Use icecc-create-env to create a minimal compilation environment that can + # be sent to the other hosts in the icecream cluster. + icecc_create_env_log="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env.log" + ${MKDIR} -p ${CONFIGURESUPPORT_OUTPUTDIR}/icecc + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icecc build environment for target compiler" >&5 +$as_echo_n "checking for icecc build environment for target compiler... " >&6; } + if test "x${TOOLCHAIN_TYPE}" = "xgcc"; then + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --gcc ${CC} ${CXX} > ${icecc_create_env_log} + elif test "x$TOOLCHAIN_TYPE" = "xclang"; then + # For clang, the icecc compilerwrapper is needed. It usually resides next + # to icecc-create-env. + + + + # Publish this variable in the help. + + + if [ -z "${ICECC_WRAPPER+x}" ]; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in compilerwrapper +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_WRAPPER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_WRAPPER in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_WRAPPER="$ICECC_WRAPPER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_WRAPPER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_WRAPPER=$ac_cv_path_ICECC_WRAPPER +if test -n "$ICECC_WRAPPER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_WRAPPER" >&5 +$as_echo "$ICECC_WRAPPER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ICECC_WRAPPER" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ICECC_WRAPPER! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ICECC_WRAPPER!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xICECC_WRAPPER" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ICECC_WRAPPER from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ICECC_WRAPPER from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in compilerwrapper +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_WRAPPER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_WRAPPER in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_WRAPPER="$ICECC_WRAPPER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_WRAPPER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_WRAPPER=$ac_cv_path_ICECC_WRAPPER +if test -n "$ICECC_WRAPPER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_WRAPPER" >&5 +$as_echo "$ICECC_WRAPPER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ICECC_WRAPPER" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if we try to supply an empty value + if test "x$ICECC_WRAPPER" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool ICECC_WRAPPER= (no value)" >&5 +$as_echo "$as_me: Setting user supplied tool ICECC_WRAPPER= (no value)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICECC_WRAPPER" >&5 +$as_echo_n "checking for ICECC_WRAPPER... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + # Check if the provided tool contains a complete path. + tool_specified="$ICECC_WRAPPER" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ICECC_WRAPPER=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ICECC_WRAPPER=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICECC_WRAPPER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICECC_WRAPPER in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICECC_WRAPPER="$ICECC_WRAPPER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICECC_WRAPPER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICECC_WRAPPER=$ac_cv_path_ICECC_WRAPPER +if test -n "$ICECC_WRAPPER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICECC_WRAPPER" >&5 +$as_echo "$ICECC_WRAPPER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ICECC_WRAPPER" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ICECC_WRAPPER=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ICECC_WRAPPER=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICECC_WRAPPER" >&5 +$as_echo_n "checking for ICECC_WRAPPER... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ICECC_WRAPPER=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + fi + + + + if test "x$ICECC_WRAPPER" = x; then + as_fn_error $? "Could not find required tool for ICECC_WRAPPER" "$LINENO" 5 + fi + + + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} + else + as_fn_error $? "Can only create icecc compiler packages for toolchain types gcc and clang" "$LINENO" 5 + fi + PATH="$old_path" + # The bundle with the compiler gets a name based on checksums. Parse log file + # to find it. + ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`" + ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ICECC_ENV_BUNDLE}" >&5 +$as_echo "${ICECC_ENV_BUNDLE}" >&6; } + ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${CC} ICECC_CXX=${CXX} ${ICECC_CMD}" + + if test "x${COMPILE_TYPE}" = "xcross"; then + # If cross compiling, create a separate env package for the build compiler + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icecc build environment for build compiler" >&5 +$as_echo_n "checking for icecc build environment for build compiler... " >&6; } + # Assume "gcc" or "cc" is gcc and "clang" is clang. Otherwise bail. + if test "x${BUILD_CC##*/}" = "xgcc" || test "x${BUILD_CC##*/}" = "xcc"; then + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --gcc ${BUILD_CC} ${BUILD_CXX} > ${icecc_create_env_log} + elif test "x${BUILD_CC##*/}" = "xclang"; then + cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \ + && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} + else + as_fn_error $? "Cannot create icecc compiler package for ${BUILD_CC}" "$LINENO" 5 + fi + ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`" + ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ICECC_ENV_BUNDLE}" >&5 +$as_echo "${ICECC_ENV_BUNDLE}" >&6; } + BUILD_ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${BUILD_CC} \ + ICECC_CXX=${BUILD_CXX} ${ICECC_CMD}" + else + BUILD_ICECC="${ICECC}" + fi + + + fi + # Can the C/C++ compiler use precompiled headers? @@ -55384,8 +57765,19 @@ USE_PRECOMPILED_HEADER=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking If precompiled header is enabled" >&5 +$as_echo_n "checking If precompiled header is enabled... " >&6; } if test "x$ENABLE_PRECOMPH" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, forced" >&5 +$as_echo "no, forced" >&6; } USE_PRECOMPILED_HEADER=0 + elif test "x$ICECC" != "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, does not work effectively with icecc" >&5 +$as_echo "no, does not work effectively with icecc" >&6; } + USE_PRECOMPILED_HEADER=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi if test "x$ENABLE_PRECOMPH" = xyes; then
--- a/common/autoconf/hotspot-spec.gmk.in Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/hotspot-spec.gmk.in Wed Jul 05 21:05:52 2017 +0200 @@ -49,8 +49,8 @@ # The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the # compiler that produces code that can be run on the build platform. -HOSTCC:=@FIXPATH@ @BUILD_CC@ $(BUILD_SYSROOT_CFLAGS) -HOSTCXX:=@FIXPATH@ @BUILD_CXX@ $(BUILD_SYSROOT_CFLAGS) +HOSTCC:=@FIXPATH@ @BUILD_ICECC@ @BUILD_CC@ $(BUILD_SYSROOT_CFLAGS) +HOSTCXX:=@FIXPATH@ @BUILD_ICECC@ @BUILD_CXX@ $(BUILD_SYSROOT_CFLAGS) #################################################### # @@ -105,7 +105,7 @@ # For hotspot, override compiler/tools definition to not include FIXPATH prefix. # Hotspot has its own handling on the Windows path situation. -CXX:=@CCACHE@ @HOTSPOT_CXX@ +CXX:=@CCACHE@ @ICECC@ @HOTSPOT_CXX@ LD:=@HOTSPOT_LD@ MT:=@HOTSPOT_MT@ RC:=@HOTSPOT_RC@
--- a/common/autoconf/spec.gmk.in Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/spec.gmk.in Wed Jul 05 21:05:52 2017 +0200 @@ -329,7 +329,7 @@ CFLAGS_CCACHE:=@CFLAGS_CCACHE@ # Tools that potentially need to be cross compilation aware. -CC:=@FIXPATH@ @CCACHE@ @CC@ +CC:=@FIXPATH@ @CCACHE@ @ICECC@ @CC@ # CFLAGS used to compile the jdk native libraries (C-code) CFLAGS_JDKLIB:=@CFLAGS_JDKLIB@ @@ -339,7 +339,7 @@ CFLAGS_JDKEXE:=@CFLAGS_JDKEXE@ CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@ -CXX:=@FIXPATH@ @CCACHE@ @CXX@ +CXX:=@FIXPATH@ @CCACHE@ @ICECC@ @CXX@ #CXXFLAGS:=@CXXFLAGS@ CPP:=@FIXPATH@ @CPP@ @@ -382,8 +382,12 @@ # BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the # build platform. -BUILD_CC:=@FIXPATH@ @BUILD_CC@ +BUILD_CC:=@FIXPATH@ @BUILD_ICECC@ @BUILD_CC@ +BUILD_CXX:=@FIXPATH@ @BUILD_ICECC@ @BUILD_CXX@ BUILD_LD:=@FIXPATH@ @BUILD_LD@ +BUILD_AS:=@FIXPATH@ @BUILD_AS@ +BUILD_AR:=@FIXPATH@ @BUILD_AR@ +BUILD_NM:=@FIXPATH@ @BUILD_NM@ BUILD_SYSROOT_CFLAGS:=@BUILD_SYSROOT_CFLAGS@ BUILD_SYSROOT_LDFLAGS:=@BUILD_SYSROOT_LDFLAGS@ @@ -446,6 +450,7 @@ JAVA_FLAGS:=@JAVA_FLAGS@ JAVA_FLAGS_BIG:=@JAVA_FLAGS_BIG@ JAVA_FLAGS_SMALL:=@JAVA_FLAGS_SMALL@ +JAVA_FLAGS_JAVAC:=@JAVA_FLAGS_JAVAC@ JAVA_TOOL_FLAGS_SMALL:=@JAVA_TOOL_FLAGS_SMALL@ SJAVAC_SERVER_JAVA_FLAGS:=@SJAVAC_SERVER_JAVA_FLAGS@ @@ -462,13 +467,15 @@ # it possible to override only the *_CMD variables. JAVA=@FIXPATH@ $(JAVA_CMD) $(JAVA_FLAGS_BIG) $(JAVA_FLAGS) JAVA_SMALL=@FIXPATH@ $(JAVA_CMD) $(JAVA_FLAGS_SMALL) $(JAVA_FLAGS) +JAVA_JAVAC=@FIXPATH@ $(JAVA_CMD) $(JAVA_FLAGS_JAVAC) $(JAVA_FLAGS) JAVAC=@FIXPATH@ $(JAVAC_CMD) JAVAH=@FIXPATH@ $(JAVAH_CMD) JAR=@FIXPATH@ $(JAR_CMD) JARSIGNER=@FIXPATH@ $(JARSIGNER_CMD) # A specific java binary with specific options can be used to run # the long running background sjavac servers and other long running tasks. -SJAVAC_SERVER_JAVA=@FIXPATH@ $(SJAVAC_SERVER_JAVA_CMD) $(SJAVAC_SERVER_JAVA_FLAGS) +SJAVAC_SERVER_JAVA=@FIXPATH@ @FIXPATH_DETACH_FLAG@ $(SJAVAC_SERVER_JAVA_CMD) \ + $(SJAVAC_SERVER_JAVA_FLAGS) # Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid # overriding that value by using ?=.
--- a/common/autoconf/toolchain.m4 Mon Dec 07 14:20:20 2015 -0800 +++ b/common/autoconf/toolchain.m4 Wed Jul 05 21:05:52 2017 +0200 @@ -539,6 +539,8 @@ if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then # The corresponding ar tool is lib.exe (used to create static libraries) AC_CHECK_PROG([AR], [lib],[lib],,,) + elif test "x$TOOLCHAIN_TYPE" = xgcc; then + BASIC_CHECK_TOOLS(AR, ar gcc-ar) else BASIC_CHECK_TOOLS(AR, ar) fi @@ -584,7 +586,11 @@ # FIXME: we should unify this with the solaris case above. BASIC_CHECK_TOOLS(STRIP, strip) BASIC_FIXUP_EXECUTABLE(STRIP) - BASIC_CHECK_TOOLS(NM, nm) + if test "x$TOOLCHAIN_TYPE" = xgcc; then + BASIC_CHECK_TOOLS(NM, nm gcc-nm) + else + BASIC_CHECK_TOOLS(NM, nm) + fi BASIC_FIXUP_EXECUTABLE(NM) GNM="$NM" AC_SUBST(GNM) @@ -717,6 +723,13 @@ BASIC_FIXUP_EXECUTABLE(BUILD_CC) BASIC_REQUIRE_PROGS(BUILD_CXX, [cl CC g++]) BASIC_FIXUP_EXECUTABLE(BUILD_CXX) + BASIC_PATH_PROGS(BUILD_NM, nm gcc-nm) + BASIC_FIXUP_EXECUTABLE(BUILD_NM) + BASIC_PATH_PROGS(BUILD_AR, ar gcc-ar) + BASIC_FIXUP_EXECUTABLE(BUILD_AR) + # Assume the C compiler is the assembler + BUILD_AS="$BUILD_CC -c" + # Just like for the target compiler, use the compiler as linker BUILD_LD="$BUILD_CC" PATH="$OLDPATH" @@ -726,15 +739,21 @@ BUILD_CC="$CC" BUILD_CXX="$CXX" BUILD_LD="$LD" + BUILD_NM="$NM" + BUILD_AS="$AS" BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" + BUILD_AR="$AR" fi AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CXX) AC_SUBST(BUILD_LD) + AC_SUBST(BUILD_NM) + AC_SUBST(BUILD_AS) AC_SUBST(BUILD_SYSROOT_CFLAGS) AC_SUBST(BUILD_SYSROOT_LDFLAGS) + AC_SUBST(BUILD_AR) ]) # Setup legacy variables that are still needed as alternative ways to refer to
--- a/common/src/fixpath.c Mon Dec 07 14:20:20 2015 -0800 +++ b/common/src/fixpath.c Wed Jul 05 21:05:52 2017 +0200 @@ -358,10 +358,13 @@ char *line; char *current; int i, cmd; - DWORD exitCode; + DWORD exitCode = 0; + DWORD processFlags = 0; + BOOL processInheritHandles = TRUE; + BOOL waitForChild = TRUE; if (argc<2 || argv[1][0] != '-' || (argv[1][1] != 'c' && argv[1][1] != 'm')) { - fprintf(stderr, "Usage: fixpath -c|m<path@path@...> /cygdrive/c/WINDOWS/notepad.exe [/cygdrive/c/x/test.txt|@/cygdrive/c/x/atfile]\n"); + fprintf(stderr, "Usage: fixpath -c|m<path@path@...> [--detach] /cygdrive/c/WINDOWS/notepad.exe [/cygdrive/c/x/test.txt|@/cygdrive/c/x/atfile]\n"); exit(0); } @@ -386,7 +389,22 @@ exit(-1); } - i = 2; + if (argv[2][0] == '-') { + if (strcmp(argv[2], "--detach") == 0) { + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath in detached mode\n"); + } + processFlags |= DETACHED_PROCESS; + processInheritHandles = FALSE; + waitForChild = FALSE; + } else { + fprintf(stderr, "fixpath Unknown argument: %s\n", argv[2]); + exit(-1); + } + i = 3; + } else { + i = 2; + } // handle assignments while (i < argc) { @@ -428,6 +446,10 @@ while (i < argc) { char const *replaced = replace_cygdrive(argv[i]); if (replaced[0] == '@') { + if (waitForChild == FALSE) { + fprintf(stderr, "fixpath Cannot use @-files in detached mode: %s\n", replaced); + exit(1); + } // Found at-file! Fix it! replaced = fix_at_file(replaced); } @@ -480,8 +502,8 @@ line, 0, 0, - TRUE, - 0, + processInheritHandles, + processFlags, NULL, NULL, &si, @@ -492,24 +514,30 @@ exit(126); } - WaitForSingleObject(pi.hProcess, INFINITE); - GetExitCodeProcess(pi.hProcess, &exitCode); + if (waitForChild == TRUE) { + WaitForSingleObject(pi.hProcess, INFINITE); + GetExitCodeProcess(pi.hProcess, &exitCode); - if (getenv("DEBUG_FIXPATH") != NULL) { - for (i=0; i<num_files_to_delete; ++i) { - fprintf(stderr, "fixpath Not deleting temporary file %s\n", - files_to_delete[i]); + if (getenv("DEBUG_FIXPATH") != NULL) { + for (i=0; i<num_files_to_delete; ++i) { + fprintf(stderr, "fixpath Not deleting temporary file %s\n", + files_to_delete[i]); + } + } else { + for (i=0; i<num_files_to_delete; ++i) { + remove(files_to_delete[i]); + } + } + + if (exitCode != 0) { + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath exit code %d\n", + exitCode); + } } } else { - for (i=0; i<num_files_to_delete; ++i) { - remove(files_to_delete[i]); - } - } - - if (exitCode != 0) { if (getenv("DEBUG_FIXPATH") != NULL) { - fprintf(stderr, "fixpath exit code %d\n", - exitCode); + fprintf(stderr, "fixpath Not waiting for child process"); } }
--- a/hotspot/.hgtags Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/.hgtags Wed Jul 05 21:05:52 2017 +0200 @@ -497,3 +497,4 @@ 53cb98d68a1aeb08d29c89d6da748de60c448e37 jdk9-b92 d8b24776484cc4dfd19f50b23eaa18a80a161371 jdk9-b93 a22b7c80529f5f05c847e932e017456e83c46233 jdk9-b94 +0c79cf3cdf0904fc4a630b91b32904491e1ae430 jdk-9+95
--- a/hotspot/make/Makefile Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/Makefile Wed Jul 05 21:05:52 2017 +0200 @@ -44,9 +44,7 @@ # ALT_EXPORT_PATH Directory to export hotspot build to # ALT_JDK_IMPORT_PATH Current JDK build (only for create_jdk rules) # ALT_JDK_TARGET_IMPORT_PATH Current JDK build when cross-compiling -# ALT_BUILD_WIN_SA Building SA on Windows is disabled by default. -# Set ALT_BUILD_WIN_SA=1 to enable building SA on -# Windows. +# # Version strings and numbers: # VERSION_SHORT Current JDK version (e.g. 9.0.0) # JDK_PREVIOUS_VERSION Previous (bootdir) JDK version (e.g. 1.5.0) (Only needed
--- a/hotspot/make/aix/Makefile Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/aix/Makefile Wed Jul 05 21:05:52 2017 +0200 @@ -46,15 +46,6 @@ # # make REMOTE="rsh -l me myotherlinuxbox" -# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding. -# JDI binding on SA produces two binaries: -# 1. sa-jdi.jar - This is built before building libjvm.so -# Please refer to ./makefiles/sa.make -# 2. libsa.so - Native library for SA - This is built after -# libjsig.so (signal interposition library) -# Please refer to ./makefiles/vm.make -# If $(GAMMADIR)/agent dir is not present, SA components are not built. - # No tests on Aix. TEST_IN_BUILD=false
--- a/hotspot/make/aix/makefiles/buildtree.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/aix/makefiles/buildtree.make Wed Jul 05 21:05:52 2017 +0200 @@ -49,7 +49,6 @@ # adlc.make - # trace.make - generate tracing event and type definitions # jvmti.make - generate JVMTI bindings from the spec (JSR-163) -# sa.make - generate SA jar file and natives # # The makefiles are split this way so that "make foo" will run faster by not # having to read the dependency files for the vm. @@ -124,7 +123,7 @@ # For dependencies and recursive makes. BUILDTREE_MAKE = $(GAMMADIR)/make/$(OS_FAMILY)/makefiles/buildtree.make -BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make sa.make +BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OS_FAMILY) \ SRCARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) VARIANT=$(VARIANT) @@ -207,7 +206,6 @@ echo "TARGET = $(TARGET)"; \ echo "HOTSPOT_VERSION_STRING = $(HOTSPOT_VERSION_STRING)"; \ echo "VERSION_STRING = $(VERSION_STRING)"; \ - echo "SA_BUILD_VERSION = $(HOTSPOT_VERSION_STRING)"; \ echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \ echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \ echo "OPENJDK = $(OPENJDK)"; \ @@ -346,16 +344,6 @@ echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ ) > $@ -sa.make: $(BUILDTREE_MAKE) - @echo $(LOG_INFO) Creating $@ ... - $(QUIETLY) ( \ - $(BUILDTREE_COMMENT); \ - echo; \ - echo include flags.make; \ - echo; \ - echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ - ) > $@ - FORCE: .PHONY: all FORCE
--- a/hotspot/make/aix/makefiles/defs.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/aix/makefiles/defs.make Wed Jul 05 21:05:52 2017 +0200 @@ -202,11 +202,3 @@ # endif # endif endif - -# Serviceability Binaries -# No SA Support for PPC or zero -ADD_SA_BINARIES/ppc = -ADD_SA_BINARIES/ppc64 = -ADD_SA_BINARIES/zero = - -EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
--- a/hotspot/make/aix/makefiles/rules.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/aix/makefiles/rules.make Wed Jul 05 21:05:52 2017 +0200 @@ -103,8 +103,6 @@ else # take from the PATH, if ALT_BOOTDIR, BOOTDIR and JAVA_HOME are not defined -# note that this is to support hotspot build without SA. To build -# SA along with hotspot, you need to define ALT_BOOTDIR, BOOTDIR or JAVA_HOME RUN.JAVA = java RUN.JAVAP = javap
--- a/hotspot/make/aix/makefiles/sa.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -# -# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. -# Copyright 2012, 2013 SAP AG. 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. -# -# - -# This makefile (sa.make) is included from the sa.make in the -# build directories. - -# This makefile is used to build Serviceability Agent java code -# and generate JNI header file for native methods. - -include $(GAMMADIR)/make/aix/makefiles/rules.make - -include $(GAMMADIR)/make/defs.make - -AGENT_DIR = $(GAMMADIR)/agent - -include $(GAMMADIR)/make/sa.files - -TOPDIR = $(shell echo `pwd`) -GENERATED = $(TOPDIR)/../generated - -# tools.jar is needed by the JDI - SA binding -SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar - -# TODO: if it's a modules image, check if SA module is installed. -MODULELIB_PATH= $(BOOT_JAVA_HOME)/lib/modules - -AGENT_FILES_LIST := $(GENERATED)/agent.classes.list - -SA_CLASSDIR = $(GENERATED)/saclasses - -SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)" - -SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties - -# if $(AGENT_DIR) does not exist, we don't build SA -# also, we don't build SA on Itanium, PowerPC, ARM or zero. - -all: - if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" \ - -a "$(SRCARCH)" != "arm" \ - -a "$(SRCARCH)" != "ppc" \ - -a "$(SRCARCH)" != "zero" ] ; then \ - $(MAKE) -f sa.make $(GENERATED)/sa-jdi.jar; \ - fi - -$(GENERATED)/sa-jdi.jar: $(AGENT_FILES) - $(QUIETLY) echo $(LOG_INFO) "Making $@" - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -f $(SA_CLASSPATH) -a ! -d $(MODULELIB_PATH) ] ; then \ - echo "Missing $(SA_CLASSPATH) file. Use 1.6.0 or later version of JDK";\ - echo ""; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -d $(SA_CLASSDIR) ] ; then \ - mkdir -p $(SA_CLASSDIR); \ - fi -# Note: When indented, make tries to execute the '$(shell' comment. -# In some environments, cmd processors have limited line length. -# To prevent the javac invocation in the next block from using -# a very long cmd line, we use javac's @file-list option. We -# generate the file lists using make's built-in 'foreach' control -# flow which also avoids cmd processor line length issues. Since -# the 'foreach' is done as part of make's macro expansion phase, -# the initialization of the lists is also done in the same phase -# using '$(shell rm ...' instead of using the more traditional -# 'rm ...' rule. - $(shell rm -rf $(AGENT_FILES_LIST)) -# gnumake 3.78.1 does not accept the *'s that -# are in AGENT_FILES, so use the shell to expand them. -# Be extra carefull to not produce too long command lines in the shell! - $(foreach file,$(AGENT_FILES),$(shell ls -1 $(file) >> $(AGENT_FILES_LIST))) - $(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -h $(GENERATED) -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES_LIST) - $(QUIETLY) $(REMOTE) $(COMPILE.RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer - $(QUIETLY) echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES) - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql - $(QUIETLY) mkdir -p $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/* - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/ - $(QUIETLY) $(CP) -r $(AGENT_SRC_DIR)/images/* $(SA_CLASSDIR)/ - $(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(SA_CLASSDIR)/ . - $(QUIETLY) $(REMOTE) $(RUN.JAR) uf $@ -C $(AGENT_SRC_DIR) META-INF/services/com.sun.jdi.connect.Connector - -clean: - rm -rf $(SA_CLASSDIR) - rm -rf $(GENERATED)/sa-jdi.jar - rm -rf $(AGENT_FILES_LIST)
--- a/hotspot/make/aix/makefiles/saproc.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -# -# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. -# Copyright 2012, 2013 SAP AG. 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 $(GAMMADIR)/make/defs.make - -# Rules to build serviceability agent library, used by vm.make - -# libsaproc.so: serviceability agent - -SAPROC = saproc -LIBSAPROC = lib$(SAPROC).so - -LIBSAPROC_DEBUGINFO = lib$(SAPROC).debuginfo -LIBSAPROC_DIZ = lib$(SAPROC).diz - -AGENT_DIR = $(GAMMADIR)/agent - -SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family) - -SASRCFILES = $(SASRCDIR)/salibelf.c \ - $(SASRCDIR)/symtab.c \ - $(SASRCDIR)/libproc_impl.c \ - $(SASRCDIR)/ps_proc.c \ - $(SASRCDIR)/ps_core.c \ - $(SASRCDIR)/LinuxDebuggerLocal.c \ - -SAMAPFILE = $(SASRCDIR)/mapfile - -DEST_SAPROC = $(JDK_LIBDIR)/$(LIBSAPROC) -DEST_SAPROC_DEBUGINFO = $(JDK_LIBDIR)/$(LIBSAPROC_DEBUGINFO) -DEST_SAPROC_DIZ = $(JDK_LIBDIR)/$(LIBSAPROC_DIZ) - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - SA_DEBUG_CFLAGS = -g -endif - -# if $(AGENT_DIR) does not exist, we don't build SA -# also, we don't build SA on Itanium, PPC, ARM or zero. - -ifneq ($(wildcard $(AGENT_DIR)),) -ifneq ($(filter-out ia64 arm ppc zero,$(SRCARCH)),) - BUILDLIBSAPROC = $(LIBSAPROC) -endif -endif - - -SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) - -$(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE) - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - @echo $(LOG_INFO) Making SA debugger back-end... - $(QUIETLY) $(CC) -D$(BUILDARCH) -D_GNU_SOURCE \ - -D_FILE_OFFSET_BITS=64 \ - $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ - $(BIN_UTILS) \ - -I$(SASRCDIR) \ - -I$(GENERATED) \ - -I$(BOOT_JAVA_HOME)/include \ - -I$(BOOT_JAVA_HOME)/include/$(Platform_os_family) \ - $(SASRCFILES) \ - $(SA_LFLAGS) \ - $(SA_DEBUG_CFLAGS) \ - -o $@ \ - -lthread_db -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ - ifeq ($(STRIP_POLICY),all_strip) - $(QUIETLY) $(STRIP) $@ - else - ifeq ($(STRIP_POLICY),min_strip) - $(QUIETLY) $(STRIP) -g $@ - # implied else here is no stripping at all - endif - endif - ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(LIBSAPROC_DIZ) $(LIBSAPROC_DEBUGINFO) - $(RM) $(LIBSAPROC_DEBUGINFO) - endif -endif - -install_saproc: $(BUILDLIBSAPROC) - $(QUIETLY) if [ -e $(LIBSAPROC) ] ; then \ - echo "Copying $(LIBSAPROC) to $(DEST_SAPROC)"; \ - test -f $(LIBSAPROC_DEBUGINFO) && \ - $(CP) -f $(LIBSAPROC_DEBUGINFO) $(DEST_SAPROC_DEBUGINFO); \ - test -f $(LIBSAPROC_DIZ) && \ - $(CP) -f $(LIBSAPROC_DIZ) $(DEST_SAPROC_DIZ); \ - $(CP) -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done"; \ - fi - -.PHONY: install_saproc
--- a/hotspot/make/aix/makefiles/top.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/aix/makefiles/top.make Wed Jul 05 21:05:52 2017 +0200 @@ -28,7 +28,6 @@ # It also: # -builds and runs adlc via adlc.make # -generates JVMTI source and docs via jvmti.make (JSR-163) -# -generate sa-jdi.jar (JDI binding to core files) # It assumes the following flags are set: # CFLAGS Platform_file, Src_Dirs_I, Src_Dirs_V, SYSDEFS, AOUT, Obj_Files @@ -86,7 +85,7 @@ @echo All done. # This is an explicit dependency for the sake of parallel makes. -vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) trace_stuff jvmti_stuff sa_stuff +vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) trace_stuff jvmti_stuff @# We need a null action here, so implicit rules don't get consulted. $(Cached_plat): $(Plat_File) @@ -104,10 +103,6 @@ trace_stuff: jvmti_stuff $(Cached_plat) $(adjust-mflags) @$(MAKE) -f trace.make $(MFLAGS-adjusted) -# generate SA jar files and native header -sa_stuff: - @$(MAKE) -f sa.make $(MFLAGS-adjusted) - # and the VM: must use other makefile with dependencies included # We have to go to great lengths to get control over the -jN argument @@ -146,7 +141,7 @@ rm -fr $(GENERATED) .PHONY: default vm_build_preliminaries -.PHONY: lists ad_stuff jvmti_stuff sa_stuff the_vm clean realclean +.PHONY: lists ad_stuff jvmti_stuff the_vm clean realclean .PHONY: checks check_os_version install .NOTPARALLEL:
--- a/hotspot/make/aix/makefiles/vm.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/aix/makefiles/vm.make Wed Jul 05 21:05:52 2017 +0200 @@ -61,7 +61,7 @@ # The order is important for the precompiled headers to work. INCLUDES += $(PRECOMPILED_HEADER_DIR:%=-I%) $(Src_Dirs_I:%=-I%) -# SYMFLAG is used by {jsig,saproc}.make +# SYMFLAG is used by jsig.make ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # always build with debug info when we can create .debuginfo files SYMFLAG = -g @@ -361,13 +361,10 @@ # Signal interposition library include $(MAKEFILES_DIR)/jsig.make -# Serviceability agent -include $(MAKEFILES_DIR)/saproc.make - #---------------------------------------------------------------------- -build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) +build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) -install: install_jvm install_jsig install_saproc +install: install_jvm install_jsig .PHONY: default build install install_jvm
--- a/hotspot/make/bsd/Makefile Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/bsd/Makefile Wed Jul 05 21:05:52 2017 +0200 @@ -45,15 +45,6 @@ # # make REMOTE="rsh -l me myotherlinuxbox" -# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding. -# JDI binding on SA produces two binaries: -# 1. sa-jdi.jar - This is built before building libjvm.so -# Please refer to ./makefiles/sa.make -# 2. libsa.so - Native library for SA - This is built after -# libjsig.so (signal interposition library) -# Please refer to ./makefiles/vm.make -# If $(GAMMADIR)/agent dir is not present, SA components are not built. - ifeq ($(GAMMADIR),) include ../../make/defs.make else
--- a/hotspot/make/bsd/makefiles/buildtree.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/bsd/makefiles/buildtree.make Wed Jul 05 21:05:52 2017 +0200 @@ -48,7 +48,6 @@ # adlc.make - # trace.make - generate tracing event and type definitions # jvmti.make - generate JVMTI bindings from the spec (JSR-163) -# sa.make - generate SA jar file and natives # # The makefiles are split this way so that "make foo" will run faster by not # having to read the dependency files for the vm. @@ -129,7 +128,7 @@ BUILDTREE_MAKE = $(GAMMADIR)/make/$(OS_FAMILY)/makefiles/buildtree.make # dtrace.make is used on BSD versions that implement Dtrace (like MacOS X) -BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make sa.make dtrace.make +BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make dtrace.make BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OS_FAMILY) \ SRCARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) VARIANT=$(VARIANT) @@ -213,7 +212,6 @@ echo "TARGET = $(TARGET)"; \ echo "HOTSPOT_VERSION_STRING = $(HOTSPOT_VERSION_STRING)"; \ echo "VERSION_STRING = $(VERSION_STRING)"; \ - echo "SA_BUILD_VERSION = $(HOTSPOT_VERSION_STRING)"; \ echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \ echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \ echo "OPENJDK = $(OPENJDK)"; \ @@ -355,16 +353,6 @@ echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ ) > $@ -sa.make: $(BUILDTREE_MAKE) - @echo $(LOG_INFO) Creating $@ ... - $(QUIETLY) ( \ - $(BUILDTREE_COMMENT); \ - echo; \ - echo include flags.make; \ - echo; \ - echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ - ) > $@ - dtrace.make: $(BUILDTREE_MAKE) @echo $(LOG_INFO) Creating $@ ... $(QUIETLY) ( \
--- a/hotspot/make/bsd/makefiles/defs.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/bsd/makefiles/defs.make Wed Jul 05 21:05:52 2017 +0200 @@ -243,11 +243,11 @@ # Library suffix ifneq ($(STATIC_BUILD),true) - ifeq ($(OS_VENDOR),Darwin) - LIBRARY_SUFFIX=dylib - else - LIBRARY_SUFFIX=so - endif +ifeq ($(OS_VENDOR),Darwin) + LIBRARY_SUFFIX=dylib +else + LIBRARY_SUFFIX=so +endif else LIBRARY_SUFFIX=a endif @@ -325,47 +325,6 @@ endif endif -# Serviceability Binaries -# No SA Support for PPC, IA64, ARM or zero -ADD_SA_BINARIES/x86 = $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \ - $(EXPORT_LIB_DIR)/sa-jdi.jar - -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - ADD_SA_BINARIES/x86 += $(EXPORT_LIB_ARCH_DIR)/libsaproc.diz - else - ifeq ($(OS_VENDOR), Darwin) - ADD_SA_BINARIES/x86 += $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX).dSYM - else - ADD_SA_BINARIES/x86 += $(EXPORT_LIB_ARCH_DIR)/libsaproc.debuginfo - endif - endif -endif - -ADD_SA_BINARIES/sparc = $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \ - $(EXPORT_LIB_DIR)/sa-jdi.jar -ADD_SA_BINARIES/universal = $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \ - $(EXPORT_LIB_DIR)/sa-jdi.jar - -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - ADD_SA_BINARIES/universal += $(EXPORT_LIB_ARCH_DIR)/libsaproc.diz - else - ifeq ($(OS_VENDOR), Darwin) - ADD_SA_BINARIES/universal += $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX).dSYM - else - ADD_SA_BINARIES/universal += $(EXPORT_LIB_ARCH_DIR)/libsaproc.debuginfo - endif - endif -endif - -ADD_SA_BINARIES/ppc = -ADD_SA_BINARIES/ia64 = -ADD_SA_BINARIES/arm = -ADD_SA_BINARIES/zero = - -EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH)) - # Universal build settings ifeq ($(OS_VENDOR), Darwin) # Build universal binaries by default on Mac OS X @@ -392,9 +351,8 @@ # Binaries to 'universalize' if built ifneq ($(STATIC_BUILD),true) - UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/libjsig.$(LIBRARY_SUFFIX) + UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/libjsig.$(LIBRARY_SUFFIX) endif - UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/libsaproc.$(LIBRARY_SUFFIX) UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/server/libjvm.$(LIBRARY_SUFFIX) UNIVERSAL_LIPO_LIST += $(EXPORT_LIB_DIR)/client/libjvm.$(LIBRARY_SUFFIX) @@ -413,12 +371,10 @@ UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/server/libjvm.diz UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/client/libjvm.diz UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/libjsig.diz - UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/libsaproc.diz else UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/server/libjvm.$(LIBRARY_SUFFIX).dSYM UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/client/libjvm.$(LIBRARY_SUFFIX).dSYM UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/libjsig.$(LIBRARY_SUFFIX).dSYM - UNIVERSAL_COPY_LIST += $(EXPORT_LIB_DIR)/libsaproc.$(LIBRARY_SUFFIX).dSYM endif endif
--- a/hotspot/make/bsd/makefiles/rules.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/bsd/makefiles/rules.make Wed Jul 05 21:05:52 2017 +0200 @@ -107,8 +107,6 @@ else # take from the PATH, if ALT_BOOTDIR, BOOTDIR and JAVA_HOME are not defined -# note that this is to support hotspot build without SA. To build -# SA along with hotspot, you need to define ALT_BOOTDIR, BOOTDIR or JAVA_HOME RUN.JAVA = java RUN.JAVAP = javap
--- a/hotspot/make/bsd/makefiles/sa.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -# -# Copyright (c) 2003, 2015, 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. -# -# - -# This makefile (sa.make) is included from the sa.make in the -# build directories. - -define print_info - ifneq ($$(LOG_LEVEL), warn) - $$(shell echo >&2 "INFO: $1") - endif -endef - -# This makefile is used to build Serviceability Agent java code -# and generate JNI header file for native methods. - -include $(GAMMADIR)/make/bsd/makefiles/rules.make - -AGENT_DIR = $(GAMMADIR)/agent - -include $(GAMMADIR)/make/sa.files - --include $(HS_ALT_MAKE)/bsd/makefiles/sa.make - -TOPDIR = $(shell echo `pwd`) -GENERATED = $(TOPDIR)/../generated - -# SA-JDI depends on the standard JDI classes. -# Default SA_CLASSPATH location: -DEF_SA_CLASSPATH=$(BOOT_JAVA_HOME)/lib/tools.jar -ifeq ($(ALT_SA_CLASSPATH),) - # no alternate specified; see if default exists - SA_CLASSPATH=$(shell test -f $(DEF_SA_CLASSPATH) && echo $(DEF_SA_CLASSPATH)) - ifeq ($(SA_CLASSPATH),) - # the default doesn't exist - ifeq ($(OS_VENDOR), Darwin) - # A JDK from Apple doesn't have tools.jar; the JDI classes are - # are in the regular classes.jar file. - APPLE_JAR=$(BOOT_JAVA_HOME)/bundle/Classes/classes.jar - SA_CLASSPATH=$(shell test -f $(APPLE_JAR) && echo $(APPLE_JAR)) - endif - endif -else - $(eval $(call print_info, "ALT_SA_CLASSPATH=$(ALT_SA_CLASSPATH)")) - SA_CLASSPATH=$(shell test -f $(ALT_SA_CLASSPATH) && echo $(ALT_SA_CLASSPATH)) -endif - -ifneq ($(SA_CLASSPATH),) - SA_CLASSPATH_ARG := -classpath $(SA_CLASSPATH) -endif - -# TODO: if it's a modules image, check if SA module is installed. -MODULELIB_PATH= $(BOOT_JAVA_HOME)/lib/modules - -AGENT_FILES_LIST := $(GENERATED)/agent.classes.list - -SA_CLASSDIR = $(GENERATED)/saclasses - -SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)" - -SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties - -# if $(AGENT_DIR) does not exist, we don't build SA -# also, we don't build SA on Itanium, PowerPC, ARM or zero. - -all: - if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" \ - -a "$(SRCARCH)" != "arm" \ - -a "$(SRCARCH)" != "ppc" \ - -a "$(SRCARCH)" != "zero" ] ; then \ - $(MAKE) -f sa.make $(GENERATED)/sa-jdi.jar; \ - fi - -$(GENERATED)/sa-jdi.jar: $(AGENT_FILES) - $(QUIETLY) echo $(LOG_INFO) "Making $@" - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -f "$(SA_CLASSPATH)" -a ! -d $(MODULELIB_PATH) ] ; then \ - echo "Cannot find JDI classes. Use 1.6.0 or later version of JDK."; \ - echo ""; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -d $(SA_CLASSDIR) ] ; then \ - mkdir -p $(SA_CLASSDIR); \ - fi -# Note: When indented, make tries to execute the '$(shell' comment. -# In some environments, cmd processors have limited line length. -# To prevent the javac invocation in the next block from using -# a very long cmd line, we use javac's @file-list option. We -# generate the file lists using make's built-in 'foreach' control -# flow which also avoids cmd processor line length issues. Since -# the 'foreach' is done as part of make's macro expansion phase, -# the initialization of the lists is also done in the same phase -# using '$(shell rm ...' instead of using the more traditional -# 'rm ...' rule. - $(shell rm -rf $(AGENT_FILES_LIST)) -# gnumake 3.78.1 does not accept the *'s that -# are in AGENT_FILES, so use the shell to expand them. -# Be extra carefull to not produce too long command lines in the shell! - $(foreach file,$(AGENT_FILES),$(shell ls -1 $(file) >> $(AGENT_FILES_LIST))) - $(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -h $(GENERATED) $(SA_CLASSPATH_ARG) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES_LIST) - $(QUIETLY) $(REMOTE) $(COMPILE.RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer - $(QUIETLY) echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES) - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql - $(QUIETLY) mkdir -p $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/* - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/ - $(QUIETLY) $(CP) -r $(AGENT_SRC_DIR)/images/* $(SA_CLASSDIR)/ - $(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(SA_CLASSDIR)/ . - $(QUIETLY) $(REMOTE) $(RUN.JAR) uf $@ -C $(AGENT_SRC_DIR) META-INF/services/com.sun.jdi.connect.Connector - -clean: - rm -rf $(SA_CLASSDIR) - rm -rf $(GENERATED)/sa-jdi.jar - rm -rf $(AGENT_FILES_LIST)
--- a/hotspot/make/bsd/makefiles/top.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/bsd/makefiles/top.make Wed Jul 05 21:05:52 2017 +0200 @@ -28,7 +28,6 @@ # It also: # -builds and runs adlc via adlc.make # -generates JVMTI source and docs via jvmti.make (JSR-163) -# -generate sa-jdi.jar (JDI binding to core files) # It assumes the following flags are set: # CFLAGS Platform_file, Src_Dirs_I, Src_Dirs_V, SYSDEFS, AOUT, Obj_Files @@ -86,7 +85,7 @@ @echo All done. # This is an explicit dependency for the sake of parallel makes. -vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) jvmti_stuff trace_stuff sa_stuff dtrace_stuff +vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) jvmti_stuff trace_stuff dtrace_stuff @# We need a null action here, so implicit rules don't get consulted. $(Cached_plat): $(Plat_File) @@ -113,10 +112,6 @@ @# We need a null action here, so implicit rules don't get consulted. endif -# generate SA jar files and native header -sa_stuff: - @$(MAKE) -f sa.make $(MFLAGS-adjusted) - # and the VM: must use other makefile with dependencies included # We have to go to great lengths to get control over the -jN argument @@ -155,7 +150,7 @@ rm -fr $(GENERATED) .PHONY: default vm_build_preliminaries -.PHONY: lists ad_stuff jvmti_stuff sa_stuff the_vm clean realclean +.PHONY: lists ad_stuff jvmti_stuff the_vm clean realclean .PHONY: checks check_os_version install .NOTPARALLEL:
--- a/hotspot/make/bsd/makefiles/vm.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/bsd/makefiles/vm.make Wed Jul 05 21:05:52 2017 +0200 @@ -60,7 +60,7 @@ # The order is important for the precompiled headers to work. INCLUDES += $(PRECOMPILED_HEADER_DIR:%=-I%) $(Src_Dirs_I:%=-I%) -# SYMFLAG is used by {jsig,saproc}.make +# SYMFLAG is used by jsig.make ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # always build with debug info when we can create .dSYM/.debuginfo files SYMFLAG = -g @@ -301,9 +301,9 @@ ifeq ($(OS_VENDOR), Darwin) ifneq ($(STATIC_BUILD),true) - LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/. - LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.. - LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F) + LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/. + LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.. + LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F) endif else LFLAGS_VM += -Wl,-z,defs @@ -423,19 +423,16 @@ # Signal interposition library include $(MAKEFILES_DIR)/jsig.make -# Serviceability agent -include $(MAKEFILES_DIR)/saproc.make - #---------------------------------------------------------------------- ifeq ($(OS_VENDOR), Darwin) # no libjvm_db for macosx -build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(EXPORTED_SYMBOLS) +build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) dtraceCheck $(EXPORTED_SYMBOLS) echo "Doing vm.make build:" else -build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) $(EXPORTED_SYMBOLS) +build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(EXPORTED_SYMBOLS) endif -install: install_jvm install_jsig install_saproc +install: install_jvm install_jsigs .PHONY: default build install install_jvm
--- a/hotspot/make/excludeSrc.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/excludeSrc.make Wed Jul 05 21:05:52 2017 +0200 @@ -73,8 +73,9 @@ CXXFLAGS += -DINCLUDE_CDS=0 CFLAGS += -DINCLUDE_CDS=0 - Src_Files_EXCLUDE += filemap.cpp metaspaceShared*.cpp sharedPathsMiscInfo.cpp \ - systemDictionaryShared.cpp classLoaderExt.cpp sharedClassUtil.cpp + Src_Files_EXCLUDE += classListParser.cpp classLoaderExt.cpp \ + filemap.cpp metaspaceShared*.cpp sharedClassUtil.cpp sharedPathsMiscInfo.cpp \ + systemDictionaryShared.cpp endif ifeq ($(INCLUDE_ALL_GCS), false)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/make/gensrc/Gensrc-jdk.hotspot.agent.gmk Wed Jul 05 21:05:52 2017 +0200 @@ -0,0 +1,47 @@ +# +# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +default: all + +include $(SPEC) +include MakeBase.gmk + +################################################################################ + +SA_PROPERTIES := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent/sa.properties + +SA_BUILD_VERSION_PROP_NAME := "sun.jvm.hotspot.runtime.VM.saBuildVersion" + +$(SA_PROPERTIES): $(call DependOnVariable, VERSION_STRING) + $(MKDIR) -p $(@D) + $(ECHO) "$(SA_BUILD_VERSION_PROP_NAME)=$(VERSION_STRING)" > $@ + +TARGETS += $(SA_PROPERTIES) + +################################################################################ + +all: $(TARGETS) + +.PHONY: all default
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Wed Jul 05 21:05:52 2017 +0200 @@ -0,0 +1,130 @@ +# +# Copyright (c) 2015, 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. +# + +include NativeCompilation.gmk + +$(eval $(call IncludeCustomExtension, hotspot, lib/Lib-jdk.hotspot.agent.gmk)) + +################################################################################ + +SA_TOPDIR := $(HOTSPOT_TOPDIR)/agent + +# SA has a slightly different OS naming scheme +ifeq ($(OPENJDK_TARGET_OS), windows) + SA_TARGET_OS := win32 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + SA_TARGET_OS := bsd +else + SA_TARGET_OS := $(OPENJDK_TARGET_OS) +endif + +# Defaults for most platforms +SA_TOOLCHAIN := TOOLCHAIN_DEFAULT +SA_NAME := saproc +SA_SRC += $(SA_TOPDIR)/src/share/native $(SA_TOPDIR)/src/os/$(SA_TARGET_OS) +SA_MAPFILE := $(SA_TOPDIR)/src/os/$(OPENJDK_TARGET_OS)/mapfile +SA_INCLUDES := \ + $(addprefix -I, $(SA_SRC)) \ + -I$(SUPPORT_OUTPUTDIR)/headers/jdk.hotspot.agent \ + -I$(HOTSPOT_TOPDIR)/src/os/$(OPENJDK_TARGET_OS) \ + # + +ifeq ($(OPENJDK_TARGET_CPU), x86_64) + SA_MACHINE_FLAG_windows := -machine:AMD64 +else ifeq ($(OPENJDK_TARGET_CPU), x86) + SA_MACHINE_FLAG_linux := -march=i586 + SA_MACHINE_FLAG_windows := -machine:I386 +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) + SA_CFLAGS := $(CFLAGS_JDKLIB) -D_FILE_OFFSET_BITS=64 \ + $(SA_MACHINE_FLAG_linux) + SA_LDFLAGS := $(LDFLAGS_JDKLIB) $(SA_MACHINE_FLAG_linux) + SA_LIBS := -lthread_db $(LIBDL) + +else ifeq ($(OPENJDK_TARGET_OS), solaris) + SA_TOOLCHAIN := TOOLCHAIN_LINK_CXX + SA_MAPFILE := $(SA_TOPDIR)/src/os/solaris/proc/mapfile + COMMON_CFLAGS := -I$(SA_TOPDIR)/src/os/$(OPENJDK_TARGET_OS)/proc \ + -DSOLARIS_11_B159_OR_LATER + SA_CFLAGS := $(CFLAGS_JDKLIB) $(COMMON_CFLAGS) + SA_CXXFLAGS := $(CXXFLAGS_JDKLIB) $(COMMON_CFLAGS) + SA_LDFLAGS := $(subst -z defs,, $(LDFLAGS_JDKLIB)) \ + -mt $(LDFLAGS_CXX_JDK) + SA_LIBS := -ldl -ldemangle -lthread -lc + +else ifeq ($(OPENJDK_TARGET_OS), macosx) + SA_EXCLUDE_FILES := BsdDebuggerLocal.c ps_proc.c salibelf.c StubDebuggerLocal.c + SA_CFLAGS := $(CFLAGS_JDKLIB) \ + -Damd64 -D_GNU_SOURCE -mno-omit-leaf-frame-pointer \ + -mstack-alignment=16 -fPIC + SA_LDFLAGS := $(LDFLAGS_JDKLIB) + SA_LIBS := -framework Foundation -framework JavaNativeFoundation \ + -framework Security -framework CoreFoundation + +else ifeq ($(OPENJDK_TARGET_OS), windows) + SA_NAME := sawindbg + COMMON_CFLAGS := -D_WINDOWS -D_DEBUG -D_CONSOLE -D_MBCS -EHsc -FD + SA_CFLAGS := $(subst -DWIN32_LEAN_AND_MEAN,, $(CFLAGS_JDKLIB)) \ + $(COMMON_CFLAGS) + SA_CXXFLAGS := $(subst -DWIN32_LEAN_AND_MEAN,, $(CXXFLAGS_JDKLIB)) \ + $(COMMON_CFLAGS) + SA_LDFLAGS := $(LDFLAGS_JDKLIB) \ + $(SA_MACHINE_FLAG_windows) -manifest \ + -subsystem:console -map + SA_LIBS := dbgeng.lib + ifeq ($(OPENJDK_TARGET_CPU), x86_64) + SA_CXXFLAGS += -DWIN64 + else + SA_CXXFLAGS += -RTC1 -ZI + SA_LDFLAGS += -SAFESEH + endif +endif + +################################################################################ + +$(eval $(call SetupNativeCompilation, BUILD_LIBSA, \ + TOOLCHAIN := $(SA_TOOLCHAIN), \ + OPTIMIZATION := NONE, \ + DISABLED_WARNINGS_microsoft := 4267, \ + DISABLED_WARNINGS_gcc := sign-compare, \ + DISABLED_WARNINGS_CXX_solstudio := truncwarn unknownpragma, \ + LIBRARY := $(SA_NAME), \ + OUTPUT_DIR := $(call FindLibDirForModule, $(MODULE)), \ + SRC := $(SA_SRC), \ + EXCLUDE_FILES := test.c saproc_audit.cpp $(SA_EXCLUDE_FILES), \ + CFLAGS := $(SA_INCLUDES) $(SA_CFLAGS) $(SA_CUSTOM_CFLAGS), \ + CXXFLAGS := $(SA_INCLUDES) $(SA_CXXFLAGS) $(SA_CUSTOM_CXXFLAGS), \ + LDFLAGS := $(SA_LDFLAGS) $(SA_CUSTOM_LDFLAGS), \ + LIBS := $(SA_LIBS), \ + MAPFILE := $(SA_MAPFILE), \ + OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libsa, \ + DEBUG_SYMBOLS := true, \ + STRIP_SYMBOLS := true, \ +)) + +TARGETS += $(BUILD_LIBSA) + +################################################################################
--- a/hotspot/make/linux/Makefile Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/Makefile Wed Jul 05 21:05:52 2017 +0200 @@ -45,15 +45,6 @@ # # make REMOTE="rsh -l me myotherlinuxbox" -# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding. -# JDI binding on SA produces two binaries: -# 1. sa-jdi.jar - This is built before building libjvm.so -# Please refer to ./makefiles/sa.make -# 2. libsa.so - Native library for SA - This is built after -# libjsig.so (signal interposition library) -# Please refer to ./makefiles/vm.make -# If $(GAMMADIR)/agent dir is not present, SA components are not built. - ifeq ($(GAMMADIR),) include ../../make/defs.make else
--- a/hotspot/make/linux/makefiles/buildtree.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/makefiles/buildtree.make Wed Jul 05 21:05:52 2017 +0200 @@ -48,7 +48,6 @@ # adlc.make - # trace.make - generate tracing event and type definitions # jvmti.make - generate JVMTI bindings from the spec (JSR-163) -# sa.make - generate SA jar file and natives # # The makefiles are split this way so that "make foo" will run faster by not # having to read the dependency files for the vm. @@ -126,7 +125,7 @@ # For dependencies and recursive makes. BUILDTREE_MAKE = $(GAMMADIR)/make/$(OS_FAMILY)/makefiles/buildtree.make -BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make sa.make dtrace.make +BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make dtrace.make BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OS_FAMILY) \ SRCARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) VARIANT=$(VARIANT) @@ -214,7 +213,6 @@ echo "TARGET = $(TARGET)"; \ echo "HOTSPOT_VERSION_STRING = $(HOTSPOT_VERSION_STRING)"; \ echo "VERSION_STRING = $(VERSION_STRING)"; \ - echo "SA_BUILD_VERSION = $(HOTSPOT_VERSION_STRING)"; \ echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \ echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \ echo "OPENJDK = $(OPENJDK)"; \ @@ -353,16 +351,6 @@ echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ ) > $@ -sa.make: $(BUILDTREE_MAKE) - @echo $(LOG_INFO) Creating $@ ... - $(QUIETLY) ( \ - $(BUILDTREE_COMMENT); \ - echo; \ - echo include flags.make; \ - echo; \ - echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ - ) > $@ - dtrace.make: $(BUILDTREE_MAKE) @echo $(LOG_INFO) Creating $@ ... $(QUIETLY) ( \
--- a/hotspot/make/linux/makefiles/defs.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/makefiles/defs.make Wed Jul 05 21:05:52 2017 +0200 @@ -276,24 +276,4 @@ endif endif -# Serviceability Binaries - -ADD_SA_BINARIES/DEFAULT = $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \ - $(EXPORT_LIB_DIR)/sa-jdi.jar - -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - ADD_SA_BINARIES/DEFAULT += $(EXPORT_LIB_ARCH_DIR)/libsaproc.diz - else - ADD_SA_BINARIES/DEFAULT += $(EXPORT_LIB_ARCH_DIR)/libsaproc.debuginfo - endif -endif - -ADD_SA_BINARIES/$(HS_ARCH) = $(ADD_SA_BINARIES/DEFAULT) - -# No SA Support for zero -ADD_SA_BINARIES/zero = - -include $(HS_ALT_MAKE)/linux/makefiles/defs.make - -EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
--- a/hotspot/make/linux/makefiles/rules.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/makefiles/rules.make Wed Jul 05 21:05:52 2017 +0200 @@ -103,8 +103,6 @@ else # take from the PATH, if ALT_BOOTDIR, BOOTDIR and JAVA_HOME are not defined -# note that this is to support hotspot build without SA. To build -# SA along with hotspot, you need to define ALT_BOOTDIR, BOOTDIR or JAVA_HOME RUN.JAVA = java RUN.JAVAP = javap
--- a/hotspot/make/linux/makefiles/sa.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -# -# Copyright (c) 2003, 2015, 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. -# -# - -# This makefile (sa.make) is included from the sa.make in the -# build directories. - -# This makefile is used to build Serviceability Agent java code -# and generate JNI header file for native methods. - -include $(GAMMADIR)/make/linux/makefiles/rules.make - -include $(GAMMADIR)/make/defs.make -include $(GAMMADIR)/make/altsrc.make - -AGENT_DIR = $(GAMMADIR)/agent - -include $(GAMMADIR)/make/sa.files - --include $(HS_ALT_MAKE)/linux/makefiles/sa.make - - -TOPDIR = $(shell echo `pwd`) -GENERATED = $(TOPDIR)/../generated - -# tools.jar is needed by the JDI - SA binding -SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar - -# TODO: if it's a modules image, check if SA module is installed. -MODULELIB_PATH= $(BOOT_JAVA_HOME)/lib/modules - -AGENT_FILES_LIST := $(GENERATED)/agent.classes.list - -SA_CLASSDIR = $(GENERATED)/saclasses - -SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)" - -SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties - -# if $(AGENT_DIR) does not exist, we don't build SA -# also, we don't build SA on Itanium or zero. - -all: - if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" \ - -a "$(SRCARCH)" != "zero" ] ; then \ - $(MAKE) -f sa.make $(GENERATED)/sa-jdi.jar; \ - fi - -$(GENERATED)/sa-jdi.jar:: $(AGENT_FILES) - $(QUIETLY) echo $(LOG_INFO) "Making $@" - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -f $(SA_CLASSPATH) -a ! -d $(MODULELIB_PATH) ] ; then \ - echo "Missing $(SA_CLASSPATH) file. Use 1.6.0 or later version of JDK";\ - echo ""; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -d $(SA_CLASSDIR) ] ; then \ - mkdir -p $(SA_CLASSDIR); \ - fi -# Note: When indented, make tries to execute the '$(shell' comment. -# In some environments, cmd processors have limited line length. -# To prevent the javac invocation in the next block from using -# a very long cmd line, we use javac's @file-list option. We -# generate the file lists using make's built-in 'foreach' control -# flow which also avoids cmd processor line length issues. Since -# the 'foreach' is done as part of make's macro expansion phase, -# the initialization of the lists is also done in the same phase -# using '$(shell rm ...' instead of using the more traditional -# 'rm ...' rule. - $(shell rm -rf $(AGENT_FILES_LIST)) -# gnumake 3.78.1 does not accept the *'s that -# are in AGENT_FILES, so use the shell to expand them. -# Be extra carefull to not produce too long command lines in the shell! - $(foreach file,$(AGENT_FILES),$(shell ls -1 $(file) >> $(AGENT_FILES_LIST))) - $(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -h $(GENERATED) -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES_LIST) - $(QUIETLY) $(REMOTE) $(COMPILE.RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer - $(QUIETLY) echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES) - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql - $(QUIETLY) mkdir -p $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/* - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/ - $(QUIETLY) $(CP) -r $(AGENT_SRC_DIR)/images/* $(SA_CLASSDIR)/ - $(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(SA_CLASSDIR)/ . - $(QUIETLY) $(REMOTE) $(RUN.JAR) uf $@ -C $(AGENT_SRC_DIR) META-INF/services/com.sun.jdi.connect.Connector - -clean: - rm -rf $(SA_CLASSDIR) - rm -rf $(GENERATED)/sa-jdi.jar - rm -rf $(AGENT_FILES_LIST) - --include $(HS_ALT_MAKE)/linux/makefiles/sa-rules.make
--- a/hotspot/make/linux/makefiles/saproc.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -# -# Copyright (c) 2005, 2015, 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 $(GAMMADIR)/make/defs.make -include $(GAMMADIR)/make/altsrc.make - -# Rules to build serviceability agent library, used by vm.make - -# libsaproc.so: serviceability agent - -SAPROC = saproc -LIBSAPROC = lib$(SAPROC).so - -LIBSAPROC_DEBUGINFO = lib$(SAPROC).debuginfo -LIBSAPROC_DIZ = lib$(SAPROC).diz - -AGENT_DIR = $(GAMMADIR)/agent - -SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family) - -SASRCFILES = $(SASRCDIR)/salibelf.c \ - $(SASRCDIR)/symtab.c \ - $(SASRCDIR)/libproc_impl.c \ - $(SASRCDIR)/ps_proc.c \ - $(SASRCDIR)/ps_core.c \ - $(SASRCDIR)/LinuxDebuggerLocal.c \ - $(AGENT_DIR)/src/share/native/sadis.c - --include $(HS_ALT_MAKE)/linux/makefiles/saproc.make - -SAMAPFILE = $(SASRCDIR)/mapfile - -DEST_SAPROC = $(JDK_LIBDIR)/$(LIBSAPROC) -DEST_SAPROC_DEBUGINFO = $(JDK_LIBDIR)/$(LIBSAPROC_DEBUGINFO) -DEST_SAPROC_DIZ = $(JDK_LIBDIR)/$(LIBSAPROC_DIZ) - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - SA_DEBUG_CFLAGS = -g -endif - -# if $(AGENT_DIR) does not exist, we don't build SA -# also, we don't build SA on Itanium or zero. - -ifneq ($(wildcard $(AGENT_DIR)),) -ifneq ($(filter-out ia64 zero,$(SRCARCH)),) - BUILDLIBSAPROC = $(LIBSAPROC) -endif -endif - -ifneq ($(ALT_SASRCDIR),) -ALT_SAINCDIR=-I$(ALT_SASRCDIR) -DALT_SASRCDIR -else -ALT_SAINCDIR= -endif -SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) - -SAARCH ?= $(BUILDARCH) - -$(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE) - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - @echo $(LOG_INFO) Making SA debugger back-end... - $(QUIETLY) $(CC) -D$(SAARCH) -D_GNU_SOURCE \ - -D_FILE_OFFSET_BITS=64 \ - $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ - -I$(SASRCDIR) \ - -I$(GENERATED) \ - -I$(BOOT_JAVA_HOME)/include \ - -I$(BOOT_JAVA_HOME)/include/$(Platform_os_family) \ - $(ALT_SAINCDIR) \ - $(SASRCFILES) \ - $(SA_LFLAGS) \ - $(SA_DEBUG_CFLAGS) \ - $(EXTRA_CFLAGS) \ - -o $@ \ - -lthread_db -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ - ifeq ($(STRIP_POLICY),all_strip) - $(QUIETLY) $(STRIP) $@ - else - ifeq ($(STRIP_POLICY),min_strip) - $(QUIETLY) $(STRIP) -g $@ - # implied else here is no stripping at all - endif - endif - ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(LIBSAPROC_DIZ) $(LIBSAPROC_DEBUGINFO) - $(RM) $(LIBSAPROC_DEBUGINFO) - endif -endif - -install_saproc: $(BUILDLIBSAPROC) - $(QUIETLY) if [ -e $(LIBSAPROC) ] ; then \ - echo "Copying $(LIBSAPROC) to $(DEST_SAPROC)"; \ - test ! -f $(LIBSAPROC_DEBUGINFO) || \ - $(CP) -f $(LIBSAPROC_DEBUGINFO) $(DEST_SAPROC_DEBUGINFO); \ - test ! -f $(LIBSAPROC_DIZ) || \ - $(CP) -f $(LIBSAPROC_DIZ) $(DEST_SAPROC_DIZ); \ - $(CP) -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done"; \ - fi - -.PHONY: install_saproc
--- a/hotspot/make/linux/makefiles/top.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/makefiles/top.make Wed Jul 05 21:05:52 2017 +0200 @@ -28,7 +28,6 @@ # It also: # -builds and runs adlc via adlc.make # -generates JVMTI source and docs via jvmti.make (JSR-163) -# -generate sa-jdi.jar (JDI binding to core files) # It assumes the following flags are set: # CFLAGS Platform_file, Src_Dirs_I, Src_Dirs_V, SYSDEFS, AOUT, Obj_Files @@ -86,7 +85,7 @@ @echo All done. # This is an explicit dependency for the sake of parallel makes. -vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) trace_stuff jvmti_stuff sa_stuff dtrace_stuff +vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) trace_stuff jvmti_stuff dtrace_stuff @# We need a null action here, so implicit rules don't get consulted. $(Cached_plat): $(Plat_File) @@ -104,10 +103,6 @@ trace_stuff: jvmti_stuff $(Cached_plat) $(adjust-mflags) @$(MAKE) -f trace.make $(MFLAGS-adjusted) -# generate SA jar files and native header -sa_stuff: - @$(MAKE) -f sa.make $(MFLAGS-adjusted) - dtrace_stuff: $(Cached_plat) $(adjust-mflags) @$(MAKE) -f dtrace.make dtrace_gen_headers $(MFLAGS-adjusted) GENERATED=$(GENERATED) @@ -149,7 +144,7 @@ rm -fr $(GENERATED) .PHONY: default vm_build_preliminaries -.PHONY: lists ad_stuff jvmti_stuff sa_stuff the_vm clean realclean +.PHONY: lists ad_stuff jvmti_stuff the_vm clean realclean .PHONY: checks check_os_version install .NOTPARALLEL:
--- a/hotspot/make/linux/makefiles/vm.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/makefiles/vm.make Wed Jul 05 21:05:52 2017 +0200 @@ -62,7 +62,7 @@ # The order is important for the precompiled headers to work. INCLUDES += $(PRECOMPILED_HEADER_DIR:%=-I%) $(Src_Dirs_I:%=-I%) -# SYMFLAG is used by {jsig,saproc}.make +# SYMFLAG is used by jsig.make ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # always build with debug info when we can create .debuginfo files SYMFLAG = -g @@ -398,13 +398,10 @@ # Signal interposition library include $(MAKEFILES_DIR)/jsig.make -# Serviceability agent -include $(MAKEFILES_DIR)/saproc.make - #---------------------------------------------------------------------- -build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) dtraceCheck +build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) dtraceCheck -install: install_jvm install_jsig install_saproc +install: install_jvm install_jsig .PHONY: default build install install_jvm $(HS_ALT_MAKE)/$(Platform_os_family)/makefiles/$(BUILDARCH).make $(HS_ALT_MAKE)/$(Platform_os_family)/makefiles/vm.make
--- a/hotspot/make/linux/makefiles/zeroshark.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/linux/makefiles/zeroshark.make Wed Jul 05 21:05:52 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. # Copyright 2007, 2008 Red Hat, Inc. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # @@ -25,8 +25,16 @@ # Setup common to Zero (non-Shark) and Shark versions of VM -# override this from the main file because some version of llvm do not like -Wundef -WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wunused-function -Wunused-value +# Some versions of llvm do not like -Wundef +ifeq ($(USE_CLANG), true) + WARNING_FLAGS += -Wno-undef +endif +# Suppress some warning flags that are normally turned on for hotspot, +# because some of the zero code has not been updated accordingly. +WARNING_FLAGS += -Wno-return-type \ + -Wno-format-nonliteral -Wno-format-security \ + -Wno-maybe-uninitialized + # The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) @@ -42,5 +50,3 @@ ifeq ($(ARCH_DATA_MODEL), 64) CFLAGS += -D_LP64=1 endif - -OPT_CFLAGS/compactingPermGenGen.o = -O1
--- a/hotspot/make/sa.files Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -# -# Copyright (c) 2003, 2015, 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. -# -# - -# This filelist macro is included in platform specific sa.make -# included all packages/*.java. package list can be generated by -# $(GAMMADIR)/agent/make/build-pkglist. - -# define AGENT_DIR before including this file in sa.make - -AGENT_SRC_DIR = $(AGENT_DIR)/src/share/classes - -# Splitted the set of files into two sets because on linux plaform -# listing or compiling all the files results in 'Argument list too long' error. - -AGENT_FILES = \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/asm/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/asm/sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/c1/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ci/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/classfile/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/code/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/compiler/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/aarch64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/dummy/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/ia64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/ia64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/ppc64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/aarch64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/posix/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/posix/elf/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/ppc64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/proc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/proc/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/proc/ppc64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/proc/aarch64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/proc/sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/proc/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/remote/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/remote/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/remote/ppc64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/remote/sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/remote/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/remote/aarch64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/win32/coff/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/ia64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/cms/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/g1/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/parallel/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/serial/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/shared/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/interpreter/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/jdi/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/memory/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/oops/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/opto/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/prims/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/aarch64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/bsd/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/bsd_amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/bsd_x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux_amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux_aarch64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux_x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux_sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux_ppc64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/posix/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/solaris_amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/solaris_sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/solaris_x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/sparc/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/win32_amd64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/win32_x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/ppc64/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/tools/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/tools/jcore/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/tools/soql/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/types/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/types/basic/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/memo/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/action/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/classbrowser/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/table/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/tree/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/treetable/*.java \ -$(AGENT_SRC_DIR)/com/sun/java/swing/action/*.java \ -$(AGENT_SRC_DIR)/com/sun/java/swing/ui/*.java
--- a/hotspot/make/share/makefiles/mapfile-vers Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/share/makefiles/mapfile-vers Wed Jul 05 21:05:52 2017 +0200 @@ -7,6 +7,7 @@ JVM_ActiveProcessorCount; JVM_ArrayCopy; JVM_AssertionStatusDirectives; + JVM_CallStackWalk; JVM_ClassDepth; JVM_ClassLoaderDepth; JVM_Clone; @@ -31,12 +32,12 @@ JVM_CurrentTimeMillis; JVM_DefineClass; JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; JVM_DesiredAssertionStatus; JVM_DoPrivileged; JVM_DumpAllStacks; JVM_DumpThreads; JVM_FillInStackTrace; + JVM_FillStackFrames; JVM_FindClassFromCaller; JVM_FindClassFromClass; JVM_FindClassFromBootLoader; @@ -134,6 +135,7 @@ JVM_MonitorNotify; JVM_MonitorNotifyAll; JVM_MonitorWait; + JVM_MoreStackWalk; JVM_NanoTime; JVM_NativePath; JVM_NewArray; @@ -151,6 +153,7 @@ JVM_SetClassSigners; JVM_SetNativeThreadName; JVM_SetPrimitiveArrayElement; + JVM_SetMethodInfo; JVM_SetThreadPriority; JVM_Sleep; JVM_StartThread;
--- a/hotspot/make/solaris/Makefile Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/solaris/Makefile Wed Jul 05 21:05:52 2017 +0200 @@ -36,15 +36,6 @@ # or BOOTDIR has to be set. We do *not* search javac, javah, rmic etc. # from the PATH. -# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding. -# JDI binding on SA produces two binaries: -# 1. sa-jdi.jar - This is built before building libjvm.so -# Please refer to ./makefiles/sa.make -# 2. libsaproc.so - Native library for SA - This is built after -# libjsig.so (signal interposition library) -# Please refer to ./makefiles/vm.make -# If $(GAMMADIR)/agent dir is not present, SA components are not built. - ifeq ($(GAMMADIR),) include ../../make/defs.make else
--- a/hotspot/make/solaris/makefiles/buildtree.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/solaris/makefiles/buildtree.make Wed Jul 05 21:05:52 2017 +0200 @@ -48,7 +48,6 @@ # adlc.make - # trace.make - generate tracing event and type definitions # jvmti.make - generate JVMTI bindings from the spec (JSR-163) -# sa.make - generate SA jar file and natives # # The makefiles are split this way so that "make foo" will run faster by not # having to read the dependency files for the vm. @@ -116,7 +115,7 @@ # For dependencies and recursive makes. BUILDTREE_MAKE = $(GAMMADIR)/make/$(OS_FAMILY)/makefiles/buildtree.make -BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make sa.make dtrace.make +BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make trace.make dtrace.make BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OS_FAMILY) \ ARCH=$(ARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) VARIANT=$(VARIANT) @@ -200,7 +199,6 @@ echo "TARGET = $(TARGET)"; \ echo "HOTSPOT_VERSION_STRING = $(HOTSPOT_VERSION_STRING)"; \ echo "VERSION_STRING = $(VERSION_STRING)"; \ - echo "SA_BUILD_VERSION = $(HOTSPOT_VERSION_STRING)"; \ echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \ echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \ echo "OPENJDK = $(OPENJDK)"; \ @@ -339,16 +337,6 @@ echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ ) > $@ -sa.make: $(BUILDTREE_MAKE) - @echo $(LOG_INFO) Creating $@ ... - $(QUIETLY) ( \ - $(BUILDTREE_COMMENT); \ - echo; \ - echo include flags.make; \ - echo; \ - echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \ - ) > $@ - dtrace.make: $(BUILDTREE_MAKE) @echo $(LOG_INFO) Creating $@ ... $(QUIETLY) ( \
--- a/hotspot/make/solaris/makefiles/defs.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/solaris/makefiles/defs.make Wed Jul 05 21:05:52 2017 +0200 @@ -277,13 +277,3 @@ endif endif endif - -EXPORT_LIST += $(EXPORT_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - EXPORT_LIST += $(EXPORT_LIB_ARCH_DIR)/libsaproc.diz - else - EXPORT_LIST += $(EXPORT_LIB_ARCH_DIR)/libsaproc.debuginfo - endif -endif -EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
--- a/hotspot/make/solaris/makefiles/rules.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/solaris/makefiles/rules.make Wed Jul 05 21:05:52 2017 +0200 @@ -95,8 +95,6 @@ else # take from the PATH, if ALT_BOOTDIR, BOOTDIR and JAVA_HOME are not defined -# note that this is to support hotspot build without SA. To build -# SA along with hotspot, you need to define ALT_BOOTDIR, BOOTDIR or JAVA_HOME RUN.JAVA = java RUN.JAVAP = javap
--- a/hotspot/make/solaris/makefiles/sa.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -# -# Copyright (c) 2003, 2015, 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. -# -# - -# This makefile (sa.make) is included from the sa.make in the -# build directories. - -# This makefile is used to build Serviceability Agent java code -# and generate JNI header file for native methods. - -include $(GAMMADIR)/make/solaris/makefiles/rules.make -include $(GAMMADIR)/make/defs.make -AGENT_DIR = $(GAMMADIR)/agent -include $(GAMMADIR)/make/sa.files - --include $(HS_ALT_MAKE)/solaris/makefiles/sa.make - -GENERATED = ../generated - -# tools.jar is needed by the JDI - SA binding -SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar - -# TODO: if it's a modules image, check if SA module is installed. -MODULELIB_PATH= $(BOOT_JAVA_HOME)/lib/modules - -AGENT_FILES_LIST := $(GENERATED)/agent.classes.list - -SA_CLASSDIR = $(GENERATED)/saclasses - -SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)" - -SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties - -# if $(AGENT_DIR) does not exist, we don't build SA. -all: - $(QUIETLY) if [ -d $(AGENT_DIR) ] ; then \ - $(MAKE) -f sa.make $(GENERATED)/sa-jdi.jar; \ - fi - -$(GENERATED)/sa-jdi.jar: $(AGENT_FILES) - $(QUIETLY) echo $(LOG_INFO) "Making $@"; - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -f $(SA_CLASSPATH) -a ! -d $(MODULELIB_PATH) ] ; then \ - echo "Missing $(SA_CLASSPATH) file. Use 1.6.0 or later version of JDK";\ - echo ""; \ - exit 1; \ - fi - $(QUIETLY) if [ ! -d $(SA_CLASSDIR) ] ; then \ - mkdir -p $(SA_CLASSDIR); \ - fi -# Note: When indented, make tries to execute the '$(shell' comment. -# In some environments, cmd processors have limited line length. -# To prevent the javac invocation in the next block from using -# a very long cmd line, we use javac's @file-list option. We -# generate the file lists using make's built-in 'foreach' control -# flow which also avoids cmd processor line length issues. Since -# the 'foreach' is done as part of make's macro expansion phase, -# the initialization of the lists is also done in the same phase -# using '$(shell rm ...' instead of using the more traditional -# 'rm ...' rule. - $(shell rm -rf $(AGENT_FILES_LIST)) -# gnumake 3.78.1 does not accept the *'s that -# are in AGENT_FILES, so use the shell to expand them. -# Be extra carefull to not produce too long command lines in the shell! - $(foreach file,$(AGENT_FILES),$(shell ls -1 $(file) >> $(AGENT_FILES_LIST))) - $(QUIETLY) $(COMPILE.JAVAC) -h $(GENERATED) -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES_LIST) - $(QUIETLY) $(COMPILE.RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer - $(QUIETLY) echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES) - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql - $(QUIETLY) mkdir -p $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/* - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources/ - $(QUIETLY) $(CP) -r $(AGENT_SRC_DIR)/images/* $(SA_CLASSDIR)/ - $(QUIETLY) $(RUN.JAR) cf $@ -C $(SA_CLASSDIR)/ . - $(QUIETLY) $(RUN.JAR) uf $@ -C $(AGENT_SRC_DIR) META-INF/services/com.sun.jdi.connect.Connector - -clean: - rm -rf $(SA_CLASSDIR) - rm -rf $(GENERATED)/sa-jdi.jar - rm -rf $(AGENT_FILES_LIST)
--- a/hotspot/make/solaris/makefiles/saproc.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -# -# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# - -# Rules to build serviceability agent library, used by vm.make - -# libsaproc.so: serviceability agent - -SAPROC = saproc -SADIS = sadis -LIBSAPROC = lib$(SAPROC).so -SADISOBJ = $(SADIS).o - -LIBSAPROC_DEBUGINFO = lib$(SAPROC).debuginfo -LIBSAPROC_DIZ = lib$(SAPROC).diz - -AGENT_DIR = $(GAMMADIR)/agent - -SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family)/proc - -SASRCFILES = $(SASRCDIR)/saproc.cpp - -SADISSRCFILES = $(AGENT_DIR)/src/share/native/sadis.c - -SAMAPFILE = $(SASRCDIR)/mapfile - -DEST_SAPROC = $(JDK_LIBDIR)/$(LIBSAPROC) -DEST_SAPROC_DEBUGINFO = $(JDK_LIBDIR)/$(LIBSAPROC_DEBUGINFO) -DEST_SAPROC_DIZ = $(JDK_LIBDIR)/$(LIBSAPROC_DIZ) - -# if $(AGENT_DIR) does not exist, we don't build SA - -ifneq ($(wildcard $(AGENT_DIR)),) - BUILDLIBSAPROC = $(LIBSAPROC) -endif - -SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) - -ifdef USE_GCC -SA_LFLAGS += -D_REENTRANT -else -SA_LFLAGS += -mt -xnolib -norunpath -endif - -# The libproc Pstack_iter() interface changed in Nevada-B159. -# Use 'uname -r -v' to determine the Solaris version as per -# Solaris Nevada team request. This logic needs to match: -# agent/src/os/solaris/proc/saproc.cpp: set_has_newer_Pstack_iter(): -# - skip SunOS 4 or older -# - skip Solaris 10 or older -# - skip two digit internal Nevada builds -# - skip three digit internal Nevada builds thru 149 -# - skip internal Nevada builds 150-158 -# - if not skipped, print define for Nevada-B159 or later -SOLARIS_11_B159_OR_LATER := \ -$(shell uname -r -v \ - | sed -n \ - -e '/^[0-4]\. /b' \ - -e '/^5\.[0-9] /b' \ - -e '/^5\.10 /b' \ - -e '/ snv_[0-9][0-9]$$/b' \ - -e '/ snv_[01][0-4][0-9]$$/b' \ - -e '/ snv_15[0-8]$$/b' \ - -e 's/.*/-DSOLARIS_11_B159_OR_LATER/' \ - -e 'p' \ - ) - -# Uncomment the following to simulate building on Nevada-B159 or later -# when actually building on Nevada-B158 or earlier: -#SOLARIS_11_B159_OR_LATER=-DSOLARIS_11_B159_OR_LATER - -$(SADISOBJ): $(SADISSRCFILES) - $(QUIETLY) $(CC) \ - $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ - -I$(SASRCDIR) \ - -I$(GENERATED) \ - -I$(BOOT_JAVA_HOME)/include \ - -I$(BOOT_JAVA_HOME)/include/$(Platform_os_family) \ - $(SOLARIS_11_B159_OR_LATER) \ - $(EXTRA_CFLAGS) \ - $(SADISSRCFILES) \ - -c -o $(SADISOBJ) - -$(LIBSAPROC): $(SASRCFILES) $(SADISOBJ) $(SAMAPFILE) - $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ - echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ - exit 1; \ - fi - @echo $(LOG_INFO) Making SA debugger back-end... - $(QUIETLY) $(CXX) \ - $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ - -I$(SASRCDIR) \ - -I$(GENERATED) \ - -I$(BOOT_JAVA_HOME)/include \ - -I$(BOOT_JAVA_HOME)/include/$(Platform_os_family) \ - $(SOLARIS_11_B159_OR_LATER) \ - $(EXTRA_CXXFLAGS) $(EXTRA_LDFLAGS) \ - $(SADISOBJ) \ - $(SASRCFILES) \ - $(SA_LFLAGS) \ - -o $@ \ - -ldl -ldemangle -lthread -lc - -ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ - ifeq ($(STRIP_POLICY),all_strip) - $(QUIETLY) $(STRIP) $@ - else - ifeq ($(STRIP_POLICY),min_strip) - $(QUIETLY) $(STRIP) -x $@ - # implied else here is no stripping at all - endif - endif - ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(LIBSAPROC_DIZ) $(LIBSAPROC_DEBUGINFO) - $(RM) $(LIBSAPROC_DEBUGINFO) - endif -endif - -install_saproc: $(BULDLIBSAPROC) - $(QUIETLY) if [ -f $(LIBSAPROC) ] ; then \ - echo "Copying $(LIBSAPROC) to $(DEST_SAPROC)"; \ - test ! -f $(LIBSAPROC_DEBUGINFO) || \ - $(CP) -f $(LIBSAPROC_DEBUGINFO) $(DEST_SAPROC_DEBUGINFO); \ - test ! -f $(LIBSAPROC_DIZ) || \ - $(CP) -f $(LIBSAPROC_DIZ) $(DEST_SAPROC_DIZ); \ - $(CP) -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done"; \ - fi - -.PHONY: install_saproc
--- a/hotspot/make/solaris/makefiles/top.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/solaris/makefiles/top.make Wed Jul 05 21:05:52 2017 +0200 @@ -28,7 +28,6 @@ # It also: # -builds and runs adlc via adlc.make # -generates JVMTI source and docs via jvmti.make (JSR-163) -# -generate sa-jdi.jar (JDI binding to core files) # It assumes the following flags are set: # CFLAGS Platform_file, Src_Dirs_I, Src_Dirs_V, SYSDEFS, AOUT, Jvm_Obj_Files @@ -79,7 +78,7 @@ @echo All done. # This is an explicit dependency for the sake of parallel makes. -vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) jvmti_stuff trace_stuff sa_stuff dtrace_stuff +vm_build_preliminaries: checks $(Cached_plat) $(AD_Files_If_Required) jvmti_stuff trace_stuff dtrace_stuff @# We need a null action here, so implicit rules don't get consulted. $(Cached_plat): $(Plat_File) @@ -97,10 +96,6 @@ trace_stuff: jvmti_stuff $(Cached_plat) $(adjust-mflags) @$(MAKE) -f trace.make $(MFLAGS-adjusted) -# generate SA jar files and native header -sa_stuff: - @$(MAKE) -f sa.make $(MFLAGS-adjusted) - dtrace_stuff: $(Cached_plat) $(adjust-mflags) @$(MAKE) -f dtrace.make dtrace_gen_headers $(MFLAGS-adjusted) GENERATED=$(GENERATED) @@ -140,7 +135,7 @@ rm -fr $(GENERATED) .PHONY: default vm_build_preliminaries -.PHONY: lists ad_stuff jvmti_stuff trace_stuff sa_stuff the_vm clean realclean +.PHONY: lists ad_stuff jvmti_stuff trace_stuff the_vm clean realclean .PHONY: checks check_os_version install .NOTPARALLEL:
--- a/hotspot/make/solaris/makefiles/vm.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/solaris/makefiles/vm.make Wed Jul 05 21:05:52 2017 +0200 @@ -55,7 +55,7 @@ Src_Dirs_I += $(GENERATED) INCLUDES += $(Src_Dirs_I:%=-I%) -# SYMFLAG is used by {dtrace,jsig,saproc}.make. +# SYMFLAG is used by {dtrace,jsig}.make. ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # always build with debug info when we can create .debuginfo files # and disable 'lazy debug info' so the .so has everything. @@ -343,13 +343,10 @@ # Signal interposition library include $(MAKEFILES_DIR)/jsig.make -# Serviceability agent -include $(MAKEFILES_DIR)/saproc.make - #---------------------------------------------------------------------- -build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(LIBJVM_DTRACE) $(BUILDLIBSAPROC) dtraceCheck +build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(LIBJVM_DTRACE) dtraceCheck -install: install_jvm install_jsig install_saproc +install: install_jvm install_jsig .PHONY: default build install install_jvm
--- a/hotspot/make/test/JtregNative.gmk Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/test/JtregNative.gmk Wed Jul 05 21:05:52 2017 +0200 @@ -48,6 +48,17 @@ $(HOTSPOT_TOPDIR)/test/runtime/SameObject \ # +# Add conditional directories here when needed. +ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc) +BUILD_HOTSPOT_JTREG_NATIVE_SRC += \ + $(HOTSPOT_TOPDIR)/test/runtime/libadimalloc.solaris.sparc \ + $(HOTSPOT_TOPDIR)/test/runtime/ThreadSignalMask +endif + +ifeq ($(TOOLCHAIN_TYPE), solstudio) + BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_liboverflow := -lc +endif + BUILD_HOTSPOT_JTREG_OUTPUT_DIR := $(BUILD_OUTPUT)/support/test/hotspot/jtreg/native BUILD_HOTSPOT_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/hotspot/jtreg
--- a/hotspot/make/windows/build.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/build.make Wed Jul 05 21:05:52 2017 +0200 @@ -30,14 +30,6 @@ # Note: Running nmake or build.bat from the Windows command shell requires # that "sh" be accessible on the PATH. An MKS install does this. -# SA components are built if BUILD_WIN_SA=1 is specified. -# See notes in README. This produces files: -# 1. sa-jdi.jar - This is built before building jvm.dll -# 2. sawindbg.dll - Native library for SA - This is built after jvm.dll -# - Also, .lib, .map, .pdb. -# -# Please refer to ./makefiles/sa.make - # If we haven't set an ARCH yet use x86 # create.bat and build.bat will set it, if used. !ifndef ARCH @@ -169,30 +161,6 @@ !endif !endif -# We don't support SA on ia64, and we can't -# build it if we are using a version of Vis Studio -# older than .Net 2003. -# SA_INCLUDE and SA_LIB are hold-overs from a previous -# implementation in which we could build SA using -# Debugging Tools For Windows, in which the .h/.lib files -# and the .dlls are in different places than -# they are for Vis Studio .Net 2003. -# If that code ever needs to be resurrected, these vars -# can be set here. They are used in makefiles/sa.make. - -checkSA:: - -!if "$(BUILD_WIN_SA)" != "1" -checkSA:: - @echo Not building SA: BUILD_WIN_SA != 1 - -!elseif "$(ARCH)" == "ia64" -BUILD_WIN_SA = 0 -checkSA:: - @echo Not building SA: ARCH = ia64 - -!endif # ! "$(BUILD_WIN_SA)" != "1" - ######################################################################### defaultTarget: product @@ -249,10 +217,6 @@ @ echo HS_COPYRIGHT=$(HOTSPOT_VM_COPYRIGHT) >> $@ @ echo HS_NAME=$(PRODUCT_NAME) $(VERSION_SHORT) >> $@ @ echo HOTSPOT_VERSION_STRING=$(HOTSPOT_VERSION_STRING) >> $@ - @ echo BUILD_WIN_SA=$(BUILD_WIN_SA) >> $@ - @ echo SA_BUILD_VERSION=$(HOTSPOT_VERSION_STRING) >> $@ - @ echo SA_INCLUDE=$(SA_INCLUDE) >> $@ - @ echo SA_LIB=$(SA_LIB) >> $@ @ echo JDK_VER=$(JDK_VER) >> $@ @ echo JDK_DOTVER=$(JDK_DOTVER) >> $@ @ echo VERSION_STRING=$(VERSION_STRING) >> $@ @@ -271,7 +235,7 @@ @ if "$(MV)" NEQ "" echo MV=$(MV) >> $@ @ if "$(ZIPEXE)" NEQ "" echo ZIPEXE=$(ZIPEXE) >> $@ -checks: checkVariant checkWorkSpace checkSA +checks: checkVariant checkWorkSpace checkVariant: @ if "$(Variant)"=="" echo Need to specify "Variant=[tiered|compiler2|compiler1|core]" && false
--- a/hotspot/make/windows/build_vm_def.sh Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/build_vm_def.sh Wed Jul 05 21:05:52 2017 +0200 @@ -54,20 +54,6 @@ DUMPBIN="link.exe /dump" export VS_UNICODE_OUTPUT= -if [ "$1" = "-nosa" ]; then - echo EXPORTS > vm.def - echo "" - echo "***" - echo "*** Not building SA: BUILD_WIN_SA != 1" - echo "*** C++ Vtables NOT included in vm.def" - echo "*** This jvm.dll will NOT work properly with SA." - echo "***" - echo "*** When in doubt, set BUILD_WIN_SA=1, clean and rebuild." - echo "***" - echo "" - exit -fi - echo "EXPORTS" > vm1.def # When called from IDE the first param should contain the link version, otherwise may be nill
--- a/hotspot/make/windows/makefiles/debug.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/debug.make Wed Jul 05 21:05:52 2017 +0200 @@ -25,7 +25,6 @@ HS_INTERNAL_NAME=jvm HS_FNAME=$(HS_INTERNAL_NAME).dll AOUT=$(HS_FNAME) -SAWINDBG=sawindbg.dll GENERATED=../generated # Allow the user to turn off precompiled headers from the command line. @@ -33,7 +32,7 @@ BUILD_PCH_FILE=_build_pch_file.obj !endif -default:: $(BUILD_PCH_FILE) $(AOUT) checkAndBuildSA +default:: $(BUILD_PCH_FILE) $(AOUT) !include ../local.make !include compile.make @@ -67,4 +66,3 @@ !endif !include $(WorkSpace)/make/windows/makefiles/shared.make -!include $(WorkSpace)/make/windows/makefiles/sa.make
--- a/hotspot/make/windows/makefiles/defs.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/defs.make Wed Jul 05 21:05:52 2017 +0200 @@ -231,21 +231,6 @@ ABS_OS_MAKEFILE := $(subst /,\\,$(shell $(CD) $(HS_MAKE_DIR)/$(OSNAME);$(PWD))/build.make) endif -# Disable building SA on windows until we are sure -# we want to release it. If we build it here, -# the SDK makefiles will copy it over and put it into -# the created image. -BUILD_WIN_SA = 1 -ifneq ($(ALT_BUILD_WIN_SA),) - BUILD_WIN_SA = $(ALT_BUILD_WIN_SA) -endif - -ifeq ($(BUILD_WIN_SA), 1) - ifeq ($(ARCH),ia64) - BUILD_WIN_SA = 0 - endif -endif - EXPORT_SERVER_DIR = $(EXPORT_BIN_DIR)/server EXPORT_CLIENT_DIR = $(EXPORT_BIN_DIR)/client @@ -276,21 +261,6 @@ EXPORT_LIST += $(EXPORT_LIB_DIR)/jvm.lib -ifeq ($(BUILD_WIN_SA), 1) - EXPORT_LIST += $(EXPORT_BIN_DIR)/sawindbg.$(LIBRARY_SUFFIX) - ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - EXPORT_LIST += $(EXPORT_BIN_DIR)/sawindbg.diz - else - EXPORT_LIST += $(EXPORT_BIN_DIR)/sawindbg.pdb - EXPORT_LIST += $(EXPORT_BIN_DIR)/sawindbg.map - endif - endif - EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar - # Must pass this down to nmake. - MAKE_ARGS += BUILD_WIN_SA=1 -endif - # Propagate compiler and tools paths from configure to nmake. # Need to make sure they contain \\ and not /. ifneq ($(SPEC),)
--- a/hotspot/make/windows/makefiles/fastdebug.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/fastdebug.make Wed Jul 05 21:05:52 2017 +0200 @@ -25,7 +25,6 @@ HS_INTERNAL_NAME=jvm HS_FNAME=$(HS_INTERNAL_NAME).dll AOUT=$(HS_FNAME) -SAWINDBG=sawindbg.dll GENERATED=../generated # Allow the user to turn off precompiled headers from the command line. @@ -33,7 +32,7 @@ BUILD_PCH_FILE=_build_pch_file.obj !endif -default:: $(BUILD_PCH_FILE) $(AOUT) checkAndBuildSA +default:: $(BUILD_PCH_FILE) $(AOUT) !include ../local.make !include compile.make @@ -66,4 +65,3 @@ !endif !include $(WorkSpace)/make/windows/makefiles/shared.make -!include $(WorkSpace)/make/windows/makefiles/sa.make
--- a/hotspot/make/windows/makefiles/generated.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/generated.make Wed Jul 05 21:05:52 2017 +0200 @@ -19,7 +19,7 @@ # 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 ../local.make @@ -34,9 +34,6 @@ TraceOutDir=tracefiles !include $(WorkSpace)/make/windows/makefiles/trace.make -# Pick up rules for building SA -!include $(WorkSpace)/make/windows/makefiles/sa.make - AdlcOutDir=adfiles !if ("$(Variant)" == "compiler2") || ("$(Variant)" == "tiered")
--- a/hotspot/make/windows/makefiles/product.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/product.make Wed Jul 05 21:05:52 2017 +0200 @@ -32,7 +32,7 @@ BUILD_PCH_FILE=_build_pch_file.obj !endif -default:: $(BUILD_PCH_FILE) $(AOUT) checkAndBuildSA +default:: $(BUILD_PCH_FILE) $(AOUT) !include ../local.make !include compile.make @@ -69,4 +69,3 @@ !endif !include $(WorkSpace)/make/windows/makefiles/shared.make -!include $(WorkSpace)/make/windows/makefiles/sa.make
--- a/hotspot/make/windows/makefiles/projectcreator.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/projectcreator.make Wed Jul 05 21:05:52 2017 +0200 @@ -90,10 +90,6 @@ -disablePch getThread_windows_$(Platform_arch).cpp \ -disablePch_compiler2 opcodes.cpp -!if "$(BUILD_WIN_SA)" != "1" -BUILD_VM_DEF_FLAG=-nosa -!endif - # Common options for the IDE builds for c1, and c2 ProjectCreatorIDEOptions=\ $(ProjectCreatorIDEOptions) \ @@ -106,7 +102,7 @@ -jdkTargetRoot $(HOTSPOTJDKDIST) \ -define ALIGN_STACK_FRAMES \ -define VM_LITTLE_ENDIAN \ - -prelink "" "Generating vm.def..." "cd $(HOTSPOTBUILDSPACE)\%f\%b set HOTSPOTMKSHOME=$(HOTSPOTMKSHOME) set JAVA_HOME=$(HOTSPOTJDKDIST) $(HOTSPOTMKSHOME)\sh $(HOTSPOTWORKSPACE)\make\windows\build_vm_def.sh $(BUILD_VM_DEF_FLAG) $(LD_VER)" \ + -prelink "" "Generating vm.def..." "cd $(HOTSPOTBUILDSPACE)\%f\%b set HOTSPOTMKSHOME=$(HOTSPOTMKSHOME) set JAVA_HOME=$(HOTSPOTJDKDIST) $(HOTSPOTMKSHOME)\sh $(HOTSPOTWORKSPACE)\make\windows\build_vm_def.sh $(LD_VER)" \ -ignoreFile jsig.c \ -ignoreFile jvmtiEnvRecommended.cpp \ -ignoreFile jvmtiEnvStub.cpp \
--- a/hotspot/make/windows/makefiles/sa.make Mon Dec 07 14:20:20 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -# -# Copyright (c) 2003, 2015, 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. -# -# - -# This makefile is used to build Serviceability Agent code -# and generate JNI header file for native methods. - -AGENT_DIR = $(WorkSpace)/agent -checkAndBuildSA:: - -!if "$(BUILD_WIN_SA)" != "1" -# Already warned about this in build.make -!else - -# This first part is used to build sa-jdi.jar -!include $(WorkSpace)/make/windows/makefiles/rules.make -!include $(WorkSpace)/make/sa.files - -GENERATED = ../generated - -HS_COMMON_SRC_REL = src - -!if "$(OPENJDK)" != "true" -HS_ALT_SRC_REL=src/closed -HS_ALT_SRC = $(WorkSpace)/$(HS_ALT_SRC_REL) -!ifndef HS_ALT_MAKE -HS_ALT_MAKE=$(WorkSpace)/make/closed -!endif -!endif - -HS_COMMON_SRC = $(WorkSpace)/$(HS_COMMON_SRC_REL) - -!ifdef HS_ALT_MAKE -!include $(HS_ALT_MAKE)/windows/makefiles/sa.make -!endif - -# tools.jar is needed by the JDI - SA binding -SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar - -SA_CLASSDIR = $(GENERATED)/saclasses - -SA_BUILD_VERSION_PROP = sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION) - -SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties - -default:: $(GENERATED)/sa-jdi.jar - -# Remove the space between $(SA_BUILD_VERSION_PROP) and > below as it adds a white space -# at the end of SA version string and causes a version mismatch with the target VM version. - -$(GENERATED)/sa-jdi.jar: $(AGENT_FILES) - $(QUIETLY) mkdir -p $(SA_CLASSDIR) - @echo ...Building sa-jdi.jar into $(SA_CLASSDIR) - @echo ...$(COMPILE_JAVAC) -classpath $(SA_CLASSPATH) -d $(SA_CLASSDIR) .... - @$(COMPILE_JAVAC) -h $(GENERATED) -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES) - $(COMPILE_RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer - $(QUIETLY) echo $(SA_BUILD_VERSION_PROP)> $(SA_PROPERTIES) - $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql - $(QUIETLY) rm -rf $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) mkdir $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) $(CP) $(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) $(CP) -r $(AGENT_SRC_DIR)/images/* $(SA_CLASSDIR) - $(RUN_JAR) cf $@ -C $(SA_CLASSDIR) . - $(RUN_JAR) uf $@ -C $(AGENT_SRC_DIR) META-INF/services/com.sun.jdi.connect.Connector - - - -# This second part is used to build sawindbg.dll -# We currently build it the same way for product, debug, and fastdebug. - -SAWINDBG=sawindbg.dll - -# Resource file containing VERSIONINFO -SA_Res_Files=.\version.sares - -checkAndBuildSA:: $(SAWINDBG) - -# These do not need to be optimized (don't run a lot of code) and it -# will be useful to have the assertion checks in place - -!if "$(BUILDARCH)" == "ia64" -SA_CFLAGS = -nologo $(MS_RUNTIME_OPTION) -W3 $(GX_OPTION) -Od -D "WIN32" -D "WIN64" -D "_WINDOWS" -D "_DEBUG" -D "_CONSOLE" -D "_MBCS" -FD -c -!elseif "$(BUILDARCH)" == "amd64" -SA_CFLAGS = -nologo $(MS_RUNTIME_OPTION) -W3 $(GX_OPTION) -Od -D "WIN32" -D "WIN64" -D "_WINDOWS" -D "_DEBUG" -D "_CONSOLE" -D "_MBCS" -FD -c -!else -SA_CFLAGS = -nologo $(MS_RUNTIME_OPTION) -W3 $(GX_OPTION) -Od -D "WIN32" -D "_WINDOWS" -D "_DEBUG" -D "_CONSOLE" -D "_MBCS" -FD -RTC1 -c -!if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" -SA_CFLAGS = $(SA_CFLAGS) -ZI -!endif -!endif -!if "$(MT)" != "" -SA_LD_FLAGS = -manifest $(SA_LD_FLAGS) -!endif - -SASRCFILES = $(AGENT_DIR)/src/os/win32/windbg/sawindbg.cpp \ - $(AGENT_DIR)/src/share/native/sadis.c - -SA_LFLAGS = $(SA_LD_FLAGS) -nologo -subsystem:console -machine:$(MACHINE) -!if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" -SA_LFLAGS = $(SA_LFLAGS) -map -debug -!endif -!if "$(BUILDARCH)" == "i486" -SA_LFLAGS = /SAFESEH $(SA_LFLAGS) -!endif - -SA_CFLAGS = $(SA_CFLAGS) $(MP_FLAG) - -# Note that we do not keep sawindbj.obj around as it would then -# get included in the dumpbin command in build_vm_def.sh - -# Force resources to be rebuilt every time -$(SA_Res_Files): FORCE - -# In VS2005 or VS2008 the link command creates a .manifest file that we want -# to insert into the linked artifact so we do not need to track it separately. -# Use ";#2" for .dll and ";#1" for .exe in the MT command below: -$(SAWINDBG): $(SASRCFILES) $(SA_Res_Files) - set INCLUDE=$(SA_INCLUDE)$(INCLUDE) - $(CXX) @<< - -I"$(BootStrapDir)/include" -I"$(BootStrapDir)/include/win32" - -I"$(GENERATED)" $(SA_CFLAGS) - $(SASRCFILES) - -out:$*.obj -<< - set LIB=$(SA_LIB)$(LIB) - $(LD) -out:$@ -DLL sawindbg.obj sadis.obj dbgeng.lib $(SA_LFLAGS) $(SA_Res_Files) -!if "$(MT)" != "" - $(MT) -manifest $(@F).manifest -outputresource:$(@F);#2 -!endif -!if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" -!if "$(ZIP_DEBUGINFO_FILES)" == "1" - $(ZIPEXE) -q $*.diz $*.map $*.pdb - $(RM) $*.map $*.pdb -!endif -!endif - -@rm -f $*.obj - -{$(COMMONSRC)\os\windows\vm}.rc.sares: - @$(RC) $(RC_FLAGS) /D "HS_FNAME=$(SAWINDBG)" /fo"$@" $< - -cleanall : - rm -rf $(GENERATED)/saclasses - rm -rf $(GENERATED)/sa-jdi.jar -!endif
--- a/hotspot/make/windows/makefiles/vm.make Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/make/windows/makefiles/vm.make Wed Jul 05 21:05:52 2017 +0200 @@ -410,9 +410,5 @@ @echo #include "precompiled.hpp" > ../generated/_build_pch_file.cpp $(CXX) $(CXX_FLAGS) /Fp"vm.pch" /Yc"precompiled.hpp" /c ../generated/_build_pch_file.cpp -!if "$(BUILD_WIN_SA)" != "1" -BUILD_VM_DEF_FLAG=-nosa -!endif - vm.def: $(Obj_Files) - sh $(WorkSpace)/make/windows/build_vm_def.sh $(BUILD_VM_DEF_FLAG) + sh $(WorkSpace)/make/windows/build_vm_def.sh
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad Wed Jul 05 21:05:52 2017 +0200 @@ -1079,10 +1079,10 @@ // and for a volatile write we need // // stlr<x> - // + // // Alternatively, we can implement them by pairing a normal // load/store with a memory barrier. For a volatile read we need - // + // // ldr<x> // dmb ishld // @@ -1240,7 +1240,7 @@ // Alternatively, we can elide generation of the dmb instructions // and plant the alternative CompareAndSwap macro-instruction // sequence (which uses ldaxr<x>). - // + // // Of course, the above only applies when we see these signature // configurations. We still want to plant dmb instructions in any // other cases where we may see a MemBarAcquire, MemBarRelease or @@ -1367,7 +1367,7 @@ opcode = parent->Opcode(); return opcode == Op_MemBarRelease; } - + // 2) card mark detection helper // helper predicate which can be used to detect a volatile membar @@ -1383,7 +1383,7 @@ // true // // iii) the node's Mem projection feeds a StoreCM node. - + bool is_card_mark_membar(const MemBarNode *barrier) { if (!UseG1GC && !(UseConcMarkSweepGC && UseCondCardMark)) { @@ -1402,7 +1402,7 @@ return true; } } - + return false; } @@ -1430,7 +1430,7 @@ // where // || and \\ represent Ctl and Mem feeds via Proj nodes // | \ and / indicate further routing of the Ctl and Mem feeds - // + // // this is the graph we see for non-object stores. however, for a // volatile Object store (StoreN/P) we may see other nodes below the // leading membar because of the need for a GC pre- or post-write @@ -1592,7 +1592,7 @@ // ordering but neither will a releasing store (stlr). The latter // guarantees that the object put is visible but does not guarantee // that writes by other threads have also been observed. - // + // // So, returning to the task of translating the object put and the // leading/trailing membar nodes: what do the non-normal node graph // look like for these 2 special cases? and how can we determine the @@ -1731,7 +1731,7 @@ // | | | | // C | M | M | M | // \ | | / - // . . . + // . . . // (post write subtree elided) // . . . // C \ M / @@ -1812,12 +1812,12 @@ // | | | / / // | Region . . . Phi[M] _____/ // | / | / - // | | / + // | | / // | . . . . . . | / // | / | / // Region | | Phi[M] // | | | / Bot - // \ MergeMem + // \ MergeMem // \ / // MemBarVolatile // @@ -1858,7 +1858,7 @@ // to a trailing barrier via a MergeMem. That feed is either direct // (for CMS) or via 2 or 3 Phi nodes merging the leading barrier // memory flow (for G1). - // + // // The predicates controlling generation of instructions for store // and barrier nodes employ a few simple helper functions (described // below) which identify the presence or absence of all these @@ -2112,8 +2112,8 @@ x = x->in(MemNode::Memory); } else { // the merge should get its Bottom mem feed from the leading membar - x = mm->in(Compile::AliasIdxBot); - } + x = mm->in(Compile::AliasIdxBot); + } // ensure this is a non control projection if (!x->is_Proj() || x->is_CFG()) { @@ -2190,12 +2190,12 @@ // . . . // | // MemBarVolatile (card mark) - // | | + // | | // | StoreCM // | | // | . . . - // Bot | / - // MergeMem + // Bot | / + // MergeMem // | // | // MemBarVolatile {trailing} @@ -2203,10 +2203,10 @@ // 2) // MemBarRelease/CPUOrder (leading) // | - // | + // | // |\ . . . - // | \ | - // | \ MemBarVolatile (card mark) + // | \ | + // | \ MemBarVolatile (card mark) // | \ | | // \ \ | StoreCM . . . // \ \ | @@ -2231,7 +2231,7 @@ // | \ \ | StoreCM . . . // | \ \ | // \ \ Phi - // \ \ / + // \ \ / // \ Phi // \ / // Phi . . . @@ -2506,7 +2506,7 @@ return (x->is_Load() && x->as_Load()->is_acquire()); } - + // now check for an unsafe volatile get // need to check for @@ -2644,7 +2644,7 @@ } membar = child_membar(membar); - + if (!membar || !membar->Opcode() == Op_MemBarCPUOrder) { return false; } @@ -2703,7 +2703,7 @@ // first we check if this is part of a card mark. if so then we have // to generate a StoreLoad barrier - + if (is_card_mark_membar(mbvol)) { return false; } @@ -2769,7 +2769,7 @@ if (!is_card_mark_membar(mbvol)) { return true; } - + // we found a card mark -- just make sure we have a trailing barrier return (card_mark_to_trailing(mbvol) != NULL); @@ -2808,7 +2808,7 @@ assert(barrier->Opcode() == Op_MemBarCPUOrder, "CAS not fed by cpuorder membar!"); - + MemBarNode *b = parent_membar(barrier); assert ((b != NULL && b->Opcode() == Op_MemBarRelease), "CAS not fed by cpuorder+release membar pair!"); @@ -3463,6 +3463,17 @@ return true; // Per default match rules are supported. } +const bool Matcher::match_rule_supported_vector(int opcode, int vlen) { + + // TODO + // identify extra cases that we might want to provide match rules for + // e.g. Op_ vector nodes and other intrinsics while guarding with vlen + bool ret_value = match_rule_supported(opcode); + // Add rules here. + + return ret_value; // Per default match rules are supported. +} + const int Matcher::float_pressure(int default_pressure_threshold) { return default_pressure_threshold; } @@ -4663,7 +4674,7 @@ call = __ trampoline_call(Address(addr, relocInfo::static_call_type), &cbuf); } if (call == NULL) { - ciEnv::current()->record_failure("CodeCache is full"); + ciEnv::current()->record_failure("CodeCache is full"); return; } @@ -4671,7 +4682,7 @@ // Emit stub for static call address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); if (stub == NULL) { - ciEnv::current()->record_failure("CodeCache is full"); + ciEnv::current()->record_failure("CodeCache is full"); return; } } @@ -4681,7 +4692,7 @@ MacroAssembler _masm(&cbuf); address call = __ ic_call((address)$meth$$method); if (call == NULL) { - ciEnv::current()->record_failure("CodeCache is full"); + ciEnv::current()->record_failure("CodeCache is full"); return; } %} @@ -4706,7 +4717,7 @@ if (cb) { address call = __ trampoline_call(Address(entry, relocInfo::runtime_call_type)); if (call == NULL) { - ciEnv::current()->record_failure("CodeCache is full"); + ciEnv::current()->record_failure("CodeCache is full"); return; } } else {
--- a/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -41,7 +41,9 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) { __ bind(_entry); - ce->store_parameter(_method->as_register(), 1); + Metadata *m = _method->as_constant_ptr()->as_metadata(); + __ mov_metadata(rscratch1, m); + ce->store_parameter(rscratch1, 1); ce->store_parameter(_bci, 0); __ far_call(RuntimeAddress(Runtime1::entry_for(Runtime1::counter_overflow_id))); ce->add_call_info_here(_info);
--- a/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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. * @@ -70,6 +70,7 @@ LIR_Opr LIRGenerator::divOutOpr() { Unimplemented(); return LIR_OprFact::illegalOpr; } LIR_Opr LIRGenerator::remOutOpr() { Unimplemented(); return LIR_OprFact::illegalOpr; } LIR_Opr LIRGenerator::shiftCountOpr() { Unimplemented(); return LIR_OprFact::illegalOpr; } +LIR_Opr LIRGenerator::syncLockOpr() { return new_register(T_INT); } LIR_Opr LIRGenerator::syncTempOpr() { return FrameMap::r0_opr; } LIR_Opr LIRGenerator::getThreadTemp() { return LIR_OprFact::illegalOpr; }
--- a/hotspot/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -1,6 +1,6 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2014, Red Hat Inc. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Red Hat Inc. 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 @@ -105,4 +105,7 @@ void invalidate_registers(bool inv_r0, bool inv_r19, bool inv_r2, bool inv_r3, bool inv_r4, bool inv_r5) PRODUCT_RETURN; + // This platform only uses signal-based null checks. The Label is not needed. + void null_check(Register r, Label *Lnull = NULL) { MacroAssembler::null_check(r); } + #endif // CPU_AARCH64_VM_C1_MACROASSEMBLER_AARCH64_HPP
--- a/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -1169,12 +1169,12 @@ const Register tmp = rscratch1; Address in_progress(thread, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_active())); + SATBMarkQueue::byte_offset_of_active())); Address queue_index(thread, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_index())); + SATBMarkQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_buf())); + SATBMarkQueue::byte_offset_of_buf())); Label done; Label runtime; @@ -1219,9 +1219,9 @@ const Register thread = rthread; Address queue_index(thread, in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_index())); + DirtyCardQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_buf())); + DirtyCardQueue::byte_offset_of_buf())); const Register card_addr = rscratch2; ExternalAddress cardtable((address) ct->byte_map_base);
--- a/hotspot/src/cpu/aarch64/vm/c2_globals_aarch64.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/c2_globals_aarch64.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -73,6 +73,7 @@ define_pd_global(bool, OptoScheduling, false); define_pd_global(bool, OptoBundling, false); define_pd_global(bool, OptoRegScheduling, false); +define_pd_global(bool, SuperWordLoopUnrollAnalysis, false); define_pd_global(intx, ReservedCodeCacheSize, 48*M); define_pd_global(intx, NonProfiledCodeHeapSize, 21*M);
--- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -189,10 +189,11 @@ get_cache_and_index_at_bcp(cache, index, bcp_offset, index_size); // We use a 32-bit load here since the layout of 64-bit words on // little-endian machines allow us that. - // n.b. unlike x86 cache alreeady includes the index offset - ldrw(bytecode, Address(cache, + // n.b. unlike x86 cache already includes the index offset + lea(bytecode, Address(cache, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset())); + ldarw(bytecode, bytecode); const int shift_count = (1 + byte_no) * BitsPerByte; ubfx(bytecode, bytecode, shift_count, BitsPerByte); }
--- a/hotspot/src/cpu/aarch64/vm/jvmciCodeInstaller_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/jvmciCodeInstaller_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -29,16 +29,16 @@ #include "runtime/sharedRuntime.hpp" #include "vmreg_aarch64.inline.hpp" -jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, oop method) { +jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, Handle method, TRAPS) { Unimplemented(); return 0; } -void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle& constant) { +void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle constant, TRAPS) { Unimplemented(); } -void CodeInstaller::pd_patch_MetaspaceConstant(int pc_offset, Handle& constant) { +void CodeInstaller::pd_patch_MetaspaceConstant(int pc_offset, Handle constant, TRAPS) { Unimplemented(); } @@ -46,20 +46,20 @@ Unimplemented(); } -void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination) { +void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, TRAPS) { Unimplemented(); } -void CodeInstaller::pd_relocate_JavaMethod(oop hotspot_method, jint pc_offset) { +void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) { Unimplemented(); } -void CodeInstaller::pd_relocate_poll(address pc, jint mark) { +void CodeInstaller::pd_relocate_poll(address pc, jint mark, TRAPS) { Unimplemented(); } // convert JVMCI register indices (as used in oop maps) to HotSpot registers -VMReg CodeInstaller::get_hotspot_reg(jint jvmci_reg) { +VMReg CodeInstaller::get_hotspot_reg(jint jvmci_reg, TRAPS) { return NULL; }
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -91,20 +91,18 @@ unsigned offset_lo = dest & 0xfff; offset = adr_page - pc_page; - // We handle 3 types of PC relative addressing + // We handle 4 types of PC relative addressing // 1 - adrp Rx, target_page // ldr/str Ry, [Rx, #offset_in_page] // 2 - adrp Rx, target_page // add Ry, Rx, #offset_in_page // 3 - adrp Rx, target_page (page aligned reloc, offset == 0) - // In the first 2 cases we must check that Rx is the same in the adrp and the - // subsequent ldr/str or add instruction. Otherwise we could accidentally end - // up treating a type 3 relocation as a type 1 or 2 just because it happened - // to be followed by a random unrelated ldr/str or add instruction. - // - // In the case of a type 3 relocation, we know that these are only generated - // for the safepoint polling page, or for the card type byte map base so we - // assert as much and of course that the offset is 0. + // movk Rx, #imm16<<32 + // 4 - adrp Rx, target_page (page aligned reloc, offset == 0) + // In the first 3 cases we must check that Rx is the same in the adrp and the + // subsequent ldr/str, add or movk instruction. Otherwise we could accidentally end + // up treating a type 4 relocation as a type 1, 2 or 3 just because it happened + // to be followed by a random unrelated ldr/str, add or movk instruction. // unsigned insn2 = ((unsigned*)branch)[1]; if (Instruction_aarch64::extract(insn2, 29, 24) == 0b111001 && @@ -123,13 +121,13 @@ Instruction_aarch64::patch(branch + sizeof (unsigned), 21, 10, offset_lo); instructions = 2; - } else { - assert((jbyte *)target == - ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base || - target == StubRoutines::crc_table_addr() || - (address)target == os::get_polling_page(), - "adrp must be polling page or byte map base"); - assert(offset_lo == 0, "offset must be 0 for polling page or byte map base"); + } else if (Instruction_aarch64::extract(insn2, 31, 21) == 0b11110010110 && + Instruction_aarch64::extract(insn, 4, 0) == + Instruction_aarch64::extract(insn2, 4, 0)) { + // movk #imm16<<32 + Instruction_aarch64::patch(branch + 4, 20, 5, (uint64_t)target >> 32); + offset &= (1<<20)-1; + instructions = 2; } } int offset_lo = offset & 3; @@ -212,16 +210,16 @@ // Return the target address for the following sequences // 1 - adrp Rx, target_page // ldr/str Ry, [Rx, #offset_in_page] - // 2 - adrp Rx, target_page ] + // 2 - adrp Rx, target_page // add Ry, Rx, #offset_in_page // 3 - adrp Rx, target_page (page aligned reloc, offset == 0) + // movk Rx, #imm12<<32 + // 4 - adrp Rx, target_page (page aligned reloc, offset == 0) // // In the first two cases we check that the register is the same and // return the target_page + the offset within the page. // Otherwise we assume it is a page aligned relocation and return - // the target page only. The only cases this is generated is for - // the safepoint polling page or for the card table byte map base so - // we assert as much. + // the target page only. // unsigned insn2 = ((unsigned*)insn_addr)[1]; if (Instruction_aarch64::extract(insn2, 29, 24) == 0b111001 && @@ -238,10 +236,12 @@ unsigned int byte_offset = Instruction_aarch64::extract(insn2, 21, 10); return address(target_page + byte_offset); } else { - assert((jbyte *)target_page == - ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base || - (address)target_page == os::get_polling_page(), - "adrp must be polling page or byte map base"); + if (Instruction_aarch64::extract(insn2, 31, 21) == 0b11110010110 && + Instruction_aarch64::extract(insn, 4, 0) == + Instruction_aarch64::extract(insn2, 4, 0)) { + target_page = (target_page & 0xffffffff) | + ((uint64_t)Instruction_aarch64::extract(insn2, 20, 5) << 32); + } return (address)target_page; } } else { @@ -3487,18 +3487,18 @@ assert_different_registers(obj, pre_val, tmp); Address in_progress(thread, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_active())); + SATBMarkQueue::byte_offset_of_active())); Address index(thread, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_index())); + SATBMarkQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_buf())); + SATBMarkQueue::byte_offset_of_buf())); // Is marking active? - if (in_bytes(PtrQueue::byte_width_of_active()) == 4) { + if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { ldrw(tmp, in_progress); } else { - assert(in_bytes(PtrQueue::byte_width_of_active()) == 1, "Assumption"); + assert(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, "Assumption"); ldrb(tmp, in_progress); } cbzw(tmp, done); @@ -3566,9 +3566,9 @@ assert(thread == rthread, "must be"); Address queue_index(thread, in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_index())); + DirtyCardQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_buf())); + DirtyCardQueue::byte_offset_of_buf())); BarrierSet* bs = Universe::heap()->barrier_set(); CardTableModRefBS* ct = (CardTableModRefBS*)bs; @@ -3964,22 +3964,26 @@ void MacroAssembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) { relocInfo::relocType rtype = dest.rspec().reloc()->type(); - if (uabs(pc() - dest.target()) >= (1LL << 32)) { - guarantee(rtype == relocInfo::none - || rtype == relocInfo::external_word_type - || rtype == relocInfo::poll_type - || rtype == relocInfo::poll_return_type, - "can only use a fixed address with an ADRP"); - // Out of range. This doesn't happen very often, but we have to - // handle it - mov(reg1, dest); - byte_offset = 0; + unsigned long low_page = (unsigned long)CodeCache::low_bound() >> 12; + unsigned long high_page = (unsigned long)(CodeCache::high_bound()-1) >> 12; + unsigned long dest_page = (unsigned long)dest.target() >> 12; + long offset_low = dest_page - low_page; + long offset_high = dest_page - high_page; + + InstructionMark im(this); + code_section()->relocate(inst_mark(), dest.rspec()); + // 8143067: Ensure that the adrp can reach the dest from anywhere within + // the code cache so that if it is relocated we know it will still reach + if (offset_high >= -(1<<20) && offset_low < (1<<20)) { + _adrp(reg1, dest.target()); } else { - InstructionMark im(this); - code_section()->relocate(inst_mark(), dest.rspec()); - byte_offset = (uint64_t)dest.target() & 0xfff; - _adrp(reg1, dest.target()); + unsigned long pc_page = (unsigned long)pc() >> 12; + long offset = dest_page - pc_page; + offset = (offset & ((1<<20)-1)) << 12; + _adrp(reg1, pc()+offset); + movk(reg1, ((unsigned long)dest.target() >> 32) & 0xffff, 32); } + byte_offset = (unsigned long)dest.target() & 0xfff; } void MacroAssembler::build_frame(int framesize) {
--- a/hotspot/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -2384,6 +2384,7 @@ } #endif // ASSERT __ mov(c_rarg0, rthread); + __ mov(c_rarg1, rcpool); __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info))); __ blrt(rscratch1, 1, 0, 1); __ bind(retaddr); @@ -2397,6 +2398,7 @@ // Load UnrollBlock* into rdi __ mov(r5, r0); + __ ldrw(rcpool, Address(r5, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes())); Label noException; __ cmpw(rcpool, Deoptimization::Unpack_exception); // Was exception pending? __ br(Assembler::NE, noException); @@ -2609,6 +2611,7 @@ // n.b. 2 gp args, 0 fp args, integral return type __ mov(c_rarg0, rthread); + __ movw(c_rarg2, (unsigned)Deoptimization::Unpack_uncommon_trap); __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); @@ -2628,6 +2631,16 @@ // move UnrollBlock* into r4 __ mov(r4, r0); +#ifdef ASSERT + { Label L; + __ ldrw(rscratch1, Address(r4, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes())); + __ cmpw(rscratch1, (unsigned)Deoptimization::Unpack_uncommon_trap); + __ br(Assembler::EQ, L); + __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared"); + __ bind(L); + } +#endif + // Pop all the frames we must move/replace. // // Frame picture (youngest to oldest)
--- a/hotspot/src/cpu/ppc/vm/c2_globals_ppc.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/c2_globals_ppc.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -61,6 +61,7 @@ define_pd_global(bool, UseCISCSpill, false); define_pd_global(bool, OptoBundling, false); define_pd_global(bool, OptoRegScheduling, false); +define_pd_global(bool, SuperWordLoopUnrollAnalysis, false); // GL: // Detected a problem with unscaled compressed oops and // narrow_oop_use_complex_address() == false.
--- a/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -2697,7 +2697,7 @@ // Provide a debugger breakpoint in the frame manager if breakpoints // in osr'd methods are requested. #ifdef COMPILER2 - NOT_PRODUCT( if (OptoBreakpointOSR) { __ illtrap(); } ) + if (OptoBreakpointOSR) { __ illtrap(); } #endif // Load callee's pointer to locals array from callee's state.
--- a/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/interpreter_ppc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -297,8 +297,16 @@ __ bind(do_float); __ lfs(floatSlot, 0, arg_java); #if defined(LINUX) + // Linux uses ELF ABI. Both original ELF and ELFv2 ABIs have float + // in the least significant word of an argument slot. +#if defined(VM_LITTLE_ENDIAN) + __ stfs(floatSlot, 0, arg_c); +#else __ stfs(floatSlot, 4, arg_c); +#endif #elif defined(AIX) + // Although AIX runs on big endian CPU, float is in most significant + // word of an argument slot. __ stfs(floatSlot, 0, arg_c); #else #error "unknown OS"
--- a/hotspot/src/cpu/ppc/vm/jvmciCodeInstaller_ppc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/jvmciCodeInstaller_ppc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -29,16 +29,16 @@ #include "runtime/sharedRuntime.hpp" #include "vmreg_ppc.inline.hpp" -jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, oop method) { +jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, Handle method, TRAPS) { Unimplemented(); return 0; } -void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle& constant) { +void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle constant, TRAPS) { Unimplemented(); } -void CodeInstaller::pd_patch_MetaspaceConstant(int pc_offset, Handle& constant) { +void CodeInstaller::pd_patch_MetaspaceConstant(int pc_offset, Handle constant, TRAPS) { Unimplemented(); } @@ -46,20 +46,20 @@ Unimplemented(); } -void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination) { +void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, TRAPS) { Unimplemented(); } -void CodeInstaller::pd_relocate_JavaMethod(oop hotspot_method, jint pc_offset) { +void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) { Unimplemented(); } -void CodeInstaller::pd_relocate_poll(address pc, jint mark) { +void CodeInstaller::pd_relocate_poll(address pc, jint mark, TRAPS) { Unimplemented(); } // convert JVMCI register indices (as used in oop maps) to HotSpot registers -VMReg CodeInstaller::get_hotspot_reg(jint jvmci_reg) { +VMReg CodeInstaller::get_hotspot_reg(jint jvmci_reg, TRAPS) { return NULL; }
--- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -2633,11 +2633,11 @@ Label runtime, filtered; // Is marking active? - if (in_bytes(PtrQueue::byte_width_of_active()) == 4) { - lwz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active()), R16_thread); + if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { + lwz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_active()), R16_thread); } else { - guarantee(in_bytes(PtrQueue::byte_width_of_active()) == 1, "Assumption"); - lbz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active()), R16_thread); + guarantee(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, "Assumption"); + lbz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_active()), R16_thread); } cmpdi(CCR0, Rtmp1, 0); beq(CCR0, filtered); @@ -2672,13 +2672,13 @@ // (The index field is typed as size_t.) const Register Rbuffer = Rtmp1, Rindex = Rtmp2; - ld(Rindex, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_index()), R16_thread); + ld(Rindex, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_index()), R16_thread); cmpdi(CCR0, Rindex, 0); beq(CCR0, runtime); // If index == 0, goto runtime. - ld(Rbuffer, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_buf()), R16_thread); + ld(Rbuffer, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_buf()), R16_thread); addi(Rindex, Rindex, -wordSize); // Decrement index. - std(Rindex, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_index()), R16_thread); + std(Rindex, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_index()), R16_thread); // Record the previous value. stdx(Rpre_val, Rbuffer, Rindex); @@ -2757,13 +2757,13 @@ const Register Rqueue_index = Rtmp2, Rqueue_buf = Rtmp3; - ld(Rqueue_index, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_index()), R16_thread); + ld(Rqueue_index, in_bytes(JavaThread::dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_index()), R16_thread); cmpdi(CCR0, Rqueue_index, 0); beq(CCR0, runtime); // index == 0 then jump to runtime - ld(Rqueue_buf, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_buf()), R16_thread); + ld(Rqueue_buf, in_bytes(JavaThread::dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_buf()), R16_thread); addi(Rqueue_index, Rqueue_index, -wordSize); // decrement index - std(Rqueue_index, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_index()), R16_thread); + std(Rqueue_index, in_bytes(JavaThread::dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_index()), R16_thread); stdx(Rcard_addr, Rqueue_buf, Rqueue_index); // store card b(filtered);
--- a/hotspot/src/cpu/ppc/vm/ppc.ad Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/ppc.ad Wed Jul 05 21:05:52 2017 +0200 @@ -2064,6 +2064,17 @@ return true; // Per default match rules are supported. } +const bool Matcher::match_rule_supported_vector(int opcode, int vlen) { + + // TODO + // identify extra cases that we might want to provide match rules for + // e.g. Op_ vector nodes and other intrinsics while guarding with vlen + bool ret_value = match_rule_supported(opcode); + // Add rules here. + + return ret_value; // Per default match rules are supported. +} + const int Matcher::float_pressure(int default_pressure_threshold) { return default_pressure_threshold; } @@ -3416,7 +3427,7 @@ // The stub for call to interpreter. address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); if (stub == NULL) { - ciEnv::current()->record_failure("CodeCache is full"); + ciEnv::current()->record_failure("CodeCache is full"); return; } } @@ -3465,7 +3476,7 @@ // The stub for call to interpreter. address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); if (stub == NULL) { - ciEnv::current()->record_failure("CodeCache is full"); + ciEnv::current()->record_failure("CodeCache is full"); return; } @@ -6911,7 +6922,7 @@ n_compare->_opnds[0] = op_crx; n_compare->_opnds[1] = op_src; n_compare->_opnds[2] = new immN_0Oper(TypeNarrowOop::NULL_PTR); - + decodeN_mergeDisjointNode *n2 = new decodeN_mergeDisjointNode(); n2->add_req(n_region, n_src, n1); n2->_opnds[0] = op_dst; @@ -10588,7 +10599,7 @@ instruct cmpFUnordered_reg_reg(flagsReg crx, regF src1, regF src2) %{ // Needs matchrule, see cmpDUnordered. - match(Set crx (CmpF src1 src2)); + match(Set crx (CmpF src1 src2)); // no match-rule, false predicate predicate(false); @@ -10697,13 +10708,13 @@ %} instruct cmpDUnordered_reg_reg(flagsReg crx, regD src1, regD src2) %{ - // Needs matchrule so that ideal opcode is Cmp. This causes that gcm places the - // node right before the conditional move using it. + // Needs matchrule so that ideal opcode is Cmp. This causes that gcm places the + // node right before the conditional move using it. // In jck test api/java_awt/geom/QuadCurve2DFloat/index.html#SetCurveTesttestCase7, // compilation of java.awt.geom.RectangularShape::getBounds()Ljava/awt/Rectangle // crashed in register allocation where the flags Reg between cmpDUnoredered and a // conditional move was supposed to be spilled. - match(Set crx (CmpD src1 src2)); + match(Set crx (CmpD src1 src2)); // False predicate, shall not be matched. predicate(false);
--- a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -753,6 +753,21 @@ // in farg_reg[j] if argument i is the j-th float argument of this call. // case T_FLOAT: +#if defined(LINUX) + // Linux uses ELF ABI. Both original ELF and ELFv2 ABIs have float + // in the least significant word of an argument slot. +#if defined(VM_LITTLE_ENDIAN) +#define FLOAT_WORD_OFFSET_IN_SLOT 0 +#else +#define FLOAT_WORD_OFFSET_IN_SLOT 1 +#endif +#elif defined(AIX) + // Although AIX runs on big endian CPU, float is in the most + // significant word of an argument slot. +#define FLOAT_WORD_OFFSET_IN_SLOT 0 +#else +#error "unknown OS" +#endif if (freg < Argument::n_float_register_parameters_c) { // Put float in register ... reg = farg_reg[freg]; @@ -766,14 +781,14 @@ if (arg >= Argument::n_regs_not_on_stack_c) { // ... and on the stack. guarantee(regs2 != NULL, "must pass float in register and stack slot"); - VMReg reg2 = VMRegImpl::stack2reg(stk LINUX_ONLY(+1)); + VMReg reg2 = VMRegImpl::stack2reg(stk + FLOAT_WORD_OFFSET_IN_SLOT); regs2[i].set1(reg2); stk += inc_stk_for_intfloat; } } else { // Put float on stack. - reg = VMRegImpl::stack2reg(stk LINUX_ONLY(+1)); + reg = VMRegImpl::stack2reg(stk + FLOAT_WORD_OFFSET_IN_SLOT); stk += inc_stk_for_intfloat; } regs[i].set1(reg); @@ -2802,7 +2817,7 @@ __ set_last_Java_frame(R1_SP, noreg); // With EscapeAnalysis turned on, this call may safepoint! - __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info), R16_thread); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info), R16_thread, exec_mode_reg); address calls_return_pc = __ last_calls_return_pc(); // Set an oopmap for the call site that describes all our saved registers. oop_maps->add_gc_map(calls_return_pc - start, map); @@ -2815,6 +2830,8 @@ // by save_volatile_registers(...). RegisterSaver::restore_result_registers(masm, first_frame_size_in_bytes); + // reload the exec mode from the UnrollBlock (it might have changed) + __ lwz(exec_mode_reg, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes(), unroll_block_reg); // In excp_deopt_mode, restore and clear exception oop which we // stored in the thread during exception entry above. The exception // oop will be the return value of this stub. @@ -2945,8 +2962,9 @@ __ set_last_Java_frame(/*sp*/R1_SP, /*pc*/R11_scratch1); __ mr(klass_index_reg, R3); + __ li(R5_ARG3, Deoptimization::Unpack_uncommon_trap); __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap), - R16_thread, klass_index_reg); + R16_thread, klass_index_reg, R5_ARG3); // Set an oopmap for the call site. oop_maps->add_gc_map(gc_map_pc - start, map); @@ -2966,6 +2984,12 @@ // stack: (caller_of_deoptee, ...). +#ifdef ASSERT + __ lwz(R22_tmp2, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes(), unroll_block_reg); + __ cmpdi(CCR0, R22_tmp2, (unsigned)Deoptimization::Unpack_uncommon_trap); + __ asm_assert_eq("SharedRuntime::generate_deopt_blob: expected Unpack_uncommon_trap", 0); +#endif + // Allocate new interpreter frame(s) and possibly a c2i adapter // frame. push_skeleton_frames(masm, false/*deopt*/,
--- a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -630,11 +630,11 @@ Label filtered; // Is marking active? - if (in_bytes(PtrQueue::byte_width_of_active()) == 4) { - __ lwz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active()), R16_thread); + if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { + __ lwz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_active()), R16_thread); } else { - guarantee(in_bytes(PtrQueue::byte_width_of_active()) == 1, "Assumption"); - __ lbz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active()), R16_thread); + guarantee(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, "Assumption"); + __ lbz(Rtmp1, in_bytes(JavaThread::satb_mark_queue_offset() + SATBMarkQueue::byte_offset_of_active()), R16_thread); } __ cmpdi(CCR0, Rtmp1, 0); __ beq(CCR0, filtered);
--- a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -94,8 +94,10 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) { __ bind(_entry); __ set(_bci, G4); + Metadata *m = _method->as_constant_ptr()->as_metadata(); + __ set_metadata_constant(m, G5); __ call(Runtime1::entry_for(Runtime1::counter_overflow_id), relocInfo::runtime_call_type); - __ delayed()->mov_or_nop(_method->as_register(), G5); + __ delayed()->nop(); ce->add_call_info_here(_info); ce->verify_oop_map(_info);
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -2812,7 +2812,23 @@ } void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) { - fatal("CRC32 intrinsic is not implemented on this platform"); + assert(op->crc()->is_single_cpu(), "crc must be register"); + assert(op->val()->is_single_cpu(), "byte value must be register"); + assert(op->result_opr()->is_single_cpu(), "result must be register"); + Register crc = op->crc()->as_register(); + Register val = op->val()->as_register(); + Register table = op->result_opr()->as_register(); + Register res = op->result_opr()->as_register(); + + assert_different_registers(val, crc, table); + + __ set(ExternalAddress(StubRoutines::crc_table_addr()), table); + __ not1(crc); + __ clruwu(crc); + __ update_byte_crc32(crc, val, table); + __ not1(crc); + + __ mov(crc, res); } void LIR_Assembler::emit_lock(LIR_OpLock* op) {
--- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -68,6 +68,7 @@ LIR_Opr LIRGenerator::exceptionOopOpr() { return FrameMap::Oexception_opr; } LIR_Opr LIRGenerator::exceptionPcOpr() { return FrameMap::Oissuing_pc_opr; } +LIR_Opr LIRGenerator::syncLockOpr() { return new_register(T_INT); } LIR_Opr LIRGenerator::syncTempOpr() { return new_register(T_OBJECT); } LIR_Opr LIRGenerator::getThreadTemp() { return rlock_callee_saved(NOT_LP64(T_INT) LP64_ONLY(T_LONG)); } @@ -785,7 +786,86 @@ } void LIRGenerator::do_update_CRC32(Intrinsic* x) { - fatal("CRC32 intrinsic is not implemented on this platform"); + // Make all state_for calls early since they can emit code + LIR_Opr result = rlock_result(x); + int flags = 0; + switch (x->id()) { + case vmIntrinsics::_updateCRC32: { + LIRItem crc(x->argument_at(0), this); + LIRItem val(x->argument_at(1), this); + // val is destroyed by update_crc32 + val.set_destroys_register(); + crc.load_item(); + val.load_item(); + __ update_crc32(crc.result(), val.result(), result); + break; + } + case vmIntrinsics::_updateBytesCRC32: + case vmIntrinsics::_updateByteBufferCRC32: { + + bool is_updateBytes = (x->id() == vmIntrinsics::_updateBytesCRC32); + + LIRItem crc(x->argument_at(0), this); + LIRItem buf(x->argument_at(1), this); + LIRItem off(x->argument_at(2), this); + LIRItem len(x->argument_at(3), this); + + buf.load_item(); + off.load_nonconstant(); + + LIR_Opr index = off.result(); + int offset = is_updateBytes ? arrayOopDesc::base_offset_in_bytes(T_BYTE) : 0; + if(off.result()->is_constant()) { + index = LIR_OprFact::illegalOpr; + offset += off.result()->as_jint(); + } + + LIR_Opr base_op = buf.result(); + + if (index->is_valid()) { + LIR_Opr tmp = new_register(T_LONG); + __ convert(Bytecodes::_i2l, index, tmp); + index = tmp; + if (index->is_constant()) { + offset += index->as_constant_ptr()->as_jint(); + index = LIR_OprFact::illegalOpr; + } else if (index->is_register()) { + LIR_Opr tmp2 = new_register(T_LONG); + LIR_Opr tmp3 = new_register(T_LONG); + __ move(base_op, tmp2); + __ move(index, tmp3); + __ add(tmp2, tmp3, tmp2); + base_op = tmp2; + } else { + ShouldNotReachHere(); + } + } + + LIR_Address* a = new LIR_Address(base_op, offset, T_BYTE); + + BasicTypeList signature(3); + signature.append(T_INT); + signature.append(T_ADDRESS); + signature.append(T_INT); + CallingConvention* cc = frame_map()->c_calling_convention(&signature); + const LIR_Opr result_reg = result_register_for(x->type()); + + LIR_Opr addr = new_pointer_register(); + __ leal(LIR_OprFact::address(a), addr); + + crc.load_item_force(cc->at(0)); + __ move(addr, cc->at(1)); + len.load_item_force(cc->at(2)); + + __ call_runtime_leaf(StubRoutines::updateBytesCRC32(), getThreadTemp(), result_reg, cc->args()); + __ move(result_reg, result); + + break; + } + default: { + ShouldNotReachHere(); + } + } } // _i2l, _i2f, _i2d, _l2i, _l2f, _l2d, _f2i, _f2l, _f2d, _d2i, _d2l, _d2f
--- a/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, 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 @@ -88,4 +88,7 @@ void invalidate_registers(bool iregisters, bool lregisters, bool oregisters, Register preserve1 = noreg, Register preserve2 = noreg); + // This platform only uses signal-based null checks. The Label is not needed. + void null_check(Register r, Label *Lnull = NULL) { MacroAssembler::null_check(r); } + #endif // CPU_SPARC_VM_C1_MACROASSEMBLER_SPARC_HPP
--- a/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -857,13 +857,13 @@ bool with_frame = false; // I don't know if we can do with-frame. int satb_q_index_byte_offset = in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_index()); + SATBMarkQueue::byte_offset_of_index()); int satb_q_buf_byte_offset = in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_buf()); + SATBMarkQueue::byte_offset_of_buf()); __ bind(restart); - // Load the index into the SATB buffer. PtrQueue::_index is a + // Load the index into the SATB buffer. SATBMarkQueue::_index is a // size_t so ld_ptr is appropriate __ ld_ptr(G2_thread, satb_q_index_byte_offset, tmp); @@ -961,14 +961,14 @@ int dirty_card_q_index_byte_offset = in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_index()); + DirtyCardQueue::byte_offset_of_index()); int dirty_card_q_buf_byte_offset = in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_buf()); + DirtyCardQueue::byte_offset_of_buf()); __ bind(restart); - // Get the index into the update buffer. PtrQueue::_index is + // Get the index into the update buffer. DirtyCardQueue::_index is // a size_t so ld_ptr is appropriate here. __ ld_ptr(G2_thread, dirty_card_q_index_byte_offset, tmp3);
--- a/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -65,6 +65,7 @@ define_pd_global(bool, OptoBundling, false); define_pd_global(bool, OptoScheduling, true); define_pd_global(bool, OptoRegScheduling, false); +define_pd_global(bool, SuperWordLoopUnrollAnalysis, false); #ifdef _LP64 // We need to make sure that all generated code is within
--- a/hotspot/src/cpu/sparc/vm/interpreterGenerator_sparc.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/interpreterGenerator_sparc.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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,8 +43,9 @@ void generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue); void generate_counter_overflow(Label& Lcontinue); + address generate_CRC32_update_entry(); + address generate_CRC32_updateBytes_entry(AbstractInterpreter::MethodKind kind); + // Not supported - address generate_CRC32_update_entry() { return NULL; } - address generate_CRC32_updateBytes_entry(AbstractInterpreter::MethodKind kind) { return NULL; } address generate_CRC32C_updateBytes_entry(AbstractInterpreter::MethodKind kind) { return NULL; } #endif // CPU_SPARC_VM_INTERPRETERGENERATOR_SPARC_HPP
--- a/hotspot/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -29,7 +29,7 @@ #include "runtime/sharedRuntime.hpp" #include "vmreg_sparc.inline.hpp" -jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, oop method) { +jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, Handle method, TRAPS) { if (inst->is_call() || inst->is_jump()) { return pc_offset + NativeCall::instruction_size; } else if (inst->is_call_reg()) { @@ -37,12 +37,12 @@ } else if (inst->is_sethi()) { return pc_offset + NativeFarCall::instruction_size; } else { - fatal("unsupported type of instruction for call site"); + JVMCI_ERROR_0("unsupported type of instruction for call site"); return 0; } } -void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle& constant) { +void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle constant, TRAPS) { address pc = _instructions->start() + pc_offset; Handle obj = HotSpotObjectConstantImpl::object(constant); jobject value = JNIHandles::make_local(obj()); @@ -52,7 +52,7 @@ RelocationHolder rspec = oop_Relocation::spec(oop_index); _instructions->relocate(pc, rspec, 1); #else - fatal("compressed oop on 32bit"); + JVMCI_ERROR("compressed oop on 32bit"); #endif } else { NativeMovConstReg* move = nativeMovConstReg_at(pc); @@ -66,20 +66,20 @@ } } -void CodeInstaller::pd_patch_MetaspaceConstant(int pc_offset, Handle& constant) { +void CodeInstaller::pd_patch_MetaspaceConstant(int pc_offset, Handle constant, TRAPS) { address pc = _instructions->start() + pc_offset; if (HotSpotMetaspaceConstantImpl::compressed(constant)) { #ifdef _LP64 NativeMovConstReg32* move = nativeMovConstReg32_at(pc); - narrowKlass narrowOop = record_narrow_metadata_reference(constant); + narrowKlass narrowOop = record_narrow_metadata_reference(constant, CHECK); move->set_data((intptr_t)narrowOop); TRACE_jvmci_3("relocating (narrow metaspace constant) at %p/%p", pc, narrowOop); #else - fatal("compressed Klass* on 32bit"); + JVMCI_ERROR("compressed Klass* on 32bit"); #endif } else { NativeMovConstReg* move = nativeMovConstReg_at(pc); - Metadata* reference = record_metadata_reference(constant); + Metadata* reference = record_metadata_reference(constant, CHECK); move->set_data((intptr_t)reference); TRACE_jvmci_3("relocating (metaspace constant) at %p/%p", pc, reference); } @@ -106,7 +106,7 @@ } } -void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination) { +void CodeInstaller::pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, TRAPS) { address pc = (address) inst; if (inst->is_call()) { NativeCall* call = nativeCall_at(pc); @@ -117,17 +117,17 @@ jump->set_jump_destination((address) foreign_call_destination); _instructions->relocate(jump->instruction_address(), runtime_call_Relocation::spec()); } else { - fatal(err_msg("unknown call or jump instruction at " PTR_FORMAT, p2i(pc))); + JVMCI_ERROR("unknown call or jump instruction at " PTR_FORMAT, p2i(pc)); } TRACE_jvmci_3("relocating (foreign call) at " PTR_FORMAT, p2i(inst)); } -void CodeInstaller::pd_relocate_JavaMethod(oop hotspot_method, jint pc_offset) { +void CodeInstaller::pd_relocate_JavaMethod(Handle hotspot_method, jint pc_offset, TRAPS) { #ifdef ASSERT Method* method = NULL; // we need to check, this might also be an unresolved method if (hotspot_method->is_a(HotSpotResolvedJavaMethodImpl::klass())) { - method = getMethodFromHotSpotMethod(hotspot_method); + method = getMethodFromHotSpotMethod(hotspot_method()); } #endif switch (_next_call_type) { @@ -156,33 +156,33 @@ break; } default: - fatal("invalid _next_call_type value"); + JVMCI_ERROR("invalid _next_call_type value"); break; } } -void CodeInstaller::pd_relocate_poll(address pc, jint mark) { +void CodeInstaller::pd_relocate_poll(address pc, jint mark, TRAPS) { switch (mark) { case POLL_NEAR: - fatal("unimplemented"); + JVMCI_ERROR("unimplemented"); break; case POLL_FAR: _instructions->relocate(pc, relocInfo::poll_type); break; case POLL_RETURN_NEAR: - fatal("unimplemented"); + JVMCI_ERROR("unimplemented"); break; case POLL_RETURN_FAR: _instructions->relocate(pc, relocInfo::poll_return_type); break; default: - fatal("invalid mark value"); + JVMCI_ERROR("invalid mark value"); break; } } // convert JVMCI register indices (as used in oop maps) to HotSpot registers -VMReg CodeInstaller::get_hotspot_reg(jint jvmci_reg) { +VMReg CodeInstaller::get_hotspot_reg(jint jvmci_reg, TRAPS) { // JVMCI Registers are numbered as follows: // 0..31: Thirty-two General Purpose registers (CPU Registers) // 32..63: Thirty-two single precision float registers @@ -199,7 +199,7 @@ } else if(jvmci_reg < 112) { floatRegisterNumber = 4 * (jvmci_reg - 96); } else { - fatal("Unknown jvmci register"); + JVMCI_ERROR_NULL("invalid register number: %d", jvmci_reg); } return as_FloatRegister(floatRegisterNumber)->as_VMReg(); }
--- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -3632,19 +3632,19 @@ int satb_q_index_byte_offset = in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_index()); + SATBMarkQueue::byte_offset_of_index()); int satb_q_buf_byte_offset = in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_buf()); - - assert(in_bytes(PtrQueue::byte_width_of_index()) == sizeof(intptr_t) && - in_bytes(PtrQueue::byte_width_of_buf()) == sizeof(intptr_t), + SATBMarkQueue::byte_offset_of_buf()); + + assert(in_bytes(SATBMarkQueue::byte_width_of_index()) == sizeof(intptr_t) && + in_bytes(SATBMarkQueue::byte_width_of_buf()) == sizeof(intptr_t), "check sizes in assembly below"); __ bind(restart); - // Load the index into the SATB buffer. PtrQueue::_index is a size_t + // Load the index into the SATB buffer. SATBMarkQueue::_index is a size_t // so ld_ptr is appropriate. __ ld_ptr(G2_thread, satb_q_index_byte_offset, L0); @@ -3736,17 +3736,17 @@ } // Is marking active? - if (in_bytes(PtrQueue::byte_width_of_active()) == 4) { + if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { ld(G2, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_active()), + SATBMarkQueue::byte_offset_of_active()), tmp); } else { - guarantee(in_bytes(PtrQueue::byte_width_of_active()) == 1, + guarantee(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, "Assumption"); ldsb(G2, in_bytes(JavaThread::satb_mark_queue_offset() + - PtrQueue::byte_offset_of_active()), + SATBMarkQueue::byte_offset_of_active()), tmp); } @@ -3847,13 +3847,13 @@ int dirty_card_q_index_byte_offset = in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_index()); + DirtyCardQueue::byte_offset_of_index()); int dirty_card_q_buf_byte_offset = in_bytes(JavaThread::dirty_card_queue_offset() + - PtrQueue::byte_offset_of_buf()); + DirtyCardQueue::byte_offset_of_buf()); __ bind(restart); - // Load the index into the update buffer. PtrQueue::_index is + // Load the index into the update buffer. DirtyCardQueue::_index is // a size_t so ld_ptr is appropriate here. __ ld_ptr(G2_thread, dirty_card_q_index_byte_offset, L0); @@ -4771,3 +4771,243 @@ movdtox(src, tmp1); reverse_bytes_32(tmp1, dst, tmp2); } + +void MacroAssembler::fold_128bit_crc32(Register xcrc_hi, Register xcrc_lo, Register xK_hi, Register xK_lo, Register xtmp_hi, Register xtmp_lo, Register buf, int offset) { + xmulx(xcrc_hi, xK_hi, xtmp_lo); + xmulxhi(xcrc_hi, xK_hi, xtmp_hi); + xmulxhi(xcrc_lo, xK_lo, xcrc_hi); + xmulx(xcrc_lo, xK_lo, xcrc_lo); + xor3(xcrc_lo, xtmp_lo, xcrc_lo); + xor3(xcrc_hi, xtmp_hi, xcrc_hi); + ldxl(buf, G0, xtmp_lo); + inc(buf, 8); + ldxl(buf, G0, xtmp_hi); + inc(buf, 8); + xor3(xcrc_lo, xtmp_lo, xcrc_lo); + xor3(xcrc_hi, xtmp_hi, xcrc_hi); +} + +void MacroAssembler::fold_128bit_crc32(Register xcrc_hi, Register xcrc_lo, Register xK_hi, Register xK_lo, Register xtmp_hi, Register xtmp_lo, Register xbuf_hi, Register xbuf_lo) { + mov(xcrc_lo, xtmp_lo); + mov(xcrc_hi, xtmp_hi); + xmulx(xtmp_hi, xK_hi, xtmp_lo); + xmulxhi(xtmp_hi, xK_hi, xtmp_hi); + xmulxhi(xcrc_lo, xK_lo, xcrc_hi); + xmulx(xcrc_lo, xK_lo, xcrc_lo); + xor3(xcrc_lo, xbuf_lo, xcrc_lo); + xor3(xcrc_hi, xbuf_hi, xcrc_hi); + xor3(xcrc_lo, xtmp_lo, xcrc_lo); + xor3(xcrc_hi, xtmp_hi, xcrc_hi); +} + +void MacroAssembler::fold_8bit_crc32(Register xcrc, Register table, Register xtmp, Register tmp) { + and3(xcrc, 0xFF, tmp); + sllx(tmp, 2, tmp); + lduw(table, tmp, xtmp); + srlx(xcrc, 8, xcrc); + xor3(xtmp, xcrc, xcrc); +} + +void MacroAssembler::fold_8bit_crc32(Register crc, Register table, Register tmp) { + and3(crc, 0xFF, tmp); + srlx(crc, 8, crc); + sllx(tmp, 2, tmp); + lduw(table, tmp, tmp); + xor3(tmp, crc, crc); +} + +#define CRC32_TMP_REG_NUM 18 + +#define CRC32_CONST_64 0x163cd6124 +#define CRC32_CONST_96 0x0ccaa009e +#define CRC32_CONST_160 0x1751997d0 +#define CRC32_CONST_480 0x1c6e41596 +#define CRC32_CONST_544 0x154442bd4 + +void MacroAssembler::kernel_crc32(Register crc, Register buf, Register len, Register table) { + + Label L_cleanup_loop, L_cleanup_check, L_align_loop, L_align_check; + Label L_main_loop_prologue; + Label L_fold_512b, L_fold_512b_loop, L_fold_128b; + Label L_fold_tail, L_fold_tail_loop; + Label L_8byte_fold_loop, L_8byte_fold_check; + + const Register tmp[CRC32_TMP_REG_NUM] = {L0, L1, L2, L3, L4, L5, L6, G1, I0, I1, I2, I3, I4, I5, I7, O4, O5, G3}; + + Register const_64 = tmp[CRC32_TMP_REG_NUM-1]; + Register const_96 = tmp[CRC32_TMP_REG_NUM-1]; + Register const_160 = tmp[CRC32_TMP_REG_NUM-2]; + Register const_480 = tmp[CRC32_TMP_REG_NUM-1]; + Register const_544 = tmp[CRC32_TMP_REG_NUM-2]; + + set(ExternalAddress(StubRoutines::crc_table_addr()), table); + + not1(crc); // ~c + clruwu(crc); // clear upper 32 bits of crc + + // Check if below cutoff, proceed directly to cleanup code + mov(31, G4); + cmp_and_br_short(len, G4, Assembler::lessEqualUnsigned, Assembler::pt, L_cleanup_check); + + // Align buffer to 8 byte boundry + mov(8, O5); + and3(buf, 0x7, O4); + sub(O5, O4, O5); + and3(O5, 0x7, O5); + sub(len, O5, len); + ba(L_align_check); + delayed()->nop(); + + // Alignment loop, table look up method for up to 7 bytes + bind(L_align_loop); + ldub(buf, 0, O4); + inc(buf); + dec(O5); + xor3(O4, crc, O4); + and3(O4, 0xFF, O4); + sllx(O4, 2, O4); + lduw(table, O4, O4); + srlx(crc, 8, crc); + xor3(O4, crc, crc); + bind(L_align_check); + nop(); + cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pt, L_align_loop); + + // Aligned on 64-bit (8-byte) boundry at this point + // Check if still above cutoff (31-bytes) + mov(31, G4); + cmp_and_br_short(len, G4, Assembler::lessEqualUnsigned, Assembler::pt, L_cleanup_check); + // At least 32 bytes left to process + + // Free up registers by storing them to FP registers + for (int i = 0; i < CRC32_TMP_REG_NUM; i++) { + movxtod(tmp[i], as_FloatRegister(2*i)); + } + + // Determine which loop to enter + // Shared prologue + ldxl(buf, G0, tmp[0]); + inc(buf, 8); + ldxl(buf, G0, tmp[1]); + inc(buf, 8); + xor3(tmp[0], crc, tmp[0]); // Fold CRC into first few bytes + and3(crc, 0, crc); // Clear out the crc register + // Main loop needs 128-bytes at least + mov(128, G4); + mov(64, tmp[2]); + cmp_and_br_short(len, G4, Assembler::greaterEqualUnsigned, Assembler::pt, L_main_loop_prologue); + // Less than 64 bytes + nop(); + cmp_and_br_short(len, tmp[2], Assembler::lessUnsigned, Assembler::pt, L_fold_tail); + // Between 64 and 127 bytes + set64(CRC32_CONST_96, const_96, tmp[8]); + set64(CRC32_CONST_160, const_160, tmp[9]); + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[2], tmp[3], buf, 0); + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[4], tmp[5], buf, 16); + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[6], tmp[7], buf, 32); + dec(len, 48); + ba(L_fold_tail); + delayed()->nop(); + + bind(L_main_loop_prologue); + for (int i = 2; i < 8; i++) { + ldxl(buf, G0, tmp[i]); + inc(buf, 8); + } + + // Fold total 512 bits of polynomial on each iteration, + // 128 bits per each of 4 parallel streams + set64(CRC32_CONST_480, const_480, tmp[8]); + set64(CRC32_CONST_544, const_544, tmp[9]); + + mov(128, G4); + bind(L_fold_512b_loop); + fold_128bit_crc32(tmp[1], tmp[0], const_480, const_544, tmp[9], tmp[8], buf, 0); + fold_128bit_crc32(tmp[3], tmp[2], const_480, const_544, tmp[11], tmp[10], buf, 16); + fold_128bit_crc32(tmp[5], tmp[4], const_480, const_544, tmp[13], tmp[12], buf, 32); + fold_128bit_crc32(tmp[7], tmp[6], const_480, const_544, tmp[15], tmp[14], buf, 64); + dec(len, 64); + cmp_and_br_short(len, G4, Assembler::greaterEqualUnsigned, Assembler::pt, L_fold_512b_loop); + + // Fold 512 bits to 128 bits + bind(L_fold_512b); + set64(CRC32_CONST_96, const_96, tmp[8]); + set64(CRC32_CONST_160, const_160, tmp[9]); + + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[8], tmp[9], tmp[3], tmp[2]); + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[8], tmp[9], tmp[5], tmp[4]); + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[8], tmp[9], tmp[7], tmp[6]); + dec(len, 48); + + // Fold the rest of 128 bits data chunks + bind(L_fold_tail); + mov(32, G4); + cmp_and_br_short(len, G4, Assembler::lessEqualUnsigned, Assembler::pt, L_fold_128b); + + set64(CRC32_CONST_96, const_96, tmp[8]); + set64(CRC32_CONST_160, const_160, tmp[9]); + + bind(L_fold_tail_loop); + fold_128bit_crc32(tmp[1], tmp[0], const_96, const_160, tmp[2], tmp[3], buf, 0); + sub(len, 16, len); + cmp_and_br_short(len, G4, Assembler::greaterEqualUnsigned, Assembler::pt, L_fold_tail_loop); + + // Fold the 128 bits in tmps 0 - 1 into tmp 1 + bind(L_fold_128b); + + set64(CRC32_CONST_64, const_64, tmp[4]); + + xmulx(const_64, tmp[0], tmp[2]); + xmulxhi(const_64, tmp[0], tmp[3]); + + srl(tmp[2], G0, tmp[4]); + xmulx(const_64, tmp[4], tmp[4]); + + srlx(tmp[2], 32, tmp[2]); + sllx(tmp[3], 32, tmp[3]); + or3(tmp[2], tmp[3], tmp[2]); + + xor3(tmp[4], tmp[1], tmp[4]); + xor3(tmp[4], tmp[2], tmp[1]); + dec(len, 8); + + // Use table lookup for the 8 bytes left in tmp[1] + dec(len, 8); + + // 8 8-bit folds to compute 32-bit CRC. + for (int j = 0; j < 4; j++) { + fold_8bit_crc32(tmp[1], table, tmp[2], tmp[3]); + } + srl(tmp[1], G0, crc); // move 32 bits to general register + for (int j = 0; j < 4; j++) { + fold_8bit_crc32(crc, table, tmp[3]); + } + + bind(L_8byte_fold_check); + + // Restore int registers saved in FP registers + for (int i = 0; i < CRC32_TMP_REG_NUM; i++) { + movdtox(as_FloatRegister(2*i), tmp[i]); + } + + ba(L_cleanup_check); + delayed()->nop(); + + // Table look-up method for the remaining few bytes + bind(L_cleanup_loop); + ldub(buf, 0, O4); + inc(buf); + dec(len); + xor3(O4, crc, O4); + and3(O4, 0xFF, O4); + sllx(O4, 2, O4); + lduw(table, O4, O4); + srlx(crc, 8, crc); + xor3(O4, crc, crc); + bind(L_cleanup_check); + nop(); + cmp_and_br_short(len, 0, Assembler::greaterUnsigned, Assembler::pt, L_cleanup_loop); + + not1(crc); +} +
--- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -904,7 +904,9 @@ inline void ldf(FloatRegisterImpl::Width w, const Address& a, FloatRegister d, int offset = 0); // little-endian - inline void ldxl(Register s1, Register s2, Register d) { ldxa(s1, s2, ASI_PRIMARY_LITTLE, d); } + inline void lduwl(Register s1, Register s2, Register d) { lduwa(s1, s2, ASI_PRIMARY_LITTLE, d); } + inline void ldswl(Register s1, Register s2, Register d) { ldswa(s1, s2, ASI_PRIMARY_LITTLE, d);} + inline void ldxl( Register s1, Register s2, Register d) { ldxa(s1, s2, ASI_PRIMARY_LITTLE, d); } inline void ldfl(FloatRegisterImpl::Width w, Register s1, Register s2, FloatRegister d) { ldfa(w, s1, s2, ASI_PRIMARY_LITTLE, d); } // membar psuedo instruction. takes into account target memory model. @@ -1469,6 +1471,15 @@ void movitof_revbytes(Register src, FloatRegister dst, Register tmp1, Register tmp2); void movftoi_revbytes(FloatRegister src, Register dst, Register tmp1, Register tmp2); + // CRC32 code for java.util.zip.CRC32::updateBytes0() instrinsic. + void kernel_crc32(Register crc, Register buf, Register len, Register table); + // Fold 128-bit data chunk + void fold_128bit_crc32(Register xcrc_hi, Register xcrc_lo, Register xK_hi, Register xK_lo, Register xtmp_hi, Register xtmp_lo, Register buf, int offset); + void fold_128bit_crc32(Register xcrc_hi, Register xcrc_lo, Register xK_hi, Register xK_lo, Register xtmp_hi, Register xtmp_lo, Register xbuf_hi, Register xbuf_lo); + // Fold 8-bit data + void fold_8bit_crc32(Register xcrc, Register table, Register xtmp, Register tmp); + void fold_8bit_crc32(Register crc, Register table, Register tmp); + #undef VIRTUAL };
--- a/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -3036,6 +3036,7 @@ __ mov((int32_t)Deoptimization::Unpack_reexecute, L0deopt_mode); __ mov(G2_thread, O0); + __ mov(L0deopt_mode, O2); __ call(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap)); __ delayed()->nop(); oop_maps->add_gc_map( __ offset()-start, map->deep_copy()); @@ -3121,6 +3122,7 @@ // do the call by hand so we can get the oopmap __ mov(G2_thread, L7_thread_cache); + __ mov(L0deopt_mode, O1); __ call(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info), relocInfo::runtime_call_type); __ delayed()->mov(G2_thread, O0); @@ -3146,6 +3148,7 @@ RegisterSaver::restore_result_registers(masm); + __ ld(O2UnrollBlock, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes(), G4deopt_mode); Label noException; __ cmp_and_br_short(G4deopt_mode, Deoptimization::Unpack_exception, Assembler::notEqual, Assembler::pt, noException); @@ -3269,7 +3272,8 @@ __ save_frame(0); __ set_last_Java_frame(SP, noreg); __ mov(I0, O2klass_index); - __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap), G2_thread, O2klass_index); + __ mov(Deoptimization::Unpack_uncommon_trap, O3); // exec mode + __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap), G2_thread, O2klass_index, O3); __ reset_last_Java_frame(); __ mov(O0, O2UnrollBlock->after_save()); __ restore(); @@ -3278,6 +3282,15 @@ __ mov(O2UnrollBlock, O2UnrollBlock->after_save()); __ restore(); +#ifdef ASSERT + { Label L; + __ ld(O2UnrollBlock, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes(), O1); + __ cmp_and_br_short(O1, Deoptimization::Unpack_uncommon_trap, Assembler::equal, Assembler::pt, L); + __ stop("SharedRuntime::generate_deopt_blob: expected Unpack_uncommon_trap"); + __ bind(L); + } +#endif + // Allocate new interpreter frame(s) and possible c2i adapter frame make_new_frames(masm, false);
--- a/hotspot/src/cpu/sparc/vm/sparc.ad Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/sparc.ad Wed Jul 05 21:05:52 2017 +0200 @@ -1860,6 +1860,17 @@ return true; // Per default match rules are supported. } +const bool Matcher::match_rule_supported_vector(int opcode, int vlen) { + + // TODO + // identify extra cases that we might want to provide match rules for + // e.g. Op_ vector nodes and other intrinsics while guarding with vlen + bool ret_value = match_rule_supported(opcode); + // Add rules here. + + return ret_value; // Per default match rules are supported. +} + const int Matcher::float_pressure(int default_pressure_threshold) { return default_pressure_threshold; } @@ -1905,7 +1916,7 @@ } // Current (2013) SPARC platforms need to read original key -// to construct decryption expanded key +// to construct decryption expanded key const bool Matcher::pass_original_key_for_aes() { return true; } @@ -2612,7 +2623,7 @@ if (stub == NULL && !(TraceJumps && Compile::current()->in_scratch_emit_size())) { ciEnv::current()->record_failure("CodeCache is full"); return; - } + } } %} @@ -3132,10 +3143,10 @@ // AVOID_NONE - instruction can be placed anywhere // AVOID_BEFORE - instruction cannot be placed after an // instruction with MachNode::AVOID_AFTER -// AVOID_AFTER - the next instruction cannot be the one +// AVOID_AFTER - the next instruction cannot be the one // with MachNode::AVOID_BEFORE -// AVOID_BEFORE_AND_AFTER - BEFORE and AFTER attributes at -// the same time +// AVOID_BEFORE_AND_AFTER - BEFORE and AFTER attributes at +// the same time ins_attrib ins_avoid_back_to_back(MachNode::AVOID_NONE); ins_attrib ins_short_branch(0); // Required flag: is this instruction a
--- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -5292,6 +5292,38 @@ return start; } +/** + * Arguments: + * + * Inputs: + * O0 - int crc + * O1 - byte* buf + * O2 - int len + * O3 - int* table + * + * Output: + * O0 - int crc result + */ + address generate_updateBytesCRC32() { + assert(UseCRC32Intrinsics, "need VIS3 instructions"); + + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "updateBytesCRC32"); + address start = __ pc(); + + const Register crc = O0; // crc + const Register buf = O1; // source java byte array address + const Register len = O2; // length + const Register table = O3; // crc_table address (reuse register) + + __ kernel_crc32(crc, buf, len, table); + + __ retl(); + __ delayed()->nop(); + + return start; + } + void generate_initial() { // Generates all stubs and initializes the entry points @@ -5324,6 +5356,12 @@ // Build this early so it's available for the interpreter. StubRoutines::_throw_StackOverflowError_entry = generate_throw_exception("StackOverflowError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError)); + + if (UseCRC32Intrinsics) { + // set table address before stub generation which use it + StubRoutines::_crc_table_adr = (address)StubRoutines::Sparc::_crc_table; + StubRoutines::_updateBytesCRC32 = generate_updateBytesCRC32(); + } }
--- a/hotspot/src/cpu/sparc/vm/stubRoutines_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/stubRoutines_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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,3 +52,98 @@ address StubRoutines::Sparc::_flush_callers_register_windows_entry = CAST_FROM_FN_PTR(address, bootstrap_flush_windows); address StubRoutines::Sparc::_partial_subtype_check = NULL; + +uint64_t StubRoutines::Sparc::_crc_by128_masks[] = +{ + /* The fields in this structure are arranged so that they can be + * picked up two at a time with 128-bit loads. + * + * Because of flipped bit order for this CRC polynomials + * the constant for X**N is left-shifted by 1. This is because + * a 64 x 64 polynomial multiply produces a 127-bit result + * but the highest term is always aligned to bit 0 in the container. + * Pre-shifting by one fixes this, at the cost of potentially making + * the 32-bit constant no longer fit in a 32-bit container (thus the + * use of uint64_t, though this is also the size used by the carry- + * less multiply instruction. + * + * In addition, the flipped bit order and highest-term-at-least-bit + * multiply changes the constants used. The 96-bit result will be + * aligned to the high-term end of the target 128-bit container, + * not the low-term end; that is, instead of a 512-bit or 576-bit fold, + * instead it is a 480 (=512-32) or 544 (=512+64-32) bit fold. + * + * This cause additional problems in the 128-to-64-bit reduction; see the + * code for details. By storing a mask in the otherwise unused half of + * a 128-bit constant, bits can be cleared before multiplication without + * storing and reloading. Note that staying on a 128-bit datapath means + * that some data is uselessly stored and some unused data is intersected + * with an irrelevant constant. + */ + + ((uint64_t) 0xffffffffUL), /* low of K_M_64 */ + ((uint64_t) 0xb1e6b092U << 1), /* high of K_M_64 */ + ((uint64_t) 0xba8ccbe8U << 1), /* low of K_160_96 */ + ((uint64_t) 0x6655004fU << 1), /* high of K_160_96 */ + ((uint64_t) 0xaa2215eaU << 1), /* low of K_544_480 */ + ((uint64_t) 0xe3720acbU << 1) /* high of K_544_480 */ +}; + +/** + * crc_table[] from jdk/src/java.base/share/native/libzip/zlib-1.2.8/crc32.h + */ +juint StubRoutines::Sparc::_crc_table[] = +{ + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +};
--- a/hotspot/src/cpu/sparc/vm/stubRoutines_sparc.hpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/stubRoutines_sparc.hpp Wed Jul 05 21:05:52 2017 +0200 @@ -53,6 +53,9 @@ static address _flush_callers_register_windows_entry; static address _partial_subtype_check; + // masks and table for CRC32 + static uint64_t _crc_by128_masks[]; + static juint _crc_table[]; public: // test assembler stop routine by setting registers @@ -65,6 +68,8 @@ static intptr_t* (*flush_callers_register_windows_func())() { return CAST_TO_FN_PTR(intptr_t* (*)(void), _flush_callers_register_windows_entry); } static address partial_subtype_check() { return _partial_subtype_check; } + + static address crc_by128_masks_addr() { return (address)_crc_by128_masks; } }; #endif // CPU_SPARC_VM_STUBROUTINES_SPARC_HPP
--- a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -803,6 +803,106 @@ return NULL; } +/** + * Method entry for static native methods: + * int java.util.zip.CRC32.update(int crc, int b) + */ +address InterpreterGenerator::generate_CRC32_update_entry() { + + if (UseCRC32Intrinsics) { + address entry = __ pc(); + + Label L_slow_path; + // If we need a safepoint check, generate full interpreter entry. + ExternalAddress state(SafepointSynchronize::address_of_state()); + __ set(ExternalAddress(SafepointSynchronize::address_of_state()), O2); + __ set(SafepointSynchronize::_not_synchronized, O3); + __ cmp_and_br_short(O2, O3, Assembler::notEqual, Assembler::pt, L_slow_path); + + // Load parameters + const Register crc = O0; // initial crc + const Register val = O1; // byte to update with + const Register table = O2; // address of 256-entry lookup table + + __ ldub(Gargs, 3, val); + __ lduw(Gargs, 8, crc); + + __ set(ExternalAddress(StubRoutines::crc_table_addr()), table); + + __ not1(crc); // ~crc + __ clruwu(crc); + __ update_byte_crc32(crc, val, table); + __ not1(crc); // ~crc + + // result in O0 + __ retl(); + __ delayed()->nop(); + + // generate a vanilla native entry as the slow path + __ bind(L_slow_path); + __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::native)); + return entry; + } + return NULL; +} + +/** + * Method entry for static native methods: + * int java.util.zip.CRC32.updateBytes(int crc, byte[] b, int off, int len) + * int java.util.zip.CRC32.updateByteBuffer(int crc, long buf, int off, int len) + */ +address InterpreterGenerator::generate_CRC32_updateBytes_entry(AbstractInterpreter::MethodKind kind) { + + if (UseCRC32Intrinsics) { + address entry = __ pc(); + + Label L_slow_path; + // If we need a safepoint check, generate full interpreter entry. + ExternalAddress state(SafepointSynchronize::address_of_state()); + __ set(ExternalAddress(SafepointSynchronize::address_of_state()), O2); + __ set(SafepointSynchronize::_not_synchronized, O3); + __ cmp_and_br_short(O2, O3, Assembler::notEqual, Assembler::pt, L_slow_path); + + // Load parameters from the stack + const Register crc = O0; // initial crc + const Register buf = O1; // source java byte array address + const Register len = O2; // len + const Register offset = O3; // offset + + // Arguments are reversed on java expression stack + // Calculate address of start element + if (kind == Interpreter::java_util_zip_CRC32_updateByteBuffer) { + __ lduw(Gargs, 0, len); + __ lduw(Gargs, 8, offset); + __ ldx( Gargs, 16, buf); + __ lduw(Gargs, 32, crc); + __ add(buf, offset, buf); + } else { + __ lduw(Gargs, 0, len); + __ lduw(Gargs, 8, offset); + __ ldx( Gargs, 16, buf); + __ lduw(Gargs, 24, crc); + __ add(buf, arrayOopDesc::base_offset_in_bytes(T_BYTE), buf); // account for the header size + __ add(buf ,offset, buf); + } + + // Call the crc32 kernel + __ MacroAssembler::save_thread(L7_thread_cache); + __ kernel_crc32(crc, buf, len, O3); + __ MacroAssembler::restore_thread(L7_thread_cache); + + // result in O0 + __ retl(); + __ delayed()->nop(); + + // generate a vanilla native entry as the slow path + __ bind(L_slow_path); + __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::native)); + return entry; + } + return NULL; +} + // // Interpreter stub for calling a native method. (asm interpreter) // This sets up a somewhat different looking stack for calling the native method
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp Mon Dec 07 14:20:20 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp Wed Jul 05 21:05:52 2017 +0200 @@ -229,35 +229,35 @@ // SPARC T4 and above should have support for AES instructions if (has_aes()) { - if (UseVIS > 2) { // AES intrinsics use MOVxTOd/MOVdTOx which are VIS3 - if (FLAG_IS_DEFAULT(UseAES)) { - FLAG_SET_DEFAULT(UseAES, true); + if (FLAG_IS_DEFAULT(UseAES)) { + FLAG_SET_DEFAULT(UseAES, true); + } + if (!UseAES) { + if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) { + warning("AES intrinsics require UseAES flag to be enabled. Intrinsics will be disabled."); } - if (FLAG_IS_DEFAULT(UseAESIntrinsics)) { - FLAG_SET_DEFAULT(UseAESIntrinsics, true); - } - // we disable both the AES flags if either of them is disabled on the command line - if (!UseAES || !UseAESIntrinsics) { - FLAG_SET_DEFAULT(UseAES, false); + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } else { + // The AES intrinsic stubs require AES instruction support (of course) + // but also require VIS3 mode or higher for instructions it use. + if (UseVIS > 2) { + if (FLAG_IS_DEFAULT(UseAESIntrinsics)) { + FLAG_SET_DEFAULT(UseAESIntrinsics, true); + } + } else { + if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) { + warning("SPARC AES intrinsics require VIS3 instructions. Intrinsics will be disabled."); + } FLAG_SET_DEFAULT(UseAESIntrinsics, false); } - } else { - if (UseAES || UseAESIntrinsics) { - warning("SPARC AES intrinsics require VIS3 instruction support. Intrinsics will be disabled."); - if (UseAES) { - FLAG_SET_DEFAULT(UseAES, false); - } - if (UseAESIntrinsics) { - FLAG_SET_DEFAULT(UseAESIntrinsics, false); - } - } } } else if (UseAES || UseAESIntrinsics) { - warning("AES instructions are not available on this CPU"); - if (UseAES) { + if (UseAES && !FLAG_IS_DEFAULT(UseAES)) { + warni