13571
Comment:
|
13717
Correct background colour of table headers
|
Deletions are marked like this. | Additions are marked like this. |
Line 23: | Line 23: |
||<rowbgcolor="maroon" rowstyle="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­ness ||<style="text-align: center">word size ||<style="text-align: center">description ||<style="text-align: center">spec documents || | ||<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­ness ||<style="text-align: center">word size ||<style="text-align: center">description ||<style="text-align: center">spec documents || |
Line 58: | Line 58: |
||<rowbgcolor="maroon" rowstyle="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 || || alpha || EOL || alpha-linux-gnu || || amd64 || released || x86_64-linux-gnu || || arm || EOL || arm‑linux‑gnu || || arm64 || none || aarch64‑linux‑gnu || || 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 || released || 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 || || powerpc || released || powerpc-linux-gnu || || powerpcspe || development || powerpc-linux-gnuspe || || ppc64 || development || ppc64-linux-gnu || || s390 || released || 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 || |
||<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 || || alpha || EOL || alpha-linux-gnu || || amd64 || released || x86_64-linux-gnu || || arm || EOL || arm‑linux‑gnu || || arm64 || development || aarch64‑linux‑gnu || || 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 || || mips64el || development || mips64el-linux-gnuabi64 || || powerpc || released || powerpc-linux-gnu || || powerpcspe || development || powerpc-linux-gnuspe || || ppc64 || development || ppc64-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 || |
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
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 Architecture2aarch64_be-linux-gnu
linux
ARM64
big
64
aarch64 Linux Platform
AAPCS64 (ARM IHI 005A)1
ELF for the ARM 64-bit Architecture2alpha-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
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
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 undocumentedi386-linux-gnu
linux
IA-32
little
32
LSB IA32
SCO Developer Specifications10
Intel386 psABI8
LSB Core-IA3211
LSB Bug 32689ia64-linux-gnu
linux
IA-64
little
64
LSB IA64
i386-kfreebsd-gnu
FreeBSD
IA-32
little
32
XXXXX undocumented
m68k-linux-gnu
linux
MC68000
big
32
m68k SysV ABI
ISBN: 978-0138776633
mips-linux-gnu
linux
MIPS
big
32
MIPS o32 ABI
MIPS psABI14
mipsel-linux-gnu
linux
MIPS
little
32
MIPS o32 ABI
MIPS psABI14
mips64-linux-gnuabin32
linux
MIPS64
big
32
MIPS n32 ABI
MIPSpro N32 ABI Handbook15
mips64el-linux-gnuabin32
linux
MIPS64
little
32
MIPS n32 ABI
MIPSpro N32 ABI Handbook15
mips64-linux-gnuabi64
linux
MIPS64
big
64
MIPS 64-bit ABI
MIPSpro N32 ABI Handbook15
mips64el-linux-gnuabi64
linux
MIPS64
little
64
MIPS 64-bit ABI
MIPSpro N32 ABI Handbook15
powerpc-linux-gnu
linux
PowerPC
big
32
LSB PPC32
powerpc-linux-gnuspe
linux
PowerPC
big
32
Power 32-bit ABI Supplement 1.0 Linux18
ppc64-linux-gnu
linux
PowerPC
big
64
LSB PPC64
s390-linux-gnu
linux
System/390
big
32
LSB S390
s390x-linux-gnu
linux
z/Architecture
big
64
LSB S390X
sh4-linux-gnu
linux
SH-4
little
32
glibc Linux SH-4
with fpu, double pervadingSH-4 Generic and Specific ABI25
sparc-linux-gnu
linux
SPARC
big
32
glibc Linux sparc32
SPARC psABI26
sparc64-linux-gnu
linux
SPARC64
big
64
glibc Linux sparc64
SPARCv9 psABI27
x86_64-kfreebsd-gnu
FreeBSD
x86_64
little
64
XXXXX undocumented
x86_64-linux-gnu
linux
x86_64
little
64
LSB AMD64
x86_64-linux-gnux32
linux
x86_64
little
32
glibc Linux x32
x32-abi documents30
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
development
aarch64‑linux‑gnu
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
mips64el
development
mips64el-linux-gnuabi64
powerpc
released
powerpc-linux-gnu
powerpcspe
development
powerpc-linux-gnuspe
ppc64
development
ppc64-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 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 (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.ihi0055a/IHI0055A_aapcs64.pdf (1 2)
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056a/IHI0056A_aaelf64.pdf (3 4)
http://www.openwatcom.org/ftp/devel/docs/alpha%20calling%20standard.pdf (5)
http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html (6)
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf (7 8 9 10)
https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3268 (16 17)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA32/LSB-Core-IA32/elf-ia32.html (19)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA64/LSB-Core-IA64/elf-ia64.html (21)
http://techpubs.sgi.com/library/manuals/2000/007-2816-005/pdf/007-2816-005.pdf (24 25 26 27)
http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf (28)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC32/LSB-Core-PPC32/elf-ppc32.html (29)
https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0.tgz (30)
http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html (31)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC64/LSB-Core-PPC64/elf-ppc64.html (32)
http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_s390.html (33)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390/LSB-Core-S390/elf-s390.html (34)
http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html (35)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390X/LSB-Core-S390X/elf-s390x.html (36)
http://sg.renesas.com/support/downloads/download_results/C2003801-C2003900/sh4_000_top_abi_00013.jsp (registration required) (37)
draft http://www.sparc.com/standards/64.psabi.1.35.ps.Z available online, can't find anything more concrete (39)
http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-AMD64/LSB-Core-AMD64/elf-amd64.html (41)