< prev index next >

src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp

Print this page
rev 13203 : [mq]: 8183925


 393 
 394 }
 395 
 396 extern "C" JNIEXPORT int
 397 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid,
 398                           int abort_if_unrecognized) {
 399   ucontext_t* uc = (ucontext_t*) ucVoid;
 400 
 401 #ifndef AMD64
 402   if (sig == SIGILL && info->si_addr == (caddr_t)sse_check) {
 403     // the SSE instruction faulted. supports_sse() need return false.
 404     uc->uc_mcontext.gregs[EIP] = (greg_t)sse_unavailable;
 405     return true;
 406   }
 407 #endif // !AMD64
 408 
 409   Thread* t = Thread::current_or_null_safe();
 410 
 411   // Must do this before SignalHandlerMark, if crash protection installed we will longjmp away
 412   // (no destructors can be run)
 413   os::WatcherThreadCrashProtection::check_crash_protection(sig, t);
 414 
 415   SignalHandlerMark shm(t);
 416 
 417   if(sig == SIGPIPE || sig == SIGXFSZ) {
 418     if (os::Solaris::chained_handler(sig, info, ucVoid)) {
 419       return true;
 420     } else {
 421       // Ignoring SIGPIPE/SIGXFSZ - see bugs 4229104 or 6499219
 422       return true;
 423     }
 424   }
 425 
 426   JavaThread* thread = NULL;
 427   VMThread* vmthread = NULL;
 428 
 429   if (os::Solaris::signal_handlers_are_installed) {
 430     if (t != NULL ){
 431       if(t->is_Java_thread()) {
 432         thread = (JavaThread*)t;
 433       }




 393 
 394 }
 395 
 396 extern "C" JNIEXPORT int
 397 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid,
 398                           int abort_if_unrecognized) {
 399   ucontext_t* uc = (ucontext_t*) ucVoid;
 400 
 401 #ifndef AMD64
 402   if (sig == SIGILL && info->si_addr == (caddr_t)sse_check) {
 403     // the SSE instruction faulted. supports_sse() need return false.
 404     uc->uc_mcontext.gregs[EIP] = (greg_t)sse_unavailable;
 405     return true;
 406   }
 407 #endif // !AMD64
 408 
 409   Thread* t = Thread::current_or_null_safe();
 410 
 411   // Must do this before SignalHandlerMark, if crash protection installed we will longjmp away
 412   // (no destructors can be run)
 413   os::ThreadCrashProtection::check_crash_protection(sig, t);
 414 
 415   SignalHandlerMark shm(t);
 416 
 417   if(sig == SIGPIPE || sig == SIGXFSZ) {
 418     if (os::Solaris::chained_handler(sig, info, ucVoid)) {
 419       return true;
 420     } else {
 421       // Ignoring SIGPIPE/SIGXFSZ - see bugs 4229104 or 6499219
 422       return true;
 423     }
 424   }
 425 
 426   JavaThread* thread = NULL;
 427   VMThread* vmthread = NULL;
 428 
 429   if (os::Solaris::signal_handlers_are_installed) {
 430     if (t != NULL ){
 431       if(t->is_Java_thread()) {
 432         thread = (JavaThread*)t;
 433       }


< prev index next >