Skip to content

Commit 37aa7c1

Browse files
author
Harold Seigel
committed
8292559: Add test for -XX:+CheckJNICalls showing changed signal handlers
Reviewed-by: stuefe, coleenp
1 parent f2f0cd8 commit 37aa7c1

File tree

3 files changed

+114
-1
lines changed

3 files changed

+114
-1
lines changed

make/test/JtregNativeHotspot.gmk

+1-1
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
874874

875875
ifeq ($(call isTargetOs, windows), true)
876876
BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
877-
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c libCompleteExit.c
877+
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c libCompleteExit.c libTestPsig.c
878878
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit := jvm.lib
879879
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exedaemonDestroy := jvm.lib
880880
else
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
/*
25+
* @test TestPosixSig.java
26+
* @bug 8292559
27+
* @summary test that -XX:+CheckJNICalss displays changed signal handlers.
28+
* @requires os.family != "windows"
29+
* @library /test/lib
30+
* @run driver TestPosixSig
31+
*/
32+
33+
import jdk.test.lib.process.ProcessTools;
34+
import jdk.test.lib.process.OutputAnalyzer;
35+
36+
public class TestPosixSig {
37+
38+
private static native void changeSigActionFor(int val);
39+
40+
public static void main(String[] args) throws Throwable {
41+
// Get the library path property.
42+
String libpath = System.getProperty("java.library.path");
43+
44+
if (args.length == 0) {
45+
46+
// Create a new java process for the TestPsig Java/JNI test.
47+
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
48+
"-XX:+CheckJNICalls",
49+
"-Djava.library.path=" + libpath + ":.",
50+
"TestPosixSig", "dummy");
51+
52+
// Start the process and check the output.
53+
OutputAnalyzer output = new OutputAnalyzer(pb.start());
54+
String outputString = output.getOutput();
55+
if (!outputString.contains("Warning: SIGILL handler modified!") ||
56+
!outputString.contains("Warning: SIGFPE handler modified!")) {
57+
System.out.println("output: " + outputString);
58+
throw new RuntimeException("Test failed, missing signal Warning");
59+
}
60+
output.shouldHaveExitValue(0);
61+
62+
} else {
63+
System.loadLibrary("TestPsig");
64+
TestPosixSig.changeSigActionFor(8); // SIGFPE
65+
TestPosixSig.changeSigActionFor(4); // SIGILL
66+
Thread.sleep(600);
67+
}
68+
}
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
#include <stdio.h>
25+
#include <jni.h>
26+
#include <signal.h>
27+
#include <sys/ucontext.h>
28+
#include <errno.h>
29+
#include <string.h>
30+
31+
static void sig_handler(int sig, siginfo_t *info, ucontext_t *context) {
32+
printf( " HANDLER (1) " );
33+
}
34+
35+
JNIEXPORT void JNICALL Java_TestPosixSig_changeSigActionFor(JNIEnv *env, jclass klass, jint val) {
36+
struct sigaction act;
37+
act.sa_handler = (void (*)())sig_handler;
38+
sigemptyset(&act.sa_mask);
39+
act.sa_flags = 0;
40+
int retval = sigaction(val, &act, 0);
41+
if (retval != 0) {
42+
printf("ERROR: failed to set %d signal handler error=%s\n", val, strerror(errno));
43+
}
44+
}

0 commit comments

Comments
 (0)