Dokument System V AMD64 psABI je udržován jako zdroje LaTeXu na GitLabu. Podobně i386 psABI je samostatné úložiště GitLab. (Dříve na githubu). Tyto stránky obsahují informace o tom, kde se projednávají revize.
x32 ABI (32bitové ukazatele v dlouhém režimu) je součástí x86-64 aka AMD64 ABI doc. Viz Kapitola 10:Programovací model ILP32.
Úložiště GitLab automaticky vytvoří soubor PDF aktuální verze x86-64 , ale ne i386.
Podívejte se také na x86 tag wiki pro další průvodce / reference / odkazy.
Poslední verzí na Githubu byl koncept x86-64 verze 1.0 (leden 2018). V červenci 2022 je aktuální verze stále 1.0, přičemž slovo Draft bude koncem roku 2018 odstraněno.
Github také hostí PDF i386 ABI verze 1.1.
(Všimněte si, že většina nelinuxových operačních systémů používá starší verzi i386 ABI, která nevyžaduje 16bajtové zarovnání zásobníku, pouze 4. GCC skončilo v závislosti na -mpreferred-stack-boundary=4
16bajtové zarovnání pro svůj kódový gen SSE (možná neúmyslně) a nakonec bylo ABI aktualizováno pro Linux, aby to zakotvilo jako oficiální požadavek. Pokusil jsem se o shrnutí v komentáři k chybě GCC #40838. Toto přeruší zpětný compat s nějakým ručně psaným asm, který volá jiné funkce.)
Neoficiálně jsou vyžadovány úzké args rozšiřující znaménko na 32 bitů (pro i386 i amd64), protože na tom závisí clang. Doufejme, že to zdokumentuje budoucí revize ABI. GCC a/nebo clang nyní mají některé možnosti, jak to ovládat (TODO vykopat, jak se jim říkalo), ale výchozí nastavení je stále stejné jako v roce 2022.
Pojmenování:psABI
Dodatek k procesoru (psABI) dokumenty jsou navrženy jako doplněk k méně často aktualizovanému System V gABI (generic), hostovaném na webových stránkách SCO.
Další odkazy
Také https://refspecs.linuxfoundation.org/ hostuje kopii gABI z roku 1997.
https://uclibc.org/specs.html má odkazy psABI pro různé ISA jiné než x86. (I když se například zdá, že ARM dokumentuje pouze rozložení souboru ELF, nikoli volací konvenci nebo stav spuštění procesu.) https://uclibc.org/docs/psABI-x86_64.pdf je zastaralá kopie x86-64 psABI (0,99,7 z roku 2014). Verze na GitHubu má v některých příkladech jasnější znění několika věcí a oprav chyb.
Související:Jaké jsou konvence volání pro systémová volání UNIX a Linux (a funkce uživatelského prostoru) na i386 a x86-64 popisuje konvence volání systémového volání pro x86-64 SysV (stejně jako i386 Linux vs. FreeBSD).
Také shrnuje konvence volání funkcí pro celočíselné argumenty. Systémová volání neberou vektorové argumenty FP nebo SSE/AVX ani struktury podle hodnoty, takže konvence volání funkcí je složitější.
Agner Fog má průvodce konvencemi volání (pokrývá Windows vs. Sys V a různé konvence pro 32bitové verze a tipy/triky pro funkce zápisu, které můžete použít na obou platformách). Toto je samostatné PDF od jeho průvodců optimalizací a mikroarchitekturou a instrukčních tabulek (které jsou nezbytné, pokud vám záleží na výkonu.)
Wikipedia má článek o konvencích volání x86, který popisuje různé konvence, ale většinou ne dostatečně podrobně, aby je bylo možné použít pro něco jiného než pro jednoduché celočíselné argumenty. (např. žádný popis pravidel struct-packing).
Související:C++ ABI
GCC a Clang (na všech architekturách) používají C++ ABI původně vyvinuté pro Itanium. https://itanium-cxx-abi.github.io/cxx-abi/. To je relevantní například pro to, jaké požadavky je třeba předat strukturou/třídou C++ v registrech (např. být agregací podle nějaké definice), vs. když struktura/třída musí mít vždy adresu a musí být předána odkazem, dokonce i když je dost malý na to, aby se sbalil do 2 registrů. Tato pravidla závisí na věci, která má netriviální konstruktor nebo destruktor.
Základní standardní Linux
Linux Standard Base, který může být některými považován za autoritativní specifikaci pro tuto záležitost, má sekci nazvanou 7.2. "Sekvence volání funkcí" odkazuje na 2.1. "Sekce Normativních odkazů", která obsahuje následující odkazy:
- Aplikační binární rozhraní System V, vydání 4.1 http://www.sco.com/developers/devspecs/gabi41.pdf
- Aplikační binární rozhraní System V – NÁVRH – 17. prosince 2003 http://www.sco.com/developers/gabi/2003-12-17/contents.html
- System V Application Binary Interface AMD64 Architecture Processor Supplement, draft Version 0.95 http://refspecs.linux-foundation.org/elf/x86_64-abi-0.95.pdf
Doporučil bych proto používat tyto verze specifikací jako kanonické, pokud nemáte dobrý důvod udělat jinak.
Aktuální verze System V ABI z GitLabu lze snadno převést do pěkného PDF pomocí těchto kroků, za předpokladu systému Ubuntu.
sudo apt-get install texlive-full
git clone https://gitlab.com/x86-psABIs/x86-64-ABI
cd x86-64-ABI
make pdf
Tím se vytvoří soubor s názvem abi.pdf
což je přesně to, co je potřeba, jak je uvedeno níže.
Všimněte si, že datum v názvu se zdá být datem sestavení PDF, nikoli skutečným datem poslední úpravy dokumentu.