equal
deleted
inserted
replaced
379 return true; |
379 return true; |
380 } |
380 } |
381 return false; |
381 return false; |
382 } |
382 } |
383 |
383 |
384 inline static bool checkByteBuffer(address pc, address npc, address* stub) { |
384 inline static bool checkByteBuffer(address pc, address npc, JavaThread * thread, address* stub) { |
385 // BugId 4454115: A read from a MappedByteBuffer can fault |
385 // BugId 4454115: A read from a MappedByteBuffer can fault |
386 // here if the underlying file has been truncated. |
386 // here if the underlying file has been truncated. |
387 // Do not crash the VM in such a case. |
387 // Do not crash the VM in such a case. |
388 CodeBlob* cb = CodeCache::find_blob_unsafe(pc); |
388 CodeBlob* cb = CodeCache::find_blob_unsafe(pc); |
389 CompiledMethod* nm = cb->as_compiled_method_or_null(); |
389 CompiledMethod* nm = cb->as_compiled_method_or_null(); |
571 |
571 |
572 if ((sig == SIGSEGV) && checkPollingPage(pc, (address)info->si_addr, &stub)) { |
572 if ((sig == SIGSEGV) && checkPollingPage(pc, (address)info->si_addr, &stub)) { |
573 break; |
573 break; |
574 } |
574 } |
575 |
575 |
576 if ((sig == SIGBUS) && checkByteBuffer(pc, npc, &stub)) { |
576 if ((sig == SIGBUS) && checkByteBuffer(pc, npc, thread, &stub)) { |
577 break; |
577 break; |
578 } |
578 } |
579 |
579 |
580 if ((sig == SIGSEGV || sig == SIGBUS) && |
580 if ((sig == SIGSEGV || sig == SIGBUS) && |
581 checkVerifyOops(pc, (address)info->si_addr, &stub)) { |
581 checkVerifyOops(pc, (address)info->si_addr, &stub)) { |