Kutsukäytäntö on joukko sääntöjä, joka määrittää miten aliohjelmille välitetään argumentteja ja miten arvoja palautetaan.[1] Kutsukäytäntö voi määrittää mitkä rekisterit ovat käytössä: esimerkiksi neljä ensimmäistä parametria voidaan sijoittaa rekistereihin ja loput sijoitetaan pinoon tietyssä järjestyksessä.[2] Tiedot voidaan tasata niiden luonnolliseen kokoon tai suorituskykysyistä tämä voi olla suurempi.[2][3]

Aliohjelmakutsut ovat ohjelmointikielen kääntäjän päätettävissä kun ne ovat vain ohjelman sisäisiä, mutta ohjelmakirjastojen kutsumiseen on tiedettävä sovittu tapa.[4] Esimerkiksi Windowsissa on käytetty useita eri tapoja x86-suorittimien kanssa, mutta x86-64:ssä on käytössä vain yksi kutsukäytäntö.[5] Linux käyttää System V -tyylistä käytäntöä.[6]

Kutsukäytäntö on sarja tavallisesti suoritettavia käskyjä, jotka suoritetaan aliohjelman kutsun ja paluun yhteydessä. Kutsukäytäntöön vaikuttavat ohjelmointikielen semantiikka, rekisterien rakenne, suorittimen osoitusmoodit, käskykanta ja kohdealustan olemassa olevat käytännöt. Kutsukäytäntö liittyy läheisesti aliohjelman paikallisten muuttujien varaamiseen. Suorittimesta riippuen muuttujat on sijoitettava muistiin koon mukaan tasattuina (engl. alignment), esimerkiksi neljätavuinen kokonaisluku on oltava neljän tavun rajalla ja kahdeksantavuinen liukuluku kahdeksan tavun rajalla, jolloin väliin jää aukkoja.[7]

Katso myös

muokkaa

Lähteet

muokkaa
  1. Development Reference Guides intel.com. Viitattu 12.9.2022. (englanniksi)
  2. a b x64 calling convention docs.microsoft.com. 18.5.2022. Viitattu 12.9.2022. (englanniksi)
  3. Overview of x64 ABI conventions docs.microsoft.com. Viitattu 12.9.2022. (englanniksi)
  4. Calling Conventions ctf101.org. Viitattu 12.9.2022. (englanniksi)
  5. Calling convention renenyffenegger.ch. Viitattu 12.9.2022. (englanniksi)
  6. Calling Conventions cs.cornell.edu. Viitattu 12.9.2022. (englanniksi)
  7. S. C. Johnson & D. M. Ritchie: Computing Science Technical Report No. 102: The C Language Calling Sequence bell-labs.com. syyskuu 1981. Viitattu 15.9.2022. (englanniksi)

Aiheesta muualla

muokkaa