Как GDB определяет архитектуру ARM

Я использую gdb (arm-none-eabi) с процессором Texas Instruments Hercules (Cortex-R4F). Я использую XDS-агент Texas Instruments в качестве удаленного сервера GDB.

После запуска

target remote ip:port 

в GDB GDB соединится с сервером XDS GDB. Затем я могу распечатать регистры

info all-registers

Он показывает мне регистры ЦП, а также регистры f7 и fpa, что позволяет мне сделать вывод, что ЦП имеет сопроцессор с плавающей запятой (FPA). Однако это не так. Процессор vfpv3. Таким образом, GDB использует неправильные определения регистров, что приводит к проблемам.

Я попытался найти информацию в пакетах, отправленных сервером XDS GDB, установив

set debug remote 1

но не нашел никакой информации. Как GDB определяет используемые определения регистров?

Обновление: я нашел команду установки архитектуры:

set architecture

>Requires an argument. Valid arguments are arm, armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5te, xscale, ep9312, iwmmxt, iwmmxt2, arm_any, auto.

Cortex-R4f — это armv7 с vfpv3. Как я могу установить это?


person dwjbosman    schedule 12.04.2017    source источник
comment
В первую очередь, как и компилятор, ассемблер, компоновщик, он скомпилирован для ARM. Но кроме того, это, вероятно, является общим, если вы не укажете конкретно, что у вас есть. Старые руки не имеют CPUID, которые есть у новых, поэтому он не может их обнаружить. Какой была ваша командная строка, была ли возможность указать архитектуру?   -  person old_timer    schedule 12.04.2017
comment
Я не ожидал узнать, скажем так.   -  person old_timer    schedule 12.04.2017
comment
или сказать это еще по-другому. как и в случае с набором инструментов, человек знает, но инструмент может и не знать, поэтому человек сообщает инструменту...   -  person old_timer    schedule 13.04.2017
comment
Хорошо, но как указать используемую архитектуру? В тот момент, когда я подключаюсь к удаленной цели (даже до загрузки каких-либо программ), gdb уже предполагает неправильный набор регистров.   -  person dwjbosman    schedule 13.04.2017
comment
Похоже, вам нужен gdb/toolchain, который понимает armv7. Что касается общих регистров от r0 до r15, cpsr и т. д., это неправильно? Или это только для сопроцессоров?   -  person old_timer    schedule 13.04.2017
comment
Gdb разговаривает с чем-то еще, что разговаривает с платой/чипом, что что-то еще, без сомнения, знает, какой у вас чип или находится достаточно близко, чтобы пройти/вйти. Но интерфейс gdb более общий, и они могут правильно переводить 90% того, что вам нужно, просто не зная, что у вас нет fpu или чего-то подобного.   -  person old_timer    schedule 13.04.2017
comment
Прекратите использовать «агент XDS от Texas Instruments в качестве удаленного сервера GDB» и используйте «сервер gdb», который скомпилирован с удаленным хостом GDB, скомпилированным для ARM. Что говорит show arm fpu? Если есть проблема с агентом XDS, как GDB может ее исправить? У вас нет gdbserver, так зачем этот тег? gdbsever и хост gdb должны совпадать, иначе обычно возникают проблемы, тем более что у ARM может быть несколько вариантов конфигурации. Ваш хост GDB может даже не понимать инструкции ARMv7.   -  person artless noise    schedule 13.04.2017


Ответы (1)


Агент TI XDS действует как GDBServer.

Но он не отвечает на такие пакеты, как qXfer:features:read... для получения информации о цели

В конце концов я вручную применил:

set tdesc filename /gdb/binutils-gdb/gdb/features/arm/arm-with-vfpv3.xml

это устанавливает правильные функции для Corter-R4f и позволяет мне устанавливать точки останова, вызывать функции и т. д.

Увы, теперь мы обнаруживаем другие проблемы. Похоже, что агент TI XDS GDBserver не очень стабилен.

person dwjbosman    schedule 14.04.2017