< prev index next >

src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp

Print this page




 352 
 353 }
 354 
 355 extern "C" JNIEXPORT int
 356 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid,
 357                           int abort_if_unrecognized) {
 358   ucontext_t* uc = (ucontext_t*) ucVoid;
 359 
 360 #ifndef AMD64
 361   if (sig == SIGILL && info->si_addr == (caddr_t)sse_check) {
 362     // the SSE instruction faulted. supports_sse() need return false.
 363     uc->uc_mcontext.gregs[EIP] = (greg_t)sse_unavailable;
 364     return true;
 365   }
 366 #endif // !AMD64
 367 
 368   Thread* t = ThreadLocalStorage::get_thread_slow();  // slow & steady
 369 
 370   // Must do this before SignalHandlerMark, if crash protection installed we will longjmp away
 371   // (no destructors can be run)
 372   os::WatcherThreadCrashProtection::check_crash_protection(sig, t);
 373 
 374   SignalHandlerMark shm(t);
 375 
 376   if(sig == SIGPIPE || sig == SIGXFSZ) {
 377     if (os::Solaris::chained_handler(sig, info, ucVoid)) {
 378       return true;
 379     } else {
 380       if (PrintMiscellaneous && (WizardMode || Verbose)) {
 381         char buf[64];
 382         warning("Ignoring %s - see 4229104 or 6499219",
 383                 os::exception_name(sig, buf, sizeof(buf)));
 384 
 385       }
 386       return true;
 387     }
 388   }
 389 
 390   JavaThread* thread = NULL;
 391   VMThread* vmthread = NULL;
 392 




 352 
 353 }
 354 
 355 extern "C" JNIEXPORT int
 356 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid,
 357                           int abort_if_unrecognized) {
 358   ucontext_t* uc = (ucontext_t*) ucVoid;
 359 
 360 #ifndef AMD64
 361   if (sig == SIGILL && info->si_addr == (caddr_t)sse_check) {
 362     // the SSE instruction faulted. supports_sse() need return false.
 363     uc->uc_mcontext.gregs[EIP] = (greg_t)sse_unavailable;
 364     return true;
 365   }
 366 #endif // !AMD64
 367 
 368   Thread* t = ThreadLocalStorage::get_thread_slow();  // slow & steady
 369 
 370   // Must do this before SignalHandlerMark, if crash protection installed we will longjmp away
 371   // (no destructors can be run)
 372   os::ThreadCrashProtection::check_crash_protection(sig, t);
 373 
 374   SignalHandlerMark shm(t);
 375 
 376   if(sig == SIGPIPE || sig == SIGXFSZ) {
 377     if (os::Solaris::chained_handler(sig, info, ucVoid)) {
 378       return true;
 379     } else {
 380       if (PrintMiscellaneous && (WizardMode || Verbose)) {
 381         char buf[64];
 382         warning("Ignoring %s - see 4229104 or 6499219",
 383                 os::exception_name(sig, buf, sizeof(buf)));
 384 
 385       }
 386       return true;
 387     }
 388   }
 389 
 390   JavaThread* thread = NULL;
 391   VMThread* vmthread = NULL;
 392 


< prev index next >