Differences between revisions 1 and 89 (spanning 88 versions)
Revision 1 as of 2011-11-17 11:01:19
Size: 2263
Editor: ?MatthiasKlose
Comment:
Revision 89 as of 2021-08-13 12:51:01
Size: 20836
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from Multiarch/Tuples
Line 4: Line 3:
This document describes the new schema for representing architecture ABIs as directory names, using normalized GNU triplets. This document describes the new schema for representing architecture ABIs as directory names, using normalized GNU triplets. The process to document the tuples in the Debian Policy and distribution independent standards is tracked in http://bugs.debian.org/664257.
Line 18: Line 17:
 * On ARM, the canonical GNU triplet for EABI systems, whether using hard-float or soft-float, is arm-linux-gnueabi, despite the fact that hard-float and soft-float libraries use different calling conventions and can't be intermixed. The advice given by upstream GCC developers was to use the vendor field in the GNU triplet to express this difference[[http://gcc.gnu.org/ml/gcc/2010-07/msg00179.html|1]]; however, the vendor field is private by design, making this unreliable for cross-distribution use.  * Historical note: On ARM, the canonical GNU triplet for EABI systems, whether using hard-float or soft-float, '''was''' arm-linux-gnueabi, despite the fact that hard-float and soft-float libraries use different calling conventions and can't be intermixed. The advice given by upstream GCC developers was to use the vendor field in the GNU triplet to express this difference[[http://gcc.gnu.org/ml/gcc/2010-07/msg00179.html|1]]; however, the vendor field is private by design, making this unreliable for cross-distribution use. Work finally succeeded to push the arm-linux-gnueabihf triplet upstream, but there may still be some broken packages around for a while.
Line 23: Line 22:


 ||<rowstyle="background: maroon; color: white; font-weight: bold;" style="text-align: center">multiarch name ||<style="text-align: center">syscall ABI ||<style="text-align: center">instruction set ||<style="text-align: center">endian&shy;ness ||<style="text-align: center">word size ||<style="text-align: center">description ||<style="text-align: center">spec documents ||
 || <<Anchor(aarch64-linux-gnu)>>aarch64-linux-gnu || linux || ARM64 || little || 64 || aarch64 Linux Platform || AAPCS64 (ARM IHI 005A)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf)>><<BR>>ELF for the ARM 64-bit Architecture<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf)>> ||
 || <<Anchor(aarch64_be-linux-gnu)>>aarch64_be-linux-gnu || linux || ARM64 || big || 64 || aarch64 Linux Platform || AAPCS64 (ARM IHI 005A)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf)>><<BR>>ELF for the ARM 64-bit Architecture<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf)>> ||
 || <<Anchor(aarch64-linux-gnu_ilp32)>>aarch64-linux-gnu_ilp32 || linux || ARM64 || little || 32 || aarch64 Linux Platform || ||
 || <<Anchor(aarch64_be-linux-gnu_ilp32)>>aarch64_be-linux-gnu_ilp32 || linux || ARM64 || big || 32 || aarch64 Linux Platform || ||
 || <<Anchor(aarch64-uefi)>>aarch64-uefi || UEFI || ARM64 || little || 64 || [[UEFI|UEFI AARCH64]] || UEFI Spec<<FootNote(https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf)>> ||
 || <<Anchor(alpha-linux-gnu)>>alpha-linux-gnu || linux || Alpha || little || 64 || glibc, Tru64 calling standard || Tru64 Calling Standard<<FootNote(http://www.openwatcom.org/ftp/devel/docs/alpha%20calling%20standard.pdf)>> ||
 || <<Anchor(arc-linux-gnu)>>arc-linux-gnu || linux || ARCv2 || little || 32 || glibc Linux hard-float || (ARC v2 ABI)<<FootNote(https://github.com/foss-for-synopsys-dwc-arc-processors/arc-ABI-manual/blob/master/ARCv2_ABI.pdf)>><<FootNote(https://www.synopsys.com/dw/doc.php/ds/cc/programmers-reference-manual-ARC-HS.pdf)>>||
 || <<Anchor(arm-linux-gnu)>>arm-linux-gnu || linux || ARM || little || 32 || Old ARM ABI || APCS (ARM DUI 0041 chapter 9)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html)>>||
 || <<Anchor(arm-linux-gnueabi)>>arm-linux-gnueabi || linux || ARM || little || 32 || ARM EABI, soft-float || AAPCS (ARM IHI 0042D)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf)>><<BR>>ARM GNU/Linux ABI Supplement<<FootNote(https://sourcery.mentor.com/GNUToolchain/kbentry39)>> ||
 || <<Anchor(arm-linux-gnueabihf)>>arm-linux-gnueabihf || linux || ARM || little || 32 || ARM EABI, hard-float || AAPCS (ARM IHI 0042D)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf)>> and<<BR>>'''XXXXX (TBD)''' ||
 || <<Anchor(arm-uefi)>>arm-uefi || UEFI || ARM || little || 32 || [[UEFI|UEFI ARMHF]] || UEFI Spec<<FootNote(https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf)>> ||
 || <<Anchor(armeb-linux-gnueabi)>>armeb-linux-gnueabi || linux || ARM || big || 32 || ARM EABI, soft-float || AAPCS (ARM IHI 0042D)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf)>><<BR>>ARM GNU/Linux ABI Supplement<<FootNote(https://sourcery.mentor.com/GNUToolchain/kbentry39)>> ||
 || <<Anchor(armeb-linux-gnueabihf)>>armeb-linux-gnueabihf || linux || ARM || big || 32 || ARM EABI, hard-float || AAPCS (ARM IHI 0042D)<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf)>> and<<BR>>'''XXXXX (TBD)''' ||
 || <<Anchor(hppa-linux-gnu)>>hppa-linux-gnu || linux || PA-RISC || big || 32 || PA-RISC Linux 32-bit ELF || parisc-linux toolchain documents<<FootNote(http://wiki.parisc-linux.org/ToolChain)>> ||
 || <<Anchor(i386-gnu)>>i386-gnu || Hurd || IA-32 || little || 32 || Hurd/IA-32 || ia32 functions calls<<FootNote(http://refspecs.linuxbase.org/elf/abi386-4.pdf)>><<BR>>LSB Bug 3268<<FootNote(https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3268)>><<BR>>OS interface '''XXXXX''' undocumented ||
 || <<Anchor(i386-linux-gnu)>>i386-linux-gnu || linux || IA-32 || little || 32 || LSB IA32 || SCO Developer Specifications<<FootNote(http://www.sco.com/developers/devspecs/)>><<BR>>Intel386 psABI<<FootNote(http://refspecs.linuxbase.org/elf/abi386-4.pdf)>><<BR>>LSB Core-IA32<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA32/LSB-Core-IA32/elf-ia32.html)>><<BR>>LSB Bug 3268<<FootNote(https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3268)>> ||
 || <<Anchor(i386-kfreebsd-gnu)>>i386-kfreebsd-gnu || FreeBSD || IA-32 || little || 32 || [[Debian_GNU/kFreeBSD|glibc kFreeBSD IA-32]] || '''XXXXX''' undocumented ||
 || <<Anchor(i386-uefi)>>i386-uefi || UEFI || IA-32 || little || 32 || [[UEFI|UEFI IA32]] || UEFI Spec<<FootNote(https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf)>> ||
 || <<Anchor(ia64-linux-gnu)>>ia64-linux-gnu || linux || IA-64 || little || 64 || LSB IA64 || Intel Itanium SysV psABI<<FootNote(http://refspecs.linuxbase.org/elf/IA64-SysV-psABI.pdf)>><<BR>>LSB Core-IA64<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA64/LSB-Core-IA64/elf-ia64.html)>> ||
 || <<Anchor(loongarch64-linux-gnu)>>loongarch64-linux-gnu || linux || loongarch64 || little || 64 || glibc Linux loongarch64 || '''XXXXX''' undocumented ||
 || <<Anchor(m68k-linux-gnu)>>m68k-linux-gnu || linux || MC68000 || big || 32 || m68k SysV ABI || ISBN: 978-0138776633 ||
 || <<Anchor(mips-linux-gnu)>>mips-linux-gnu || linux || MIPS32r2+FPXX || big || 32 || MIPS o32 ABI || MIPS psABI<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips32/)>> ||
 || <<Anchor(mipsel-linux-gnu)>>mipsel-linux-gnu || linux || MIPS2(MIPS32r2 soon)+FPXX|| little || 32 || MIPS o32 ABI || MIPS psABI<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips32/)>> ||
 || <<Anchor(mips64-linux-gnuabin32)>>mips64-linux-gnuabin32 || linux || MIPS64r2 || big || 32 || MIPS n32 ABI || MIPSpro N32 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mips64el-linux-gnuabin32)>>mips64el-linux-gnuabin32 || linux || MIPS64r2 || little || 32 || MIPS n32 ABI || MIPSpro N32 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mips64-linux-gnuabi64)>>mips64-linux-gnuabi64 || linux || MIPS64r2 || big || 64 || MIPS 64-bit ABI || MIPSpro N64 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mips64el-linux-gnuabi64)>>mips64el-linux-gnuabi64|| linux || MIPS64r2 || little || 64 || MIPS 64-bit ABI || MIPSpro N64 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mipsisa32r6-linux-gnu)>>mipsisa32r6-linux-gnu || linux || MIPS32r6 || big || 32 || MIPS o32 ABI || MIPS psABI<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips32/)>> ||
 || <<Anchor(mipsisa32r6el-linux-gnu)>>mipsisa32r6el-linux-gnu|| linux || MIPS32r6 || little || 32 || MIPS o32 ABI || MIPS psABI<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips32/)>> ||
 || <<Anchor(mipsisa64r6-linux-gnuabin32)>>mipsisa64r6-linux-gnuabin32 || linux || MIPS64r6 || big || 32 || MIPS n32 ABI || MIPSpro N32 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mipsisa64r6el-linux-gnuabin32)>>mipsisa64r6el-linux-gnuabin32 || linux || MIPS64r6 || little || 32 || MIPS n32 ABI || MIPSpro N32 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mipsisa64r6-linux-gnuabi64)>>mipsisa64r6-linux-gnuabi64 || linux || MIPS64r6 || big || 64 || MIPS 64-bit ABI || MIPSpro N64 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(mipsisa64r6el-linux-gnuabi64)>>mipsisa64r6el-linux-gnuabi64|| linux || MIPS64r6 || little || 64 || MIPS 64-bit ABI || MIPSpro N64 ABI Handbook<<FootNote(ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/)>><<FootNote(https://imgtec.com/mips/architectures/mips64/)>> ||
 || <<Anchor(powerpc-linux-gnu)>>powerpc-linux-gnu || linux || PowerPC || big || 32 || LSB PPC32 || PowerPC psABI<<FootNote(http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf)>><<BR>>LSB Core-PPC32<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC32/LSB-Core-PPC32/elf-ppc32.html)>> ||
 || <<Anchor(powerpc-linux-gnuspe)>>powerpc-linux-gnuspe || linux || PowerPC || big || 32 || [[PowerPCSPEPort|PowerPC e500 (SPE)]] || Power 32-bit ABI Supplement 1.0 Linux<<FootNote(https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0.tgz)>> ||
 || <<Anchor(powerpc64-linux-gnu)>>powerpc64-linux-gnu || linux || PowerPC || big || 64 || LSB PPC64 || 64-bit PowerPC ELF psABI<<FootNote(http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html)>><<BR>>LSB Core-PPC64<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC64/LSB-Core-PPC64/elf-ppc64.html)>> ||
 || <<Anchor(powerpc64le-linux-gnu)>>powerpc64le-linux-gnu || linux || PowerPC || little || 64 || ?? || ?? ||
 || <<Anchor(riscv64-linux-gnu)>>riscv64-linux-gnu || linux || RISC-V || little || 64 || RV64G Linux Platform || RISC-V ELF psABI <<FootNote(https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md)>> ||
 || <<Anchor(s390-linux-gnu)>>s390-linux-gnu || linux || System/390 || big || 32 || LSB S390 || S/390 ELF psABI<<FootNote(http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html)>><<BR>>LSB Core-S390<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390/LSB-Core-S390/elf-s390.html)>> ||
 || <<Anchor(s390x-linux-gnu)>>s390x-linux-gnu || linux || z/Architecture || big || 64 || LSB S390X || zSeries ELF psABI<<FootNote(http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html)>><<BR>>LSB Core-S390X<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390X/LSB-Core-S390X/elf-s390x.html)>> ||
 || <<Anchor(sh4-linux-gnu)>>sh4-linux-gnu || linux || SH-4 || little || 32 || glibc Linux SH-4<<BR>>with fpu, double pervading || SH-4 Generic and Specific ABI<<FootNote(http://sg.renesas.com/support/downloads/download_results/C2003801-C2003900/sh4_000_top_abi_00013.jsp (registration required))>> ||
 || <<Anchor(sparc-linux-gnu)>>sparc-linux-gnu || linux || SPARC || big || 32 || glibc Linux sparc32 || SPARC psABI<<FootNote(http://www.sparc.com/standards/psABI3rd.pdf)>> ||
 || <<Anchor(sparc64-linux-gnu)>>sparc64-linux-gnu || linux || SPARC64 || big || 64 || glibc Linux sparc64 || SPARCv9 psABI<<FootNote(draft http://www.sparc.com/standards/64.psabi.1.35.ps.Z available online, can't find anything more concrete)>> ||
 || <<Anchor(x86_64-kfreebsd-gnu)>>x86_64-kfreebsd-gnu || FreeBSD || x86_64 || little || 64 || [[Debian_GNU/kFreeBSD|glibc kFreeBSD x86-64]] || '''XXXXX''' undocumented ||
 || <<Anchor(x86_64-linux-gnu)>>x86_64-linux-gnu || linux || x86_64 || little || 64 || LSB AMD64 || AMD64 psABI<<FootNote(http://x86-64.org/documentation/abi.pdf)>><<BR>>LSB Core-AMD64<<FootNote(http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-AMD64/LSB-Core-AMD64/elf-amd64.html)>> ||
 || <<Anchor(x86_64-linux-gnux32)>>x86_64-linux-gnux32 || linux || x86_64 || little || 32 || glibc Linux x32 || x32-abi documents<<FootNote(https://sites.google.com/site/x32abi/)>> ||
 || <<Anchor(x86_64-uefi)>>x86_64-uefi || UEFI || x86_64 || little || 64 || [[UEFI|UEFI AMD64]] || UEFI Spec<<FootNote(https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf)>> ||

Architectures in Debian:

 ||<rowstyle="background: maroon; color: white; font-weight: bold;"style="text-align: center">Debian architecture name ||<style="text-align: center">status in Debian ||<style="text-align: center">multiarch name ||
 || <<Anchor(alpha)>>alpha || EOL || alpha-linux-gnu ||
 || <<Anchor(amd64)>>amd64 || released || x86_64-linux-gnu ||
 || <<Anchor(arc)>>arc || planning || arc-linux-gnu ||
 || <<Anchor(arm)>>arm || EOL || arm-linux-gnu ||
 || <<Anchor(arm64)>>arm64 || released || aarch64-linux-gnu ||
 || <<Anchor(arm64ilp32)>>arm64ilp32 || none || aarch64-linux-gnu_ilp32 ||
 || <<Anchor(armel)>>armel || released || arm-linux-gnueabi ||
 || <<Anchor(armhf)>>armhf || released || arm-linux-gnueabihf ||
 || <<Anchor(hppa)>>hppa || EOL || hppa-linux-gnu ||
 || <<Anchor(hurd-i386)>>hurd-i386 || development || i386-gnu ||
 || <<Anchor(i386)>>i386 || released || i386-linux-gnu ||
 || <<Anchor(ia64)>>ia64 || EOL || ia64-linux-gnu ||
 || <<Anchor(kfreebsd-amd64)>>kfreebsd-amd64 || released || x86_64-kfreebsd-gnu ||
 || <<Anchor(kfreebsd-i386)>>kfreebsd-i386 || released || i386-kfreebsd-gnu ||
 || <<Anchor(m68k)>>m68k || EOL || m68k-linux-gnu ||
 || <<Anchor(mips)>>mips || released || mips-linux-gnu ||
 || <<Anchor(mipsel)>>mipsel || released || mipsel-linux-gnu ||
 || <<Anchor(mips64)>>mips64 || none || mips64-linux-gnuabi64 ||
 || <<Anchor(mips64el)>>mips64el || development || mips64el-linux-gnuabi64 ||
 || <<Anchor(mipsn32)>>mipsn32 || none || mips64-linux-gnuabin32 ||
 || <<Anchor(mipsn32el)>>mipsn32el || none|| mips64el-linux-gnuabin32 ||
 || <<Anchor(mipsr6)>>mipsr6 || none || mipsisa32r6-linux-gnu ||
 || <<Anchor(mipsr6el)>>mipsr6el || planning || mipsisa32r6el-linux-gnu ||
 || <<Anchor(mips64r6)>>mips64r6 || none || mipsisa64r6-linux-gnuabi64 ||
 || <<Anchor(mips64r6el)>>mips64r6el || planning || mipsisa64r6el-linux-gnuabi64 ||
 || <<Anchor(mipsn32r6)>>mipsn32r6 || none || mipsisa64r6-linux-gnuabin32 ||
 || <<Anchor(mipsn32r6el)>>mipsn32r6el || none|| mipsisa64r6el-linux-gnuabin32 ||
 || <<Anchor(powerpc)>>powerpc || released || powerpc-linux-gnu ||
 || <<Anchor(powerpcspe)>>powerpcspe || development || powerpc-linux-gnuspe ||
 || <<Anchor(ppc64)>>ppc64 || development || powerpc64-linux-gnu ||
 || <<Anchor(ppc64el)>>ppc64el || released || powerpc64le-linux-gnu ||
 || <<Anchor(riscv64)>>riscv64 || development ||riscv64-linux-gnu ||
 || <<Anchor(s390)>>s390 || EOL || s390-linux-gnu ||
 || <<Anchor(s390x)>>s390x || released || s390x-linux-gnu ||
 || <<Anchor(sh4)>>sh4 || development || sh4-linux-gnu ||
 || <<Anchor(sparc)>>sparc || released || sparc-linux-gnu ||
 || <<Anchor(sparc64)>>sparc64 || development || sparc64-linux-gnu ||
 || <<Anchor(uefi-amd64)>>uefi-amd64<<FootNote([[#UEFI]])>> || cross || x86_64-uefi ||
 || <<Anchor(uefi-arm64)>>uefi-arm64<<FootNote([[#UEFI]])>> || cross || aarch64-uefi ||
 || <<Anchor(uefi-armhf)>>uefi-armhf<<FootNote([[#UEFI]])>> || cross || arm-uefi ||
 || <<Anchor(uefi-i386)>>uefi-i386<<FootNote([[#UEFI]])>> || cross || i386-uefi ||
 || <<Anchor(x32)>>x32 || none || x86_64-linux-gnux32 ||

The status describes if the name is used in a (to be) released version of Debian and/or Ubuntu (release), if it is a new or abandoned port on [[https://www.ports.debian.org/|Debian unofficial ports]] (port), or if it's used as a name for a Debian gcc multilib configuration (biarch).

On Debian systems, the Debian architecture name associated to a triplet can be retrieved with "dpkg-architecture -t<triplet> -qDEB_HOST_ARCH".

<<Anchor(UEFI)>>uefi- debian architecture name have been choosen such as uefi-$(DEB_BUILD_ARCH) give sensible answer. The multiarch name was choosen in order to give directly the gnu triplet by using unknown as vendor (using for instance
```dpkg-architecture -f -A $(subst uefi-,,$(1)) -q DEB_TARGET_ARCH_CPU)-uefi```)

== Supporting interfaces ==

 * dpkg-architecture -qDEB_HOST_MULTIARCH (on dpkg based systems).

 * gcc -print-multiarch (available upstream in GCC 4.9 and newer versions).

 * To avoid divergent embedded implementations of architecture->tuple mappings in every piece of software that wants to make use of these paths, a standard commandline tool that encapsulates this mapping should be provided, similar to the config.guess and config.sub tools that are a standard part of GNU autotools. We recommend a name of lsb_architecture for this tool.

Multiarch Architecture Specifiers (Tuples)

This document describes the new schema for representing architecture ABIs as directory names, using normalized GNU triplets. The process to document the tuples in the Debian Policy and distribution independent standards is tracked in http://bugs.debian.org/664257.

The abandoned proposal can be found at Multiarch/TuplesAbandoned.

This page is part of the larger effort to implement Multiarch library handling on Linux. For more information about Multiarch, see Multiarch, https://wiki.ubuntu.com/MultiarchSpec.

The problem

Multiarch specifies a method of making libraries for multiple, mutually-incompatible architectures installable on a single filesystem in a manner that ensures the same binaries can be used without modification on any system. To accomplish this, we require unique identifiers for each architecture that identifies an incompatible set of libraries that we want to be co-installed. We want these identifiers to be specified in as vendor-neutral a manner as possible, to ensure we retain maximal binary compatibility across Linux distributions.

Why not use GNU triplets?

Earlier proposals for multiarch did use GNU triplets as the components of the library path. Proof-of-concept implementations ran into two distinct cases where GNU triplets could not be used effectively in a cross-distribution manner:

  • On IA-32, the GNU triplet varies according to the precise instruction set being targeted: e.g., i486-linux-gnu, i586-linux-gnu i686-linux-gnu. Such triplets will be inconsistent over time within a single distribution as compiler defaults are changed, let alone between distributions.
  • Historical note: On ARM, the canonical GNU triplet for EABI systems, whether using hard-float or soft-float, was arm-linux-gnueabi, despite the fact that hard-float and soft-float libraries use different calling conventions and can't be intermixed. The advice given by upstream GCC developers was to use the vendor field in the GNU triplet to express this difference1; however, the vendor field is private by design, making this unreliable for cross-distribution use. Work finally succeeded to push the arm-linux-gnueabihf triplet upstream, but there may still be some broken packages around for a while.

Used solution

Use normalized GNU triplets for most tuples, and extend the GNU triplet when it is ambiguous.

  • multiarch name

    syscall ABI

    instruction set

    endian­ness

    word size

    description

    spec documents

    aarch64-linux-gnu

    linux

    ARM64

    little

    64

    aarch64 Linux Platform

    AAPCS64 (ARM IHI 005A)1
    ELF for the ARM 64-bit Architecture2

    aarch64_be-linux-gnu

    linux

    ARM64

    big

    64

    aarch64 Linux Platform

    AAPCS64 (ARM IHI 005A)1
    ELF for the ARM 64-bit Architecture2

    aarch64-linux-gnu_ilp32

    linux

    ARM64

    little

    32

    aarch64 Linux Platform

    aarch64_be-linux-gnu_ilp32

    linux

    ARM64

    big

    32

    aarch64 Linux Platform

    aarch64-uefi

    UEFI

    ARM64

    little

    64

    UEFI AARCH64

    UEFI Spec3

    alpha-linux-gnu

    linux

    Alpha

    little

    64

    glibc, Tru64 calling standard

    Tru64 Calling Standard4

    arc-linux-gnu

    linux

    ARCv2

    little

    32

    glibc Linux hard-float

    (ARC v2 ABI)56

    arm-linux-gnu

    linux

    ARM

    little

    32

    Old ARM ABI

    APCS (ARM DUI 0041 chapter 9)7

    arm-linux-gnueabi

    linux

    ARM

    little

    32

    ARM EABI, soft-float

    AAPCS (ARM IHI 0042D)8
    ARM GNU/Linux ABI Supplement9

    arm-linux-gnueabihf

    linux

    ARM

    little

    32

    ARM EABI, hard-float

    AAPCS (ARM IHI 0042D)8 and
    XXXXX (TBD)

    arm-uefi

    UEFI

    ARM

    little

    32

    UEFI ARMHF

    UEFI Spec3

    armeb-linux-gnueabi

    linux

    ARM

    big

    32

    ARM EABI, soft-float

    AAPCS (ARM IHI 0042D)8
    ARM GNU/Linux ABI Supplement9

    armeb-linux-gnueabihf

    linux

    ARM

    big

    32

    ARM EABI, hard-float

    AAPCS (ARM IHI 0042D)8 and
    XXXXX (TBD)

    hppa-linux-gnu

    linux

    PA-RISC

    big

    32

    PA-RISC Linux 32-bit ELF

    parisc-linux toolchain documents10

    i386-gnu

    Hurd

    IA-32

    little

    32

    Hurd/IA-32

    ia32 functions calls11
    LSB Bug 326812
    OS interface XXXXX undocumented

    i386-linux-gnu

    linux

    IA-32

    little

    32

    LSB IA32

    SCO Developer Specifications13
    Intel386 psABI11
    LSB Core-IA3214
    LSB Bug 326812

    i386-kfreebsd-gnu

    FreeBSD

    IA-32

    little

    32

    glibc kFreeBSD IA-32

    XXXXX undocumented

    i386-uefi

    UEFI

    IA-32

    little

    32

    UEFI IA32

    UEFI Spec3

    ia64-linux-gnu

    linux

    IA-64

    little

    64

    LSB IA64

    Intel Itanium SysV psABI15
    LSB Core-IA6416

    loongarch64-linux-gnu

    linux

    loongarch64

    little

    64

    glibc Linux loongarch64

    XXXXX undocumented

    m68k-linux-gnu

    linux

    MC68000

    big

    32

    m68k SysV ABI

    ISBN: 978-0138776633

    mips-linux-gnu

    linux

    MIPS32r2+FPXX

    big

    32

    MIPS o32 ABI

    MIPS psABI1718

    mipsel-linux-gnu

    linux

    MIPS2(MIPS32r2 soon)+FPXX

    little

    32

    MIPS o32 ABI

    MIPS psABI1718

    mips64-linux-gnuabin32

    linux

    MIPS64r2

    big

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1719

    mips64el-linux-gnuabin32

    linux

    MIPS64r2

    little

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1719

    mips64-linux-gnuabi64

    linux

    MIPS64r2

    big

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1719

    mips64el-linux-gnuabi64

    linux

    MIPS64r2

    little

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1719

    mipsisa32r6-linux-gnu

    linux

    MIPS32r6

    big

    32

    MIPS o32 ABI

    MIPS psABI1718

    mipsisa32r6el-linux-gnu

    linux

    MIPS32r6

    little

    32

    MIPS o32 ABI

    MIPS psABI1718

    mipsisa64r6-linux-gnuabin32

    linux

    MIPS64r6

    big

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1719

    mipsisa64r6el-linux-gnuabin32

    linux

    MIPS64r6

    little

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1719

    mipsisa64r6-linux-gnuabi64

    linux

    MIPS64r6

    big

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1719

    mipsisa64r6el-linux-gnuabi64

    linux

    MIPS64r6

    little

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1719

    powerpc-linux-gnu

    linux

    PowerPC

    big

    32

    LSB PPC32

    PowerPC psABI20
    LSB Core-PPC3221

    powerpc-linux-gnuspe

    linux

    PowerPC

    big

    32

    PowerPC e500 (SPE)

    Power 32-bit ABI Supplement 1.0 Linux22

    powerpc64-linux-gnu

    linux

    PowerPC

    big

    64

    LSB PPC64

    64-bit PowerPC ELF psABI23
    LSB Core-PPC6424

    powerpc64le-linux-gnu

    linux

    PowerPC

    little

    64

    ??

    ??

    riscv64-linux-gnu

    linux

    RISC-V

    little

    64

    RV64G Linux Platform

    RISC-V ELF psABI 25

    s390-linux-gnu

    linux

    System/390

    big

    32

    LSB S390

    S/390 ELF psABI26
    LSB Core-S39027

    s390x-linux-gnu

    linux

    z/Architecture

    big

    64

    LSB S390X

    zSeries ELF psABI28
    LSB Core-S390X29

    sh4-linux-gnu

    linux

    SH-4

    little

    32

    glibc Linux SH-4
    with fpu, double pervading

    SH-4 Generic and Specific ABI30

    sparc-linux-gnu

    linux

    SPARC

    big

    32

    glibc Linux sparc32

    SPARC psABI31

    sparc64-linux-gnu

    linux

    SPARC64

    big

    64

    glibc Linux sparc64

    SPARCv9 psABI32

    x86_64-kfreebsd-gnu

    FreeBSD

    x86_64

    little

    64

    glibc kFreeBSD x86-64

    XXXXX undocumented

    x86_64-linux-gnu

    linux

    x86_64

    little

    64

    LSB AMD64

    AMD64 psABI33
    LSB Core-AMD6434

    x86_64-linux-gnux32

    linux

    x86_64

    little

    32

    glibc Linux x32

    x32-abi documents35

    x86_64-uefi

    UEFI

    x86_64

    little

    64

    UEFI AMD64

    UEFI Spec3

Architectures in Debian:

  • Debian architecture name

    status in Debian

    multiarch name

    alpha

    EOL

    alpha-linux-gnu

    amd64

    released

    x86_64-linux-gnu

    arc

    planning

    arc-linux-gnu

    arm

    EOL

    arm-linux-gnu

    arm64

    released

    aarch64-linux-gnu

    arm64ilp32

    none

    aarch64-linux-gnu_ilp32

    armel

    released

    arm-linux-gnueabi

    armhf

    released

    arm-linux-gnueabihf

    hppa

    EOL

    hppa-linux-gnu

    hurd-i386

    development

    i386-gnu

    i386

    released

    i386-linux-gnu

    ia64

    EOL

    ia64-linux-gnu

    kfreebsd-amd64

    released

    x86_64-kfreebsd-gnu

    kfreebsd-i386

    released

    i386-kfreebsd-gnu

    m68k

    EOL

    m68k-linux-gnu

    mips

    released

    mips-linux-gnu

    mipsel

    released

    mipsel-linux-gnu

    mips64

    none

    mips64-linux-gnuabi64

    mips64el

    development

    mips64el-linux-gnuabi64

    mipsn32

    none

    mips64-linux-gnuabin32

    mipsn32el

    none

    mips64el-linux-gnuabin32

    mipsr6

    none

    mipsisa32r6-linux-gnu

    mipsr6el

    planning

    mipsisa32r6el-linux-gnu

    mips64r6

    none

    mipsisa64r6-linux-gnuabi64

    mips64r6el

    planning

    mipsisa64r6el-linux-gnuabi64

    mipsn32r6

    none

    mipsisa64r6-linux-gnuabin32

    mipsn32r6el

    none

    mipsisa64r6el-linux-gnuabin32

    powerpc

    released

    powerpc-linux-gnu

    powerpcspe

    development

    powerpc-linux-gnuspe

    ppc64

    development

    powerpc64-linux-gnu

    ppc64el

    released

    powerpc64le-linux-gnu

    riscv64

    development

    riscv64-linux-gnu

    s390

    EOL

    s390-linux-gnu

    s390x

    released

    s390x-linux-gnu

    sh4

    development

    sh4-linux-gnu

    sparc

    released

    sparc-linux-gnu

    sparc64

    development

    sparc64-linux-gnu

    uefi-amd6436

    cross

    x86_64-uefi

    uefi-arm6436

    cross

    aarch64-uefi

    uefi-armhf36

    cross

    arm-uefi

    uefi-i38636

    cross

    i386-uefi

    x32

    none

    x86_64-linux-gnux32

The status describes if the name is used in a (to be) released version of Debian and/or Ubuntu (release), if it is a new or abandoned port on Debian unofficial ports (port), or if it's used as a name for a Debian gcc multilib configuration (biarch).

On Debian systems, the Debian architecture name associated to a triplet can be retrieved with "dpkg-architecture -t<triplet> -qDEB_HOST_ARCH".

uefi- debian architecture name have been choosen such as uefi-$(DEB_BUILD_ARCH) give sensible answer. The multiarch name was choosen in order to give directly the gnu triplet by using unknown as vendor (using for instance dpkg-architecture -f -A $(subst uefi-,,$(1)) -q DEB_TARGET_ARCH_CPU)-uefi)

Supporting interfaces

  • dpkg-architecture -qDEB_HOST_MULTIARCH (on dpkg based systems).
  • gcc -print-multiarch (available upstream in GCC 4.9 and newer versions).
  • To avoid divergent embedded implementations of architecture->tuple mappings in every piece of software that wants to make use of these paths, a standard commandline tool that encapsulates this mapping should be provided, similar to the config.guess and config.sub tools that are a standard part of GNU autotools. We recommend a name of lsb_architecture for this tool.

  1. http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf (1 2)

  2. http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf (3 4)

  3. https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf (5 6 7 8)

  4. http://www.openwatcom.org/ftp/devel/docs/alpha%20calling%20standard.pdf (9)

  5. https://github.com/foss-for-synopsys-dwc-arc-processors/arc-ABI-manual/blob/master/ARCv2_ABI.pdf (10)

  6. https://www.synopsys.com/dw/doc.php/ds/cc/programmers-reference-manual-ARC-HS.pdf (11)

  7. http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html (12)

  8. http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf (13 14 15 16)

  9. https://sourcery.mentor.com/GNUToolchain/kbentry39 (17 18)

  10. http://wiki.parisc-linux.org/ToolChain (19)

  11. http://refspecs.linuxbase.org/elf/abi386-4.pdf (20 21)

  12. https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3268 (22 23)

  13. http://www.sco.com/developers/devspecs/ (24)

  14. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA32/LSB-Core-IA32/elf-ia32.html (25)

  15. http://refspecs.linuxbase.org/elf/IA64-SysV-psABI.pdf (26)

  16. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA64/LSB-Core-IA64/elf-ia64.html (27)

  17. ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/ (28 29 30 31 32 33 34 35 36 37 38 39)

  18. https://imgtec.com/mips/architectures/mips32/ (40 41 42 43)

  19. https://imgtec.com/mips/architectures/mips64/ (44 45 46 47 48 49 50 51)

  20. http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf (52)

  21. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC32/LSB-Core-PPC32/elf-ppc32.html (53)

  22. https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0.tgz (54)

  23. http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html (55)

  24. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC64/LSB-Core-PPC64/elf-ppc64.html (56)

  25. https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md (57)

  26. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html (58)

  27. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390/LSB-Core-S390/elf-s390.html (59)

  28. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html (60)

  29. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390X/LSB-Core-S390X/elf-s390x.html (61)

  30. http://sg.renesas.com/support/downloads/download_results/C2003801-C2003900/sh4_000_top_abi_00013.jsp (registration required) (62)

  31. http://www.sparc.com/standards/psABI3rd.pdf (63)

  32. draft http://www.sparc.com/standards/64.psabi.1.35.ps.Z available online, can't find anything more concrete (64)

  33. http://x86-64.org/documentation/abi.pdf (65)

  34. http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-AMD64/LSB-Core-AMD64/elf-amd64.html (66)

  35. https://sites.google.com/site/x32abi/ (67)

  36. #UEFI (68 69 70 71)