我有一个用于目标的工具链,其中包括一个gdb客户端:
GNU gdb(用于ARM嵌入式处理器的GNU工具6-2017-q2-update)7.12.1.20170417-git
(这不是GNU ARM的最新版本,但是我现在必须使用它,所以我们假设没有最新版本。)
其中的远程目标(通过连接到JTAG的gdbserver连接)是Cortex-A7,它是armv7-a架构。
我不明白为什么该工具链中的gdb并未将armv7-a列为我可以使用“设置体系结构”命令进行的一种体系结构,但它似乎可以很好地调试。
我为armv7-a生成了二进制文件,并验证了它们是为该Arch构建的。 然后,我可以从工具链中启动gdb,然后加载并开始调试。
如果我列出了gdb中可用的内容,则会显示以下内容:
设置架构 arm arm_any armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t armv5te auto ep9312 iwmmxt iwmmxt2 xscale
任何地方都没有armv7。但是gdb并没有抱怨什么,我可以调试/单步指令代码,并且看到一些v7 /新指令,它们是该体系结构的新功能。
这些帖子有些相关,但没有回答: How does GDB determine ARM architecture
GDB remote debug: can't stop the thread
我的精灵的属性
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "7-A"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int
Tag_DIV_use: Allowed in v7-A with integer division extension
Tag_Virtualization_use: TrustZone and Virtualization Extensions
Gdb构建已配置为: 配置--host = x86_64-linux-gnu --target = arm-none-eabi
我期望的是gdb应该将“ armv7-a”或“ armv7-m”或任何可能是某些“ armv7”列出来,但不是。
然而,似乎可以使用armv7-目标代码-可以反汇编它并了解armv7新指令,例如movt / movw。
那么它是怎么做到的呢?是不是特殊/已修补的gdb(客户端),其中未列出拱门,还是我缺少了什么?
(我已经看到,更高版本的gdb确实允许设置架构armv7-a,但这不是我的gdb,我想了解一下我的工作原理)