7051189: Need to suppress info message if -xcheck:jni used with libjsig.so
Reviewed-by: coleenp, minqi
--- a/hotspot/src/os/linux/vm/os_linux.cpp Mon Sep 19 12:18:46 2011 -0700
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Thu Sep 22 16:48:41 2011 +0100
@@ -3895,14 +3895,19 @@
}
// We don't activate signal checker if libjsig is in place, we trust ourselves
- // and if UserSignalHandler is installed all bets are off
+ // and if UserSignalHandler is installed all bets are off.
+ // Log that signal checking is off only if -verbose:jni is specified.
if (CheckJNICalls) {
if (libjsig_is_loaded) {
- tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
+ if (PrintJNIResolving) {
+ tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
+ }
check_signals = false;
}
if (AllowUserSignalHandlers) {
- tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
+ if (PrintJNIResolving) {
+ tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
+ }
check_signals = false;
}
}
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Mon Sep 19 12:18:46 2011 -0700
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Thu Sep 22 16:48:41 2011 +0100
@@ -4592,14 +4592,19 @@
}
// We don't activate signal checker if libjsig is in place, we trust ourselves
- // and if UserSignalHandler is installed all bets are off
+ // and if UserSignalHandler is installed all bets are off.
+ // Log that signal checking is off only if -verbose:jni is specified.
if (CheckJNICalls) {
if (libjsig_is_loaded) {
- tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
+ if (PrintJNIResolving) {
+ tty->print_cr("Info: libjsig is activated, all active signal checking is disabled");
+ }
check_signals = false;
}
if (AllowUserSignalHandlers) {
- tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
+ if (PrintJNIResolving) {
+ tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled");
+ }
check_signals = false;
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/7051189/Xchecksig.sh Thu Sep 22 16:48:41 2011 +0100
@@ -0,0 +1,151 @@
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+
+# @test Xchecksig.sh
+# @bug 7051189
+# @summary Need to suppress info message if -xcheck:jni used with libjsig.so
+# @run shell Xchecksig.sh
+#
+
+if [ "${TESTSRC}" = "" ]
+ then TESTSRC=.
+fi
+
+if [ "${TESTJAVA}" = "" ]
+then
+ PARENT=`dirname \`which java\``
+ TESTJAVA=`dirname ${PARENT}`
+ printf "TESTJAVA not set, selecting " ${TESTJAVA}
+ printf " If this is incorrect, try setting the variable manually.\n"
+fi
+
+
+BIT_FLAG=""
+
+OS=`uname -s`
+case "$OS" in
+ SunOS | Linux )
+ FS="/"
+ ## for solaris, linux it's HOME
+ FILE_LOCATION=$HOME
+ if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ]
+ then
+ BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT`
+ fi
+ ;;
+ Windows_* )
+ printf "Not testing libjsig.so on Windows. PASSED.\n "
+ exit 0
+ ;;
+ * )
+ printf "Not testing libjsig.so on unrecognised system. PASSED.\n "
+ exit 0
+ ;;
+esac
+
+
+JAVA=${TESTJAVA}${FS}bin${FS}java
+
+# LD_PRELOAD arch needs to match the binary we run, so run the java
+# 64-bit binary directly if we are testing 64-bit (bin/ARCH/java).
+
+# However JPRT runs: .../solaris_x64_5.10-debug/bin/java
+# ..which is 32-bit, when it has built the 64-bit version to test.
+#
+# How does this script know we are meant to run the 64-bit version?
+# Can check for the path of the binary containing "x64" on Solaris.
+
+if [ ${OS} -eq "SunOS" ]
+then
+ printf "SunOS test JAVA=${JAVA}"
+ printf ${JAVA} | grep x64 > /dev/null
+ if [ $? -eq 0 ]
+ then
+ printf "SunOS x64 test, forcing -d64\n"
+ BIT_FLAG=-d64
+ fi
+fi
+
+ARCH=`uname -p`
+case $ARCH in
+ i386)
+ if [ X${BIT_FLAG} != "X" ]
+ then
+ ARCH=amd64
+ JAVA=${TESTJAVA}${FS}bin${FS}${ARCH}${FS}java
+ fi
+ ;;
+ sparc)
+ if [ X${BIT_FLAG} != "X" ]
+ then
+ ARCH=sparcv9
+ JAVA=${TESTJAVA}${FS}bin${FS}${ARCH}${FS}java
+ fi
+ ;;
+ * )
+ printf "Not testing architecture $ARCH, skipping test.\n"
+ exit 0
+ ;;
+esac
+
+LIBJSIG=${TESTJAVA}${FS}jre${FS}lib${FS}${ARCH}${FS}libjsig.so
+
+# If libjsig and binary do not match, skip test.
+
+A=`file ${LIBJSIG} | awk '{ print $3 }'`
+B=`file ${JAVA} | awk '{ print $3 }'`
+
+if [ $A -ne $B ]
+then
+ printf "Mismatching binary and library to preload, skipping test.\n"
+ exit 0
+fi
+
+if [ ! -f ${LIBJSIG} ]
+then
+ printf "Skipping test: libjsig missing for given architecture: ${LIBJSIG}\n"
+ exit 0
+fi
+# Use java -version to test, java version info appeas on stderr,
+# the libjsig message we are removing appears on stdout.
+
+# grep returns zero meaning found, non-zero means not found:
+
+LD_PRELOAD=${LIBJSIG} ${JAVA} ${BIT_FLAG} -Xcheck:jni -version 2>&1 | grep "libjsig is activated"
+
+if [ $? -eq 0 ]; then
+ printf "Failed: -Xcheck:jni prints message when libjsig.so is loaded.\n"
+ exit 1
+fi
+
+
+LD_PRELOAD=${LIBJSIG} ${JAVA} ${BIT_FLAG} -Xcheck:jni -verbose:jni -version 2>&1 | grep "libjsig is activated"
+if [ $? != 0 ]; then
+ printf "Failed: -Xcheck:jni does not print message when libjsig.so is loaded and -verbose:jni is set.\n"
+ exit 1
+fi
+
+printf "PASSED\n"
+exit 0
+