equal
deleted
inserted
replaced
437 return true; |
437 return true; |
438 } |
438 } |
439 return false; |
439 return false; |
440 } |
440 } |
441 |
441 |
442 inline static bool checkSerializePage(JavaThread* thread, address addr) { |
|
443 return os::is_memory_serialize_page(thread, addr); |
|
444 } |
|
445 |
|
446 inline static bool checkZombie(sigcontext* uc, address* pc, address* stub) { |
442 inline static bool checkZombie(sigcontext* uc, address* pc, address* stub) { |
447 if (nativeInstruction_at(*pc)->is_zombie()) { |
443 if (nativeInstruction_at(*pc)->is_zombie()) { |
448 // zombie method (ld [%g0],%o7 instruction) |
444 // zombie method (ld [%g0],%o7 instruction) |
449 *stub = SharedRuntime::get_handle_wrong_method_stub(); |
445 *stub = SharedRuntime::get_handle_wrong_method_stub(); |
450 |
446 |
540 //%note os_trap_1 |
536 //%note os_trap_1 |
541 if (info != NULL && uc != NULL && thread != NULL) { |
537 if (info != NULL && uc != NULL && thread != NULL) { |
542 pc = address(SIG_PC(uc)); |
538 pc = address(SIG_PC(uc)); |
543 npc = address(SIG_NPC(uc)); |
539 npc = address(SIG_NPC(uc)); |
544 |
540 |
545 // Check to see if we caught the safepoint code in the |
|
546 // process of write protecting the memory serialization page. |
|
547 // It write enables the page immediately after protecting it |
|
548 // so we can just return to retry the write. |
|
549 if ((sig == SIGSEGV) && checkSerializePage(thread, (address)info->si_addr)) { |
|
550 // Block current thread until the memory serialize page permission restored. |
|
551 os::block_on_serialize_page_trap(); |
|
552 return 1; |
|
553 } |
|
554 |
|
555 if (checkPrefetch(uc, pc)) { |
541 if (checkPrefetch(uc, pc)) { |
556 return 1; |
542 return 1; |
557 } |
543 } |
558 |
544 |
559 // Handle ALL stack overflow variations here |
545 // Handle ALL stack overflow variations here |