< prev index next >

src/os_cpu/linux_s390/vm/os_linux_s390.cpp

Print this page
rev 12800 : 8176872: [s390] wrong pc shown in error logs
Reviewed-by: dholmes, dsamersoff


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


< prev index next >