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 }
|