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

问题描述 投票:35回答:2

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

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

linux assembly x86-64 calling-convention abi
2个回答
39
投票

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

有关最新版本的直接链接,请参阅 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与Sys V,以及32位的各种约定,以及用于编写可在任一平台上使用的函数的提示/技巧)。这是与他的优化和微体系结构指南和指令表(如果您关心性能,这是必不可少的阅读)的单独PDF。)

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


2
投票

Linux标准库

Linux Standard Base,可以被一些权威的规范考虑到这个问题,有一个名为7.2. "Function Calling Sequence"的部分指向2.1. "Normative References section",其中包含以下链接:

因此,我建议使用那些规范版本作为规范版本,除非你有充分的理由不这样做。

© www.soinside.com 2019 - 2024. All rights reserved.