x86-64 System V ABI在哪里记录?

时间:2013-08-08 18:50:56

标签: linux assembly x86-64 calling-convention abi

x86-64 System V ABI(用于除Windows以外的所有内容)曾经住在http://x86-64.org/documentation/abi.pdf,但该网站现已脱离互联网。

该文件是否有新的权威主页?

3 个答案:

答案 0 :(得分:33)

System G x86-64 psABI在GitHub上维护。 H.J.Lu的github页面包含a wiki with links to the current versions x86-64和i386 SystemV psABI文档,以及讨论更新的论坛。

有关最新版本的直接链接,请参阅 tag wiki。 (这个答案可能已经过时了。)

截至目前,x86-64 is r252 (Draft 0.99.8 April 2016)的当前版本和i386 is 1.1的当前版本(包括AVX512)。非正式地,sign-extending narrow args to 32-bit is required,因为铿锵取决于它。希望未来的ABI修订版能够证明这一点。

x32 ABI(长模式下的32位指针)是x86-64 ABI doc的一部分。请参见第10章:ILP32编程模型。

请注意,特定于处理器的psABI文档旨在作为SCO网站上托管频率较低的System V gABI的补充。

相关:What are the calling conventions for UNIX & Linux system calls on i386 and x86-64描述了x86-64 SysV(以及i386 Linux与FreeBSD)的系统调用约定。

它还总结了整数args的函数调用约定。  系统调用不接受FP或SSE / AVX向量args,或按值进行结构化,因此函数调用约定更复杂。

Agner Fog has a calling conventions guide(涵盖Windows vs. Sys V,以及32位的各种约定,以及用于编写可在任一平台上使用的函数的提示/技巧)。这是与他的优化和微体系结构指南和指令表(如果您关心性能,这是必不可少的阅读)的单独PDF。)

维基百科有一篇x86 calling conventions文章,它描述了各种约定,但大多数都没有足够详细地将它们用于除简单整数args以外的任何内容。 (例如,没有结构包装规则的描述)。

答案 1 :(得分:1)

通过以下步骤,可以很容易地将GitLab System V ABI 当前版本转换为精美的 PDF ,假设是Ubuntu系统。

sudo apt-get install texlive-full
git clone https://gitlab.com/x86-psABIs/x86-64-ABI
cd x86-64-ABI
make pdf

这将产生一个名为abi.pdf的文件,如下所示。

请注意,标题中的日期似乎是PDF的生成日期,而不是文档的实际上次修改日期。

enter image description here

答案 2 :(得分:0)

Linux标准基础

Linux Standard Base(可以由某些权威规范认为是该问题)的7.2. "Function Calling Sequence"部分指向2.1. "Normative References section",其中包含以下链接:

因此,除非您有充分的理由,否则我建议使用那些规范版本作为规范规范。