Установка точек останова для инструкций ARM Thumb в GDB

#debugging #arm #gdb #qemu #thumb

#отладка #arm #gdb #qemu #thumb

Вопрос:

Я практикуюсь в обращении к удаленному двоичному файлу arm (который я написал) и обнаружил, что когда я устанавливаю точку останова, скажем 0x010451 , и запускаю программу, gdb вращается вечно, пока я не нажму ctrl C. Когда я это делаю, текущий КОМПЬЮТЕР находится по адресу, но я не могу продолжить программу.

Когда я устанавливаю точку останова в 0x010450 , gdb отлично достигает точки останова, но инструкции декодируются как инструкции, не являющиеся инструкциями thumb.

Ожидается ли это? Ошибка? Я попытаюсь загрузить примеры позже сегодня.

Информация о версии (при эмуляции пользовательского режима qemu):

 debian@debian-arm:~/lab$ gdb --version
GNU gdb (Debian 8.2.1-2 b3) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3 : GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
debian@debian-arm:~/lab$ uname -a
Linux debian-arm 4.19.0-10-armmp-lpae #1 SMP Debian 4.19.132-1 (2020-07-24) armv7l GNU/Linux
  

Комментарии:

1. Как ни странно, настройка set arm fallback-mode thumb сработала, когда set arm fallback-mode auto этого не произошло. Теперь он останавливается на правильной инструкции thumb при установке точки останова на нечетный адрес вместо вращения, пока я не нажму ctrl c

2. обратите внимание, что адрес метки — это четное число, нечетный бит используется инструкцией (bx lr, pop {pc} и т.д.), А компьютер содержит только четный адрес… чего ожидает gdb, не знаю.

3. Хм, хорошая мысль. Я не могу воспроизвести разрыв по адресу с нечетным номером, как я упоминал ранее. set arm fallback-mode thumb работает достаточно хорошо для меня сейчас. Я не уверен, почему бит T не устанавливается в регистре, когда у меня установлен резервный режим на auto…