71

x86-64 System V ABI(用于除 Windows 之外的所有设备)曾经位于http://x86-64.org/documentation/abi.pdf,但该站点现在已从 Internet 上消失。

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

4

3 回答 3

81

System V x86-64 psABI 文档在 GitLab 上作为 LaTeX 源进行维护。同样,i386 psABI 是一个单独的GitLab存储库。(以前在github 上)。这些页面包含有关修订讨论位置的信息。

(TODO:找到根据最新版本构建的 PDF 的链接。此答案其余部分中的链接已经有一段时间没有更新了。)

另请参阅 标签 wiki以获取最新版本的直接链接。


截至目前, x86-64的当前版本是 1.0(2018 年 1 月) 有一个更新的 2018 年 12 月草稿版本(具有讽刺意味的是)从 PDF 本身的“草稿 1.0”版本号中删除了“草稿”。
x32 ABI(长模式下的 32 位指针)是 x86-64 ABI 文档的一部分。请参阅第 10 章:ILP32 编程模型。

i386的当前版本是 1.1。(请注意,某些操作系统使用旧版本的 i386 ABI,它不需要 16 字节堆栈对齐,只有 4 个。GCC 最终依赖-mpreferred-stack-boundary=4于其 SSE 代码生成的 16 字节对齐(可能是无意的),最终ABI 已针对 Linux 进行了更新,以将其作为官方要求。我尝试在 GCC 错误 #40838 的评论中进行总结。这与一些调用其他函数的手写 asm 向后兼容。)

非正式地,需要将窄 args 符号扩展为 32 位(对于 i386 和 amd64),因为 clang 依赖于它。希望未来的 ABI 修订版将记录这一点。


命名:psABI

处理器补充 (psABI) 文档被设计为对更新频率较低的System V gABI(通用)的补充,托管在 SCO 的网站上。


其他链接

https://refspecs.linuxfoundation.org/托管了 1997 年的 gABI 副本。

https://uclibc.org/specs.html有各种非 x86 ISA 的 psABI 链接。(尽管例如 ARM 似乎只记录 ELF 文件布局,而不是调用约定或进程启动状态。) https://uclibc.org/docs/psABI-x86_64.pdf是 x86-64 的过时副本psABI(2014 年为 0.99.7)。GitHub 上的版本在一些示例中对一些内容和错误修正有更清晰的措辞。


相关:i386 和 x86-64 上 UNIX 和 Linux 系统调用(和用户空间函数)的调用约定是什么,描述了 x86-64 SysV(以及 i386 Linux 与 FreeBSD)的系统调用调用约定。

它还总结了整数参数的函数调用约定。系统调用不采用 FP 或 SSE/AVX 向量参数或按值的结构,因此函数调用约定更加复杂。


Agner Fog 有一个调用约定指南(涵盖 Windows 与 Sys V,以及 32 位的各种约定,以及编写可在任一平台上使用的函数的提示/技巧)。这是一个独立于他的优化和微架构指南和指令表的 PDF(如果您关心性能,这是必不可少的阅读材料。)

Wikipedia 有一篇x86 调用约定文章,它描述了各种约定,但大部分内容不够详细,无法将它们用于除简单整数 args 之外的任何内容。(例如,没有结构打包规则的描述)。


相关:C++ ABI

GCC 和 Clang(在所有架构上)使用最初为 Itanium 开发的 C++ ABI。https://itanium-cxx-abi.github.io/cxx-abi/。例如,这与需要在寄存器中传递 C++ 结构/类的哪些要求相关(例如,根据某些定义作为聚合)。

于 2016-10-31T18:11:05.047 回答
4

Linux 标准库

Linux Standard Base,一些权威规范可以考虑这个问题,有一个叫做7.2 的部分。“函数调用序列”指向2.1。“规范性参考部分”,其中包含以下链接:

因此,除非您有充分的理由不这样做,否则我建议将这些版本的规范用作规范版本。

于 2019-03-17T12:18:27.713 回答
4

假设是 Ubuntu 系统, GitLab当前版本System V ABI可以通过这些步骤轻松转换为漂亮的PDF 。

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 的构建日期,而不是文档的实际最后修改日期。

在此处输入图像描述

于 2020-09-10T16:57:17.417 回答