GNU/Linux >> Belajar Linux >  >> Linux

Di mana x86-64 System V ABI didokumentasikan?

Dokumen System V AMD64 psABI dipertahankan sebagai sumber LaTeX di GitLab. Demikian pula i386 psABI adalah repo GitLab yang terpisah. (Sebelumnya di github). Halaman-halaman itu memiliki info di mana revisi dibahas.
ABI x32 (pointer 32-bit dalam mode panjang) adalah bagian dari dokumen ABI x86-64 alias AMD64. Lihat Bab 10:Model Pemrograman ILP32.

Repo GitLab secara otomatis membuat PDF dari versi x86-64 saat ini , tapi bukan i386.

Lihat juga wiki tag x86 untuk panduan/referensi/tautan lainnya.

Versi terakhir di Github adalah draf x86-64 versi 1.0 (Januari 2018). Mulai Juli 2022, versi saat ini masih 1.0, dengan kata Draf dihapus pada akhir 2018.

Github juga menghosting PDF i386 ABI versi 1.1.
(Perhatikan bahwa sebagian besar OS non-Linux menggunakan versi lama ABI i386 yang tidak memerlukan penyelarasan tumpukan 16-byte, hanya 4. GCC berakhir bergantung pada -mpreferred-stack-boundary=4 Penyelarasan 16-byte untuk kode-gen SSE-nya (mungkin secara tidak sengaja), dan akhirnya ABI diperbarui untuk Linux untuk mengabadikannya sebagai persyaratan resmi. Saya mencoba ringkasan dalam komentar di bug GCC #40838. Ini memecah compat mundur dengan beberapa asm tulisan tangan yang memanggil fungsi lain.)

Secara tidak resmi, tanda-memperluas argumen sempit ke 32-bit diperlukan (untuk i386 dan amd64), karena dentang bergantung padanya. Semoga revisi ABI mendatang akan mendokumentasikannya. GCC dan/atau dentang sekarang memiliki beberapa opsi untuk mengontrolnya (TODO menggali apa namanya), tetapi defaultnya masih sama seperti tahun 2022.

Penamaan:psABI

Suplemen Prosesor (psABI) docs dirancang sebagai pelengkap System V gABI (generik) yang jarang diperbarui, yang dihosting di situs web SCO.

Tautan lain

Juga https://refspecs.linuxfoundation.org/ menyimpan salinan gABI dari tahun 1997.

https://uclibc.org/specs.html memiliki tautan psABI untuk berbagai ISA non-x86. (Meskipun misalnya ARM tampaknya hanya mendokumentasikan tata letak file ELF, bukan konvensi pemanggilan atau status startup proses.) https://uclibc.org/docs/psABI-x86_64.pdf adalah salinan usang dari x86-64 psABI (0.99.7 dari 2014). Versi di GitHub memiliki kata-kata yang lebih jelas tentang beberapa hal dan perbaikan bug di beberapa contoh.

Terkait:Apa konvensi pemanggilan untuk panggilan sistem UNIX &Linux (dan fungsi ruang pengguna) pada i386 dan x86-64 dijelaskan konvensi pemanggilan panggilan sistem untuk SysV x86-64 (serta Linux i386 vs. FreeBSD).

Ini juga meringkas konvensi pemanggilan fungsi untuk argumen bilangan bulat. Panggilan sistem tidak menggunakan argumen vektor FP atau SSE/AVX, atau struct berdasarkan nilai, sehingga konvensi pemanggilan fungsi menjadi lebih rumit.

Agner Fog memiliki panduan konvensi panggilan (meliputi Windows vs. Sys V, dan berbagai konvensi untuk 32-bit, dan tip/trik untuk menulis fungsi yang dapat Anda gunakan di kedua platform). Ini adalah PDF terpisah dari panduan pengoptimalan dan mikroarsitektur serta tabel instruksinya (yang merupakan bacaan penting jika Anda peduli dengan performa.)

Wikipedia memiliki artikel konvensi pemanggilan x86 yang menjelaskan berbagai konvensi, tetapi sebagian besar tidak cukup detail untuk menggunakannya untuk apa pun selain argumen bilangan bulat sederhana. (mis. tidak ada deskripsi aturan pengepakan struktur).

Terkait:C++ ABI

GCC dan Clang (pada semua arsitektur) menggunakan C++ ABI yang awalnya dikembangkan untuk Itanium. https://itanium-cxx-abi.github.io/cxx-abi/. Ini relevan misalnya untuk persyaratan apa struct/class C++ harus diteruskan dalam register (misalnya menjadi agregat menurut beberapa definisi), vs. ketika struct/class selalu perlu memiliki alamat dan diteruskan dengan referensi, bahkan ketika itu cukup kecil untuk dimasukkan ke dalam 2 register. Aturan ini bergantung pada hal-hal yang memiliki konstruktor atau destruktor non-trivial.


basis standar Linux

Basis Standar Linux, yang dapat dianggap oleh beberapa orang sebagai spek resmi untuk masalah ini, memiliki bagian bernama 7.2. "Urutan Pemanggilan Fungsi" menunjuk ke 2.1. "Bagian Referensi Normatif" yang berisi tautan berikut:

  • Antarmuka Biner Aplikasi Sistem V, Edisi 4.1 http://www.sco.com/developers/devspecs/gabi41.pdf
  • Antarmuka Biner Aplikasi Sistem V - DRAFT - 17 Desember 2003 http://www.sco.com/developers/gabi/2003-12-17/contents.html
  • Sistem V Application Binary Interface Tambahan Prosesor Arsitektur AMD64, Versi Draf 0.95 http://refspecs.linux-foundation.org/elf/x86_64-abi-0.95.pdf

Oleh karena itu, saya akan merekomendasikan penggunaan versi spesifikasi tersebut sebagai versi kanonis kecuali Anda memiliki alasan kuat untuk melakukan sebaliknya.


Versi saat ini dari Sistem V ABI dari GitLab dapat dengan mudah diubah menjadi PDF yang bagus dengan langkah-langkah ini, dengan asumsi sistem Ubuntu.

sudo apt-get install texlive-full
git clone https://gitlab.com/x86-psABIs/x86-64-ABI
cd x86-64-ABI
make pdf

Ini akan menghasilkan file bernama abi.pdf mana yang paling dibutuhkan, seperti di bawah ini.

Perhatikan bahwa tanggal pada judul tampaknya merupakan tanggal pembuatan PDF, bukan tanggal modifikasi terakhir dokumen yang sebenarnya.


Linux
  1. Apa runlevel sistem Linux saat ini?

  2. Output Dari Perintah "terakhir"?

  3. Di mana Timer Cron berada?

  1. Di mana fungsi itoa di Linux?

  2. Di mana isi /proc dari kernel Linux didokumentasikan?

  3. Di mana parameter kernel Linux yang ada di /proc/sys didokumentasikan?

  1. Bagaimana mengubah identitas sistem Linux

  2. Linux:Tempat meletakkan file swap

  3. di mana database updatedb berada?