【问题标题】:What parts of ARMv4/5/6 code will not work on ARMv7?ARMv4/5/6 代码的哪些部分不适用于 ARMv7?
【发布时间】:2013-11-05 16:15:15
【问题描述】:

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

ARMv4/5/6 (ARM7TDMI/ARM9/ARM11) 代码的哪些部分不能在 ARMv7 处理器上运行?这些旧 ARM 架构版本中存在哪些功能或架构特征会导致为这些版本构建的程序在 ARMv7 上失败?

【问题讨论】:

  • infocenter.arm.com 这个问题所需的所有文档都在那里,请查看架构参考手册和技术参考手册。
  • 这有点太复杂了,有人能把这些信息提炼成容易理解的东西吗?我正在寻找类似“较旧的 ARM 代码通常在 ARMv7 处理器上运行,但有以下例外......”这样的答案。
  • 您是否阅读过 ARMv7a 架构参考手册的附录“M”和“O”?他们似乎给出了您正在寻找的最接近的答案。
  • 我无权访问该文档;只有 ARM 客户可以下载这些文件。
  • @DragonLord 不正确 - 访问架构文档需要注册,但不需要成为客户。

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


【解决方案1】:

对于应用程序代码,主要问题是未对齐的内存访问。在 ARMv4 之前并在 ARMv4 到 ARMv6 上可配置,从未对齐地址加载 LDR 会导致读取数据被轮换,并且其他内存访问就像最低有效 2 位为零一样。

【讨论】:

  • 其实就是this question中看到的行为。本质上,您是说链接问题的 OP 得到的旋转输出是 ARMv6 及更早版本的特征,并且相同的代码会在 ARMv7 上崩溃?
【解决方案2】:

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

除了没有对这个主题进行自己的研究之外,您的问题的真正问题是(避免研究它比研究它花费的时间要长得多)是您可能希望从一个下一个平台与外围设备而不是指令集有关。您的大多数代码不会移植,不是因为指令集,而是因为定时器、UART、视频和 USB 控制器等。这些不是 wintel 盒子,它们不会尝试反向兼容。

您链接的问题确实没有任何意义,因为 OP 没有放下任何代码并没有在该主题上做任何工作,至少没有在 stackoverflow 上公开,这可能是一个简单的错误代码案例,无事可做使用处理器内核,或者可能是外围设备不存在并访问这些内核的情况,人们会预期会挂起或崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2021-08-26
    相关资源
    最近更新 更多