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 procesyjá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 MicrosoftMicrosoft Windows) nebo tvůrce překladače (překladač GCCLinuxu) 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