< prev index next >

src/hotspot/os_cpu/solaris_sparc/os_solaris_sparc.cpp

Print this page
rev 47415 : Add Thread Local handshakes and thread local polling


 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).


< prev index next >