--- old/src/os/aix/vm/vmError_aix.cpp 2015-03-10 17:59:06.324500000 +0100 +++ new/src/os/aix/vm/vmError_aix.cpp 2015-03-10 17:59:06.140467000 +0100 @@ -109,7 +109,15 @@ } sigthreadmask(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::Aix::ucontext_get_pc(uc) : NULL; + if (uc && pc && StubRoutines::is_safefetch_fault(pc)) { + os::Aix::ucontext_set_pc(uc, StubRoutines::continuation_for_safefetch_fault(pc)); + return; + } + + VMError err(NULL, sig, pc, info, ucVoid); err.report_and_die(); }