--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Fri Aug 16 16:23:01 2013 -0700
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Fri Jul 26 00:59:18 2013 +0200
@@ -1618,58 +1618,12 @@
st->cr();
}
-// Taken from /usr/include/bits/siginfo.h Supposed to be architecture specific
-// but they're the same for all the bsd arch that we support
-// and they're the same for solaris but there's no common place to put this.
-const char *ill_names[] = { "ILL0", "ILL_ILLOPC", "ILL_ILLOPN", "ILL_ILLADR",
- "ILL_ILLTRP", "ILL_PRVOPC", "ILL_PRVREG",
- "ILL_COPROC", "ILL_BADSTK" };
-
-const char *fpe_names[] = { "FPE0", "FPE_INTDIV", "FPE_INTOVF", "FPE_FLTDIV",
- "FPE_FLTOVF", "FPE_FLTUND", "FPE_FLTRES",
- "FPE_FLTINV", "FPE_FLTSUB", "FPE_FLTDEN" };
-
-const char *segv_names[] = { "SEGV0", "SEGV_MAPERR", "SEGV_ACCERR" };
-
-const char *bus_names[] = { "BUS0", "BUS_ADRALN", "BUS_ADRERR", "BUS_OBJERR" };
-
void os::print_siginfo(outputStream* st, void* siginfo) {
- st->print("siginfo:");
-
- const int buflen = 100;
- char buf[buflen];
- siginfo_t *si = (siginfo_t*)siginfo;
- st->print("si_signo=%s: ", os::exception_name(si->si_signo, buf, buflen));
- if (si->si_errno != 0 && strerror_r(si->si_errno, buf, buflen) == 0) {
- st->print("si_errno=%s", buf);
- } else {
- st->print("si_errno=%d", si->si_errno);
- }
- const int c = si->si_code;
- assert(c > 0, "unexpected si_code");
- switch (si->si_signo) {
- case SIGILL:
- st->print(", si_code=%d (%s)", c, c > 8 ? "" : ill_names[c]);
- st->print(", si_addr=" PTR_FORMAT, si->si_addr);
- break;
- case SIGFPE:
- st->print(", si_code=%d (%s)", c, c > 9 ? "" : fpe_names[c]);
- st->print(", si_addr=" PTR_FORMAT, si->si_addr);
- break;
- case SIGSEGV:
- st->print(", si_code=%d (%s)", c, c > 2 ? "" : segv_names[c]);
- st->print(", si_addr=" PTR_FORMAT, si->si_addr);
- break;
- case SIGBUS:
- st->print(", si_code=%d (%s)", c, c > 3 ? "" : bus_names[c]);
- st->print(", si_addr=" PTR_FORMAT, si->si_addr);
- break;
- default:
- st->print(", si_code=%d", si->si_code);
- // no si_addr
- }
-
- if ((si->si_signo == SIGBUS || si->si_signo == SIGSEGV) &&
+ const siginfo_t* si = (const siginfo_t*)siginfo;
+
+ os::Posix::print_siginfo_brief(st, si);
+
+ if (si && (si->si_signo == SIGBUS || si->si_signo == SIGSEGV) &&
UseSharedSpaces) {
FileMapInfo* mapinfo = FileMapInfo::current_info();
if (mapinfo->is_in_shared_space(si->si_addr)) {
@@ -3338,7 +3292,8 @@
st->print("[%s]", get_signal_handler_name(handler, buf, buflen));
}
- st->print(", sa_mask[0]=" PTR32_FORMAT, *(uint32_t*)&sa.sa_mask);
+ st->print(", sa_mask[0]=");
+ os::Posix::print_signal_set_short(st, &sa.sa_mask);
address rh = VMError::get_resetted_sighandler(sig);
// May be, handler was resetted by VMError?
@@ -3347,7 +3302,8 @@
sa.sa_flags = VMError::get_resetted_sigflags(sig) & SIGNIFICANT_SIGNAL_MASK;
}
- st->print(", sa_flags=" PTR32_FORMAT, sa.sa_flags);
+ st->print(", sa_flags=");
+ os::Posix::print_sa_flags(st, sa.sa_flags);
// Check: is it our handler?
if(handler == CAST_FROM_FN_PTR(address, (sa_sigaction_t)signalHandler) ||