5

WinCE 和 Linux 在 ARM 上使用相同的调用约定吗?有什么区别?

到目前为止,我找到的文件并没有很好地解释。例如,在http://msdn.microsoft.com/en-us/library/ms864497.aspx上,一行显示“Windows CE .NET 编译器”,下一行显示“ARM 编译器”,以及“CLARM” "在底部,不清楚是指同一个编译器还是不同的编译器。这是我到目前为止发现的...

  • ARM 调用序列规范(WinCE) - 编写不佳的文档
  • ARM 到 C 调用约定(Linux) - 非正式解释
  • Wikipedia - 没有指定操作系统,也没有说明如何处理结构、浮点数或 64 位数字,也没有说明额外参数的放置位置,以防它们不适合寄存器。
  • 更新:ARM 体系结构的过程调用标准- 最后我找到了一份综合文档,但它没有说明哪些操作系统遵循该标准(或者这些操作系统可能施加的变体或附加限制)。

我问的原因是我想尝试在 WinCE 中使用 LLVM 在运行时生成一些简单的代码,但它只正式支持 Linux。

4

2 回答 2

2

调用约定是由编译器实现的,不是特定于操作系统的。话虽如此,我可以确认 gcc 和 RVCT(ARM 的 c/c++ 编译器)都生成遵循您上面提到的 ARM 体系结构的过程调用约定的代码。

查看 Microsoft 文档的链接,我还可以确认它遵循 ARM 调用约定。

于 2010-07-25T23:10:39.127 回答
1

我遇到了完全相同的问题,我试图找到答案。即 where/what 文件说了什么或定义了 LINUX 下使用的 ARM ABI。

以下文件是我最接近答案的文件

ARM GNU/Linux Application Binary Interface Supplement

它是由 CodeSourcery 编写的,在其摘要中编码在我看来是对上述问题的回答,即:

Application Binary Interface (ABI) for the ARM Architecture(ARM Ltd 发布的文档)指定了用于 ARM 架构的工具链之间的互操作所需的编译和链接的各个方面。

但是,由于本文档中发布的 ABI 是在未参考特定操作系统的情况下设计的,因此某些方面仍未指定。

显然,CodeSourcery 的文档旨在通过指定使用 GNU/Linux 操作系统时为这些方面做出的决定来补充 ARM 架构的 ABI。

我提供了一个指向该文档的链接(可以通过搜索文档的标题找到其他链接):

http://www.boost.org/doc/libs/1_51_0_beta1/libs/context/doc/pdf/arm-linux-aapcs.pdf

似乎不存在指定 LINUX 下的 ARM ABI 的标准,而且 CodeSourcery 的文档似乎再次尝试涵盖这方面。

于 2012-12-23T06:39:55.750 回答