431 tty->print_raw_cr("An irrecoverable stack overflow has occurred.");
432 // Sometimes the register windows are not properly flushed.
433 if(uc->uc_mcontext.gwins != NULL) {
434 ::handle_unflushed_register_windows(uc->uc_mcontext.gwins);
435 }
436 }
437 }
438
439
440 if (thread->thread_state() == _thread_in_vm) {
441 if (sig == SIGBUS && thread->doing_unsafe_access()) {
442 stub = SharedRuntime::handle_unsafe_access(thread, npc);
443 }
444 }
445
446 else if (thread->thread_state() == _thread_in_Java) {
447 // Java thread running in Java code => find exception handler if any
448 // a fault inside compiled code, the interpreter, or a stub
449
450 // Support Safepoint Polling
451 if ( sig == SIGSEGV && (address)info->si_addr == os::get_polling_page() ) {
452 stub = SharedRuntime::get_poll_stub(pc);
453 }
454
455 // Not needed on x86 solaris because verify_oops doesn't generate
456 // SEGV/BUS like sparc does.
457 if ( (sig == SIGSEGV || sig == SIGBUS)
458 && pc >= MacroAssembler::_verify_oop_implicit_branch[0]
459 && pc < MacroAssembler::_verify_oop_implicit_branch[1] ) {
460 stub = MacroAssembler::_verify_oop_implicit_branch[2];
461 warning("fixed up memory fault in +VerifyOops at address " INTPTR_FORMAT, info->si_addr);
462 }
463
464 // This is not factored because on x86 solaris the patching for
465 // zombies does not generate a SEGV.
466 else if (sig == SIGSEGV && nativeInstruction_at(pc)->is_zombie()) {
467 // zombie method (ld [%g0],%o7 instruction)
468 stub = SharedRuntime::get_handle_wrong_method_stub();
469
470 // At the stub it needs to look like a call from the caller of this
471 // method (not a call from the segv site).
|
431 tty->print_raw_cr("An irrecoverable stack overflow has occurred.");
432 // Sometimes the register windows are not properly flushed.
433 if(uc->uc_mcontext.gwins != NULL) {
434 ::handle_unflushed_register_windows(uc->uc_mcontext.gwins);
435 }
436 }
437 }
438
439
440 if (thread->thread_state() == _thread_in_vm) {
441 if (sig == SIGBUS && thread->doing_unsafe_access()) {
442 stub = SharedRuntime::handle_unsafe_access(thread, npc);
443 }
444 }
445
446 else if (thread->thread_state() == _thread_in_Java) {
447 // Java thread running in Java code => find exception handler if any
448 // a fault inside compiled code, the interpreter, or a stub
449
450 // Support Safepoint Polling
451 if (sig == SIGSEGV && os::is_poll_address((address)info->si_addr)) {
452 stub = SharedRuntime::get_poll_stub(pc);
453 }
454
455 // Not needed on x86 solaris because verify_oops doesn't generate
456 // SEGV/BUS like sparc does.
457 if ( (sig == SIGSEGV || sig == SIGBUS)
458 && pc >= MacroAssembler::_verify_oop_implicit_branch[0]
459 && pc < MacroAssembler::_verify_oop_implicit_branch[1] ) {
460 stub = MacroAssembler::_verify_oop_implicit_branch[2];
461 warning("fixed up memory fault in +VerifyOops at address " INTPTR_FORMAT, info->si_addr);
462 }
463
464 // This is not factored because on x86 solaris the patching for
465 // zombies does not generate a SEGV.
466 else if (sig == SIGSEGV && nativeInstruction_at(pc)->is_zombie()) {
467 // zombie method (ld [%g0],%o7 instruction)
468 stub = SharedRuntime::get_handle_wrong_method_stub();
469
470 // At the stub it needs to look like a call from the caller of this
471 // method (not a call from the segv site).
|