Размещение таблицы векторов в правильном месте решило проблему. Я следовал всем инструкциям @peter Maydell в комментариях выше. Я добавляю их сюда.
Вы можете включить некоторые параметры ведения журнала отладки в QEMU с помощью -d ('in_asm, int, exec, cpu, guest_errors, unimp', вероятно, хороший набор для начала), который скажет вам, каков ваш гостевой код делается. Я бы начал с проверки того, что в вашем ELF-файле есть таблица векторов в том месте, где QEMU ожидает его найти. В противном случае QEMU сразу же выйдет из сбоя (что и делает аппаратное обеспечение).
Ожидается дамп ядра: QEMU входит в блокировку, но мы не эмулируем блокировку правильно (строго говоря, QEMU должен просто сидеть там, ничего не делая, как это делает реальное оборудование), поэтому мы печатаем дамп регистра и abort (). Как я уже говорил в своем предыдущем комментарии, ваша проблема почти наверняка в том, что в вашем двоичном файле нет таблицы векторов.
Главное, что вы должны иметь в своей векторной таблице - это записи для начального ПК и указатель стека. Записи прерываний и исключений стоят того, чтобы их вставить, но они понадобятся только при наличии прерывания или исключения. Если вы добавите обработчики отладки для других ошибок, вы, по крайней мере, будете знать, когда возникнет ошибка из-за ошибки в остальной части вашей программы, хотя