Какие части кода 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, это может быть простой случай плохого кода и не иметь никакого отношения к процессору. Ядра, или это может быть случай периферийных устройств, которые не там и доступ к ним, можно было бы ожидать зависания или сбоя.