equal
deleted
inserted
replaced
477 thread->set_pending_unsafe_access_error(); |
477 thread->set_pending_unsafe_access_error(); |
478 os::Linux::ucontext_set_pc(uc, pc + Assembler::instr_len(pc)); |
478 os::Linux::ucontext_set_pc(uc, pc + Assembler::instr_len(pc)); |
479 return true; |
479 return true; |
480 } |
480 } |
481 } |
481 } |
|
482 |
|
483 // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in |
|
484 // and the heap gets shrunk before the field access. |
|
485 if ((sig == SIGSEGV) || (sig == SIGBUS)) { |
|
486 address addr = JNI_FastGetField::find_slowcase_pc(pc); |
|
487 if (addr != (address)-1) { |
|
488 stub = addr; |
|
489 } |
|
490 } |
482 } |
491 } |
483 |
492 |
484 if (stub != NULL) { |
493 if (stub != NULL) { |
485 // Save all thread context in case we need to restore it. |
494 // Save all thread context in case we need to restore it. |
486 if (thread != NULL) thread->set_saved_exception_pc(pc); |
495 if (thread != NULL) thread->set_saved_exception_pc(pc); |