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