This port is arm64 with a 32-bit ABI instead of a 64bit ABI. It is exactly equivalent to x32 on x86. The instruction set is 64-bit armv8, but not using the default LP64 ABI (64-bit longs and pointers) but the ILP32 ABI (ints, longs and pointers are all 32bit, same as they are on armhf/armel).

It gives exactly the same functionality as existing 32-bit ARM, but using the v8 instruction set. This is significant on arm cores that _only_ support v8, such as the Cavium ThunderX, where you also have software that is not 64-bit-safe.

It is fairly experimental at the moment (2016/2017) and whilst there is some upstream toolchain support, kernel and glibc support have not yet qbeen upstreamed ( July 2017) and may never be - there is some debate about whether the kernel people wish to maintain it.

Documentation

Linaro maintains a wiki page at https://wiki.linaro.org/Platform/arm64-ilp32

Status

Linaro is doing bootstrap work so that it is possible to build this in Debian. It is unlikely to become a Debian port unless it achieves sufficient interest and maturity to be maintainable. This may happen if enough 64-bit-only cores are produced, whilst interest in 32-bit-only software remains.

packages (stable/stretch/9) are available here: http://people.linaro.org/~wookey/ilp32

There is a working cross-toolchain there, for both amd64 and arm64, plus a set of cross-built packages. The idea is to get to the point where a debootstrappable image exists.

The rebootstrap branch containing all the patches lives here: https://anonscm.debian.org/cgit/users/wookey/rebootstrap.git/log/?h=ilp32

Debian differences

The debian port is a 'proper' multiarchable port for this ABI. Most other efforts so far have been to build an aarch64/arm64 toolchain which can build both LP64 and ILP32 ABI binaries, and treat everything as multilib. ?OpenSuse did an OBS build of a pile of packages to produce a set of arm64ilp32 binaries in 2016.

Patches/BUGs

dpkg

824742

binutils

861833

gcc-6

874583

glibc

?DebianBug:

linux

874536

libatomic-ops

867241

openssl

867240

libgpg-error

869605

gmp

869691

nspr

871741

libgc

872392

findutils

nobble getrlimit test

gnutls28

872454

systemd

set rim_t to UQUAD, not ULONGWORD, in glibc

kernel

Here's how to build an arm64ilp32 kernel