ABI
ABI, eli Application Binary Interface on alhaisen tason rajapinta käyttöjärjestelmän ja suoritettavan ohjelman välillä.[1]
ABI määrittelee tietokoneohjelman ja käyttöjärjestelmän, ohjelman ja kirjaston, kahden eri ohjelman tai ohjelman sisäisten osien välisiä toimintamalleja. Siihen kuuluvat kirjaston ja käyttöjärjestelmän aliohjelmien kutsukäytännöt, järjestelmäkutsut, se mitä aliohjelmia on saatavilla sekä ohjelma-, kirjasto- ja objektitiedostojen tiedostomuodot.
ABI:n tekniset yksityiskohdat peitetään ohjelmointirajapintojen alle helpottamaan ohjelmoijien työtä ja ohjelman toteuttamista eri järjestelmissä. Esimerkiksi kaikki Unixit toteuttavat saman ohjelmointirajapinnan (POSIX API), mutta eivät samaa binäärirajapintaa (ABI), joten ohjelmat on käännettävä erikseen joka alustalle ja suoritinarkkitehtuurille. Muun muassa Debian tukee kahta EABI (embedded application binary interface) muotoa ARM-suorittimille tavujärjestyksen mukaan: armel
(pieni-endiaaninen) ja armeb
(iso-endiaaninen).[2][3] ABI:n on määriteltävä myös poikkeuksien käsittely[4], tietorakenteiden tasaus (engl. align) ja muita seikkoja.[5]
ABI voi olla erilainen käytetyn suorittimen, käyttöjärjestelmän, kääntäjän tai kielen mukaan. Tyypillisesti kutsukäytännöt sovitaan käyttöjärjestelmän ja prosessorin mukaan, mutta eri käytäntöjä on ollut.[6][7][8]
Lähteet
[muokkaa | muokkaa wikitekstiä]- www.sco.com/developers/devspecs/gabi41.pdf (pdf) sco.com. Viitattu 20.7.2016.
Viitteet
[muokkaa | muokkaa wikitekstiä]- ↑ The 101 of ELF files on Linux: Understanding and Analysis linux-audit.com. 15.5.2019. Viitattu 9.1.2021. (englanniksi)
- ↑ Debian ARM accelerates via EABI port linuxdevices.com. 19.1.2007. Arkistoitu Viitattu 9.1.2021. (englanniksi)
- ↑ Memory endianness ARM. Viitattu 1.2.2017.
- ↑ Itanium C++ ABI: Exception Handling ($Revision: 1.22 $) itanium-cxx-abi.github.io. Viitattu 29.9.2022. (englanniksi)
- ↑ Itanium C++ ABI (Revision: 1.83) refspecs.linuxbase.org. Viitattu 30.9.2022. (englanniksi)
- ↑ x64 ABI: Intro to the Windows x64 calling convention gamedeveloper.com. 28.5.2012. Viitattu 29.9.2022. (englanniksi)
- ↑ Raymond Chen: The history of calling conventions, part 1 devblogs.microsoft.com. 2.1.2004. Viitattu 29.9.2022. (englanniksi)
- ↑ Raymond Chen: The history of calling conventions, part 3 devblogs.microsoft.com. 8.1.2004. Viitattu 29.9.2022. (englanniksi)