2485 exceptionInfo->ContextRecord); |
2485 exceptionInfo->ContextRecord); |
2486 return EXCEPTION_CONTINUE_SEARCH; |
2486 return EXCEPTION_CONTINUE_SEARCH; |
2487 } // /EXCEPTION_ACCESS_VIOLATION |
2487 } // /EXCEPTION_ACCESS_VIOLATION |
2488 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2488 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2489 |
2489 |
|
2490 if (exception_code == EXCEPTION_IN_PAGE_ERROR) { |
|
2491 CompiledMethod* nm = NULL; |
|
2492 JavaThread* thread = (JavaThread*)t; |
|
2493 if (in_java) { |
|
2494 CodeBlob* cb = CodeCache::find_blob_unsafe(pc); |
|
2495 nm = (cb != NULL) ? cb->as_compiled_method_or_null() : NULL; |
|
2496 } |
|
2497 if ((thread->thread_state() == _thread_in_vm && |
|
2498 thread->doing_unsafe_access()) || |
|
2499 (nm != NULL && nm->has_unsafe_access())) { |
|
2500 return Handle_Exception(exceptionInfo, SharedRuntime::handle_unsafe_access(thread, (address)Assembler::locate_next_instruction(pc))); |
|
2501 } |
|
2502 } |
|
2503 |
2490 if (in_java) { |
2504 if (in_java) { |
2491 switch (exception_code) { |
2505 switch (exception_code) { |
2492 case EXCEPTION_INT_DIVIDE_BY_ZERO: |
2506 case EXCEPTION_INT_DIVIDE_BY_ZERO: |
2493 return Handle_Exception(exceptionInfo, SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO)); |
2507 return Handle_Exception(exceptionInfo, SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO)); |
2494 |
2508 |