TI Arm Clang Compiler Tools - 5.0.0.STS Release Notes

Table of Contents

Introduction

Version 5.0.0.STS of the TI Arm Clang Compiler Tools, also known as the tiarmclang compiler, is derived from the open source LLVM/Clang source code base and the LLVM Compiler Infrastructure source base that can be found in GitHub (github.com).

The tiarmclang compiler can be used to compile and link C/C++ and assembly source files to build static executable application files that can be loaded and run on an Arm Cortex processor (m0, m0plus, m3, m4, m33, m55, m85, r4, r5, r52, and r52plus). Please see the Device Support section below for further information about which compiler options to use when building an application for a particular Arm Cortex processor configuration.

Short-Term Support Release

This is a Short-Term Support Release.

For definitions and explanations of STS, LTS, and the versioning number scheme, please see SDTO Compiler Version Numbers.

Documentation

The TI Arm Clang Compiler Tools User’s Guide is available online at the following URL:

TI E2E Community - Where to Get Help

Post compiler related questions to the TI E2E design community forum and select the TI device being used.

The following is the top-level webpage for all of TI’s Code Generation Tools.

If submitting a defect report, please attach a scaled-down test case with command-line options and the compiler version number to allow us to reproduce the issue easily.

Defect Tracking Database

Compiler defect reports can be tracked at the new Development Tools bug database, SIR. SIR is a JIRA-based view into all public tools defects. The old SDOWP tracking database will be retired.

A my.ti.com account is required to access this page. To find an issue in SIR, enter your defect id in the top right search box once logged in. Alternatively, from the top red navigation bar, select “Issues” then “Search for Issues”.

To find an old SDOWP issue, place the SDOWP ID in the search box and use double quotes around the SDOWP ID.

What’s New - Features Added in the 5.0.0.STS Release

Position Independent Code (PIC) / Dynamic Linking

The tiarmclang 5.0.0.STS compiler tools now provide support for generating position independent code (PIC) via the -fPIC compiler option and support for dynamic linking.

Position Independent Code (PIC) - -fPIC Compiler Option

Position independent code is a contiguous block of executable code that is comprised of one or more function definitions and read-only (RO) data objects that are gathered into a RO segment.

Using the -fPIC compiler option instructs the compiler to generate code that is, as far as possible, independent of what target memory address it is loaded to. In most cases, it is not possible to eliminate all assumptions about the location of the code, and the compiler needs assistance from an external tool to make code fully “position independent”.

The tiarmclang compiler tools employ dynamic linking to facilitate full “position independence”.

Dynamic Linking

A dynamically linked application is comprised of two primary object file components: dynamic link libraries (DLLs) and dynamic executables. Each of these components can be loaded to a target memory address of the dynamic loader’s choosing.

Dynamic link libraries (DLLs) are individual ELF object files that contain functions and data objects meant to be used by other ELF files. In a dynamic application, this means they may be used by dynamic executables or other DLLs. A DLL is not intended to be executable on its own.

Dynamic executables are very much like a static executable, except that they are not typically tied to a specific target memory address and they may depend on one or more DLLs to resolve references to symbols that are not defined in the dynamic executable ELF object file itself.

When building a dynamic application, one must start with building the DLLs that do not depend on other DLLs, then build the DLLs that have dependencies on other DLLs, then finally build the dynamic executable that may depend on one or more DLLs.

Once the dynamic application is built, a dynamic loader with special capabilities is needed to load and run the application. These special capabilities are described in more detail below in the Support Responsibilities of the Dynamic Loader section.

PIC / Dynamic Linking - Building and Running a Dynamic Application

In order to explain how to use the tiarmclang PIC and Dynamic Linking capabilities, lets examine a simple representational dynamic application example …

A Representational Example

In the following discussions about how position independent function calls and data accesses work, we’ll refer to the following source code …

a.c is the C source file for a DLL, a.dll:

a.c
---

volatile int a = 42;

int foo(void) {
  return a;
}

b.c is the C source file for a DLL, b.dll, that depends on a.dll:

b.c
---

extern volatile int a;
int foo(void);

int bar() {
  return a + foo();
}

c.c is the C source file for dynamic executable, c.exe, that depends on b.dll and defines an entry point function symbol, start:

c.c
---

int start(void) {
  return bar();
}

A Closer Look at Compiler Generated PIC

To begin this discussion, we’ll first build the a.dll and b.dll object files using the following commands:

%> tiarmclang -mcpu=cortex-r4 -fPIC -nostdlib a.c -o a.dll \
   -Wl,--dynamic=lib,--export=foo,--export=a
%> tiarmclang -mcpu=cortex-r4 -fPIC -nostdlib b.c -o b.dll \
   -Wl,--dynamic=lib,a.dll,--export=bar

Since b.c contains both an external data access and a call to an externally defined function, lets examine the disassembly of the linked b.dll object file:

%> tiarmobjdump -S -d b.dll

b.dll:  file format elf32-littlearm

Disassembly of section .text:

00000010 <bar>:
      10: e92d4800      push    {r11, lr}
      14: e24dd008      sub sp, sp, #8
      18: e59f0020      ldr r0, [pc, #0x20]  @ 0x40 <bar+0x30>
      1c: e79f0000      ldr r0, [pc, r0]
      20: e5900000      ldr r0, [r0]
      24: e58d0004      str r0, [sp, #0x4]
      28: ebfffff4      bl  0x0 <.plt.foo>   @ imm = #-0x30
      2c: e1a01000      mov r1, r0
      30: e59d0004      ldr r0, [sp, #0x4]
      34: e0800001      add r0, r0, r1
      38: e28dd008      add sp, sp, #8
      3c: e8bd8800      pop {r11, pc}
      40: e4 ff ff ff   .word   0xffffffe4

Disassembly of section .plt:

00000000 <.plt.foo>:
       0: e51ff004          ldr pc, [pc, #-0x4]  @ 0x4 <.plt.foo+0x4>
       4: 00 00 00 00       .word   0x00000000
Accessing Data with PIC - Global Offset Tables (GOT)

There are three components involved in the access to the global variable ‘a’ that is defined in the a.dll object file that is specified as input to the tiarmclang command that is used to build b.dll:

There are two components involved in the calling of function foo() in a position independent manner:

As mentioned above, building DLLs is reasonably straightforward and utilizes a few key compiler and linker options:

%> tiarmclang -mcpu=cortex-r4 -fPIC -nostdlib a.c -o a.dll \
   -Wl,--dynamic=lib,--export=foo,--export=a
%> tiarmclang -mcpu=cortex-r4 -fPIC -nostdlib b.c -o b.dll \
   -Wl,--dynamic=lib,a.dll,--export=bar

Building a Dynamic Executable

Like DLLs, building a dynamic executable is also straighforward and utilizes compiler and linker options related to dynamic linking:

%> tiarmclang -mcpu=cortex-r4 -fPIC -nostdlib c.c -o c.exe \
   -Wl,--dynamic=exe,b.dll,-estart

Loading and Running a Dynamic Executable

Loading and running a dynamic application requires the use of a dynamic loader that is not provided as part of the tiarmclang 5.0.0.STS compiler tools installation.

When building a dynamic executable or DLL, the linker generates the information needed by the dynamic loader to successfully carry out its support responsibilities. This information can be found in the linker-generated dynamic sections.

After a dynamic executable and any needed DLLs have been loaded, the dynamic loader must provide some means of initiating execution of the dynamic application.

Linker Generated Dynamic Sections

The dynamic loader depends on information contained in dynamic sections that are created by the linker while building a dynamic executable or DLL. This section provides a general overview of the content of the dynamic sections, with some more detailed descriptions of the more commonly used elements.

For more detailed information about the content of the dynamic sections used by the dynamic loader, please refer to the latest available ELF specification. The following link points to the github site that maintains the official repository for the ELF Object File Format specification:

Support Responsibilities of the Dynamic Loader

Summary of Compiler and Linker Options Relevant to PIC and Dynamic Linking

The compiler and linker options used in the building of the example dynamic application discussed above are listed below for quick reference.

Compiler Options

-fPIC

Instruct compiler to generate code to facilitate position independence and utilize dynamic linking and loading mechanisms.

-nostdlib

No code or data from runtime libraries is linked into the application under construction.

Linker Options

-Wl,–export=

Make specified function or data symbol available to users of the DLL that includes the definition of the symbol.

-Wl,–dynamic=lib

Instruct the linker to create a DLL.

-Wl,–dynamic=exe

Instruct the linker to create a dynamic executable.

Full Support for Cortex-M55, Cortex-M85 and Cortex-R52+

The tiarmclang compiler tools now support generating code for the Arm Cortex-M55, Cortex-M85 and Cortex-R52+ processor variants.

Cortex-M55

Support for generating Cortex-M55 code is enabled using the -mcpu=cortex-m55 compiler option. If the -mcpu=cortex-m55 option is specified, then the compiler assumes that support for the fp-armv8-fullfp16-d16 FPU is also enabled by default.

When the -mcpu=cortex-m55 option is specified, the default enabling of the fp-armv8-fullfp16-d16 FPU can be overridden by specifying the -mfloat-abi=soft or the -mfpu=none option on the compiler command line. This indicates that the compiler is to generate instructions to perform floating-point operations without using the FPU instruction set.

For more information about optionsets available for generating Cortex-M55 code with and without fp-armv8-fullfp16-d16 instructions, please see the Device Support section below.

Performance Note

As development efforts to support generation of Cortex-M55 code continue, we have been measuring the performance of tiarmclang generated code for the Cortex-M55 processor over the industry Coremark and Dhrystone benchmarks. The latest scores for these benchmarks are listed below along with the Arm Limited published scores for the Cortex-M55 processor:

Benchmark tiarmclang 5.0.0.STS Arm Ltd Score
Coremark 4.71 4.4
Dhrystone (inlining) 1.93 (2.19*) 2.16
Dhrystone (no inlining) 1.60 (1.78*) 1.69

NOTE: re: tiarmclang 5.0.0.STS Dhrystone scores - The scores annotated with an asterisk (*) were run using the Arm Ltd. compiler’s strcmp() routine. The gap between the published Arm Ltd. scores and the tiarmclang 5.0.0.STS scores for Dhrystone are entirely due to the faster Arm Ltd. strcmp() runtime library implementation.

Cortex-M85

Support for generating Cortex-M85 code is enabled using the -mcpu=cortex-m85 compiler option. If the -mcpu=cortex-m85 option is specified, then the compiler assumes that support for the fp-armv8-fullfp16-d16 FPU is also enabled by default.

When the -mcpu=cortex-m85 option is specified, the default enabling of the fp-armv8-fullfp16-d16 FPU can be overridden by specifying the -mfloat-abi=soft or the -mfpu=none option on the compiler command line. This indicates that the compiler is to generate instructions to perform floating-point operations without using the FPU instruction set.

For more information about optionsets available for generating Cortex-M85 code with and without fp-armv8-fullfp16-d16 instructions, please see the Device Support section below.

Cortex-R52+

Support for generating Cortex-R52+ code is enabled using the -mcpu=cortex-r52plus compiler option. If the -mcpu=cortex-r52plus option is specified, then the compiler assumes that support for the neon-fp-armv8 FPU is also enabled by default.

When the -mcpu=cortex-r52plus option is specified, the default enabling of the neon-fp-armv8 FPU can be overridden by specifying the -mfloat-abi=soft or the -mfpu=none option on the compiler command line. This indicates that the compiler is to generate instructions to perform floating-point operations without using the FPU instruction set.

For more information about optionsets available for generating Cortex-R52+ code with and without neon-fp-armv8 instructions, please see the Device Support section below.

Performance Note

As development efforts to support generation of Cortex-R52+ code continue, we have been measuring the performance of tiarmclang generated code for the Cortex-R52+ processor over the industry Coremark and Dhrystone benchmarks. The latest scores for these benchmarks are listed below along with the Arm Limited published scores for the Cortex-R52+ processor:

Benchmark tiarmclang 5.0.0.STS Arm Ltd Score
Coremark 4.39 4.3
Dhrystone (inlining) 2.72 2.70
Dhrystone (no inlining) 2.24 2.09

Performance and Code Size Improvements

Development efforts on the tiarmclang compiler tools since the last major release (4.0.x.LTS) have led to improvements in the performance of code generated by the tiarmclang 5.0.0.STS compiler tools.

The tables below compare the performance of code generated by the tiarmclang 5.0.0.STS compiler tools versus the tiarmclang 4.0.4.LTS compiler tools over the industry Coremark and Dhrystone performance benchmarks.

Cortex-M4

Benchmark tiarmclang 4.0.4.LTS tiarmclang 5.0.0.STS Arm Ltd Score
Coremark 3.51 3.88 3.54
Dhrystone (inlining) 1.56 1.56 1.67
Dhrystone (no inlining) 1.19 1.19 1.27

Cortex-M33

Benchmark tiarmclang 4.0.4.LTS tiarmclang 5.0.0.STS Arm Ltd Score
Coremark 3.95 4.44 4.1
Dhrystone (inlining) 1.80 1.82 2.05
Dhrystone (no inlining) 1.31 1.31 1.52

Cortex-R5

Benchmark tiarmclang 4.0.4.LTS tiarmclang 5.0.0.STS Arm Ltd Score
Coremark (THUMB) 3.72 4.1 3.47
Coremark (ARM) 3.61 3.88 3.47
Dhrystone (THUMB inlining) 2.03 1.96 2.02
Dhrystone (ARM inlining) 2.04 2.04 2.02
Dhrystone (THUMB no inlining) 1.56 1.58 1.67
Dhrystone (ARM no inlining) 1.56 1.56 1.67

Issues Fixed in tiarmclang 5.0.0.STS

CODEGEN-13751 - Optimization goal for LTO does not match compiler

When link-time optimization (LTO) is enabled and multiple optimization flags are specified in the compiler command, the expectation is that the last optimization flag seen in the compiler command indicates the level of optimization to be in effect during the LTO recompile.

However, in prior versions of the tiarmclang compiler tools, the LTO recompile would adopt the optimization level indicated by the first optimization flag specified in the compiler command. For example, in the following command:

%> tiarmclang -O3 -O0 -flto project.c -o project.out -Wl,lnk.cmd

the optimization level in effect during the compilation of project.c was -O0, while the optimization level in effect during the LTO recompile was -O3.

This defect has been addressed in version 5.0.0.STS of the tiarmclang compiler tools so that the last optimization flag specified in the compiler command is in effect both during the initial compile of input C/C++ source files and during the LTO recompile.

Host Support / Dependencies

The following host-specific versions of the 4.0.1.LTS tiarmclang compiler tools are available:

Device Support

The tiarmclang compiler tools support development of applications that are to be loaded and run on one of the following Arm Cortex processor and runtime environment configurations:

Cortex-M0:

Runtime Environment Configuration Options
Cortex-M0 “-mcpu=cortex-m0”
exceptions on “-mcpu=cortex-m0 -fexceptions”
execute-only on “-mcpu=cortex-m0 -mexecute-only”
execute-only and exceptions on “-mcpu=cortex-m0 -mexecute-only -fexceptions”

Cortex-M0+:

Runtime Environment Configuration Options
Cortex-M0+ “-mcpu=cortex-m0plus”
exceptions on “-mcpu=cortex-m0plus -fexceptions”
execute-only on “-mcpu=cortex-m0plus -mexecute-only”
execute-only on, exceptions on “-mcpu=cortex-m0plus -mexecute-only -fexceptions”

Cortex-M3:

Runtime Environment Configuration Options
Cortex-M3 “-mcpu=cortex-m3”
exceptions on “-mcpu=cortex-m3 -fexceptions”

Cortex-M4:

Runtime Environment Configuration Options
Cortex-M4 (FPv4SPD16 on by default) “-mcpu=cortex-m4”
FPv4SPD16 on “-mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16”
FPv4SPD16 on, exceptions on “-mcpu=cortex-m4 -fexceptions”
FPv4SPD16 on, exceptions on “-mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fexceptions”
FPv4SPD16 off “-mcpu=cortex-m4 -mfloat-abi=soft”
FPv4SPD16 off, exceptions on “-mcpu=cortex-m4 -mfloat-abi=soft -fexceptions”

Cortex-M33:

Runtime Environment Configuration Options
Cortex-M33 (FPv5SPD16 on by default) “-mcpu=cortex-m33”
FPv5SPD16 on “-mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16”
FPv5SPD16 on, exceptions on “-mcpu=cortex-m33 -fexceptions”
FPv5SPD16 on, exceptions on “-mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fexceptions”
FPv5SPD16 off “-mcpu=cortex-m33 -mfloat-abi=soft”
FPv5SPD16 off, exceptions on “-mcpu=cortex-m33 -mfloat-abi=soft -fexceptions”
CDE CP0 on, FPv5SPD16 on “-mcpu=cortex-m33 -march=armv8.1-m.main+cdecp0”
CDE CP0 on, FPv5SPD16 on “-mcpu=cortex-m33 -march=thumbv81-m.main+cdecp0”
CDE CP0 on, FPv5SPD16 on “-mcpu=cortex-m33 -march=armv8.1-m.main+cdecp0 -mfloat-abi=hard -mfpu=fpv5-sp-d16”
CDE CP0 on, FPv5SPD16 on “-mcpu=cortex-m33 -mfloat-abi=hard -march=thumbv81-m.main+cdecp0 -mfpu=fpv5-sp-d16”
CDE CP0 on, FPv5SPD16 on, exceptions on “-mcpu=cortex-m33 -march=armv8.1-m.main+cdecp0 -fexceptions”
CDE CP0 on, FPv5SPD16 on, exceptions on “-mcpu=cortex-m33 -march=thumbv81-m.main+cdecp0 -fexceptions”
CDE CP0 on, FPv5SPD16 on, exceptions on “-mcpu=cortex-m33 -march=armv8.1-m.main+cdecp0 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fexceptions”
CDE CP0 on, FPv5SPD16 on, exceptions on “-mcpu=cortex-m33 -march=thumbv81-m.main+cdecp0 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fexceptions”
CDE CP0 on, FPv5SPD16 off “-mcpu=cortex-m33 -march=armv8.1-m.main+cdecp0 -mfloat-abi=soft”
CDE CP0 on, FPv5SPD16 off “-mcpu=cortex-m33 -march=thumbv81-m.main+cdecp0 -mfloat-abi=soft”
CDE CP0 on, FPv5SPD16 off, exceptions on “-mcpu=cortex-m33 -march=armv8.1-m.main+cdecp0 -mfloat-abi=soft -fexceptions”
CDE CP0 on, FPv5SPD16 off, exceptions on “-mcpu=cortex-m33 -march=thumbv81-m.main+cdecp0 -mfloat-abi=soft -fexceptions”

Please Note:

Cortex-M55:

Runtime Environment Configuration Options
Cortex-M55 (ARMv8FULLFP16 on by default) “-mcpu=cortex-m55”
ARMv8FULLFP16 on “-mcpu=cortex-m55 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16”
ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m55 -fexceptions”
ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m55 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16 -fexceptions”
ARMv8FULLFP16 off “-mcpu=cortex-m55 -mfloat-abi=soft”
ARMv8FULLFP16 off, exceptions on “-mcpu=cortex-m55 -mfloat-abi=soft -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m55 -march=armv8.1-m.main+cdecp0”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m55 -march=thumbv81-m.main+cdecp0”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m55 -march=armv8.1-m.main+cdecp0 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m55 -mfloat-abi=hard -march=thumbv81-m.main+cdecp0 -mfpu=fp-armv8-fullfp16-d16”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m55 -march=armv8.1-m.main+cdecp0 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m55 -march=thumbv81-m.main+cdecp0 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m55 -march=armv8.1-m.main+cdecp0 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m55 -march=thumbv81-m.main+cdecp0 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 off “-mcpu=cortex-m55 -march=armv8.1-m.main+cdecp0 -mfloat-abi=soft”
CDE CP0 on, ARMv8FULLFP16 off “-mcpu=cortex-m55 -march=thumbv81-m.main+cdecp0 -mfloat-abi=soft”
CDE CP0 on, ARMv8FULLFP16 off, exceptions on “-mcpu=cortex-m55 -march=armv8.1-m.main+cdecp0 -mfloat-abi=soft -fexceptions”
CDE CP0 on, ARMv8FULLFP16 off, exceptions on “-mcpu=cortex-m55 -march=thumbv81-m.main+cdecp0 -mfloat-abi=soft -fexceptions”

Please Note:

Cortex-M85:

Runtime Environment Configuration Options
Cortex-M85 (ARMv8FULLFP16 on by default) “-mcpu=cortex-m85”
ARMv8FULLFP16 on “-mcpu=cortex-m85 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16”
ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m85 -fexceptions”
ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m85 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16 -fexceptions”
ARMv8FULLFP16 off “-mcpu=cortex-m85 -mfloat-abi=soft”
ARMv8FULLFP16 off, exceptions on “-mcpu=cortex-m85 -mfloat-abi=soft -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m85 -march=armv8.1-m.main+cdecp0”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m85 -march=thumbv81-m.main+cdecp0”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m85 -march=armv8.1-m.main+cdecp0 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16”
CDE CP0 on, ARMv8FULLFP16 on “-mcpu=cortex-m85 -mfloat-abi=hard -march=thumbv81-m.main+cdecp0 -mfpu=fp-armv8-fullfp16-d16”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m85 -march=armv8.1-m.main+cdecp0 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m85 -march=thumbv81-m.main+cdecp0 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m85 -march=armv8.1-m.main+cdecp0 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 on, exceptions on “-mcpu=cortex-m85 -march=thumbv81-m.main+cdecp0 -mfloat-abi=hard -mfpu=fp-armv8-fullfp16-d16 -fexceptions”
CDE CP0 on, ARMv8FULLFP16 off “-mcpu=cortex-m85 -march=armv8.1-m.main+cdecp0 -mfloat-abi=soft”
CDE CP0 on, ARMv8FULLFP16 off “-mcpu=cortex-m85 -march=thumbv81-m.main+cdecp0 -mfloat-abi=soft”
CDE CP0 on, ARMv8FULLFP16 off, exceptions on “-mcpu=cortex-m85 -march=armv8.1-m.main+cdecp0 -mfloat-abi=soft -fexceptions”
CDE CP0 on, ARMv8FULLFP16 off, exceptions on “-mcpu=cortex-m85 -march=thumbv81-m.main+cdecp0 -mfloat-abi=soft -fexceptions”

Please Note:

Cortex-R4:

Runtime Environment Configuration Options
Cortex-R4 (default Arm mode, VFPv3D16 off) “-mcpu=cortex-r4”
Arm mode, VFPv3D16 off “-mcpu=cortex-r4 -mfloat-abi=soft”
Arm mode, VFPv3D16 off, exceptions on “-mcpu=cortex-r4 -fexceptions”
Arm mode, VFPv3D16 off, exceptions on “-mcpu=cortex-r4 -mfloat-abi=soft -fexceptions”
Arm mode, VFPv3D16 on “-mcpu=cortex-r4 -mfloat-abi=hard -mfpu=vfpv3-d16”
Arm mode, VFPv3D16 on, exceptions on “-mcpu=cortex-r4 -mfloat-abi=hard -mfpu=vfpv3-d16”
Thumb mode, VFPv3D16 off “-mcpu=cortex-r4 -mthumb”
Thumb mode, VFPv3D16 off “-mcpu=cortex-r4 -mthumb -mfloat-abi=soft”
Thumb mode, VFPv3D16 off, exceptions on “-mcpu=cortex-r4 -mthumb -fexceptions”
Thumb mode, VFPv3D16 off, exceptions on “-mcpu=cortex-r4 -mthumb -mfloat-abi=soft -fexceptions”
Thumb mode, VFPv3D16 on “-mcpu=cortex-r4 -mthumb -mfloat-abi=hard -mfpu=vfpv3-d16”
Thumb mode, VFPv3D16 on, exceptions on “-mcpu=cortex-r4 -mthumb -mfloat-abi=hard -mfpu=vfpv3-d16 -fexceptions”

Cortex-R5:

Runtime Environment Configuration Options
Cortex-R5 (default Arm mode, VFPv3D16 on) “-mcpu=cortex-r5”
Arm mode, VFPv3D16 on “-mcpu=cortex-r5 -mfloat-abi=hard -mfpu=vfpv3-d16”
Arm mode, VFPv3D16 on, exceptions on “-mcpu=cortex-r5 -fexceptions”
Arm mode, VFPv3D16 on, exceptions on “-mcpu=cortex-r5 -mfloat-abi=hard -mfpu=vfpv3-d16 -fexceptions”
Arm mode, VFPv3D16 off “-mcpu=cortex-r5 -mfloat-abi=soft”
Arm mode, VFPv3D16 off, exceptions on “-mcpu=cortex-r5 -mfloat-abi=soft -fexceptions”
Thumb mode, VFPv3D16 on “-mcpu=cortex-r5 -mthumb”
Thumb mode, VFPv3D16 on “-mcpu=cortex-r5 -mthumb -mfloat-abi=hard -mfpu=vfpv3-d16”
Thumb mode, VFPv3D16 on, exceptions on “-mcpu=cortex-r5 -mthumb -fexceptions”
Thumb mode, VFPv3D16 on, exceptions on “-mcpu=cortex-r5 -mthumb -mfloat-abi=hard -mfpu=vfpv3-d16 -fexceptions”
Thumb mode, VFPv3D16 off “-mcpu=cortex-r5 -mthumb -mfloat-abi=soft”
Thumb mode, VFPv3D16 off, exceptions on “-mcpu=cortex-r5 -mthumb -mfloat-abi=soft -fexceptions”

Cortex-R52:

Runtime Environment Configuration Options
Cortex-R52 (default Arm mode, FPARMv8+NEON on) “-mcpu=cortex-r52”
Arm mode, FPARMv8+NEON on “-mcpu=cortex-r52 -mfloat-abi=hard -mfpu=neon-fp-armv8”
Arm mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52 -fexceptions”
Arm mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52 -mfloat-abi=hard -mfpu=neon-fp-armv8 -fexceptions”
Arm mode, FPARMv8+NEON off “-mcpu=cortex-r52 -mfloat-abi=soft”
Arm mode, FPARMv8+NEON off, exceptions on “-mcpu=cortex-r52 -mfloat-abi=soft -fexceptions”
Thumb mode, FPARMv8+NEON on “-mcpu=cortex-r52 -mthumb”
Thumb mode, FPARMv8+NEON on “-mcpu=cortex-r52 -mthumb -mfloat-abi=hard -mfpu=neon-fp-armv8”
Thumb mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52 -mthumb -fexceptions”
Thumb mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52 -mthumb -mfloat-abi=hard -mfpu=neon-fp-armv8 -fexceptions”
Thumb mode, FPARMv8+NEON off “-mcpu=cortex-r52 -mthumb -mfloat-abi=soft”
Thumb mode, FPARMv8+NEON off, exceptions on “-mcpu=cortex-r52 -mthumb -mfloat-abi=soft -fexceptions”

Cortex-R52+:

Runtime Environment Configuration Options
Cortex-R52+ (default Arm mode, FPARMv8+NEON on) “-mcpu=cortex-r52plus”
Arm mode, FPARMv8+NEON on “-mcpu=cortex-r52plus -mfloat-abi=hard -mfpu=neon-fp-armv8”
Arm mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52plus -fexceptions”
Arm mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52plus -mfloat-abi=hard -mfpu=neon-fp-armv8 -fexceptions”
Arm mode, FPARMv8+NEON off “-mcpu=cortex-r52 -mfloat-abi=soft”
Arm mode, FPARMv8+NEON off, exceptions on “-mcpu=cortex-r52plus -mfloat-abi=soft -fexceptions”
Thumb mode, FPARMv8+NEON on “-mcpu=cortex-r52plus -mthumb”
Thumb mode, FPARMv8+NEON on “-mcpu=cortex-r52plus -mthumb -mfloat-abi=hard -mfpu=neon-fp-armv8”
Thumb mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52plus -mthumb -fexceptions”
Thumb mode, FPARMv8+NEON on, exceptions on “-mcpu=cortex-r52plus -mthumb -mfloat-abi=hard -mfpu=neon-fp-armv8 -fexceptions”
Thumb mode, FPARMv8+NEON off “-mcpu=cortex-r52plus -mthumb -mfloat-abi=soft”
Thumb mode, FPARMv8+NEON off, exceptions on “-mcpu=cortex-r52plus -mthumb -mfloat-abi=soft -fexceptions”

Resolved Defects

ID Summary
CODEGEN-14342 Dwarf call frame information contains frame description entries with instructions with the wrong address
CODEGEN-14327 Global instance of structure is unexpectedly allocated into an initialized section
CODEGEN-14277 Use of -Werror fails to change warning diagnostic into an error
CODEGEN-14222 The function attribute((destructor)) is silently ignored
CODEGEN-14115 Disassembly fails in VS Code and GNU Arm objdump due to presence of .TI.phattrs section
CODEGEN-13751 Optimization goal for LTO does not match compiler
CODEGEN-13642 MacOS: missing symbol frmo Mac libc++.1.dylib may cause link to fail
CODEGEN-13377 Building with link time optimization leaves behind temporary file
CODEGEN-13361 tiarmclang silently ignores #pragma FUNCTION_OPTIONS, when a diagnostic is expected
CODEGEN-13308 “padding” section created with a dot expression is not being initialized if a fill operator is applied to it
CODEGEN-13041 Code coverage breaks naked functions
CODEGEN-13028 Code built with -flto causes linker to fail with segmentation fault
CODEGEN-13015 QKitUserGuide.pdf lists incorrect compiler user manual in section 7 references. correct user manual listed in ToolDefinition.pdf
CODEGEN-13002 Loop optimization at -O3 leads to segmentation fault on auto-generated Simulink code
CODEGEN-12833 Compiler incorrectly optimizes control flow code in the presence of an empty infinite loop
CODEGEN-12795 STDC_NO_THREADS is not defined even though compiler doesn't support C threads
CODEGEN-12763 tiarmstrip documentation is wrong
CODEGEN-12700 For a float if statement followed by divide, compiler generated code performs divide first
CODEGEN-12689 Compiler does not support characters in the ISO 8859 extended character set
CODEGEN-12684 Linker option –scan_libraries mistakenly complains about duplicate symbols when a library is supplied multiple times
CODEGEN-12682 Document that tiarmclang and c29clang compilers do not support C11 threads
CODEGEN-12625 Assembler error when ISR built with interrupt_save_fp dumped and compiled as assembly.
CODEGEN-12535 tiarmclang ti_compatibility.h gets build errors with -mcpu=cortex-m33
CODEGEN-12533 Using tiarmclang -S -flto does not create an assembly file
CODEGEN-11966 Changing the directory of the source files can cause the contents of the .rodata section to be ordered differently
CODEGEN-11890 Using 32bit counters sometimes results in counter size mismatch around increment.step
CODEGEN-11631 tiarmcov should not include instrumented runtime data by default or report errors
CODEGEN-11527 Wrong source for main is referenced during source stepping
CODEGEN-11466 QKIT: tiarmclang 2.1.0.LTS QKIT has typo's for c17 and c++17 support
CODEGEN-11433 Use of _disable_interrupts intrinsic causes compiler to emit call to function _get_CPSR, which does not exist
CODEGEN-11158 Do not emit the diagnostic: warning: call to function without interrupt attribute could clobber interruptee's VFP registers; consider using the interrupt_save_fp attribute to prevent this behavior
CODEGEN-11092 QKIT ToolDefinition.pdf for tiarmclang 1.3.x.LTS and 2.1.x.LTS has inaccurate Tool Version information
CODEGEN-10988 tiarmclang documentation fails to clarify that #pragma pack never increases the default alignment
CODEGEN-10691 assembler/linker incorrectly handles REL relocations if user specifies a CODE_SECTION that starts with ‘a’
CODEGEN-10591 Optimization of Logical NOT on condition yields incorrect MC/DC test vector tracking
CODEGEN-10444 Enabling Code Coverage and LTO results in missing profile data section
CODEGEN-10383 Document ‘#pragma clang section bss’ to be used for uninitialized variables
CODEGEN-10306 For EABI cinit copy “compression”, the linker incorrectly sets the number of bytes to copy for smaller copy initialization sizes
CODEGEN-10251 Initialization of array of structures is mistakenly filled with 0
CODEGEN-10229 Crash can occur when loading symbols due to self-referencing DIE
CODEGEN-10067 LTO: linker should include undefined symbols that are referenced from a static function in the IR symbol table that is passed to the LTO recompile
CODEGEN-10000 LTO: Compiling a source file with cortex-r4/r5 with -mthumb and linking with ARM mode cortex-r4/r5 runtime libraries improperly resolves an R_ARM_CALL relocation
CODEGEN-9997 tiarmclang: LTO behaves differently than non-LTO with regards to how zero-initialized variables are defined
CODEGEN-9850 Unresolved reference to runtime library function when that function is referenced from asm statement
CODEGEN-9838 Update tiarmclang documentation to explain that C++ library does not support features related to threads and concurrency
CODEGEN-9834 Compiler ignores attribute((used))
CODEGEN-9779 Function local static array allocated to .data section, and not .bss
CODEGEN-9669 TI Arm Clang mismatch between source code and debugger view with function subsections
CODEGEN-9576 Using –symbol_map with LTO results in incorrect optimizations across functions
CODEGEN-9415 Compiler inappropriately generates non-empty ARM.exidx sections
CODEGEN-9092 tiarmclang mistakenly documents support for -fpic position independent code
CODEGEN-8914 _enable_IRQ in ti_compatibility.h only supports Cortex-M devices
CODEGEN-8899 tiarmlnk generates cinit record for tiny .init_array section
CODEGEN-8887 Compiler does not support linking code that uses C++ exceptions
CODEGEN-8639 tiarmar.exe is denied permission to create an archive file on Windows 7
CODEGEN-8533 Use of virtual functions causes many RTS print functions to be linked into the program
CODEGEN-8471 Hex utility, when splitting a section as required by the bootloader, ignores the section alignment for the second part of the split
CODEGEN-8255 tiarmclang: zero-initialized static and global variables are being defined in .bss
CODEGEN-8216 Code coverage symbols not defined when profile counter section manually placed
CODEGEN-8177 Change documentation of –symbol_map
CODEGEN-6288 tiarmclang: optimizer removes empty loops that don't have side effects

Known Defects

The up-to-date known defects in v5.0.0.STS can be found here (dynamically generated):

Known Defects in v5.0.0.STS

End of File