--- old/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp 2015-03-10 17:59:19.565471000 +0100 +++ new/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp 2015-03-10 17:59:19.407435000 +0100 @@ -184,6 +184,11 @@ return ExtendedPC(pc); } +void os::Solaris::ucontext_set_pc(ucontext_t* uc, address pc) { + uc->uc_mcontext.gregs [REG_PC] = (greg_t) pc; + uc->uc_mcontext.gregs [REG_nPC] = (greg_t) (pc + 4); +} + // Assumes ucontext is valid intptr_t* os::Solaris::ucontext_get_sp(ucontext_t *uc) { return (intptr_t*)((intptr_t)uc->uc_mcontext.gregs[REG_SP] + STACK_BIAS); @@ -355,8 +360,7 @@ // SafeFetch() support if (StubRoutines::is_safefetch_fault(pc)) { - uc->uc_mcontext.gregs[REG_PC] = intptr_t(StubRoutines::continuation_for_safefetch_fault(pc)); - uc->uc_mcontext.gregs[REG_nPC] = uc->uc_mcontext.gregs[REG_PC] + 4; + os::Solaris::ucontext_set_pc(uc, StubRoutines::continuation_for_safefetch_fault(pc)); return 1; } @@ -494,8 +498,7 @@ // simulate a branch to the stub (a "call" in the safepoint stub case) // factor me: setPC - uc->uc_mcontext.gregs[REG_PC ] = (greg_t)stub; - uc->uc_mcontext.gregs[REG_nPC] = (greg_t)(stub + 4); + os::Solaris::ucontext_set_pc(uc, stub); #ifndef PRODUCT if (TraceJumps) thread->record_jump(stub, NULL, __FILE__, __LINE__);