Commit 0b09be2b2fa08a572ff95fc264b1acfea19f6dab
1 parent
b8aa4598
Nicer debug output for exceptions
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3878 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
104 additions
and
4 deletions
target-sparc/op_helper.c
... | ... | @@ -1681,13 +1681,66 @@ void cpu_set_cwp(CPUState *env1, int new_cwp) |
1681 | 1681 | } |
1682 | 1682 | |
1683 | 1683 | #ifdef TARGET_SPARC64 |
1684 | +#ifdef DEBUG_PCALL | |
1685 | +static const char * const excp_names[0x50] = { | |
1686 | + [TT_TFAULT] = "Instruction Access Fault", | |
1687 | + [TT_TMISS] = "Instruction Access MMU Miss", | |
1688 | + [TT_CODE_ACCESS] = "Instruction Access Error", | |
1689 | + [TT_ILL_INSN] = "Illegal Instruction", | |
1690 | + [TT_PRIV_INSN] = "Privileged Instruction", | |
1691 | + [TT_NFPU_INSN] = "FPU Disabled", | |
1692 | + [TT_FP_EXCP] = "FPU Exception", | |
1693 | + [TT_TOVF] = "Tag Overflow", | |
1694 | + [TT_CLRWIN] = "Clean Windows", | |
1695 | + [TT_DIV_ZERO] = "Division By Zero", | |
1696 | + [TT_DFAULT] = "Data Access Fault", | |
1697 | + [TT_DMISS] = "Data Access MMU Miss", | |
1698 | + [TT_DATA_ACCESS] = "Data Access Error", | |
1699 | + [TT_DPROT] = "Data Protection Error", | |
1700 | + [TT_UNALIGNED] = "Unaligned Memory Access", | |
1701 | + [TT_PRIV_ACT] = "Privileged Action", | |
1702 | + [TT_EXTINT | 0x1] = "External Interrupt 1", | |
1703 | + [TT_EXTINT | 0x2] = "External Interrupt 2", | |
1704 | + [TT_EXTINT | 0x3] = "External Interrupt 3", | |
1705 | + [TT_EXTINT | 0x4] = "External Interrupt 4", | |
1706 | + [TT_EXTINT | 0x5] = "External Interrupt 5", | |
1707 | + [TT_EXTINT | 0x6] = "External Interrupt 6", | |
1708 | + [TT_EXTINT | 0x7] = "External Interrupt 7", | |
1709 | + [TT_EXTINT | 0x8] = "External Interrupt 8", | |
1710 | + [TT_EXTINT | 0x9] = "External Interrupt 9", | |
1711 | + [TT_EXTINT | 0xa] = "External Interrupt 10", | |
1712 | + [TT_EXTINT | 0xb] = "External Interrupt 11", | |
1713 | + [TT_EXTINT | 0xc] = "External Interrupt 12", | |
1714 | + [TT_EXTINT | 0xd] = "External Interrupt 13", | |
1715 | + [TT_EXTINT | 0xe] = "External Interrupt 14", | |
1716 | + [TT_EXTINT | 0xf] = "External Interrupt 15", | |
1717 | +}; | |
1718 | +#endif | |
1719 | + | |
1684 | 1720 | void do_interrupt(int intno) |
1685 | 1721 | { |
1686 | 1722 | #ifdef DEBUG_PCALL |
1687 | 1723 | if (loglevel & CPU_LOG_INT) { |
1688 | 1724 | static int count; |
1689 | - fprintf(logfile, "%6d: v=%04x pc=%016" PRIx64 " npc=%016" PRIx64 " SP=%016" PRIx64 "\n", | |
1690 | - count, intno, | |
1725 | + const char *name; | |
1726 | + | |
1727 | + if (intno < 0 || intno >= 0x180 || (intno > 0x4f && intno < 0x80)) | |
1728 | + name = "Unknown"; | |
1729 | + else if (intno >= 0x100) | |
1730 | + name = "Trap Instruction"; | |
1731 | + else if (intno >= 0xc0) | |
1732 | + name = "Window Fill"; | |
1733 | + else if (intno >= 0x80) | |
1734 | + name = "Window Spill"; | |
1735 | + else { | |
1736 | + name = excp_names[intno]; | |
1737 | + if (!name) | |
1738 | + name = "Unknown"; | |
1739 | + } | |
1740 | + | |
1741 | + fprintf(logfile, "%6d: %s (v=%04x) pc=%016" PRIx64 " npc=%016" PRIx64 | |
1742 | + " SP=%016" PRIx64 "\n", | |
1743 | + count, name, intno, | |
1691 | 1744 | env->pc, |
1692 | 1745 | env->npc, env->regwptr[6]); |
1693 | 1746 | cpu_dump_state(env, logfile, fprintf, 0); |
... | ... | @@ -1740,6 +1793,41 @@ void do_interrupt(int intno) |
1740 | 1793 | env->exception_index = 0; |
1741 | 1794 | } |
1742 | 1795 | #else |
1796 | +#ifdef DEBUG_PCALL | |
1797 | +static const char * const excp_names[0x80] = { | |
1798 | + [TT_TFAULT] = "Instruction Access Fault", | |
1799 | + [TT_ILL_INSN] = "Illegal Instruction", | |
1800 | + [TT_PRIV_INSN] = "Privileged Instruction", | |
1801 | + [TT_NFPU_INSN] = "FPU Disabled", | |
1802 | + [TT_WIN_OVF] = "Window Overflow", | |
1803 | + [TT_WIN_UNF] = "Window Underflow", | |
1804 | + [TT_UNALIGNED] = "Unaligned Memory Access", | |
1805 | + [TT_FP_EXCP] = "FPU Exception", | |
1806 | + [TT_DFAULT] = "Data Access Fault", | |
1807 | + [TT_TOVF] = "Tag Overflow", | |
1808 | + [TT_EXTINT | 0x1] = "External Interrupt 1", | |
1809 | + [TT_EXTINT | 0x2] = "External Interrupt 2", | |
1810 | + [TT_EXTINT | 0x3] = "External Interrupt 3", | |
1811 | + [TT_EXTINT | 0x4] = "External Interrupt 4", | |
1812 | + [TT_EXTINT | 0x5] = "External Interrupt 5", | |
1813 | + [TT_EXTINT | 0x6] = "External Interrupt 6", | |
1814 | + [TT_EXTINT | 0x7] = "External Interrupt 7", | |
1815 | + [TT_EXTINT | 0x8] = "External Interrupt 8", | |
1816 | + [TT_EXTINT | 0x9] = "External Interrupt 9", | |
1817 | + [TT_EXTINT | 0xa] = "External Interrupt 10", | |
1818 | + [TT_EXTINT | 0xb] = "External Interrupt 11", | |
1819 | + [TT_EXTINT | 0xc] = "External Interrupt 12", | |
1820 | + [TT_EXTINT | 0xd] = "External Interrupt 13", | |
1821 | + [TT_EXTINT | 0xe] = "External Interrupt 14", | |
1822 | + [TT_EXTINT | 0xf] = "External Interrupt 15", | |
1823 | + [TT_TOVF] = "Tag Overflow", | |
1824 | + [TT_CODE_ACCESS] = "Instruction Access Error", | |
1825 | + [TT_DATA_ACCESS] = "Data Access Error", | |
1826 | + [TT_DIV_ZERO] = "Division By Zero", | |
1827 | + [TT_NCP_INSN] = "Coprocessor Disabled", | |
1828 | +}; | |
1829 | +#endif | |
1830 | + | |
1743 | 1831 | void do_interrupt(int intno) |
1744 | 1832 | { |
1745 | 1833 | int cwp; |
... | ... | @@ -1747,8 +1835,20 @@ void do_interrupt(int intno) |
1747 | 1835 | #ifdef DEBUG_PCALL |
1748 | 1836 | if (loglevel & CPU_LOG_INT) { |
1749 | 1837 | static int count; |
1750 | - fprintf(logfile, "%6d: v=%02x pc=%08x npc=%08x SP=%08x\n", | |
1751 | - count, intno, | |
1838 | + const char *name; | |
1839 | + | |
1840 | + if (intno < 0 || intno >= 0x100) | |
1841 | + name = "Unknown"; | |
1842 | + else if (intno >= 0x80) | |
1843 | + name = "Trap Instruction"; | |
1844 | + else { | |
1845 | + name = excp_names[intno]; | |
1846 | + if (!name) | |
1847 | + name = "Unknown"; | |
1848 | + } | |
1849 | + | |
1850 | + fprintf(logfile, "%6d: %s (v=%02x) pc=%08x npc=%08x SP=%08x\n", | |
1851 | + count, name, intno, | |
1752 | 1852 | env->pc, |
1753 | 1853 | env->npc, env->regwptr[6]); |
1754 | 1854 | cpu_dump_state(env, logfile, fprintf, 0); | ... | ... |