ARM: APCS和AAPCS ABI有什么区别?

12

我目前正在将一个为ARM编写的编译器移植到另一种目标架构。我发现ARM存在两种不同的ABI: APCS_ABIAAPCS_ABI

我在谷歌上搜索并参考了ARM手册,但没有找到它们之间的区别。

然而,在编译器后端的实现中,这两种ABI被单独处理并有不同的实现。

顺便说一下,APCS是ARM过程调用标准的缩写,AAPCS是ARM体系结构过程调用标准的缩写。(难道它们不是指的同一件事吗?)

那么APCSAAPCS有什么区别?为什么定义了两种不同的ABI?

1个回答

17

来自ARM文档,

PCS过程调用标准。

AAPCS是ARM架构的过程调用标准(本标准)。 (现行标准)

APCS是ARM过程调用标准 (已过时).

同样,在同一份文档中,

AAPCS是APCS的第五个重大修订版本和TPCS的第三个重大修订版本。它是ARM架构完整ABI规范的一部分。

因此,您可以忘记已过时的 APCS 并开始遵循 AAPCS


这个答案中的文档链接已经失效了,我还没有找到当前版本,所以这里提供一个大约与答案相同日期的存档副本:https://web.archive.org/web/20120424212439/http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf 编辑: 这看起来是当前版本:https://github.com/ARM-software/abi-aa/releases/download/2022Q1/aapcs32.pdf - AJM
不客气!每当我遇到有用的答案带有损坏链接,我都会尝试修复链接,但编辑队列有时会挡道。 - AJM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接