1799 } |
1799 } |
1800 |
1800 |
1801 void os::print_siginfo(outputStream *st, void *siginfo) { |
1801 void os::print_siginfo(outputStream *st, void *siginfo) { |
1802 EXCEPTION_RECORD* er = (EXCEPTION_RECORD*)siginfo; |
1802 EXCEPTION_RECORD* er = (EXCEPTION_RECORD*)siginfo; |
1803 st->print("siginfo:"); |
1803 st->print("siginfo:"); |
1804 st->print(" ExceptionCode=0x%x", er->ExceptionCode); |
1804 |
1805 |
1805 char tmp[64]; |
1806 if (er->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && |
1806 if (os::exception_name(er->ExceptionCode, tmp, sizeof(tmp)) == NULL) { |
1807 er->NumberParameters >= 2) { |
1807 strcpy(tmp, "EXCEPTION_??"); |
|
1808 } |
|
1809 st->print(" %s (0x%x)", tmp, er->ExceptionCode); |
|
1810 |
|
1811 if ((er->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || |
|
1812 er->ExceptionCode == EXCEPTION_IN_PAGE_ERROR) && |
|
1813 er->NumberParameters >= 2) { |
1808 switch (er->ExceptionInformation[0]) { |
1814 switch (er->ExceptionInformation[0]) { |
1809 case 0: st->print(", reading address"); break; |
1815 case 0: st->print(", reading address"); break; |
1810 case 1: st->print(", writing address"); break; |
1816 case 1: st->print(", writing address"); break; |
|
1817 case 8: st->print(", data execution prevention violation at address"); break; |
1811 default: st->print(", ExceptionInformation=" INTPTR_FORMAT, |
1818 default: st->print(", ExceptionInformation=" INTPTR_FORMAT, |
1812 er->ExceptionInformation[0]); |
1819 er->ExceptionInformation[0]); |
1813 } |
1820 } |
1814 st->print(" " INTPTR_FORMAT, er->ExceptionInformation[1]); |
1821 st->print(" " INTPTR_FORMAT, er->ExceptionInformation[1]); |
1815 } else if (er->ExceptionCode == EXCEPTION_IN_PAGE_ERROR && |
1822 |
1816 er->NumberParameters >= 2 && UseSharedSpaces) { |
1823 if (er->ExceptionCode == EXCEPTION_IN_PAGE_ERROR && UseSharedSpaces) { |
1817 FileMapInfo* mapinfo = FileMapInfo::current_info(); |
1824 FileMapInfo* mapinfo = FileMapInfo::current_info(); |
1818 if (mapinfo->is_in_shared_space((void*)er->ExceptionInformation[1])) { |
1825 if (mapinfo->is_in_shared_space((void*)er->ExceptionInformation[1])) { |
1819 st->print("\n\nError accessing class data sharing archive." \ |
1826 st->print("\n\nError accessing class data sharing archive." \ |
1820 " Mapped file inaccessible during execution, " \ |
1827 " Mapped file inaccessible during execution, " \ |
1821 " possible disk/network problem."); |
1828 " possible disk/network problem."); |
|
1829 } |
1822 } |
1830 } |
1823 } else { |
1831 } else { |
1824 int num = er->NumberParameters; |
1832 int num = er->NumberParameters; |
1825 if (num > 0) { |
1833 if (num > 0) { |
1826 st->print(", ExceptionInformation="); |
1834 st->print(", ExceptionInformation="); |