问题描述
据我了解,ARMv7 处理器(例如 Cortex-A9)大多向后兼容旧 ARM 架构版本的代码.但是,我阅读了有关 尝试在 Cortex-A8 上运行 ARM9 代码 的报告,例如.
It is my understanding that ARMv7 processors, such as the Cortex-A9, are mostly backwards-compatible with code for older ARM architecture versions. However, I've read reports of segfaults trying to run ARM9 code on a Cortex-A8, for example.
ARMv4/5/6 (ARM7TDMI/ARM9/ARM11) 代码的哪些部分不能在 ARMv7 处理器上运行?这些旧 ARM 架构版本中存在哪些功能或架构特征会导致为这些版本构建的程序在 ARMv7 上失败?
What parts of ARMv4/5/6 (ARM7TDMI/ARM9/ARM11) code will not work on an ARMv7 processor? What features or architectural characteristics exist in these older ARM architecture versions that can cause a program built for these versions to fail on ARMv7?
推荐答案
对于应用程序代码,主要问题是未对齐的内存访问.在 ARMv4 之前并在 ARMv4 到 ARMv6 上可配置,从未对齐地址加载 LDR 会导致读取数据被轮换,并且其他内存访问就像最低有效 2 位为零一样.
For application code the principal problem is unaligned memory accesses. Before ARMv4 and configurable on ARMv4 to ARMv6 a LDR load from an unaligned address would result in the read data being rotated, and other memory access act as if least significant 2 bits are zero.
这篇关于ARMv4/5/6 代码的哪些部分不适用于 ARMv7?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!