Arm Compiler 6 Downloads

This is the right place to find and download recent feature releases of the latest and most efficient Arm C/C++ compilation toolchain, Arm Compiler 6.

Arm Compiler 6 can be used as a standalone tool (command line) or integrated into Arm Development Studio (installation instructions) or Keil MDK tool (Windows 32-bit variant only: installation instructions) suites, depending on your license. 

Haven’t got an Arm Compiler license?

Evaluate Arm Compiler in Development Studio
Buy Development Studio Buy Keil MDK

For other versions and legacy releases, visit Arm Compiler 5 Downloads and legacy compiler releases.

For license server management software visit the FlexNet Publisher downloads page.

 

Downloads

Version 6.4

Released: March 01, 2016

Windows 64-bit
File: DS500-BN-00024-r5p0-05rel0.zip (90.28 MB)
Windows 32-bit
File: DS500-BN-00025-r5p0-05rel0.zip (84.14 MB)
Linux 64-bit
File: DS500-BN-00026-r5p0-05rel0.tgz (135.22 MB)

Release Note for Arm Compiler 6 Downloads 6.4

ARM Logo

Release notes for ARM Compiler 6.4

1. Introduction

ARM Compiler 6.4 adds:

  • Full support for the ARMv8-R and ARMv7-R architecture profiles.
  • Support for Cortex-A32 and Cortex-R8.
  • Support for execute-only memory in v7-M and v8-M.

The compiler also includes a number of optimizations that result in better performance of the generated code over the previous release.

ARM Compiler 6.4 is intended for use:

  • In conjunction with DS-5 Professional Edition or DS-5 Ultimate Edition to build and debug executable code for the supported architectures.
  • As a standalone toolchain installation.

A suitable license from one of these products must be available. Contact your sales representative or visit https://developer.arm.com/products/buy-arm-products to enquire about a license.

If you are using a floating license, your license server must be running armlmd and lmgrd version 11.12.1.0 or later. In November 2015, Flexera published notification of security vulnerabilities that were discovered in the lmgrd and vendor daemon components of FlexNet Publisher. Flexera have no reason to believe that the vulnerabilities have been exploited but have nevertheless provided a security update in FlexNet Publisher version 11.13.1.2. ARM recommends that you always use the latest version of the license server software that is available from https://developer.arm.com/products/software-development-tools/license-management/downloads.

1.1 ARM Compiler 6 Configuration

ARM Compiler 6 is the successor to ARM Compiler 5 and includes the components listed below. See the Migration and Compatibility Guide in the product documentation for more information on migrating projects from previous versions.

  • armclang
    • armclang is the successor to armcc and is based on LLVM technology.
  • armlink, armasm, fromelf, armar
    • armlink, armasm, fromelf, and armar have been extended to support ARMv8 and behave similarly to ARM Compiler 5.
  • ARM C and C++ libraries for embedded systems
    • The standard ARM Compiler embedded libraries have been extended to support ARMv8 and behave similarly to those found in ARM Compiler 5, although they might not be fully feature complete.
    • ARM Compiler 6 includes the libc++ library as the C++ Standard Template Library.

Note regarding assemblers:

  • ARM Compiler 6 adopts the LLVM integrated assembler as default because it aligns more closely with GNU assembler syntax, improving portability between GNU and ARM Compiler toolchains. The LLVM integrated assembler is called by default by armclang. A side effect is that ARM Compiler 6 will not compile C/C++ source files which contain legacy armcc inline or embedded assembler.
  • Although armasm is not called by default, it is included in ARM Compiler 6 for assembling assembler files written in legacy armasm syntax.

1.2 What's Supported in ARM Compiler 6.4?

Architecture and Processors Support Level
ARMv8.2-A and derived processors Alpha product feature - will be fully supported in a future release.
ARMv8.1-A, ARMv8-A and ARMv7-A and derived processors Product feature.
ARMv8-R, ARMv7-R and derived processors Product feature.
ARMv8-M, ARMv7-M, ARMv6-M and derived processors Product feature.
ARM Architectures earlier than ARMv6-M Unsupported. Please use ARM Compiler 5.
Non ARM architectures Unsupported.
Support Level Description
Product features Production quality. Highest support priority.
Beta product features Implementation complete, but not thoroughly tested. User experimentation and feedback is welcomed.
Alpha product features Implementation is not complete and not thoroughly tested. User experimentation and feedback is welcomed.
Community features Additional features that are available in the open-source technology ARM Compiler 6 is built on. ARM makes no claims about the quality level or the degree of functionality of these features. User experimentation and feedback is welcomed.
Unsupported features Features that are either not present in the toolchain or have been deprecated. These features are completely untested. Use entirely at your own risk.

For more information on the supported features and level of support for features, see the product documentation.

2. Installation Instructions

If you received ARM Compiler 6.4 as part of a toolkit, for example DS-5, the toolkit installer takes care of the installation process. Please refer to the installation instructions for the toolkit in such cases.

For all other cases, you must select an appropriate installation location depending on how you intend to use ARM Compiler 6.4:

  • Integrated into DS-5 5.20 or later.
  • As a standalone product.

2.1. Integration into DS-5 5.20 or later

ARM Compiler 6.4 can be installed in any location, including the default location, providing this is outside of a DS-5 product installation.

After it is installed, you can integrate the toolchain with DS-5 5.20 or later by following the instructions in the tutorial available at https://developer.arm.com/products/software-development-tools/ds-5-development-studio/resources/tutorials/adding-new-compiler-toolchains-to-ds-5.

ARM recommends using ARM Compiler 6.4 from the DS-5 Eclipse IDE or DS-5 Command Prompt. When using the toolchain outside these environments, you might need to configure the following environment variables:

  • Set ARM_PRODUCT_PATH to the path to the sw/mappings directory within your DS-5 installation.
  • Set ARM_TOOL_VARIANT=ult if you are using the toolchain with DS-5 Ultimate Edition.

For further information see https://developer.arm.com/products/software-development-tools/license-management/resources/product-and-toolkit-configuration.

2.2. Use as a standalone product

ARM Compiler 6.4 can be installed in any location, including the default location, providing this is outside of a DS-5 product installation.

Ensure that the ARMLMD_LICENSE_FILE environment variable is pointing to your license file or license server. Please note this path must not contain double quotes on Windows. A path that contains spaces will still work without the quotes.

Set ARM_TOOL_VARIANT=ult if you are using the toolchain with a DS-5 Ultimate Edition license.

2.3. Installation on Linux

ARM Compiler 6.4 has been tested on the following supported platforms:

  • Red Hat Enterprise Linux 6 Workstation, 64-bit only.
  • Red Hat Enterprise Linux 7 Workstation, 64-bit only.
  • Ubuntu Desktop Edition 14.04 LTS, 64-bit only.

ARM Compiler 6.4 is not expected to work on older platforms.

To install ARM Compiler 6.4, run (not source) install_x86_64.sh and follow the on-screen instructions. The installer unpacks ARM Compiler 6.4 into your chosen directory.

The armclang binary is dynamically linked to a copy of libstdc++ installed under your chosen directory as part of ARM Compiler 6.4.

Some of the installed tools have dependencies on 32-bit system libraries. You must ensure that 32-bit compatibility libraries are installed when using ARM Compiler 6.4 on 64-bit Linux host platforms. ARM Compiler 6.4 tools might fail to run or report errors about missing libraries if 32-bit compatibility libraries are not installed. To install the required libraries, run the appropriate command for your platform with root privileges:

Red Hat
yum install glibc.i686
Ubuntu
apt-get install lib32stdc++6

2.4. Installation on Windows

ARM Compiler 6.4 has been tested on the following supported platforms:

  • Windows Server 2012, 64-bit only.
  • Windows 7 Enterprise SP1.
  • Windows 7 Professional SP1.
  • Windows 8.1 Enterprise, 64-bit only.
  • Windows 8.1 Professional, 64-bit only.
  • Windows 10 Enterprise, 64-bit only.
  • Windows 10 Professional, 64-bit only.

ARM Compiler 6.4 is not expected to work on older platforms.

To install ARM Compiler 6.4, run win-x86_64\setup.exe on a 64-bit Windows host platform or win-x86_32\setup.exe on a 32-bit Windows host platform and follow the on-screen instructions. If you have an earlier version of ARM Compiler 6 installed and you wish to perform an upgrade, it is recommended that you uninstall the previous version before installing the new version of ARM Compiler 6.

ARM Compiler 6 requires the Microsoft Visual Studio 2013 runtime libraries to be installed. If you use the product installer, or the toolchain is installed as part of DS-5, the runtime libraries are installed with the product. If you later copy or move the installation to another host you will need to ensure that the runtime libraries are also available on that host.

3. Uninstall

On Linux, delete the ARM Compiler 6.4 installation directory.

On Windows, use Programs and Features in Control Panel, select ARM Compiler 6.4, and click the Uninstall button.

4. Documentation

The following documentation is available for ARM Compiler 6.4:

  • armar User Guide.
  • armasm User Guide.
  • armclang Reference Guide.
  • armlink User Guide.
  • fromelf User Guide.
  • ARM C and C++ Libraries and Floating-Point Support User Guide.
  • Errors and Warnings Reference Guide.
  • Getting Started Guide.
  • Migration and Compatibility Guide.
  • Software Development Guide.

For more information, please see ARM Compiler 6 documentation in developer.arm.com.

5. Feedback and Support

Your feedback is important to us, and you are welcome to send us defect reports and suggestions for improvement on any aspect of the product. Contact your supplier or visit https://developer.arm.com/support and open a case with feedback or support issues. Where appropriate, please provide the --vsn output from the tool, the complete content of any error message that the tools produce, and include any source code, other files, and command-lines necessary to reproduce the issue.

6. Release History and Changes

The following are the releases to date of the ARM Compiler 6.4 series:

  • 6.4 (released February 2016)

Below is a summary of the changes in each release, including new features and defect fixes. Changes are listed since the previous release in each case unless otherwise specified. Each itemized change is accompanied by a unique SDCOMP-<NNNNN> identifier. If you need to contact ARM about a specific issue within these release notes, please quote the appropriate identifier.

Changes in ARM Compiler 6.4

Changes are listed since the previous feature release, ARM Compiler 6.3.

General changes in ARM Compiler 6.4

  • [SDCOMP-32922]  Support has been added for the Cortex-A32 processor. To target Cortex-A32, select from the following options:

    armclang:

    • --target=arm-arm-none-eabi -mcpu=cortex-a32

    armasm, armlink, and fromelf:

    • --cpu=8-A.32

  • [SDCOMP-29819]  Support has been added for the ARMv8-R architecture. To target the ARMv8-R architecture profile, select from the following options:

    armclang:

    • --target=arm-arm-none-eabi -march=armv8-r

    armasm, armlink, and fromelf:

    • --cpu=8-R

  • [SDCOMP-26229]  Support has been added for the ARMv7-R architecture. To target ARMv7-R, select from the following options:

    armclang:

    • --target=arm-arm-none-eabi -march=armv7-r for the ARMv7-R architecture profile.
    • --target=arm-arm-none-eabi -mcpu=cortex-r4 for the Cortex-R4 processor.
    • --target=arm-arm-none-eabi -mcpu=cortex-r5 for the Cortex-R5 processor.
    • --target=arm-arm-none-eabi -mcpu=cortex-r7 for the Cortex-R7 processor.
    • --target=arm-arm-none-eabi -mcpu=cortex-r8 for the Cortex-R8 processor.

    armasm, armlink, and fromelf:

    • --cpu=7-R for the ARMv7-R architecture profile.
    • --cpu=Cortex-R4 for the Cortex-R4 processor.
    • --cpu=Cortex-R5 for the Cortex-R5 processor.
    • --cpu=Cortex-R7 for the Cortex-R7 processor.
    • --cpu=Cortex-R8 for the Cortex-R8 processor.

  • [SDCOMP-32923]  Support has been added for the Cortex-R8 processor. To target Cortex-R8, select from the following options:

    armclang:

    • --target=arm-arm-none-eabi -mcpu=cortex-r8

    armasm, armlink, and fromelf:

    • --cpu=Cortex-R8

  • [SDCOMP-32879]  Building secure applications using the ARMv8-M Security Extensions is now fully supported. Secure applications for ARMv8-M can be built with the following options:

    armclang:

    • -mcmse to enable the generation of code for the secure state of the ARMv8-M Security Extensions.

    armlink:

    • --import_cmse_lib_in=filename to read an existing import library and create gateway veneers with the same address as given in the import library.
    • --import_cmse_lib_out=filename to output the secure code import library to the location specified.

    For more information about these options, refer to the product documentation.

  • [SDCOMP-30462]  Support has been added for the use of floating-point code in secure functions with the ARMv8-M Security Extensions. Select from the following compiler options:

    • -mfloat-abi=soft
    • -mfloat-abi=softfp

    This was previously described as a known issue with identifier SDCOMP-30562.

    The use of floating-point code in secure functions is not supported when compiling with -mfloat-abi=hard.

  • [SDCOMP-28606]  Support has been added for execute-only memory (XOM) regions when generating images for an ARMv7-M or ARMv8-M target. Select from the following options:

    armclang:

    • -mexecute-only to generate execute-only code.

    armlink:

    • --scatter and the +XO selector to place execute-only code using a scatter-file.
    • --xo_base to specify the base address of an execute-only execution region.

    For more information, refer to the armclang Reference Guide, armlink User Guide, and the Software Development Guide.

  • [SDCOMP-30310]  The Rogue Wave C++ library has been removed having been replaced by libc++, as indicated by SDCOMP-29034 in ARM Compiler 6.3. The following options are no longer supported:

    armclang:

    • -stdlib=legacy_cpplib

    armlink:

    • --stdlib=legacy_cpplib

    Objects compiled using libc++ are not backwards compatible with objects compiled using Rogue Wave.

  • [SDCOMP-30642]  The following armasm, armlink, and fromelf options are no longer supported:

    • --cpu=8.2-A.32.v8_vfpneon
    • --cpu=8.2-A.32.crypto.v8_vfpneon
    • --cpu=8.2-A.64.v8_vfpneon
    • --cpu=8.2-A.64.crypto.v8_vfpneon

    To target ARMv8.2-A without the FP16 extension, replace affected --cpu=name options as follows:

    • Use --cpu=8.2-A.32 --fpu=FP-ARMv8 instead of --cpu=8.2-A.32.v8_vfpneon.
    • Use --cpu=8.2-A.32.crypto --fpu=FP-ARMv8 instead of --cpu=8.2-A.32.crypto.v8_vfpneon.
    • Use --cpu=8.2-A.64 --fpu=FP-ARMv8 instead of --cpu=8.2-A.64.v8_vfpneon.
    • Use --cpu=8.2-A.64.crypto --fpu=FP-ARMv8 instead of --cpu=8.2-A.64.crypto.v8_vfpneon.

  • [SDCOMP-44509]  The following linker option has been deprecated and will be removed in a future release:

    • --exceptions_tables

    Instead, to control the generation of C++ exception tables, select from the following compiler options:

    • -fexceptions to enable the generation of C++ exception tables.
    • -fno-exceptions to disable the generation of C++ exception tables.

    The default compiler behavior is:

    • -fexceptions for C++.
    • -fno-exceptions for C.

  • [SDCOMP-44348]  The following linker option has been deprecated and will be removed in a future release:

    • --no_thumb2_library

    The --no_thumb2_library option is not compatible with the libc++ library.

  • [SDCOMP-30815]  Support for bare-metal Position Independent Executable (PIE) images has been deprecated. The following options have been deprecated:

    armclang:

    • -fbare-metal-pie

    armlink:

    • --bare_metal_pie

    Instead, consider using the Read-Only Position-Independent (ROPI) and Read/Write Position-Independent (RWPI) code features:

    armclang:

    • -fropi to enable the generation of ROPI code.
    • -frwpi to enable the generation of RWPI code.

    armlink:

    • --ropi to make the load and execution region containing the RO output section position-independent.
    • --rwpi to make the load and execution region containing the RW and ZI output section position-independent.

    For more information about these options, refer to the armclang Reference Guide and the armlink User Guide.

  • [SDCOMP-44363]  The following changes have been made to supported host platforms:

    Platforms added:

    • Windows 10, 64-bit only.

    Platforms removed (deprecation was indicated by SDCOMP-29551 in ARM Compiler 6.02):

    • Red Hat Enterprise Linux 5.
    • Ubuntu Desktop Edition 12.04 LTS.

Enhancements in ARM Compiler 6.4

Compiler and integrated assembler (armclang)
  • [SDCOMP-30941]  The #pragma clang diagnostic feature is now fully supported. For more information, refer to the armclang Reference Guide.

  • [SDCOMP-30148]  Support has been added for the -munaligned-access and -mno-unaligned-access options. These options control whether unaligned accesses to data are permitted. The default is:

    • -munaligned-access when the selected target supports unaligned accesses to data.
    • -mno-unaligned-access when the selected target does not support unaligned accesses to data.

    For more information about these options, refer to the armclang Reference Guide.

Linker (armlink)
  • [SDCOMP-30794]  Support has been added for the --no_unaligned_access linker option. This option prevents the linker from selecting objects from the ARM C library that permit unaligned accesses, and causes the linker to report one or more of the following downgradeable errors if any input object permits unaligned accesses:

    • Error: L6366E: <object> attributes<attr> are not compatible with the provided cpu and fpu attributes.
    • Error: L6367E: <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes.
    • Error: L6368E: <symbol> defined in <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes.

Defect fixes in ARM Compiler 6.4

Compiler and integrated assembler (armclang)
  • [SDCOMP-44605]  In certain circumstances, when assembling source containing the .arch directive, the integrated assembler could incorrectly report error: target does not support Thumb mode. This has been fixed.

  • [SDCOMP-30723]  When assembling a VLLDM or VLSTM instruction for an ARMv8-M target with the Main and Security Extensions but without the Floating-point Extension, the integrated assembler would incorrectly report error: instruction requires: FPARMv8. This has been fixed.

  • [SDCOMP-30611]  The integrated assembler incorrectly assembles the PKHTB instruction when the shift has been omitted. This has been fixed.

  • [SDCOMP-30194]  When compiling with -mbig-endian for AArch64 state, the compiler would incorrectly generate debug information encoded in little-endian format. This has been fixed.

  • [SDCOMP-30073]  In certain circumstances, when compiling for an ARMv6-M or ARMv8-M Baseline target, the compiler could incorrectly combine loads from or stores to consecutive volatile locations into LDM or STM instructions. This has been fixed.

  • [SDCOMP-29784]  When assembling code containing a preprocessor token that cannot be expanded, the integrated assembler would report clang -cc1as: fatal error: error in backend: expected relocatable expression, which did not contain file or line information. This has been fixed. The integrated assembler now reports <file>:<line>:<column>: error: expected relocatable expression.

  • [SDCOMP-28848]  The compiler would generate incorrect code for the __rev16l and __rev16ll intrinsics. This has been fixed. The __rev16l and __rev16ll intrinsics are defined in the ARM C Language Extensions (ACLE).

  • [SDCOMP-26081]  When assembling for T32 state for an ARMv8 target, the inline assembler and integrated assembler would incorrectly report error: invalid operand for instruction and error: instruction requires: arm-mode for most instructions containing an operand of R13 or SP. This has been fixed.

  • [SDCOMP-25743]  When assembling code with -g or -gdwarf-4, the integrated assembler would generate incorrect debug information that prevented source level debugging. This has been fixed.

Legacy assembler (armasm)
  • [SDCOMP-44526]  When assembling a VLLDM or VLSTM instruction for an ARMv8-M target with the Main and Security Extensions but without the Floating-point Extension, the assembler would incorrectly report Error: A1854E: Unknown opcode 'vlldm', maybe wrong target CPU? or Error: A1854E: Unknown opcode 'vlstm', maybe wrong target CPU?. This has been fixed.

  • [SDCOMP-29630]  In certain circumstances, when assembling a code section containing an ALIGN directive for AArch64 state, the assembler could incorrectly generate a sequence of bytes containing the value 0 instead of one or more NOP instructions. This could result in a run-time synchronous instruction abort. This has been fixed.

Linker (armlink)
  • [SDCOMP-29584]  In certain circumstances, when linking AArch64 objects with the --callgraph option, the linker could report either incorrect stack information or Internal fault: [0x8fd35d:<ver>]. This has been fixed. This defect was previously described as a known issue with identifier SDCOMP-30415.

  • [SDCOMP-28734]  In certain circumstances, when linking AArch64 objects with the --info=stack or --info=summarystack options, the linker could report either incorrect stack information or Internal fault: [0x8fd35d:<ver>]. This has been fixed. This defect was previously described as a known issue with identifier SDCOMP-30415.

  • [SDCOMP-24039]  In certain circumstances, the linker could report incorrect load addresses in messages of the form Error: L6788E: Scatter-loading of execution region <er1name> to [<base1>,<limit1>) will cause the contents of execution region <er2name> at [<base2>,<limit2>) to be corrupted at run-time. This has been fixed.

Libraries and system headers
  • [SDCOMP-44512]  The standard header stdint.h incorrectly defined the standard C macro UINTPTR_MAX as (2^31)-1 instead of (2^32)-1 for AArch32, and (2^63)-1 instead of (2^64)-1 for AArch64. This has been fixed.

  • [SDCOMP-30831]  The standard C library implementations of the printf() family of functions, when formatting a floating-point number in hexadecimal format using %a or %A, would incorrectly omit the hexadecimal-point character from the formatted output when the # flag is specified and the value after the hexadecimal point is zero. This has been fixed.

  • [SDCOMP-29760]  The standard C library implementations of the strtod() and scanf() families of functions would return incorrect results when parsing a string in C99 hexadecimal floating-point syntax, when all the digits before the hexadecimal point and at least one digit following the hexadecimal point are zero, for example "0x0.00E". This has been fixed.

Fromelf
  • [SDCOMP-25804]  When using the --fieldoffsets --expandarrays options together with objects generated using the armclang compiler, fromelf would incorrectly only provide information about the first element of each array instead of about every element of each array. This has been fixed. This defect was previously described as a known issue with identifier SDCOMP-25966.

Known issues in ARM Compiler 6.4

  • [SDCOMP-30540]  In certain circumstances, when linking C++ objects that have been compiled for an AArch64 target, the linker can incorrectly report Warning: L6806W: Relocation #RELA:<index> in <object1>(<section1>) with respect to [Anonymous Symbol]. Branch to untyped symbol in <object1>(<section2>), ABI requires external code symbols to be of type STT_FUNC. This warning can be ignored if <section2> is within the range of a BL instruction from <section1>.

  • [SDCOMP-28016]  long double is not supported for AArch64 state.

  • [SDCOMP-27650]  ARM Compiler 6 does not support the following ARM Compiler 5 intrinsics:

    • __disable_irq
    • __enable_irq
    • __schedule_barrier

    An alternative to __disable_irq and __enable_irq is to use inline assembly. For example:

    • asm("CPSID i"); /* Disable IRQs for ARMv7-A/R and ARMv8-A AArch32 */
    • asm("msr DAIFClr, #2"); /* Enable IRQs for ARMv8-A AArch64 */

    ARM recommends using CMSIS-CORE register access functions when targeting ARMv6-M, ARMv7-M, and ARMv8-M.

    An alternative to __schedule_barrier is to use the __dsb, __dmb, or __isb intrinsics which are defined in the ARM C Language Extensions (ACLE).

  • [SDCOMP-26080]  Complex numbers are not supported.

  • [SDCOMP-25307]  When linking using the --cpu=cortex-a5 option, the linker can report Error: L6366E: <object> attributes are not compatible with the provided cpu and fpu attributes. Compiling with the --target=armv7-arm-none-eabi -mcpu=cortex-a5 options generates objects for a CPU with VFPv4 and NEON, whereas the linker option --cpu=cortex-a5 assumes a CPU without VFP and NEON. A workaround for this issue is to link using --cpu=cortex-a5.neon.