ARMv4 / 5/6代码的哪些部分不适用于ARMv7?

时间:2013-10-26 15:41:01

标签: arm backwards-compatibility cpu-architecture binary-compatibility

据我了解,ARMv7处理器(如Cortex-A9)大多向后兼容旧版ARM架构版本的代码。但是,我已经阅读了segfaults trying to run ARM9 code on a Cortex-A8的报告,例如。

ARMv4 / 5/6(ARM7TDMI / ARM9 / ARM11)代码的哪些部分在ARMv7处理器上不起作用?这些较旧的ARM体系结构版本中存在哪些功能或体系结构特征可能导致为这些版本构建的程序在ARMv7上失败?

2 个答案:

答案 0 :(得分:4)

编译arm指令armv4应该一直工作。

你问题的真正问题在于你没有对这个主题进行自己的研究(花了很长时间来避免调查它而不是调查它)是你可能希望从一个代码中移植的大部分代码平台到下一个与外围设备有关,而不是指令集。你的大多数代码都不会因为指令集而移植,而是因为定时器,uarts,视频和usb控制器等。这些不是wintel盒子,他们不会尝试反向兼容。

你链接的问题确实没有任何关系,因为OP没有放任何代码没有做任何关于该主题的工作,至少不公开在stackoverflow,它可能是一个简单的坏代码案例,无关对于处理器核心,或者可能是外围设备不存在并访问它们的情况,人们会发现挂起或崩溃。

答案 1 :(得分:3)

对于应用程序代码,主要问题是未对齐的内存访问。在ARMv4之前,可以在ARMv4上配置为ARMv6,来自未对齐地址的LDR加载将在读取数据中进行旋转,而其他存储器访问则表示最低有效2位为零。