Content deleted Content added
m Reverted 1 edit by 2409:4063:6D05:ED5A:9417:D8FE:5908:B3EF (talk) to last revision by 190.206.240.252 |
Guy Harris (talk | contribs) Multiple compilers for the *same* language, presumably; multiple compilers for multiple languages is usually the case. |
||
(39 intermediate revisions by 19 users not shown) | |||
Line 1:
{{short description|
{{Use dmy dates|date=June 2020}}
[[File:Linux kernel interfaces.svg|thumb|300px|A high-level comparison of in-kernel and kernel-to-userspace APIs and ABIs]]
[[File:Linux API and Linux ABI.svg|thumb|300px|The [[Linux kernel]] and [[GNU C Library]] define the [[Linux kernel interfaces#Kernel–user space API|Linux API]]. After compilation, the binaries offer an ABI. Keeping this ABI stable over a long time is important for [[Independent software vendor|ISVs]].]]
An
A complete ABI enables a program that supports an ABI to run without modification on multiple operating systems that provide the ABI. The target system must provide any required libraries (that implement the ABI), and there may be other prerequisites.
* a processor instruction set (with details like register file structure, stack organization, memory access types, ...)▼
* the sizes, layouts, and [[Data structure alignment|alignments]] of basic [[data type]]s that the processor can directly access▼
* the [[calling convention]], which controls how the arguments of [[function (programming)|function]]s are passed, and return values retrieved. For example, it controls:▼
** whether all parameters are passed on the stack, or some are passed in registers;▼
** which registers are used for which function parameters;▼
** and whether the first function parameter passed on the stack is pushed first or last.▼
* how an application should make [[system call]]s to the operating system, and if the ABI specifies direct system calls rather than procedure calls to system call [[Method stub|stubs]], the system call numbers.▼
* and in the case of a complete operating system ABI, the binary format of [[object file]]s, program libraries, and so on.▼
==
Interface aspects covered by an ABI include:
▲*
▲*
▲*
** How the [[call stack]] is organized
▲**
** Whether the caller or callee is responsible for cleaning up the call stack after the function call
* [[Name mangling]]<ref>{{cite web|url=https://itanium-cxx-abi.github.io/cxx-abi/|title=Itanium C++ ABI}} (compatible with multiple architectures)</ref>
* [[exception handling|Exception]] propagation<ref>{{cite web|url=http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html|title=Itanium C++ ABI: Exception Handling}} (compatible with multiple architectures)</ref>
▲*
▲*
ABIs include the [[Intel Binary Compatibility Standard]] (iBCS)<ref>{{cite web |url=http://www.everything2.com/index.pl?node=iBCS |title=Intel Binary Compatibility Standard (iBCS)}}</ref> and the [[System V Release 4]] ABIs for various instruction sets.
== {{Anchor|EABI}}Embedded
An '''embedded
Each compiler and [[
| title = PowerPC Embedded Application Binary Interface: 32-Bit Implementation
| date = 1 October 1995
Line 61 ⟶ 63:
}}</ref>
Widely used EABIs include the [[PowerPC]],<ref name="ppc-eabi"/> [[Arm architecture|Arm]]
== See also ==
{{Portal|Computer programming}}
* {{Annotated link|Bytecode}}
▲* [[Binary-code compatibility]]
* {{Annotated link|Debug symbol}}
▲* [[Comparison of application virtual machines]]
▲* [[Foreign function interface]]
* {{Annotated link|Native (computing)}}
▲* [[Language binding]]
*
*
*
*
* [[Visual C++#Compatibility|Visual C++
==References==
Line 92 ⟶ 93:
* [https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html MIPS EABI documentation]
* {{webarchive|url=https://web.archive.org/web/20150114065444/http://www.oracle.com/technetwork/server-storage/solaris10/about-amd64-abi-141142.html|title=Sun Studio 10 Compilers and the AMD64 ABI}}{{snd}} a summary and comparison of some popular ABIs
* [
{{Application binary interface}}
|