Какие части кода ARMv4/5/6 не будут работать на ARMv7?

Насколько я понимаю, процессоры ARMv7, такие как Cortex-A9, в основном обратно совместимы с кодом для старых версий архитектуры ARM. Тем не менее, я читал сообщения о segfaults, пытающихся запустить код ARM9 на Cortex-A8, например.

Какие части кода ARMv4/5/6 (ARM7TDMI/ARM9/ARM11) не будут работать на процессоре ARMv7? Какие функции или архитектурные характеристики существуют в этих старых версиях архитектуры ARM, что может привести к сбою программы, созданной для этих версий, на ARMv7?

2 ответа

Решение

Для кода приложения основная проблема - это невыровненный доступ к памяти. До ARMv4 и конфигурирования от ARMv4 до ARMv6 загрузка LDR с не выровненного адреса была бы при вращении прочитанных данных, а другой доступ к памяти действовал бы так, как если бы младшие значащие 2 бита были равны нулю.

Компиляция для инструкций arm armv4 должна работать до конца.

Реальная проблема с вашим вопросом, за исключением того, что вы не проводите собственное исследование по этой теме (вам потребовалось гораздо больше времени, чтобы не разбираться в нем, чем в том, чтобы разобраться в нем), заключается в том, что большая часть кода, который вы, возможно, захотите перенести с одной платформы на следующий имеет отношение к периферии, а не к набору инструкций. Большая часть вашего кода будет портироваться не из-за набора инструкций, а из-за таймеров, и UART, и видео, и USB-контроллеров и тому подобного. Это не коробки wintel, они не пытаются быть обратно совместимыми.

Вопрос, который вы связали, на самом деле не имеет никакого отношения к этому, так как OP не подавил никакого кода, не выполнил никакой работы по теме, по крайней мере, публично в stackru, это может быть простой случай плохого кода и не иметь никакого отношения к процессору. Ядра, или это может быть случай периферийных устройств, которые не там и доступ к ним, можно было бы ожидать зависания или сбоя.

Другие вопросы по тегам