Release notes for ARM Compiler 6.02 (build 6)

Introduction

ARM Compiler 6.02 provides architectural support for ARMv8-A and ARMv7-A and can be used in conjunction with DS-5 to build and debug ARMv8-A or ARMv7-A executable code. This release contains everything you need to build an ARMv8-A or ARMv7-A executable binary for bare metal applications targeting AArch32 or AArch64.

ARM Compiler 6.02 adds beta support for the ARMv7-M and ARMv6-M architecture families. New features in this release include the addition of beta support for libc++ as a C++ library, including support for C++ exceptions.

ARM Compiler 6 Configuration

  • Compiler
    • armclang is the successor to armcc and is based on LLVM technology. armclang currently supports the ARMv8-A and ARMv7-A architecture profiles and has beta support for ARMv7-M and ARMv6-M and alpha support for ARMv7-R. Please see the Migration and Compatibility Guide in the product documentation.
  • armlink, armasm, fromelf, armar
    • armlink, armasm, fromelf, and armar have been extended to support ARMv8-A and behave similarly to ARM Compiler 5. Please see the Migration and Compatibility Guide in the product documentation.
    • 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.
  • ARM C and C++ libraries for embedded systems
    • The standard ARM Compiler embedded libraries have been extended to support ARMv8-A and behave similarly to those found in ARM Compiler 5, although they might not be fully feature complete. Please see the Migration and Compatibility Guide in the product documentation.
    • This release contains the libc++ library (beta support), which is the default. This release also contains the Rogue Wave C++ standard library for legacy applications.

What's Supported in ARM Compiler 6.02?

Architecture and Processors Level of support
ARMv8-A and derived processors Supported.
ARMv7-A and derived processors Supported.
ARMv7-R and derived processors Alpha - will be supported in a future release. Consider using ARM Compiler 5 in the meantime.
ARMv7-M, ARMv6-M and derived processors Beta - will be supported in a future release. Consider using ARM Compiler 5 in the meantime.
ARM Architectures earlier than ARMv6-M Unsupported. Please use ARM Compiler 5.
Non ARM architectures Unsupported.
Level of support Description
Supported Production quality. Highest support priority.
Beta Implementation complete, but not thoroughly tested. User experimentation and feedback is welcomed.
Alpha Implementation is not complete and not thoroughly tested. User experimentation and feedback is welcomed.
Unsupported Features that are either not present in the toolchain or have been deprecated. These features are completely untested. Use entirely at your own risk.

Installation Instructions

The instructions below refer to a standalone installation of ARM Compiler 6.02. If you received ARM Compiler 6.02 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.

Host Computer Requirements

ARM Compiler 6.02 is supported on the following host platforms:

  • Red Hat Enterprise Linux 5 32-bit and 64-bit
  • Red Hat Enterprise Linux 6 64-bit
  • Red Hat Enterprise Linux 7 64-bit
  • Ubuntu Desktop Edition 12.04 LTS 32-bit and 64-bit
  • Ubuntu Desktop Edition 14.04 LTS 64-bit
  • Windows 7 32-bit and 64-bit
  • Windows 8.1 64-bit
  • Windows 2012 Server 64-bit

Install on Linux

To install ARM Compiler 6.02 on Linux, run (not source) install_x86_64.sh on a 64-bit Linux host platform or install_x86_32.sh on a 32-bit Linux host platform and follow the on-screen instructions. The installer unpacks ARM Compiler 6.02 into your chosen directory.

Dependencies

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

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.02 on 64-bit Linux host platforms. ARM Compiler 6.02 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

Install on Windows

To install ARM Compiler 6.02 on Windows, 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.

Post Install

ARM Compiler 6.02 is a license managed product and works with both DS-5 and ARM Compiler licenses:

  • A DS-5 Ultimate license enables all features.
  • A DS-5 Professional or ARM Compiler license enables all features excluding ARMv8.
Please contact
license.support@arm.com to obtain a license.

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

Uninstall

To uninstall ARM Compiler 6.02 on Windows, use Programs and Features in Control Panel, select ARM Compiler 6.02 and click the Uninstall button.

To uninstall ARM Compiler 6.02 on Linux, delete the installation directory.

Building a Simple Program

To compile a very simple program for a bare metal AArch64 system:

(Unix)        echo      "int main() {}"      > simple.c
(Windows)     echo       int main() {}       > simple.c
(Either)      armclang --target=aarch64-arm-none-eabi simple.c -o simple

armclang accepts the same options as the Clang compiler. For more information, please see http://clang.llvm.org/docs/UsersManual.html. For information on migration from older versions of ARM Compiler, see the Migration and Compatibility Guide in the product documentation.

Documentation

The following documentation is available for ARM Compiler 6.02:

  • 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 the ARM Infocenter.

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. Conact your supplier or e-mail support-sw@arm.com with feedback or support issues. Where appropriate, please mention the version and build of the tools, and include any source code, other files and command-lines necessary to reproduce the issue. The overall build number for ARM Compiler 6.02 can be found in the title at the top of this document.

Changes in this release

This section provides a summary of the changes in this release, including new features and defect fixes. Changes are listed since the previous feature release, ARM Compiler 6.01. 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.

General changes in ARM Compiler 6.02

  • [SDCOMP-28540]  The tools previously defaulted to a DS-5 Ultimate configuration when used outside of the DS-5 environment. This behavior has been changed. The tools now default to a DS-5 Professional configuration. When a DS-5 Ultimate license is available, set the environment variable ARM_TOOL_VARIANT=ult to enable additional features including compilation for ARMv8.

  • [SDCOMP-29264]  Previously the installer did not support coexisting installations of different ARM Compiler 6 releases. Any existing installation was automatically removed or upgraded irrespective of the destination folder. This behavior has been changed. The installer will no longer automatically remove or upgrade an existing installation:

    • To create a coexisting installation, select a destination folder that does not contain an existing installation.
    • To replace or upgrade an existing installation, uninstall the existing version before installing the replacement.

  • [SDCOMP-29140]  The compiler command-line options for selecting a target have changed:

    • Use --target=aarch64-arm-none-eabi for AArch64 or --target=arm-arm-none-eabi for AArch32.
    • To target a specific architecture, first select the appropriate --target and then use a suitable -march=name option.
    • To target a specific processor, first select the appropriate --target and then use a suitable -mcpu=name[+[no]feature]* option.

    The ARM Compiler armclang Reference Guide describes -march, -mcpu, and --target. The ARM Compiler Software Development Guide provides more information about specifying a target architecture, processor, and instruction set.

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

    • --target=aarch64-arm-none-eabi -mcpu=cortex-a72 for AArch64 state.
    • --target=arm-arm-none-eabi -mcpu=cortex-a72 for AArch32 state.

  • [SDCOMP-28428]  Support has been added for the ARMv8.1-A architecture. To target ARMv8.1-A, select from the following compiler options:

    • --target=aarch64-arm-none-eabi -march=armv8.1-a for AArch64 state.
    • --target=arm-arm-none-eabi -march=armv8.1-a for AArch32 state.

  • [SDCOMP-29328]  The control of license management warnings has been improved.

    For armclang:

    • The new -Wno-license-management option can be used to downgrade all license management warnings.
    • The -Werror option now upgrades all warnings except for license management warnings to error severity by default.

    For armasm, armlink, and fromelf:

    • The --diag_remark and --diag_suppress options can now be used to downgrade or suppress all license management warnings.
    • The --diag_error=warning option now upgrades all warnings except for license management warnings to error severity.

  • [SDCOMP-29311]  The command-line translation wrapper previously supplied with ARM Compiler 6 has been deprecated and removed.

  • [SDCOMP-29551]  The next release of ARM Compiler 6, ARM Compiler 6.3, will deprecate support for the following host platforms:

    • RedHat Enterprise Linux 5.
    • Ubuntu Desktop Edition 12.04 LTS.

Enhancements in ARM Compiler 6.02

Compiler and integrated assembler (armclang)

  • [SDCOMP-28947]  Beta support has been added for the libc++ standard library, including support for C++ exceptions. The libc++ library conforms to the C++11 standard with the exception of the atomic operation and thread libraries which are not supported. The libc++ library has not yet been optimized for size.

    Previously the Rogue Wave library was selected by default. This behavior has been changed. The default is now libc++. To select the Rogue Wave library for legacy applications, use the -stdlib=legacy_cpplib and -fno-exceptions compiler options and the --stdlib=legacy_cpplib linker option.

Linker (armlink)

  • [SDCOMP-28824]  Support has been added for a workaround for the ARM Cortex-A53 erratum 843419. To enable the workaround, use the following linker option:

    • --branchpatch=cortex-a53-843419

    For information on the modifications made to the program by this workaround, use the following linker option:

    • --info=patches

General enhancements

  • [SDCOMP-29541]  A new option has been added to the linker:

    • --stdlib=library_choice

    To control how the linker searches the C++ libraries, select from the following options:

    • --stdlib=infer chooses the C++ library based on the input objects. This is the default. If there is at least one object that has been compiled by ARM Compiler 5 with C++ support or a C file that has been compiled with --exceptions then the Rogue Wave libraries will be chosen. In all other cases libc++ will be used.
    • --stdlib=legacy_cpplib selects the Rogue Wave C++ libraries.
    • --stdlib=libc++ selects the libc++ libraries.

    The ARM Compiler armlink User Guide describes --stdlib. The ARM Compiler Software Development Guide provides more information about using C++ libraries.

Defect fixes in ARM Compiler 6.02

Compiler and integrated assembler (armclang)

  • [SDCOMP-28392]  When assembling an MRS or MSR instruction for an ARMv8-A target, the integrated assembler did not recognize the ID_MMFR4_EL1 register. This has been fixed.

Legacy assembler (armasm)

  • [SDCOMP-28390]  When assembling an MRS or MSR instruction for an ARMv8-A target, the assembler did not recognize the ID_MMFR4_EL1 register. This has been fixed.

  • [SDCOMP-26082]  When assembling for T32 state, the assembler would incorrectly report Error: A1477E: This register combination results in UNPREDICTABLE behaviour for most instructions containing an operand of R13 or SP. This has been fixed. The assembler will now report Warning: A1786W: This instruction using SP is deprecated and may not work in future architecture revisions.

Linker (armlink)

  • [SDCOMP-28957]  In certain circumstances, when referring to the Image$$region_name$$Length symbol for an empty execution region the linker could report Error: L6286E: ARM Linker: Execution interrupted due to an illegal storage access or a Segmentation fault. This has been fixed.

  • [SDCOMP-28757]  When resolving a relocation to a linker-generated Load$$ symbol, if RW data in one or more preceding execution regions is compressed, the linker could incorrectly calculate that value of the symbol. This has been fixed.

  • [SDCOMP-28370]  In rare circumstances, when using the --veneer_inject_type=pool option the linker could report an Internal fault. This has been fixed.

Other issues

  • [SDCOMP-29540]  Previously it was necessary to use the --force_scanlib linker option in order to link objects generated by the compiler with the ARM libraries. This behavior has been changed. The --force_scanlib option is no longer required and has been deprecated. The linker now automatically scans the ARM libraries to resolve references unless the --no_scanlib option is selected.

  • [SDCOMP-28701]  When preprocessing a scatter-file, the link step could require two compiler licenses concurrently. This has been fixed.

Known issues in ARM Compiler 6.02

  • [SDCOMP-29520]  When linking an AArch64 image, if C++ exceptions are enabled and there are no trycatch blocks in any of the objects, the linker can incorrectly report Error: L6218E: Undefined symbol <symbol> (referred from <objname>).

    To avoid this issue use one of the following workarounds:

    • Link using the --keep="*(.eh_frame)" option.
    • Add a trycatch block to the source code.
    • Create explicit references to the exception frame tables by adding the following inline assembly to the source code:

      asm(" .global .eh_frame$$Base\n"
          " .global .eh_frame$$Length\n");

  • [SDCOMP-28246]  On Red Hat Enterprise Linux, the link time optimization feature causes the 32-bit version of the linker to exit with ARM Linker: Execution interrupted due to an illegal storage access.

  • [SDCOMP-25973]  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.

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

  • [SDCOMP-25970]  When linking using either --cpu=cortex-a53 or --cpu=cortex-a57, the linker incorrectly reports Fatal error: L3903U: Argument '<feature_name>' not permitted for option 'cpu'. A workaround for this issue is to link without the --cpu option.

  • [SDCOMP-25967]  The __fp16 half-precision floating-point data type is not supported.

  • [SDCOMP-25966]  fromelf --fieldoffsets --expandarrays is expected to print information about each element of an array. For objects that have been compiled using armclang, information is only currently printed about the first element of an array.

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

Copyright © 2015 ARM Limited. All rights reserved. ARM ARN 0008G
Non-Confidential ID063015