我有一个崩溃方法的objdump。我发现崩溃是由于错误的内存访问所致。内存地址存在于MIPS寄存器a0中。除了逐步回溯(逐步遍历)objdump之外,是否有办法跟踪寄存器如何获取此地址(a0从s3等获取)。

我还有一个问题。

如何在内核中完成分页。内核中没有虚拟地址的概念,因为它们已经在内存中了。我遇到这个问题是因为在崩溃时有一个名为BADVA(是BAD虚拟地址)的文件,其中包含错误的地址。

这是当机报告

Cpu 0
Registries dump
Status: 10000302    KERNEL EXL
**Cause : 00803c08    TLBL**
**BadVA : fdca9b68**
PrId  : 01019378

最佳答案

崩溃的直接原因是没有TLB条目与BadVA中的虚拟地址匹配,并且这是在CPU处于异常模式时发生的。

BadVA地址(fdca9b68)在虚拟地址空间的KSEG2区域中。该区域用于MIPS Linux内核中的映射地址(通常用于内核模块)。我会怀疑内核模块中的错误。

如果您想了解MIPS CPU中发生的情况,则应该购买并学习See MIPS Run

关于linux - 寄存器值调试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12162442/

10-13 06:40