Поймать segfault изнутри целевой симулятор arm-none-eabi-gdb? - PullRequest
2 голосов
/ 02 мая 2019

Я хочу выполнить автоматические модульные тесты моих встроенных библиотек с использованием симулятора arm-none-eabi-gdb.У меня проблема в том, что неправильный доступ к памяти ничего не вызывает в симуляторе, в то время как это вызывает ошибки сегментации или исключения серьезных ошибок в реальном мире.

У меня есть следующая небольшая программа, сохраненная как ub.c:

int main() { *(volatile int*)(void*)0 = 42; }

Я компилирую, используя:

arm-none-eabi-gcc -specs=nosys.specs ub.c -o ub.elf

И затем выполняю

arm-none-eabi-gdb ub.elf

Внутри GDB я выполняю команды:

target sim
load
break exit
run

Сохранение в NULLкажется, полностью игнорируется.Вы даже можете установить break main и с шагом si выполнить инструкцию str r2, [r3] с помощью r3=0 и r2=42.Ничего не произошло.Мне бы хотелось, чтобы в симуляторе GDB было что-то вроде «ошибка исключения / сегмента / ветвь к вектору жесткого сбоя или где-либо еще», которую я мог бы проверить / обработать в GDB для автоматизации модульного тестирования.

Есть ли способ включить «исключение жесткого сбоя» в целевом симуляторе gdb?
Можно ли как-нибудь «перехватить» недопустимый доступ к памяти, доступ к не выровненной памяти, аналогично arm-none-eabi-gdb с целью симулятора?

Кстати, я использую Arch Linux 4.20.6 с arm-none-eabi-gcc 8.2.1.

...