728 void* sighand = oldAct.sa_sigaction ? CAST_FROM_FN_PTR(void*, oldAct.sa_sigaction)
729 : CAST_FROM_FN_PTR(void*, oldAct.sa_handler);
730 warning("Unexpected Signal %d occurred under user-defined signal handler %#lx", sig, (long)sighand);
731 }
732 }
733
734 if (pc == NULL && uc != NULL) {
735 pc = (address) uc->uc_mcontext.gregs[REG_PC];
736 }
737
738 // unmask current signal
739 sigset_t newset;
740 sigemptyset(&newset);
741 sigaddset(&newset, sig);
742 sigprocmask(SIG_UNBLOCK, &newset, NULL);
743
744 // Determine which sort of error to throw. Out of swap may signal
745 // on the thread stack, which could get a mapping error when touched.
746 address addr = (address) info->si_addr;
747 if (sig == SIGBUS && info->si_code == BUS_OBJERR && info->si_errno == ENOMEM) {
748 vm_exit_out_of_memory(0, "Out of swap space to map in thread stack.");
749 }
750
751 VMError err(t, sig, pc, info, ucVoid);
752 err.report_and_die();
753
754 ShouldNotReachHere();
755 }
756
757 void os::print_context(outputStream *st, void *context) {
758 if (context == NULL) return;
759
760 ucontext_t *uc = (ucontext_t*)context;
761 st->print_cr("Registers:");
762 #ifdef AMD64
763 st->print( "RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
764 st->print(", RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
765 st->print(", RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]);
766 st->print(", RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]);
767 st->cr();
768 st->print( "RSP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSP]);
|
728 void* sighand = oldAct.sa_sigaction ? CAST_FROM_FN_PTR(void*, oldAct.sa_sigaction)
729 : CAST_FROM_FN_PTR(void*, oldAct.sa_handler);
730 warning("Unexpected Signal %d occurred under user-defined signal handler %#lx", sig, (long)sighand);
731 }
732 }
733
734 if (pc == NULL && uc != NULL) {
735 pc = (address) uc->uc_mcontext.gregs[REG_PC];
736 }
737
738 // unmask current signal
739 sigset_t newset;
740 sigemptyset(&newset);
741 sigaddset(&newset, sig);
742 sigprocmask(SIG_UNBLOCK, &newset, NULL);
743
744 // Determine which sort of error to throw. Out of swap may signal
745 // on the thread stack, which could get a mapping error when touched.
746 address addr = (address) info->si_addr;
747 if (sig == SIGBUS && info->si_code == BUS_OBJERR && info->si_errno == ENOMEM) {
748 vm_exit_out_of_memory(0, OOM_MMAP_ERROR, "Out of swap space to map in thread stack.");
749 }
750
751 VMError err(t, sig, pc, info, ucVoid);
752 err.report_and_die();
753
754 ShouldNotReachHere();
755 }
756
757 void os::print_context(outputStream *st, void *context) {
758 if (context == NULL) return;
759
760 ucontext_t *uc = (ucontext_t*)context;
761 st->print_cr("Registers:");
762 #ifdef AMD64
763 st->print( "RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
764 st->print(", RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
765 st->print(", RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]);
766 st->print(", RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]);
767 st->cr();
768 st->print( "RSP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSP]);
|