assembly x86-64 System V ABI记录在何处?

hmmo2u0o  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(131)

x86-64系统V ABI(用于除Windows以外的所有设备)曾经位于http://x86-64.org/documentation/abi.pdf,但该网站现在已经从互联网上消失了。
文档是否有新的权威主目录?

igetnqfo

igetnqfo1#

System V AMD 64 psABI文档作为LaTeX源on GitLab进行维护。同样,i386 psABI是一个单独的GitLab repo。(以前在github上)。这些页面提供了讨论修订的信息。
x32 ABI(长模式下的32位指针)是x86-64(又称AMD 64 ABI)文档的一部分。请参阅第10章:ILP 32编程模型。
GitLab存储库会自动构建**a PDF of the current x86-64 version**,但不会构建i386。
另请参阅x86tag wiki以获取其他指南/参考资料/链接。
Github上一个版本是x86-64 version 1.0 draft (January 2018),截至2022年7月,目前的版本仍然是1.0,Draft一词在2018年底被删除。
Github也有一个i386 ABI version 1.1的PDF文件。
(Note大多数非Linux操作系统使用i386 ABI的旧版本,它不需要16字节堆栈对齐,仅需要4。GCC最终依赖于-mpreferred-stack-boundary=4 16字节对齐来生成SSE代码(也许无意),并且最终ABI得到了针对Linux的更新,将其作为官方要求。我试图在GCC bug #40838的评论中进行总结。这破坏了与一些调用其他函数的手写asm的向后兼容性。)
非正式地,需要将窄参数符号扩展到32位(i386和amd 64),因为clang依赖于它。希望未来的ABI修订版会记录这一点。GCC和/或clang现在有一些选项来控制这一点(TODO挖掘它们的名称),但默认值仍然与2022年相同。

命名:前列腺特异性ABI

  • 处理器补充 *(psABI)文档旨在补充SCO网站上不常更新的System V gABI(通用)。
    其他链接

此外,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上的版本对一些事情有更清晰的措辞,并在一些示例中修复了错误。
相关:* What are the calling conventions for UNIX & Linux system calls (and user-space functions) on i386 and x86-64描述了 * x86-64 SysV(以及i386 Linux与FreeBSD)的系统调用调用约定。
系统调用不接受FP或SSE/AVX向量参数,也不接受按值的结构体,因此函数调用的约定更加复杂。

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

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

相关:C++ ABI语言

GCC和叮当声(在所有体系结构上)使用最初为Itanium. https://itanium-cxx-abi.github.io/cxx-abi/开发的C++ ABI。例如,这与C++结构/类需要在寄存器中传递的要求相关(例如,根据某些定义是聚合),与结构/类总是需要具有地址并通过引用传递时相比,即使它小到可以装入两个寄存器。这些规则依赖于具有非平凡构造函数或析构函数的东西。

jtjikinw

jtjikinw2#

Linux标准基础

Linux Standard Base(可被某些权威规范视为此问题的标准)包含名为7.2. "Function Calling Sequence"的章节,指向2.1.“规范性参考章节”,其中包含以下链接:

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

qq24tv8q

qq24tv8q3#

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

相关问题