У меня есть набор инструментов для моей цели, который включает в себя клиент GDB:
GNU gdb (Инструменты GNU для встроенных процессоров ARM 6-2017-q2-update) 7.12.1.20170417-git
(Это не последняя версия, доступная в GNU ARM, но я должен использовать ее сейчас, поэтому давайте предположим, что нет последней ..)
Удаленная цель (подключающаяся через сервер gdb, подключенный к JTAG) - это Cortex-A7, представляющий собой архитектуру armv7-a.
Что я не понимаю, почему GDB как есть из этого набора инструментов не перечисляет armv7-a как одну из архитектур, которые я могу с помощью команды "установить архитектуру", но, похоже, он отлаживается просто отлично.
Я создаю двоичные файлы для armv7-a и проверяю, что они созданы для этой арки.
Затем я могу запустить GDB из набора инструментов, загрузить и начать отладку.
Если я перечислю доступные внутри GDB, это показывает:
установить архитектуру
arm arm_any armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t armv5te auto ep9312 iwmmxt iwmmxt2 xscale
Нет armv7 в любом месте. Тем не менее, GDB ни на что не жалуется, я могу отлаживать / выполнять пошаговый код инструкции, и я вижу некоторые v7 / новые инструкции, которые являются новыми для архитектуры.
Эти сообщения несколько связаны, но не отвечают на это:
Как GDB определяет архитектуру ARM
Удаленная отладка GDB: невозможно остановить поток
Атрибуты от моего эльфа
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
Что я ожидал, так это то, что "armv7-a" или "armv7-m" или любой другой может быть каким-то "armv7", должен быть указан в gdb как поддерживаемый, но это не так.
Тем не менее, похоже, что он может работать с целевым кодом armv7 - может разобрать его и понять новые инструкции armv7, такие как movt / movw.
Так как это сделать? Это специальный / пропатченный gdb (клиент), который не перечисляет арку, или что мне не хватает?
(я видел, что более поздние версии GDB позволяют устанавливать архитектуру armv7-a, но это не мой GDB, и я хочу понять, как работает моя)