8143291: Remove redundant coding around os::exception_name
Reviewed-by: dholmes, coleenp
--- a/hotspot/src/os/aix/vm/jvm_aix.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/aix/vm/jvm_aix.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -109,92 +109,3 @@
return JNI_TRUE;
JVM_END
-/*
- All the defined signal names for Linux.
-
- NOTE that not all of these names are accepted by our Java implementation
-
- Via an existing claim by the VM, sigaction restrictions, or
- the "rules of Unix" some of these names will be rejected at runtime.
- For example the VM sets up to handle USR1, sigaction returns EINVAL for
- STOP, and Linux simply doesn't allow catching of KILL.
-
- Here are the names currently accepted by a user of sun.misc.Signal with
- 1.4.1 (ignoring potential interaction with use of chaining, etc):
-
- HUP, INT, TRAP, ABRT, IOT, BUS, USR2, PIPE, ALRM, TERM, STKFLT,
- CLD, CHLD, CONT, TSTP, TTIN, TTOU, URG, XCPU, XFSZ, VTALRM, PROF,
- WINCH, POLL, IO, PWR, SYS
-
-*/
-
-struct siglabel {
- const char *name;
- int number;
-};
-
-struct siglabel siglabels[] = {
- /* derived from /usr/include/bits/signum.h on RH7.2 */
- "HUP", SIGHUP, /* Hangup (POSIX). */
- "INT", SIGINT, /* Interrupt (ANSI). */
- "QUIT", SIGQUIT, /* Quit (POSIX). */
- "ILL", SIGILL, /* Illegal instruction (ANSI). */
- "TRAP", SIGTRAP, /* Trace trap (POSIX). */
- "ABRT", SIGABRT, /* Abort (ANSI). */
- "IOT", SIGIOT, /* IOT trap (4.2 BSD). */
- "BUS", SIGBUS, /* BUS error (4.2 BSD). */
- "FPE", SIGFPE, /* Floating-point exception (ANSI). */
- "KILL", SIGKILL, /* Kill, unblockable (POSIX). */
- "USR1", SIGUSR1, /* User-defined signal 1 (POSIX). */
- "SEGV", SIGSEGV, /* Segmentation violation (ANSI). */
- "USR2", SIGUSR2, /* User-defined signal 2 (POSIX). */
- "PIPE", SIGPIPE, /* Broken pipe (POSIX). */
- "ALRM", SIGALRM, /* Alarm clock (POSIX). */
- "TERM", SIGTERM, /* Termination (ANSI). */
-#ifdef SIGSTKFLT
- "STKFLT", SIGSTKFLT, /* Stack fault. */
-#endif
- "CLD", SIGCLD, /* Same as SIGCHLD (System V). */
- "CHLD", SIGCHLD, /* Child status has changed (POSIX). */
- "CONT", SIGCONT, /* Continue (POSIX). */
- "STOP", SIGSTOP, /* Stop, unblockable (POSIX). */
- "TSTP", SIGTSTP, /* Keyboard stop (POSIX). */
- "TTIN", SIGTTIN, /* Background read from tty (POSIX). */
- "TTOU", SIGTTOU, /* Background write to tty (POSIX). */
- "URG", SIGURG, /* Urgent condition on socket (4.2 BSD). */
- "XCPU", SIGXCPU, /* CPU limit exceeded (4.2 BSD). */
- "XFSZ", SIGXFSZ, /* File size limit exceeded (4.2 BSD). */
- "DANGER", SIGDANGER, /* System crash imminent; free up some page space (AIX). */
- "VTALRM", SIGVTALRM, /* Virtual alarm clock (4.2 BSD). */
- "PROF", SIGPROF, /* Profiling alarm clock (4.2 BSD). */
- "WINCH", SIGWINCH, /* Window size change (4.3 BSD, Sun). */
- "POLL", SIGPOLL, /* Pollable event occurred (System V). */
- "IO", SIGIO, /* I/O now possible (4.2 BSD). */
- "PWR", SIGPWR, /* Power failure restart (System V). */
-#ifdef SIGSYS
- "SYS", SIGSYS /* Bad system call. Only on some Linuxen! */
-#endif
- };
-
-JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
-
- /* find and return the named signal's number */
-
- for(uint i=0; i<ARRAY_SIZE(siglabels); i++)
- if(!strcmp(name, siglabels[i].name))
- return siglabels[i].number;
-
- return -1;
-
-JVM_END
-
-// used by os::exception_name()
-extern bool signal_name(int signo, char* buf, size_t len) {
- for(uint i = 0; i < ARRAY_SIZE(siglabels); i++) {
- if (signo == siglabels[i].number) {
- jio_snprintf(buf, len, "SIG%s", siglabels[i].name);
- return true;
- }
- }
- return false;
-}
--- a/hotspot/src/os/aix/vm/os_aix.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/aix/vm/os_aix.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -3362,20 +3362,6 @@
}
}
-extern bool signal_name(int signo, char* buf, size_t len);
-
-const char* os::exception_name(int exception_code, char* buf, size_t size) {
- if (0 < exception_code && exception_code <= SIGRTMAX) {
- // signal
- if (!signal_name(exception_code, buf, size)) {
- jio_snprintf(buf, size, "SIG%d", exception_code);
- }
- return buf;
- } else {
- return NULL;
- }
-}
-
// To install functions for atexit system call
extern "C" {
static void perfMemory_exit_helper() {
--- a/hotspot/src/os/bsd/vm/jvm_bsd.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/bsd/vm/jvm_bsd.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -108,84 +108,3 @@
return JNI_TRUE;
JVM_END
-/*
- All the defined signal names for Bsd.
-
- NOTE that not all of these names are accepted by our Java implementation
-
- Via an existing claim by the VM, sigaction restrictions, or
- the "rules of Unix" some of these names will be rejected at runtime.
- For example the VM sets up to handle USR1, sigaction returns EINVAL for
- STOP, and Bsd simply doesn't allow catching of KILL.
-
- Here are the names currently accepted by a user of sun.misc.Signal with
- 1.4.1 (ignoring potential interaction with use of chaining, etc):
-
- HUP, INT, TRAP, ABRT, IOT, BUS, USR2, PIPE, ALRM, TERM, STKFLT,
- CLD, CHLD, CONT, TSTP, TTIN, TTOU, URG, XCPU, XFSZ, VTALRM, PROF,
- WINCH, POLL, IO, PWR, SYS
-
-*/
-
-struct siglabel {
- const char *name;
- int number;
-};
-
-struct siglabel siglabels[] = {
- /* derived from /usr/include/bits/signum.h on RH7.2 */
- "HUP", SIGHUP, /* Hangup (POSIX). */
- "INT", SIGINT, /* Interrupt (ANSI). */
- "QUIT", SIGQUIT, /* Quit (POSIX). */
- "ILL", SIGILL, /* Illegal instruction (ANSI). */
- "TRAP", SIGTRAP, /* Trace trap (POSIX). */
- "ABRT", SIGABRT, /* Abort (ANSI). */
- "EMT", SIGEMT, /* EMT trap */
- "FPE", SIGFPE, /* Floating-point exception (ANSI). */
- "KILL", SIGKILL, /* Kill, unblockable (POSIX). */
- "BUS", SIGBUS, /* BUS error (4.2 BSD). */
- "SEGV", SIGSEGV, /* Segmentation violation (ANSI). */
- "SYS", SIGSYS, /* Bad system call. Only on some Bsden! */
- "PIPE", SIGPIPE, /* Broken pipe (POSIX). */
- "ALRM", SIGALRM, /* Alarm clock (POSIX). */
- "TERM", SIGTERM, /* Termination (ANSI). */
- "URG", SIGURG, /* Urgent condition on socket (4.2 BSD). */
- "STOP", SIGSTOP, /* Stop, unblockable (POSIX). */
- "TSTP", SIGTSTP, /* Keyboard stop (POSIX). */
- "CONT", SIGCONT, /* Continue (POSIX). */
- "CHLD", SIGCHLD, /* Child status has changed (POSIX). */
- "TTIN", SIGTTIN, /* Background read from tty (POSIX). */
- "TTOU", SIGTTOU, /* Background write to tty (POSIX). */
- "IO", SIGIO, /* I/O now possible (4.2 BSD). */
- "XCPU", SIGXCPU, /* CPU limit exceeded (4.2 BSD). */
- "XFSZ", SIGXFSZ, /* File size limit exceeded (4.2 BSD). */
- "VTALRM", SIGVTALRM, /* Virtual alarm clock (4.2 BSD). */
- "PROF", SIGPROF, /* Profiling alarm clock (4.2 BSD). */
- "WINCH", SIGWINCH, /* Window size change (4.3 BSD, Sun). */
- "INFO", SIGINFO, /* Information request. */
- "USR1", SIGUSR1, /* User-defined signal 1 (POSIX). */
- "USR2", SIGUSR2 /* User-defined signal 2 (POSIX). */
- };
-
-JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
-
- /* find and return the named signal's number */
-
- for(uint i=0; i<ARRAY_SIZE(siglabels); i++)
- if(!strcmp(name, siglabels[i].name))
- return siglabels[i].number;
-
- return -1;
-
-JVM_END
-
-// used by os::exception_name()
-extern bool signal_name(int signo, char* buf, size_t len) {
- for(uint i = 0; i < ARRAY_SIZE(siglabels); i++) {
- if (signo == siglabels[i].number) {
- jio_snprintf(buf, len, "SIG%s", siglabels[i].name);
- return true;
- }
- }
- return false;
-}
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -3435,20 +3435,6 @@
extern void report_error(char* file_name, int line_no, char* title,
char* format, ...);
-extern bool signal_name(int signo, char* buf, size_t len);
-
-const char* os::exception_name(int exception_code, char* buf, size_t size) {
- if (0 < exception_code && exception_code <= SIGRTMAX) {
- // signal
- if (!signal_name(exception_code, buf, size)) {
- jio_snprintf(buf, size, "SIG%d", exception_code);
- }
- return buf;
- } else {
- return NULL;
- }
-}
-
// this is called _before_ the most of global arguments have been parsed
void os::init(void) {
char dummy; // used to get a guess on initial stack address
--- a/hotspot/src/os/linux/vm/jvm_linux.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/linux/vm/jvm_linux.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -108,91 +108,3 @@
return JNI_TRUE;
JVM_END
-/*
- All the defined signal names for Linux.
-
- NOTE that not all of these names are accepted by our Java implementation
-
- Via an existing claim by the VM, sigaction restrictions, or
- the "rules of Unix" some of these names will be rejected at runtime.
- For example the VM sets up to handle USR1, sigaction returns EINVAL for
- STOP, and Linux simply doesn't allow catching of KILL.
-
- Here are the names currently accepted by a user of sun.misc.Signal with
- 1.4.1 (ignoring potential interaction with use of chaining, etc):
-
- HUP, INT, TRAP, ABRT, IOT, BUS, USR2, PIPE, ALRM, TERM, STKFLT,
- CLD, CHLD, CONT, TSTP, TTIN, TTOU, URG, XCPU, XFSZ, VTALRM, PROF,
- WINCH, POLL, IO, PWR, SYS
-
-*/
-
-struct siglabel {
- const char *name;
- int number;
-};
-
-struct siglabel siglabels[] = {
- /* derived from /usr/include/bits/signum.h on RH7.2 */
- "HUP", SIGHUP, /* Hangup (POSIX). */
- "INT", SIGINT, /* Interrupt (ANSI). */
- "QUIT", SIGQUIT, /* Quit (POSIX). */
- "ILL", SIGILL, /* Illegal instruction (ANSI). */
- "TRAP", SIGTRAP, /* Trace trap (POSIX). */
- "ABRT", SIGABRT, /* Abort (ANSI). */
- "IOT", SIGIOT, /* IOT trap (4.2 BSD). */
- "BUS", SIGBUS, /* BUS error (4.2 BSD). */
- "FPE", SIGFPE, /* Floating-point exception (ANSI). */
- "KILL", SIGKILL, /* Kill, unblockable (POSIX). */
- "USR1", SIGUSR1, /* User-defined signal 1 (POSIX). */
- "SEGV", SIGSEGV, /* Segmentation violation (ANSI). */
- "USR2", SIGUSR2, /* User-defined signal 2 (POSIX). */
- "PIPE", SIGPIPE, /* Broken pipe (POSIX). */
- "ALRM", SIGALRM, /* Alarm clock (POSIX). */
- "TERM", SIGTERM, /* Termination (ANSI). */
-#ifdef SIGSTKFLT
- "STKFLT", SIGSTKFLT, /* Stack fault. */
-#endif
- "CLD", SIGCLD, /* Same as SIGCHLD (System V). */
- "CHLD", SIGCHLD, /* Child status has changed (POSIX). */
- "CONT", SIGCONT, /* Continue (POSIX). */
- "STOP", SIGSTOP, /* Stop, unblockable (POSIX). */
- "TSTP", SIGTSTP, /* Keyboard stop (POSIX). */
- "TTIN", SIGTTIN, /* Background read from tty (POSIX). */
- "TTOU", SIGTTOU, /* Background write to tty (POSIX). */
- "URG", SIGURG, /* Urgent condition on socket (4.2 BSD). */
- "XCPU", SIGXCPU, /* CPU limit exceeded (4.2 BSD). */
- "XFSZ", SIGXFSZ, /* File size limit exceeded (4.2 BSD). */
- "VTALRM", SIGVTALRM, /* Virtual alarm clock (4.2 BSD). */
- "PROF", SIGPROF, /* Profiling alarm clock (4.2 BSD). */
- "WINCH", SIGWINCH, /* Window size change (4.3 BSD, Sun). */
- "POLL", SIGPOLL, /* Pollable event occurred (System V). */
- "IO", SIGIO, /* I/O now possible (4.2 BSD). */
- "PWR", SIGPWR, /* Power failure restart (System V). */
-#ifdef SIGSYS
- "SYS", SIGSYS /* Bad system call. Only on some Linuxen! */
-#endif
- };
-
-JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
-
- /* find and return the named signal's number */
-
- for(uint i=0; i<ARRAY_SIZE(siglabels); i++)
- if(!strcmp(name, siglabels[i].name))
- return siglabels[i].number;
-
- return -1;
-
-JVM_END
-
-// used by os::exception_name()
-extern bool signal_name(int signo, char* buf, size_t len) {
- for(uint i = 0; i < ARRAY_SIZE(siglabels); i++) {
- if (signo == siglabels[i].number) {
- jio_snprintf(buf, len, "SIG%s", siglabels[i].name);
- return true;
- }
- }
- return false;
-}
--- a/hotspot/src/os/linux/vm/os_linux.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -4585,20 +4585,6 @@
extern void report_error(char* file_name, int line_no, char* title,
char* format, ...);
-extern bool signal_name(int signo, char* buf, size_t len);
-
-const char* os::exception_name(int exception_code, char* buf, size_t size) {
- if (0 < exception_code && exception_code <= SIGRTMAX) {
- // signal
- if (!signal_name(exception_code, buf, size)) {
- jio_snprintf(buf, size, "SIG%d", exception_code);
- }
- return buf;
- } else {
- return NULL;
- }
-}
-
// this is called _before_ the most of global arguments have been parsed
void os::init(void) {
char dummy; // used to get a guess on initial stack address
--- a/hotspot/src/os/posix/vm/os_posix.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/posix/vm/os_posix.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -493,166 +493,171 @@
return interrupted;
}
-// Returned string is a constant. For unknown signals "UNKNOWN" is returned.
-const char* os::Posix::get_signal_name(int sig, char* out, size_t outlen) {
+
- static const struct {
- int sig; const char* name;
- }
- info[] =
+static const struct {
+ int sig; const char* name;
+}
+ g_signal_info[] =
{
- { SIGABRT, "SIGABRT" },
+ { SIGABRT, "SIGABRT" },
#ifdef SIGAIO
- { SIGAIO, "SIGAIO" },
+ { SIGAIO, "SIGAIO" },
#endif
- { SIGALRM, "SIGALRM" },
+ { SIGALRM, "SIGALRM" },
#ifdef SIGALRM1
- { SIGALRM1, "SIGALRM1" },
+ { SIGALRM1, "SIGALRM1" },
#endif
- { SIGBUS, "SIGBUS" },
+ { SIGBUS, "SIGBUS" },
#ifdef SIGCANCEL
- { SIGCANCEL, "SIGCANCEL" },
+ { SIGCANCEL, "SIGCANCEL" },
#endif
- { SIGCHLD, "SIGCHLD" },
+ { SIGCHLD, "SIGCHLD" },
#ifdef SIGCLD
- { SIGCLD, "SIGCLD" },
+ { SIGCLD, "SIGCLD" },
#endif
- { SIGCONT, "SIGCONT" },
+ { SIGCONT, "SIGCONT" },
#ifdef SIGCPUFAIL
- { SIGCPUFAIL, "SIGCPUFAIL" },
+ { SIGCPUFAIL, "SIGCPUFAIL" },
#endif
#ifdef SIGDANGER
- { SIGDANGER, "SIGDANGER" },
+ { SIGDANGER, "SIGDANGER" },
#endif
#ifdef SIGDIL
- { SIGDIL, "SIGDIL" },
+ { SIGDIL, "SIGDIL" },
#endif
#ifdef SIGEMT
- { SIGEMT, "SIGEMT" },
+ { SIGEMT, "SIGEMT" },
#endif
- { SIGFPE, "SIGFPE" },
+ { SIGFPE, "SIGFPE" },
#ifdef SIGFREEZE
- { SIGFREEZE, "SIGFREEZE" },
+ { SIGFREEZE, "SIGFREEZE" },
#endif
#ifdef SIGGFAULT
- { SIGGFAULT, "SIGGFAULT" },
+ { SIGGFAULT, "SIGGFAULT" },
#endif
#ifdef SIGGRANT
- { SIGGRANT, "SIGGRANT" },
+ { SIGGRANT, "SIGGRANT" },
#endif
- { SIGHUP, "SIGHUP" },
- { SIGILL, "SIGILL" },
- { SIGINT, "SIGINT" },
+ { SIGHUP, "SIGHUP" },
+ { SIGILL, "SIGILL" },
+ { SIGINT, "SIGINT" },
#ifdef SIGIO
- { SIGIO, "SIGIO" },
+ { SIGIO, "SIGIO" },
#endif
#ifdef SIGIOINT
- { SIGIOINT, "SIGIOINT" },
+ { SIGIOINT, "SIGIOINT" },
#endif
#ifdef SIGIOT
- // SIGIOT is there for BSD compatibility, but on most Unices just a
- // synonym for SIGABRT. The result should be "SIGABRT", not
- // "SIGIOT".
- #if (SIGIOT != SIGABRT )
- { SIGIOT, "SIGIOT" },
- #endif
+// SIGIOT is there for BSD compatibility, but on most Unices just a
+// synonym for SIGABRT. The result should be "SIGABRT", not
+// "SIGIOT".
+#if (SIGIOT != SIGABRT )
+ { SIGIOT, "SIGIOT" },
+#endif
#endif
#ifdef SIGKAP
- { SIGKAP, "SIGKAP" },
+ { SIGKAP, "SIGKAP" },
#endif
- { SIGKILL, "SIGKILL" },
+ { SIGKILL, "SIGKILL" },
#ifdef SIGLOST
- { SIGLOST, "SIGLOST" },
+ { SIGLOST, "SIGLOST" },
#endif
#ifdef SIGLWP
- { SIGLWP, "SIGLWP" },
+ { SIGLWP, "SIGLWP" },
#endif
#ifdef SIGLWPTIMER
- { SIGLWPTIMER, "SIGLWPTIMER" },
+ { SIGLWPTIMER, "SIGLWPTIMER" },
#endif
#ifdef SIGMIGRATE
- { SIGMIGRATE, "SIGMIGRATE" },
+ { SIGMIGRATE, "SIGMIGRATE" },
#endif
#ifdef SIGMSG
- { SIGMSG, "SIGMSG" },
+ { SIGMSG, "SIGMSG" },
#endif
- { SIGPIPE, "SIGPIPE" },
+ { SIGPIPE, "SIGPIPE" },
#ifdef SIGPOLL
- { SIGPOLL, "SIGPOLL" },
+ { SIGPOLL, "SIGPOLL" },
#endif
#ifdef SIGPRE
- { SIGPRE, "SIGPRE" },
+ { SIGPRE, "SIGPRE" },
#endif
- { SIGPROF, "SIGPROF" },
+ { SIGPROF, "SIGPROF" },
#ifdef SIGPTY
- { SIGPTY, "SIGPTY" },
+ { SIGPTY, "SIGPTY" },
#endif
#ifdef SIGPWR
- { SIGPWR, "SIGPWR" },
+ { SIGPWR, "SIGPWR" },
#endif
- { SIGQUIT, "SIGQUIT" },
+ { SIGQUIT, "SIGQUIT" },
#ifdef SIGRECONFIG
- { SIGRECONFIG, "SIGRECONFIG" },
+ { SIGRECONFIG, "SIGRECONFIG" },
#endif
#ifdef SIGRECOVERY
- { SIGRECOVERY, "SIGRECOVERY" },
+ { SIGRECOVERY, "SIGRECOVERY" },
#endif
#ifdef SIGRESERVE
- { SIGRESERVE, "SIGRESERVE" },
+ { SIGRESERVE, "SIGRESERVE" },
#endif
#ifdef SIGRETRACT
- { SIGRETRACT, "SIGRETRACT" },
+ { SIGRETRACT, "SIGRETRACT" },
#endif
#ifdef SIGSAK
- { SIGSAK, "SIGSAK" },
+ { SIGSAK, "SIGSAK" },
#endif
- { SIGSEGV, "SIGSEGV" },
+ { SIGSEGV, "SIGSEGV" },
#ifdef SIGSOUND
- { SIGSOUND, "SIGSOUND" },
+ { SIGSOUND, "SIGSOUND" },
+#endif
+#ifdef SIGSTKFLT
+ { SIGSTKFLT, "SIGSTKFLT" },
#endif
- { SIGSTOP, "SIGSTOP" },
- { SIGSYS, "SIGSYS" },
+ { SIGSTOP, "SIGSTOP" },
+ { SIGSYS, "SIGSYS" },
#ifdef SIGSYSERROR
- { SIGSYSERROR, "SIGSYSERROR" },
+ { SIGSYSERROR, "SIGSYSERROR" },
#endif
#ifdef SIGTALRM
- { SIGTALRM, "SIGTALRM" },
+ { SIGTALRM, "SIGTALRM" },
#endif
- { SIGTERM, "SIGTERM" },
+ { SIGTERM, "SIGTERM" },
#ifdef SIGTHAW
- { SIGTHAW, "SIGTHAW" },
+ { SIGTHAW, "SIGTHAW" },
#endif
- { SIGTRAP, "SIGTRAP" },
+ { SIGTRAP, "SIGTRAP" },
#ifdef SIGTSTP
- { SIGTSTP, "SIGTSTP" },
+ { SIGTSTP, "SIGTSTP" },
#endif
- { SIGTTIN, "SIGTTIN" },
- { SIGTTOU, "SIGTTOU" },
+ { SIGTTIN, "SIGTTIN" },
+ { SIGTTOU, "SIGTTOU" },
#ifdef SIGURG
- { SIGURG, "SIGURG" },
+ { SIGURG, "SIGURG" },
#endif
- { SIGUSR1, "SIGUSR1" },
- { SIGUSR2, "SIGUSR2" },
+ { SIGUSR1, "SIGUSR1" },
+ { SIGUSR2, "SIGUSR2" },
#ifdef SIGVIRT
- { SIGVIRT, "SIGVIRT" },
+ { SIGVIRT, "SIGVIRT" },
#endif
- { SIGVTALRM, "SIGVTALRM" },
+ { SIGVTALRM, "SIGVTALRM" },
#ifdef SIGWAITING
- { SIGWAITING, "SIGWAITING" },
+ { SIGWAITING, "SIGWAITING" },
#endif
#ifdef SIGWINCH
- { SIGWINCH, "SIGWINCH" },
+ { SIGWINCH, "SIGWINCH" },
#endif
#ifdef SIGWINDOW
- { SIGWINDOW, "SIGWINDOW" },
+ { SIGWINDOW, "SIGWINDOW" },
#endif
- { SIGXCPU, "SIGXCPU" },
- { SIGXFSZ, "SIGXFSZ" },
+ { SIGXCPU, "SIGXCPU" },
+ { SIGXFSZ, "SIGXFSZ" },
#ifdef SIGXRES
- { SIGXRES, "SIGXRES" },
+ { SIGXRES, "SIGXRES" },
#endif
- { -1, NULL }
- };
+ { -1, NULL }
+};
+
+// Returned string is a constant. For unknown signals "UNKNOWN" is returned.
+const char* os::Posix::get_signal_name(int sig, char* out, size_t outlen) {
const char* ret = NULL;
@@ -670,9 +675,9 @@
#endif
if (sig > 0) {
- for (int idx = 0; info[idx].sig != -1; idx ++) {
- if (info[idx].sig == sig) {
- ret = info[idx].name;
+ for (int idx = 0; g_signal_info[idx].sig != -1; idx ++) {
+ if (g_signal_info[idx].sig == sig) {
+ ret = g_signal_info[idx].name;
break;
}
}
@@ -693,6 +698,25 @@
return out;
}
+int os::Posix::get_signal_number(const char* signal_name) {
+ char tmp[30];
+ const char* s = signal_name;
+ if (s[0] != 'S' || s[1] != 'I' || s[2] != 'G') {
+ jio_snprintf(tmp, sizeof(tmp), "SIG%s", signal_name);
+ s = tmp;
+ }
+ for (int idx = 0; g_signal_info[idx].sig != -1; idx ++) {
+ if (strcmp(g_signal_info[idx].name, s) == 0) {
+ return g_signal_info[idx].sig;
+ }
+ }
+ return -1;
+}
+
+int os::get_signal_number(const char* signal_name) {
+ return os::Posix::get_signal_number(signal_name);
+}
+
// Returns true if signal number is valid.
bool os::Posix::is_valid_signal(int sig) {
// MacOS not really POSIX compliant: sigaddset does not return
@@ -711,6 +735,21 @@
#endif
}
+// Returns:
+// "invalid (<num>)" for an invalid signal number
+// "SIG<num>" for a valid but unknown signal number
+// signal name otherwise.
+const char* os::exception_name(int sig, char* buf, size_t size) {
+ if (!os::Posix::is_valid_signal(sig)) {
+ jio_snprintf(buf, size, "invalid (%d)", sig);
+ }
+ const char* const name = os::Posix::get_signal_name(sig, buf, size);
+ if (strcmp(name, "UNKNOWN") == 0) {
+ jio_snprintf(buf, size, "SIG%d", sig);
+ }
+ return buf;
+}
+
#define NUM_IMPORTANT_SIGS 32
// Returns one-line short description of a signal set in a user provided buffer.
const char* os::Posix::describe_signal_set_short(const sigset_t* set, char* buffer, size_t buf_size) {
--- a/hotspot/src/os/posix/vm/os_posix.hpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/posix/vm/os_posix.hpp Tue Dec 01 21:30:34 2015 -0500
@@ -51,6 +51,12 @@
// Returned string is a constant. For unknown signals "UNKNOWN" is returned.
static const char* get_signal_name(int sig, char* out, size_t outlen);
+ // Helper function, returns a signal number for a given signal name, e.g. 11
+ // for "SIGSEGV". Name can be given with or without "SIG" prefix, so both
+ // "SEGV" or "SIGSEGV" work. Name must be uppercase.
+ // Returns -1 for an unknown signal name.
+ static int get_signal_number(const char* signal_name);
+
// Returns one-line short description of a signal set in a user provided buffer.
static const char* describe_signal_set_short(const sigset_t* set, char* buffer, size_t size);
--- a/hotspot/src/os/solaris/vm/jvm_solaris.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/solaris/vm/jvm_solaris.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -106,40 +106,3 @@
return JNI_TRUE;
JVM_END
-
-/*
- All the defined signal names for Solaris are defined by str2sig().
-
- NOTE that not all of these names are accepted by our Java implementation
-
- Via an existing claim by the VM, sigaction restrictions, or
- the "rules of Unix" some of these names will be rejected at runtime.
- For example the VM sets up to handle USR1, sigaction returns EINVAL for
- CANCEL, and Solaris simply doesn't allow catching of KILL.
-
- Here are the names currently accepted by a user of sun.misc.Signal with
- 1.4.1 (ignoring potential interaction with use of chaining, etc):
-
- HUP, INT, TRAP, IOT, ABRT, EMT, BUS, SYS, PIPE, ALRM, TERM, USR2,
- CLD, CHLD, PWR, WINCH, URG, POLL, IO, TSTP, CONT, TTIN, TTOU, VTALRM,
- PROF, XCPU, XFSZ, FREEZE, THAW, LOST
-*/
-
-JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
-
- int sig;
-
- /* return the named signal's number */
-
- if(str2sig(name, &sig))
- return -1;
- else
- return sig;
-
-JVM_END
-
-
-//Reconciliation History
-// 1.4 98/10/07 13:39:41 jvm_win32.cpp
-// 1.6 99/06/22 16:39:00 jvm_win32.cpp
-//End
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -4144,32 +4144,6 @@
void report_error(const char* file_name, int line_no, const char* title,
const char* format, ...);
-const char * signames[] = {
- "SIG0",
- "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGTRAP",
- "SIGABRT", "SIGEMT", "SIGFPE", "SIGKILL", "SIGBUS",
- "SIGSEGV", "SIGSYS", "SIGPIPE", "SIGALRM", "SIGTERM",
- "SIGUSR1", "SIGUSR2", "SIGCLD", "SIGPWR", "SIGWINCH",
- "SIGURG", "SIGPOLL", "SIGSTOP", "SIGTSTP", "SIGCONT",
- "SIGTTIN", "SIGTTOU", "SIGVTALRM", "SIGPROF", "SIGXCPU",
- "SIGXFSZ", "SIGWAITING", "SIGLWP", "SIGFREEZE", "SIGTHAW",
- "SIGCANCEL", "SIGLOST"
-};
-
-const char* os::exception_name(int exception_code, char* buf, size_t size) {
- if (0 < exception_code && exception_code <= SIGRTMAX) {
- // signal
- if (exception_code < sizeof(signames)/sizeof(const char*)) {
- jio_snprintf(buf, size, "%s", signames[exception_code]);
- } else {
- jio_snprintf(buf, size, "SIG%d", exception_code);
- }
- return buf;
- } else {
- return NULL;
- }
-}
-
// (Static) wrapper for getisax(2) call.
os::Solaris::getisax_func_t os::Solaris::_getisax = 0;
--- a/hotspot/src/os/windows/vm/jvm_windows.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/windows/vm/jvm_windows.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -89,39 +89,3 @@
JVM_END
-/*
- All the defined signal names for Windows.
-
- NOTE that not all of these names are accepted by FindSignal!
-
- For various reasons some of these may be rejected at runtime.
-
- Here are the names currently accepted by a user of sun.misc.Signal with
- 1.4.1 (ignoring potential interaction with use of chaining, etc):
-
- (LIST TBD)
-
-*/
-struct siglabel {
- char *name;
- int number;
-};
-
-struct siglabel siglabels[] =
- /* derived from version 6.0 VC98/include/signal.h */
- {"ABRT", SIGABRT, /* abnormal termination triggered by abort cl */
- "FPE", SIGFPE, /* floating point exception */
- "SEGV", SIGSEGV, /* segment violation */
- "INT", SIGINT, /* interrupt */
- "TERM", SIGTERM, /* software term signal from kill */
- "BREAK", SIGBREAK, /* Ctrl-Break sequence */
- "ILL", SIGILL}; /* illegal instruction */
-
-JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
- /* find and return the named signal's number */
-
- for(int i=0;i<sizeof(siglabels)/sizeof(struct siglabel);i++)
- if(!strcmp(name, siglabels[i].name))
- return siglabels[i].number;
- return -1;
-JVM_END
--- a/hotspot/src/os/windows/vm/os_windows.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/os/windows/vm/os_windows.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -6033,3 +6033,36 @@
UseNUMAInterleaving = old_use_numa_interleaving;
}
#endif // PRODUCT
+
+/*
+ All the defined signal names for Windows.
+
+ NOTE that not all of these names are accepted by FindSignal!
+
+ For various reasons some of these may be rejected at runtime.
+
+ Here are the names currently accepted by a user of sun.misc.Signal with
+ 1.4.1 (ignoring potential interaction with use of chaining, etc):
+
+ (LIST TBD)
+
+*/
+int os::get_signal_number(const char* name) {
+ static const struct {
+ char* name;
+ int number;
+ } siglabels [] =
+ // derived from version 6.0 VC98/include/signal.h
+ {"ABRT", SIGABRT, // abnormal termination triggered by abort cl
+ "FPE", SIGFPE, // floating point exception
+ "SEGV", SIGSEGV, // segment violation
+ "INT", SIGINT, // interrupt
+ "TERM", SIGTERM, // software term signal from kill
+ "BREAK", SIGBREAK, // Ctrl-Break sequence
+ "ILL", SIGILL}; // illegal instruction
+ for(int i=0;i<sizeof(siglabels)/sizeof(struct siglabel);i++)
+ if(!strcmp(name, siglabels[i].name))
+ return siglabels[i].number;
+ return -1;
+}
+
--- a/hotspot/src/share/vm/prims/jvm.cpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/share/vm/prims/jvm.cpp Tue Dec 01 21:30:34 2015 -0500
@@ -3720,3 +3720,8 @@
info->is_attachable = AttachListener::is_attach_supported();
}
JVM_END
+
+JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
+ return os::get_signal_number(name);
+JVM_END
+
--- a/hotspot/src/share/vm/runtime/os.hpp Tue Dec 01 21:08:00 2015 +0100
+++ b/hotspot/src/share/vm/runtime/os.hpp Tue Dec 01 21:30:34 2015 -0500
@@ -642,6 +642,9 @@
// returns NULL if exception_code is not an OS exception/signal.
static const char* exception_name(int exception_code, char* buf, size_t buflen);
+ // Returns the signal number (e.g. 11) for a given signal name (SIGSEGV).
+ static int get_signal_number(const char* signal_name);
+
// Returns native Java library, loads if necessary
static void* native_java_library();