Не думаю, что ваша проблема связана с QEMU (или даже с ARM).Я считаю, что есть как минимум три способа справиться с этим:
- Просто используйте ассемблер
- Используйте
symbol-file
- Наложения
Ассемблер
У меня была эта проблема, но я просто переключился бы на изучение ассемблера.Это довольно легко, особенно если вы objdump -S
версия адреса MMU / нормальный, чтобы соответствовать ассемблеру.Вы можете направить вывод objdump в файл и удалить не перемещенный код, если хотите.Тем не менее, большинство редакторов смогут обрабатывать большой файл.
Просмотр ассемблера может быть очень полезным, так как часто некоторая константа перемещения или ссылка на тип не PIC не верны.Вам нужно, чтобы код / данные были правильными, и ваш код PIC может вызывать некоторую процедуру библиотеки gcc, связанную с тем местом, которое вы не учли.Так что, хотя это примитивно, у него есть некоторые преимущества.
Файл символов
Другой способ - использовать то, что у вас есть с symbol-file
.Используйте физическую ссылку с symbol-file
во время загрузки, а затем symbol-file
MMU / обычной ссылки после переключения MMU.Очевидно, загрузить версию MMU.
Наложения
Я думаю, вы могли бы справиться с этим с помощью оверлеев , хотя на самом деле вы делаете обратное.VMA - это адрес MMU, а LMA - физический адрес загрузки.Сначала отметьте его как сопоставленный, а затем вы можете обновить с помощью _ovly_debug_event()
при включении MMU.
Оверлеи принимают код, но это наиболее удобно.Я бы попытался сделать это, если у вас уже есть отладочные цели сборки в вашей системе разработки программного обеспечения и вы условно кодировали этот код.Однако, если вы используете фактические оверлеи в ld
, это может решить некоторые ваши проблемы, и вы можете найти это наиболее надежным.Влияние ресурсов наложения довольно минимально, но оно существует.
Ссылка
Ссылки относятся к проблеме кодирования относительно того, почемуВы можете отладить это.