< prev index next >

src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp

Print this page




 329   }
 330 
 331   return addr != NULL;
 332 #endif // AMD64
 333 
 334 }
 335 
 336 extern "C" JNIEXPORT int
 337 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid,
 338                           int abort_if_unrecognized) {
 339   ucontext_t* uc = (ucontext_t*) ucVoid;
 340 
 341 #ifndef AMD64
 342   if (sig == SIGILL && info->si_addr == (caddr_t)sse_check) {
 343     // the SSE instruction faulted. supports_sse() need return false.
 344     uc->uc_mcontext.gregs[EIP] = (greg_t)sse_unavailable;
 345     return true;
 346   }
 347 #endif // !AMD64
 348 
 349   Thread* t = ThreadLocalStorage::get_thread_slow();  // slow & steady
 350 
 351   // Must do this before SignalHandlerMark, if crash protection installed we will longjmp away
 352   // (no destructors can be run)
 353   os::WatcherThreadCrashProtection::check_crash_protection(sig, t);
 354 
 355   SignalHandlerMark shm(t);
 356 
 357   if(sig == SIGPIPE || sig == SIGXFSZ) {
 358     if (os::Solaris::chained_handler(sig, info, ucVoid)) {
 359       return true;
 360     } else {
 361       if (PrintMiscellaneous && (WizardMode || Verbose)) {
 362         char buf[64];
 363         warning("Ignoring %s - see 4229104 or 6499219",
 364                 os::exception_name(sig, buf, sizeof(buf)));
 365 
 366       }
 367       return true;
 368     }
 369   }




 329   }
 330 
 331   return addr != NULL;
 332 #endif // AMD64
 333 
 334 }
 335 
 336 extern "C" JNIEXPORT int
 337 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid,
 338                           int abort_if_unrecognized) {
 339   ucontext_t* uc = (ucontext_t*) ucVoid;
 340 
 341 #ifndef AMD64
 342   if (sig == SIGILL && info->si_addr == (caddr_t)sse_check) {
 343     // the SSE instruction faulted. supports_sse() need return false.
 344     uc->uc_mcontext.gregs[EIP] = (greg_t)sse_unavailable;
 345     return true;
 346   }
 347 #endif // !AMD64
 348 
 349   Thread* t = Thread::current();
 350 
 351   // Must do this before SignalHandlerMark, if crash protection installed we will longjmp away
 352   // (no destructors can be run)
 353   os::WatcherThreadCrashProtection::check_crash_protection(sig, t);
 354 
 355   SignalHandlerMark shm(t);
 356 
 357   if(sig == SIGPIPE || sig == SIGXFSZ) {
 358     if (os::Solaris::chained_handler(sig, info, ucVoid)) {
 359       return true;
 360     } else {
 361       if (PrintMiscellaneous && (WizardMode || Verbose)) {
 362         char buf[64];
 363         warning("Ignoring %s - see 4229104 or 6499219",
 364                 os::exception_name(sig, buf, sizeof(buf)));
 365 
 366       }
 367       return true;
 368     }
 369   }


< prev index next >