1
1
mirror of https://github.com/foxsen/archbase.git synced 2026-04-04 03:08:39 +08:00

fix miss stated x32 ABI

This commit is contained in:
Zhang Fuxin
2021-10-29 17:01:51 +08:00
parent e21f334806
commit 82866beb91

View File

@@ -21,7 +21,7 @@ ABI包括但不限于如下内容
关心ABI细节的主要是编译工具链、操作系统和系统函数库的开发者但如果用到汇编语言或者想要实现跨语言的模块调用普通开发者也需要对它有所了解。从以上内容也可以看出了解ABI有助于深入理解计算机系统的工作原理。
同一个指令系统上可能存在多种不同的ABI。导致ABI差异的原因之一是操作系统差异。例如对于X86指令系统UNIX类操作系统普遍遵循System V ABI而Windows则有它自己的一套ABI约定。导致ABI差异的原因之二是应用领域差异有时针对不同的应用领域定制ABI可以达到更好的效果。例如ARM、PowerPC和MIPS都针对嵌入式领域的需求定义了EABI(Embedded Application Binary Interface它和通用领域的ABI有所不同。导致ABI差异的另外一种常见原因是软硬件的发展需要。例如MIPS早期系统多数采用O32 ABI它定义了四个寄存器用于函数调用参数后来的软件实践发现更多的传参寄存器有利于提升性能这促成了新的N32/N64 ABI的诞生。而指令集由32位发展到64位时也需要新的ABI。X86-64指令系统上有三种Sytem V ABI的变种分别是兼容32位X86的i386 ABI指针用32位、数据用64位的X32 ABI以及指针和数据都用64位的X86-64 ABI。操作系统可以只选择支持其中一种ABI也可以同时支持多种ABI。此外ABI的定义相对来说不如指令集本身完整和规范一个指令系统的ABI规范可能有很完备的、统一的文档描述也可能是依赖主流软件的事实标准由多个来源的非正式文档构成。
同一个指令系统上可能存在多种不同的ABI。导致ABI差异的原因之一是操作系统差异。例如对于X86指令系统UNIX类操作系统普遍遵循System V ABI而Windows则有它自己的一套ABI约定。导致ABI差异的原因之二是应用领域差异有时针对不同的应用领域定制ABI可以达到更好的效果。例如ARM、PowerPC和MIPS都针对嵌入式领域的需求定义了EABI(Embedded Application Binary Interface它和通用领域的ABI有所不同。导致ABI差异的另外一种常见原因是软硬件的发展需要。例如MIPS早期系统多数采用O32 ABI它定义了四个寄存器用于函数调用参数后来的软件实践发现更多的传参寄存器有利于提升性能这促成了新的N32/N64 ABI的诞生。而指令集由32位发展到64位时也需要新的ABI。X86-64指令系统上有三种Sytem V ABI的变种分别是兼容32位X86的i386 ABI利用了64位指令集的寄存器数量等优势资源但保持使用32位指针的X32 ABI以及指针和数据都用64位的X86-64 ABI。操作系统可以只选择支持其中一种ABI也可以同时支持多种ABI。此外ABI的定义相对来说不如指令集本身完整和规范一个指令系统的ABI规范可能有很完备的、统一的文档描述也可能是依赖主流软件的事实标准由多个来源的非正式文档构成。
下面我们以一些具体的例子来说明ABI中一些比较常见的内容。