src/os/solaris/vm/os_solaris.cpp

changeset 6460
f42f2e2a1518
parent 5385
ec173c8f3739
child 6462
e2722a66aba7
     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) ||

mercurial