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:

Used solution

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

Architectures in Debian:

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

  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. https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html (28)

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

  19. https://imgtec.com/mips/architectures/mips32/ (41 42 43 44)

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

  21. http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf (53)

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

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

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

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

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

  27. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html (59)

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

  29. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html (61)

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

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

  32. http://www.sparc.com/standards/psABI3rd.pdf (64)

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

  34. http://x86-64.org/documentation/abi.pdf (66 67)

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

  36. https://sites.google.com/site/x32abi/ (69)

  37. #UEFI (70 71 72 73)