7121403: [TESTBUG] runtime/7051189/Xchecksig.sh fails on 64bit solaris
8023393: Need to suppress info message if -Xcheck:jni used with libjsig.dylab on Mac OSX
Summary: Rewrite 7051189 test in Java, port Linux fix for 7051189 to Mac OSX.
Reviewed-by: coleenp, dholmes, mseledtsov, ccheung
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Wed Aug 21 13:18:52 2013 +0200
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Thu Aug 22 11:52:27 2013 -0400
@@ -3287,11 +3287,15 @@
// and if UserSignalHandler is installed all bets are off
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/test/runtime/7051189/Xchecksig.sh Wed Aug 21 13:18:52 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-#
-# Copyright (c) 2011, 2012, 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=${PWD}
- echo "TESTSRC not set. Using "${TESTSRC}" as default"
-fi
-echo "TESTSRC=${TESTSRC}"
-## Adding common setup Variables for running shell tests.
-. ${TESTSRC}/../../test_env.sh
-
-OS=`uname -s`
-case "$OS" in
- Windows_* | CYGWIN_* )
- printf "Not testing libjsig.so on Windows. 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).
-# Check if TESTVMOPS contains -d64, but cannot use
-# java ${TESTVMOPS} to run "java -d64" with LD_PRELOAD.
-
-if [ ${OS} -eq "SunOS" ]
-then
- printf "SunOS test TESTVMOPTS = ${TESTVMOPTS}"
- printf ${TESTVMOPTS} | grep d64 > /dev/null
- if [ $? -eq 0 ]
- then
- printf "SunOS 64-bit test\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=${COMPILEJAVA}${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 appears 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} ${TESTVMOPTS} -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} ${TESTVMOPTS} -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
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/XCheckJniJsig/XCheckJSig.java Thu Aug 22 11:52:27 2013 -0400
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2013, 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
+ * @bug 7051189 8023393
+ * @summary Need to suppress info message if -Xcheck:jni is used with libjsig.so
+ * @library /testlibrary
+ * @run main XCheckJSig
+ */
+
+import java.util.*;
+import com.oracle.java.testlibrary.*;
+
+public class XCheckJSig {
+ public static void main(String args[]) throws Throwable {
+
+ System.out.println("Regression test for bugs 7051189 and 8023393");
+ if (!Platform.isSolaris() && !Platform.isLinux() && !Platform.isOSX()) {
+ System.out.println("Test only applicable on Solaris, Linux, and Mac OSX, skipping");
+ return;
+ }
+
+ String jdk_path = System.getProperty("test.jdk");
+ String os_arch = Platform.getOsArch();
+ String libjsig;
+ String env_var;
+ if (Platform.isOSX()) {
+ libjsig = jdk_path + "/jre/lib/server/libjsig.dylib";
+ env_var = "DYLD_INSERT_LIBRARIES";
+ } else {
+ libjsig = jdk_path + "/jre/lib/" + os_arch + "/libjsig.so";
+ env_var = "LD_PRELOAD";
+ }
+ String java_program;
+ if (Platform.isSolaris()) {
+ // On Solaris, need to call the 64-bit Java directly in order for
+ // LD_PRELOAD to work because libjsig.so is 64-bit.
+ java_program = jdk_path + "/jre/bin/" + os_arch + "/java";
+ } else {
+ java_program = JDKToolFinder.getJDKTool("java");
+ }
+ // If this test fails, these might be useful to know.
+ System.out.println("libjsig: " + libjsig);
+ System.out.println("osArch: " + os_arch);
+ System.out.println("java_program: " + java_program);
+
+ ProcessBuilder pb = new ProcessBuilder(java_program, "-Xcheck:jni", "-version");
+ Map<String, String> env = pb.environment();
+ env.put(env_var, libjsig);
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("libjsig is activated");
+ output.shouldHaveExitValue(0);
+
+ pb = new ProcessBuilder(java_program, "-Xcheck:jni", "-verbose:jni", "-version");
+ env = pb.environment();
+ env.put(env_var, libjsig);
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("libjsig is activated");
+ output.shouldHaveExitValue(0);
+ }
+}