--- old/src/os/solaris/vm/vmError_solaris.cpp 2015-03-10 17:59:11.922898000 +0100 +++ new/src/os/solaris/vm/vmError_solaris.cpp 2015-03-10 17:59:11.747904000 +0100 @@ -109,7 +109,15 @@ } thr_sigsetmask(SIG_UNBLOCK, &newset, NULL); - VMError err(NULL, sig, NULL, info, ucVoid); + // support safefetch faults in error handling + ucontext_t* const uc = (ucontext_t*) ucVoid; + address const pc = uc ? os::Solaris::ucontext_get_pc(uc) : NULL; + if (uc && pc && StubRoutines::is_safefetch_fault(pc)) { + os::Solaris::ucontext_set_pc(uc, StubRoutines::continuation_for_safefetch_fault(pc)); + return; + } + + VMError err(NULL, sig, pc, info, ucVoid); err.report_and_die(); }