11307
Comment: footnote markup fix
|
11307
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.
Contents
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
endianness
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
i386‑kfreebsd‑gnu
FreeBSD
IA-32
little
32
released
kfreebsd-i386
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
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
s390‑linux‑gnu
linux
System/390
big
32
released
s390
LSB S390
s390x‑linux‑gnu
linux
z/Architecture
big
64
development
s390x
LSB S390X
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
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.
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf (1)
http://www.openwatcom.org/ftp/devel/docs/alpha%20calling%20standard.pdf (2)
http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html (3)
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf (4 5)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA32/LSB-Core-IA32/elf-ia32.html (11)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA64/LSB-Core-IA64/elf-ia64.html (13)
http://techpubs.sgi.com/library/manuals/2000/007-2816-005/pdf/007-2816-005.pdf (16 17 18 19)
http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf (20)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC32/LSB-Core-PPC32/elf-ppc32.html (21)
https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0.tgz (22)
http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html (23)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC64/LSB-Core-PPC64/elf-ppc64.html (24)
http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html (25)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390/LSB-Core-S390/elf-s390.html (26)
http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html (27)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390X/LSB-Core-S390X/elf-s390x.html (28)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-AMD64/LSB-Core-AMD64/elf-amd64.html (32)