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:
https://www.ti.com/tool/ARM-CGT
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:
http://e2e.ti.com/support/tools
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 |