当前位置: 首页 > 知识库问答 >
问题:

x86-64系统V ABI文件在哪里?

王辉
2023-03-14

x86-64 System V ABI(除Windows外的所有系统都使用)以前在http://x86-64.org/documentation/ABI.pdf上运行,但现在该站点已从Internet上消失。

文件有没有新的权威归宿?

共有1个答案

公羊学义
2023-03-14

System V x86-64 psABI是在GitHub上维护的。H.J.Lu的github页面有一个wiki,链接到x86-64和i386 SystemV psABI文档的当前版本,以及讨论更新的论坛。

有关最新版本的直接链接,请参阅x86标记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=416字节对齐其SSE code-gen(可能是无意的),最终为Linux更新了ABI以将其作为正式要求。我试图在关于GCC bug#40838的评论中做一个总结。这与一些调用其他函数的手写asm相比有了倒退。)

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

处理器补充文件(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上的版本在一些示例中有更清晰的措辞和bug修复。

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

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

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

Wikipedia有一篇x86 calling conventions文章,它描述了各种约定,但大部分都不够详细,无法将它们用于简单的整数参数以外的任何内容。(例如,没有结构包装规则的说明)。

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

 类似资料:
  • 来自维基百科: 在计算中,红色区域是函数堆栈帧中超出返回地址的固定大小的区域,该函数未保留。被调用方函数可以使用红色区域来存储局部变量,而不会产生修改堆栈指针的额外开销。中断/异常/信号处理程序不得修改此内存区域。系统 V 使用的 x86-64 ABI 要求一个 128 字节的红色区域,该区域直接在返回地址之后开始,并包含函数的参数。OpenRISC 工具链采用 128 字节的红色区域。 从Sys

  • 在测试了大约100亿次之后,如果比AMD64的快0.1纳秒,那么似乎更快,但我不太明白。下面代码中的地址本身不是一个直接值吗? 计量代码为:

  • 文件系统是负责文件管理的操作系统的一部分。 它提供了一种机制来存储数据和访问文件内容,包括数据和程序。一些操作系统将所有内容视为Ubuntu文件。 文件系统处理以下问题 - 文件结构 - 前面已经了解可存储文件的各种数据结构。文件系统的任务是保持最佳的文件结构。 恢复可用空间 - 每当文件从硬盘中删除时,磁盘中都会创建一个可用空间。 可能有很多这样的空间需要被恢复,以便将它们重新分配给其他文件。

  • 简单的文件读写是通过uv_fs_*函数族和与之相关的uv_fs_t结构体完成的。 note libuv 提供的文件操作和 socket operations 并不相同。套接字操作使用了操作系统本身提供了非阻塞操作,而文件操作内部使用了阻塞函数,但是 libuv 是在线程池中调用这些函数,并在应用程序需要交互时通知在事件循环中注册的监视器。 所有的文件操作函数都有两种形式 - 同步(synchron

  • 文件系统提供弹性扩展的高性能文件存储服务,可为公有云上的虚拟机提供共享存储服务。 文件系统提供弹性扩展的高性能文件存储服务,可为公有云上的虚拟机提供共享存储服务。 目前已对接阿里云的NAS文件系统以及华为云的SFS弹性文件服务。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “存储/文件存储/文件系统” 菜单项,进入文件系统页面。 新建文件系统 该功能用于创建文件系统。 在文件系统

  • 文件系统组件集成了 PHP 生态中大名鼎鼎的 League\Flysystem (这也是 Laravel 等诸多知名框架的底层库)。通过合理抽象,程序不必感知存储引擎究竟是本地硬盘还是云服务器,实现解耦。本组件对常用的云存储服务提供了协程化支持。 安装 # 首先执行 composer require hyperf/filesystem # 使用阿里云 OSS 适配器时执行 composer req