740 sigset_t newset; |
740 sigset_t newset; |
741 sigemptyset(&newset); |
741 sigemptyset(&newset); |
742 sigaddset(&newset, sig); |
742 sigaddset(&newset, sig); |
743 sigprocmask(SIG_UNBLOCK, &newset, NULL); |
743 sigprocmask(SIG_UNBLOCK, &newset, NULL); |
744 |
744 |
|
745 // Determine which sort of error to throw. Out of swap may signal |
|
746 // on the thread stack, which could get a mapping error when touched. |
|
747 address addr = (address) info->si_addr; |
|
748 if (sig == SIGBUS && info->si_code == BUS_OBJERR && info->si_errno == ENOMEM) { |
|
749 vm_exit_out_of_memory(0, "Out of swap space to map in thread stack."); |
|
750 } |
|
751 |
745 VMError err(t, sig, pc, info, ucVoid); |
752 VMError err(t, sig, pc, info, ucVoid); |
746 err.report_and_die(); |
753 err.report_and_die(); |
747 |
754 |
748 ShouldNotReachHere(); |
755 ShouldNotReachHere(); |
749 } |
756 } |