x86-64 System V ABI(用于除Windows以外的所有内容)曾经住在http://x86-64.org/documentation/abi.pdf,但该网站现已脱离互联网。
该文件是否有新的权威主页?
答案 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文档,以及讨论更新的论坛。
有关最新版本的直接链接,请参阅x86 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)
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的生成日期,而不是文档的实际上次修改日期。
答案 2 :(得分:0)
Linux标准基础
Linux Standard Base(可以由某些权威规范认为是该问题)的7.2. "Function Calling Sequence"部分指向2.1. "Normative References section",其中包含以下链接:
因此,除非您有充分的理由,否则我建议使用那些规范版本作为规范规范。