1.1 --- a/src/os/solaris/vm/os_solaris.cpp Fri Aug 16 16:23:01 2013 -0700 1.2 +++ b/src/os/solaris/vm/os_solaris.cpp Fri Jul 26 00:59:18 2013 +0200 1.3 @@ -2247,58 +2247,12 @@ 1.4 (void) check_addr0(st); 1.5 } 1.6 1.7 -// Taken from /usr/include/sys/machsig.h Supposed to be architecture specific 1.8 -// but they're the same for all the solaris architectures that we support. 1.9 -const char *ill_names[] = { "ILL0", "ILL_ILLOPC", "ILL_ILLOPN", "ILL_ILLADR", 1.10 - "ILL_ILLTRP", "ILL_PRVOPC", "ILL_PRVREG", 1.11 - "ILL_COPROC", "ILL_BADSTK" }; 1.12 - 1.13 -const char *fpe_names[] = { "FPE0", "FPE_INTDIV", "FPE_INTOVF", "FPE_FLTDIV", 1.14 - "FPE_FLTOVF", "FPE_FLTUND", "FPE_FLTRES", 1.15 - "FPE_FLTINV", "FPE_FLTSUB" }; 1.16 - 1.17 -const char *segv_names[] = { "SEGV0", "SEGV_MAPERR", "SEGV_ACCERR" }; 1.18 - 1.19 -const char *bus_names[] = { "BUS0", "BUS_ADRALN", "BUS_ADRERR", "BUS_OBJERR" }; 1.20 - 1.21 void os::print_siginfo(outputStream* st, void* siginfo) { 1.22 - st->print("siginfo:"); 1.23 - 1.24 - const int buflen = 100; 1.25 - char buf[buflen]; 1.26 - siginfo_t *si = (siginfo_t*)siginfo; 1.27 - st->print("si_signo=%s: ", os::exception_name(si->si_signo, buf, buflen)); 1.28 - char *err = strerror(si->si_errno); 1.29 - if (si->si_errno != 0 && err != NULL) { 1.30 - st->print("si_errno=%s", err); 1.31 - } else { 1.32 - st->print("si_errno=%d", si->si_errno); 1.33 - } 1.34 - const int c = si->si_code; 1.35 - assert(c > 0, "unexpected si_code"); 1.36 - switch (si->si_signo) { 1.37 - case SIGILL: 1.38 - st->print(", si_code=%d (%s)", c, c > 8 ? "" : ill_names[c]); 1.39 - st->print(", si_addr=" PTR_FORMAT, si->si_addr); 1.40 - break; 1.41 - case SIGFPE: 1.42 - st->print(", si_code=%d (%s)", c, c > 9 ? "" : fpe_names[c]); 1.43 - st->print(", si_addr=" PTR_FORMAT, si->si_addr); 1.44 - break; 1.45 - case SIGSEGV: 1.46 - st->print(", si_code=%d (%s)", c, c > 2 ? "" : segv_names[c]); 1.47 - st->print(", si_addr=" PTR_FORMAT, si->si_addr); 1.48 - break; 1.49 - case SIGBUS: 1.50 - st->print(", si_code=%d (%s)", c, c > 3 ? "" : bus_names[c]); 1.51 - st->print(", si_addr=" PTR_FORMAT, si->si_addr); 1.52 - break; 1.53 - default: 1.54 - st->print(", si_code=%d", si->si_code); 1.55 - // no si_addr 1.56 - } 1.57 - 1.58 - if ((si->si_signo == SIGBUS || si->si_signo == SIGSEGV) && 1.59 + const siginfo_t* si = (const siginfo_t*)siginfo; 1.60 + 1.61 + os::Posix::print_siginfo_brief(st, si); 1.62 + 1.63 + if (si && (si->si_signo == SIGBUS || si->si_signo == SIGSEGV) && 1.64 UseSharedSpaces) { 1.65 FileMapInfo* mapinfo = FileMapInfo::current_info(); 1.66 if (mapinfo->is_in_shared_space(si->si_addr)) { 1.67 @@ -2368,7 +2322,8 @@ 1.68 st->print("[%s]", get_signal_handler_name(handler, buf, buflen)); 1.69 } 1.70 1.71 - st->print(", sa_mask[0]=" PTR32_FORMAT, *(uint32_t*)&sa.sa_mask); 1.72 + st->print(", sa_mask[0]="); 1.73 + os::Posix::print_signal_set_short(st, &sa.sa_mask); 1.74 1.75 address rh = VMError::get_resetted_sighandler(sig); 1.76 // May be, handler was resetted by VMError? 1.77 @@ -2377,7 +2332,8 @@ 1.78 sa.sa_flags = VMError::get_resetted_sigflags(sig); 1.79 } 1.80 1.81 - st->print(", sa_flags=" PTR32_FORMAT, sa.sa_flags); 1.82 + st->print(", sa_flags="); 1.83 + os::Posix::print_sa_flags(st, sa.sa_flags); 1.84 1.85 // Check: is it our handler? 1.86 if(handler == CAST_FROM_FN_PTR(address, signalHandler) ||