Merge
This commit is contained in:
commit
449c94c443
@ -356,3 +356,4 @@ c7be2a78c31b3b6132f2f5e9e4b3d3bb1c20245c jdk-9+108
|
||||
f900d5afd9c83a0df8f36161c27c5e4c86a66f4c jdk-9+111
|
||||
03543a758cd5890f2266e4b9678378a925dde22a jdk-9+112
|
||||
55b6d550828d1223b364e6ead4a56e56411c56df jdk-9+113
|
||||
1d992540870ff33fe6cc550443388588df9b9e4f jdk-9+114
|
||||
|
@ -305,7 +305,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
|
||||
BOOT_JDK_SOURCETARGET="-source 8 -target 8"
|
||||
AC_SUBST(BOOT_JDK_SOURCETARGET)
|
||||
|
||||
ADD_JVM_ARG_IF_OK([-Xpatch:], dummy, [$JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-Xpatch:foo=bar], dummy, [$JAVA])
|
||||
AC_MSG_CHECKING([if Boot JDK supports modules])
|
||||
if test "x$JVM_ARG_OK" = "xtrue"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
@ -444,9 +444,9 @@ AC_DEFUN([BOOTJDK_CHECK_BUILD_JDK],
|
||||
BUILD_JDK_VERSION=`"$BUILD_JDK/bin/java" -version 2>&1 | head -n 1`
|
||||
|
||||
# Extra M4 quote needed to protect [] in grep expression.
|
||||
[FOUND_CORRECT_VERSION=`echo $BUILD_JDK_VERSION | grep '\"1\.[9]\.'`]
|
||||
[FOUND_CORRECT_VERSION=`echo $BUILD_JDK_VERSION | $EGREP '\"9([\.+-].*)?\"'`]
|
||||
if test "x$FOUND_CORRECT_VERSION" = x; then
|
||||
AC_MSG_NOTICE([Potential Boot JDK found at $BUILD_JDK is incorrect JDK version ($BUILD_JDK_VERSION); ignoring])
|
||||
AC_MSG_NOTICE([Potential Build JDK found at $BUILD_JDK is incorrect JDK version ($BUILD_JDK_VERSION); ignoring])
|
||||
AC_MSG_NOTICE([(Your Build JDK must be version 9)])
|
||||
BUILD_JDK_FOUND=no
|
||||
else
|
||||
|
@ -454,7 +454,7 @@ AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC],
|
||||
AC_MSG_RESULT([$ENABLE_JAVAC_SERVER])
|
||||
AC_SUBST(ENABLE_JAVAC_SERVER)
|
||||
|
||||
if test "x$ENABLE_JAVAC_SERVER" = "xyes" || "x$ENABLE_SJAVAC" = "xyes"; then
|
||||
if test "x$ENABLE_JAVAC_SERVER" = "xyes" || test "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"
|
||||
|
@ -227,6 +227,7 @@ LIB_SETUP_LIBRARIES
|
||||
|
||||
HOTSPOT_SETUP_BUILD_TWEAKS
|
||||
JDKOPT_DETECT_INTREE_EC
|
||||
JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
|
@ -650,6 +650,7 @@ TEST_JOBS
|
||||
JOBS
|
||||
MEMORY_SIZE
|
||||
NUM_CORES
|
||||
BUILD_FAILURE_HANDLER
|
||||
ENABLE_INTREE_EC
|
||||
HOTSPOT_MAKE_ARGS
|
||||
LIBZIP_CAN_USE_MMAP
|
||||
@ -1172,6 +1173,7 @@ with_lcms
|
||||
with_dxsdk
|
||||
with_dxsdk_lib
|
||||
with_dxsdk_include
|
||||
enable_jtreg_failure_handler
|
||||
with_num_cores
|
||||
with_memory_size
|
||||
with_jobs
|
||||
@ -1940,6 +1942,12 @@ Optional Features:
|
||||
disable bundling of the freetype library with the
|
||||
build result [enabled on Windows or when using
|
||||
--with-freetype, disabled otherwise]
|
||||
--enable-jtreg-failure-handler
|
||||
forces build of the jtreg failure handler to be
|
||||
enabled, missing dependencies become fatal errors.
|
||||
Default is auto, where the failure handler is built
|
||||
if all dependencies are present and otherwise just
|
||||
disabled.
|
||||
--enable-sjavac use sjavac to do fast incremental compiles
|
||||
[disabled]
|
||||
--disable-javac-server disable javac server [enabled]
|
||||
@ -4274,6 +4282,12 @@ pkgadd_help() {
|
||||
#
|
||||
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# Check if building of the jtreg failure handler should be enabled.
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -4950,7 +4964,7 @@ VS_SDK_PLATFORM_NAME_2013=
|
||||
#CUSTOM_AUTOCONF_INCLUDE
|
||||
|
||||
# Do not change or remove the following line, it is needed for consistency checks:
|
||||
DATE_WHEN_GENERATED=1458755892
|
||||
DATE_WHEN_GENERATED=1460963400
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@ -29770,13 +29784,13 @@ $as_echo "$tool_specified" >&6; }
|
||||
|
||||
|
||||
|
||||
$ECHO "Check if jvm arg is ok: -Xpatch:" >&5
|
||||
$ECHO "Command: $JAVA -Xpatch: -version" >&5
|
||||
OUTPUT=`$JAVA -Xpatch: -version 2>&1`
|
||||
$ECHO "Check if jvm arg is ok: -Xpatch:foo=bar" >&5
|
||||
$ECHO "Command: $JAVA -Xpatch:foo=bar -version" >&5
|
||||
OUTPUT=`$JAVA -Xpatch:foo=bar -version 2>&1`
|
||||
FOUND_WARN=`$ECHO "$OUTPUT" | grep -i warn`
|
||||
FOUND_VERSION=`$ECHO $OUTPUT | grep " version \""`
|
||||
if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
|
||||
dummy="$dummy -Xpatch:"
|
||||
dummy="$dummy -Xpatch:foo=bar"
|
||||
JVM_ARG_OK=true
|
||||
else
|
||||
$ECHO "Arg failed:" >&5
|
||||
@ -29856,10 +29870,10 @@ $as_echo "$as_me: (This might be a JRE instead of an JDK)" >&6;}
|
||||
BUILD_JDK_VERSION=`"$BUILD_JDK/bin/java" -version 2>&1 | head -n 1`
|
||||
|
||||
# Extra M4 quote needed to protect [] in grep expression.
|
||||
FOUND_CORRECT_VERSION=`echo $BUILD_JDK_VERSION | grep '\"1\.[9]\.'`
|
||||
FOUND_CORRECT_VERSION=`echo $BUILD_JDK_VERSION | $EGREP '\"9([\.+-].*)?\"'`
|
||||
if test "x$FOUND_CORRECT_VERSION" = x; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BUILD_JDK is incorrect JDK version ($BUILD_JDK_VERSION); ignoring" >&5
|
||||
$as_echo "$as_me: Potential Boot JDK found at $BUILD_JDK is incorrect JDK version ($BUILD_JDK_VERSION); ignoring" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Potential Build JDK found at $BUILD_JDK is incorrect JDK version ($BUILD_JDK_VERSION); ignoring" >&5
|
||||
$as_echo "$as_me: Potential Build JDK found at $BUILD_JDK is incorrect JDK version ($BUILD_JDK_VERSION); ignoring" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: (Your Build JDK must be version 9)" >&5
|
||||
$as_echo "$as_me: (Your Build JDK must be version 9)" >&6;}
|
||||
BUILD_JDK_FOUND=no
|
||||
@ -62037,6 +62051,45 @@ $as_echo "no" >&6; }
|
||||
|
||||
|
||||
|
||||
# Check whether --enable-jtreg-failure-handler was given.
|
||||
if test "${enable_jtreg_failure_handler+set}" = set; then :
|
||||
enableval=$enable_jtreg_failure_handler;
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if jtreg failure handler should be built" >&5
|
||||
$as_echo_n "checking if jtreg failure handler should be built... " >&6; }
|
||||
|
||||
if test "x$enable_jtreg_failure_handler" = "xyes"; then
|
||||
if test "x$JT_HOME" = "x"; then
|
||||
as_fn_error $? "Cannot enable jtreg failure handler without jtreg." "$LINENO" 5
|
||||
else
|
||||
BUILD_FAILURE_HANDLER=true
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, forced" >&5
|
||||
$as_echo "yes, forced" >&6; }
|
||||
fi
|
||||
elif test "x$enable_jtreg_failure_handler" = "xno"; then
|
||||
BUILD_FAILURE_HANDLER=false
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, forced" >&5
|
||||
$as_echo "no, forced" >&6; }
|
||||
elif test "x$enable_jtreg_failure_handler" = "xauto" \
|
||||
|| test "x$enable_jtreg_failure_handler" = "x"; then
|
||||
if test "x$JT_HOME" = "x"; then
|
||||
BUILD_FAILURE_HANDLER=false
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, missing jtreg" >&5
|
||||
$as_echo "no, missing jtreg" >&6; }
|
||||
else
|
||||
BUILD_FAILURE_HANDLER=true
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, jtreg present" >&5
|
||||
$as_echo "yes, jtreg present" >&6; }
|
||||
fi
|
||||
else
|
||||
as_fn_error $? "Invalid value for --enable-jtreg-failure-handler: $enable_jtreg_failure_handler" "$LINENO" 5
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Configure parts of the build that only affect the build performance,
|
||||
@ -62510,7 +62563,7 @@ $as_echo_n "checking whether to use javac server... " >&6; }
|
||||
$as_echo "$ENABLE_JAVAC_SERVER" >&6; }
|
||||
|
||||
|
||||
if test "x$ENABLE_JAVAC_SERVER" = "xyes" || "x$ENABLE_SJAVAC" = "xyes"; then
|
||||
if test "x$ENABLE_JAVAC_SERVER" = "xyes" || test "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"
|
||||
|
@ -408,7 +408,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD],
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# jlink options.
|
||||
# jlink options.
|
||||
# We always keep packaged modules in JDK image.
|
||||
#
|
||||
AC_DEFUN_ONCE([JDKOPT_SETUP_JLINK_OPTIONS],
|
||||
@ -433,3 +433,42 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JLINK_OPTIONS],
|
||||
|
||||
AC_SUBST(JLINK_KEEP_PACKAGED_MODULES)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# Check if building of the jtreg failure handler should be enabled.
|
||||
#
|
||||
AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER],
|
||||
[
|
||||
AC_ARG_ENABLE([jtreg-failure-handler], [AS_HELP_STRING([--enable-jtreg-failure-handler],
|
||||
[forces build of the jtreg failure handler to be enabled, missing dependencies
|
||||
become fatal errors. Default is auto, where the failure handler is built if all
|
||||
dependencies are present and otherwise just disabled.])])
|
||||
|
||||
AC_MSG_CHECKING([if jtreg failure handler should be built])
|
||||
|
||||
if test "x$enable_jtreg_failure_handler" = "xyes"; then
|
||||
if test "x$JT_HOME" = "x"; then
|
||||
AC_MSG_ERROR([Cannot enable jtreg failure handler without jtreg.])
|
||||
else
|
||||
BUILD_FAILURE_HANDLER=true
|
||||
AC_MSG_RESULT([yes, forced])
|
||||
fi
|
||||
elif test "x$enable_jtreg_failure_handler" = "xno"; then
|
||||
BUILD_FAILURE_HANDLER=false
|
||||
AC_MSG_RESULT([no, forced])
|
||||
elif test "x$enable_jtreg_failure_handler" = "xauto" \
|
||||
|| test "x$enable_jtreg_failure_handler" = "x"; then
|
||||
if test "x$JT_HOME" = "x"; then
|
||||
BUILD_FAILURE_HANDLER=false
|
||||
AC_MSG_RESULT([no, missing jtreg])
|
||||
else
|
||||
BUILD_FAILURE_HANDLER=true
|
||||
AC_MSG_RESULT([yes, jtreg present])
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([Invalid value for --enable-jtreg-failure-handler: $enable_jtreg_failure_handler])
|
||||
fi
|
||||
|
||||
AC_SUBST(BUILD_FAILURE_HANDLER)
|
||||
])
|
||||
|
@ -260,6 +260,8 @@ HOTSPOT_DIST=@HOTSPOT_DIST@
|
||||
|
||||
BUILD_HOTSPOT=@BUILD_HOTSPOT@
|
||||
|
||||
BUILD_FAILURE_HANDLER := @BUILD_FAILURE_HANDLER@
|
||||
|
||||
# The boot jdk to use. This is overridden in bootcycle-spec.gmk. Make sure to keep
|
||||
# it in sync.
|
||||
BOOT_JDK:=@BOOT_JDK@
|
||||
|
@ -41,7 +41,7 @@ if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
|
||||
STAT_PRINT_SIZE="-f %z"
|
||||
elif [ "$OPENJDK_TARGET_OS" = "windows" ]; then
|
||||
FULLDUMP_CMD="$DUMPBIN -all"
|
||||
LDD_CMD="$DUMPBIN -dependants | $GREP .dll"
|
||||
LDD_CMD="$DUMPBIN -dependents"
|
||||
DIS_CMD="$DUMPBIN -disasm:nobytes"
|
||||
STAT_PRINT_SIZE="-c %s"
|
||||
elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then
|
||||
@ -824,12 +824,25 @@ compare_bin_file() {
|
||||
|
||||
# Check dependencies
|
||||
if [ -n "$LDD_CMD" ]; then
|
||||
(cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME 2>/dev/null | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.other | $UNIQ > $WORK_FILE_BASE.deps.other.uniq)
|
||||
(cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME 2</dev/null | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.this | $UNIQ > $WORK_FILE_BASE.deps.this.uniq)
|
||||
if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
|
||||
LDD_FILTER="$GREP \.dll"
|
||||
else
|
||||
LDD_FILTER="$CAT"
|
||||
fi
|
||||
(cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME 2>/dev/null \
|
||||
| $LDD_FILTER | $AWK '{ print $1;}' | $SORT \
|
||||
| $TEE $WORK_FILE_BASE.deps.other \
|
||||
| $UNIQ > $WORK_FILE_BASE.deps.other.uniq)
|
||||
(cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME 2</dev/null \
|
||||
| $LDD_FILTER | $AWK '{ print $1;}' | $SORT \
|
||||
| $TEE $WORK_FILE_BASE.deps.this \
|
||||
| $UNIQ > $WORK_FILE_BASE.deps.this.uniq)
|
||||
(cd $FILE_WORK_DIR && $RM -f $NAME)
|
||||
|
||||
LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff
|
||||
LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq
|
||||
LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this \
|
||||
> $WORK_FILE_BASE.deps.diff
|
||||
LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq \
|
||||
> $WORK_FILE_BASE.deps.diff.uniq
|
||||
|
||||
if [ -s $WORK_FILE_BASE.deps.diff ]; then
|
||||
if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then
|
||||
|
@ -214,7 +214,7 @@ var getJibProfiles = function (input) {
|
||||
var getJibProfilesCommon = function (input) {
|
||||
var common = {
|
||||
dependencies: ["boot_jdk", "gnumake", "jtreg"],
|
||||
configure_args: ["--with-default-make-target=all"],
|
||||
configure_args: ["--with-default-make-target=all", "--enable-jtreg-failure-handler"],
|
||||
configure_args_32bit: ["--with-target-bits=32", "--with-jvm-variants=client,server"],
|
||||
configure_args_debug: ["--enable-debug"],
|
||||
configure_args_slowdebug: ["--with-debug-level=slowdebug"],
|
||||
|
@ -356,3 +356,4 @@ b75afa17aefe480c23c616a6a2497063312f7189 jdk-9+109
|
||||
2bb92dd44275679edb29fdbffc3b7cbebc9a6bf0 jdk-9+111
|
||||
780d0620add32bf545471cf65038c9ac6d9c036d jdk-9+112
|
||||
cc30faa2da498c478e89ab062ff160653ca1b170 jdk-9+113
|
||||
10d175b0368c30f54350fc648adc41b94ce357ee jdk-9+114
|
||||
|
@ -37,7 +37,7 @@ import java.security.Permission;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
import jdk.internal.misc.Unsafe ;
|
||||
import sun.reflect.ReflectionFactory ;
|
||||
import jdk.internal.reflect.ReflectionFactory;
|
||||
|
||||
/** This class provides the methods for fundamental JVM operations
|
||||
* needed in the ORB that are not part of the public Java API. This includes:
|
||||
|
@ -516,3 +516,4 @@ c5146d4da417f76edfc43097d2e2ced042a65b4e jdk-9+107
|
||||
c558850fac5750d8ca98a45180121980f57cdd28 jdk-9+111
|
||||
76582e8dc9e6374e4f99ab797c8d364b6e9449b4 jdk-9+112
|
||||
c569f8d89269fb6205b90f727581eb8cc04132f9 jdk-9+113
|
||||
b64432bae5271735fd53300b2005b713e98ef411 jdk-9+114
|
||||
|
@ -9,12 +9,15 @@
|
||||
#
|
||||
fix_lines() {
|
||||
# repair bare #line directives in $1 to refer to $2
|
||||
awk < $1 > $1+ '
|
||||
# and add an override of __FILE__ with just the basename on the
|
||||
# first line of the file.
|
||||
awk < $1 > $1+ -v F2=$2 '
|
||||
BEGIN { print "#line 1 \"" F2 "\""; }
|
||||
/^#line 999999$/ {print "#line " (NR+1) " \"" F2 "\""; next}
|
||||
{print}
|
||||
' F2=$2
|
||||
'
|
||||
mv $1+ $1
|
||||
}
|
||||
fix_lines $2/$1 $3/$1
|
||||
fix_lines $2/$1 $1
|
||||
[ -f $3/$1 ] && cmp -s $2/$1 $3/$1 || \
|
||||
( [ -f $3/$1 ] && echo Updating $3/$1 ; touch $2/made-change ; mv $2/$1 $3/$1 )
|
||||
|
@ -27,14 +27,17 @@
|
||||
#
|
||||
# It knows how to build and run the tools to generate trace files.
|
||||
|
||||
include $(GAMMADIR)/make/linux/makefiles/rules.make
|
||||
include $(GAMMADIR)/make/aix/makefiles/rules.make
|
||||
include $(GAMMADIR)/make/altsrc.make
|
||||
|
||||
# #########################################################################
|
||||
|
||||
HAS_ALT_SRC:=$(shell if [ -d $(HS_ALT_SRC)/share/vm/trace ]; then \
|
||||
echo "true"; else echo "false";\
|
||||
fi)
|
||||
HAS_ALT_SRC := false
|
||||
ifndef OPENJDK
|
||||
ifneq ($(wildcard $(HS_ALT_SRC)/share/vm/trace), )
|
||||
HAS_ALT_SRC := true
|
||||
endif
|
||||
endif
|
||||
|
||||
TOPDIR = $(shell echo `pwd`)
|
||||
GENERATED = $(TOPDIR)/../generated
|
||||
@ -50,23 +53,30 @@ VPATH += $(Src_Dirs_V:%=%:)
|
||||
|
||||
TraceGeneratedNames = \
|
||||
traceEventClasses.hpp \
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
endif
|
||||
|
||||
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
|
||||
|
||||
XSLT = $(REMOTE) $(RUN.JAVA) -classpath $(JvmtiOutDir) jvmtiGen
|
||||
|
||||
XML_DEPS = $(TraceSrcDir)/trace.xml $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod
|
||||
TraceXml = $(TraceSrcDir)/trace.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceevents.xml
|
||||
TraceXml = $(TraceAltSrcDir)/trace.xml
|
||||
endif
|
||||
|
||||
XML_DEPS = $(TraceXml) $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod \
|
||||
$(TraceSrcDir)/tracerelationdecls.xml $(TraceSrcDir)/traceevents.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceeventscustom.xml \
|
||||
$(TraceAltSrcDir)/traceeventtypes.xml
|
||||
endif
|
||||
|
||||
.PHONY: all clean cleanall
|
||||
@ -79,26 +89,26 @@ GENERATE_CODE= \
|
||||
$(QUIETLY) echo $(LOG_INFO) Generating $@; \
|
||||
$(XSLT) -IN $(word 1,$^) -XSL $(word 2,$^) -OUT $@
|
||||
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceXml) $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceXml) $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), false)
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
else
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceXml) $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
endif
|
||||
|
@ -9,12 +9,15 @@
|
||||
#
|
||||
fix_lines() {
|
||||
# repair bare #line directives in $1 to refer to $2
|
||||
awk < $1 > $1+ '
|
||||
# and add an override of __FILE__ with just the basename on the
|
||||
# first line of the file.
|
||||
awk < $1 > $1+ -v F2=$2 '
|
||||
BEGIN { print "#line 1 \"" F2 "\""; }
|
||||
/^#line 999999$/ {print "#line " (NR+1) " \"" F2 "\""; next}
|
||||
{print}
|
||||
' F2=$2
|
||||
'
|
||||
mv $1+ $1
|
||||
}
|
||||
fix_lines $2/$1 $3/$1
|
||||
fix_lines $2/$1 $1
|
||||
[ -f $3/$1 ] && cmp -s $2/$1 $3/$1 || \
|
||||
( [ -f $3/$1 ] && echo Updating $3/$1 ; touch $2/made-change ; mv $2/$1 $3/$1 )
|
||||
|
@ -32,9 +32,12 @@ include $(GAMMADIR)/make/altsrc.make
|
||||
|
||||
# #########################################################################
|
||||
|
||||
HAS_ALT_SRC:=$(shell if [ -d $(HS_ALT_SRC)/share/vm/trace ]; then \
|
||||
echo "true"; else echo "false";\
|
||||
fi)
|
||||
HAS_ALT_SRC := false
|
||||
ifndef OPENJDK
|
||||
ifneq ($(wildcard $(HS_ALT_SRC)/share/vm/trace), )
|
||||
HAS_ALT_SRC := true
|
||||
endif
|
||||
endif
|
||||
|
||||
TOPDIR = $(shell echo `pwd`)
|
||||
GENERATED = $(TOPDIR)/../generated
|
||||
@ -50,24 +53,30 @@ VPATH += $(Src_Dirs_V:%=%:)
|
||||
|
||||
TraceGeneratedNames = \
|
||||
traceEventClasses.hpp \
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
endif
|
||||
|
||||
|
||||
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
|
||||
|
||||
XSLT = $(REMOTE) $(RUN.JAVA) -classpath $(JvmtiOutDir) jvmtiGen
|
||||
|
||||
XML_DEPS = $(TraceSrcDir)/trace.xml $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod
|
||||
TraceXml = $(TraceSrcDir)/trace.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceevents.xml
|
||||
TraceXml = $(TraceAltSrcDir)/trace.xml
|
||||
endif
|
||||
|
||||
XML_DEPS = $(TraceXml) $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod \
|
||||
$(TraceSrcDir)/tracerelationdecls.xml $(TraceSrcDir)/traceevents.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceeventscustom.xml \
|
||||
$(TraceAltSrcDir)/traceeventtypes.xml
|
||||
endif
|
||||
|
||||
.PHONY: all clean cleanall
|
||||
@ -80,32 +89,31 @@ GENERATE_CODE= \
|
||||
$(QUIETLY) echo $(LOG_INFO) Generating $@; \
|
||||
$(XSLT) -IN $(word 1,$^) -XSL $(word 2,$^) -OUT $@
|
||||
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceXml) $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceXml) $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), false)
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
else
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceXml) $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
endif
|
||||
|
||||
# #########################################################################
|
||||
|
||||
|
||||
clean cleanall:
|
||||
rm $(TraceGeneratedFiles)
|
||||
|
@ -9,12 +9,15 @@
|
||||
#
|
||||
fix_lines() {
|
||||
# repair bare #line directives in $1 to refer to $2
|
||||
awk < $1 > $1+ '
|
||||
# and add an override of __FILE__ with just the basename on the
|
||||
# first line of the file.
|
||||
awk < $1 > $1+ -v F2=$2 '
|
||||
BEGIN { print "#line 1 \"" F2 "\""; }
|
||||
/^#line 999999$/ {print "#line " (NR+1) " \"" F2 "\""; next}
|
||||
{print}
|
||||
' F2=$2
|
||||
'
|
||||
mv $1+ $1
|
||||
}
|
||||
fix_lines $2/$1 $3/$1
|
||||
fix_lines $2/$1 $1
|
||||
[ -f $3/$1 ] && cmp -s $2/$1 $3/$1 || \
|
||||
( [ -f $3/$1 ] && echo Updating $3/$1 ; touch $2/made-change ; mv $2/$1 $3/$1 )
|
||||
|
@ -32,9 +32,12 @@ include $(GAMMADIR)/make/altsrc.make
|
||||
|
||||
# #########################################################################
|
||||
|
||||
HAS_ALT_SRC:=$(shell if [ -d $(HS_ALT_SRC)/share/vm/trace ]; then \
|
||||
echo "true"; else echo "false";\
|
||||
fi)
|
||||
HAS_ALT_SRC := false
|
||||
ifndef OPENJDK
|
||||
ifneq ($(wildcard $(HS_ALT_SRC)/share/vm/trace), )
|
||||
HAS_ALT_SRC := true
|
||||
endif
|
||||
endif
|
||||
|
||||
TOPDIR = $(shell echo `pwd`)
|
||||
GENERATED = $(TOPDIR)/../generated
|
||||
@ -50,23 +53,30 @@ VPATH += $(Src_Dirs_V:%=%:)
|
||||
|
||||
TraceGeneratedNames = \
|
||||
traceEventClasses.hpp \
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
endif
|
||||
|
||||
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
|
||||
|
||||
XSLT = $(REMOTE) $(RUN.JAVA) -classpath $(JvmtiOutDir) jvmtiGen
|
||||
|
||||
XML_DEPS = $(TraceSrcDir)/trace.xml $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod
|
||||
TraceXml = $(TraceSrcDir)/trace.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceevents.xml
|
||||
TraceXml = $(TraceAltSrcDir)/trace.xml
|
||||
endif
|
||||
|
||||
XML_DEPS = $(TraceXml) $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod \
|
||||
$(TraceSrcDir)/tracerelationdecls.xml $(TraceSrcDir)/traceevents.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceeventscustom.xml \
|
||||
$(TraceAltSrcDir)/traceeventtypes.xml
|
||||
endif
|
||||
|
||||
.PHONY: all clean cleanall
|
||||
@ -79,26 +89,26 @@ GENERATE_CODE= \
|
||||
$(QUIETLY) echo $(LOG_INFO) Generating $@; \
|
||||
$(XSLT) -IN $(word 1,$^) -XSL $(word 2,$^) -OUT $@
|
||||
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceXml) $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceXml) $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), false)
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
else
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceXml) $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
endif
|
||||
@ -107,5 +117,3 @@ endif
|
||||
|
||||
clean cleanall:
|
||||
rm $(TraceGeneratedFiles)
|
||||
|
||||
|
||||
|
@ -109,8 +109,7 @@
|
||||
JVM_GetPrimitiveArrayElement;
|
||||
JVM_GetProtectionDomain;
|
||||
JVM_GetStackAccessControlContext;
|
||||
JVM_GetStackTraceDepth;
|
||||
JVM_GetStackTraceElement;
|
||||
JVM_GetStackTraceElements;
|
||||
JVM_GetSystemPackage;
|
||||
JVM_GetSystemPackages;
|
||||
JVM_GetTemporaryDirectory;
|
||||
|
@ -9,12 +9,15 @@
|
||||
#
|
||||
fix_lines() {
|
||||
# repair bare #line directives in $1 to refer to $2
|
||||
awk < $1 > $1+ '
|
||||
# and add an override of __FILE__ with just the basename on the
|
||||
# first line of the file.
|
||||
nawk < $1 > $1+ -v F2=$2 '
|
||||
BEGIN { print "#line 1 \"" F2 "\""; }
|
||||
/^#line 999999$/ {print "#line " (NR+1) " \"" F2 "\""; next}
|
||||
{print}
|
||||
' F2=$2
|
||||
'
|
||||
mv $1+ $1
|
||||
}
|
||||
fix_lines $2/$1 $3/$1
|
||||
fix_lines $2/$1 $1
|
||||
[ -f $3/$1 ] && cmp -s $2/$1 $3/$1 || \
|
||||
( [ -f $3/$1 ] && echo Updating $3/$1 ; touch $2/made-change ; mv $2/$1 $3/$1 )
|
||||
|
@ -32,9 +32,12 @@ include $(GAMMADIR)/make/altsrc.make
|
||||
|
||||
# #########################################################################
|
||||
|
||||
HAS_ALT_SRC:=$(shell if [ -d $(HS_ALT_SRC)/share/vm/trace ]; then \
|
||||
echo "true"; else echo "false";\
|
||||
fi)
|
||||
HAS_ALT_SRC := false
|
||||
ifndef OPENJDK
|
||||
ifneq ($(wildcard $(HS_ALT_SRC)/share/vm/trace), )
|
||||
HAS_ALT_SRC := true
|
||||
endif
|
||||
endif
|
||||
|
||||
TOPDIR = $(shell echo `pwd`)
|
||||
GENERATED = $(TOPDIR)/../generated
|
||||
@ -50,23 +53,30 @@ VPATH += $(Src_Dirs_V:%=%:)
|
||||
|
||||
TraceGeneratedNames = \
|
||||
traceEventClasses.hpp \
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
TraceGeneratedNames += \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
endif
|
||||
|
||||
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
|
||||
|
||||
XSLT = $(REMOTE) $(RUN.JAVA) -classpath $(JvmtiOutDir) jvmtiGen
|
||||
|
||||
XML_DEPS = $(TraceSrcDir)/trace.xml $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod
|
||||
TraceXml = $(TraceSrcDir)/trace.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceevents.xml
|
||||
TraceXml = $(TraceAltSrcDir)/trace.xml
|
||||
endif
|
||||
|
||||
XML_DEPS = $(TraceXml) $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod \
|
||||
$(TraceSrcDir)/tracerelationdecls.xml $(TraceSrcDir)/traceevents.xml
|
||||
ifeq ($(HAS_ALT_SRC), true)
|
||||
XML_DEPS += $(TraceAltSrcDir)/traceeventscustom.xml \
|
||||
$(TraceAltSrcDir)/traceeventtypes.xml
|
||||
endif
|
||||
|
||||
.PHONY: all clean cleanall
|
||||
@ -79,26 +89,26 @@ GENERATE_CODE= \
|
||||
$(QUIETLY) echo $(LOG_INFO) Generating $@; \
|
||||
$(XSLT) -IN $(word 1,$^) -XSL $(word 2,$^) -OUT $@
|
||||
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceXml) $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceXml) $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
ifeq ($(HAS_ALT_SRC), false)
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
else
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceXml) $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceXml) $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(GENERATE_CODE)
|
||||
|
||||
endif
|
||||
|
@ -114,11 +114,15 @@ VARIANT_TEXT=Tiered
|
||||
# Define HOTSPOT_VM_DISTRO based on settings in make/openjdk_distro
|
||||
# or make/hotspot_distro.
|
||||
!ifndef HOTSPOT_VM_DISTRO
|
||||
!ifndef OPENJDK
|
||||
!if exists($(WorkSpace)\src\closed)
|
||||
!include $(WorkSpace)\make\hotspot_distro
|
||||
!else
|
||||
!include $(WorkSpace)\make\openjdk_distro
|
||||
!endif
|
||||
!else
|
||||
!include $(WorkSpace)\make\openjdk_distro
|
||||
!endif
|
||||
!endif
|
||||
|
||||
HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(ARCH_TEXT) $(VARIANT_TEXT) VM
|
||||
|
@ -55,7 +55,11 @@ COMMONSRC_REL=src
|
||||
ALTSRC_REL=src/closed # Change this to pick up alt sources from somewhere else
|
||||
|
||||
COMMONSRC=${WorkSpace}/${COMMONSRC_REL}
|
||||
ALTSRC=${WorkSpace}/${ALTSRC_REL}
|
||||
if [ "x$OPENJDK" != "xtrue" ]; then
|
||||
ALTSRC=${WorkSpace}/${ALTSRC_REL}
|
||||
else
|
||||
ALTSRC=PATH_THAT_DOES_NOT_EXIST
|
||||
fi
|
||||
|
||||
BASE_PATHS="`if [ -d ${ALTSRC}/share/vm ]; then $FIND ${ALTSRC}/share/vm ! -name vm -prune -type d \! \( -name adlc -o -name c1 -o -name gc -o -name opto -o -name shark -o -name libadt \); fi`"
|
||||
BASE_PATHS="${BASE_PATHS} ` $FIND ${COMMONSRC}/share/vm ! -name vm -prune -type d \! \( -name adlc -o -name c1 -o -name gc -o -name opto -o -name shark -o -name libadt \)`"
|
||||
@ -158,6 +162,6 @@ for e in ${Src_Files}; do
|
||||
fi
|
||||
Obj_Files="${Obj_Files}$o "
|
||||
done
|
||||
Obj_Files=`echo ${Obj_Files} | tr ' ' '\n' | sort`
|
||||
Obj_Files=`echo ${Obj_Files} | tr ' ' '\n' | LC_ALL=C sort`
|
||||
|
||||
echo Obj_Files=${Obj_Files}
|
||||
|
@ -276,3 +276,7 @@ ifneq ($(SPEC),)
|
||||
MAKE_ARGS += MT="$(subst /,\\,$(MT))"
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef OPENJDK
|
||||
MAKE_ARGS += OPENJDK="$(OPENJDK)"
|
||||
endif
|
||||
|
@ -32,15 +32,21 @@
|
||||
# #########################################################################
|
||||
|
||||
|
||||
TraceAltSrcDir = $(WorkSpace)/src/closed/share/vm/trace
|
||||
TraceSrcDir = $(WorkSpace)/src/share/vm/trace
|
||||
TraceAltSrcDir = $(WorkSpace)\src\closed\share\vm\trace
|
||||
TraceSrcDir = $(WorkSpace)\src\share\vm\trace
|
||||
|
||||
!ifndef OPENJDK
|
||||
!if EXISTS($(TraceAltSrcDir))
|
||||
HAS_ALT_SRC = true
|
||||
!endif
|
||||
!endif
|
||||
|
||||
TraceGeneratedNames = \
|
||||
traceEventClasses.hpp \
|
||||
traceEventIds.hpp \
|
||||
traceTypes.hpp
|
||||
|
||||
!if EXISTS($(TraceAltSrcDir))
|
||||
!ifdef HAS_ALT_SRC
|
||||
TraceGeneratedNames = $(TraceGeneratedNames) \
|
||||
traceRequestables.hpp \
|
||||
traceEventControl.hpp
|
||||
@ -51,22 +57,30 @@ TraceGeneratedNames = $(TraceGeneratedNames) \
|
||||
#Should be equivalent to "TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)"
|
||||
TraceGeneratedFiles = \
|
||||
$(TraceOutDir)/traceEventClasses.hpp \
|
||||
$(TraceOutDir)/traceEventIds.hpp \
|
||||
$(TraceOutDir)/traceTypes.hpp
|
||||
$(TraceOutDir)/traceEventIds.hpp \
|
||||
$(TraceOutDir)/traceTypes.hpp
|
||||
|
||||
!if EXISTS($(TraceAltSrcDir))
|
||||
!ifdef HAS_ALT_SRC
|
||||
TraceGeneratedFiles = $(TraceGeneratedFiles) \
|
||||
$(TraceOutDir)/traceRequestables.hpp \
|
||||
$(TraceOutDir)/traceRequestables.hpp \
|
||||
$(TraceOutDir)/traceEventControl.hpp
|
||||
!endif
|
||||
|
||||
XSLT = $(QUIETLY) $(REMOTE) $(RUN_JAVA) -classpath $(JvmtiOutDir) jvmtiGen
|
||||
|
||||
XML_DEPS = $(TraceSrcDir)/trace.xml $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod
|
||||
TraceXml = $(TraceSrcDir)/trace.xml
|
||||
|
||||
!if EXISTS($(TraceAltSrcDir))
|
||||
XML_DEPS = $(XML_DEPS) $(TraceAltSrcDir)/traceevents.xml
|
||||
!ifdef HAS_ALT_SRC
|
||||
TraceXml = $(TraceAltSrcDir)/trace.xml
|
||||
!endif
|
||||
|
||||
XML_DEPS = $(TraceXml) $(TraceSrcDir)/tracetypes.xml \
|
||||
$(TraceSrcDir)/trace.dtd $(TraceSrcDir)/xinclude.mod \
|
||||
$(TraceSrcDir)/tracerelationdecls.xml $(TraceSrcDir)/traceevents.xml
|
||||
|
||||
!ifdef HAS_ALT_SRC
|
||||
XML_DEPS = $(XML_DEPS) $(TraceAltSrcDir)/traceeventscustom.xml \
|
||||
$(TraceAltSrcDir)/traceeventtypes.xml
|
||||
!endif
|
||||
|
||||
.PHONY: all clean cleanall
|
||||
@ -76,33 +90,33 @@ XML_DEPS = $(XML_DEPS) $(TraceAltSrcDir)/traceevents.xml
|
||||
default::
|
||||
@if not exist $(TraceOutDir) mkdir $(TraceOutDir)
|
||||
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventIds.hpp: $(TraceSrcDir)/traceEventIds.xsl $(XML_DEPS)
|
||||
@echo Generating $@
|
||||
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceSrcDir)/traceEventIds.xsl -OUT $(TraceOutDir)/traceEventIds.hpp
|
||||
$(XSLT) -IN $(TraceXml) -XSL $(TraceSrcDir)/traceEventIds.xsl -OUT $(TraceOutDir)/traceEventIds.hpp
|
||||
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceTypes.hpp: $(TraceSrcDir)/traceTypes.xsl $(XML_DEPS)
|
||||
@echo Generating $@
|
||||
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceSrcDir)/traceTypes.xsl -OUT $(TraceOutDir)/traceTypes.hpp
|
||||
$(XSLT) -IN $(TraceXml) -XSL $(TraceSrcDir)/traceTypes.xsl -OUT $(TraceOutDir)/traceTypes.hpp
|
||||
|
||||
!if !EXISTS($(TraceAltSrcDir))
|
||||
!ifndef HAS_ALT_SRC
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
@echo Generating OpenJDK $@
|
||||
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
|
||||
$(XSLT) -IN $(TraceXml) -XSL $(TraceSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
|
||||
|
||||
!else
|
||||
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventClasses.hpp: $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
|
||||
@echo Generating AltSrc $@
|
||||
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
|
||||
$(XSLT) -IN $(TraceXml) -XSL $(TraceAltSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
|
||||
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceRequestables.hpp: $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
|
||||
@echo Generating AltSrc $@
|
||||
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceRequestables.xsl -OUT $(TraceOutDir)/traceRequestables.hpp
|
||||
$(XSLT) -IN $(TraceXml) -XSL $(TraceAltSrcDir)/traceRequestables.xsl -OUT $(TraceOutDir)/traceRequestables.hpp
|
||||
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
$(TraceOutDir)/traceEventControl.hpp: $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
|
||||
@echo Generating AltSrc $@
|
||||
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventControl.xsl -OUT $(TraceOutDir)/traceEventControl.hpp
|
||||
$(XSLT) -IN $(TraceXml) -XSL $(TraceAltSrcDir)/traceEventControl.xsl -OUT $(TraceOutDir)/traceEventControl.hpp
|
||||
|
||||
!endif
|
||||
|
||||
@ -110,5 +124,3 @@ $(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)
|
||||
|
||||
cleanall :
|
||||
rm $(TraceGeneratedFiles)
|
||||
|
||||
|
||||
|
@ -118,6 +118,7 @@ LD_FLAGS=$(LD_FLAGS) $(STACK_SIZE) /subsystem:windows /dll /base:0x8000000 $(EXP
|
||||
|
||||
CXX_INCLUDE_DIRS=/I "..\generated"
|
||||
|
||||
!ifndef OPENJDK
|
||||
!if exists($(ALTSRC)\share\vm)
|
||||
CXX_INCLUDE_DIRS=$(CXX_INCLUDE_DIRS) /I "$(ALTSRC)\share\vm"
|
||||
!endif
|
||||
@ -133,6 +134,7 @@ CXX_INCLUDE_DIRS=$(CXX_INCLUDE_DIRS) /I "$(ALTSRC)\os_cpu\windows_$(Platform_arc
|
||||
!if exists($(ALTSRC)\cpu\$(Platform_arch)\vm)
|
||||
CXX_INCLUDE_DIRS=$(CXX_INCLUDE_DIRS) /I "$(ALTSRC)\cpu\$(Platform_arch)\vm"
|
||||
!endif
|
||||
!endif # OPENJDK
|
||||
|
||||
CXX_INCLUDE_DIRS=$(CXX_INCLUDE_DIRS) \
|
||||
/I "$(COMMONSRC)\share\vm" \
|
||||
@ -187,10 +189,12 @@ VM_PATH=$(VM_PATH);$(WorkSpace)/src/os_cpu/windows_$(Platform_arch)/vm
|
||||
VM_PATH=$(VM_PATH);$(WorkSpace)/src/cpu/$(Platform_arch)/vm
|
||||
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/opto
|
||||
|
||||
!ifndef OPENJDK
|
||||
!if exists($(ALTSRC)\share\vm\jfr)
|
||||
VM_PATH=$(VM_PATH);$(ALTSRC)/share/vm/jfr
|
||||
VM_PATH=$(VM_PATH);$(ALTSRC)/share/vm/jfr/buffers
|
||||
!endif
|
||||
!endif # OPENJDK
|
||||
|
||||
VM_PATH={$(VM_PATH)}
|
||||
|
||||
@ -310,6 +314,7 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi
|
||||
{$(COMMONSRC)\os_cpu\windows_$(Platform_arch)\vm}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
!ifndef OPENJDK
|
||||
{$(ALTSRC)\share\vm\c1}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
@ -392,6 +397,13 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi
|
||||
{$(ALTSRC)\os_cpu\windows_$(Platform_arch)\vm}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
{$(ALTSRC)\share\vm\jfr}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
{$(ALTSRC)\share\vm\jfr\buffers}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
!endif
|
||||
|
||||
{..\generated\incls}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
@ -404,12 +416,6 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi
|
||||
{..\generated\tracefiles}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
{$(ALTSRC)\share\vm\jfr}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
{$(ALTSRC)\share\vm\jfr\buffers}.cpp.obj::
|
||||
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
|
||||
|
||||
default::
|
||||
|
||||
_build_pch_file.obj:
|
||||
|
@ -14242,6 +14242,48 @@ instruct cmpP_narrowOop_imm0_branch(cmpOp cmp, iRegN oop, immP0 zero, label labl
|
||||
ins_pipe(pipe_cmp_branch);
|
||||
%}
|
||||
|
||||
instruct cmpUI_imm0_branch(cmpOpU cmp, iRegIorL2I op1, immI0 op2, label labl, rFlagsRegU cr) %{
|
||||
match(If cmp (CmpU op1 op2));
|
||||
predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::eq
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::gt
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::le);
|
||||
effect(USE labl);
|
||||
|
||||
ins_cost(BRANCH_COST);
|
||||
format %{ "cbw$cmp $op1, $labl" %}
|
||||
ins_encode %{
|
||||
Label* L = $labl$$label;
|
||||
Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode;
|
||||
if (cond == Assembler::EQ || cond == Assembler::LS)
|
||||
__ cbzw($op1$$Register, *L);
|
||||
else
|
||||
__ cbnzw($op1$$Register, *L);
|
||||
%}
|
||||
ins_pipe(pipe_cmp_branch);
|
||||
%}
|
||||
|
||||
instruct cmpUL_imm0_branch(cmpOpU cmp, iRegL op1, immL0 op2, label labl, rFlagsRegU cr) %{
|
||||
match(If cmp (CmpU op1 op2));
|
||||
predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::eq
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::gt
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::le);
|
||||
effect(USE labl);
|
||||
|
||||
ins_cost(BRANCH_COST);
|
||||
format %{ "cb$cmp $op1, $labl" %}
|
||||
ins_encode %{
|
||||
Label* L = $labl$$label;
|
||||
Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode;
|
||||
if (cond == Assembler::EQ || cond == Assembler::LS)
|
||||
__ cbz($op1$$Register, *L);
|
||||
else
|
||||
__ cbnz($op1$$Register, *L);
|
||||
%}
|
||||
ins_pipe(pipe_cmp_branch);
|
||||
%}
|
||||
|
||||
// Test bit and Branch
|
||||
|
||||
// Patterns for short (< 32KiB) variants
|
||||
|
@ -1221,6 +1221,38 @@ public:
|
||||
INSN(caspal, true, true)
|
||||
#undef INSN
|
||||
|
||||
// 8.1 Atomic operations
|
||||
void lse_atomic(Register Rs, Register Rt, Register Rn,
|
||||
enum operand_size sz, int op1, int op2, bool a, bool r) {
|
||||
starti;
|
||||
f(sz, 31, 30), f(0b111000, 29, 24), f(a, 23), f(r, 22), f(1, 21);
|
||||
rf(Rs, 16), f(op1, 15), f(op2, 14, 12), f(0, 11, 10), rf(Rn, 5), zrf(Rt, 0);
|
||||
}
|
||||
|
||||
#define INSN(NAME, NAME_A, NAME_L, NAME_AL, op1, op2) \
|
||||
void NAME(operand_size sz, Register Rs, Register Rt, Register Rn) { \
|
||||
lse_atomic(Rs, Rt, Rn, sz, op1, op2, false, false); \
|
||||
} \
|
||||
void NAME_A(operand_size sz, Register Rs, Register Rt, Register Rn) { \
|
||||
lse_atomic(Rs, Rt, Rn, sz, op1, op2, true, false); \
|
||||
} \
|
||||
void NAME_L(operand_size sz, Register Rs, Register Rt, Register Rn) { \
|
||||
lse_atomic(Rs, Rt, Rn, sz, op1, op2, false, true); \
|
||||
} \
|
||||
void NAME_AL(operand_size sz, Register Rs, Register Rt, Register Rn) {\
|
||||
lse_atomic(Rs, Rt, Rn, sz, op1, op2, true, true); \
|
||||
}
|
||||
INSN(ldadd, ldadda, ldaddl, ldaddal, 0, 0b000);
|
||||
INSN(ldbic, ldbica, ldbicl, ldbical, 0, 0b001);
|
||||
INSN(ldeor, ldeora, ldeorl, ldeoral, 0, 0b010);
|
||||
INSN(ldorr, ldorra, ldorrl, ldorral, 0, 0b011);
|
||||
INSN(ldsmax, ldsmaxa, ldsmaxl, ldsmaxal, 0, 0b100);
|
||||
INSN(ldsmin, ldsmina, ldsminl, ldsminal, 0, 0b101);
|
||||
INSN(ldumax, ldumaxa, ldumaxl, ldumaxal, 0, 0b110);
|
||||
INSN(ldumin, ldumina, lduminl, lduminal, 0, 0b111);
|
||||
INSN(swp, swpa, swpl, swpal, 1, 0b000);
|
||||
#undef INSN
|
||||
|
||||
// Load register (literal)
|
||||
#define INSN(NAME, opc, V) \
|
||||
void NAME(Register Rt, address dest) { \
|
||||
|
@ -1556,54 +1556,14 @@ void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) {
|
||||
}
|
||||
|
||||
void LIR_Assembler::casw(Register addr, Register newval, Register cmpval) {
|
||||
if (UseLSE) {
|
||||
__ mov(rscratch1, cmpval);
|
||||
__ casal(Assembler::word, rscratch1, newval, addr);
|
||||
__ cmpw(rscratch1, cmpval);
|
||||
__ cset(rscratch1, Assembler::NE);
|
||||
} else {
|
||||
Label retry_load, nope;
|
||||
// flush and load exclusive from the memory location
|
||||
// and fail if it is not what we expect
|
||||
__ prfm(Address(addr), PSTL1STRM);
|
||||
__ bind(retry_load);
|
||||
__ ldaxrw(rscratch1, addr);
|
||||
__ cmpw(rscratch1, cmpval);
|
||||
__ cset(rscratch1, Assembler::NE);
|
||||
__ br(Assembler::NE, nope);
|
||||
// if we store+flush with no intervening write rscratch1 wil be zero
|
||||
__ stlxrw(rscratch1, newval, addr);
|
||||
// retry so we only ever return after a load fails to compare
|
||||
// ensures we don't return a stale value after a failed write.
|
||||
__ cbnzw(rscratch1, retry_load);
|
||||
__ bind(nope);
|
||||
}
|
||||
__ cmpxchg(addr, cmpval, newval, Assembler::word, /* acquire*/ true, /* release*/ true, rscratch1);
|
||||
__ cset(rscratch1, Assembler::NE);
|
||||
__ membar(__ AnyAny);
|
||||
}
|
||||
|
||||
void LIR_Assembler::casl(Register addr, Register newval, Register cmpval) {
|
||||
if (UseLSE) {
|
||||
__ mov(rscratch1, cmpval);
|
||||
__ casal(Assembler::xword, rscratch1, newval, addr);
|
||||
__ cmp(rscratch1, cmpval);
|
||||
__ cset(rscratch1, Assembler::NE);
|
||||
} else {
|
||||
Label retry_load, nope;
|
||||
// flush and load exclusive from the memory location
|
||||
// and fail if it is not what we expect
|
||||
__ prfm(Address(addr), PSTL1STRM);
|
||||
__ bind(retry_load);
|
||||
__ ldaxr(rscratch1, addr);
|
||||
__ cmp(rscratch1, cmpval);
|
||||
__ cset(rscratch1, Assembler::NE);
|
||||
__ br(Assembler::NE, nope);
|
||||
// if we store+flush with no intervening write rscratch1 wil be zero
|
||||
__ stlxr(rscratch1, newval, addr);
|
||||
// retry so we only ever return after a load fails to compare
|
||||
// ensures we don't return a stale value after a failed write.
|
||||
__ cbnz(rscratch1, retry_load);
|
||||
__ bind(nope);
|
||||
}
|
||||
__ cmpxchg(addr, cmpval, newval, Assembler::xword, /* acquire*/ true, /* release*/ true, rscratch1);
|
||||
__ cset(rscratch1, Assembler::NE);
|
||||
__ membar(__ AnyAny);
|
||||
}
|
||||
|
||||
@ -3121,38 +3081,32 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr
|
||||
BasicType type = src->type();
|
||||
bool is_oop = type == T_OBJECT || type == T_ARRAY;
|
||||
|
||||
void (MacroAssembler::* lda)(Register Rd, Register Ra);
|
||||
void (MacroAssembler::* add)(Register Rd, Register Rn, RegisterOrConstant increment);
|
||||
void (MacroAssembler::* stl)(Register Rs, Register Rt, Register Rn);
|
||||
void (MacroAssembler::* add)(Register prev, RegisterOrConstant incr, Register addr);
|
||||
void (MacroAssembler::* xchg)(Register prev, Register newv, Register addr);
|
||||
|
||||
switch(type) {
|
||||
case T_INT:
|
||||
lda = &MacroAssembler::ldaxrw;
|
||||
add = &MacroAssembler::addw;
|
||||
stl = &MacroAssembler::stlxrw;
|
||||
xchg = &MacroAssembler::atomic_xchgalw;
|
||||
add = &MacroAssembler::atomic_addalw;
|
||||
break;
|
||||
case T_LONG:
|
||||
lda = &MacroAssembler::ldaxr;
|
||||
add = &MacroAssembler::add;
|
||||
stl = &MacroAssembler::stlxr;
|
||||
xchg = &MacroAssembler::atomic_xchgal;
|
||||
add = &MacroAssembler::atomic_addal;
|
||||
break;
|
||||
case T_OBJECT:
|
||||
case T_ARRAY:
|
||||
if (UseCompressedOops) {
|
||||
lda = &MacroAssembler::ldaxrw;
|
||||
add = &MacroAssembler::addw;
|
||||
stl = &MacroAssembler::stlxrw;
|
||||
xchg = &MacroAssembler::atomic_xchgalw;
|
||||
add = &MacroAssembler::atomic_addalw;
|
||||
} else {
|
||||
lda = &MacroAssembler::ldaxr;
|
||||
add = &MacroAssembler::add;
|
||||
stl = &MacroAssembler::stlxr;
|
||||
xchg = &MacroAssembler::atomic_xchgal;
|
||||
add = &MacroAssembler::atomic_addal;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
lda = &MacroAssembler::ldaxr;
|
||||
add = &MacroAssembler::add;
|
||||
stl = &MacroAssembler::stlxr; // unreachable
|
||||
xchg = &MacroAssembler::atomic_xchgal;
|
||||
add = &MacroAssembler::atomic_addal; // unreachable
|
||||
}
|
||||
|
||||
switch (code) {
|
||||
@ -3170,14 +3124,8 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr
|
||||
assert_different_registers(inc.as_register(), dst, addr.base(), tmp,
|
||||
rscratch1, rscratch2);
|
||||
}
|
||||
Label again;
|
||||
__ lea(tmp, addr);
|
||||
__ prfm(Address(tmp), PSTL1STRM);
|
||||
__ bind(again);
|
||||
(_masm->*lda)(dst, tmp);
|
||||
(_masm->*add)(rscratch1, dst, inc);
|
||||
(_masm->*stl)(rscratch2, rscratch1, tmp);
|
||||
__ cbnzw(rscratch2, again);
|
||||
(_masm->*add)(dst, inc, tmp);
|
||||
break;
|
||||
}
|
||||
case lir_xchg:
|
||||
@ -3186,17 +3134,12 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr
|
||||
Register obj = as_reg(data);
|
||||
Register dst = as_reg(dest);
|
||||
if (is_oop && UseCompressedOops) {
|
||||
__ encode_heap_oop(rscratch1, obj);
|
||||
obj = rscratch1;
|
||||
__ encode_heap_oop(rscratch2, obj);
|
||||
obj = rscratch2;
|
||||
}
|
||||
assert_different_registers(obj, addr.base(), tmp, rscratch2, dst);
|
||||
Label again;
|
||||
assert_different_registers(obj, addr.base(), tmp, rscratch1, dst);
|
||||
__ lea(tmp, addr);
|
||||
__ prfm(Address(tmp), PSTL1STRM);
|
||||
__ bind(again);
|
||||
(_masm->*lda)(dst, tmp);
|
||||
(_masm->*stl)(rscratch2, obj, tmp);
|
||||
__ cbnzw(rscratch2, again);
|
||||
(_masm->*xchg)(dst, obj, tmp);
|
||||
if (is_oop && UseCompressedOops) {
|
||||
__ decode_heap_oop(dst);
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ define_pd_global(intx, InteriorEntryAlignment, 16);
|
||||
define_pd_global(intx, NewSizeThreadIncrease, ScaleForWordSize(4*K));
|
||||
define_pd_global(intx, LoopUnrollLimit, 60);
|
||||
define_pd_global(intx, LoopPercentProfileLimit, 10);
|
||||
define_pd_global(intx, PostLoopMultiversioning, false);
|
||||
// InitialCodeCacheSize derived from specjbb2000 run.
|
||||
define_pd_global(intx, InitialCodeCacheSize, 2496*K); // Integral multiple of CodeCacheExpansionSize
|
||||
define_pd_global(intx, CodeCacheExpansionSize, 64*K);
|
||||
|
@ -1637,6 +1637,11 @@ Address MacroAssembler::form_address(Register Rd, Register base, long byte_offse
|
||||
}
|
||||
|
||||
void MacroAssembler::atomic_incw(Register counter_addr, Register tmp, Register tmp2) {
|
||||
if (UseLSE) {
|
||||
mov(tmp, 1);
|
||||
ldadd(Assembler::word, tmp, zr, counter_addr);
|
||||
return;
|
||||
}
|
||||
Label retry_load;
|
||||
prfm(Address(counter_addr), PSTL1STRM);
|
||||
bind(retry_load);
|
||||
@ -2172,8 +2177,18 @@ static bool different(Register a, RegisterOrConstant b, Register c) {
|
||||
return a != b.as_register() && a != c && b.as_register() != c;
|
||||
}
|
||||
|
||||
#define ATOMIC_OP(LDXR, OP, IOP, STXR) \
|
||||
void MacroAssembler::atomic_##OP(Register prev, RegisterOrConstant incr, Register addr) { \
|
||||
#define ATOMIC_OP(NAME, LDXR, OP, IOP, AOP, STXR, sz) \
|
||||
void MacroAssembler::atomic_##NAME(Register prev, RegisterOrConstant incr, Register addr) { \
|
||||
if (UseLSE) { \
|
||||
prev = prev->is_valid() ? prev : zr; \
|
||||
if (incr.is_register()) { \
|
||||
AOP(sz, incr.as_register(), prev, addr); \
|
||||
} else { \
|
||||
mov(rscratch2, incr.as_constant()); \
|
||||
AOP(sz, rscratch2, prev, addr); \
|
||||
} \
|
||||
return; \
|
||||
} \
|
||||
Register result = rscratch2; \
|
||||
if (prev->is_valid()) \
|
||||
result = different(prev, incr, addr) ? prev : rscratch2; \
|
||||
@ -2190,13 +2205,20 @@ void MacroAssembler::atomic_##OP(Register prev, RegisterOrConstant incr, Registe
|
||||
} \
|
||||
}
|
||||
|
||||
ATOMIC_OP(ldxr, add, sub, stxr)
|
||||
ATOMIC_OP(ldxrw, addw, subw, stxrw)
|
||||
ATOMIC_OP(add, ldxr, add, sub, ldadd, stxr, Assembler::xword)
|
||||
ATOMIC_OP(addw, ldxrw, addw, subw, ldadd, stxrw, Assembler::word)
|
||||
ATOMIC_OP(addal, ldaxr, add, sub, ldaddal, stlxr, Assembler::xword)
|
||||
ATOMIC_OP(addalw, ldaxrw, addw, subw, ldaddal, stlxrw, Assembler::word)
|
||||
|
||||
#undef ATOMIC_OP
|
||||
|
||||
#define ATOMIC_XCHG(OP, LDXR, STXR) \
|
||||
#define ATOMIC_XCHG(OP, AOP, LDXR, STXR, sz) \
|
||||
void MacroAssembler::atomic_##OP(Register prev, Register newv, Register addr) { \
|
||||
if (UseLSE) { \
|
||||
prev = prev->is_valid() ? prev : zr; \
|
||||
AOP(sz, newv, prev, addr); \
|
||||
return; \
|
||||
} \
|
||||
Register result = rscratch2; \
|
||||
if (prev->is_valid()) \
|
||||
result = different(prev, newv, addr) ? prev : rscratch2; \
|
||||
@ -2211,8 +2233,10 @@ void MacroAssembler::atomic_##OP(Register prev, Register newv, Register addr) {
|
||||
mov(prev, result); \
|
||||
}
|
||||
|
||||
ATOMIC_XCHG(xchg, ldxr, stxr)
|
||||
ATOMIC_XCHG(xchgw, ldxrw, stxrw)
|
||||
ATOMIC_XCHG(xchg, swp, ldxr, stxr, Assembler::xword)
|
||||
ATOMIC_XCHG(xchgw, swp, ldxrw, stxrw, Assembler::word)
|
||||
ATOMIC_XCHG(xchgal, swpal, ldaxr, stlxr, Assembler::xword)
|
||||
ATOMIC_XCHG(xchgalw, swpal, ldaxrw, stlxrw, Assembler::word)
|
||||
|
||||
#undef ATOMIC_XCHG
|
||||
|
||||
|
@ -957,9 +957,13 @@ public:
|
||||
|
||||
void atomic_add(Register prev, RegisterOrConstant incr, Register addr);
|
||||
void atomic_addw(Register prev, RegisterOrConstant incr, Register addr);
|
||||
void atomic_addal(Register prev, RegisterOrConstant incr, Register addr);
|
||||
void atomic_addalw(Register prev, RegisterOrConstant incr, Register addr);
|
||||
|
||||
void atomic_xchg(Register prev, Register newv, Register addr);
|
||||
void atomic_xchgw(Register prev, Register newv, Register addr);
|
||||
void atomic_xchgal(Register prev, Register newv, Register addr);
|
||||
void atomic_xchgalw(Register prev, Register newv, Register addr);
|
||||
|
||||
void orptr(Address adr, RegisterOrConstant src) {
|
||||
ldr(rscratch2, adr);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2016, 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.
|
||||
*
|
||||
@ -31,6 +31,7 @@
|
||||
#include "code/vtableStubs.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "interpreter/interp_masm.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/compiledICHolder.hpp"
|
||||
#include "prims/jvmtiRedefineClassesTrace.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
@ -1711,20 +1711,42 @@ class StubGenerator: public StubCodeGenerator {
|
||||
// to a long, int, short, or byte copy loop.
|
||||
//
|
||||
address generate_unsafe_copy(const char *name,
|
||||
address byte_copy_entry) {
|
||||
#ifdef PRODUCT
|
||||
return StubRoutines::_jbyte_arraycopy;
|
||||
#else
|
||||
address byte_copy_entry,
|
||||
address short_copy_entry,
|
||||
address int_copy_entry,
|
||||
address long_copy_entry) {
|
||||
Label L_long_aligned, L_int_aligned, L_short_aligned;
|
||||
Register s = c_rarg0, d = c_rarg1, count = c_rarg2;
|
||||
|
||||
__ align(CodeEntryAlignment);
|
||||
StubCodeMark mark(this, "StubRoutines", name);
|
||||
address start = __ pc();
|
||||
__ enter(); // required for proper stackwalking of RuntimeStub frame
|
||||
|
||||
// bump this on entry, not on exit:
|
||||
__ lea(rscratch2, ExternalAddress((address)&SharedRuntime::_unsafe_array_copy_ctr));
|
||||
__ incrementw(Address(rscratch2));
|
||||
inc_counter_np(SharedRuntime::_unsafe_array_copy_ctr);
|
||||
|
||||
__ orr(rscratch1, s, d);
|
||||
__ orr(rscratch1, rscratch1, count);
|
||||
|
||||
__ andr(rscratch1, rscratch1, BytesPerLong-1);
|
||||
__ cbz(rscratch1, L_long_aligned);
|
||||
__ andr(rscratch1, rscratch1, BytesPerInt-1);
|
||||
__ cbz(rscratch1, L_int_aligned);
|
||||
__ tbz(rscratch1, 0, L_short_aligned);
|
||||
__ b(RuntimeAddress(byte_copy_entry));
|
||||
|
||||
__ BIND(L_short_aligned);
|
||||
__ lsr(count, count, LogBytesPerShort); // size => short_count
|
||||
__ b(RuntimeAddress(short_copy_entry));
|
||||
__ BIND(L_int_aligned);
|
||||
__ lsr(count, count, LogBytesPerInt); // size => int_count
|
||||
__ b(RuntimeAddress(int_copy_entry));
|
||||
__ BIND(L_long_aligned);
|
||||
__ lsr(count, count, LogBytesPerLong); // size => long_count
|
||||
__ b(RuntimeAddress(long_copy_entry));
|
||||
|
||||
return start;
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
@ -2090,7 +2112,10 @@ class StubGenerator: public StubCodeGenerator {
|
||||
/*dest_uninitialized*/true);
|
||||
|
||||
StubRoutines::_unsafe_arraycopy = generate_unsafe_copy("unsafe_arraycopy",
|
||||
entry_jbyte_arraycopy);
|
||||
entry_jbyte_arraycopy,
|
||||
entry_jshort_arraycopy,
|
||||
entry_jint_arraycopy,
|
||||
entry_jlong_arraycopy);
|
||||
|
||||
StubRoutines::_generic_arraycopy = generate_generic_copy("generic_arraycopy",
|
||||
entry_jbyte_arraycopy,
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "interpreter/templateInterpreterGenerator.hpp"
|
||||
#include "interpreter/templateTable.hpp"
|
||||
#include "interpreter/bytecodeTracer.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/arrayOop.hpp"
|
||||
#include "oops/methodData.hpp"
|
||||
#include "oops/method.hpp"
|
||||
@ -1967,7 +1968,7 @@ address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
|
||||
__ push(RegSet::range(r0, r15), sp);
|
||||
__ mov(c_rarg2, r0); // Pass itos
|
||||
__ call_VM(noreg,
|
||||
CAST_FROM_FN_PTR(address, SharedRuntime::trace_bytecode),
|
||||
CAST_FROM_FN_PTR(address, InterpreterRuntime::trace_bytecode),
|
||||
c_rarg1, c_rarg2, c_rarg3);
|
||||
__ pop(RegSet::range(r0, r15), sp);
|
||||
__ pop(state);
|
||||
@ -1982,14 +1983,8 @@ void TemplateInterpreterGenerator::count_bytecode() {
|
||||
__ push(rscratch1);
|
||||
__ push(rscratch2);
|
||||
__ push(rscratch3);
|
||||
Label L;
|
||||
__ mov(rscratch2, (address) &BytecodeCounter::_counter_value);
|
||||
__ prfm(Address(rscratch2), PSTL1STRM);
|
||||
__ bind(L);
|
||||
__ ldxr(rscratch1, rscratch2);
|
||||
__ add(rscratch1, rscratch1, 1);
|
||||
__ stxr(rscratch3, rscratch1, rscratch2);
|
||||
__ cbnzw(rscratch3, L);
|
||||
__ mov(rscratch3, (address) &BytecodeCounter::_counter_value);
|
||||
__ atomic_add(noreg, 1, rscratch3);
|
||||
__ pop(rscratch3);
|
||||
__ pop(rscratch2);
|
||||
__ pop(rscratch1);
|
||||
|
@ -73,6 +73,7 @@ public:
|
||||
CPU_SHA1 = (1<<5),
|
||||
CPU_SHA2 = (1<<6),
|
||||
CPU_CRC32 = (1<<7),
|
||||
CPU_LSE = (1<<8),
|
||||
CPU_A53MAC = (1 << 30),
|
||||
CPU_DMB_ATOMICS = (1 << 31),
|
||||
};
|
||||
|
@ -624,6 +624,7 @@ class Assembler : public AbstractAssembler {
|
||||
VNOR_OPCODE = (4u << OPCODE_SHIFT | 1284u ),
|
||||
VOR_OPCODE = (4u << OPCODE_SHIFT | 1156u ),
|
||||
VXOR_OPCODE = (4u << OPCODE_SHIFT | 1220u ),
|
||||
VRLD_OPCODE = (4u << OPCODE_SHIFT | 196u ),
|
||||
VRLB_OPCODE = (4u << OPCODE_SHIFT | 4u ),
|
||||
VRLW_OPCODE = (4u << OPCODE_SHIFT | 132u ),
|
||||
VRLH_OPCODE = (4u << OPCODE_SHIFT | 68u ),
|
||||
@ -2047,6 +2048,7 @@ class Assembler : public AbstractAssembler {
|
||||
inline void vnor( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
inline void vor( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
inline void vxor( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
inline void vrld( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
inline void vrlb( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
inline void vrlw( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
inline void vrlh( VectorRegister d, VectorRegister a, VectorRegister b);
|
||||
|
@ -839,6 +839,7 @@ inline void Assembler::vandc( VectorRegister d, VectorRegister a, VectorRegist
|
||||
inline void Assembler::vnor( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VNOR_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
inline void Assembler::vor( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VOR_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
inline void Assembler::vxor( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VXOR_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
inline void Assembler::vrld( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VRLD_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
inline void Assembler::vrlb( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VRLB_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
inline void Assembler::vrlw( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VRLW_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
inline void Assembler::vrlh( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VRLH_OPCODE | vrt(d) | vra(a) | vrb(b)); }
|
||||
|
@ -55,6 +55,7 @@ define_pd_global(bool, UseTLAB, true);
|
||||
define_pd_global(bool, ResizeTLAB, true);
|
||||
define_pd_global(intx, LoopUnrollLimit, 60);
|
||||
define_pd_global(intx, LoopPercentProfileLimit, 10);
|
||||
define_pd_global(intx, PostLoopMultiversioning, false);
|
||||
|
||||
// Peephole and CISC spilling both break the graph, and so make the
|
||||
// scheduler sick.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -28,6 +28,7 @@
|
||||
#include "classfile/javaClasses.inline.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "prims/methodHandles.hpp"
|
||||
|
||||
#define __ _masm->
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -31,6 +31,7 @@
|
||||
#include "code/vmreg.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "interpreter/interp_masm.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "nativeInst_ppc.hpp"
|
||||
#include "opto/runtime.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "frame_ppc.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "interpreter/interp_masm.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/compiledICHolder.hpp"
|
||||
#include "prims/jvmtiRedefineClassesTrace.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
@ -2417,6 +2417,433 @@ class StubGenerator: public StubCodeGenerator {
|
||||
return start;
|
||||
}
|
||||
|
||||
// Arguments for generated stub (little endian only):
|
||||
// R3_ARG1 - source byte array address
|
||||
// R4_ARG2 - destination byte array address
|
||||
// R5_ARG3 - round key array
|
||||
address generate_aescrypt_encryptBlock() {
|
||||
assert(UseAES, "need AES instructions and misaligned SSE support");
|
||||
StubCodeMark mark(this, "StubRoutines", "aescrypt_encryptBlock");
|
||||
|
||||
address start = __ function_entry();
|
||||
|
||||
Label L_doLast;
|
||||
|
||||
Register from = R3_ARG1; // source array address
|
||||
Register to = R4_ARG2; // destination array address
|
||||
Register key = R5_ARG3; // round key array
|
||||
|
||||
Register keylen = R8;
|
||||
Register temp = R9;
|
||||
Register keypos = R10;
|
||||
Register hex = R11;
|
||||
Register fifteen = R12;
|
||||
|
||||
VectorRegister vRet = VR0;
|
||||
|
||||
VectorRegister vKey1 = VR1;
|
||||
VectorRegister vKey2 = VR2;
|
||||
VectorRegister vKey3 = VR3;
|
||||
VectorRegister vKey4 = VR4;
|
||||
|
||||
VectorRegister fromPerm = VR5;
|
||||
VectorRegister keyPerm = VR6;
|
||||
VectorRegister toPerm = VR7;
|
||||
VectorRegister fSplt = VR8;
|
||||
|
||||
VectorRegister vTmp1 = VR9;
|
||||
VectorRegister vTmp2 = VR10;
|
||||
VectorRegister vTmp3 = VR11;
|
||||
VectorRegister vTmp4 = VR12;
|
||||
|
||||
VectorRegister vLow = VR13;
|
||||
VectorRegister vHigh = VR14;
|
||||
|
||||
__ li (hex, 16);
|
||||
__ li (fifteen, 15);
|
||||
__ vspltisb (fSplt, 0x0f);
|
||||
|
||||
// load unaligned from[0-15] to vsRet
|
||||
__ lvx (vRet, from);
|
||||
__ lvx (vTmp1, fifteen, from);
|
||||
__ lvsl (fromPerm, from);
|
||||
__ vxor (fromPerm, fromPerm, fSplt);
|
||||
__ vperm (vRet, vRet, vTmp1, fromPerm);
|
||||
|
||||
// load keylen (44 or 52 or 60)
|
||||
__ lwz (keylen, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT), key);
|
||||
|
||||
// to load keys
|
||||
__ lvsr (keyPerm, key);
|
||||
__ vxor (vTmp2, vTmp2, vTmp2);
|
||||
__ vspltisb (vTmp2, -16);
|
||||
__ vrld (keyPerm, keyPerm, vTmp2);
|
||||
__ vrld (keyPerm, keyPerm, vTmp2);
|
||||
__ vsldoi (keyPerm, keyPerm, keyPerm, -8);
|
||||
|
||||
// load the 1st round key to vKey1
|
||||
__ li (keypos, 0);
|
||||
__ lvx (vKey1, keypos, key);
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey1, vTmp1, vKey1, keyPerm);
|
||||
|
||||
// 1st round
|
||||
__ vxor (vRet, vRet, vKey1);
|
||||
|
||||
// load the 2nd round key to vKey1
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 3rd round key to vKey2
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 4th round key to vKey3
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey3, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 5th round key to vKey4
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey4, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// 2nd - 5th rounds
|
||||
__ vcipher (vRet, vRet, vKey1);
|
||||
__ vcipher (vRet, vRet, vKey2);
|
||||
__ vcipher (vRet, vRet, vKey3);
|
||||
__ vcipher (vRet, vRet, vKey4);
|
||||
|
||||
// load the 6th round key to vKey1
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 7th round key to vKey2
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 8th round key to vKey3
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey3, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 9th round key to vKey4
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey4, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// 6th - 9th rounds
|
||||
__ vcipher (vRet, vRet, vKey1);
|
||||
__ vcipher (vRet, vRet, vKey2);
|
||||
__ vcipher (vRet, vRet, vKey3);
|
||||
__ vcipher (vRet, vRet, vKey4);
|
||||
|
||||
// load the 10th round key to vKey1
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 11th round key to vKey2
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// if all round keys are loaded, skip next 4 rounds
|
||||
__ cmpwi (CCR0, keylen, 44);
|
||||
__ beq (CCR0, L_doLast);
|
||||
|
||||
// 10th - 11th rounds
|
||||
__ vcipher (vRet, vRet, vKey1);
|
||||
__ vcipher (vRet, vRet, vKey2);
|
||||
|
||||
// load the 12th round key to vKey1
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 13th round key to vKey2
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// if all round keys are loaded, skip next 2 rounds
|
||||
__ cmpwi (CCR0, keylen, 52);
|
||||
__ beq (CCR0, L_doLast);
|
||||
|
||||
// 12th - 13th rounds
|
||||
__ vcipher (vRet, vRet, vKey1);
|
||||
__ vcipher (vRet, vRet, vKey2);
|
||||
|
||||
// load the 14th round key to vKey1
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 15th round key to vKey2
|
||||
__ addi (keypos, keypos, 16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
__ bind(L_doLast);
|
||||
|
||||
// last two rounds
|
||||
__ vcipher (vRet, vRet, vKey1);
|
||||
__ vcipherlast (vRet, vRet, vKey2);
|
||||
|
||||
__ neg (temp, to);
|
||||
__ lvsr (toPerm, temp);
|
||||
__ vspltisb (vTmp2, -1);
|
||||
__ vxor (vTmp1, vTmp1, vTmp1);
|
||||
__ vperm (vTmp2, vTmp2, vTmp1, toPerm);
|
||||
__ vxor (toPerm, toPerm, fSplt);
|
||||
__ lvx (vTmp1, to);
|
||||
__ vperm (vRet, vRet, vRet, toPerm);
|
||||
__ vsel (vTmp1, vTmp1, vRet, vTmp2);
|
||||
__ lvx (vTmp4, fifteen, to);
|
||||
__ stvx (vTmp1, to);
|
||||
__ vsel (vRet, vRet, vTmp4, vTmp2);
|
||||
__ stvx (vRet, fifteen, to);
|
||||
|
||||
__ blr();
|
||||
return start;
|
||||
}
|
||||
|
||||
// Arguments for generated stub (little endian only):
|
||||
// R3_ARG1 - source byte array address
|
||||
// R4_ARG2 - destination byte array address
|
||||
// R5_ARG3 - K (key) in little endian int array
|
||||
address generate_aescrypt_decryptBlock() {
|
||||
assert(UseAES, "need AES instructions and misaligned SSE support");
|
||||
StubCodeMark mark(this, "StubRoutines", "aescrypt_decryptBlock");
|
||||
|
||||
address start = __ function_entry();
|
||||
|
||||
Label L_doLast;
|
||||
Label L_do44;
|
||||
Label L_do52;
|
||||
Label L_do60;
|
||||
|
||||
Register from = R3_ARG1; // source array address
|
||||
Register to = R4_ARG2; // destination array address
|
||||
Register key = R5_ARG3; // round key array
|
||||
|
||||
Register keylen = R8;
|
||||
Register temp = R9;
|
||||
Register keypos = R10;
|
||||
Register hex = R11;
|
||||
Register fifteen = R12;
|
||||
|
||||
VectorRegister vRet = VR0;
|
||||
|
||||
VectorRegister vKey1 = VR1;
|
||||
VectorRegister vKey2 = VR2;
|
||||
VectorRegister vKey3 = VR3;
|
||||
VectorRegister vKey4 = VR4;
|
||||
VectorRegister vKey5 = VR5;
|
||||
|
||||
VectorRegister fromPerm = VR6;
|
||||
VectorRegister keyPerm = VR7;
|
||||
VectorRegister toPerm = VR8;
|
||||
VectorRegister fSplt = VR9;
|
||||
|
||||
VectorRegister vTmp1 = VR10;
|
||||
VectorRegister vTmp2 = VR11;
|
||||
VectorRegister vTmp3 = VR12;
|
||||
VectorRegister vTmp4 = VR13;
|
||||
|
||||
VectorRegister vLow = VR14;
|
||||
VectorRegister vHigh = VR15;
|
||||
|
||||
__ li (hex, 16);
|
||||
__ li (fifteen, 15);
|
||||
__ vspltisb (fSplt, 0x0f);
|
||||
|
||||
// load unaligned from[0-15] to vsRet
|
||||
__ lvx (vRet, from);
|
||||
__ lvx (vTmp1, fifteen, from);
|
||||
__ lvsl (fromPerm, from);
|
||||
__ vxor (fromPerm, fromPerm, fSplt);
|
||||
__ vperm (vRet, vRet, vTmp1, fromPerm); // align [and byte swap in LE]
|
||||
|
||||
// load keylen (44 or 52 or 60)
|
||||
__ lwz (keylen, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT), key);
|
||||
|
||||
// to load keys
|
||||
__ lvsr (keyPerm, key);
|
||||
__ vxor (vTmp2, vTmp2, vTmp2);
|
||||
__ vspltisb (vTmp2, -16);
|
||||
__ vrld (keyPerm, keyPerm, vTmp2);
|
||||
__ vrld (keyPerm, keyPerm, vTmp2);
|
||||
__ vsldoi (keyPerm, keyPerm, keyPerm, -8);
|
||||
|
||||
__ cmpwi (CCR0, keylen, 44);
|
||||
__ beq (CCR0, L_do44);
|
||||
|
||||
__ cmpwi (CCR0, keylen, 52);
|
||||
__ beq (CCR0, L_do52);
|
||||
|
||||
// load the 15th round key to vKey11
|
||||
__ li (keypos, 240);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 14th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 13th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey3, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 12th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey4, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 11th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey5, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// 1st - 5th rounds
|
||||
__ vxor (vRet, vRet, vKey1);
|
||||
__ vncipher (vRet, vRet, vKey2);
|
||||
__ vncipher (vRet, vRet, vKey3);
|
||||
__ vncipher (vRet, vRet, vKey4);
|
||||
__ vncipher (vRet, vRet, vKey5);
|
||||
|
||||
__ b (L_doLast);
|
||||
|
||||
__ bind (L_do52);
|
||||
|
||||
// load the 13th round key to vKey11
|
||||
__ li (keypos, 208);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 12th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 11th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey3, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// 1st - 3rd rounds
|
||||
__ vxor (vRet, vRet, vKey1);
|
||||
__ vncipher (vRet, vRet, vKey2);
|
||||
__ vncipher (vRet, vRet, vKey3);
|
||||
|
||||
__ b (L_doLast);
|
||||
|
||||
__ bind (L_do44);
|
||||
|
||||
// load the 11th round key to vKey11
|
||||
__ li (keypos, 176);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// 1st round
|
||||
__ vxor (vRet, vRet, vKey1);
|
||||
|
||||
__ bind (L_doLast);
|
||||
|
||||
// load the 10th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey1, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 9th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey2, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 8th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey3, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 7th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey4, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 6th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey5, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// last 10th - 6th rounds
|
||||
__ vncipher (vRet, vRet, vKey1);
|
||||
__ vncipher (vRet, vRet, vKey2);
|
||||
__ vncipher (vRet, vRet, vKey3);
|
||||
__ vncipher (vRet, vRet, vKey4);
|
||||
__ vncipher (vRet, vRet, vKey5);
|
||||
|
||||
// load the 5th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey1, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 4th round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey2, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 3rd round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey3, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// load the 2nd round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp1, keypos, key);
|
||||
__ vperm (vKey4, vTmp2, vTmp1, keyPerm);
|
||||
|
||||
// load the 1st round key to vKey10
|
||||
__ addi (keypos, keypos, -16);
|
||||
__ lvx (vTmp2, keypos, key);
|
||||
__ vperm (vKey5, vTmp1, vTmp2, keyPerm);
|
||||
|
||||
// last 5th - 1th rounds
|
||||
__ vncipher (vRet, vRet, vKey1);
|
||||
__ vncipher (vRet, vRet, vKey2);
|
||||
__ vncipher (vRet, vRet, vKey3);
|
||||
__ vncipher (vRet, vRet, vKey4);
|
||||
__ vncipherlast (vRet, vRet, vKey5);
|
||||
|
||||
__ neg (temp, to);
|
||||
__ lvsr (toPerm, temp);
|
||||
__ vspltisb (vTmp2, -1);
|
||||
__ vxor (vTmp1, vTmp1, vTmp1);
|
||||
__ vperm (vTmp2, vTmp2, vTmp1, toPerm);
|
||||
__ vxor (toPerm, toPerm, fSplt);
|
||||
__ lvx (vTmp1, to);
|
||||
__ vperm (vRet, vRet, vRet, toPerm);
|
||||
__ vsel (vTmp1, vTmp1, vRet, vTmp2);
|
||||
__ lvx (vTmp4, fifteen, to);
|
||||
__ stvx (vTmp1, to);
|
||||
__ vsel (vRet, vRet, vTmp4, vTmp2);
|
||||
__ stvx (vRet, fifteen, to);
|
||||
|
||||
__ blr();
|
||||
return start;
|
||||
}
|
||||
|
||||
void generate_arraycopy_stubs() {
|
||||
// Note: the disjoint stubs must be generated first, some of
|
||||
@ -2693,10 +3120,6 @@ class StubGenerator: public StubCodeGenerator {
|
||||
// arraycopy stubs used by compilers
|
||||
generate_arraycopy_stubs();
|
||||
|
||||
if (UseAESIntrinsics) {
|
||||
guarantee(!UseAESIntrinsics, "not yet implemented.");
|
||||
}
|
||||
|
||||
// Safefetch stubs.
|
||||
generate_safefetch("SafeFetch32", sizeof(int), &StubRoutines::_safefetch32_entry,
|
||||
&StubRoutines::_safefetch32_fault_pc,
|
||||
@ -2719,6 +3142,12 @@ class StubGenerator: public StubCodeGenerator {
|
||||
StubRoutines::_montgomerySquare
|
||||
= CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square);
|
||||
}
|
||||
|
||||
if (UseAESIntrinsics) {
|
||||
StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock();
|
||||
StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public:
|
||||
|
@ -2211,7 +2211,7 @@ address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
|
||||
__ ld(R6_ARG4, tsize*Interpreter::stackElementSize, R15_esp);
|
||||
__ ld(R5_ARG3, Interpreter::stackElementSize, R15_esp);
|
||||
__ mflr(R31);
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::trace_bytecode), /* unused */ R4_ARG2, R5_ARG3, R6_ARG4, false);
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::trace_bytecode), /* unused */ R4_ARG2, R5_ARG3, R6_ARG4, false);
|
||||
__ mtlr(R31);
|
||||
__ pop(state);
|
||||
|
||||
|
@ -122,7 +122,7 @@ void VM_Version::initialize() {
|
||||
(has_fcfids() ? " fcfids" : ""),
|
||||
(has_vand() ? " vand" : ""),
|
||||
(has_lqarx() ? " lqarx" : ""),
|
||||
(has_vcipher() ? " vcipher" : ""),
|
||||
(has_vcipher() ? " aes" : ""),
|
||||
(has_vpmsumb() ? " vpmsumb" : ""),
|
||||
(has_tcheck() ? " tcheck" : ""),
|
||||
(has_mfdscr() ? " mfdscr" : "")
|
||||
@ -186,6 +186,28 @@ void VM_Version::initialize() {
|
||||
}
|
||||
|
||||
// The AES intrinsic stubs require AES instruction support.
|
||||
#if defined(VM_LITTLE_ENDIAN)
|
||||
if (has_vcipher()) {
|
||||
if (FLAG_IS_DEFAULT(UseAES)) {
|
||||
UseAES = true;
|
||||
}
|
||||
} else if (UseAES) {
|
||||
if (!FLAG_IS_DEFAULT(UseAES))
|
||||
warning("AES instructions are not available on this CPU");
|
||||
FLAG_SET_DEFAULT(UseAES, false);
|
||||
}
|
||||
|
||||
if (UseAES && has_vcipher()) {
|
||||
if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
|
||||
UseAESIntrinsics = true;
|
||||
}
|
||||
} else if (UseAESIntrinsics) {
|
||||
if (!FLAG_IS_DEFAULT(UseAESIntrinsics))
|
||||
warning("AES intrinsics are not available on this CPU");
|
||||
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
|
||||
}
|
||||
|
||||
#else
|
||||
if (UseAES) {
|
||||
warning("AES instructions are not available on this CPU");
|
||||
FLAG_SET_DEFAULT(UseAES, false);
|
||||
@ -195,6 +217,7 @@ void VM_Version::initialize() {
|
||||
warning("AES intrinsics are not available on this CPU");
|
||||
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (UseAESCTRIntrinsics) {
|
||||
warning("AES/CTR intrinsics are not available on this CPU");
|
||||
|
@ -53,6 +53,7 @@ define_pd_global(bool, UseTLAB, true);
|
||||
define_pd_global(bool, ResizeTLAB, true);
|
||||
define_pd_global(intx, LoopUnrollLimit, 60); // Design center runs on 1.3.1
|
||||
define_pd_global(intx, LoopPercentProfileLimit, 10);
|
||||
define_pd_global(intx, PostLoopMultiversioning, false);
|
||||
define_pd_global(intx, MinJumpTableSize, 5);
|
||||
|
||||
// Peephole and CISC spilling both break the graph, and so makes the
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,6 +28,7 @@
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "interpreter/interp_masm.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "prims/methodHandles.hpp"
|
||||
|
||||
#define __ _masm->
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,6 +28,7 @@
|
||||
#include "classfile/systemDictionary.hpp"
|
||||
#include "code/vmreg.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "nativeInst_sparc.hpp"
|
||||
#include "opto/runtime.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,6 +28,7 @@
|
||||
#include "code/icBuffer.hpp"
|
||||
#include "code/vtableStubs.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/compiledICHolder.hpp"
|
||||
#include "prims/jvmtiRedefineClassesTrace.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
@ -1966,7 +1966,7 @@ address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
|
||||
|
||||
// Pass a 0 (not used in sparc) and the top of stack to the bytecode tracer
|
||||
__ mov( Otos_l2, G3_scratch );
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::trace_bytecode), G0, Otos_l1, G3_scratch);
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::trace_bytecode), G0, Otos_l1, G3_scratch);
|
||||
__ mov(Lscratch, O7); // restore return address
|
||||
__ pop(state);
|
||||
__ retl();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1977,39 +1977,43 @@ private:
|
||||
void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
|
||||
void vpxor(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
|
||||
|
||||
// 128bit copy from/to 256bit (YMM) vector registers
|
||||
void vinsertf128(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
// vinserti forms
|
||||
void vinserti128(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vextractf128(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti128(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vinsertf128(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
void vinserti128(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
void vextractf128(Address dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti128(Address dst, XMMRegister src, uint8_t imm8);
|
||||
|
||||
// 256bit copy from/to 512bit (ZMM) vector registers
|
||||
void vinserti32x4(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vinserti32x4(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
void vinserti64x4(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vinsertf64x4(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vextracti64x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf64x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf64x4(Address dst, XMMRegister src, uint8_t imm8);
|
||||
void vinsertf64x4(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
|
||||
// 128bit copy from/to 256bit (YMM) or 512bit (ZMM) vector registers
|
||||
void vextracti64x2(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf64x2(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf32x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf32x4(Address dst, XMMRegister src, uint8_t imm8);
|
||||
// vinsertf forms
|
||||
void vinsertf128(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vinsertf128(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
void vinsertf32x4(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vinsertf32x4(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
void vinsertf64x4(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8);
|
||||
void vinsertf64x4(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8);
|
||||
|
||||
// duplicate 4-bytes integer data from src into 8 locations in dest
|
||||
// vextracti forms
|
||||
void vextracti128(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti128(Address dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti32x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti32x4(Address dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti64x2(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextracti64x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
|
||||
// vextractf forms
|
||||
void vextractf128(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf128(Address dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf32x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf32x4(Address dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf64x2(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf64x4(XMMRegister dst, XMMRegister src, uint8_t imm8);
|
||||
void vextractf64x4(Address dst, XMMRegister src, uint8_t imm8);
|
||||
|
||||
// legacy xmm sourced word/dword replicate
|
||||
void vpbroadcastw(XMMRegister dst, XMMRegister src);
|
||||
void vpbroadcastd(XMMRegister dst, XMMRegister src);
|
||||
|
||||
// duplicate 2-bytes integer data from src into 16 locations in dest
|
||||
void vpbroadcastw(XMMRegister dst, XMMRegister src);
|
||||
|
||||
// duplicate n-bytes integer data from src into vector_len locations in dest
|
||||
// xmm/mem sourced byte/word/dword/qword replicate
|
||||
void evpbroadcastb(XMMRegister dst, XMMRegister src, int vector_len);
|
||||
void evpbroadcastb(XMMRegister dst, Address src, int vector_len);
|
||||
void evpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len);
|
||||
@ -2019,11 +2023,13 @@ private:
|
||||
void evpbroadcastq(XMMRegister dst, XMMRegister src, int vector_len);
|
||||
void evpbroadcastq(XMMRegister dst, Address src, int vector_len);
|
||||
|
||||
// scalar single/double precision replicate
|
||||
void evpbroadcastss(XMMRegister dst, XMMRegister src, int vector_len);
|
||||
void evpbroadcastss(XMMRegister dst, Address src, int vector_len);
|
||||
void evpbroadcastsd(XMMRegister dst, XMMRegister src, int vector_len);
|
||||
void evpbroadcastsd(XMMRegister dst, Address src, int vector_len);
|
||||
|
||||
// gpr sourced byte/word/dword/qword replicate
|
||||
void evpbroadcastb(XMMRegister dst, Register src, int vector_len);
|
||||
void evpbroadcastw(XMMRegister dst, Register src, int vector_len);
|
||||
void evpbroadcastd(XMMRegister dst, Register src, int vector_len);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -312,7 +312,7 @@ void LIR_Assembler::osr_entry() {
|
||||
Register OSR_buf = osrBufferPointer()->as_pointer_register();
|
||||
{ assert(frame::interpreter_frame_monitor_size() == BasicObjectLock::size(), "adjust code below");
|
||||
int monitor_offset = BytesPerWord * method()->max_locals() +
|
||||
(2 * BytesPerWord) * (number_of_locks - 1);
|
||||
(BasicObjectLock::size() * BytesPerWord) * (number_of_locks - 1);
|
||||
// SharedRuntime::OSR_migration_begin() packs BasicObjectLocks in
|
||||
// the OSR buffer using 2 word entries: first the lock and then
|
||||
// the oop.
|
||||
|
@ -47,6 +47,7 @@ define_pd_global(intx, ConditionalMoveLimit, 3);
|
||||
define_pd_global(intx, FreqInlineSize, 325);
|
||||
define_pd_global(intx, MinJumpTableSize, 10);
|
||||
define_pd_global(intx, LoopPercentProfileLimit, 30);
|
||||
define_pd_global(intx, PostLoopMultiversioning, true);
|
||||
#ifdef AMD64
|
||||
define_pd_global(intx, INTPRESSURE, 13);
|
||||
define_pd_global(intx, FLOATPRESSURE, 14);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -54,44 +54,6 @@
|
||||
// <- sender sp
|
||||
// ------------------------------ Asm interpreter ----------------------------------------
|
||||
|
||||
// ------------------------------ C++ interpreter ----------------------------------------
|
||||
//
|
||||
// Layout of C++ interpreter frame: (While executing in BytecodeInterpreter::run)
|
||||
//
|
||||
// <- SP (current esp/rsp)
|
||||
// [local variables ] BytecodeInterpreter::run local variables
|
||||
// ... BytecodeInterpreter::run local variables
|
||||
// [local variables ] BytecodeInterpreter::run local variables
|
||||
// [old frame pointer ] fp [ BytecodeInterpreter::run's ebp/rbp ]
|
||||
// [return pc ] (return to frame manager)
|
||||
// [interpreter_state* ] (arg to BytecodeInterpreter::run) --------------
|
||||
// [expression stack ] <- last_Java_sp |
|
||||
// [... ] * <- interpreter_state.stack |
|
||||
// [expression stack ] * <- interpreter_state.stack_base |
|
||||
// [monitors ] \ |
|
||||
// ... | monitor block size |
|
||||
// [monitors ] / <- interpreter_state.monitor_base |
|
||||
// [struct interpretState ] <-----------------------------------------|
|
||||
// [return pc ] (return to callee of frame manager [1]
|
||||
// [locals and parameters ]
|
||||
// <- sender sp
|
||||
|
||||
// [1] When the C++ interpreter calls a new method it returns to the frame
|
||||
// manager which allocates a new frame on the stack. In that case there
|
||||
// is no real callee of this newly allocated frame. The frame manager is
|
||||
// aware of the additional frame(s) and will pop them as nested calls
|
||||
// complete. However, to make it look good in the debugger the frame
|
||||
// manager actually installs a dummy pc pointing to RecursiveInterpreterActivation
|
||||
// with a fake interpreter_state* parameter to make it easy to debug
|
||||
// nested calls.
|
||||
|
||||
// Note that contrary to the layout for the assembly interpreter the
|
||||
// expression stack allocated for the C++ interpreter is full sized.
|
||||
// However this is not as bad as it seems as the interpreter frame_manager
|
||||
// will truncate the unused space on successive method calls.
|
||||
//
|
||||
// ------------------------------ C++ interpreter ----------------------------------------
|
||||
|
||||
public:
|
||||
enum {
|
||||
pc_return_offset = 0,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -296,7 +296,7 @@ void InterpreterMacroAssembler::call_VM_base(Register oop_result,
|
||||
Label L;
|
||||
cmpptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
|
||||
jcc(Assembler::equal, L);
|
||||
stop("InterpreterMacroAssembler::call_VM_leaf_base:"
|
||||
stop("InterpreterMacroAssembler::call_VM_base:"
|
||||
" last_sp != NULL");
|
||||
bind(L);
|
||||
}
|
||||
@ -1099,7 +1099,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) {
|
||||
movptr(Address(lock_reg, mark_offset), swap_reg);
|
||||
|
||||
assert(lock_offset == 0,
|
||||
"displached header must be first word in BasicObjectLock");
|
||||
"displaced header must be first word in BasicObjectLock");
|
||||
|
||||
if (os::is_MP()) lock();
|
||||
cmpxchgptr(lock_reg, Address(obj_reg, 0));
|
||||
@ -1154,7 +1154,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) {
|
||||
// Kills:
|
||||
// rax
|
||||
// c_rarg0, c_rarg1, c_rarg2, c_rarg3, ... (param regs)
|
||||
// rscratch1, rscratch2 (scratch regs)
|
||||
// rscratch1 (scratch reg)
|
||||
// rax, rbx, rcx, rdx
|
||||
void InterpreterMacroAssembler::unlock_object(Register lock_reg) {
|
||||
assert(lock_reg == LP64_ONLY(c_rarg1) NOT_LP64(rdx),
|
||||
@ -1201,7 +1201,7 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg) {
|
||||
if (os::is_MP()) lock();
|
||||
cmpxchgptr(header_reg, Address(obj_reg, 0));
|
||||
|
||||
// zero for recursive case
|
||||
// zero for simple unlock of a stack-lock case
|
||||
jcc(Assembler::zero, done);
|
||||
|
||||
// Call the runtime routine for slow case.
|
||||
|
@ -1106,7 +1106,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg,
|
||||
assert_different_registers(lock_reg, obj_reg, swap_reg, tmp_reg);
|
||||
assert(markOopDesc::age_shift == markOopDesc::lock_bits + markOopDesc::biased_lock_bits, "biased locking makes assumptions about bit layout");
|
||||
Address mark_addr (obj_reg, oopDesc::mark_offset_in_bytes());
|
||||
Address saved_mark_addr(lock_reg, 0);
|
||||
NOT_LP64( Address saved_mark_addr(lock_reg, 0); )
|
||||
|
||||
if (PrintBiasedLockingStatistics && counters == NULL) {
|
||||
counters = BiasedLocking::counters();
|
||||
@ -1695,7 +1695,7 @@ void MacroAssembler::fast_lock(Register objReg, Register boxReg, Register tmpReg
|
||||
RTMLockingCounters* stack_rtm_counters,
|
||||
Metadata* method_data,
|
||||
bool use_rtm, bool profile_rtm) {
|
||||
// Ensure the register assignents are disjoint
|
||||
// Ensure the register assignments are disjoint
|
||||
assert(tmpReg == rax, "");
|
||||
|
||||
if (use_rtm) {
|
||||
@ -2194,8 +2194,8 @@ void MacroAssembler::fast_unlock(Register objReg, Register boxReg, Register tmpR
|
||||
cmpptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(succ)), (int32_t)NULL_WORD);
|
||||
jccb (Assembler::zero, LGoSlowPath);
|
||||
|
||||
xorptr(boxReg, boxReg);
|
||||
if ((EmitSync & 16) && os::is_MP()) {
|
||||
orptr(boxReg, boxReg);
|
||||
xchgptr(boxReg, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)));
|
||||
} else {
|
||||
movptr(Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), (int32_t)NULL_WORD);
|
||||
@ -2227,7 +2227,6 @@ void MacroAssembler::fast_unlock(Register objReg, Register boxReg, Register tmpR
|
||||
|
||||
// box is really RAX -- the following CMPXCHG depends on that binding
|
||||
// cmpxchg R,[M] is equivalent to rax = CAS(M,rax,R)
|
||||
movptr(boxReg, (int32_t)NULL_WORD);
|
||||
if (os::is_MP()) { lock(); }
|
||||
cmpxchgptr(r15_thread, Address(tmpReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)));
|
||||
// There's no successor so we tried to regrab the lock.
|
||||
|
@ -1216,7 +1216,10 @@ public:
|
||||
void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); }
|
||||
|
||||
void vinserti128(XMMRegister dst, XMMRegister nds, XMMRegister src, uint8_t imm8) {
|
||||
if (UseAVX > 1) { // vinserti128 is available only in AVX2
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vinserti32x4(dst, dst, src, imm8);
|
||||
} else if (UseAVX > 1) {
|
||||
// vinserti128 is available only in AVX2
|
||||
Assembler::vinserti128(dst, nds, src, imm8);
|
||||
} else {
|
||||
Assembler::vinsertf128(dst, nds, src, imm8);
|
||||
@ -1224,7 +1227,10 @@ public:
|
||||
}
|
||||
|
||||
void vinserti128(XMMRegister dst, XMMRegister nds, Address src, uint8_t imm8) {
|
||||
if (UseAVX > 1) { // vinserti128 is available only in AVX2
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vinserti32x4(dst, dst, src, imm8);
|
||||
} else if (UseAVX > 1) {
|
||||
// vinserti128 is available only in AVX2
|
||||
Assembler::vinserti128(dst, nds, src, imm8);
|
||||
} else {
|
||||
Assembler::vinsertf128(dst, nds, src, imm8);
|
||||
@ -1232,7 +1238,10 @@ public:
|
||||
}
|
||||
|
||||
void vextracti128(XMMRegister dst, XMMRegister src, uint8_t imm8) {
|
||||
if (UseAVX > 1) { // vextracti128 is available only in AVX2
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vextracti32x4(dst, src, imm8);
|
||||
} else if (UseAVX > 1) {
|
||||
// vextracti128 is available only in AVX2
|
||||
Assembler::vextracti128(dst, src, imm8);
|
||||
} else {
|
||||
Assembler::vextractf128(dst, src, imm8);
|
||||
@ -1240,7 +1249,10 @@ public:
|
||||
}
|
||||
|
||||
void vextracti128(Address dst, XMMRegister src, uint8_t imm8) {
|
||||
if (UseAVX > 1) { // vextracti128 is available only in AVX2
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vextracti32x4(dst, src, imm8);
|
||||
} else if (UseAVX > 1) {
|
||||
// vextracti128 is available only in AVX2
|
||||
Assembler::vextracti128(dst, src, imm8);
|
||||
} else {
|
||||
Assembler::vextractf128(dst, src, imm8);
|
||||
@ -1260,37 +1272,57 @@ public:
|
||||
void vextracti128_high(Address dst, XMMRegister src) {
|
||||
vextracti128(dst, src, 1);
|
||||
}
|
||||
|
||||
void vinsertf128_high(XMMRegister dst, XMMRegister src) {
|
||||
vinsertf128(dst, dst, src, 1);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vinsertf32x4(dst, dst, src, 1);
|
||||
} else {
|
||||
Assembler::vinsertf128(dst, dst, src, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void vinsertf128_high(XMMRegister dst, Address src) {
|
||||
vinsertf128(dst, dst, src, 1);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vinsertf32x4(dst, dst, src, 1);
|
||||
} else {
|
||||
Assembler::vinsertf128(dst, dst, src, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void vextractf128_high(XMMRegister dst, XMMRegister src) {
|
||||
vextractf128(dst, src, 1);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vextractf32x4(dst, src, 1);
|
||||
} else {
|
||||
Assembler::vextractf128(dst, src, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void vextractf128_high(Address dst, XMMRegister src) {
|
||||
vextractf128(dst, src, 1);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vextractf32x4(dst, src, 1);
|
||||
} else {
|
||||
Assembler::vextractf128(dst, src, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 256bit copy to/from high 256 bits of 512bit (ZMM) vector registers
|
||||
void vinserti64x4_high(XMMRegister dst, XMMRegister src) {
|
||||
vinserti64x4(dst, dst, src, 1);
|
||||
Assembler::vinserti64x4(dst, dst, src, 1);
|
||||
}
|
||||
void vinsertf64x4_high(XMMRegister dst, XMMRegister src) {
|
||||
vinsertf64x4(dst, dst, src, 1);
|
||||
Assembler::vinsertf64x4(dst, dst, src, 1);
|
||||
}
|
||||
void vextracti64x4_high(XMMRegister dst, XMMRegister src) {
|
||||
vextracti64x4(dst, src, 1);
|
||||
Assembler::vextracti64x4(dst, src, 1);
|
||||
}
|
||||
void vextractf64x4_high(XMMRegister dst, XMMRegister src) {
|
||||
vextractf64x4(dst, src, 1);
|
||||
Assembler::vextractf64x4(dst, src, 1);
|
||||
}
|
||||
void vextractf64x4_high(Address dst, XMMRegister src) {
|
||||
vextractf64x4(dst, src, 1);
|
||||
Assembler::vextractf64x4(dst, src, 1);
|
||||
}
|
||||
void vinsertf64x4_high(XMMRegister dst, Address src) {
|
||||
vinsertf64x4(dst, dst, src, 1);
|
||||
Assembler::vinsertf64x4(dst, dst, src, 1);
|
||||
}
|
||||
|
||||
// 128bit copy to/from low 128 bits of 256bit (YMM) vector registers
|
||||
@ -1306,40 +1338,59 @@ public:
|
||||
void vextracti128_low(Address dst, XMMRegister src) {
|
||||
vextracti128(dst, src, 0);
|
||||
}
|
||||
|
||||
void vinsertf128_low(XMMRegister dst, XMMRegister src) {
|
||||
vinsertf128(dst, dst, src, 0);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vinsertf32x4(dst, dst, src, 0);
|
||||
} else {
|
||||
Assembler::vinsertf128(dst, dst, src, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void vinsertf128_low(XMMRegister dst, Address src) {
|
||||
vinsertf128(dst, dst, src, 0);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vinsertf32x4(dst, dst, src, 0);
|
||||
} else {
|
||||
Assembler::vinsertf128(dst, dst, src, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void vextractf128_low(XMMRegister dst, XMMRegister src) {
|
||||
vextractf128(dst, src, 0);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vextractf32x4(dst, src, 0);
|
||||
} else {
|
||||
Assembler::vextractf128(dst, src, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void vextractf128_low(Address dst, XMMRegister src) {
|
||||
vextractf128(dst, src, 0);
|
||||
if (UseAVX > 2) {
|
||||
Assembler::vextractf32x4(dst, src, 0);
|
||||
} else {
|
||||
Assembler::vextractf128(dst, src, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// 256bit copy to/from low 256 bits of 512bit (ZMM) vector registers
|
||||
void vinserti64x4_low(XMMRegister dst, XMMRegister src) {
|
||||
vinserti64x4(dst, dst, src, 0);
|
||||
Assembler::vinserti64x4(dst, dst, src, 0);
|
||||
}
|
||||
void vinsertf64x4_low(XMMRegister dst, XMMRegister src) {
|
||||
vinsertf64x4(dst, dst, src, 0);
|
||||
Assembler::vinsertf64x4(dst, dst, src, 0);
|
||||
}
|
||||
void vextracti64x4_low(XMMRegister dst, XMMRegister src) {
|
||||
vextracti64x4(dst, src, 0);
|
||||
Assembler::vextracti64x4(dst, src, 0);
|
||||
}
|
||||
void vextractf64x4_low(XMMRegister dst, XMMRegister src) {
|
||||
vextractf64x4(dst, src, 0);
|
||||
Assembler::vextractf64x4(dst, src, 0);
|
||||
}
|
||||
void vextractf64x4_low(Address dst, XMMRegister src) {
|
||||
vextractf64x4(dst, src, 0);
|
||||
Assembler::vextractf64x4(dst, src, 0);
|
||||
}
|
||||
void vinsertf64x4_low(XMMRegister dst, Address src) {
|
||||
vinsertf64x4(dst, dst, src, 0);
|
||||
Assembler::vinsertf64x4(dst, dst, src, 0);
|
||||
}
|
||||
|
||||
|
||||
// Carry-Less Multiplication Quadword
|
||||
void vpclmulldq(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
||||
// 0x00 - multiply lower 64 bits [0:63]
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,6 +28,7 @@
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "interpreter/interpreterRuntime.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "prims/methodHandles.hpp"
|
||||
|
||||
#define __ _masm->
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,6 +29,7 @@
|
||||
#include "classfile/systemDictionary.hpp"
|
||||
#include "code/vmreg.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "opto/runtime.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "code/icBuffer.hpp"
|
||||
#include "code/vtableStubs.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/compiledICHolder.hpp"
|
||||
#include "prims/jvmtiRedefineClassesTrace.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "code/icBuffer.hpp"
|
||||
#include "code/vtableStubs.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/compiledICHolder.hpp"
|
||||
#include "prims/jvmtiRedefineClassesTrace.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
@ -1830,7 +1830,7 @@ address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
|
||||
__ push(state); // save tosca
|
||||
|
||||
// pass tosca registers as arguments & call tracer
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::trace_bytecode), rcx, rax, rdx);
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::trace_bytecode), rcx, rax, rdx);
|
||||
__ mov(rcx, rax); // make sure return address is not destroyed by pop(state)
|
||||
__ pop(state); // restore tosca
|
||||
|
||||
@ -1847,7 +1847,7 @@ address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
|
||||
__ movflt(xmm3, xmm0); // Pass ftos
|
||||
#endif
|
||||
__ call_VM(noreg,
|
||||
CAST_FROM_FN_PTR(address, SharedRuntime::trace_bytecode),
|
||||
CAST_FROM_FN_PTR(address, InterpreterRuntime::trace_bytecode),
|
||||
c_rarg1, c_rarg2, c_rarg3);
|
||||
__ pop(c_rarg3);
|
||||
__ pop(c_rarg2);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2009, 2010, 2011 Red Hat, Inc.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -27,6 +27,7 @@
|
||||
#include "interpreter/cppInterpreterGenerator.hpp"
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "prims/methodHandles.hpp"
|
||||
|
||||
|
@ -549,11 +549,9 @@ public class CommandProcessor {
|
||||
},
|
||||
new Command("buildreplayjars", "buildreplayjars [ all | app | boot ] | [ prefix ]", false) {
|
||||
// This is used to dump jar files of all the classes
|
||||
// loaded in the core. Everything on the bootclasspath
|
||||
// loaded in the core. Everything with null classloader
|
||||
// will go in boot.jar and everything else will go in
|
||||
// app.jar. Then the classes can be loaded by the replay
|
||||
// jvm using -Xbootclasspath/p:boot.jar -cp app.jar. boot.jar usually
|
||||
// not needed, unless changed by jvmti.
|
||||
// app.jar. boot.jar usually not needed, unless changed by jvmti.
|
||||
public void doit(Tokens t) {
|
||||
int tcount = t.countTokens();
|
||||
if (tcount > 2) {
|
||||
|
@ -84,7 +84,11 @@ public class SAGetopt {
|
||||
}
|
||||
else {
|
||||
// Mixed style options --file name
|
||||
extractOptarg(ca[0]);
|
||||
try {
|
||||
extractOptarg(ca[0]);
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
throw new RuntimeException("Argument is expected for '" + ca[0] + "'");
|
||||
}
|
||||
}
|
||||
|
||||
return ca[0];
|
||||
|
@ -30,6 +30,7 @@ import java.util.Arrays;
|
||||
import sun.jvm.hotspot.tools.JStack;
|
||||
import sun.jvm.hotspot.tools.JMap;
|
||||
import sun.jvm.hotspot.tools.JInfo;
|
||||
import sun.jvm.hotspot.tools.JSnap;
|
||||
|
||||
public class SALauncher {
|
||||
|
||||
@ -39,6 +40,7 @@ public class SALauncher {
|
||||
System.out.println(" jstack --help\tto get more information");
|
||||
System.out.println(" jmap --help\tto get more information");
|
||||
System.out.println(" jinfo --help\tto get more information");
|
||||
System.out.println(" jsnap --help\tto get more information");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -85,6 +87,11 @@ public class SALauncher {
|
||||
return commonHelp();
|
||||
}
|
||||
|
||||
private static boolean jsnapHelp() {
|
||||
System.out.println(" --all\tto print all performance counters");
|
||||
return commonHelp();
|
||||
}
|
||||
|
||||
private static boolean toolHelp(String toolName) {
|
||||
if (toolName.equals("jstack")) {
|
||||
return jstackHelp();
|
||||
@ -95,24 +102,62 @@ public class SALauncher {
|
||||
if (toolName.equals("jmap")) {
|
||||
return jmapHelp();
|
||||
}
|
||||
if (toolName.equals("jsnap")) {
|
||||
return jsnapHelp();
|
||||
}
|
||||
if (toolName.equals("hsdb") || toolName.equals("clhsdb")) {
|
||||
return commonHelp();
|
||||
}
|
||||
return launcherHelp();
|
||||
}
|
||||
|
||||
private static void buildAttachArgs(ArrayList<String> newArgs,
|
||||
String pid, String exe, String core) {
|
||||
if ((pid == null) && (exe == null)) {
|
||||
throw new IllegalArgumentException(
|
||||
"You have to set --pid or --exe.");
|
||||
}
|
||||
|
||||
if (pid != null) { // Attach to live process
|
||||
if (exe != null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unnecessary argument: --exe");
|
||||
} else if (core != null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unnecessary argument: --core");
|
||||
} else if (!pid.matches("^\\d+$")) {
|
||||
throw new IllegalArgumentException("Invalid pid: " + pid);
|
||||
}
|
||||
|
||||
newArgs.add(pid);
|
||||
} else {
|
||||
if (exe.length() == 0) {
|
||||
throw new IllegalArgumentException("You have to set --exe.");
|
||||
}
|
||||
|
||||
newArgs.add(exe);
|
||||
|
||||
if ((core == null) || (core.length() == 0)) {
|
||||
throw new IllegalArgumentException("You have to set --core.");
|
||||
}
|
||||
|
||||
newArgs.add(core);
|
||||
}
|
||||
}
|
||||
|
||||
private static void runCLHSDB(String[] oldArgs) {
|
||||
SAGetopt sg = new SAGetopt(oldArgs);
|
||||
String[] longOpts = {"exe=", "core=", "pid="};
|
||||
|
||||
ArrayList<String> newArgs = new ArrayList();
|
||||
String exeORpid = null;
|
||||
String pid = null;
|
||||
String exe = null;
|
||||
String core = null;
|
||||
String s = null;
|
||||
|
||||
while((s = sg.next(null, longOpts)) != null) {
|
||||
if (s.equals("exe")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
exe = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("core")) {
|
||||
@ -120,17 +165,12 @@ public class SALauncher {
|
||||
continue;
|
||||
}
|
||||
if (s.equals("pid")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
pid = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (exeORpid != null) {
|
||||
newArgs.add(exeORpid);
|
||||
if (core != null) {
|
||||
newArgs.add(core);
|
||||
}
|
||||
}
|
||||
buildAttachArgs(newArgs, pid, exe, core);
|
||||
CLHSDB.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
}
|
||||
|
||||
@ -139,13 +179,14 @@ public class SALauncher {
|
||||
String[] longOpts = {"exe=", "core=", "pid="};
|
||||
|
||||
ArrayList<String> newArgs = new ArrayList();
|
||||
String exeORpid = null;
|
||||
String pid = null;
|
||||
String exe = null;
|
||||
String core = null;
|
||||
String s = null;
|
||||
|
||||
while((s = sg.next(null, longOpts)) != null) {
|
||||
if (s.equals("exe")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
exe = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("core")) {
|
||||
@ -153,17 +194,12 @@ public class SALauncher {
|
||||
continue;
|
||||
}
|
||||
if (s.equals("pid")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
pid = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (exeORpid != null) {
|
||||
newArgs.add(exeORpid);
|
||||
if (core != null) {
|
||||
newArgs.add(core);
|
||||
}
|
||||
}
|
||||
buildAttachArgs(newArgs, pid, exe, core);
|
||||
HSDB.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
}
|
||||
|
||||
@ -173,13 +209,14 @@ public class SALauncher {
|
||||
"mixed", "locks"};
|
||||
|
||||
ArrayList<String> newArgs = new ArrayList();
|
||||
String exeORpid = null;
|
||||
String pid = null;
|
||||
String exe = null;
|
||||
String core = null;
|
||||
String s = null;
|
||||
|
||||
while((s = sg.next(null, longOpts)) != null) {
|
||||
if (s.equals("exe")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
exe = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("core")) {
|
||||
@ -187,7 +224,7 @@ public class SALauncher {
|
||||
continue;
|
||||
}
|
||||
if (s.equals("pid")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
pid = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("mixed")) {
|
||||
@ -200,13 +237,7 @@ public class SALauncher {
|
||||
}
|
||||
}
|
||||
|
||||
if (exeORpid != null) {
|
||||
newArgs.add(exeORpid);
|
||||
if (core != null) {
|
||||
newArgs.add(core);
|
||||
}
|
||||
}
|
||||
|
||||
buildAttachArgs(newArgs, pid, exe, core);
|
||||
JStack.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
}
|
||||
|
||||
@ -216,13 +247,14 @@ public class SALauncher {
|
||||
"heap", "binaryheap", "histo", "clstats", "finalizerinfo"};
|
||||
|
||||
ArrayList<String> newArgs = new ArrayList();
|
||||
String exeORpid = null;
|
||||
String pid = null;
|
||||
String exe = null;
|
||||
String core = null;
|
||||
String s = null;
|
||||
|
||||
while((s = sg.next(null, longOpts)) != null) {
|
||||
if (s.equals("exe")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
exe = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("core")) {
|
||||
@ -230,7 +262,7 @@ public class SALauncher {
|
||||
continue;
|
||||
}
|
||||
if (s.equals("pid")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
pid = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("heap")) {
|
||||
@ -255,13 +287,7 @@ public class SALauncher {
|
||||
}
|
||||
}
|
||||
|
||||
if (exeORpid != null) {
|
||||
newArgs.add(exeORpid);
|
||||
if (core != null) {
|
||||
newArgs.add(core);
|
||||
}
|
||||
}
|
||||
|
||||
buildAttachArgs(newArgs, pid, exe, core);
|
||||
JMap.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
}
|
||||
|
||||
@ -271,13 +297,14 @@ public class SALauncher {
|
||||
"flags", "sysprops"};
|
||||
|
||||
ArrayList<String> newArgs = new ArrayList();
|
||||
String exeORpid = null;
|
||||
String exe = null;
|
||||
String pid = null;
|
||||
String core = null;
|
||||
String s = null;
|
||||
|
||||
while((s = sg.next(null, longOpts)) != null) {
|
||||
if (s.equals("exe")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
exe = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("core")) {
|
||||
@ -285,7 +312,7 @@ public class SALauncher {
|
||||
continue;
|
||||
}
|
||||
if (s.equals("pid")) {
|
||||
exeORpid = sg.getOptarg();
|
||||
pid = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("flags")) {
|
||||
@ -298,14 +325,41 @@ public class SALauncher {
|
||||
}
|
||||
}
|
||||
|
||||
if (exeORpid != null) {
|
||||
newArgs.add(exeORpid);
|
||||
if (core != null) {
|
||||
newArgs.add(core);
|
||||
buildAttachArgs(newArgs, pid, exe, core);
|
||||
JInfo.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
}
|
||||
|
||||
private static void runJSNAP(String[] oldArgs) {
|
||||
SAGetopt sg = new SAGetopt(oldArgs);
|
||||
String[] longOpts = {"exe=", "core=", "pid=", "all"};
|
||||
|
||||
ArrayList<String> newArgs = new ArrayList();
|
||||
String exe = null;
|
||||
String pid = null;
|
||||
String core = null;
|
||||
String s = null;
|
||||
|
||||
while((s = sg.next(null, longOpts)) != null) {
|
||||
if (s.equals("exe")) {
|
||||
exe = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("core")) {
|
||||
core = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("pid")) {
|
||||
pid = sg.getOptarg();
|
||||
continue;
|
||||
}
|
||||
if (s.equals("all")) {
|
||||
newArgs.add("-a");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
JInfo.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
buildAttachArgs(newArgs, pid, exe, core);
|
||||
JSnap.main(newArgs.toArray(new String[newArgs.size()]));
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
@ -329,31 +383,43 @@ public class SALauncher {
|
||||
|
||||
String[] oldArgs = Arrays.copyOfRange(args, 1, args.length);
|
||||
|
||||
// Run SA interactive mode
|
||||
if (args[0].equals("clhsdb")) {
|
||||
runCLHSDB(oldArgs);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
// Run SA interactive mode
|
||||
if (args[0].equals("clhsdb")) {
|
||||
runCLHSDB(oldArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args[0].equals("hsdb")) {
|
||||
runHSDB(oldArgs);
|
||||
return;
|
||||
}
|
||||
if (args[0].equals("hsdb")) {
|
||||
runHSDB(oldArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
// Run SA tmtools mode
|
||||
if (args[0].equals("jstack")) {
|
||||
runJSTACK(oldArgs);
|
||||
return;
|
||||
}
|
||||
// Run SA tmtools mode
|
||||
if (args[0].equals("jstack")) {
|
||||
runJSTACK(oldArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args[0].equals("jmap")) {
|
||||
runJMAP(oldArgs);
|
||||
return;
|
||||
}
|
||||
if (args[0].equals("jmap")) {
|
||||
runJMAP(oldArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args[0].equals("jinfo")) {
|
||||
runJINFO(oldArgs);
|
||||
return;
|
||||
if (args[0].equals("jinfo")) {
|
||||
runJINFO(oldArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args[0].equals("jsnap")) {
|
||||
runJSNAP(oldArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("Unknown tool: " + args[0]);
|
||||
} catch (Exception e) {
|
||||
System.err.println(e.getMessage());
|
||||
toolHelp(args[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,11 @@ public enum GCCause {
|
||||
_gc_locker ("GCLocker Initiated GC"),
|
||||
_heap_inspection ("Heap Inspection Initiated GC"),
|
||||
_heap_dump ("Heap Dump Initiated GC"),
|
||||
_wb_young_gc ("WhiteBox Initiated Young GC"),
|
||||
_wb_conc_mark ("WhiteBox Initiated Concurrent Mark"),
|
||||
_wb_full_gc ("WhiteBox Initiated Full GC"),
|
||||
_update_allocation_context_stats_inc ("Update Allocation Context Stats"),
|
||||
_update_allocation_context_stats_full ("Update Allocation Context Stats"),
|
||||
|
||||
_no_gc ("No GC"),
|
||||
_no_cause_specified ("Unknown GCCause"),
|
||||
@ -42,6 +47,7 @@ public enum GCCause {
|
||||
|
||||
_tenured_generation_full ("Tenured Generation Full"),
|
||||
_metadata_GC_threshold ("Metadata GC Threshold"),
|
||||
_metadata_GC_clear_soft_refs ("Metadata GC Clear Soft References"),
|
||||
|
||||
_cms_generation_full ("CMS Generation Full"),
|
||||
_cms_initial_mark ("CMS Initial Mark"),
|
||||
@ -55,7 +61,8 @@ public enum GCCause {
|
||||
_g1_inc_collection_pause ("G1 Evacuation Pause"),
|
||||
_g1_humongous_allocation ("G1 Humongous Allocation"),
|
||||
|
||||
_last_ditch_collection ("Last ditch collection"),
|
||||
_dcmd_gc_run ("Diagnostic Command"),
|
||||
|
||||
_last_gc_cause ("ILLEGAL VALUE - last gc cause - ILLEGAL VALUE");
|
||||
|
||||
private final String value;
|
||||
|
@ -780,8 +780,8 @@ public class VirtualMachineImpl extends MirrorImpl implements PathSearchingVirtu
|
||||
return getPath("java.class.path");
|
||||
}
|
||||
|
||||
public List bootClassPath() {
|
||||
return getPath("sun.boot.class.path");
|
||||
public List<String> bootClassPath() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public String baseDirectory() {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2016 Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -47,8 +47,10 @@ public class MethodCounters extends Metadata {
|
||||
private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
|
||||
Type type = db.lookupType("MethodCounters");
|
||||
|
||||
interpreterInvocationCountField = new CIntField(type.getCIntegerField("_interpreter_invocation_count"), 0);
|
||||
interpreterThrowoutCountField = new CIntField(type.getCIntegerField("_interpreter_throwout_count"), 0);
|
||||
if (VM.getVM().isServerCompiler()) {
|
||||
interpreterInvocationCountField = new CIntField(type.getCIntegerField("_interpreter_invocation_count"), 0);
|
||||
interpreterThrowoutCountField = new CIntField(type.getCIntegerField("_interpreter_throwout_count"), 0);
|
||||
}
|
||||
if (!VM.getVM().isCore()) {
|
||||
invocationCounter = new CIntField(type.getCIntegerField("_invocation_counter"), 0);
|
||||
backedgeCounter = new CIntField(type.getCIntegerField("_backedge_counter"), 0);
|
||||
@ -61,11 +63,19 @@ public class MethodCounters extends Metadata {
|
||||
private static CIntField backedgeCounter;
|
||||
|
||||
public int interpreterInvocationCount() {
|
||||
return (int) interpreterInvocationCountField.getValue(this);
|
||||
if (interpreterInvocationCountField != null) {
|
||||
return (int) interpreterInvocationCountField.getValue(this);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int interpreterThrowoutCount() {
|
||||
return (int) interpreterThrowoutCountField.getValue(this);
|
||||
if (interpreterThrowoutCountField != null) {
|
||||
return (int) interpreterThrowoutCountField.getValue(this);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
public long getInvocationCounter() {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -130,7 +130,7 @@ public class Threads {
|
||||
virtualConstructor.addMapping("CodeCacheSweeperThread", CodeCacheSweeperThread.class);
|
||||
}
|
||||
// for now, use JavaThread itself. fix it later with appropriate class if needed
|
||||
virtualConstructor.addMapping("SurrogateLockerThread", JavaThread.class);
|
||||
virtualConstructor.addMapping("ReferencePendingListLockerThread", JavaThread.class);
|
||||
virtualConstructor.addMapping("JvmtiAgentThread", JvmtiAgentThread.class);
|
||||
virtualConstructor.addMapping("ServiceThread", ServiceThread.class);
|
||||
}
|
||||
@ -172,7 +172,7 @@ public class Threads {
|
||||
return thread;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Unable to deduce type of thread from address " + threadAddr +
|
||||
" (expected type JavaThread, CompilerThread, ServiceThread, JvmtiAgentThread, SurrogateLockerThread, or CodeCacheSweeperThread)", e);
|
||||
" (expected type JavaThread, CompilerThread, ServiceThread, JvmtiAgentThread, ReferencePendingListLockerThread, or CodeCacheSweeperThread)", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,11 +25,15 @@
|
||||
package sun.jvm.hotspot.tools;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
import sun.jvm.hotspot.debugger.JVMDebugger;
|
||||
import sun.jvm.hotspot.runtime.*;
|
||||
|
||||
public class JSnap extends Tool {
|
||||
|
||||
private boolean all;
|
||||
|
||||
public JSnap() {
|
||||
super();
|
||||
}
|
||||
@ -45,7 +49,7 @@ public class JSnap extends Tool {
|
||||
if (prologue.accessible()) {
|
||||
PerfMemory.iterate(new PerfMemory.PerfDataEntryVisitor() {
|
||||
public boolean visit(PerfDataEntry pde) {
|
||||
if (pde.supported()) {
|
||||
if (all || pde.supported()) {
|
||||
out.print(pde.name());
|
||||
out.print('=');
|
||||
out.println(pde.valueAsString());
|
||||
@ -62,8 +66,24 @@ public class JSnap extends Tool {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void printFlagsUsage() {
|
||||
System.out.println(" -a\tto print all performance counters");
|
||||
super.printFlagsUsage();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSnap js = new JSnap();
|
||||
js.all = Arrays.stream(args)
|
||||
.anyMatch(s -> s.equals("-a"));
|
||||
|
||||
if (js.all) {
|
||||
args = Arrays.stream(args)
|
||||
.filter(s -> !s.equals("-a"))
|
||||
.collect(Collectors.toList())
|
||||
.toArray(new String[0]);
|
||||
}
|
||||
|
||||
js.execute(args);
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +81,12 @@ public class CompactHashTable extends VMObject {
|
||||
}
|
||||
|
||||
public Symbol probe(byte[] name, long hash) {
|
||||
|
||||
if (bucketCount() == 0) {
|
||||
// The table is invalid, so don't try to lookup
|
||||
return null;
|
||||
}
|
||||
|
||||
long symOffset;
|
||||
Symbol sym;
|
||||
Address baseAddress = baseAddressField.getValue(addr);
|
||||
|
@ -75,8 +75,6 @@ public class JSJavaVM extends DefaultScriptObject {
|
||||
return vm.getVMRelease();
|
||||
case FIELD_CLASS_PATH:
|
||||
return getClassPath();
|
||||
case FIELD_BOOT_CLASS_PATH:
|
||||
return getBootClassPath();
|
||||
case FIELD_USER_DIR:
|
||||
return getUserDir();
|
||||
case FIELD_UNDEFINED:
|
||||
@ -143,7 +141,6 @@ public class JSJavaVM extends DefaultScriptObject {
|
||||
addField("type", FIELD_TYPE);
|
||||
addField("version", FIELD_VERSION);
|
||||
addField("classPath", FIELD_CLASS_PATH);
|
||||
addField("bootClassPath", FIELD_BOOT_CLASS_PATH);
|
||||
addField("userDir", FIELD_USER_DIR);
|
||||
}
|
||||
|
||||
@ -217,10 +214,6 @@ public class JSJavaVM extends DefaultScriptObject {
|
||||
return vm.getSystemProperty("java.class.path");
|
||||
}
|
||||
|
||||
private String getBootClassPath() {
|
||||
return vm.getSystemProperty("sun.boot.class.path");
|
||||
}
|
||||
|
||||
private String getUserDir() {
|
||||
return vm.getSystemProperty("user.dir");
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -837,7 +837,7 @@ vmType2Class["InterpreterCodelet"] = sapkg.interpreter.InterpreterCodelet;
|
||||
vmType2Class["JavaThread"] = sapkg.runtime.JavaThread;
|
||||
vmType2Class["CompilerThread"] = sapkg.runtime.CompilerThread;
|
||||
vmType2Class["CodeCacheSweeperThread"] = sapkg.runtime.CodeCacheSweeperThread;
|
||||
vmType2Class["SurrogateLockerThread"] = sapkg.runtime.JavaThread;
|
||||
vmType2Class["ReferencePendingListLockerThread"] = sapkg.runtime.JavaThread;
|
||||
vmType2Class["DebuggerThread"] = sapkg.runtime.DebuggerThread;
|
||||
|
||||
// gc
|
||||
|
@ -23,7 +23,6 @@
|
||||
package jdk.vm.ci.hotspot;
|
||||
|
||||
import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE;
|
||||
import jdk.vm.ci.common.JVMCIError;
|
||||
import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding;
|
||||
import jdk.vm.ci.meta.Constant;
|
||||
import jdk.vm.ci.meta.JavaConstant;
|
||||
@ -59,7 +58,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider, Ho
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
throw new JVMCIError("%s", metaspaceObject);
|
||||
throw new IllegalArgumentException(String.valueOf(metaspaceObject));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -75,7 +74,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider, Ho
|
||||
return prim.asLong();
|
||||
}
|
||||
}
|
||||
throw new JVMCIError("%s", base);
|
||||
throw new IllegalArgumentException(String.valueOf(base));
|
||||
}
|
||||
|
||||
private static long readRawValue(Constant baseConstant, long displacement, int bits) {
|
||||
@ -91,7 +90,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider, Ho
|
||||
case Long.SIZE:
|
||||
return UNSAFE.getLong(base, displacement);
|
||||
default:
|
||||
throw new JVMCIError("%d", bits);
|
||||
throw new IllegalArgumentException(String.valueOf(bits));
|
||||
}
|
||||
} else {
|
||||
long pointer = asRawPointer(baseConstant);
|
||||
@ -105,7 +104,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider, Ho
|
||||
case Long.SIZE:
|
||||
return UNSAFE.getLong(pointer + displacement);
|
||||
default:
|
||||
throw new JVMCIError("%d", bits);
|
||||
throw new IllegalArgumentException(String.valueOf(bits));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -178,7 +177,7 @@ class HotSpotMemoryAccessProviderImpl implements HotSpotMemoryAccessProvider, Ho
|
||||
case Double:
|
||||
return JavaConstant.forDouble(Double.longBitsToDouble(rawValue));
|
||||
default:
|
||||
throw new JVMCIError("Unsupported kind: %s", kind);
|
||||
throw new IllegalArgumentException("Unsupported kind: " + kind);
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
return null;
|
||||
|
@ -35,8 +35,10 @@ public interface MemoryAccessProvider {
|
||||
* @param displacement the displacement within the object in bytes
|
||||
* @return the read value encapsulated in a {@link JavaConstant} object, or {@code null} if the
|
||||
* value cannot be read.
|
||||
* @throws IllegalArgumentException if {@code kind} is {@link JavaKind#Void} or not
|
||||
* {@linkplain JavaKind#isPrimitive() primitive} kind
|
||||
*/
|
||||
JavaConstant readUnsafeConstant(JavaKind kind, JavaConstant base, long displacement);
|
||||
JavaConstant readUnsafeConstant(JavaKind kind, JavaConstant base, long displacement) throws IllegalArgumentException;
|
||||
|
||||
/**
|
||||
* Reads a primitive value using a base address and a displacement.
|
||||
@ -46,8 +48,11 @@ public interface MemoryAccessProvider {
|
||||
* @param displacement the displacement within the object in bytes
|
||||
* @param bits the number of bits to read from memory
|
||||
* @return the read value encapsulated in a {@link JavaConstant} object of {@link JavaKind} kind
|
||||
* @throws IllegalArgumentException if {@code kind} is {@link JavaKind#Void} or not
|
||||
* {@linkplain JavaKind#isPrimitive() primitive} kind or {@code bits} is not 8, 16,
|
||||
* 32 or 64
|
||||
*/
|
||||
JavaConstant readPrimitiveConstant(JavaKind kind, Constant base, long displacement, int bits);
|
||||
JavaConstant readPrimitiveConstant(JavaKind kind, Constant base, long displacement, int bits) throws IllegalArgumentException;
|
||||
|
||||
/**
|
||||
* Reads a Java {@link Object} value using a base address and a displacement.
|
||||
|
@ -51,6 +51,8 @@ public interface MethodHandleAccessProvider {
|
||||
/**
|
||||
* Returns the method handle method intrinsic identifier for the provided method, or
|
||||
* {@code null} if the method is not an intrinsic processed by this interface.
|
||||
*
|
||||
* @throws NullPointerException if {@code method} is null
|
||||
*/
|
||||
IntrinsicMethod lookupMethodHandleIntrinsic(ResolvedJavaMethod method);
|
||||
|
||||
@ -58,19 +60,27 @@ public interface MethodHandleAccessProvider {
|
||||
* Resolves the invocation target for an invocation of {@link IntrinsicMethod#INVOKE_BASIC
|
||||
* MethodHandle.invokeBasic} with the given constant receiver {@link MethodHandle}. Returns
|
||||
* {@code null} if the invocation target is not available at this time.
|
||||
* <p>
|
||||
*
|
||||
* The first invocations of a method handle can use an interpreter to lookup the actual invoked
|
||||
* method; frequently executed method handles can use Java bytecode generation to avoid the
|
||||
* interpreter overhead. If the parameter forceBytecodeGeneration is set to true, the VM should
|
||||
* try to generate bytecodes before this method returns.
|
||||
*
|
||||
* @returns {@code null} if {@code methodHandle} is not a {@link MethodHandle} or the invocation
|
||||
* target is not available at this time
|
||||
* @throws NullPointerException if {@code methodHandle} is null
|
||||
*/
|
||||
ResolvedJavaMethod resolveInvokeBasicTarget(JavaConstant methodHandle, boolean forceBytecodeGeneration);
|
||||
|
||||
/**
|
||||
* Resolves the invocation target for an invocation of a {@code MethodHandle.linkTo*} method
|
||||
* with the given constant member name. The member name is the last parameter of the
|
||||
* {@code linkTo*} method. Returns {@code null} if the invocation target is not available at
|
||||
* this time.
|
||||
* {@code linkTo*} method.
|
||||
*
|
||||
* @returns {@code null} if the invocation target is not available at this time
|
||||
* @throws NullPointerException if {@code memberName} is null
|
||||
* @throws IllegalArgumentException if {@code memberName} is not a
|
||||
* {@code java.lang.invoke.MemberName}
|
||||
*/
|
||||
ResolvedJavaMethod resolveLinkToTarget(JavaConstant memberName);
|
||||
}
|
||||
|
@ -910,8 +910,8 @@ bool os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size) {
|
||||
log_info(os, thread)("Thread started (pthread id: " UINTX_FORMAT ", attributes: %s). ",
|
||||
(uintx) tid, os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
} else {
|
||||
log_warning(os, thread)("Failed to start thread - pthread_create failed (%s) for attributes: %s.",
|
||||
strerror(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
log_warning(os, thread)("Failed to start thread - pthread_create failed (%d=%s) for attributes: %s.",
|
||||
ret, os::errno_name(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
}
|
||||
|
||||
pthread_attr_destroy(&attr);
|
||||
@ -1178,7 +1178,7 @@ void os::die() {
|
||||
size_t os::lasterror(char *buf, size_t len) {
|
||||
if (errno == 0) return 0;
|
||||
|
||||
const char *s = ::strerror(errno);
|
||||
const char *s = os::strerror(errno);
|
||||
size_t n = ::strlen(s);
|
||||
if (n >= len) {
|
||||
n = len - 1;
|
||||
@ -1714,14 +1714,14 @@ static void local_sem_post() {
|
||||
if (os::Aix::on_aix()) {
|
||||
int rc = ::sem_post(&sig_sem);
|
||||
if (rc == -1 && !warn_only_once) {
|
||||
trcVerbose("sem_post failed (errno = %d, %s)", errno, strerror(errno));
|
||||
trcVerbose("sem_post failed (errno = %d, %s)", errno, os::errno_name(errno));
|
||||
warn_only_once = true;
|
||||
}
|
||||
} else {
|
||||
guarantee0(p_sig_msem != NULL);
|
||||
int rc = ::msem_unlock(p_sig_msem, 0);
|
||||
if (rc == -1 && !warn_only_once) {
|
||||
trcVerbose("msem_unlock failed (errno = %d, %s)", errno, strerror(errno));
|
||||
trcVerbose("msem_unlock failed (errno = %d, %s)", errno, os::errno_name(errno));
|
||||
warn_only_once = true;
|
||||
}
|
||||
}
|
||||
@ -1732,14 +1732,14 @@ static void local_sem_wait() {
|
||||
if (os::Aix::on_aix()) {
|
||||
int rc = ::sem_wait(&sig_sem);
|
||||
if (rc == -1 && !warn_only_once) {
|
||||
trcVerbose("sem_wait failed (errno = %d, %s)", errno, strerror(errno));
|
||||
trcVerbose("sem_wait failed (errno = %d, %s)", errno, os::errno_name(errno));
|
||||
warn_only_once = true;
|
||||
}
|
||||
} else {
|
||||
guarantee0(p_sig_msem != NULL); // must init before use
|
||||
int rc = ::msem_lock(p_sig_msem, 0);
|
||||
if (rc == -1 && !warn_only_once) {
|
||||
trcVerbose("msem_lock failed (errno = %d, %s)", errno, strerror(errno));
|
||||
trcVerbose("msem_lock failed (errno = %d, %s)", errno, os::errno_name(errno));
|
||||
warn_only_once = true;
|
||||
}
|
||||
}
|
||||
@ -2203,7 +2203,7 @@ static void warn_fail_commit_memory(char* addr, size_t size, bool exec,
|
||||
int err) {
|
||||
warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
|
||||
", %d) failed; error='%s' (errno=%d)", addr, size, exec,
|
||||
strerror(err), err);
|
||||
os::errno_name(err), err);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -2412,7 +2412,7 @@ static bool checked_mprotect(char* addr, size_t size, int prot) {
|
||||
bool rc = ::mprotect(addr, size, prot) == 0 ? true : false;
|
||||
|
||||
if (!rc) {
|
||||
const char* const s_errno = strerror(errno);
|
||||
const char* const s_errno = os::errno_name(errno);
|
||||
warning("mprotect(" PTR_FORMAT "-" PTR_FORMAT ", 0x%X) failed (%s).", addr, addr + size, prot, s_errno);
|
||||
return false;
|
||||
}
|
||||
@ -2634,7 +2634,7 @@ OSReturn os::set_native_priority(Thread* thread, int newpri) {
|
||||
|
||||
if (ret != 0) {
|
||||
trcVerbose("Could not change priority for thread %d to %d (error %d, %s)",
|
||||
(int)thr, newpri, ret, strerror(ret));
|
||||
(int)thr, newpri, ret, os::errno_name(ret));
|
||||
}
|
||||
return (ret == 0) ? OS_OK : OS_ERR;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "os_aix.inline.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/perfMemory.hpp"
|
||||
#include "services/memTracker.hpp"
|
||||
#include "utilities/exceptions.hpp"
|
||||
@ -101,7 +102,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not create Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
} else {
|
||||
int fd = result;
|
||||
@ -112,7 +113,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not write Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -124,7 +125,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
result = ::close(fd);
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result == OS_ERR) {
|
||||
warning("Could not close %s: %s\n", destfile, strerror(errno));
|
||||
warning("Could not close %s: %s\n", destfile, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -397,7 +398,7 @@ static DIR *open_directory_secure(const char* dirname) {
|
||||
if (errno == ELOOP) {
|
||||
warning("directory %s is a symlink and is not secure\n", dirname);
|
||||
} else {
|
||||
warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||||
warning("could not open directory %s: %s\n", dirname, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
return dirp;
|
||||
@ -507,7 +508,7 @@ static bool is_file_secure(int fd, const char *filename) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||||
warning("fstat failed on %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -543,7 +544,7 @@ static char* get_user_name(uid_t uid) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result != 0) {
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(result));
|
||||
os::strerror(result));
|
||||
}
|
||||
else if (p == NULL) {
|
||||
// this check is added to protect against an observed problem
|
||||
@ -557,7 +558,7 @@ static char* get_user_name(uid_t uid) {
|
||||
// Bug Id 89052 was opened with RedHat.
|
||||
//
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
}
|
||||
else {
|
||||
warning("Could not determine user name: %s\n",
|
||||
@ -593,7 +594,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
||||
"Process not found");
|
||||
}
|
||||
else /* EPERM */ {
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), os::strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
@ -746,7 +747,7 @@ static void remove_file(const char* path) {
|
||||
if (PrintMiscellaneous && Verbose && result == OS_ERR) {
|
||||
if (errno != ENOENT) {
|
||||
warning("Could not unlink shared memory backing"
|
||||
" store file %s : %s\n", path, strerror(errno));
|
||||
" store file %s : %s\n", path, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -849,7 +850,7 @@ static bool make_user_tmp_dir(const char* dirname) {
|
||||
//
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not create directory %s: %s\n",
|
||||
dirname, strerror(errno));
|
||||
dirname, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -900,7 +901,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
if (errno == ELOOP) {
|
||||
warning("file %s is a symlink and is not secure\n", filename);
|
||||
} else {
|
||||
warning("could not create file %s: %s\n", filename, strerror(errno));
|
||||
warning("could not create file %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
// Close the directory and reset the current working directory.
|
||||
@ -924,7 +925,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||||
warning("could not truncate shared memory file: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -933,7 +934,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not set shared memory file size: %s\n", strerror(errno));
|
||||
warning("could not set shared memory file size: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -968,7 +969,7 @@ static int open_sharedmem_file(const char* filename, int oflags, TRAPS) {
|
||||
"Permission denied");
|
||||
}
|
||||
else {
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), os::strerror(errno));
|
||||
}
|
||||
}
|
||||
int fd = result;
|
||||
@ -1041,7 +1042,7 @@ static char* mmap_create_shared(size_t size) {
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed - %s\n", strerror(errno));
|
||||
warning("mmap failed - %s\n", os::strerror(errno));
|
||||
}
|
||||
remove_file(filename);
|
||||
FREE_C_HEAP_ARRAY(char, filename);
|
||||
@ -1109,7 +1110,7 @@ static size_t sharedmem_filesize(int fd, TRAPS) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed: %s\n", strerror(errno));
|
||||
warning("fstat failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(),
|
||||
"Could not determine PerfMemory size");
|
||||
@ -1231,7 +1232,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed: %s\n", strerror(errno));
|
||||
warning("mmap failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(),
|
||||
"Could not map PerfMemory");
|
||||
|
@ -789,7 +789,7 @@ bool os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size) {
|
||||
(uintx) tid, os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
} else {
|
||||
log_warning(os, thread)("Failed to start thread - pthread_create failed (%s) for attributes: %s.",
|
||||
strerror(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
os::errno_name(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
}
|
||||
|
||||
pthread_attr_destroy(&attr);
|
||||
@ -1122,7 +1122,7 @@ void os::die() {
|
||||
size_t os::lasterror(char *buf, size_t len) {
|
||||
if (errno == 0) return 0;
|
||||
|
||||
const char *s = ::strerror(errno);
|
||||
const char *s = os::strerror(errno);
|
||||
size_t n = ::strlen(s);
|
||||
if (n >= len) {
|
||||
n = len - 1;
|
||||
@ -2141,7 +2141,7 @@ static void warn_fail_commit_memory(char* addr, size_t size, bool exec,
|
||||
int err) {
|
||||
warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
|
||||
", %d) failed; error='%s' (errno=%d)", addr, size, exec,
|
||||
strerror(err), err);
|
||||
os::errno_name(err), err);
|
||||
}
|
||||
|
||||
// NOTE: Bsd kernel does not really reserve the pages for us.
|
||||
@ -3422,7 +3422,7 @@ void os::init(void) {
|
||||
|
||||
Bsd::set_page_size(getpagesize());
|
||||
if (Bsd::page_size() == -1) {
|
||||
fatal("os_bsd.cpp: os::init: sysconf failed (%s)", strerror(errno));
|
||||
fatal("os_bsd.cpp: os::init: sysconf failed (%s)", os::strerror(errno));
|
||||
}
|
||||
init_page_sizes((size_t) Bsd::page_size());
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,6 +29,7 @@
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "os_bsd.inline.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/perfMemory.hpp"
|
||||
#include "services/memTracker.hpp"
|
||||
#include "utilities/exceptions.hpp"
|
||||
@ -100,7 +101,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not create Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
} else {
|
||||
int fd = result;
|
||||
@ -111,7 +112,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not write Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -123,7 +124,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
result = ::close(fd);
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result == OS_ERR) {
|
||||
warning("Could not close %s: %s\n", destfile, strerror(errno));
|
||||
warning("Could not close %s: %s\n", destfile, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -309,7 +310,7 @@ static DIR *open_directory_secure(const char* dirname) {
|
||||
if (errno == ELOOP) {
|
||||
warning("directory %s is a symlink and is not secure\n", dirname);
|
||||
} else {
|
||||
warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||||
warning("could not open directory %s: %s\n", dirname, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
return dirp;
|
||||
@ -420,7 +421,7 @@ static bool is_file_secure(int fd, const char *filename) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||||
warning("fstat failed on %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -459,7 +460,7 @@ static char* get_user_name(uid_t uid) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result != 0) {
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(result));
|
||||
os::strerror(result));
|
||||
}
|
||||
else if (p == NULL) {
|
||||
// this check is added to protect against an observed problem
|
||||
@ -473,7 +474,7 @@ static char* get_user_name(uid_t uid) {
|
||||
// Bug Id 89052 was opened with RedHat.
|
||||
//
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
}
|
||||
else {
|
||||
warning("Could not determine user name: %s\n",
|
||||
@ -509,7 +510,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
||||
"Process not found");
|
||||
}
|
||||
else /* EPERM */ {
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), os::strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
@ -652,7 +653,7 @@ static void remove_file(const char* path) {
|
||||
if (PrintMiscellaneous && Verbose && result == OS_ERR) {
|
||||
if (errno != ENOENT) {
|
||||
warning("Could not unlink shared memory backing"
|
||||
" store file %s : %s\n", path, strerror(errno));
|
||||
" store file %s : %s\n", path, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -762,7 +763,7 @@ static bool make_user_tmp_dir(const char* dirname) {
|
||||
//
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not create directory %s: %s\n",
|
||||
dirname, strerror(errno));
|
||||
dirname, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -804,7 +805,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
if (errno == ELOOP) {
|
||||
warning("file %s is a symlink and is not secure\n", filename);
|
||||
} else {
|
||||
warning("could not create file %s: %s\n", filename, strerror(errno));
|
||||
warning("could not create file %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
// close the directory and reset the current working directory
|
||||
@ -828,7 +829,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||||
warning("could not truncate shared memory file: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -837,7 +838,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not set shared memory file size: %s\n", strerror(errno));
|
||||
warning("could not set shared memory file size: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -887,7 +888,7 @@ static int open_sharedmem_file(const char* filename, int oflags, TRAPS) {
|
||||
"Permission denied", OS_ERR);
|
||||
}
|
||||
else {
|
||||
THROW_MSG_(vmSymbols::java_io_IOException(), strerror(errno), OS_ERR);
|
||||
THROW_MSG_(vmSymbols::java_io_IOException(), os::strerror(errno), OS_ERR);
|
||||
}
|
||||
}
|
||||
int fd = result;
|
||||
@ -961,7 +962,7 @@ static char* mmap_create_shared(size_t size) {
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed - %s\n", strerror(errno));
|
||||
warning("mmap failed - %s\n", os::strerror(errno));
|
||||
}
|
||||
remove_file(filename);
|
||||
FREE_C_HEAP_ARRAY(char, filename);
|
||||
@ -1025,7 +1026,7 @@ static size_t sharedmem_filesize(int fd, TRAPS) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed: %s\n", strerror(errno));
|
||||
warning("fstat failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(),
|
||||
"Could not determine PerfMemory size");
|
||||
@ -1136,7 +1137,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed: %s\n", strerror(errno));
|
||||
warning("mmap failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(),
|
||||
"Could not map PerfMemory");
|
||||
|
@ -594,15 +594,7 @@ void os::Linux::libpthread_init() {
|
||||
// _expand_stack_to() assumes its frame size is less than page size, which
|
||||
// should always be true if the function is not inlined.
|
||||
|
||||
#if __GNUC__ < 3 // gcc 2.x does not support noinline attribute
|
||||
#define NOINLINE
|
||||
#else
|
||||
#define NOINLINE __attribute__ ((noinline))
|
||||
#endif
|
||||
|
||||
static void _expand_stack_to(address bottom) NOINLINE;
|
||||
|
||||
static void _expand_stack_to(address bottom) {
|
||||
static void NOINLINE _expand_stack_to(address bottom) {
|
||||
address sp;
|
||||
size_t size;
|
||||
volatile char *p;
|
||||
@ -769,7 +761,7 @@ bool os::create_thread(Thread* thread, ThreadType thr_type,
|
||||
(uintx) tid, os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
} else {
|
||||
log_warning(os, thread)("Failed to start thread - pthread_create failed (%s) for attributes: %s.",
|
||||
strerror(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
os::errno_name(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
|
||||
}
|
||||
|
||||
pthread_attr_destroy(&attr);
|
||||
@ -890,6 +882,13 @@ void os::free_thread(OSThread* osthread) {
|
||||
assert(osthread != NULL, "osthread not set");
|
||||
|
||||
if (Thread::current()->osthread() == osthread) {
|
||||
#ifdef ASSERT
|
||||
sigset_t current;
|
||||
sigemptyset(¤t);
|
||||
pthread_sigmask(SIG_SETMASK, NULL, ¤t);
|
||||
assert(!sigismember(¤t, SR_signum), "SR signal should not be blocked!");
|
||||
#endif
|
||||
|
||||
// Restore caller's signal mask
|
||||
sigset_t sigmask = osthread->caller_sigmask();
|
||||
pthread_sigmask(SIG_SETMASK, &sigmask, NULL);
|
||||
@ -1395,7 +1394,7 @@ void os::die() {
|
||||
size_t os::lasterror(char *buf, size_t len) {
|
||||
if (errno == 0) return 0;
|
||||
|
||||
const char *s = ::strerror(errno);
|
||||
const char *s = os::strerror(errno);
|
||||
size_t n = ::strlen(s);
|
||||
if (n >= len) {
|
||||
n = len - 1;
|
||||
@ -2601,7 +2600,7 @@ static void warn_fail_commit_memory(char* addr, size_t size, bool exec,
|
||||
int err) {
|
||||
warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
|
||||
", %d) failed; error='%s' (errno=%d)", p2i(addr), size, exec,
|
||||
strerror(err), err);
|
||||
os::strerror(err), err);
|
||||
}
|
||||
|
||||
static void warn_fail_commit_memory(char* addr, size_t size,
|
||||
@ -2609,7 +2608,7 @@ static void warn_fail_commit_memory(char* addr, size_t size,
|
||||
int err) {
|
||||
warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
|
||||
", " SIZE_FORMAT ", %d) failed; error='%s' (errno=%d)", p2i(addr), size,
|
||||
alignment_hint, exec, strerror(err), err);
|
||||
alignment_hint, exec, os::strerror(err), err);
|
||||
}
|
||||
|
||||
// NOTE: Linux kernel does not really reserve the pages for us.
|
||||
@ -3912,7 +3911,8 @@ static void SR_handler(int sig, siginfo_t* siginfo, ucontext_t* context) {
|
||||
// after sigsuspend.
|
||||
int old_errno = errno;
|
||||
|
||||
Thread* thread = Thread::current();
|
||||
Thread* thread = Thread::current_or_null_safe();
|
||||
assert(thread != NULL, "Missing current thread in SR_handler");
|
||||
OSThread* osthread = thread->osthread();
|
||||
assert(thread->is_VM_thread() || thread->is_Java_thread(), "Must be VMThread or JavaThread");
|
||||
|
||||
@ -3924,7 +3924,7 @@ static void SR_handler(int sig, siginfo_t* siginfo, ucontext_t* context) {
|
||||
os::SuspendResume::State state = osthread->sr.suspended();
|
||||
if (state == os::SuspendResume::SR_SUSPENDED) {
|
||||
sigset_t suspend_set; // signals for sigsuspend()
|
||||
|
||||
sigemptyset(&suspend_set);
|
||||
// get current set of blocked signals and unblock resume signal
|
||||
pthread_sigmask(SIG_BLOCK, NULL, &suspend_set);
|
||||
sigdelset(&suspend_set, SR_signum);
|
||||
@ -4178,6 +4178,7 @@ static bool call_chained_handler(struct sigaction *actp, int sig,
|
||||
|
||||
// try to honor the signal mask
|
||||
sigset_t oset;
|
||||
sigemptyset(&oset);
|
||||
pthread_sigmask(SIG_SETMASK, &(actp->sa_mask), &oset);
|
||||
|
||||
// call into the chained handler
|
||||
@ -4188,7 +4189,7 @@ static bool call_chained_handler(struct sigaction *actp, int sig,
|
||||
}
|
||||
|
||||
// restore the signal mask
|
||||
pthread_sigmask(SIG_SETMASK, &oset, 0);
|
||||
pthread_sigmask(SIG_SETMASK, &oset, NULL);
|
||||
}
|
||||
// Tell jvm's signal handler the signal is taken care of.
|
||||
return true;
|
||||
@ -4615,7 +4616,7 @@ void os::init(void) {
|
||||
Linux::set_page_size(sysconf(_SC_PAGESIZE));
|
||||
if (Linux::page_size() == -1) {
|
||||
fatal("os_linux.cpp: os::init: sysconf failed (%s)",
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
}
|
||||
init_page_sizes((size_t) Linux::page_size());
|
||||
|
||||
@ -4633,7 +4634,7 @@ void os::init(void) {
|
||||
int status;
|
||||
pthread_condattr_t* _condattr = os::Linux::condAttr();
|
||||
if ((status = pthread_condattr_init(_condattr)) != 0) {
|
||||
fatal("pthread_condattr_init: %s", strerror(status));
|
||||
fatal("pthread_condattr_init: %s", os::strerror(status));
|
||||
}
|
||||
// Only set the clock if CLOCK_MONOTONIC is available
|
||||
if (os::supports_monotonic_clock()) {
|
||||
@ -4642,7 +4643,7 @@ void os::init(void) {
|
||||
warning("Unable to use monotonic clock with relative timed-waits" \
|
||||
" - changes to the time-of-day clock may have adverse affects");
|
||||
} else {
|
||||
fatal("pthread_condattr_setclock: %s", strerror(status));
|
||||
fatal("pthread_condattr_setclock: %s", os::strerror(status));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4888,7 +4889,7 @@ int os::active_processor_count() {
|
||||
log_trace(os)("active_processor_count: "
|
||||
"CPU_ALLOC failed (%s) - using "
|
||||
"online processor count: %d",
|
||||
strerror(errno), online_cpus);
|
||||
os::strerror(errno), online_cpus);
|
||||
return online_cpus;
|
||||
}
|
||||
}
|
||||
@ -4918,7 +4919,7 @@ int os::active_processor_count() {
|
||||
else {
|
||||
cpu_count = ::sysconf(_SC_NPROCESSORS_ONLN);
|
||||
warning("sched_getaffinity failed (%s)- using online processor count (%d) "
|
||||
"which may exceed available processors", strerror(errno), cpu_count);
|
||||
"which may exceed available processors", os::strerror(errno), cpu_count);
|
||||
}
|
||||
|
||||
if (cpus_p != &cpus) { // can only be true when CPU_ALLOC used
|
||||
@ -5769,6 +5770,7 @@ void Parker::park(bool isAbsolute, jlong time) {
|
||||
// Don't catch signals while blocked; let the running threads have the signals.
|
||||
// (This allows a debugger to break into the running thread.)
|
||||
sigset_t oldsigs;
|
||||
sigemptyset(&oldsigs);
|
||||
sigset_t* allowdebug_blocked = os::Linux::allowdebug_blocked_signals();
|
||||
pthread_sigmask(SIG_BLOCK, allowdebug_blocked, &oldsigs);
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,6 +29,7 @@
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "os_linux.inline.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/perfMemory.hpp"
|
||||
#include "services/memTracker.hpp"
|
||||
#include "utilities/exceptions.hpp"
|
||||
@ -100,7 +101,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not create Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
} else {
|
||||
int fd = result;
|
||||
@ -111,7 +112,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not write Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -123,7 +124,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
result = ::close(fd);
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result == OS_ERR) {
|
||||
warning("Could not close %s: %s\n", destfile, strerror(errno));
|
||||
warning("Could not close %s: %s\n", destfile, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -308,7 +309,7 @@ static DIR *open_directory_secure(const char* dirname) {
|
||||
if (errno == ELOOP) {
|
||||
warning("directory %s is a symlink and is not secure\n", dirname);
|
||||
} else {
|
||||
warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||||
warning("could not open directory %s: %s\n", dirname, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
return dirp;
|
||||
@ -419,7 +420,7 @@ static bool is_file_secure(int fd, const char *filename) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||||
warning("fstat failed on %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -459,7 +460,7 @@ static char* get_user_name(uid_t uid) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result != 0) {
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(result));
|
||||
os::strerror(result));
|
||||
}
|
||||
else if (p == NULL) {
|
||||
// this check is added to protect against an observed problem
|
||||
@ -473,7 +474,7 @@ static char* get_user_name(uid_t uid) {
|
||||
// Bug Id 89052 was opened with RedHat.
|
||||
//
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
}
|
||||
else {
|
||||
warning("Could not determine user name: %s\n",
|
||||
@ -509,7 +510,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
||||
"Process not found");
|
||||
}
|
||||
else /* EPERM */ {
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), os::strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
@ -664,7 +665,7 @@ static void remove_file(const char* path) {
|
||||
if (PrintMiscellaneous && Verbose && result == OS_ERR) {
|
||||
if (errno != ENOENT) {
|
||||
warning("Could not unlink shared memory backing"
|
||||
" store file %s : %s\n", path, strerror(errno));
|
||||
" store file %s : %s\n", path, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -772,7 +773,7 @@ static bool make_user_tmp_dir(const char* dirname) {
|
||||
//
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not create directory %s: %s\n",
|
||||
dirname, strerror(errno));
|
||||
dirname, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -814,7 +815,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
if (errno == ELOOP) {
|
||||
warning("file %s is a symlink and is not secure\n", filename);
|
||||
} else {
|
||||
warning("could not create file %s: %s\n", filename, strerror(errno));
|
||||
warning("could not create file %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
// close the directory and reset the current working directory
|
||||
@ -838,7 +839,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||||
warning("could not truncate shared memory file: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -847,7 +848,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not set shared memory file size: %s\n", strerror(errno));
|
||||
warning("could not set shared memory file size: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -897,7 +898,7 @@ static int open_sharedmem_file(const char* filename, int oflags, TRAPS) {
|
||||
"Permission denied", OS_ERR);
|
||||
}
|
||||
else {
|
||||
THROW_MSG_(vmSymbols::java_io_IOException(), strerror(errno), OS_ERR);
|
||||
THROW_MSG_(vmSymbols::java_io_IOException(), os::strerror(errno), OS_ERR);
|
||||
}
|
||||
}
|
||||
int fd = result;
|
||||
@ -970,7 +971,7 @@ static char* mmap_create_shared(size_t size) {
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed - %s\n", strerror(errno));
|
||||
warning("mmap failed - %s\n", os::strerror(errno));
|
||||
}
|
||||
remove_file(filename);
|
||||
FREE_C_HEAP_ARRAY(char, filename);
|
||||
@ -1034,7 +1035,7 @@ static size_t sharedmem_filesize(int fd, TRAPS) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed: %s\n", strerror(errno));
|
||||
warning("fstat failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(),
|
||||
"Could not determine PerfMemory size");
|
||||
@ -1151,7 +1152,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed: %s\n", strerror(errno));
|
||||
warning("mmap failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(),
|
||||
"Could not map PerfMemory");
|
||||
|
@ -1144,7 +1144,8 @@ void os::WatcherThreadCrashProtection::check_crash_protection(int sig,
|
||||
#define check_with_errno(check_type, cond, msg) \
|
||||
do { \
|
||||
int err = errno; \
|
||||
check_type(cond, "%s; error='%s' (errno=%d)", msg, strerror(err), err); \
|
||||
check_type(cond, "%s; error='%s' (errno=%s)", msg, os::strerror(err), \
|
||||
os::errno_name(err)); \
|
||||
} while (false)
|
||||
|
||||
#define assert_with_errno(cond, msg) check_with_errno(assert, cond, msg)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -461,7 +461,7 @@ SolarisAttachOperation* SolarisAttachListener::dequeue() {
|
||||
while ((res = ::sema_wait(wakeup())) == EINTR)
|
||||
;
|
||||
if (res) {
|
||||
warning("sema_wait failed: %s", strerror(res));
|
||||
warning("sema_wait failed: %s", os::strerror(res));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1009,7 +1009,7 @@ bool os::create_thread(Thread* thread, ThreadType thr_type,
|
||||
(uintx) tid, describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
|
||||
} else {
|
||||
log_warning(os, thread)("Failed to start thread - thr_create failed (%s) for attributes: %s.",
|
||||
strerror(status), describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
|
||||
os::errno_name(status), describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
|
||||
}
|
||||
|
||||
if (status != 0) {
|
||||
@ -1354,7 +1354,7 @@ jlong getTimeMillis() {
|
||||
jlong os::javaTimeMillis() {
|
||||
timeval t;
|
||||
if (gettimeofday(&t, NULL) == -1) {
|
||||
fatal("os::javaTimeMillis: gettimeofday (%s)", strerror(errno));
|
||||
fatal("os::javaTimeMillis: gettimeofday (%s)", os::strerror(errno));
|
||||
}
|
||||
return jlong(t.tv_sec) * 1000 + jlong(t.tv_usec) / 1000;
|
||||
}
|
||||
@ -1362,7 +1362,7 @@ jlong os::javaTimeMillis() {
|
||||
void os::javaTimeSystemUTC(jlong &seconds, jlong &nanos) {
|
||||
timeval t;
|
||||
if (gettimeofday(&t, NULL) == -1) {
|
||||
fatal("os::javaTimeSystemUTC: gettimeofday (%s)", strerror(errno));
|
||||
fatal("os::javaTimeSystemUTC: gettimeofday (%s)", os::strerror(errno));
|
||||
}
|
||||
seconds = jlong(t.tv_sec);
|
||||
nanos = jlong(t.tv_usec) * 1000;
|
||||
@ -1892,21 +1892,39 @@ void os::Solaris::print_libversion_info(outputStream* st) {
|
||||
|
||||
static bool check_addr0(outputStream* st) {
|
||||
jboolean status = false;
|
||||
const int read_chunk = 200;
|
||||
int ret = 0;
|
||||
int nmap = 0;
|
||||
int fd = ::open("/proc/self/map",O_RDONLY);
|
||||
if (fd >= 0) {
|
||||
prmap_t p;
|
||||
while (::read(fd, &p, sizeof(p)) > 0) {
|
||||
if (p.pr_vaddr == 0x0) {
|
||||
st->print("Warning: Address: 0x%x, Size: %dK, ",p.pr_vaddr, p.pr_size/1024, p.pr_mapname);
|
||||
st->print("Mapped file: %s, ", p.pr_mapname[0] == '\0' ? "None" : p.pr_mapname);
|
||||
st->print("Access:");
|
||||
st->print("%s",(p.pr_mflags & MA_READ) ? "r" : "-");
|
||||
st->print("%s",(p.pr_mflags & MA_WRITE) ? "w" : "-");
|
||||
st->print("%s",(p.pr_mflags & MA_EXEC) ? "x" : "-");
|
||||
st->cr();
|
||||
status = true;
|
||||
prmap_t *p = NULL;
|
||||
char *mbuff = (char *) calloc(read_chunk, sizeof(prmap_t));
|
||||
if (NULL == mbuff) {
|
||||
::close(fd);
|
||||
return status;
|
||||
}
|
||||
while ((ret = ::read(fd, mbuff, read_chunk*sizeof(prmap_t))) > 0) {
|
||||
//check if read() has not read partial data
|
||||
if( 0 != ret % sizeof(prmap_t)){
|
||||
break;
|
||||
}
|
||||
nmap = ret / sizeof(prmap_t);
|
||||
p = (prmap_t *)mbuff;
|
||||
for(int i = 0; i < nmap; i++){
|
||||
if (p->pr_vaddr == 0x0) {
|
||||
st->print("Warning: Address: " PTR_FORMAT ", Size: " SIZE_FORMAT "K, ",p->pr_vaddr, p->pr_size/1024);
|
||||
st->print("Mapped file: %s, ", p->pr_mapname[0] == '\0' ? "None" : p->pr_mapname);
|
||||
st->print("Access: ");
|
||||
st->print("%s",(p->pr_mflags & MA_READ) ? "r" : "-");
|
||||
st->print("%s",(p->pr_mflags & MA_WRITE) ? "w" : "-");
|
||||
st->print("%s",(p->pr_mflags & MA_EXEC) ? "x" : "-");
|
||||
st->cr();
|
||||
status = true;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
}
|
||||
free(mbuff);
|
||||
::close(fd);
|
||||
}
|
||||
return status;
|
||||
@ -2142,7 +2160,7 @@ void os::print_jni_name_suffix_on(outputStream* st, int args_size) {
|
||||
size_t os::lasterror(char *buf, size_t len) {
|
||||
if (errno == 0) return 0;
|
||||
|
||||
const char *s = ::strerror(errno);
|
||||
const char *s = os::strerror(errno);
|
||||
size_t n = ::strlen(s);
|
||||
if (n >= len) {
|
||||
n = len - 1;
|
||||
@ -2351,7 +2369,7 @@ static void warn_fail_commit_memory(char* addr, size_t bytes, bool exec,
|
||||
int err) {
|
||||
warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
|
||||
", %d) failed; error='%s' (errno=%d)", addr, bytes, exec,
|
||||
strerror(err), err);
|
||||
os::strerror(err), err);
|
||||
}
|
||||
|
||||
static void warn_fail_commit_memory(char* addr, size_t bytes,
|
||||
@ -2359,7 +2377,7 @@ static void warn_fail_commit_memory(char* addr, size_t bytes,
|
||||
int err) {
|
||||
warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
|
||||
", " SIZE_FORMAT ", %d) failed; error='%s' (errno=%d)", addr, bytes,
|
||||
alignment_hint, exec, strerror(err), err);
|
||||
alignment_hint, exec, os::strerror(err), err);
|
||||
}
|
||||
|
||||
int os::Solaris::commit_memory_impl(char* addr, size_t bytes, bool exec) {
|
||||
@ -2740,7 +2758,7 @@ char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) {
|
||||
char buf[256];
|
||||
buf[0] = '\0';
|
||||
if (addr == NULL) {
|
||||
jio_snprintf(buf, sizeof(buf), ": %s", strerror(err));
|
||||
jio_snprintf(buf, sizeof(buf), ": %s", os::strerror(err));
|
||||
}
|
||||
warning("attempt_reserve_memory_at: couldn't reserve " SIZE_FORMAT " bytes at "
|
||||
PTR_FORMAT ": reserve_memory_helper returned " PTR_FORMAT
|
||||
@ -4354,7 +4372,7 @@ void os::init(void) {
|
||||
|
||||
page_size = sysconf(_SC_PAGESIZE);
|
||||
if (page_size == -1) {
|
||||
fatal("os_solaris.cpp: os::init: sysconf failed (%s)", strerror(errno));
|
||||
fatal("os_solaris.cpp: os::init: sysconf failed (%s)", os::strerror(errno));
|
||||
}
|
||||
init_page_sizes((size_t) page_size);
|
||||
|
||||
@ -4366,7 +4384,7 @@ void os::init(void) {
|
||||
|
||||
int fd = ::open("/dev/zero", O_RDWR);
|
||||
if (fd < 0) {
|
||||
fatal("os::init: cannot open /dev/zero (%s)", strerror(errno));
|
||||
fatal("os::init: cannot open /dev/zero (%s)", os::strerror(errno));
|
||||
} else {
|
||||
Solaris::set_dev_zero_fd(fd);
|
||||
|
||||
@ -5607,7 +5625,7 @@ int os::fork_and_exec(char* cmd) {
|
||||
|
||||
if (pid < 0) {
|
||||
// fork failed
|
||||
warning("fork failed: %s", strerror(errno));
|
||||
warning("fork failed: %s", os::strerror(errno));
|
||||
return -1;
|
||||
|
||||
} else if (pid == 0) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -102,7 +102,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not create Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -114,7 +114,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not write Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -125,7 +125,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
result = ::close(fd);
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result == OS_ERR) {
|
||||
warning("Could not close %s: %s\n", destfile, strerror(errno));
|
||||
warning("Could not close %s: %s\n", destfile, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -311,7 +311,7 @@ static DIR *open_directory_secure(const char* dirname) {
|
||||
if (errno == ELOOP) {
|
||||
warning("directory %s is a symlink and is not secure\n", dirname);
|
||||
} else {
|
||||
warning("could not open directory %s: %s\n", dirname, strerror(errno));
|
||||
warning("could not open directory %s: %s\n", dirname, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
return dirp;
|
||||
@ -422,7 +422,7 @@ static bool is_file_secure(int fd, const char *filename) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed on %s: %s\n", filename, strerror(errno));
|
||||
warning("fstat failed on %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -464,7 +464,7 @@ static char* get_user_name(uid_t uid) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (p == NULL) {
|
||||
warning("Could not retrieve passwd entry: %s\n",
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
}
|
||||
else {
|
||||
warning("Could not determine user name: %s\n",
|
||||
@ -500,7 +500,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
||||
"Process not found");
|
||||
}
|
||||
else /* EPERM */ {
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno));
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(), os::strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
@ -657,7 +657,7 @@ static char* get_user_name(int vmid, TRAPS) {
|
||||
// In this case, the psinfo file for the process id existed,
|
||||
// but we didn't have permission to access it.
|
||||
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
}
|
||||
|
||||
// at this point, we don't know if the process id itself doesn't
|
||||
@ -703,7 +703,7 @@ static void remove_file(const char* path) {
|
||||
if (PrintMiscellaneous && Verbose && result == OS_ERR) {
|
||||
if (errno != ENOENT) {
|
||||
warning("Could not unlink shared memory backing"
|
||||
" store file %s : %s\n", path, strerror(errno));
|
||||
" store file %s : %s\n", path, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -813,7 +813,7 @@ static bool make_user_tmp_dir(const char* dirname) {
|
||||
//
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not create directory %s: %s\n",
|
||||
dirname, strerror(errno));
|
||||
dirname, os::strerror(errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -855,7 +855,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
if (errno == ELOOP) {
|
||||
warning("file %s is a symlink and is not secure\n", filename);
|
||||
} else {
|
||||
warning("could not create file %s: %s\n", filename, strerror(errno));
|
||||
warning("could not create file %s: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
// close the directory and reset the current working directory
|
||||
@ -879,7 +879,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)0), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not truncate shared memory file: %s\n", strerror(errno));
|
||||
warning("could not truncate shared memory file: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -888,7 +888,7 @@ static int create_sharedmem_resources(const char* dirname, const char* filename,
|
||||
RESTARTABLE(::ftruncate(fd, (off_t)size), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not set shared memory file size: %s\n", strerror(errno));
|
||||
warning("could not set shared memory file size: %s\n", os::strerror(errno));
|
||||
}
|
||||
::close(fd);
|
||||
return -1;
|
||||
@ -916,7 +916,7 @@ static int open_sharedmem_file(const char* filename, int oflags, TRAPS) {
|
||||
"Permission denied", OS_ERR);
|
||||
}
|
||||
else {
|
||||
THROW_MSG_(vmSymbols::java_io_IOException(), strerror(errno), OS_ERR);
|
||||
THROW_MSG_(vmSymbols::java_io_IOException(), os::strerror(errno), OS_ERR);
|
||||
}
|
||||
}
|
||||
int fd = result;
|
||||
@ -990,7 +990,7 @@ static char* mmap_create_shared(size_t size) {
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed - %s\n", strerror(errno));
|
||||
warning("mmap failed - %s\n", os::strerror(errno));
|
||||
}
|
||||
remove_file(filename);
|
||||
FREE_C_HEAP_ARRAY(char, filename);
|
||||
@ -1055,7 +1055,7 @@ static size_t sharedmem_filesize(int fd, TRAPS) {
|
||||
RESTARTABLE(::fstat(fd, &statbuf), result);
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("fstat failed: %s\n", strerror(errno));
|
||||
warning("fstat failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(),
|
||||
"Could not determine PerfMemory size");
|
||||
@ -1172,7 +1172,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
|
||||
|
||||
if (mapAddress == MAP_FAILED) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("mmap failed: %s\n", strerror(errno));
|
||||
warning("mmap failed: %s\n", os::strerror(errno));
|
||||
}
|
||||
THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(),
|
||||
"Could not map PerfMemory");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/thread.inline.hpp"
|
||||
#include "runtime/threadCritical.hpp"
|
||||
|
||||
@ -49,7 +50,7 @@ ThreadCritical::ThreadCritical() {
|
||||
if (global_mut_owner != owner) {
|
||||
if (os::Solaris::mutex_lock(&global_mut))
|
||||
fatal("ThreadCritical::ThreadCritical: mutex_lock failed (%s)",
|
||||
strerror(errno));
|
||||
os::strerror(errno));
|
||||
assert(global_mut_count == 0, "must have clean count");
|
||||
assert(global_mut_owner == -1, "must have clean owner");
|
||||
}
|
||||
@ -68,7 +69,7 @@ ThreadCritical::~ThreadCritical() {
|
||||
if (global_mut_count == 0) {
|
||||
global_mut_owner = -1;
|
||||
if (os::Solaris::mutex_unlock(&global_mut))
|
||||
fatal("ThreadCritical::~ThreadCritical: mutex_unlock failed (%s)", strerror(errno));
|
||||
fatal("ThreadCritical::~ThreadCritical: mutex_unlock failed (%s)", os::strerror(errno));
|
||||
}
|
||||
} else {
|
||||
assert (Threads::number_of_threads() == 0, "valid only during initialization");
|
||||
|
@ -642,7 +642,7 @@ bool os::create_thread(Thread* thread, ThreadType thr_type,
|
||||
thread_id, describe_beginthreadex_attributes(buf, sizeof(buf), stack_size, initflag));
|
||||
} else {
|
||||
log_warning(os, thread)("Failed to start thread - _beginthreadex failed (%s) for attributes: %s.",
|
||||
strerror(errno), describe_beginthreadex_attributes(buf, sizeof(buf), stack_size, initflag));
|
||||
os::errno_name(errno), describe_beginthreadex_attributes(buf, sizeof(buf), stack_size, initflag));
|
||||
}
|
||||
|
||||
if (thread_handle == NULL) {
|
||||
@ -1898,7 +1898,7 @@ size_t os::lasterror(char* buf, size_t len) {
|
||||
|
||||
if (errno != 0) {
|
||||
// C runtime error that has no corresponding DOS error code
|
||||
const char* s = strerror(errno);
|
||||
const char* s = os::strerror(errno);
|
||||
size_t n = strlen(s);
|
||||
if (n >= len) n = len - 1;
|
||||
strncpy(buf, s, n);
|
||||
@ -2186,13 +2186,6 @@ extern "C" void events();
|
||||
// Windows Vista/2008 heap corruption check
|
||||
#define EXCEPTION_HEAP_CORRUPTION 0xC0000374
|
||||
|
||||
#define def_excpt(val) #val, val
|
||||
|
||||
struct siglabel {
|
||||
char *name;
|
||||
int number;
|
||||
};
|
||||
|
||||
// All Visual C++ exceptions thrown from code generated by the Microsoft Visual
|
||||
// C++ compiler contain this error code. Because this is a compiler-generated
|
||||
// error, the code is not listed in the Win32 API header files.
|
||||
@ -2202,8 +2195,9 @@ struct siglabel {
|
||||
|
||||
#define EXCEPTION_UNCAUGHT_CXX_EXCEPTION 0xE06D7363
|
||||
|
||||
#define def_excpt(val) { #val, (val) }
|
||||
|
||||
struct siglabel exceptlabels[] = {
|
||||
static const struct { char* name; uint number; } exceptlabels[] = {
|
||||
def_excpt(EXCEPTION_ACCESS_VIOLATION),
|
||||
def_excpt(EXCEPTION_DATATYPE_MISALIGNMENT),
|
||||
def_excpt(EXCEPTION_BREAKPOINT),
|
||||
@ -2228,16 +2222,18 @@ struct siglabel exceptlabels[] = {
|
||||
def_excpt(EXCEPTION_GUARD_PAGE),
|
||||
def_excpt(EXCEPTION_INVALID_HANDLE),
|
||||
def_excpt(EXCEPTION_UNCAUGHT_CXX_EXCEPTION),
|
||||
def_excpt(EXCEPTION_HEAP_CORRUPTION),
|
||||
def_excpt(EXCEPTION_HEAP_CORRUPTION)
|
||||
#ifdef _M_IA64
|
||||
def_excpt(EXCEPTION_REG_NAT_CONSUMPTION),
|
||||
, def_excpt(EXCEPTION_REG_NAT_CONSUMPTION)
|
||||
#endif
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
#undef def_excpt
|
||||
|
||||
const char* os::exception_name(int exception_code, char *buf, size_t size) {
|
||||
for (int i = 0; exceptlabels[i].name != NULL; i++) {
|
||||
if (exceptlabels[i].number == exception_code) {
|
||||
uint code = static_cast<uint>(exception_code);
|
||||
for (uint i = 0; i < ARRAY_SIZE(exceptlabels); ++i) {
|
||||
if (exceptlabels[i].number == code) {
|
||||
jio_snprintf(buf, size, "%s", exceptlabels[i].name);
|
||||
return buf;
|
||||
}
|
||||
@ -2445,7 +2441,7 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) {
|
||||
jio_snprintf(buf, sizeof(buf), "Execution protection violation "
|
||||
"at " INTPTR_FORMAT
|
||||
", unguarding " INTPTR_FORMAT ": %s", addr,
|
||||
page_start, (res ? "success" : strerror(errno)));
|
||||
page_start, (res ? "success" : os::strerror(errno)));
|
||||
tty->print_raw_cr(buf);
|
||||
}
|
||||
|
||||
@ -5638,9 +5634,11 @@ int os::get_signal_number(const char* name) {
|
||||
"TERM", SIGTERM, // software term signal from kill
|
||||
"BREAK", SIGBREAK, // Ctrl-Break sequence
|
||||
"ILL", SIGILL}; // illegal instruction
|
||||
for(int i=0;i<sizeof(siglabels)/sizeof(struct siglabel);i++)
|
||||
if(!strcmp(name, siglabels[i].name))
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(siglabels); ++i) {
|
||||
if (strcmp(name, siglabels[i].name) == 0) {
|
||||
return siglabels[i].number;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -96,7 +96,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (fd == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not create Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
} else {
|
||||
for (size_t remaining = size; remaining > 0;) {
|
||||
@ -105,7 +105,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
if (nbytes == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not write Perfdata save file: %s: %s\n",
|
||||
destfile, strerror(errno));
|
||||
destfile, os::strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -117,7 +117,7 @@ static void save_memory_to_file(char* addr, size_t size) {
|
||||
int result = ::_close(fd);
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (result == OS_ERR) {
|
||||
warning("Could not close %s: %s\n", destfile, strerror(errno));
|
||||
warning("Could not close %s: %s\n", destfile, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -497,7 +497,7 @@ static void remove_file(const char* dirname, const char* filename) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
if (errno != ENOENT) {
|
||||
warning("Could not unlink shared memory backing"
|
||||
" store file %s : %s\n", path, strerror(errno));
|
||||
" store file %s : %s\n", path, os::strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1358,7 +1358,7 @@ static HANDLE create_sharedmem_resources(const char* dirname, const char* filena
|
||||
if (ret_code == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("Could not get status information from file %s: %s\n",
|
||||
filename, strerror(errno));
|
||||
filename, os::strerror(errno));
|
||||
}
|
||||
CloseHandle(fmh);
|
||||
CloseHandle(fh);
|
||||
@ -1553,7 +1553,7 @@ static size_t sharedmem_filesize(const char* filename, TRAPS) {
|
||||
//
|
||||
if (::stat(filename, &statbuf) == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("stat %s failed: %s\n", filename, strerror(errno));
|
||||
warning("stat %s failed: %s\n", filename, os::strerror(errno));
|
||||
}
|
||||
THROW_MSG_0(vmSymbols::java_io_IOException(),
|
||||
"Could not determine PerfMemory size");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -33,6 +33,7 @@
|
||||
#include "interpreter/interpreter.hpp"
|
||||
#include "jvm_windows.h"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "mutex_windows.inline.hpp"
|
||||
#include "nativeInst_x86.hpp"
|
||||
#include "os_share_windows.hpp"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -35,7 +35,9 @@
|
||||
#include "code/debugInfoRec.hpp"
|
||||
#include "compiler/compileLog.hpp"
|
||||
#include "compiler/compilerDirectives.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
#include "runtime/timerTrace.hpp"
|
||||
|
||||
typedef enum {
|
||||
_t_compile,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -34,6 +34,7 @@
|
||||
#include "ci/ciMemberName.hpp"
|
||||
#include "compiler/compileBroker.hpp"
|
||||
#include "interpreter/bytecode.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
#include "runtime/compilationPolicy.hpp"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,6 +29,7 @@
|
||||
#include "c1/c1_IR.hpp"
|
||||
#include "c1/c1_InstructionPrinter.hpp"
|
||||
#include "c1/c1_Optimizer.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "utilities/bitMap.inline.hpp"
|
||||
|
||||
|
||||
|
@ -556,17 +556,16 @@ void LIR_Assembler::emit_op1(LIR_Op1* op) {
|
||||
leal(op->in_opr(), op->result_opr());
|
||||
break;
|
||||
|
||||
case lir_null_check:
|
||||
if (GenerateCompilerNullChecks) {
|
||||
ImplicitNullCheckStub* stub = add_debug_info_for_null_check_here(op->info());
|
||||
case lir_null_check: {
|
||||
ImplicitNullCheckStub* stub = add_debug_info_for_null_check_here(op->info());
|
||||
|
||||
if (op->in_opr()->is_single_cpu()) {
|
||||
_masm->null_check(op->in_opr()->as_register(), stub->entry());
|
||||
} else {
|
||||
Unimplemented();
|
||||
}
|
||||
if (op->in_opr()->is_single_cpu()) {
|
||||
_masm->null_check(op->in_opr()->as_register(), stub->entry());
|
||||
} else {
|
||||
Unimplemented();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case lir_monaddr:
|
||||
monitor_address(op->in_opr()->as_constant_ptr()->as_jint(), op->result_opr());
|
||||
|
@ -2041,8 +2041,7 @@ void LIRGenerator::do_Throw(Throw* x) {
|
||||
// to avoid a fixed interval with an oop during the null check.
|
||||
// Use a copy of the CodeEmitInfo because debug information is
|
||||
// different for null_check and throw.
|
||||
if (GenerateCompilerNullChecks &&
|
||||
(x->exception()->as_NewInstance() == NULL && x->exception()->as_ExceptionObject() == NULL)) {
|
||||
if (x->exception()->as_NewInstance() == NULL && x->exception()->as_ExceptionObject() == NULL) {
|
||||
// if the exception object wasn't created using new then it might be null.
|
||||
__ null_check(exception_opr, new CodeEmitInfo(info, x->state()->copy(ValueStack::ExceptionState, x->state()->bci())));
|
||||
}
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "c1/c1_LinearScan.hpp"
|
||||
#include "c1/c1_ValueStack.hpp"
|
||||
#include "code/vmreg.inline.hpp"
|
||||
#include "runtime/timerTrace.hpp"
|
||||
#include "utilities/bitMap.inline.hpp"
|
||||
|
||||
#ifndef PRODUCT
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -28,6 +28,7 @@
|
||||
#include "c1/c1_ValueMap.hpp"
|
||||
#include "c1/c1_ValueSet.hpp"
|
||||
#include "c1/c1_ValueStack.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "utilities/bitMap.inline.hpp"
|
||||
#include "compiler/compileLog.hpp"
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,6 +27,7 @@
|
||||
#include "ci/ciArray.hpp"
|
||||
#include "ci/ciInstance.hpp"
|
||||
#include "ci/ciNullObject.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
|
||||
|
||||
// predefined types
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user