Readme for ARM Code Generation Tools v20.2.6.LTS

Table of Contents

Long-term Support Release

The TMS470 CGT v20.2.0.LTS release is a long term support (LTS) release. This release will be supported for roughly 2 years with periodic bug fix updates.

Compiler Documentation and Information

Documentation for the “TI ARM Optimizing Compiler User’s Guide” and the “TI ARM Assembly Language User’s Guide” is available online at:

TI E2E Community

Questions concerning TI Code Generation Tools can be posted to the TI E2E Community forums. The “Development Tools” forum can be found at:

Defect Tracking Database

Compiler defect reports can be tracked at the Development Tools bug database at:

New Features:

Hex utility --cmac option added support for --boot tables

The hex conversion utility’s Cipher-based Message Authentication Protocol (CMAC) feature now supports boot tables with CMAC tags.

To enable, use --cmac=key_file with --boot along with other required boot table options. The CMAC algorithm assumes a fill value of 1’s for gaps between boot table regions which requires setting --fill.

Hex utility --binary option

The hex convertion utility now supports output option --binary.

Hex utility --cmac option (cipher-based message authentication protocol)

The hex conversion utility supports the secure flash boot capability provided by TMS320F2838x devices, which have both C28 and ARM cores. The secure flash boot applies the Cipher-based Message Authentication Protocol (CMAC) algorithm to verify CMAC tags for regions of allocated memory.

In order to apply the CMAC algorithm to the appropriate regions in allocated memory, use the hex conversion utility as follows: --cmac=file where file contains a 128-bit hex CMAC key

NOTE: above additionally requires --image or --load_image options.

CMAC tag locations need to be defined in the user’s C code using below symbols along with LOCATION and RETAIN pragmas: secure boot regions: cmac_sb_1 cmac_sb_2 cmac_sb_3 or cmac_sb_4 user-specified region: cmac_all

The hex utility will then apply the CMAC algorithm to all the CMAC tags defined in the user’s C code.

See ARM Assembly Language Tools User Guide for details.

Default file extension for compiler generated object files

The default file extensions for object files created by the compiler have changed in order to prevent conflicts when C and C++ files have the same names. Object files generated from C source files have the .c.obj extension. Object files generated from C++ source files have the .cpp.obj extension.

MISRA-C 2004 Support Deprecation

Starting with ARM CGT v20.2.5.LTS, MISRA-C 2004 checking support has been deprecated. The existing MISRA checking functionality will remain in further patch versions of this compiler stream as is, but no further issues will be addressed.

Resolved defects

Resolved defects in v20.2.6.LTS:

ID Summary
CODEGEN-9399 Temp file name collison causes compilation failure at –opt_level=4
CODEGEN-9393 64-bit unsigned divide routine mistakenly defines the function __aeabi_ldiv0
CODEGEN-9248 armobjcopy mistakenly puts many zero bytes at the start of a binary file
CODEGEN-9023 static constexpr string literals cause compiler to emit duplicate mangled name

Known defects

Known defects in v20.2.x.LTS:

ID Summary
CODEGEN-9407 Incorrect initialization of implicitly-sized array from constant initialization value with designated initializers
CODEGEN-9131 Add diagnostic if more than one –global_register option is supplied
CODEGEN-8898 Generated coverage .csv file has duplicate entries
CODEGEN-8789 std::is_trivially_destructible<array of non-trivially destructible> should return false
CODEGEN-8576 Loop that iterates a very large number of times causes compiler to fail with: Optimizer terminated abnormally
CODEGEN-8548 Compiler mistakenly includes user header file instead of system one
CODEGEN-8400 Incorrect handling of floating point constant -0.0
CODEGEN-8177 Linker option –symbol_map fails to change the destination of a call
CODEGEN-6509 Compiler error: no instance of function template matches the argument list
CODEGEN-6070 Erroneous “redeclared with incompatible type” involving two tagless structs with same form
CODEGEN-5179 When a symbol is remapped, DW_TAG_TI_branch/DW_AT_name is not updated
CODEGEN-5078 Simple syntax error causes assembler to fail with INTERNAL ERROR
CODEGEN-4985 Typo on ULP Advisor message
CODEGEN-4298 Internal error when passing a temporary array of objects
CODEGEN-4297 Cannot take the address of std::ctype<char>::table_size
CODEGEN-4296 Undefined symbol isblank with -g or -ooff
CODEGEN-4290 wstring runtime failure - likely bug in swprintf
CODEGEN-4281 Unexpected type returned by bitset [] operator
CODEGEN-4276 std::multimap::clear is not noexcept
CODEGEN-4275 std::num_get does not parse floating-point strings correctly
CODEGEN-4259 noexcept(typeid(d)) runtime fail on polymorphic class type
CODEGEN-4258 deeply nested lambda functions hang the codegen
CODEGEN-4250 regex_constants::ECMAScript not expected to be 0
CODEGEN-4248 armcl allows non-default arguments to be specified after default arguments
CODEGEN-4247 Internal error when assigning default arguments to a parameter pack
CODEGEN-4246 armcl allows illegal attribute in friend declarations
CODEGEN-4245 Multiple non-variables may be declared using auto or decltype(auto)
CODEGEN-4244 armcl errors on legal constexpr constructor call
CODEGEN-4234 No error generated for lambda-expression in default argument cannot capture any entity.
CODEGEN-4228 armcl fails to flag an inconsistent use of alignas between a declaration and definition of an object
CODEGEN-4203 Parser errors on empty enum declaration
CODEGEN-4158 TI compiler does not emit clang error: constexpr function never produces a constant expression
CODEGEN-4157 error with using constexpr for return from end() with empty std::initializer_list
CODEGEN-4132 cannot find matching “==” operator definition
CODEGEN-4124 Failure to defer access control checks
CODEGEN-4122 decltype cannot be used as a destructor name
CODEGEN-4119 user-supplied allocator function is not called
CODEGEN-4105 cannot find definition of “>=” operator
CODEGEN-4099 Composing operations for valarray may fail to compile
CODEGEN-4091 Incomplete class type when using various members of <iterator>
CODEGEN-4090 Unimplemented core issue 475: std::uncaught_exception is not true when constructing the thrown object
CODEGEN-4076 Exception propagating out of noexcept function does not call std::terminate
CODEGEN-4072 Unimplemented core issue 1769: Catching a thrown derived class by reference to base clas
CODEGEN-4071 <regex> never throws error_ctype
CODEGEN-4069 std::linear_congruential_engine doesn't support 8-bit results
CODEGEN-4058 std::function<T>::target_type() should return typeid(void) if target is empty
CODEGEN-4050 shared_ptr::get_deleter() should return the original deleter class without copying
CODEGEN-4044 libcxx istreambuf_iterator points to end of string instead of character past match
CODEGEN-4035 Compiler allows constant subtraction between pointers to different objects
CODEGEN-4032 wofstream << operator unexpected termination
CODEGEN-4026 Non-standard partial ordering of variadic template partial specialization
CODEGEN-4015 Access of const static member through pointer is not a constant expression.
CODEGEN-4002 Undefined behavior on lambda capturing constexpr by reference
CODEGEN-4001 Unimplemented core issue 588: Unqualified name lookup examines dependent base class
CODEGEN-4000 Core 1601: Overload resolution for enum with fixed type
CODEGEN-3999 Unimplemented core issue 1374: Conversion sequence ranks qualification before reference binding
CODEGEN-3998 Unimplemented core issue 1951: cv-qualified void and scalar types are not literal types
CODEGEN-3993 Constant initialiation may take place before dynamic initialization
CODEGEN-3991 We do not issue diagnostics if an allocation function throws a non bad_alloc exception
CODEGEN-3966 slice_array assignment failures
CODEGEN-3965 Invalid conversion on static_cast from T1 to rvalue reference of T2
CODEGEN-3964 Unimplemented core issue 1467: Overloads and initializations with single-element initializer_list
CODEGEN-3963 Unimplemented core issue 591: Name lookup in dependent base class that is also the current instantiation
CODEGEN-3962 Core Issue 1804 unimplemented: friend declaration does not apply to class template specializations
CODEGEN-3961 Pack expansion in template parameter list fails
CODEGEN-3959 std::reference_wrapper doesn't define argument_type for classes containing a typedef member named argument_type
CODEGEN-3954 Problem with std::swap and <tuple>
CODEGEN-3953 scoped_allocator_adaptor can't be explicitly instantiated with two arguments
CODEGEN-3951 Spurious error on bypassing initialization of trivially constructible objects
CODEGEN-3948 Spurious syntax error on alignas in alias declaration
CODEGEN-3947 Spurious error on unevaluated use of undefined constexpr function
CODEGEN-3946 Spurious error on global qualifier of struct template
CODEGEN-3944 Raw string d-char-sequence isn't supported
CODEGEN-3941 operator<<(std::basic_ostream<K,T>&, const std::error_code&) is not defined in system_error
CODEGEN-3938 std::rethrow_if_nested does not have standard signature
CODEGEN-3937 nested_exception::rethrow_nested() not supported
CODEGEN-3916 C++ header file cuchar is not provided in libc++
CODEGEN-1499 #pragma LOCATION and palign do not work together
CODEGEN-1498 Automatic library build fails when an exact library name is used
CODEGEN-1484 The armhex command does not handle spaces in the name of the output binary
CODEGEN-1101 When the imaginary part of z is INFINITY, cprojf(z) is NOT equivalent to INFINITY + I * copysign(0.0, cimagf(z))
CODEGEN-1059 Compiler does not respect partial overrides in C99 designated initializers
CODEGEN-1026 Disable diagnostic 1558 (–float_operations_allowed diagnostic) in standard header files
CODEGEN-989 Should accept “LDRD R8,[R1]” in Thumb-2 mode
CODEGEN-975 Missing half-precision float conversion functions
CODEGEN-974 Missing __aeabi_read_tp
CODEGEN-972 Missing AEABI_COMPATIBILITY_MODE link-time constants
CODEGEN-967 Assembler accepts but mistranslates BLLT in v7 thumb mode
CODEGEN-966 Should allow “ADD R0, R1, #0xfff” for v6m0
CODEGEN-962 Should accept 2-operand SUB SP in Thumb1/UAL mode
CODEGEN-927 Should accept 2-operand add in ARM mode
CODEGEN-890 The .label assembler directive should not be accepted when assembling for ELF.
CODEGEN-830 __aeabi_dcmpun returns 1 for Inf and -Inf
CODEGEN-753 Warning generated when using __curpc intrinsic on Thumb 2
CODEGEN-662 Double constant expression may be incorrectly truncated if assigned to a narrow integer type
CODEGEN-573 Cortex-M0 library lacks uread4, etc.
CODEGEN-322 Structure is not initialized correctly when using -o2 or -o3 optimization
CODEGEN-316 The _ssat16 intrinsic allows literals in the range of 0-31, but the SSAT16 instruction only accepts values from 1-16
CODEGEN-315 _ssatl intrinsic allows 3rd argument to be 0 resulting in an assembler error.
CODEGEN-299 ARM assembler does not issue a warning for PC-relative loads when –embedded_constants=off
CODEGEN-235 Section relative ELF symbol values in partially linking object files should hold the section offset for the symbol
CODEGEN-104 Linker gives misleading warning when dot expressions used in SECTION directive for .stack section
CODEGEN-63 DWARF does not correctly represent variables stored in register pairs
CODEGEN-56 Forward reference in .space generates an internal error