< prev index next >

src/hotspot/os_cpu/solaris_sparc/os_solaris_sparc.cpp

Print this page




 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 


< prev index next >