Closed Defects in Release

ID Summary State Reported In Release Target Release Workaround Release Notes
CODEGEN-2225 PRU linker not generating warning for out of range conditional jump instruction Fixed PRU_2.1.0 PRU_2.1.5 For some code relocations (typically branches), the linker would fail to notice a relocation overflow.
CODEGEN-2214 Compiler optimizes away function which calls assert Fixed PRU_2.1.0 PRU_2.1.5 Make sure there is some other visible effect in the function -- a call, a use of a volatile variable, something like that. A function whose only visible effect is to call assert() may be optimised away at --opt_level=0 or higher.
CODEGEN-2210 PRU assembler rejects valid LBBO instruction Fixed PRU_2.1.0 PRU_2.1.5 Use formats of LBBO and SBBO instructions that specify immediate values in the 3rd or 4th operands. The PRU assembler rejected valid LBBO and SBBO instructions that specified registers for the 3rd and 4th operands, for example, LBBO &r3, r1, r2.w0, b0 The PRU assembler is now updated to accept this format for LBBO and SBBO instructions.
CODEGEN-2098 Temp filename collisions on Windows with many parallel invocations Fixed PRU_2.1.0 PRU_2.1.5 In some cases with a large number of compilations in parallel on Windows, the compiler could create temporary files with colliding names, resulting in strange compilation failures.
CODEGEN-2053 Compiler incorrectly reorders struct assign for small, volatile structs with bit-fields Fixed PRU_2.1.0 PRU_2.1.5 Use optimization level 0 or off (option --opt_level) For a very specific optimization, the optimizer may drop a volatile qualifier from a struct assignment. In some cases, the compiler may later perform an incorrect optimization, most commonly incorrectly reordering volatile assignments. This bug can only happen in a function compiled with optimization level 1 or higher which contains both of the following: 1) A struct assign where the destination is volatile, and the source is a known constant, and the struct contains a bit-field, and the struct is of size "int" or smaller. 2) Any bit-field access (read or write) other than as part of a struct assign or initialization expression. That is, the name of the bit-field is present in the access expression. Note that the optimizer can create this situation by inlining functions, so 1 and 2 might be in different functions in the source code. Consider a tree x = y where x and y are of type struct S. If the value of y is known at compile time (e.g. a const value), the optimizer will try to turn the struct constant into an integer constant (possibly combining bit-fields) and rewrite the tree to look like this: "(unsigned *)x = 32;" However, if y is volatile, that should be "*(volatile unsigned *)x = 32;" Because the access is not volatile, instruction scheduling could cause this instruction to drift past nearby volatile accesses.
CODEGEN-2025 Linker crash message incorrectly suggests submitting a preprocessed file Fixed PRU_2.1.0 PRU_2.1.5
CODEGEN-1976 Value of __cplusplus is wrong Fixed PRU_2.1.0 PRU_2.1.5 If possible, use the -ps or --strict_ansi options. This mode will use the strict definition of __cplusplus, which is 199711L. Our parser mimicked G++ behavior for the value of this macro in relaxed ANSI mode. This reproduced a bug in G++ versions v.4.7 and v.4.3 that has since been fixed.
CODEGEN-1718 The __xin and __xchg intrinsics do not store the result correctly if remapping is used Planned PRU_2.1.0 PRU_2.1.5
CODEGEN-1703 Designated initializer plus struct hack hangs compiler Fixed PRU_2.1.0 PRU_2.1.5 Avoiding using string constants to initialize objects with flexible array members. Instead, use a brace-initialized array. For example: struct { int a; char b[]; } mystruct = {0, {'h', 'e', 'l', 'l', 'o'} }; Fixed a compiler hang caused by initializing flexible array members with string constants. struct {int a; char b[]; } mystruct = {0, "hello"} /* Would cause the compiler to hang and/or crash */
SDSCM00052791 A combination of volatile accesses of __R30 and function calls is incorrectly scheduled Fixed PRU_2.1.1 PRU_2.1.5 Introduce a dummy volatile variable into the calculations involving volatile register variables. Performance will be impacted, but order will be maintained. For example, to fix the code attached to the issue: volatile uint32_t dummy = 0; volatile register uint32_t __R30; extern void timer_delay(uint32_t cycles); void main() { timer_delay((58000 / 5) - 1); do { REGNAME &= ~((0x00000002)+dummy); } while (0); do { REGNAME |= ((0x00000008)+dummy); } while (0); timer_delay((58000 / 5) - 1); do { REGNAME &= ~((0x00000008)+dummy); } while (0); do { REGNAME |= ((0x00000002)+dummy); } while (0); ... /* Repeat */ } Fixed an issue where operations on volatile register variables such as __R30 and __R31 were reordered.
CODEGEN-1444 The PRU 2.1.x compiler is TSPA, but includes a LICENSE.txt file with the old non-TSPA license. Fixed PRU_2.1.2, PRU_2.1.0, PRU_2.1.1 PRU_2.1.3 The PRU 2.1.x compiler stream is TSPA. The file PRU_Code_Generation_Tools_2.1.x_manifest.html contains the TSPA license information. The LICENSE.txt file contains the old license used by other compiler products and does not apply to the PRU 2.1.x compiler tools. The LICENSE.txt file should be ignored. The PRU 2.1.x compiler stream is TSPA. The file PRU_Code_Generation_Tools_2.1.x_manifest.html contains the TSPA license information. The LICENSE.txt file contains the old license used by other compiler products and does not apply to the PRU 2.1.x compiler tools. The LICENSE.txt file should be ignored.
CODEGEN-1333 Structure assignment causes compiler to fail with INTERNAL ERROR: Decomposition error Fixed PRU_2.1.2 PRU_2.1.3 Replace struct assignments involving packed structures with a memcpy() call to copy the contents of the RHS of the struct assign to the LHS.
SDSCM00052833 Linker INTERNAL ERROR with object files with DWARF information compiled by IAR compiler Fixed PRU_2.1.0 PRU_2.1.3 Add option --compress_dwarf=off
SDSCM00052723 Compiler seg faults with use of --opt_level=4 Fixed PRU_2.1.0 PRU_2.1.3 Use optimization level 3 or below.
SDSCM00052699 Compiler discards write to a volatile local struct member Fixed PRU_2.1.0 PRU_2.1.3 No workaround.
SDSCM00052529 Optimizer assumes enum variable can only have value of enumeration constants Fixed PRU_2.1.0 PRU_2.1.3 Don't make enumerated types with constants only for 0 and 1 if other values may be used. Either add a third value, or use values different than 0 and 1, or avoid using values that aren't the enumeration constants.
SDSCM00052468 Inline assembly may cause codegen to segmentation fault Fixed PRU_2.1.0 PRU_2.1.3 None.
SDSCM00052397 Optimizer crashes on unreachable integer divide-by-zero Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00052375 In some instances, compiler computes 64-bit add incorrectly Fixed PRU_2.1.0 PRU_2.1.2 If more than 32 bits of precision are needed, there is no workaround. Otherwise, using 32 bit integers will avoid this issue.
SDSCM00052339 demangler --output option does not work at all Fixed PRU_2.1.0 PRU_2.1.2 armdem file.asm > file.dis
SDSCM00052301 Linker crashes when --ecc:ecc_error is used Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00052281 ARM Parser Segfaults on OSX at Template Class Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00052265 Flexible array with initializer not handle correctly Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00052257 Use of --opt_level=4 causes link to fail with message symbol "name" redeclared with incompatible type Fixed PRU_2.1.0 PRU_2.1.2 Change all anonymous members of the types involved to have an explicit name.
SDSCM00052238 Strong function symbol removed from linked ICODE with -o4 Fixed PRU_2.1.0 PRU_2.1.2 Use --opt_level=3 or below.
SDSCM00052212 PRU does not issue a NOP between writing the source registers of the MAC unit and reading the result Fixed PRU_2.1.0 PRU_2.1.2 The workaround is to use the --silicon_version=2 option. This option will prevent the compiler from using the hardware loop instruction.
SDSCM00052144 RTS libraries do not get automatically built if the library is missing (Mac OS X) Fixed PRU_2.1.0 PRU_2.1.2 Copy the libraries from a Windows/Linux machine.
SDSCM00052114 Windows Stack Size for Parser Should be Raised Fixed PRU_2.1.0 PRU_2.1.2 There are at least two options: 1. On Windows, if you have Visual Studio available, the stack for an executable may be raised with editbin. For example, to raise the stack to 8MB for the acpia6x parser, you would use: editbin /stack:8388608 acpia6x.exe 2. Use the linux toolchain. The default stack is much higher. Even if that limit is reached, the soft limit for the stack size of user applications may be raised with ulimit. For example, to raise the stack to 16MB, you would use: ulimit -S -s 16384 (This could be placed in the startup script, such as .bashrc)
SDSCM00052014 Cannot read files with inode > 4B Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00051809 "if (P) X=A; else X=B;" may compile incorrectly when A and B are 0/1 and P is 0/1 with a side effect Fixed PRU_2.1.0 PRU_2.1.2 Typically such an IF is equivalent to "X=P" or "X=!P"; write it that way to avoid the problem. Adding statements to either arm of the IF can also help.
SDSCM00051762 Dot expression adding align(64) computes hugely incorrect size Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00051740 AP modified before V4 saved, potentially corrupting the stack pointer Fixed PRU_2.1.0 PRU_2.1.2 None.
SDSCM00051708 Loop downcounter may be mistakenly typed too small Fixed PRU_2.1.0 PRU_2.1.2 Lower the level of optimization.
SDSCM00051668 Using -o4 with cout or cin will cause an incompatible types error Fixed PRU_2.1.0 PRU_2.1.2 Don't use link time optimization with iostream.
SDSCM00051629 Compiler seg faults in C++ copy constructor call Fixed PRU_2.1.0 PRU_2.1.1 In some cases, using a different ABI option may avoid this error. However, the most safe option is to avoid the use of a copy constructor.
SDSCM00051621 Redeclaring extern "C" function as static causes parser to hang Fixed PRU_2.1.0 PRU_2.1.1 Use consistent function declarations.
SDSCM00051602 Parser may seg fault on template arguments with ! operator Fixed PRU_2.1.0 PRU_2.1.2 Using the --strict_ansi option will avoid this behavior. If this is not possible, changing template arguments of the form !foo to 0==foo will also avoid this behavior.
SDSCM00051555 The instruction LDI R3, ((0x4<<8) | (0x2<<1)) Fixed PRU_2.1.0 PRU_2.1.1 Removing the parenthesis around the shift operations allows the instruction to assemble. LDI R3, (0x4<<8 | 0x2<<1)
SDSCM00051472 Conditionals that use shift operator may be optimized out Fixed PRU_2.1.0 PRU_2.1.1 This behavior may be avoided by lowering the optimization level to -o1 or -o0. Moving the conditional check result to a variable so that the shift is not in the conditional may in some cases also avoid this behavior.
SDSCM00051464 If a host image file is the first object file on the command line, the linker will issue an ABI incompatibility error Fixed PRU_2.1.0 PRU_2.1.1 Reorder the inputs to armcl so that a host image file is not the first input.
SDSCM00051312 Linker mistakenly issues output section warning diagnostic for sections pre-bound to hard coded addresses Fixed PRU_2.1.0 PRU_2.1.1 Ignore the warning
SDSCM00051261 The exception handling (_eh) version of runtime library is not automatically built when --exceptions option is enabled Fixed PRU_2.1.0 PRU_2.1.1 You can build the library manually. In a command terminal, browse to the lib dir of the code gen folder (ex. C:\ti\ccsv6\tools\compiler\c2000_6.2.7\lib) and run the following command: > set PATH=%PATH%;C:\ti\ccsv6\tools\compiler\c2000_6.2.7\bin > mklib --pattern=rts2800_eh.lib --index=libc.a --install_to=C:/ti/ccsv6/tools/compiler/c2000_6.2.7/lib Update the paths to the CGT folder to match your install. Change the library name that is passed to the --patter option to build the other libraries for floating point (rts2800_fpu32_eh.lib) or large memory model (rts2800_ml_eh.lib).
SDSCM00051241 Output section splitting creates a zero-length section Fixed PRU_2.1.0 PRU_2.1.1 1) Do not split the section in question. 2) Change the zero-length section so that it has at least one more byte.
SDSCM00051212 MSP 4.4.0 changes to _lock.h declaration of _nop(void) instead of _nop() breaking driverlib Fixed PRU_2.1.0 PRU_2.1.1 Update _lock.h in the rts source folder, rename the library you are using, and it will automatically be rebuilt during next compile. To find compiler install location, click on project properties and click on: Resource->Linked Resources The "Path Variable" will have an entry for: CG_TOOL_ROOT c:\install_location\ccsv6\tools\compiler\msp430_4.3.4 Within above folder look for: .\lib\src\_lock.h .\include\_lock.h Edit both of above files and change below line 47: _CODE_ACCESS void _nop(void); to remove void argument and instead be: _CODE_ACCESS void _nop(); Rename the library you are using with suffix .old: .\lib\rtsx_lc_sd_eabi.lib change to a temp name .\lib\rtsx_lc_sd_eabi.lib.old Rebuild your project and the rts should automatically rebuild.
SDSCM00051128 Alias missed on address of local passed as function argument Fixed PRU_2.1.0 PRU_2.1.1 Use the -ma (--aliased_variables) option.
SDSCM00051097 Output section splitting creates a zero-length section Fixed PRU_2.1.0 PRU_2.1.1 1) Do not split the section in question. 2) Change the zero-length section so that it has at least one more byte.
SDSCM00051004 Compiler emits a reference to a symbol without declaring it in assembly. Fixed PRU_2.1.0 PRU_2.1.1 None.
SDSCM00050992 The optimizer should not make a symbol an alias if it has either the location or code_section pragmas applied. Fixed PRU_2.1.0 PRU_2.1.1 Available workarounds are to: 1. Reduce the optimization level to -o2. 2. If using a COFF abi, you can move the functions into separate files. 3. Add an __asm("NOP") to the function which will prevent an alias from being created.
SDSCM00050959 SIGSSEGV when using % in an option argument Fixed PRU_2.1.0 PRU_2.1.1 Don't use any printf-special characters like % in a compiler argument
SDSCM00050834 Assembler doesn't generate relocation entry for weak symbol Fixed PRU_2.1.0 PRU_2.1.2 Use --gen_func_subsections.
SDSCM00050764 Bound function has incorrect address in DWARF debug info Fixed PRU_2.1.0 PRU_2.1.1 Set a breakpoint at the bound function and run to it, rather than attempting to step into it.
SDSCM00050005 Compiler mistakenly issues MISRA diagnostic 12.9 for a float point type Fixed PRU_2.1.0 PRU_2.1.3

Generated on Mon May 15 10:32:28 2017