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