Differences between revisions 1 and 75 (spanning 74 versions)
Revision 1 as of 2011-11-17 11:01:19
Size: 2263
Editor: ?MatthiasKlose
Comment:
Revision 75 as of 2020-06-16 02:18:09
Size: 18652
Editor: PaulWise
Comment: add anchors
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(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(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(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(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(i386-kfreebsd-gnu)>>i386-kfreebsd-gnu || FreeBSD || IA-32 || little || 32 || [[Debian_GNU/kFreeBSD|glibc kFreeBSD IA-32]] || '''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/)>> ||

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(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(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".

== 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

    alpha-linux-gnu

    linux

    Alpha

    little

    64

    glibc, Tru64 calling standard

    Tru64 Calling Standard3

    arm-linux-gnu

    linux

    ARM

    little

    32

    Old ARM ABI

    APCS (ARM DUI 0041 chapter 9)4

    arm-linux-gnueabi

    linux

    ARM

    little

    32

    ARM EABI, soft-float

    AAPCS (ARM IHI 0042D)5
    ARM GNU/Linux ABI Supplement6

    arm-linux-gnueabihf

    linux

    ARM

    little

    32

    ARM EABI, hard-float

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

    armeb-linux-gnueabi

    linux

    ARM

    big

    32

    ARM EABI, soft-float

    AAPCS (ARM IHI 0042D)5
    ARM GNU/Linux ABI Supplement6

    armeb-linux-gnueabihf

    linux

    ARM

    big

    32

    ARM EABI, hard-float

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

    hppa-linux-gnu

    linux

    PA-RISC

    big

    32

    PA-RISC Linux 32-bit ELF

    parisc-linux toolchain documents7

    i386-gnu

    Hurd

    IA-32

    little

    32

    Hurd/IA-32

    ia32 functions calls8
    LSB Bug 32689
    OS interface XXXXX undocumented

    i386-linux-gnu

    linux

    IA-32

    little

    32

    LSB IA32

    SCO Developer Specifications10
    Intel386 psABI8
    LSB Core-IA3211
    LSB Bug 32689

    ia64-linux-gnu

    linux

    IA-64

    little

    64

    LSB IA64

    Intel Itanium SysV psABI12
    LSB Core-IA6413

    i386-kfreebsd-gnu

    FreeBSD

    IA-32

    little

    32

    glibc kFreeBSD IA-32

    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 psABI1415

    mipsel-linux-gnu

    linux

    MIPS2(MIPS32r2 soon)+FPXX

    little

    32

    MIPS o32 ABI

    MIPS psABI1415

    mips64-linux-gnuabin32

    linux

    MIPS64r2

    big

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1416

    mips64el-linux-gnuabin32

    linux

    MIPS64r2

    little

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1416

    mips64-linux-gnuabi64

    linux

    MIPS64r2

    big

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1416

    mips64el-linux-gnuabi64

    linux

    MIPS64r2

    little

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1416

    mipsisa32r6-linux-gnu

    linux

    MIPS32r6

    big

    32

    MIPS o32 ABI

    MIPS psABI1415

    mipsisa32r6el-linux-gnu

    linux

    MIPS32r6

    little

    32

    MIPS o32 ABI

    MIPS psABI1415

    mipsisa64r6-linux-gnuabin32

    linux

    MIPS64r6

    big

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1416

    mipsisa64r6el-linux-gnuabin32

    linux

    MIPS64r6

    little

    32

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook1416

    mipsisa64r6-linux-gnuabi64

    linux

    MIPS64r6

    big

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1416

    mipsisa64r6el-linux-gnuabi64

    linux

    MIPS64r6

    little

    64

    MIPS 64-bit ABI

    MIPSpro N64 ABI Handbook1416

    powerpc-linux-gnu

    linux

    PowerPC

    big

    32

    LSB PPC32

    PowerPC psABI17
    LSB Core-PPC3218

    powerpc-linux-gnuspe

    linux

    PowerPC

    big

    32

    PowerPC e500 (SPE)

    Power 32-bit ABI Supplement 1.0 Linux19

    powerpc64-linux-gnu

    linux

    PowerPC

    big

    64

    LSB PPC64

    64-bit PowerPC ELF psABI20
    LSB Core-PPC6421

    powerpc64le-linux-gnu

    linux

    PowerPC

    little

    64

    ??

    ??

    riscv64-linux-gnu

    linux

    RISC-V

    little

    64

    RV64G Linux Platform

    RISC-V ELF psABI 22

    s390-linux-gnu

    linux

    System/390

    big

    32

    LSB S390

    S/390 ELF psABI23
    LSB Core-S39024

    s390x-linux-gnu

    linux

    z/Architecture

    big

    64

    LSB S390X

    zSeries ELF psABI25
    LSB Core-S390X26

    sh4-linux-gnu

    linux

    SH-4

    little

    32

    glibc Linux SH-4
    with fpu, double pervading

    SH-4 Generic and Specific ABI27

    sparc-linux-gnu

    linux

    SPARC

    big

    32

    glibc Linux sparc32

    SPARC psABI28

    sparc64-linux-gnu

    linux

    SPARC64

    big

    64

    glibc Linux sparc64

    SPARCv9 psABI29

    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 psABI30
    LSB Core-AMD6431

    x86_64-linux-gnux32

    linux

    x86_64

    little

    32

    glibc Linux x32

    x32-abi documents32

Architectures in Debian:

  • Debian architecture name

    status in Debian

    multiarch name

    alpha

    EOL

    alpha-linux-gnu

    amd64

    released

    x86_64-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

    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".

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. http://www.openwatcom.org/ftp/devel/docs/alpha%20calling%20standard.pdf (5)

  4. http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html (6)

  5. http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf (7 8 9 10)

  6. https://sourcery.mentor.com/GNUToolchain/kbentry39 (11 12)

  7. http://wiki.parisc-linux.org/ToolChain (13)

  8. http://refspecs.linuxbase.org/elf/abi386-4.pdf (14 15)

  9. https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3268 (16 17)

  10. http://www.sco.com/developers/devspecs/ (18)

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

  12. http://refspecs.linuxbase.org/elf/IA64-SysV-psABI.pdf (20)

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

  14. ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/ (22 23 24 25 26 27 28 29 30 31 32 33)

  15. https://imgtec.com/mips/architectures/mips32/ (34 35 36 37)

  16. https://imgtec.com/mips/architectures/mips64/ (38 39 40 41 42 43 44 45)

  17. http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf (46)

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

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

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

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

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

  23. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html (52)

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

  25. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html (54)

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

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

  28. http://www.sparc.com/standards/psABI3rd.pdf (57)

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

  30. http://x86-64.org/documentation/abi.pdf (59)

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

  32. https://sites.google.com/site/x32abi/ (61)