419 thread->disable_stack_yellow_reserved_zone(); 420 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::STACK_OVERFLOW); 421 } else { 422 // Thread was in the vm or native code. Return and try to finish. 423 thread->disable_stack_yellow_reserved_zone(); 424 return true; 425 } 426 } else if (thread->in_stack_red_zone(addr)) { 427 // Fatal red zone violation. Disable the guard pages and fall through 428 // to handle_unexpected_exception way down below. 429 thread->disable_stack_red_zone(); 430 tty->print_raw_cr("An irrecoverable stack overflow has occurred."); 431 // Sometimes the register windows are not properly flushed. 432 if(uc->uc_mcontext.gwins != NULL) { 433 ::handle_unflushed_register_windows(uc->uc_mcontext.gwins); 434 } 435 } 436 } 437 438 439 if (thread->thread_state() == _thread_in_vm) { 440 if (sig == SIGBUS && thread->doing_unsafe_access()) { 441 stub = SharedRuntime::handle_unsafe_access(thread, npc); 442 } 443 } 444 445 else if (thread->thread_state() == _thread_in_Java) { 446 // Java thread running in Java code => find exception handler if any 447 // a fault inside compiled code, the interpreter, or a stub 448 449 // Support Safepoint Polling 450 if (sig == SIGSEGV && os::is_poll_address((address)info->si_addr)) { 451 stub = SharedRuntime::get_poll_stub(pc); 452 } 453 454 // Not needed on x86 solaris because verify_oops doesn't generate 455 // SEGV/BUS like sparc does. 456 if ( (sig == SIGSEGV || sig == SIGBUS) 457 && pc >= MacroAssembler::_verify_oop_implicit_branch[0] 458 && pc < MacroAssembler::_verify_oop_implicit_branch[1] ) { 459 stub = MacroAssembler::_verify_oop_implicit_branch[2]; 460 warning("fixed up memory fault in +VerifyOops at address " INTPTR_FORMAT, info->si_addr); 461 } 462 | 419 thread->disable_stack_yellow_reserved_zone(); 420 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::STACK_OVERFLOW); 421 } else { 422 // Thread was in the vm or native code. Return and try to finish. 423 thread->disable_stack_yellow_reserved_zone(); 424 return true; 425 } 426 } else if (thread->in_stack_red_zone(addr)) { 427 // Fatal red zone violation. Disable the guard pages and fall through 428 // to handle_unexpected_exception way down below. 429 thread->disable_stack_red_zone(); 430 tty->print_raw_cr("An irrecoverable stack overflow has occurred."); 431 // Sometimes the register windows are not properly flushed. 432 if(uc->uc_mcontext.gwins != NULL) { 433 ::handle_unflushed_register_windows(uc->uc_mcontext.gwins); 434 } 435 } 436 } 437 438 439 if (sig == SIGBUS && thread->doing_unsafe_access()) { 440 stub = SharedRuntime::handle_unsafe_access(thread, npc); 441 } 442 443 else if (thread->thread_state() == _thread_in_Java) { 444 // Java thread running in Java code => find exception handler if any 445 // a fault inside compiled code, the interpreter, or a stub 446 447 // Support Safepoint Polling 448 if (sig == SIGSEGV && os::is_poll_address((address)info->si_addr)) { 449 stub = SharedRuntime::get_poll_stub(pc); 450 } 451 452 // Not needed on x86 solaris because verify_oops doesn't generate 453 // SEGV/BUS like sparc does. 454 if ( (sig == SIGSEGV || sig == SIGBUS) 455 && pc >= MacroAssembler::_verify_oop_implicit_branch[0] 456 && pc < MacroAssembler::_verify_oop_implicit_branch[1] ) { 457 stub = MacroAssembler::_verify_oop_implicit_branch[2]; 458 warning("fixed up memory fault in +VerifyOops at address " INTPTR_FORMAT, info->si_addr); 459 } 460 |