代码之家  ›  专栏  ›  技术社区  ›  Qwertie

WinCE和Linux上的ARM调用约定?

  •  4
  • Qwertie  · 技术社区  · 14 年前

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

    到目前为止我找到的文件解释得不太清楚。例如在 http://msdn.microsoft.com/en-us/library/ms864497.aspx 一行写“windows ce.net compiler”,下一行写“arm compiler”,底部写“clarm”,不清楚是指同一个编译器还是不同的编译器。这是我迄今为止发现的……

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

    2 回复  |  直到 12 年前
        1
  •  2
  •   doron    14 年前

    调用约定是由编译器实现的,而不是特定于操作系统的约定。已经说过,我可以确认GCC和RVCT(ARM的C/C++编译器)都生成遵循上面提到的ARM体系结构的过程调用约定的代码。

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

        2
  •  1
  •   darbehdar    12 年前

    我遇到的问题和我试图找到答案的问题完全一样。也就是说,在哪里/什么文档说了什么或定义了Linux下使用的ARMABI。

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

    ARM GNU/Linux Application Binary Interface Supplement

    它是由代码源代码编写的,其摘要在我看来是对上述问题的答案,即:

    这个 Application Binary Interface (ABI) for the ARM Architecture (由ARM有限公司出版的一份文件)规定了用于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下指定ARMABI的标准,而且代码源代码编写的文档似乎也试图涵盖这一方面。