Differences between revisions 42 and 43
Revision 42 as of 2012-05-10 23:22:00
Size: 11307
Editor: ?JonathanNieder
Comment: footnote markup fix
Revision 43 as of 2012-05-10 23:27:57
Size: 11307
Editor: ?JonathanNieder
Comment: aarch64 not in ftp.debian.org or debian-ports yet
Deletions are marked like this. Additions are marked like this.
Line 24: Line 24:
 || aarch64‑linux‑gnu || linux || ARMv8 || little || 64 || upcoming || arm64 || aarch64 Linux Platform ABI || ELF for the ARM 64-bit Architecture<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf)>> ||  || aarch64‑linux‑gnu || linux || ARMv8 || little || 64 || none || arm64 || aarch64 Linux Platform ABI || ELF for the ARM 64-bit Architecture<<FootNote(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf)>> ||

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

    wordsize

    status in Debian

    Debian architecture name

    description

    spec document(s)

    aarch64‑linux‑gnu

    linux

    ARMv8

    little

    64

    none

    arm64

    aarch64 Linux Platform ABI

    ELF for the ARM 64-bit Architecture1

    alpha‑linux‑gnu

    linux

    Alpha

    little

    64

    EOL

    alpha

    glibc, Tru64 calling standard

    Tru64 UNIX Calling Standard for Alpha Systems2

    arm‑linux‑gnu

    linux

    ARM

    little

    32

    EOL

    arm

    Old ARM ABI (APCS). HW FPU expected with kernel emulation as fallback. DO NOT USE

    ARM Procedure Call Standard (ARM DUI 0041 chapter 9)3

    arm‑linux‑gnueabi

    linux

    ARMv4t+

    little

    32

    released

    armel

    New ARM EABI (AAPCS), soft-float

    Procedure Call Standard for the ARM Architecture (ARM IHI 0042D)4 and ARM GNU/Linux ABI Supplement5

    arm‑linux‑gnueabihf

    linux

    ARMv7+

    little

    32

    development

    armhf

    New ARM EABI (AAPCS), hard-float

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

    hppa‑linux‑gnu

    linux

    PA-RISC

    big

    32

    EOL

    hppa

    PA-RISC Linux 32-bit ELF

    parisc-linux toolchain documents6

    i386‑gnu

    Hurd

    IA-32

    little

    32

    development

    hurd-i386

    Hurd/ix86, 16-byte aligned stack

    ia32 functions calls7, OS interface XXXXX undocumented

    i386‑linux‑gnu

    linux

    IA-32

    little

    32

    released

    i386

    LSB IA32, 16-byte aligned stack

    SCO Developer Specifications8, SysV ABI Intel386 Architecture Processor Supplement7, LSB Core-IA329

    ia64‑linux‑gnu

    linux

    IA-64

    little

    64

    released

    ia64

    LSB IA64

    Intel Itanium SysV psABI10, LSB Core-IA6411

    i386‑kfreebsd‑gnu

    FreeBSD

    IA-32

    little

    32

    released

    kfreebsd-i386

    Debian_GNU/kFreeBSD

    XXXXX none I could find

    m68k‑linux‑gnu

    linux

    MC68000

    big

    32

    EOL

    m68k

    m68k SysV ABI

    ISBN: 978-0138776633

    mips‑linux‑gnu

    linux

    MIPS

    big

    32

    released

    mips

    MIPS o32 ABI

    SysV ABI MIPS Processor Supplement12

    mipsel‑linux‑gnu

    linux

    MIPS

    little

    32

    released

    mipsel

    MIPS o32 ABI

    SysV ABI MIPS Processor Supplement12

    mips64‑linux‑gnuabin32

    linux

    MIPS64

    big

    32

    none

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook13

    mips64el‑linux‑gnuabin32

    linux

    MIPS64

    little

    32

    none

    MIPS n32 ABI

    MIPSpro N32 ABI Handbook13

    mips64‑linux‑gnuabi64

    linux

    MIPS64

    big

    64

    none

    MIPS 64-bit ABI

    MIPSpro N32 ABI Handbook13

    mips64el‑linux‑gnuabi64

    linux

    MIPS64

    little

    64

    none

    MIPS 64-bit ABI

    MIPSpro N32 ABI Handbook13

    powerpc‑linux‑gnu

    linux

    PowerPC

    big

    32

    released

    powerpc

    LSB PPC32

    SysV ABI PowerPC Processor Supplement14, LSB Core-PPC3215

    powerpc‑linux‑gnuspe

    linux

    PowerPC

    big

    32

    development

    powerpcspe

    SYSV soft-float ABI, uses e500v2 SPE FPU (limited hw options) PowerPCSPEPort

    Power 32-bit ABI Supplement 1.0 Linux16

    ppc64‑linux‑gnu

    linux

    PowerPC

    big

    64

    development

    ppc64

    LSB PPC64

    64-bit PowerPC ELF ABI Supplement17, LSB Core-PPC6418

    s390‑linux‑gnu

    linux

    System/390

    big

    32

    released

    s390

    LSB S390

    S/390 ELF ABI Supplement19, LSB Core-S39020

    s390x‑linux‑gnu

    linux

    z/Architecture

    big

    64

    development

    s390x

    LSB S390X

    zSeries ELF ABI Supplement21, LSB Core-S390X22

    sparc‑linux‑gnu

    linux

    SPARC

    big

    32

    released

    sparc

    glibc Linux sparc32

    SysV ABI SPARC Processor Supplement23

    sparc64‑linux‑gnu

    linux

    SPARCv9+

    big

    64

    development

    sparc64

    glibc, Linux sparc64

    SysV ABI SPARCv9 Processor Supplement (draft24 available online, can't find anything more concrete)

    x86_64‑kfreebsd‑gnu

    FreeBSD

    x86_64

    little

    64

    released

    kfreebsd-amd64

    Debian_GNU/kFreeBSD

    XXXXX none I could find

    x86_64‑linux‑gnu

    linux

    x86_64

    little

    64

    released

    amd64

    LSB AMD64

    SysV ABI AMD64 Architecture Processor Supplement25, LSB Core-AMD6426

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 Ports (port), or if it's used as a name for a Debian gcc multilib configuration (biarch).

Supporting interfaces

  • dpkg-architecture -qDEB_HOST_MULTIARCH (on dpkg based systems).
  • gcc -print-multiarch (proposed patch; currently only available in Debian wheezy (unreleased), and in Ubuntu 11.10 (oneiric) or newer.
  • 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.ihi0056a/IHI0056A_aaelf64.pdf (1)

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

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

  4. http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf (4 5)

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

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

  7. http://refspecs.linuxbase.org/elf/abi386-4.pdf (8 9)

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

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

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

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

  12. http://refspecs.linuxbase.org/elf/mipsabi.pdf (14 15)

  13. http://techpubs.sgi.com/library/manuals/2000/007-2816-005/pdf/007-2816-005.pdf (16 17 18 19)

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

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

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

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

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

  19. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html (25)

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

  21. http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html (27)

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

  23. http://www.sparc.com/standards/psABI3rd.pdf (29)

  24. http://www.sparc.com/standards/64.psabi.1.35.ps.Z (30)

  25. http://x86-64.org/documentation/abi.pdf (31)

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