# Additional Resources

## ABIs and Platform Specifics

### System V

The System V ABIs are defined by a General ABI (gABI), which cross-platform things like linking
behavior and the ELF format, and by processor-speciic ABIs (psABI) that define data layout and
calling convention. The gABI can be found at <https://www.sco.com/developers/gabi/>.

#### ARM (Arm32 and AArch64)

ABIs are located at <https://github.com/ARM-software/abi-aa>. The aapcs32 and aapcs64 directories
are likely the most interesting. These ABIs are actively developed and discussed at that repository.

#### AMDGPU

The LLVM guide at <https://llvm.org/docs/AMDGPUUsage.html> is likely the best collection of
resources for this architecture.

#### AVR

The AVR calling convention is detailed at the GCC Wiki, <https://gcc.gnu.org/wiki/avr-gcc>. The
wiki is actively updated as needed.

#### BPF

A minimal ABI is defined at <https://docs.kernel.org/bpf/standardization/abi.html>.

#### CSky

The LLVM documentation links to <https://github.com/c-sky/csky-doc/tree/master>, which contains
a document `C-SKY_V2_CPU_Applications_Binary_Interface_Standards_Manual.pdf`.

#### Hexagon

The Hexagon ABI can be found at <https://docs.qualcomm.com/doc/80-N2040-23/topic/>.

#### Loongarch

ABIs are located at <https://github.com/loongson/la-abi-specs>, with a rendered version at
<https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html>. This ABI is actively
developed and discussed at that repository.

#### m68k

An ABI is described at <https://m680x0.github.io/doc/abi.html>.

#### MIPS

The o32 ("old 32") ABI is described in [_System V Application Binary Interface: MIPS
RISC Processor Supplement_](https://refspecs.linuxfoundation.org/elf/mipsabi.pdf).
The n32 and n64 ("new 32" and "new 64") ABIs are described in the [_MIPSproTM N32 ABI
Handbook_](https://irix7.com/techpubs/007-2816-005.pdf). There is also a porting guide for n64 that
may be helpful <https://irix7.com/techpubs/007-2391-006.pdf>.

#### MSP430

The document _MSP430 Embedded Application Binary Interface_ is available at
<https://www.ti.com/lit/an/slaa534a/slaa534a.pdf>.

#### NVPTX

LLVM documentation directs to <https://docs.nvidia.com/cuda/index.html>.

#### PowerPC

There are a few relevant documents for PowerPC ABI:

* [_System V Application Binary Interface: PowerPC Processor
  Supplement_](https://refspecs.linuxfoundation.org/elf/elfspec_ppc.pdf) is the original 32-bit
  PowerPC ABI specification.
* [_Power Architecture™ 32-bit Application Binary Interface Supplement 1.0 - Linux® &
  Embedded_](https://web.archive.org/web/20120608163804/https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0-Unified.pdf)
  (web archive) is the latest version of the 32-bit ABI. Its source is hosted at
  <https://github.com/ryanarn/powerabi> but effectively unmaintained.
* [_64-bit PowerPC ELF Application Binary Interface Supplement
  1.9_](https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html) is the original 64-bit
  ABI, last updated in 2004. This is known as ELFv1, and still used by default on some big endian
  PowerPC64 targets.
* [_64-bit ELF V2 ABI Specification: Power
  Architecture_](https://openpower.foundation/specifications/64bitelfabi/) is the replacement ABI
  and used by default on most PowerPC64 targets.

#### RISC-V

Ratified RISC-V ABIs are located at <https://docs.riscv.org/reference/abi/v1.0/index.html>. More
recent snapshots can be viewed at <https://riscv-non-isa.github.io/riscv-elf-psabi-doc/>, with
development happening at <https://github.com/riscv-non-isa/riscv-elf-psabi-doc>.

#### s390x

The ABI is located at <https://github.com/IBM/s390x-abi> with a published PDF available at
<https://ibm.github.io/s390x-abi/lzsabi_s390x.pdf>. This ABI is actively developed and discussed
at that repository.

Historical ISAs can be found at <https://linux.mainframe.blog/zarchitecture-principles-of-operation/>.
<https://maskray.me/blog/toolchain-notes-on-z-architecture> has a great overview of other ABI
components such as linking and TLS.

#### SPARC

_SCD 2.4.1_ available at <https://sparc.org/technical-documents/specifications/> describes both the
32-bit and 64-bit ABIs. _SPARC psABI 3.0_, available at that same link, is an older description of
the 32-bit ABI.

#### x86

The 32-bit ABI (i386) is located at <https://gitlab.com/x86-psABIs/i386-ABI>. The 64-bit ABI (amd64)
is located at <https://gitlab.com/x86-psABIs/x86-64-ABI/#elf-x86-64-abi-psabi>. Both of these are
actively developed and discussed on mailing lists at <https://groups.google.com/g/ia32-abi> and
<https://groups.google.com/g/x86-64-abi>.

#### Xtensa

TODO

### Apple

Apple largely follows the System V ABIs but documents a few exceptions at the following links:

* Arm64: <https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms>
* x86: <https://developer.apple.com/documentation/xcode/writing-64-bit-intel-code-for-apple-platforms>

### Microsoft

Microsoft's x86-64 ABI is defined at <https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions>.
There are a few different x86-32 conventions:

* Cdecl (default): <https://learn.microsoft.com/en-us/cpp/cpp/cdecl>
* Stdcall: <https://learn.microsoft.com/en-us/cpp/cpp/stdcall>
* Fastcall: <https://learn.microsoft.com/en-us/cpp/cpp/fastcall>
* Thiscall: <https://en.wikipedia.org/wiki/X86_calling_conventions#thiscall>

As well as a few that aren't supported by Rust (`__clrcall`, `__vectorcall`, `__preserve_none`).

Aarch64 targets generally use the AAPCS64 calling convention. There are some exceptions listed at
<https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-170>.

Register mappings for arm64ec are documented at
<https://learn.microsoft.com/en-us/cpp/build/arm64ec-windows-abi-conventions?view=msvc-170>.
<http://www.emulators.com/docs/abc_arm64ec_explained.htm> does a great job of explaining more about
how this works.

#### Wasm

The way that C types are broken down into Wasm types is described at
<https://github.com/WebAssembly/tool-conventions/blob/main/BasicCABI.md>.

### Additional Resources for Platform Specifics

The following links aggregate more resources

* Links to other resources such as ELF and DWARF: <https://refspecs.linuxfoundation.org/>
* Links to a number of standards including ISAs <https://llvm.org/docs/CompilerWriterInfo.html>
* More about System V ABIs, especially x86: <https://wiki.osdev.org/System_V_ABI>
