如何使用gdb命令检查Cortex-M4 VTOR寄存器



(我正在学习ARM调试,所以这可能是一个愚蠢的问题。(

我查阅了ARMv7-M架构参考手册。它表示重置矢量偏移存储在VTOR(矢量表偏移寄存器(中。

我使用的是Cortex-M特有的gdb。所以我希望gdb命令info registers应该显示VTOR寄存器。但它只显示了一些通用寄存器。

那么,有没有一种方法可以用gdb命令检查VTOR?

谢谢!

2022年3月2日上午1-7:43

VTOR是根据ARMv7 ARM映射到0xe000ed08的存储器。但当我尝试用gdb命令访问它时,它显示了以下错误:

>>> x /4xb 0xe000ed08
0xe000ed08:     Cannot access memory at address 0xe000ed08

根据这个线程,我检查了gdb客户端已知的内存区域:

>>> info mem
Using memory regions provided by the target.
Num Enb Low Addr   High Addr  Attrs
0   y   0x00000000 0x00100000 flash blocksize 0x1000 nocache
1   y   0x10001000 0x10001400 flash blocksize 0x400 nocache
2   y   0x20000000 0x20040000 rw nocache

VOTR偏移量0xe000ed08似乎不在这些区域内。

现在我正在研究如何解决这个问题。

不确定是谁决定的:

  • 我可以配置什么
  • 还是由卷筒板制造商决定
  • 还是我闪到黑板上的二进制

添加时间:2022年5月3日下午2:46

Cannot access memory at address xxxx错误的类似问题。这可能与优化有关。但还没有确切的答案。

https://github.com/adamgreen/gcc4mbed/issues/35

使用gdbmem命令添加缺少的区域。

mem 0xE0000000 0xE00FFFFF

然后,您将能够在0xe000ed08访问VTOR。

要获得更持久的解决方案,请将该区域添加到目标内存映射配置中(https://sourceware.org/gdb/onlinedocs/gdb/Memory-Map-Format.html)

它是一个内存映射寄存器,因此您可以通过这种方式对其进行检查。

从您提到的手册中获取地址:

0xE000ED08 VTOR RW 0x00000000a Vector Table Offset Register, VTOR on page B3-601.

试试类似的东西(gdb) x/w 0xe000ed08