ABI

Application binary interface (ABI) je v informatice označení pro nízkoúrovňové rozhraní. Jde o soubor pravidel, která definují spolupráci na úrovni strojového kódu mezi procesy a jádrem operačního systému, procesy a jimi používanými knihovnami nebo mezi součástmi aplikací. ABI umožňuje již zkompilovanému programu fungovat beze změn na všech systémech, které mají kompatibilní ABI.

Rozdíl mezi ABI a API

Rozdíl mezi ABI a API je ten, že API definuje rozhraní mezi zdrojovým kódem a knihovnami, takže ho používá programátor. Naproti tomu ABI je systémová záležitost, která je používána na úrovni strojového kódu. ABI definuje buď tvůrce operačního systému (firma Microsoft u Microsoft Windows) nebo tvůrce překladače (překladač GCC v Linuxu) nebo tvůrce procesoru (EABI pro RISC procesory).

Charakteristika

ABI obsahují informace o:

  • velikosti, vzhledu a zarovnání datových typů
  • volací konvence, které kontrolují, jaké parametry jsou funkcím předávány a jaké parametry funkce vrací; například: jestli jsou všechny parametry uloženy na zásobník nebo jestli jsou některé parametry předány do registrů, které registry jsou použité pro které parametry funkcí, a jestli je jako první odebrán ze zásobníku ten parametr, který byl na zásobník uložen jako poslední.
  • jak by měla aplikace provádět systémová volání operačního systému, a jestli ABI upřednostňuje přímá systémová volání před voláním procedur
  • a, v případě ABI celého operačního systému, objektové soubory, programové knihovny a tak dále.

Kompletní ABI, jakým je Intel Binary Compatibility Standard (iBCS), umožňuje programu z jednoho operačního systému podporujícímu toto ABI běžet beze změn na kterémkoli jiném operačním systému za předpokladu, že jsou přítomny potřebné knihovny a jsou splněny určité předpoklady.

Ostatní ABI popisují detaily, např. změny názvů v C++[1], šíření výjimek a volací konvence mezi překladači na stejné platformě, ale nevyžadují multiplatformní kompatibilitu.

EABI

Embedded-application binary interface (EABI) specifikuje konvence formátu souborů, datových typů, použití registrů, organizace zásobníku a předávání parametrů funkcí embedded programů.

Překladače, které podporují EABI, vytvoří objektový kód, který je kompatibilní s kódem vygenerovaným jinými kompilátory, a tím umožňují vývojářům linkovat knihovny vytvořené jedním překladačem k objektovému kódu vygenerovanému jiným překladačem. Vývojáři píšící kód v jazyce symbolických adres mohou využít EABI k interakci se strojovým kódem vytvořeným jiným překladačem.

Hlavními rozdíly mezi EABI a ABI, které se týkají hlavního využití v operačních systémech, jsou, že v aplikačním kódu jsou povoleny privilegované instrukce, dynamické linkování není vyžadováno (někdy dokonce ani není povoleno) a je použita lepší organizace zásobníku za účelem šetření pamětí.

Široce používaná EABI obsahují PowerPC[2], ARM EABI2[3]MIPS EABI.[4]

Výběr EABI může ovlivnit strojový výkon.[5][6]

Odkazy

Reference

  1. http://mentorembedded.github.io/cxx-abi/
  2. PowerPC EABI (IBM)
  3. ARM EABI2
  4. MIPS EABI. www.cygwin.com [online]. [cit. 2013-05-08]. Dostupné v archivu pořízeném dne 2013-03-30. 
  5. Debian ARM accelerates via EABI port [online]. [cit. 2013-05-09]. Dostupné v archivu pořízeném dne 2007-01-21. (anglicky)  – neplatný odkaz !
  6. Why ARM's EABI matters [online]. [cit. 2013-05-09]. Dostupné v archivu pořízeném dne 2012-07-14. (anglicky)  – neplatný odkaz !

Související články

  • Rozhraní
  • Knihovna
  • API (Application Programming Interface)