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

How to check the Cortex-M4 VTOR register with gdb command?

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

我查看了 ARMv7-M Arch 参考手册。它说复位向量偏移存储在 VTOR(向量 Table 偏移寄存器)中。

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

那么有没有办法用 gdb 命令检查 VTOR?

谢谢!

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

根据 ARMv7 ARM,VTOR 是内存映射到 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 不在这些区域中

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

不确定是哪个决定的:

添加 2 - 4:46 2022 年 5 月 3 日下午

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

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

它是一个内存映射寄存器,所以你可以这样检查它。

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

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

尝试类似 (gdb) x/w 0xe000ed08

使用 gdb 添加缺失的区域 mem command.

mem 0xE0000000 0xE00FFFFF

然后你就可以访问0xe000ed08的VTOR了。

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