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)) {
|