7051189: Need to suppress info message if -xcheck:jni used with libjsig.so
authorkevinw
Thu, 22 Sep 2011 16:48:41 +0100
changeset 10561 bf51fe78a9ad
parent 10560 6c84fc656d88
child 10571 956e26fdfc4f
7051189: Need to suppress info message if -xcheck:jni used with libjsig.so Reviewed-by: coleenp, minqi
hotspot/src/os/linux/vm/os_linux.cpp
hotspot/src/os/solaris/vm/os_solaris.cpp
hotspot/test/runtime/7051189/Xchecksig.sh
--- 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
+