Я хочу выполнить автоматические модульные тесты моих встроенных библиотек с использованием симулятора 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.