comparison src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp @ 1681:126ea7725993

6953477: Increase portability and flexibility of building Hotspot Summary: A collection of portability improvements including shared code support for PPC, ARM platforms, software floating point, cross compilation support and improvements in error crash detail. Reviewed-by: phh, never, coleenp, dholmes
author bobv
date Tue, 03 Aug 2010 08:13:38 -0400
parents 726b40449bd2
children 1e9a9d2e6509
comparison
equal deleted inserted replaced
1680:a64438a2b7e8 1681:126ea7725993
717 void os::print_context(outputStream *st, void *context) { 717 void os::print_context(outputStream *st, void *context) {
718 if (context == NULL) return; 718 if (context == NULL) return;
719 719
720 ucontext_t *uc = (ucontext_t*)context; 720 ucontext_t *uc = (ucontext_t*)context;
721 st->print_cr("Registers:"); 721 st->print_cr("Registers:");
722
723 // this is horrendously verbose but the layout of the registers in the
724 // context does not match how we defined our abstract Register set, so
725 // we can't just iterate through the gregs area
726
722 #ifdef AMD64 727 #ifdef AMD64
723 st->print( "RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]); 728 st->print( "RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
724 st->print(", RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]); 729 st->print(", RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
725 st->print(", RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]); 730 st->print(", RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]);
726 st->print(", RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]); 731 st->print(", RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]);
740 st->print(", R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]); 745 st->print(", R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]);
741 st->print(", R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]); 746 st->print(", R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]);
742 st->cr(); 747 st->cr();
743 st->print( "RIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RIP]); 748 st->print( "RIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RIP]);
744 st->print(", RFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RFL]); 749 st->print(", RFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RFL]);
750
751 st->cr();
752 st->cr();
753
754 st->print_cr("Register to memory mapping:");
755 st->cr();
756
757 // this is only for the "general purpose" registers
758
759 st->print_cr("RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
760 print_location(st, uc->uc_mcontext.gregs[REG_RAX]);
761 st->cr();
762 st->print_cr("RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
763 print_location(st, uc->uc_mcontext.gregs[REG_RBX]);
764 st->cr();
765 st->print_cr("RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]);
766 print_location(st, uc->uc_mcontext.gregs[REG_RCX]);
767 st->cr();
768 st->print_cr("RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]);
769 print_location(st, uc->uc_mcontext.gregs[REG_RDX]);
770 st->cr();
771 st->print_cr("RSP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSP]);
772 print_location(st, uc->uc_mcontext.gregs[REG_RSP]);
773 st->cr();
774 st->print_cr("RBP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBP]);
775 print_location(st, uc->uc_mcontext.gregs[REG_RSP]);
776 st->cr();
777 st->print_cr("RSI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSI]);
778 print_location(st, uc->uc_mcontext.gregs[REG_RSI]);
779 st->cr();
780 st->print_cr("RDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDI]);
781 print_location(st, uc->uc_mcontext.gregs[REG_RDI]);
782 st->cr();
783 st->print_cr("R8 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R8]);
784 print_location(st, uc->uc_mcontext.gregs[REG_R8]);
785 st->cr();
786 st->print_cr("R9 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R9]);
787 print_location(st, uc->uc_mcontext.gregs[REG_R9]);
788 st->cr();
789 st->print_cr("R10=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R10]);
790 print_location(st, uc->uc_mcontext.gregs[REG_R10]);
791 st->cr();
792 st->print_cr("R11=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R11]);
793 print_location(st, uc->uc_mcontext.gregs[REG_R11]);
794 st->cr();
795 st->print_cr("R12=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R12]);
796 print_location(st, uc->uc_mcontext.gregs[REG_R12]);
797 st->cr();
798 st->print_cr("R13=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R13]);
799 print_location(st, uc->uc_mcontext.gregs[REG_R13]);
800 st->cr();
801 st->print_cr("R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]);
802 print_location(st, uc->uc_mcontext.gregs[REG_R14]);
803 st->cr();
804 st->print_cr("R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]);
805 print_location(st, uc->uc_mcontext.gregs[REG_R15]);
806
745 #else 807 #else
746 st->print( "EAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EAX]); 808 st->print( "EAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EAX]);
747 st->print(", EBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EBX]); 809 st->print(", EBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EBX]);
748 st->print(", ECX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[ECX]); 810 st->print(", ECX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[ECX]);
749 st->print(", EDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EDX]); 811 st->print(", EDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EDX]);
753 st->print(", ESI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[ESI]); 815 st->print(", ESI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[ESI]);
754 st->print(", EDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EDI]); 816 st->print(", EDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EDI]);
755 st->cr(); 817 st->cr();
756 st->print( "EIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EIP]); 818 st->print( "EIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EIP]);
757 st->print(", EFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EFL]); 819 st->print(", EFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EFL]);
820
821 st->cr();
822 st->cr();
823
824 st->print_cr("Register to memory mapping:");
825 st->cr();
826
827 // this is only for the "general purpose" registers
828
829 st->print_cr("EAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EAX]);
830 print_location(st, uc->uc_mcontext.gregs[EAX]);
831 st->cr();
832 st->print_cr("EBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EBX]);
833 print_location(st, uc->uc_mcontext.gregs[EBX]);
834 st->cr();
835 st->print_cr("ECX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[ECX]);
836 print_location(st, uc->uc_mcontext.gregs[ECX]);
837 st->cr();
838 st->print_cr("EDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EDX]);
839 print_location(st, uc->uc_mcontext.gregs[EDX]);
840 st->cr();
841 st->print_cr("ESP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[UESP]);
842 print_location(st, uc->uc_mcontext.gregs[UESP]);
843 st->cr();
844 st->print_cr("EBP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EBP]);
845 print_location(st, uc->uc_mcontext.gregs[EBP]);
846 st->cr();
847 st->print_cr("ESI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[ESI]);
848 print_location(st, uc->uc_mcontext.gregs[ESI]);
849 st->cr();
850 st->print_cr("EDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[EDI]);
851 print_location(st, uc->uc_mcontext.gregs[EDI]);
852
758 #endif // AMD64 853 #endif // AMD64
759 st->cr(); 854 st->cr();
760 st->cr(); 855 st->cr();
761 856
762 intptr_t *sp = (intptr_t *)os::Solaris::ucontext_get_sp(uc); 857 intptr_t *sp = (intptr_t *)os::Solaris::ucontext_get_sp(uc);
771 address pc = epc.pc(); 866 address pc = epc.pc();
772 st->print_cr("Instructions: (pc=" PTR_FORMAT ")", pc); 867 st->print_cr("Instructions: (pc=" PTR_FORMAT ")", pc);
773 print_hex_dump(st, pc - 16, pc + 16, sizeof(char)); 868 print_hex_dump(st, pc - 16, pc + 16, sizeof(char));
774 } 869 }
775 870
871
776 #ifdef AMD64 872 #ifdef AMD64
777 void os::Solaris::init_thread_fpu_state(void) { 873 void os::Solaris::init_thread_fpu_state(void) {
778 // Nothing to do 874 // Nothing to do
779 } 875 }
780 #else 876 #else