下边是一个典型的MIPS异常信息表:
备注:在32位CPU(BCM5836)中上述寄存器是32位的;在64位CPU(Bcm1250)上是64位的。
【如何阅读】 |
● 异常类型(ExType)
打印该异常的类型名
如:TLB invalid exception (load or instruction fetch)
● 异常线程(current thread)
出现异常的线程名,即current->name和线程栈起止地址。
● CP0异常相关寄存器
MIPS协处理器0负责中断/异常处理,如下几个寄存器都是跟异常或中断相关:
寄存器 |
说明 |
Cause |
cause[2..6]记录了异常码,即异常类型,上面的异常类型名就是根据这个打印 出来的,所以用户可以不用关心这个。 |
Status |
主要跟中断相关,设置中断屏蔽码和异常向量表基址,可不关心。 |
EPC |
引起异常的指令的地址,根据该地址你可以找到引起异常的函数。 |
ErrPC |
与PC相似,只有在(soft)Reset,NMI,Cache Error时记录引起异常的PC指针。 |
RA |
异常所在函数的返回地址,根据这个可以找到引起异常的函数的调用函数。 |
BadAddr |
只在TLB异常中有用,引起TLB异常的逻辑地址。如果发现BadAddr值较小 说明是使用程序中用到了空指针。 |
ErrCtrl |
处理器相关,对异常判断涌出不大。 |
CacheErr |
处理器相关,对异常判断用处不大。 |
● 通用寄存器(GPRs)
打印异常发生时MIPS的32个通用寄存器GPR的值,