Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Application binary interface

From Wikipedia, the free encyclopedia
Interface to software defined in terms of in-process, machine code access

A high-level comparison of in-kernel and kernel-to-userspace APIs and ABIs
TheLinux kernel andGNU C Library define theLinux API. After compilation, the binaries offer an ABI. Keeping this ABI stable over a long time is important forISVs.

Anapplication binary interface (ABI) is aninterface exposed bysoftware that is defined for in-processmachine code access. Often, the exposing software is alibrary, and the consumer is aprogram.

An ABI is at a relatively low level ofabstraction. Interface compatibility depends on the targethardware and thesoftware buildtoolchain. In contrast, anapplication programming interface (API) defines access insource code, which is a relatively high-level, hardware-independent, andhuman-readable format. An API defines an interface at the source code level, before compilation, whereas an ABI defines an interface to compiled code.

API compatibility is generally the concern forsystem design and of the toolchain. However, aprogrammer may have to deal with an ABI directly when writing a program in multiplelanguages or when using multiplecompilers for the same language.

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.

Description

[edit]

Interface aspects covered by an ABI include:

  • Processorinstruction set, with details like register file structure,memory access types, etc.
  • Size, layout, andalignment of basicdata types that the processor can directly access
  • Calling convention, which controls how the arguments offunctions are passed, and return values retrieved; for example, it controls the following:
    • How thecall stack is organized
    • Whether all parameters are passed on the call stack, or some are passed in registers
    • Which registers are used for which function parameters
    • Whether the first function parameter passed on the call stack is pushed first or last
    • Whether the caller or callee is responsible for cleaning up the call stack after the function call
  • Name mangling[1]
  • Exception propagation[2]
  • How an application should makesystem calls to the operating system, and if the ABI specifies direct system calls rather than procedure calls to system callstubs, the system call numbers
  • In the case of a complete operating system ABI, the binary format ofobject files, program libraries, etc.

ABIs include theIntel Binary Compatibility Standard (iBCS)[3] and theSystem V Release 4 ABIs for various instruction sets.

Embedded ABI

[edit]

Anembedded ABI (EABI), used on anembedded operating system, specifies aspects such asfile formats, data types, register usage,stack frame organization, and function parameter passing of anembedded software program.

Each compiler andassembler that supports an EABI createsobject code that is compatible with code generated by other such compilers and assemblers. This allows developers to link libraries generated by one compiler with object code generated by another.

Typically, an EABI is optimized for performance for the limited resources of the target embedded system. Therefore, an EABI may omit abstractions betweenkernel and user space typically found indesktop operating systems. For example,dynamic linking may be avoided to allow smaller executables and faster loading, fixed register usage allows more compact stacks and kernel calls, and running the application in privileged mode allows direct access to custom hardware operation without the indirection of calling a device driver.[4] The choice of EABI can affect performance.[5][6]

Widely used EABIs include thePowerPC,[4]Arm,[7] andMIPS EABIs.[8] Specific software implementations like the C library may impose additional limitations to form more concrete ABIs; one example is the GNU OABI and EABI for ARM, both of which are subsets of the ARM EABI.[9]

See also

[edit]

References

[edit]
  1. ^"Itanium C++ ABI". (compatible with multiple architectures)
  2. ^"Itanium C++ ABI: Exception Handling". (compatible with multiple architectures)
  3. ^"Intel Binary Compatibility Standard (iBCS)".
  4. ^ab"EABI Summary".PowerPC Embedded Application Binary Interface: 32-Bit Implementation(PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30.
  5. ^"Debian ARM accelerates via EABI port". Linuxdevices.com. 16 October 2016. Archived fromthe original on 21 January 2007. Retrieved11 October 2007.
  6. ^Andrés Calderón and Nelson Castillo (14 March 2007)."Why ARM's EABI matters". Linuxdevices.com. Archived fromthe original on 31 March 2007. Retrieved11 October 2007.
  7. ^"ABI for the Arm Architecture". Developer.arm.com. Retrieved4 February 2020.
  8. ^Eric Christopher (11 June 2003)."mips eabi documentation".binutils@sources.redhat.com (Mailing list). Retrieved19 June 2020.
  9. ^"ArmEabiPort".Debian Wiki.Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one.

External links

[edit]
Parts,
conventions
Related topics
Retrieved from "https://en.wikipedia.org/w/index.php?title=Application_binary_interface&oldid=1312546883"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp