488 // signal-chaining
489 if (os::Linux::chained_handler(sig, info, ucVoid)) {
490 return true;
491 }
492
493 if (!abort_if_unrecognized) {
494 // caller wants another chance, so give it to him
495 return false;
496 }
497
498 if (pc == NULL && uc != NULL) {
499 pc = os::Linux::ucontext_get_pc(uc);
500 }
501
502 // unmask current signal
503 sigset_t newset;
504 sigemptyset(&newset);
505 sigaddset(&newset, sig);
506 sigprocmask(SIG_UNBLOCK, &newset, NULL);
507
508 VMError::report_and_die(t, sig, pc, info, ucVoid);
509
510 ShouldNotReachHere();
511 return false;
512 }
513
514 void os::Linux::init_thread_fpu_state(void) {
515 // Nothing to do on z/Architecture.
516 }
517
518 int os::Linux::get_fpu_control_word(void) {
519 // Nothing to do on z/Architecture.
520 return 0;
521 }
522
523 void os::Linux::set_fpu_control_word(int fpu_control) {
524 // Nothing to do on z/Architecture.
525 }
526
527 ////////////////////////////////////////////////////////////////////////////////
|
488 // signal-chaining
489 if (os::Linux::chained_handler(sig, info, ucVoid)) {
490 return true;
491 }
492
493 if (!abort_if_unrecognized) {
494 // caller wants another chance, so give it to him
495 return false;
496 }
497
498 if (pc == NULL && uc != NULL) {
499 pc = os::Linux::ucontext_get_pc(uc);
500 }
501
502 // unmask current signal
503 sigset_t newset;
504 sigemptyset(&newset);
505 sigaddset(&newset, sig);
506 sigprocmask(SIG_UNBLOCK, &newset, NULL);
507
508 // Hand down correct pc for SIGILL, SIGFPE. pc from context
509 // usually points to the instruction after the failing instruction.
510 // Note: this should be combined with the trap_pc handling above,
511 // because it handles the same issue.
512 if (sig == SIGILL || sig == SIGFPE) {
513 pc = (address)info->si_addr;
514 }
515
516 VMError::report_and_die(t, sig, pc, info, ucVoid);
517
518 ShouldNotReachHere();
519 return false;
520 }
521
522 void os::Linux::init_thread_fpu_state(void) {
523 // Nothing to do on z/Architecture.
524 }
525
526 int os::Linux::get_fpu_control_word(void) {
527 // Nothing to do on z/Architecture.
528 return 0;
529 }
530
531 void os::Linux::set_fpu_control_word(int fpu_control) {
532 // Nothing to do on z/Architecture.
533 }
534
535 ////////////////////////////////////////////////////////////////////////////////
|