589 st->print(", RDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDI]); 590 st->cr(); 591 st->print( "R8 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R8]); 592 st->print(", R9 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R9]); 593 st->print(", R10=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R10]); 594 st->print(", R11=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R11]); 595 st->cr(); 596 st->print( "R12=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R12]); 597 st->print(", R13=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R13]); 598 st->print(", R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]); 599 st->print(", R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]); 600 st->cr(); 601 st->print( "RIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RIP]); 602 st->print(", EFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EFL]); 603 st->print(", CSGSFS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_CSGSFS]); 604 st->print(", ERR=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ERR]); 605 st->cr(); 606 st->print(" TRAPNO=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_TRAPNO]); 607 st->cr(); 608 #else 609 for (int r = 0; r < 31; r++) 610 st->print_cr( "R%d=" INTPTR_FORMAT, r, (size_t)uc->uc_mcontext.regs[r]); 611 #endif 612 st->cr(); 613 614 intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc); 615 st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", p2i(sp)); 616 print_hex_dump(st, (address)sp, (address)(sp + 8*sizeof(intptr_t)), sizeof(intptr_t)); 617 st->cr(); 618 619 // Note: it may be unsafe to inspect memory near pc. For example, pc may 620 // point to garbage if entry point in an nmethod is corrupted. Leave 621 // this at the end, and hope for the best. 622 address pc = os::Linux::ucontext_get_pc(uc); 623 st->print_cr("Instructions: (pc=" PTR_FORMAT ")", p2i(pc)); 624 print_hex_dump(st, pc - 32, pc + 32, sizeof(char)); 625 } 626 627 void os::print_register_info(outputStream *st, const void *context) { 628 if (context == NULL) return; 629 630 const ucontext_t *uc = (const ucontext_t*)context; | 589 st->print(", RDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDI]); 590 st->cr(); 591 st->print( "R8 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R8]); 592 st->print(", R9 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R9]); 593 st->print(", R10=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R10]); 594 st->print(", R11=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R11]); 595 st->cr(); 596 st->print( "R12=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R12]); 597 st->print(", R13=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R13]); 598 st->print(", R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]); 599 st->print(", R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]); 600 st->cr(); 601 st->print( "RIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RIP]); 602 st->print(", EFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EFL]); 603 st->print(", CSGSFS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_CSGSFS]); 604 st->print(", ERR=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ERR]); 605 st->cr(); 606 st->print(" TRAPNO=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_TRAPNO]); 607 st->cr(); 608 #else 609 for (int r = 0; r < 31; r++) { 610 st->print("R%-2d=", r); 611 print_location(st, uc->uc_mcontext.regs[r]); 612 } 613 #endif 614 st->cr(); 615 616 intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc); 617 st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", p2i(sp)); 618 print_hex_dump(st, (address)sp, (address)(sp + 8*sizeof(intptr_t)), sizeof(intptr_t)); 619 st->cr(); 620 621 // Note: it may be unsafe to inspect memory near pc. For example, pc may 622 // point to garbage if entry point in an nmethod is corrupted. Leave 623 // this at the end, and hope for the best. 624 address pc = os::Linux::ucontext_get_pc(uc); 625 st->print_cr("Instructions: (pc=" PTR_FORMAT ")", p2i(pc)); 626 print_hex_dump(st, pc - 32, pc + 32, sizeof(char)); 627 } 628 629 void os::print_register_info(outputStream *st, const void *context) { 630 if (context == NULL) return; 631 632 const ucontext_t *uc = (const ucontext_t*)context; |