Table of Contents
- Introduction
- Changes since Arm GNU Toolchain 10.1.Morello-Alp1
- Known Limitations and Issues
- Ask Questions
- Report Bugs
- Host Support
- Included Toolchains
- Released Files
- Source Code
- Installation Instructions
- Verifying the downloaded packages
- Installing on Linux
- Invoking GCC
- Architecture Options
- Available multilibs
Introduction
This is release 10.1.Morello-Alp2 of Arm GNU Toolchain for Morello, to enable users to experiment with Morello and provide feedback. This is not a production release of the toolchain. The quality level is Alpha.
For more information on the development status of Morello support, please see the current status of Morello support and Arm Morello Program.
Arm GNU Toolchain releases package pre-built binaries of GNU Toolchain for various Arm targets. These toolchains come with no warranty. For more information, please visit the arm Developer page.
This release includes bare-metal and Linux toolchains for various hosts, as described in the Host Support section.
Changes since Arm GNU Toolchain 10.1.Morello-Alp1
- Includes toolchain with aarch64-none-linux-gnu target triplet (includes glibc support).
- Includes support for C++ code.
- Includes support for Morello and CHERI builtins.
- Includes various bounds narrowing improvements.
- Includes various bug fixes.
Known Limitations and Issues
- Sanitizers are disabled for purecap and lp64 multilibs.
- Transactional memory is not supported.
- OpenMP and OpenACC are disabled for purecap.
- __has_feature is not supported. For example: __has_feature(capabilities) is not supported.
- Various performance related issues.
- Hybrid support is enabled for the Linux kernel. However, there is no support for C++, __cheri_fromcap, __cheri_tocap, hybrid "polymorphic &" and "qualified &".
- Profiling is not supported (flag -p, -pg, gprof, sprof, LD_PROFILE).
- GCC nested functions are not supported.
- C++ stdatomic.h atomic_is_lock_free is not implemented.
- LD_AUDIT has very limited support (no la_symbind, PLT hooks).
- VDSO is not supported (clock_gettime uses a syscall).
- static-pie is not supported.
- POSIX message queue async notify fails (mq_notify with SIGEV_THREAD, pointers passed via an fd).
- Process shared robust mutex does not work (pointers in shared memory).
- Purecap pldd only supports purecap ABI processes (not lp64).
- malloc bounds narrowing has large overhead (locks and hash table lookup).
- malloc bounds narrowing can break code expecting page granularity protection. As a workaround, Use the GLIBC_TUNABLES=glibc.mem.cap_narrowing=0 environment variable.
- String functions are not optimized.
- Executable stack is not supported.
Ask Questions
For any questions, and further discussions, you can subscribe to the gnu-morello@op-lists.linaro.org mailing list.
Report Bugs
Please report any bugs via the Linaro Bugzilla under "GNU Binary Toolchain" product.
If you have found a bug in a source project used to build the Arm GNU Toolchain, and the source code is from an Arm specific (vendor) branch, then you must use the respective project in Linaro Bugzilla for reporting the bug:
Host Support
Host | Host Identifier (package name) |
Toolchain Target |
---|---|---|
Linux on AArch64 These toolchains are built on and for Ubuntu 18.04 on AArch64, and will likely also be useable on OS versions: - later than Ubuntu 18.04 - RHEL8 |
aarch64 | AArch64 Bare-metal AArch64 Linux |
Linux on x86_64 These toolchains are built on and for RHEL7 on x86_64, and will likely also be useable on OS versions: - RHEL8 - Ubuntu 18.04 or later |
x86_64 | AArch64 Bare-metal AArch64 Linux |
Included Toolchains
The packages of the released GNU toolchain binaries have the following naming convention:
arm-gnu-toolchain-<Release Version>-<Host>-<Target Triple>.tar.xz
- In the following table,
<Target Triple>
is listed in parentheses in the second column as part of target description. - The binaries are provided as tarball files.
Toolchain Package Name | Host OS / Target Description |
---|---|
arm-gnu-toolchain-10.1.morello-alp2-x86_64-aarch64-none-elf.tar.xz | Host: x86_64 Linux Target: AArch64 bare-metal (aarch64-none-elf) |
arm-gnu-toolchain-10.1.morello-alp2-x86_64-aarch64-none-linux-gnu.tar.xz | Host: x86_64 Linux Target: AArch64 GNU/Linux (aarch64-none-linux-gnu) |
arm-gnu-toolchain-10.1.morello-alp2-aarch64-aarch64-none-elf.tar.xz | Host: AArch64 Linux Target: AArch64 bare-metal (aarch64-none-elf) |
arm-gnu-toolchain-10.1.morello-alp2-aarch64-aarch64-none-linux-gnu.tar.xz | Host: AArch64 Linux Target: AArch64 GNU/Linux (aarch64-none-linux-gnu) |
Released Files
File Name | Description |
---|---|
arm-gnu-toolchain-*.tar.xz |
Toolchain binaries |
arm-gnu-toolchain-*-src-snapshot-*.tar.xz |
Toolchain sources |
arm-gnu-toolchain-*-src-manifest.txt |
List of remote repositories and the revisions of the source code used for building the toolchain |
*.asc |
MD5 checksum files for sources and binaries |
*.sha256asc |
SHA256 checksum files for sources and binaries |
Source Code
The sources for this release are provided in the source tar ball, arm-gnu-toolchain-src-snapshot-10.1.morello-alp2.tar.xz. The arm-gnu-toolchain-src-snapshot-10.1.Morello-Alp2-manifest.txt file provides the versions of the source components.
Project | Version | Repository/Branch/Revision |
---|---|---|
GCC | based on 10.1 | git://gcc.gnu.org/git/gcc.git branch: vendors/ARM/heads/morello revision: 87492b28b1c35088d7452c3f6088f5985debd473 For information on vendor branches, see https://gcc.gnu.org/gitwrite.html#vendor |
glibc | based on 2.36 | git://sourceware.org/git/glibc.git branch: arm/morello/main revision: 187b3dd4263cccc0087df3c4311ded95d866d116 |
newlib |
https://git.morello-project.org/morello/newlib.git branch: morello/master revision: 67fd37136e44556cd0395a3b8ccdad81766e5622 |
|
binutils | based on 2.35 | git://sourceware.org/git/binutils-gdb.git branch: users/ARM/morello-binutils-gdb-master revision: 7da34f425010957493342b86e97cff4bcba75212 |
GDB | based on 11 | git://sourceware.org/git/binutils-gdb.git branch: users/ARM/morello-binutils-gdb-master revision: 7da34f425010957493342b86e97cff4bcba75212 |
libexpat | based on 2.2.5 | Sources are provided in release source tar ball |
Linux Kernel |
https://git.morello-project.org/morello/kernel/linux.git branch: morello/master revision: 87d06928f90fe910311210a0149d03f3420f593c |
|
libgmp | based on 6.2 | Sources are provided in release source tar ball |
libisl | based on 0.18 | Sources are provided in release source tar ball |
libmpfr | based on 3.1.6 | Sources are provided in release source tar ball |
libmpc | based on 1.0.3 | Sources are provided in release source tar ball |
Installation Instructions
Verifying the downloaded packages
You may check using MD5 checksum as follows:
$ md5sum --check arm-gnu-toolchain-10.1.morello-alp2-x86_64-aarch64-none-elf.tar.xz.asc
arm-gnu-toolchain-10.1.morello-alp2-x86_64-aarch64-none-elf.tar.xz: OK
Similarly for using SHA256 checksum, use the following instructions:
$ sha256sum --check arm-gnu-toolchain-10.1.morello-alp2-x86_64-aarch64-none-elf.tar.xz.sha256asc
arm-gnu-toolchain-10.1.morello-alp2-x86_64-aarch64-none-elf.tar.xz: OK
Installing on Linux
To install a toolchain on Linux, unpack the tarball to the preferred installation directory using the following instruction:
On x86_64:
$ tar xJf arm-gnu-toolchain-10.1.morello-alp2-x86_64-<TRIPLE>.tar.xz -C /path/to/install/dir
On aarch64:
$ tar xJf arm-gnu-toolchain-10.1.morello-alp2-aarch64-<TRIPLE>.tar.xz -C /path/to/install/dir
Invoking GCC
On Linux, either invoke with the complete path like this:
$ <install-dir>/arm-gnu-toolchain-10.1.morello-alp2-<HOST_ARCH>-aarch64-none-elf/bin/aarch64-none-elf-gcc
where, depending on the host, <HOST_ARCH>
is one of:
x86_64
aarch64
Or set the path and then invoke the toolchain like this:
$ export PATH=$PATH:<install-dir>/arm-gnu-toolchain-10.1.morello-alp2-<HOST_ARCH>-aarch64-none-elf/bin
$ aarch64-none-elf-gcc --version
Architecture Options
This toolchain is built for supporting Arm Morello.
This section describes how to invoke GCC/G++ with the correct command-line options.
For pure capability (purecap) compilation:
$ aarch64-none-elf-gcc -march=morello+c64 -mabi=purecap
$ aarch64-none-linux-gnu-gcc -march=morello+c64 -mabi=purecap
For hybrid capability compilation:
$ aarch64-none-elf-gcc -march=morello
$ aarch64-none-linux-gnu-gcc -march=morello
Note:
- Hybrid capability is not supported for linux user space applications.
- The default value for
-mabi
islp64
. - You cannot link
lp64
objects and libraries withpurecap
objects and libraries.
Available multilibs
Arm GNU Toolchain 10.1.morello-alp2 supports a set of multilibs in each toolchain.
To list all multilibs supported by any of the toolchain, use --print-multi-lib
option. For example:
$ aarch64-none-elf-gcc --print-multi-lib
To check which multilib is selected by the aarch64-none-elf toolchain based on the -march
and -mabi
command line options:
$ aarch64-none-elf-gcc -march=<ARCH> -mabi=<ABI> --print-multi-dir