< prev index next >

src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp

Print this page
rev 55480 : [mq]: 8227275-native-oom-hanging-assertions


 254   // section "Signals".
 255   if (uc && uc->uc_link) {
 256     ucontext_t* second_uc = uc->uc_link;
 257 
 258     // MSR TS bits are 29 and 30 (Power ISA, v2.07B, Book III-S, pp. 857-858,
 259     // 3.2.1 "Machine State Register"), however note that ISA notation for bit
 260     // numbering is MSB 0, so for normal bit numbering (LSB 0) they come to be
 261     // bits 33 and 34. It's not related to endianness, just a notation matter.
 262     if (second_uc->uc_mcontext.regs->msr & 0x600000000) {
 263       if (TraceTraps) {
 264         tty->print_cr("caught signal in transaction, "
 265                         "ignoring to jump to abort handler");
 266       }
 267       // Return control to the HTM abort handler.
 268       return true;
 269     }
 270   }
 271 
 272 #ifdef CAN_SHOW_REGISTERS_ON_ASSERT
 273   if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
 274     handle_assert_poison_fault(ucVoid, info->si_addr);
 275     return 1;

 276   }
 277 #endif
 278 
 279   JavaThread* thread = NULL;
 280   VMThread* vmthread = NULL;
 281   if (os::Linux::signal_handlers_are_installed) {
 282     if (t != NULL) {
 283       if(t->is_Java_thread()) {
 284         thread = (JavaThread*)t;
 285       } else if(t->is_VM_thread()) {
 286         vmthread = (VMThread *)t;
 287       }
 288     }
 289   }
 290 
 291   // Moved SafeFetch32 handling outside thread!=NULL conditional block to make
 292   // it work if no associated JavaThread object exists.
 293   if (uc) {
 294     address const pc = os::Linux::ucontext_get_pc(uc);
 295     if (pc && StubRoutines::is_safefetch_fault(pc)) {




 254   // section "Signals".
 255   if (uc && uc->uc_link) {
 256     ucontext_t* second_uc = uc->uc_link;
 257 
 258     // MSR TS bits are 29 and 30 (Power ISA, v2.07B, Book III-S, pp. 857-858,
 259     // 3.2.1 "Machine State Register"), however note that ISA notation for bit
 260     // numbering is MSB 0, so for normal bit numbering (LSB 0) they come to be
 261     // bits 33 and 34. It's not related to endianness, just a notation matter.
 262     if (second_uc->uc_mcontext.regs->msr & 0x600000000) {
 263       if (TraceTraps) {
 264         tty->print_cr("caught signal in transaction, "
 265                         "ignoring to jump to abort handler");
 266       }
 267       // Return control to the HTM abort handler.
 268       return true;
 269     }
 270   }
 271 
 272 #ifdef CAN_SHOW_REGISTERS_ON_ASSERT
 273   if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) {
 274     if (handle_assert_poison_fault(ucVoid, info->si_addr)) {
 275       return 1;
 276     }
 277   }
 278 #endif
 279 
 280   JavaThread* thread = NULL;
 281   VMThread* vmthread = NULL;
 282   if (os::Linux::signal_handlers_are_installed) {
 283     if (t != NULL) {
 284       if(t->is_Java_thread()) {
 285         thread = (JavaThread*)t;
 286       } else if(t->is_VM_thread()) {
 287         vmthread = (VMThread *)t;
 288       }
 289     }
 290   }
 291 
 292   // Moved SafeFetch32 handling outside thread!=NULL conditional block to make
 293   // it work if no associated JavaThread object exists.
 294   if (uc) {
 295     address const pc = os::Linux::ucontext_get_pc(uc);
 296     if (pc && StubRoutines::is_safefetch_fault(pc)) {


< prev index next >