diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp index f1e6f1597cf453f5056e0d4f2c26121805a9e20d..be867d366dee83f45c6cbe6f76619a25fa03b61a 100644 --- a/src/os/linux/vm/os_linux.cpp +++ b/src/os/linux/vm/os_linux.cpp @@ -3895,14 +3895,19 @@ void os::Linux::install_signal_handlers() { } // 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; } } diff --git a/src/os/solaris/vm/os_solaris.cpp b/src/os/solaris/vm/os_solaris.cpp index ad02278969dc69b78bbe17d6cd1ee247c8b71f5f..fb03515c451ea7fa6636494280323cbdb786fa62 100644 --- a/src/os/solaris/vm/os_solaris.cpp +++ b/src/os/solaris/vm/os_solaris.cpp @@ -4592,14 +4592,19 @@ void os::Solaris::install_signal_handlers() { } // 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; } } diff --git a/test/runtime/7051189/Xchecksig.sh b/test/runtime/7051189/Xchecksig.sh new file mode 100644 index 0000000000000000000000000000000000000000..410cdb9b335f6df87e979ccc691c474f27cd2651 --- /dev/null +++ b/test/runtime/7051189/Xchecksig.sh @@ -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 +