TMS470 C/C++ CODE GENERATION TOOLS
Release 4.4.18 November 2009
Defect History

------------------------------------------------------------------------------
Table of Contents
------------------------------------------------------------------------------

2.   4.4.17 Fixed Defects
3.   4.4.16 Fixed Defects
4.   4.4.15 Fixed Defects
5.   4.4.14 Fixed Defects
6.   4.4.13 Fixed Defects
7.   4.4.12 Fixed Defects
8.   4.4.11 Fixed Defects
9.   4.4.10 Fixed Defects
10.  4.4.9 Fixed Defects
11.  4.4.8 Fixed Defects
12.  4.4.7 Fixed Defects
13.  4.4.6 Fixed Defects
14.  4.4.5 Fixed Defects
15.  4.4.4 Fixed Defects
16.  4.4.3 Fixed Defects
17.  4.4.2 Fixed Defects
18.  4.4.1 Fixed Defects
19.  4.4.0 Fixed Defects
20.  4.4.B3 Fixed Defects
21.  4.4.B2 Fixed Defects
22.  4.4.B1 Fixed Defects
23.  Current Known Issues


------------------------------------------------------------------------------
1.  4.4.18 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00029529
------------------------------------------------------------------------------

Summary            : Codgen refactoring needed  ARM VFP argument passing relies
		     on incorrect comparison

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
According the ARM calling conventions, the VFPv2 coprocessor 
registers S0-15(D0-D7) can be used to pass floating point parameters.  
Once these registers have all been allocated any remaining floating 
pointer parameters are to be placed onto the stack.  

When compiling with VFPv2 support the compiler continued to allocate 
floating point parameters to the remaining VFP registers. As a result,
in the rare case where more than 16 single precision floating point values
or 8 doubles, or combination of floats/doubles requiring more the 16
words of float values, are in a function's parameter list the compiler will 
violate the calling convention.  In the extreme case where there are
more floating point parameters than there are VFP registers an internal
error will result when compiling.

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00032292
------------------------------------------------------------------------------

Summary            : Test of pointer equality of string literals generates
		     incorrect code

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
If a function is called with a string-literal argument, when compiling 
with -o3 and --gen_func_subsections, and the callee is only ever called
with the one string, then an optimisation may copy the string into the 
callee's body and create two identical strings that aren't the same 
string.  If sameness is important, this combination can cause incorrect
results.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.200 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00032706
------------------------------------------------------------------------------

Summary            : Parser crashes with internal error

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Parser

Description: 
When compiling with --abi=eabi and --exceptions a parser segfault may 
result if a function is declared using a user defined typedef and is 
later called. 

For example

typedef int MYFUNCTYPE(void);

MYFUNCTYPE init;


init();

As a a workaround avoid using typedefs (uncommon) for function 
declarations.

Defect occurs in:

TMS470 Compiler versions 4.4.17, 4.5.2, 4.4.10.104, 4.6.0, 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033099
------------------------------------------------------------------------------

Summary            : Bitfield-to-bitfield assignment done incorrectly with
		     optimization

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
An assignment like "a.b = c.d", where both b and d are bitfields, the 
type of d is narrower than the type of b, and b's position in its 
container type is beyond what d's type can represent, may be compiled 
incorrectly in a way that truncates the value assigned to a.b.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033161
------------------------------------------------------------------------------

Summary            : lnk470 CM3 v4.4.2 cinit record has target .bss address off
		     by 1--causes MEM corruption during startup initialization

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug can occur when initialized sections containing Thumb code are 
combined with uninitialized sections, specifically .bss.  This 
combination can result from GROUP-ing the sections together in the
linker command file, or from including text sections in .bss, again via the 
command file.  Avoiding such a combination should prevent this problem.

Defect occurs in:

TMS470 Compiler versions 4.4.1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00033239
------------------------------------------------------------------------------

Summary            : The compiler does not generate the correct build attribute
		     for --enum_type=int

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
The --enum_type option is used to designate the type used for 
enumerations. For EABI this value can be packed or int. The EABI build 
attribute, Tag_ABI_enum_size, should be set depending on this option. 
This is to prevent the user from linking together object files which
have different enumeration types. This attribute was always being set to 
"packed". It will now be set to "int" if --enum_type=int is used.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0B1, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033394
------------------------------------------------------------------------------

Summary            : Executables created on different PCs have different
		     ordering of sections

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : COFF Linker

Description: 
There are some instances in the linker where a there is a hash table 
comparison done on keys that are pointers to objects that are basically
output sections.  This can result in inconsistent behavior since the 
pointer values used as keys can vary from host to host, or even from
run to run.  The contents of the sections are correct and invariant; its is
only the order that may change. 

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.17, 4.5.0 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.4.15.201 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00033398
------------------------------------------------------------------------------

Summary            : GCC Extension Support: Parser does not accept a while()
		     do as the last statement in a statement expression

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Parser

Description: 
This bug only happens in --gcc mode. It is caused by compound statement
as the last statement with a statement expression. 

Defect occurs in:

TMS470 Compiler versions 2.71, 4.1.7, 2.54.208, 2.54.126, 4.4.16 -
4.4.17, 4.5.2, 4.4.10.104, 4.6.0, 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033448
------------------------------------------------------------------------------

Summary            : GCC Extensions: Parser crashes on case involving statement
		     expression

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Parser

Description: 
The bug happens when some symbols(variables, functions or so on) are 
extracted from statement expressions in FOR/WHILE loops as part of 
statement expression lowering. These symbols are missing definitions in
the final ICODE which causes seg fault.

Defect occurs in:

TMS470 Compiler versions 2.71, 4.1.7, 2.54.208, 2.54.126, 4.4.16 -
4.4.17, 4.5.2, 4.4.10.104, 4.6.0, 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033570
------------------------------------------------------------------------------

Summary            : Incorrect encoding for MVN instruction

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug is a result of the assembler performing arithmetic in a 
precision larger than 32 bits. In this particular case, the result 
becomes negative as a result of the bit-wise not operator. Then the 
assembler saturated the value when it was converted to a 32 bit
constant, which resulted in 0x80000000. The assembler will now truncate the
result to 32 bits and not saturate overflows.

Defect occurs in:

TMS470 Compiler versions 2.71, 4.1.7, 2.54.208, 2.54.126, 4.4.16 -
4.4.17, 4.5.2, 4.4.10.104, 4.6.0 - 4.6.1, 4.4.15.202 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00033636
------------------------------------------------------------------------------

Summary            : for loop unrolling causes if statements for structure
		     compare to be wrong

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A loop containing a sequence (possibly not contiguous) like

  a[i] = k;
  x    = a[i];

may compile incorrectly if the loop unrolls and the compiler attempts
to combine the stores to a[i] and a[i+1] into a single wider store.

Defect occurs in:

TMS470 Compiler versions 4.4.17, 4.5.2, 4.4.10.104, 4.6.0, 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033671
------------------------------------------------------------------------------

Summary            : Incorrect code generated for loop with a read from x[0] and
		     a write to x[i] on each iteration

Fixed in           : 4.4.18
Severity           : S1 - Critical / PS
Affected Component : C/C++ Compiler (cl)

Description: 
Under certain very specific circumstances, a loop that reads from x[0] 
(or other fixed index) and writes to x[i] on each iteration may do the 
write before the read.

Defect occurs in:

TMS470 Compiler versions 2.166e - 2.177e, 2.209e, 2.40.beta - 2.71,
4.1.0B1 - 4.1.7, 2.54.02 - 2.54.208, 2.54.03 - 2.54.126, 2.202.03e -
2.202.14e, 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100 - 4.4.10.104,
4.6.0B1 - 4.6.0, 4.4.15.200 - 4.4.15.203

------------------------------------------------------------------------------
FIXED  SDSCM00033677
------------------------------------------------------------------------------

Summary            : The 'run' address from the linker uses a different 'load'
		     address if 'load' not specified

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Linker

Description: 
If a RUN allocation is specified for an initialized section and a LOAD 
allocation is not specified for that section the linker will use a 
default LOAD allocation which will result different run and load 
addresses. This differs from the previous, documented linker behavior 
where a single specified RUN or LOAD allocation will cause the section
to only be allocated once.  As a workaround use a LOAD only specification 
instead of a RUN only.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.203

------------------------------------------------------------------------------
FIXED  SDSCM00033691
------------------------------------------------------------------------------

Summary            : Use of a gcc statement expression crashes the parser

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Parser

Description: 
This bug happens only in gcc mode. It reports an assertion failure in 
case of statement expressions with simple block statement. 

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.6.0B1 -
4.6.0

------------------------------------------------------------------------------
FIXED  SDSCM00033697
------------------------------------------------------------------------------

Summary            : Linker incorrectly resolves long jumps and does not
		     generate errors or warnings

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Linker

Description: 
This bug happens when the code has a call to an absolute address and 
this call needs a trampoline. Wihtout this fix, the linker simply does 
not generate this trampoline. With this fix, we will generate a 
trampoline assuming the caller and callee are in the same machine mode.
We flag a warning for the customer to double check this trampoline to
see if it is what they want.

Defect occurs in:

------------------------------------------------------------------------------
FIXED  SDSCM00033721
------------------------------------------------------------------------------

Summary            : Optimizer abort with TMS470 CGT 4.4.17 when compiling with
		     -o2 or higher

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A loop containing an expression like "a.x +=2" where a.x is a pointer
and a.x is also used in other contexts like "a.x[0]" may cause an optimiser
abort.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.4.10.100 - 4.4.10.104,
4.4.15.200 - 4.4.15.203

------------------------------------------------------------------------------
FIXED  SDSCM00033770
------------------------------------------------------------------------------

Summary            : The compiler generates incorrect code with a conditional
		     function call

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
A read and write involving the same struct field may occur in the wrong
order in situations involving link-time recompilation and a file that
uses pointer-to-struct without defining the struct type.

Defect occurs in:

TMS470 Compiler versions 4.1.0B1 - 4.1.7, 4.4.0B1 - 4.4.17, 4.5.0B1 -
4.5.2, 4.4.10.100 - 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.200 -
4.4.15.203

------------------------------------------------------------------------------
FIXED  SDSCM00033811
------------------------------------------------------------------------------

Summary            : Error message "INTERNAL ERROR Decomposition error" is
		     displayed when compiling with the --gen_profile_in flag

Fixed in           : 4.4.18
Severity           : S1 - Critical / PS
Affected Component : C/C++ Compiler (cl)

Description: 
When generating profile information using the --gen_profile_info 
option a conditional statement of the form

   bool ? a  b will be 

instrumented by rewriting the statement into

 bool ? true_counter++,a  b

If 'a' is a function that returns a structure the code generator may
not 
correctly handle this expression and report an error.  As a workaround 
rewrite the conditional expression using if/else.

Defect occurs in:

TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.7, 2.54.205 -
2.54.208, 2.54.110 - 2.54.126, 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2,
4.4.10.100 - 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00033846
------------------------------------------------------------------------------

Summary            : The linker is overwriting sections while merging sections

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Linker

Description: 
This bug is caused by a wrong section merge done by the linker. The
linker, because of alignment considerations, aligns down a few bytes and
overwrites spaces previous allocated to other sections.

In this test case, it overwrote the space previous allocated to a
constant string, thus the last byte of this string is overwritten.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17

------------------------------------------------------------------------------
FIXED  SDSCM00033851
------------------------------------------------------------------------------

Summary            : Array alignment is not optimal in eabi mode.

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
The compiler would attempt to word align char or short arrays in eabi
mode.  This would occur if the definition of the arrays was included in
the source file.  This word align can improve performance in certain
types of memcpy or strcpy calls by generate load and store multiple
instructions.  However, the word alignment could increase data sizes
through alignment holes between char or short global array variables.
Note, the data sizes would be equivalent to non-eabi COFF data sizes
for the same code.	This change keeps the base type alignment on 
arrays as defined by the eabi standard.

------------------------------------------------------------------------------
FIXED  SDSCM00033854
------------------------------------------------------------------------------

Summary            : The compiler ignores all but the last --preinclude option

Fixed in           : 4.4.18
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
Instead of processing multiple --preinclude options as documented, the
compiler shell will only process the last --preinclude option that appears on
the command line if more than one is specified.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.104,
4.6.0B1 - 4.6.1, 4.4.15.201 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00033968
------------------------------------------------------------------------------

Summary            : Codegen fails to generate 16-bit instructions in some cases
		     when it should

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
Fixed an issue where the codegen was sometimes generating 32-bit
versions of Thumb-2 instructions when a 16-bit instruction was available.

Defect occurs in:

TMS470 Compiler versions 4.4.8 - 4.4.17, 4.5.0B1 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.204

------------------------------------------------------------------------------
FIXED  SDSCM00034228
------------------------------------------------------------------------------

Summary            : cg470 seg fault

Fixed in           : 4.4.18
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug can occur when performing optimization and compiling with -mf2
or below. 

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.17, 4.5.0B1 - 4.5.2, 4.6.0B1 -
4.6.1


------------------------------------------------------------------------------
2.  4.4.17 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00019490
------------------------------------------------------------------------------

Summary            : Request for intrinsics for ISB, DSB, DMB hint instructions

Fixed in           : 4.4.17
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
The following intrinsics are now available when compiling for a V7 
architecture.

void _dmb();

Generates the DMB instruction.

void _dsb();

Generates the DSB instruction.

void _isb();

Generates the ISB instruction.

These intrinsics will act as a barrier to optimization.

------------------------------------------------------------------------------
FIXED  SDSCM00028049
------------------------------------------------------------------------------

Summary            : illegal offset generated for vldr instruction

Fixed in           : 4.4.17
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
The VLDR instruction accepts an immediate offset to the base register. 
This offset must be a multiple of four. The compiler has been updated
to check that the offset for this instruction must be a multiple of four.

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00029328
------------------------------------------------------------------------------

Summary            : Missing linker warning when place an initialized symbol in 
                     an un-initialized section using the DATA_SECTION pragma 
		     under C++

Fixed in           : 4.4.17
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00030501
------------------------------------------------------------------------------

Summary            : Copy table compression is disabled if there is only one
		     copy table record

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 
This is a linker bug. It happens when there is only one copy table 
record, the compression request is ignored by the linker

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.200 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00032116
------------------------------------------------------------------------------

Summary            : Compiler incorrectly reorders subsequent accesses to global
		     variable

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
References to external array variables declared with no size, ie,
"extern int x[]," may not be properly checked for aliases and their accesses
may be made in the wrong order.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.103, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032131
------------------------------------------------------------------------------

Summary            : parser array bounds read with template code

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Parser could crash with C++ template code.

Defect occurs in:

TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.7, 2.54.205 -
2.54.208, 2.54.110 - 2.54.125, 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2,
4.4.10.100 - 4.4.10.103

------------------------------------------------------------------------------
FIXED  SDSCM00032236
------------------------------------------------------------------------------

Summary            : Array alignment is not optimal in eabi mode.

Fixed in           : 4.4.17
Severity           : S3 - Minor
Affected Component : Optimizer

Description: 
A global array variable may not get an optimal word alignment in eabi
mode even when this should be possible.  If an array variable contains
an extern declaration prior to the variable definition this can prevent
the compiler setting a more optimal word alignment.

------------------------------------------------------------------------------
FIXED  SDSCM00032270
------------------------------------------------------------------------------

Summary            : The assembler does not accept the MRC mnemonic for
		     Cortex-M3

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Updated the assembler to accept the instructions 

MRC, MRRC, MCR, MCRR, MRC2, MRRC2, MCR2, MCRR2 

when compiling for Cortex M3. 

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100 -
4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00032325
------------------------------------------------------------------------------

Summary            : Free mismatched memory bug in shell

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Shell

Description: 
Shell could crash with hand-coded assembly source.

Defect occurs in:

TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.7, 2.54.205 -
2.54.208, 2.54.110 - 2.54.125, 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2,
4.4.10.100 - 4.4.10.103, 4.6.0B2 - 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032335
------------------------------------------------------------------------------

Summary            : Provide workaround for Cortex-R4 hardware issue #437965

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This change provides a warning if a LDC or STC instruction that uses 
PC/R15 as the base register is encountered in Thumb mode for Cortex-R4.  
As documented in ARM Cortex-R4 Errata Notice #437965, the Cortex-R4
will not perform the required alignment on the value of the PC prior to data
transfer in this case.	The compiler does not generate these 
instructions, but will now issue a warning if they are detected in 
assembly input.

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.16, 4.5.2, 4.4.10.100 -
4.4.10.103, 4.6.0B1

Workaround: 
This silicon bug can be avoided by either
- Only using LDC or STC instructions in ARM state
- Ensuring that all LDC or STC instructions are placed at word-aligned 
addresses.

------------------------------------------------------------------------------
FIXED  SDSCM00032336
------------------------------------------------------------------------------

Summary            : Provide workaround for Cortex-R4 hardware issue #577077

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This change provides a warning if the assembler encounters a Thumb
STREXD instruction that uses the same register for both transfer operands.  As
documented in the ARM Cortex-R4 Errata Notice #577077, the Cortex-R4
will treat such an instruction as unpredictable and execute it as a NOP. 
The compiler does not generate this instruction, but will now issue a
warning if it is detected in assembly input compiled for the Cortex-R4.

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.16, 4.5.2, 4.4.10.100 -
4.4.10.103, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032470
------------------------------------------------------------------------------

Summary            : PC optimizer segmentation fault under eabi while processing
		     huge function with lots of if/else statements and huge 
		     structures

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
On Windows only, compiling a very large function with many references
to global, aliased, or union variables may cause an optimiser crash due to
a stack overflow.

Defect occurs in:

TMS470 Compiler versions 4.1.0B1 - 4.1.7, 4.4.0B1 - 4.4.16, 4.5.0B1 -
4.5.2, 4.4.10.100 - 4.4.10.103, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032509
------------------------------------------------------------------------------

Summary            : ARM floating point addition and subtraction results do not
		     round correctly

Fixed in           : 4.4.17
Severity           : S3 - Minor
Affected Component : Runtime Support Libraries (RTS)

------------------------------------------------------------------------------
FIXED  SDSCM00032539
------------------------------------------------------------------------------

Summary            : ARM intrinsic causes warning

Fixed in           : 4.4.17
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
This change extends the fix for SDSCM00030597 to include other deprecated 
forms of the MSR instruction.  The MSR [CSA]PSR_<flags>, Rn 
instruction now requires proper flag specifications on the PSR operand.
 
Previously, the specifications "_flg" and "_all" were accepted.  The 
current specification forms, "_f" and "_cf" respectively, should now be
used.  Old forms of this instruction will result in a warning if in ARM
mode, and an error if in Thumb mode. 

There is a minor compatibility impact in that assembly code generated
by previous compiler versions may contain the deprecated syntax, but this 
would come from ARM intrinsics and therefore result in a warning, not a
compile error.

Defect occurs in:

TMS470 Compiler versions 4.4.16, 4.5.2, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032541
------------------------------------------------------------------------------

Summary            : Parser does not remove initialization guard variable for
		     unused extern inline function

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Parser

Description: 
When using --abi=eabi, due to a parser bug, the assembler generates an
internal error. This happens when there is a dynamically initialized
static variable in an inline function and this function is not called.

  struct A {
    A(int) {}
  };
  inline void f(void) {
    static A a = 5; 
  }

If the above is included from a header file but there is no call to the
function f() it results in asm internal error.

------------------------------------------------------------------------------
FIXED  SDSCM00032744
------------------------------------------------------------------------------

Summary            : optimizer crash with options -mv7a8 --neon -mf5 -o3

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A loop in which two pairs of two adjacent array elements each are all 
written may cause an optimiser abort if it can combine the pairs into a
larger single write.  Combining the first pair leaves an inconsistent 
state that combining the second pair trips over.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032746
------------------------------------------------------------------------------

Summary            : Using designated initializers on unions causes the parser
		     to crash

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The compiler does not support this GCC extension, but instead of
issuing an error, the compiler accepted the syntax and crashed in a later
phase.  The compiler will now issue an error if designated initializers are
used for unions.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00032747
------------------------------------------------------------------------------

Summary            : optimizer crash

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
A reduction loop like

    for (j = 0; j < 8; j++)
      sum += x[j]

may cause an optimiser abort when x[] is an array of char and the loop
is compiled for ARM Neon with -mf.  This combination tries to unroll the 
loop 8X and runs into an internal inconsistency that causes the abort.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032749
------------------------------------------------------------------------------

Summary            : optimizer terminated abnormally

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00032856
------------------------------------------------------------------------------

Summary            : application code runtime decrease of about 2% between 4.4.8
		     and 4.4.15

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Code using many accesses to small bitfields can be larger and slower
than it was in earlier releases, because the struct accesses use the
smallest valid type rather than a larger type that allows more combination of 
adjacent operations.  The patch for this problem will try to use the 
declared type of the bitfield instead, which is usually int.

Defect occurs in:

TMS470 Compiler versions 4.4.15 - 4.4.16, 4.5.2, 4.6.0B1, 4.4.15.200

------------------------------------------------------------------------------
FIXED  SDSCM00032876
------------------------------------------------------------------------------

Summary            : optimizer out of memory error

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
A loop containing many expressions like "x += x + y", repeatedly using 
the same variable, where "y" is a larger expression involving indexed 
array references, may cause the optimiser to run out of memory and
abort.

The problem is that the many assignments updating the same variable can
all be combined into a single large expression, made even larger by the
effective doubling of the uses with each statement.  The memory 
references afford the possibility of vectorisation.  The "+" operator
has many possible vector expansions.  As a result, there are many many 
combinations to try, and the optimiser does not limit itself.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032924
------------------------------------------------------------------------------

Summary            : -mh option does not improve performance with ELF as
		     compared to COFF

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
When compiling for ELF (ie, --abi=eabi), performance may be adversely 
affected when a loop writes to a local char array (for example, in an 
inlined call to strcpy()) and a call to malloc() is assigned to char*
in the same function.  While a heap allocation and a stack allocation
should be easily disambiguated, the ELF name for malloc() isn't recognised
like it should be.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00032979
------------------------------------------------------------------------------

Summary            : If interrupt occurs during function return where a
		     structure from stack is written back memory; structure 
		     gets overwritten

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The compiler may not generate interrupt safe code in the epilog of 
functions that return a structure.  If the structure value to be
returned is defined locally then, in some cases, the code that copies that 
structure from the stack to the destination specified by the caller may
be scheduled after the instruction that deallocates the stack frame. 
If an interrupt occurs after the stack frame is deallocated (the stack 
pointer updated) but before the structure is copied off the stack that 
structure value may be corrupted by an interrupt if the architecture
uses the same stack as the compiler to perform the interrupt context
switches.

Defect occurs in:

TMS470 Compiler versions 4.4.15 - 4.4.16, 4.6.0B1, 4.4.15.200

------------------------------------------------------------------------------
FIXED  SDSCM00033002
------------------------------------------------------------------------------

Summary            : Update optimizer to use EABI RTS function names fputs &
		     __add_dtor.

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Some simple printf() calls can be replaced by the optimiser with the
even simpler puts() or fputs(), but this replacement was not happening with 
--abi=eabi because of an oversight.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0B2, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033171
------------------------------------------------------------------------------

Summary            : Local volatile variables are optimized away by the
		     optimizer

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A memory reference may be optimised away when it is a non-volatile 
variable accessed through a pointer-to-volatile, and when the reference
is not used.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0B1, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033196
------------------------------------------------------------------------------

Summary            : cg470 crash

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00033302
------------------------------------------------------------------------------

Summary            : compiler does not issue error when a variable length array
		     is seen with --gcc and --c99 options are used

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Variable length arrays have always been unsupported by our tools. Even 
though we do not support this and no claim has been made that we do,
the parser should issue an error if detected. Instead the parser silently 
accepted VLA's and in some cases the compiler would generate invalid 
code. With this release, the compiler will start emitting errors when 
VLA's are detected.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0B1, 4.4.15.201 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033320
------------------------------------------------------------------------------

Summary            : Abnormal termination - very large switch case list

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Under certain conditions, constructing an internal representation in
the optimiser may leave erased nodes within the graph, which can cause the 
optimiser to crash.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.200 - 4.4.15.202

------------------------------------------------------------------------------
FIXED  SDSCM00033405
------------------------------------------------------------------------------

Summary            : armeabi test causes a codegen crash

Fixed in           : 4.4.17
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug uncovered incorrect behavior of the compiler. The compiler was
attempting to copy volatile arguments passed by value to a temporary 
location, similiar to if the compiler encounters a statement of the
form, x;, where x is a volatile. 

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.16, 4.5.0B1 - 4.5.2, 4.4.10.100
- 4.4.10.104, 4.6.0B1 - 4.6.0, 4.4.15.201 - 4.4.15.202


------------------------------------------------------------------------------
3.  4.4.16 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00028948
------------------------------------------------------------------------------

Summary            : Missing <cmath> entries

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
This bug happens when code accesses overloaded standard math routines for 
float and long double functions in C++. 

Defect occurs in:

TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.6, 2.54.205 -
2.54.208, 2.54.110 - 2.54.124, 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1,
4.4.10.100 - 4.4.10.103

------------------------------------------------------------------------------
FIXED  SDSCM00030215
------------------------------------------------------------------------------

Summary            : C I/O cannot support ftell/fseek for DOS format files
		     opened in text mode

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
Use of ftell and fseek on DOS formatted files is not supported in text 
mode, with buffered I/O.  The avoid this error the run-time libraries
can be rebuilt with unbuffered I/O by defining the following macro 
_TI_FORCE_UNBUFFERED_TEXT_IO.  This is defined by adding this switch

-D_TI_FORCE_UNBUFFERED_TEXT_IO

to the shell. 

Defect occurs in:

TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.6, 2.54.205 -
2.54.208, 2.54.110 - 2.54.124, 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1,
4.4.10.100 - 4.4.10.102

Workaround: 
1. Open the DOS file in binary mode.
2. Use one of many DOS-to-Unix file converters to strip
carriage-returns 
from the input file.

------------------------------------------------------------------------------
FIXED  SDSCM00030301
------------------------------------------------------------------------------

Summary            : Assembler generates wrong opcode instead of giving error
		     for incorrect register usage in CBZ instruction

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Assembler

Description: 
Assembler generates wrong opcode instead of giving error for incorrect 
register usage in CBZ instruction.

Defect occurs in:

TMS470 Compiler versions 4.4.14 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100 -
4.4.10.103

------------------------------------------------------------------------------
FIXED  SDSCM00030349
------------------------------------------------------------------------------

Summary            : Symbol details of enumerated variable are lost in COFF file
		     when optimization is enabled

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A variable of an enumerated type will not be noted as such after 
optimisation;  instead, it will have an integral type.

Defect occurs in:

TMS470 Compiler versions 2.41.beta - 2.71, 4.1.5 - 4.1.7, 2.54.205 -
2.54.208, 2.54.110 - 2.54.125, 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1,
4.4.10.100 - 4.4.10.103

------------------------------------------------------------------------------
FIXED  SDSCM00030572
------------------------------------------------------------------------------

Summary            : Optimizer terminates abnormally

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
The optimiser may abort when it encounters a short simple IF statement 
that sets a value which is used two or more times in subsequent 
statements, if that value is cast to a narrower type (even implicitly)
in the later uses.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030597
------------------------------------------------------------------------------

Summary            : MSR SPSR,Rn instruction accepted with deprecated form of
		     field specifier

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Assembler

Description: 
The MSR [CSA]PSR_<flags>, Rn instruction now requires the proper flag 
specification on the PSR operand.  Previously, the flags could be
omitted because older versions of ARM assembly allowed it.  This form was never
allowed for Thumb, so an error is now generated in that mode.  In ARM 
mode, a warning is now issued.

Defect occurs in:

TMS470 Compiler versions 4.4.0B3 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030599
------------------------------------------------------------------------------

Summary            : Fill sections get created between certain group output
		     sections

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : ELF Linker

------------------------------------------------------------------------------
FIXED  SDSCM00030635
------------------------------------------------------------------------------

Summary            : Incorrect optimization of constant performed with -o2 and
		     higher

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A reference to a field of a union, optionally included in some other 
structure type, may be replaced with an incorrect value if the variable
is auto-initialised and const.	Ie, given "T const x = {1, 2};" where T
is a union, a later "x.a" may be replaced by 2 even though that doesn't
correspond to the proper field.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030678
------------------------------------------------------------------------------

Summary            : Allow .cinit sections to have separate load and run
		     addresses

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 
The .cinit sections in ARM EABI mode is created by the linker. The
linker does not support the .cinit section to have a separate load and
run address. The linker does not enfoce this restriction during build
time. The assumption is that user wants to specify separate load and
run to support systems where the load view of the memory is different
from the run time view. In such cases, the cinit records will use the
load time view and hence if the boot requrires the use of run time view
(which is the normal case), it wont work.

------------------------------------------------------------------------------
FIXED  SDSCM00030700
------------------------------------------------------------------------------

Summary            : Symbol specified with .label directive within assembly
		     source file gets linked to run address
		     instead of load address

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Symbol specified with .label directive within assembly source file gets
linked to run address instead of load address

Defect occurs in:

TMS470 Compiler versions 4.1.0 - 4.1.6, 4.4.0B1 - 4.4.15, 4.5.0B1 -
4.5.1, 4.4.10.100 - 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030827
------------------------------------------------------------------------------

Summary            : Duplicate definition of string constant used in an inline
		     member function for EABI

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Parser

Description: 
When compiling in EABI mode, if an inline member function uses two
strings with identical values over 80 characters long, the compiler
will create a duplicate definition of the shared string symbol.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030959
------------------------------------------------------------------------------

Summary            : ARM dis-assembler gives .word instead of MSR instruction

Fixed in           : 4.4.16
Severity           : S3 - Minor
Affected Component : Disassembler (dis)

Description: 
The ARM dis-assembler was not working properly for some forms of the
MSR instruction.  This has been corrected.

Defect occurs in:

TMS470 Compiler versions 4.4.0B3 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00031009
------------------------------------------------------------------------------

Summary            : unexpected fill section using GROUP directive on intialized
		     and uninitialized output section in same memory type

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : ELF Linker

------------------------------------------------------------------------------
FIXED  SDSCM00031032
------------------------------------------------------------------------------

Summary            : null pointers are dereferenced when using optimizer with
		     -mf

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
A loop like

  for ...
    if (e != NULL)
      *e += ...

may compile incorrectly in such a way as to allow *e to happen outside 
the test for NULL.

Defect occurs in:

TMS470 Compiler versions 2.166e - 2.175e, 2.209e, 2.40.beta - 2.71,
4.1.0B1 - 4.1.6, 2.54.02 - 2.54.208, 2.54.03 - 2.54.124, 2.202.03e -
2.202.12e, 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100 - 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00031080
------------------------------------------------------------------------------

Summary            : Bad relocation of expression referencing symbol in same
		     code section and in an object file resulting from partial 
		     link

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 
When the linker creates a COFF format file using an input file 
that was the result of previous partial link (-r), a reference to a 
symbol from within the file resulting from the partial link may be 
calculated incorrectly.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1

------------------------------------------------------------------------------
FIXED  SDSCM00031090
------------------------------------------------------------------------------

Summary            : Compiler mistakenly ignores volatile when applied to a
		     structure

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
A write to a field in a volatile struct from within a loop may be 
improperly optimised to only write the final value.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00031200
------------------------------------------------------------------------------

Summary            : Compiler moves DIV instruction outside its if statement
		     when compiling with >= -o2 and -mn

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Optimizer

Description: The compiler was allowing speculative execution of instructions
with side effects.  This could allow certain instructions such as DIV
to raise exceptions, such as divide-by-zero, when the source was guarding
against the exception.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00031215
------------------------------------------------------------------------------

Summary            : Compiler generates incorrect call to wrong library divide
		     routine

Fixed in           : 4.4.16
Severity           : S1 - Critical / PS
Affected Component : C/C++ Compiler (cl)

Description: 
The compiler could generate an incorrect divide routine call in some 
expressions that mix signed and unsigned types.

Defect occurs in:

TMS470 Compiler versions 2.166e - 2.175e, 2.41.beta - 2.71, 4.1.0B1 -
4.1.6, 2.54.205 - 2.54.208, 2.54.124, 2.202.03e - 2.202.12e, 4.4.0B1 -
4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100 - 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00031283
------------------------------------------------------------------------------

Summary            : setjmp/longjmp do not save/restore floating point registers

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
The implementations of setjmp/longjmp did not save/restore the required
VFP registers if compiling for NEON or VFP support.  Updated the 
implementation to include VFP support. As a result the jmp_buf buffer
has increased in size from 40 to 104 bytes. In order to simplify possible 
interlinking scenarios this size increase applies to all ABI and 
ARM-variants. If VFP/Neon/EABI support is not required a smaller
jmp_buf size can be defined by modifying setjmp.h to use a value no smaller
than 5 long longs when defining the jmp_buf type size.  

Defect occurs in:

TMS470 Compiler versions 4.4.0 - 4.4.15, 4.5.0 - 4.5.1, 4.4.10.100 -
4.4.10.103

------------------------------------------------------------------------------
FIXED  SDSCM00031471
------------------------------------------------------------------------------

Summary            : optimizer crashes on PC only

Fixed in           : 4.4.16
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
A string literal less than 64 characters but with more than half 
non-printable characters (as determined by isprint()) may overflow an 
internal buffer and cause an optimiser crash.  It is also possible that
non-printable characters may cause out-of-range accesses in isprint() 
itself, similarly causing an optimiser crash.

Defect occurs in:

TMS470 Compiler versions 4.4.0B1 - 4.4.15, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.103


------------------------------------------------------------------------------
4.  4.4.15 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00028404
------------------------------------------------------------------------------

Summary            : strip470 errors with ELF object files in EABI mode

Fixed in           : 4.4.15
Severity           : S3 - Minor
Affected Component : Strip Utility

Description: 
-p option is not meant to be used on unlinked executable object files. 
The strip470 utility will now generate a warning.  Use ofd470 to extract 
and compare raw data in object files.	       
	
Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.13, 4.5.0, 4.4.10.100 -
4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00028799
------------------------------------------------------------------------------

Summary            : The new linker should provide the same detailed information
		     as the old linker when the placement fails.

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : Linker

Description: 
This bug did not result in any incorrect behavior.  The error messages 
issued in some cases have been expanded to include the appropriate 
details.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029192
------------------------------------------------------------------------------

Summary            : Parser truncates large float value

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : Parser

Description: 
This bug happens when we convert a floating point number that larger
than 32 bit integer. Without this fix, we will convert them all to INT_MAX, 
now we can convert it to an integer with 64 bit which is LONG_LONG_MAX.

Defect occurs in
TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.6, 2.54.205 -
2.54.208, 2.54.110 - 2.54.124, 4.4.0B1 - 4.4.14, 4.5.0B1 - 4.5.1,
4.4.10.100 - 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029399
------------------------------------------------------------------------------

Summary            : Compiler does not compute floating point value correctly in
		     loop

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug happens when the compiler does vectorization and the subscript
in array index is an unsigned char, also this unsigned char got warpped
around at its range boundary.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14

------------------------------------------------------------------------------
FIXED  SDSCM00029573
------------------------------------------------------------------------------

Summary            : TDEH RTS - If the very first exception thrown is
		     stdbad_alloc, stdterminate is called
		     instead of bad_alloc

Fixed in           : 4.4.15
Severity           : S3 - Minor
Affected Component : Runtime Support Libraries (RTS)

Description: 
This bug happens when you have a very large memory allocation(close to 
the size of the heap) through new() in C++ code under exception mode.
If the new() fails, it should throw a bad_alloc exception, however, with 
this bug, it just die in somewhere wihtout a bad_alloc being thrown.
The cause is that in handling throw, the RTS needs to do a malloc() to 
propagate exception, but if this malloc() fails, it won't be able to 
propagate this exception.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14, 4.5.0 - 4.5.1, 4.4.10.100 -
4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029640
------------------------------------------------------------------------------

Summary            : Reduce jmp_buf size in setjmp.h in EABI mode

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The jmp_buf size in setjmp.h was set to 48 double words in EABI mode, 
when _AEABI_PORTABILITY_LEVEL == 0.  The rts implementation of setjmp 
only uses 5 double words.  Changed setjmp.h to reflect the 
implementation, and allocate 5 double words for jmp_buf.

Defect occurs in
TMS470 Compiler versions 4.4.1 - 4.4.14, 4.5.0B1 - 4.5.1, 4.4.10.100 -
4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030029
------------------------------------------------------------------------------

Summary            : Disassmebler disassembles a thumb2 LDR PC, sym instruction
		     as a PLD immediate instruction

Fixed in           : 4.4.15
Severity           : S3 - Minor
Affected Component : Disassembler (dis)

Description: 
The two thumb 2 instructions LDR.W PC,sym and PLD.W imm, have similar 
encodings and only differ at bits 21 and 22.  The disassembler was not 
checking these bits and assumed that an LDR.W PC,sym instruction was a 
PLD.W instruction.  This condition is now checked to distinguish
between the two.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030168
------------------------------------------------------------------------------

Summary            : DWARF line number entry encoding error

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : Assembler

Description: 
The DWARF line number information for the last line number entry, 
representing the last line of the function, can be encoded incorrectly 
depending on the values of the other line number entries.  This is more
likely for functions with very few line number entries.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030233
------------------------------------------------------------------------------

Summary            : Optimizer crashes 

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
When using table-driven exception handling (--exceptions plus
--abi=eabi for ARM), a try/catch which contains two or more
catch cases that reduce to the same code and end in a return statement 
may cause the optimiser to crash.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030299
------------------------------------------------------------------------------

Summary            : Compiler takes about 10 times longer to compile certain
		     files under eabi with -o3

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
This long time compile time is caused by our optimizer. It
usually happens when there are a lot of bitifield access in large/long
expressions.

Defect occurs in
TMS470 Compiler versions 4.4.14, 4.5.0 - 4.5.1

------------------------------------------------------------------------------
FIXED  SDSCM00030444
------------------------------------------------------------------------------

Summary            : Optimizer crash 

Fixed in           : 4.4.15
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A function containing a try/catch block, whose protected expression 
contains something like a call with an argument that is assigned 
immediately above the try/catch, may cause an optimiser crash if the 
assignment can be delayed into the call.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.14, 4.5.0B1 - 4.5.1, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00030472
------------------------------------------------------------------------------

Summary            : User specified order of linker special sections under group
		     is not honored

Fixed in           : 4.4.15
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)


------------------------------------------------------------------------------
5.  4.4.14 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00029317
------------------------------------------------------------------------------

Summary            : '--float_support' build-option is not exposed by CCS4

Fixed in           : 4.4.14
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The --float_support switch was set as a hidden switch.	Now fixed.

------------------------------------------------------------------------------
FIXED  SDSCM00029360
------------------------------------------------------------------------------

Summary            : Optimiser removes an assignment

Fixed in           : 4.4.14
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
An indirect reference, such as "(*t).a" in the sequence

  e = (*t).a;
  ...
  ++t;
  ...
  e = (*t).a;

may be incorrectly loaded into a temporary variable at the first use
and reused without reloading at the second use.

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.13, 4.5.0B1 - 4.5.0, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029411
------------------------------------------------------------------------------

Summary            : Support is required for mixing initialized and
		     uninitialized variables in the same eabi section

Fixed in           : 4.4.14
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
In TMS470 EABI mode, the DATA_SECTION pragma did not work with both 
initialized and uninitialized variables.  This is now fixed.

Defect occurs in:
TMS470 Compiler versions 4.4.13, 4.5.0B1 - 4.5.0, 4.4.10.100 -
4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029422
------------------------------------------------------------------------------

Summary            : LDRD with base in list may result in incorrect base
		     register when interrupted or faulted

Fixed in           : 4.4.14
Severity           : S2 - Major
Affected Component : Assembler

Description: 
There is a Cortex-M3 silicon bug with the LDRD instruction.  (See ARM
Errata Notice 602117) If a LDRD is in this form

    LDRD Ra,Rb,[Ra,#imm]

where the first dest reg and the base reg are the same, the Ra can be
incorrect if the LDRD is interrupted between the first and second
loads.  This cannot happen with the writeback form or the post-indexed form. 
This silicon bug is present in silicon versions

r0p0, r1p0, r1p1, r1p1-00rel0, r1p1-01rel0, r2p0-00rel0

The codegen does not generate LDRD instructions, so a warning has only
been added to the assembler

Cortex-M3 Errata 602117 LDRD with base in list may result in incorrect
base register when interrupted or faulted

------------------------------------------------------------------------------
FIXED  SDSCM00029525
------------------------------------------------------------------------------

Summary            : The linker in late template instantiation opens a file 
                     for READ and then for READ-WRITE without first closing 
		     the file

Fixed in           : 4.4.14
Severity           : S1 - Critical / PS
Affected Component : Linker

Description: 
It is possible that a read of an object file can occur while that same 
object file has already been opened by the linker for a read.  This
could cause errors in parallel build systems.  This can only occur with C++ 
code requiring template instantiations.

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.13, 4.5.0B1 - 4.5.0, 4.4.10.100
- 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029553
------------------------------------------------------------------------------

Summary            : Linker does not copy the flag of the Tag_compatibility
		     build attribute to the output file

Fixed in           : 4.4.14
Severity           : S3 - Minor
Affected Component : ELF Linker

Description: 
When an EABI object file is marked incompatible by using the 
Tag_compatibility flag, the linker incorrectly copied only the vendor 
name and not the flag value into the output file.  This will cause the 
attribute to be ignored and an invalid value assigned to the attribute 
(if the flag is 0 the vendor name should be "").  This subsequently 
caused ofd470 to report an error when reading the object file produced
by the linker.

Defect occurs in:
TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.6, 2.54.205 -
2.54.208, 2.54.110 - 2.54.124, 4.4.0B1 - 4.4.13, 4.5.0B1 - 4.5.0,
4.4.10.100 - 4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029619
------------------------------------------------------------------------------

Summary            : BHS and BLO instructions encoded incorrectly by the
		     assembler

Fixed in           : 4.4.14
Severity           : S2 - Major
Affected Component : Assembler

Description: 
The assembler did not support the 'HS' or 'LO' condition codes.  This
is now fixed.  'HS' is a synonym for 'CS'.  'LO' is a synonym for 'CC'.

Defect occurs in:
TMS470 Compiler versions 4.4.0 - 4.4.13, 4.5.0B1 - 4.5.0, 4.4.10.100 -
4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029797
------------------------------------------------------------------------------

Summary            : Linker relocation overflow for BLX call to trampoline

Fixed in           : 4.4.14
Severity           : S2 - Major
Affected Component : Linker

Description: 
In some cases the linker may overestimate the call range of a BL
instruction and place a far-call trampoline too far away for the call to 
reach. The result is a relocation overflow warning from the linker. For this 
bug to occur, all the following must hold

1. Target version is -mv5e (ARM9)

2. The call is in thumb2 mode and the callee is in ARM mode, so the
trampoline call becomes a BLX instruction.

3. The call instruction is on a 2-byte boundary (not a 4-byte
boundary).

4. The area between the call and the trampoline has enough contents
such that the trampoline cannot be consolidated (moved) closer to the call 
site and remains as far away as possible.

In practice this combination (especially #4) is exceptionally rare,
especially for programs less than 0x400000 bytes in length.

Defect occurs in:
TMS470 Compiler versions 4.4.0 - 4.4.13, 4.5.0 - 4.5.1, 4.4.10.100 -
4.4.10.102


------------------------------------------------------------------------------
6.  4.4.13 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00027014
------------------------------------------------------------------------------

Summary            : Compiler needs to predefine __EDG_VERSION__

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : Parser

Description: Some source libraries, such as Boost, require an __EDG_VERSION__
macro.

------------------------------------------------------------------------------
FIXED  SDSCM00027550
------------------------------------------------------------------------------

Summary            : Dwart type encoding incorrect for C++ class that inherits
		     from template class

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug puts a wrong source name for a mangled C++ variable in the 
object file which could lead to difficulties in debugging. 

------------------------------------------------------------------------------
FIXED  SDSCM00027552
------------------------------------------------------------------------------

Summary            : Compiler crashes when compiling code that does exception
		     handling in a destructor

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
If you have a try statement in a destructor with a ellipsis in the
catch cluase, this bug will show up. 

------------------------------------------------------------------------------
FIXED  SDSCM00027886
------------------------------------------------------------------------------

Summary            : BKPT instruction encoded incorrect in ARM mode

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : Assembler

Description: 
The BKPT ARM instruction is not encoded correctly.  Bits 4 to 7 are 
encoded as 0x0 instead of 0x7.

Defect occurs in:
TMS470 Compiler versions 4.1.0B1 - 4.1.6, 4.4.11 - 4.4.12, 4.5.0B1 -
4.5.0, 4.4.10.100

------------------------------------------------------------------------------
FIXED  SDSCM00027986
------------------------------------------------------------------------------

Summary            : internal optimizer error with segmentation fault

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Certain large functions can lead to excessive allocation in the 
optimiser.  In this case, functions with 3000 to 6000 lines led to 
process sizes in the 3-4 GB range.  With this fix, the peak process 
size is around 800 MB.

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.12, 4.4.10.100

------------------------------------------------------------------------------
FIXED  SDSCM00028528
------------------------------------------------------------------------------

Summary            : Linker crash when split operator >> fails to allocate

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : Linker

Description: 
The linker could crash in certain instances when the split operator is 
used in a linker command file.

Defect occurs in:
TMS470 Compiler versions 4.4.0 - 4.4.12, 4.5.0B1 - 4.5.0, 4.4.10.101

------------------------------------------------------------------------------
FIXED  SDSCM00028680
------------------------------------------------------------------------------

Summary            : Compiler incorrectly handles assignment to structure
		     members

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
A struct definition that places bitfields adjacent to normal fields in
a way that both fit within an int-sized aligned access, combined with
code that writes to both fields, may lead to erroneous writes to the normal 
fields.

Defect occurs in:
TMS470 Compiler versions 2.166e - 2.174e, 2.41.beta - 2.71, 4.1.0B1 -
4.1.6, 2.54.205 - 2.54.208, 2.54.121 - 2.54.122, 2.202.03e - 2.202.11e,
4.4.0B1 - 4.4.12, 4.4.10.100 - 4.4.10.101

------------------------------------------------------------------------------
FIXED  SDSCM00028702
------------------------------------------------------------------------------

Summary            : C++ segmentation fault with --abi=eabi

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
When using --abi=eabi for TMS470, in rare circumstances the parser can emit 
an internal error when handling a pointer-to-member constant.  

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.12, 4.5.0B1 - 4.5.0, 4.4.10.100
- 4.4.10.101

------------------------------------------------------------------------------
FIXED  SDSCM00028737
------------------------------------------------------------------------------

Summary            : Incorrect disassembly for Thumb when subsections are used.

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : Disassembler (dis)

Description: 
Fixed a bug where the disassembler would occasionally ignore labels.  
This could result in a failure to output them and in certain 
circumstances incorrect disassembly.

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.12, 4.5.0B1 - 4.5.0

------------------------------------------------------------------------------
FIXED  SDSCM00028939
------------------------------------------------------------------------------

Summary            : TMS470 eabi object code does not link with RVCT for cpu
		     Cortex-M3

Fixed in           : 4.4.13
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Interlinking TI thumb or thumb-2 object files with RealView Version 3.0
or 3.1 object files and tools does not work when the target is 
Cortex-M3.  In other words, this only occurs when the RVCT linker is 
invoked.   This is now fixed.
 
Note: If the RealView Version 3.0 or 3.1 linker is used to link ONLY TI 
object files (meaning there are no RVCT object files or libraries 
included in the link) it is now necessary to compile the TI source code
with the --eabi_compat=RVCT21 switch.  This is NOT the use case that 
causes this bug report however.

Defect occurs in:
TMS470 Compiler versions 4.4.0 - 4.4.12, 4.5.0B1 - 4.5.0, 4.4.10.100 -
4.4.10.102

------------------------------------------------------------------------------
FIXED  SDSCM00029066
------------------------------------------------------------------------------

Summary            : #pragma WEAK doesn't work for functions.

Fixed in           : 4.4.13
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
#pragma weak is now allowed for function symbols.

Defect occurs in:
TMS470 Compiler versions 4.4.1 - 4.4.12, 4.5.0B1 - 4.5.0, 4.4.10.100 -
4.4.10.102


------------------------------------------------------------------------------
7.  4.4.12 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00022914
------------------------------------------------------------------------------

Summary            : Errors opening PDF files included in the 4.4.6 cgtools
		     version

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00024104
------------------------------------------------------------------------------

Summary            : Exception Handling test case exits early in EABI RTS 
                     library

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
This bug happens when two destructions with the same name but in 
different context got invovled in exception handling, this bug is a TDEH 
specific bug. No work around available.

------------------------------------------------------------------------------
FIXED  SDSCM00025300
------------------------------------------------------------------------------

Summary            : Optimizer optimizes out destructor code 

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
An optimisation intended to improve code size may mishandle destructors
that inline other destructors, causing writes within the destructor to
be lost.

------------------------------------------------------------------------------
FIXED  SDSCM00026281
------------------------------------------------------------------------------

Summary            : Test fails for exception handling

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00026319
------------------------------------------------------------------------------

Summary            : Linker crashes on large build

Fixed in           : 4.4.12
Severity           : S1 - Critical / PS
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00026669
------------------------------------------------------------------------------

Summary            : Linker gives multiple defined symbol error for Dwarf debug
		     symbol when linking 2 objects with same source file name

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : Linker

Description: 
When 2 source files of the same name are built for Dwarf v2 debug and 
EABI, and linked together, the linker gives multiple defined symbol
error for a Dwarf debug symbol.

------------------------------------------------------------------------------
FIXED  SDSCM00026771
------------------------------------------------------------------------------

Summary            : Certain EABI runtime functions are not available for Thumb
		     mode

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Certain EABI runtime functions in the runtime sources are not available
for Thumb mode.

------------------------------------------------------------------------------
FIXED  SDSCM00026786
------------------------------------------------------------------------------

Summary            : hex470.exe -fill option will not accept a 0xFFFFFFFF

Fixed in           : 4.4.12
Severity           : S3 - Minor
Affected Component : Hex Converter (hex)

Description: 
The hex utility -fill option will only accept unsigned values from 0x0
to 0x7FFFFFFF.  A value of 0xFFFFFFFF will be not be accepted and will
cause an 'out of range' error.
 
------------------------------------------------------------------------------
FIXED  SDSCM00026798
------------------------------------------------------------------------------

Summary            : Linker mishandles forward references to symbols defined in
		     the command file

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : Linker

Description: 
We changed to the behavior to interpret the linker command file as
shown below. This is specifically to meet the requirement of the BIOS team.

------------------------------------------------------------------------------
FIXED  SDSCM00026799
------------------------------------------------------------------------------

Summary            : optimizer produces unexpected result for code involving
		     shift and multiplication

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
An expression like "(X >> k1) * i2", where i2 is a constant power of
two less than 2^k1 and of an unsigned type narrower than X's type, may be 
converted into an expression that loses the upper bits of "X >> k1".  
"Constant" in this case means a literal integer or a globally const 
variable whose value is a literal integer.

------------------------------------------------------------------------------
FIXED  SDSCM00026937
------------------------------------------------------------------------------

Summary            : INTERNAL ERROR lnk470.exe aborted

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00027308
------------------------------------------------------------------------------

Summary            : The SDSCM00014380 update can affect projects that use
		     unreferenced .const sections

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
A change was made in the 4.4.0 compiler that generated const global 
arrays into .const subsections and these arrays are marked with a
.clink assembly directive.  This allows the linker to remove any unreference 
global arrays.	This behavior is default starting with the 4.4.0 
version.  To prevent these arrays from being placed in subsections and 
marked with a .clink directive, the following shell switch has been
added

--no_const_clink

and this is used as follows

cl470 --no_const_clink ...

------------------------------------------------------------------------------
FIXED  SDSCM00027485
------------------------------------------------------------------------------

Summary            : Change warning to remark for load_size() operator

Fixed in           : 4.4.12
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)


------------------------------------------------------------------------------
8.  4.4.11 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00025285
------------------------------------------------------------------------------

Summary            : Linker does not honor allocation based on memory attribute
		     of a region

Fixed in           : 4.4.11
Severity           : S3 - Minor
Affected Component : Linker

Description: 
Linker does not honor allocation based on memory attribute of a region.

For example,
MEMORY
{
    ROM (RW)  org = 0x00000020	 len = 0x00005000  /* ROM */
    RAM (RX)  org = 0x00006000	 len = 0x0007FFE0  /* SYSTEM RAM    */
}

SECTIONS
{
    .text     {} > (RX) 
}

This should allocate the .text section to any memory range that has the
attribute RX. However, the v4.4.x linker does not honor this
allocation. 

If a memory attribute is specified for allocation the linker will match
any memory region that has the 'R' attribute specified.

Defect occurs in
TMS470 Compiler versions 4.4.8 - 4.4.10, 4.5.0B1 - 4.5.0

------------------------------------------------------------------------------
FIXED  SDSCM00025372
------------------------------------------------------------------------------

Summary            : The -h linker option hides undefined references

Fixed in           : 4.4.11
Severity           : S2 - Major
Affected Component : Linker

Description: 
The linker hides unresolved symbols with the -h switch during a partial
link.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.9, 4.5.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00026314
------------------------------------------------------------------------------

Summary            : opt470.exe fails with segmentation fault

Fixed in           : 4.4.11
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Use of certain intrinsics -- _get_CPSR for ARM, potentially causing a crash.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.10, 4.5.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00026414
------------------------------------------------------------------------------

Summary            : Optimizer generates incorrect code for bitwise AND operator

Fixed in           : 4.4.11
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The optimiser will erroneously transform "((1 << x) & y) == 1" into
"((y >> x) & 1) == 1" which is not equivalent.

Defect occurs in
TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.5, 2.54.205 -
2.54.208, 2.54.110 - 2.54.120, 4.4.9 - 4.4.10, 4.5.0B1

------------------------------------------------------------------------------
FIXED  SDSCM00026536
------------------------------------------------------------------------------

Summary            : Wrong optimization for a for-loop with optimizer level >=
		     o2

Fixed in           : 4.4.11
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A loop whose index variable can't hold all the values of the loop's
bound may nevertheless be converted into a downcounting loop whose trip count
will be the bound truncated to the index variable's type.

Defect occurs in
TMS470 Compiler versions 2.41.beta - 2.71, 4.1.0B1 - 4.1.5, 2.54.205 -
2.54.208, 2.54.110 - 2.54.121, 4.4.9 - 4.4.10, 4.5.0B1 - 4.5.0

------------------------------------------------------------------------------
FIXED  SDSCM00026612
------------------------------------------------------------------------------

Summary            : compiler crashes with segmentation fault in eabi mode
		     (serious internal error)

Fixed in           : 4.4.11
Severity           : S1 - Critical / PS
Affected Component : C/C++ Compiler (cl)

Description: 
A function whose parameters are all struct-typed and passed by value,
and for which the types are all small enough to fit in int and contain 
entirely bitfields, may cause the optimiser to crash.

Defect occurs in
TMS470 Compiler versions 4.4.10, 4.5.0B1 - 4.5.0

------------------------------------------------------------------------------
9.  4.4.10 Fixed Defects
--------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00021997
------------------------------------------------------------------------------

Summary            : Optimizer abnormally terminates

Description: 
An expression that sums four variables, all short or narrower, whose 
result is cast to char, may be internally converted to an idiom that 
triggers an optimiser abort.

------------------------------------------------------------------------------
FIXED  SDSCM00023135
------------------------------------------------------------------------------

Summary            : Symbol substitution fails if more than one symbol in
		     expression

Fixed in           : 4.4.10
Severity           : S3 - Minor
Affected Component : Assembler

------------------------------------------------------------------------------
FIXED  SDSCM00023555
------------------------------------------------------------------------------

Summary            : strtol() sets errno=ERANGE when given LONG_MIN as operand

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
Prior to this bug fix, strtol() and strtoll() would set errno to ERANGE
if called to convert the string representation of LONG_MIN or LLONG_MIN, 
respectively.

------------------------------------------------------------------------------
FIXED  SDSCM00024249
------------------------------------------------------------------------------

Summary            : Linker does not allow user control for placement of RVCT
		     generated section

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 
Linker does not allow user control for placement of the data structure 
required for table driven exception handling. For ARM eabi, this 
structure is placed in the input/output sections named .ARM.exidx.  
Updated the linker to allow user placement for this section.  The user
is only allowed to place the section and it must be specified using the
name '.ARM.exidx'.  The user is not allowed to define what input sections
may go into this section since it can only be comprised of input sections 
also named '.ARM.exidx'. As a result, the linker will ignore any user section 
specifiers for the EXIDX table section.

------------------------------------------------------------------------------
FIXED  SDSCM00024948
------------------------------------------------------------------------------

Summary            : CBZ instruction is disassembled incorrectly for Cortex

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Disassembler (dis)

Description: 
CBZ instructions are disassembled incorrectly for Cortex - the 
destination label or offset is always zero.  The disassembled code will
now show the label if available, and the correct offset address.

------------------------------------------------------------------------------
FIXED  SDSCM00024989
------------------------------------------------------------------------------

Summary            : 64-bit expression constant-folded to incorrect value.

Fixed in           : 4.4.10
Severity           : S3 - Minor
Affected Component : Optimizer

Description: 
Division of a 64-bit long-long dividend can be incorrectly folded into
a constant.

Workaround: 
The problem seems specific to division of a 64-bit long-long dividend. 
Shorter types and different operations don't exhibit the same issue.

------------------------------------------------------------------------------
FIXED  SDSCM00025030
------------------------------------------------------------------------------

Summary            : Parser does not generate error for declaration after
		     executable statement when compiling in
		     relaxed ANSI mode

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Parser

Description: 
The parser will not generate an error in relaxed mode for a declaration
made after a statement.  For example

a = b + c;
int i = 0;

will not generate an error with the -pr switch.  The fix for the bug is
that the parser diagnostic switches can be used to enable this error.

-pr -pdse=270 will generate an error
-pr -pdsw=270 will generate a warning
-pr -pdsr=270 will generate a remark

------------------------------------------------------------------------------
FIXED  SDSCM00025183
------------------------------------------------------------------------------

Summary            : ARM 4.4 linker fails in virtual placement 

Fixed in           : 4.4.10
Severity           : S1 - Critical / PS
Affected Component : C/C++ Compiler (cl)

Description: 
This problem only happens when you have split in linker command file
for placement.

------------------------------------------------------------------------------
FIXED  SDSCM00025244
------------------------------------------------------------------------------

Summary            : Linker generates error "run placement fails for object
		     .text" when split operator is used for
		     allocating empty .text section

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Linker

Description: 
Linker generates error "run placement fails for object .text" when
split operator is used for allocating empty .text section across multiple 
memory regions.

------------------------------------------------------------------------------
FIXED  SDSCM00025368
------------------------------------------------------------------------------

Summary            : Compiler generates incorrect code for expression (a-b)%4
		     when a and b are both unsigned short int.

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
The optimiser may generate incorrect code for the expression (a-b)%c. 
It changes it to (a%c-b%c)%c in hopes of eliminating the outer %c and 
producing a simpler version of a%c-b%c.  However, that will not work
for cases such as (8-7)%4 = 1, 8%4 - 7%4 = -3.

Workaround: 
The compiler is looking for the exact pattern (a-b)%c, so avoiding the 
pattern will work around the problem.  The problem arises when the 
difference is negative, so avoiding cases where b>a will also work
around the problem.

------------------------------------------------------------------------------
FIXED  SDSCM00025638
------------------------------------------------------------------------------

Summary            : Linker not giving correct load address for program using
		     eabi ABI

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Linker

Description: 
When using the the --zero_init and --cinit_compression linker options, 
the linker will include decompression support routines from the RTS 
library.  The code sections that include these routines must be
allocated so that they are copied to their run addresses prior to C/C++ 
runtime initialization.  If separate LOAD and RUN placement are specified for 
these sections (they are in .text sections) then the linker will warn
the user to ensure that these sections are copied prior to 
the program being executed.  Previously, the linker would ignore any
LOAD placement specified for these sections, incorrectly warning that the
LOAD placement was missing.

Workaround: 
As a workaround use separate placement for the .text sections associated with 
these routines without specifying separate run/load or run only placement. An
example SECTIONS directive to do this would be


compr_sect  {  rtsv5_T_le_eabi.lib <copy_zero_init.obj> (.text)
					       rtsv5_T_le_eabi.lib
<copy_decompress_none.obj> (.text)
					       rtsv5_T_le_eabi.lib
<memset16.obj> (.text)
					       rtsv5_T_le_eabi.lib
<copy_decompress_rle.obj> (.text)
		 } > S_MEM		 /* Note no separate load/run
placement specified */

The linker is currently removing the load placement in one phase and
that generates the warning about the missing placement.

------------------------------------------------------------------------------
FIXED  SDSCM00025652
------------------------------------------------------------------------------

Summary            : Using --beginopts --endopts on function not in source file
		     unexpectedly affects how code is generated

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: The option -ms3, when used as an override option, gets interpreted
as a mainstream option, and is used to compile other functions.

Workaround: Do not use --beginopts and --endopts for this test case. In the
generic case, when there is a function that needs overrides, put this function
in a separate file, compile separately with the desired options, and then 
link all the object files together.

------------------------------------------------------------------------------
FIXED  SDSCM00025712
------------------------------------------------------------------------------

Summary            : Compiler crashes on zero-length array GCC extension

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
The cinit record generation wasn't accounting for zero-length arrays.
Due to this, a computation that divided an entity by the array length, 
triggered a divide by zero floating point exception. 

Workaround: 
1. Do not compile with --gcc.

Or,

2. Perform the initialization within a function, and not using cinit 
records.

------------------------------------------------------------------------------
FIXED  SDSCM00025771
------------------------------------------------------------------------------

Summary            : Linker generates fatal error #10118 when linker command
		     file uses split operator (>>) for .text section
Affected Component : ELF Linker

------------------------------------------------------------------------------
FIXED  SDSCM00025935
------------------------------------------------------------------------------

Summary            : Optimizer terminated abnormally with "-o3" option

Fixed in           : 4.4.10
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
Under certain obscure circumstances, an expression used as an argument
to memcpy() can be mishandled in such a way that it fails a 
memcpy()-specific sanity check and causes an optimiser abort.  The 
circumstances involve memcpy() and a literal constant that appears in
the argument and also elsewhere in the function.

------------------------------------------------------------------------------
FIXED  SDSCM00026048
------------------------------------------------------------------------------

Summary            : BLX not assembled correctly in thumb2

Fixed in           : 4.4.10
Severity           : S2 - Major
Affected Component : Assembler

Description: 
This fixes a bug where a BLX to a label was not being properly
assembled for Thumb-2.

Workaround: 
Temporarily switch into non-UAL thumb mode using a .state16 directive 
before using the BLX instruction and then switch back after the 
instruction.


------------------------------------------------------------------------------
10.  4.4.9 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00020710
------------------------------------------------------------------------------

Summary            : Dwarf information about return is missing

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00022275
------------------------------------------------------------------------------

Summary            : sdp470 crashes when commas used in config file

Fixed in           : 4.4.9
Severity           : S3 - Minor
Affected Component : Static Profiler (sdprof)

Description: 
sdp470 may crash when names of functions called in a config file are 
separated by commas rather then semicolons.

------------------------------------------------------------------------------
FIXED  SDSCM00023003
------------------------------------------------------------------------------

Summary            : Linker generates "INTERNAL ERROR lnk470 failed to allocate
		     memory" when linking large applications

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Linker

Description: 
Linker sometimes fails with 'INTERNAL ERROR lnk470 failed to allocate memory'
when linking large applications.

------------------------------------------------------------------------------
FIXED  SDSCM00023954
------------------------------------------------------------------------------

Summary            : cg470 crashes while building RTS

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Code Generator

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.8

------------------------------------------------------------------------------
FIXED  SDSCM00024077
------------------------------------------------------------------------------

Summary            : Abnormal termination of cg470 with
		     "INTERNAL ERROR Decomposition error" message

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.8

------------------------------------------------------------------------------
FIXED  SDSCM00024101
------------------------------------------------------------------------------

Summary            : Test case causes codegen to abnormally terminate for 
                     v4 with original TI ABI

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
FIXED  SDSCM00024328
------------------------------------------------------------------------------

Summary            : The instruction ORR.W with incorrect syntax generates
		     assembler warning instead of error and opcode is incorrect

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Assembler

Description: 
The instruction ORR.W generates assembler warning and incorrect opcode
in Thumb2 mode.

------------------------------------------------------------------------------
FIXED  SDSCM00024475
------------------------------------------------------------------------------

Summary            : Wrong opcode is generated for RFEFD SP! instruction

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Assembler

Description: 
For RFE instructions the assembler was incorrectly using the store
(STM) addressing mode encodings for stack addressing mode alternative names. 

RFEED was encoded as RFEFA
RFEEA was encoded as RFEFD
RFEFD was encoded as RFEEA
RFEFA was encoded as RFEED

as a workaround use non-stack addressing mode names

Use RFEDA for RFEFA
use RFEIA for RFEFD
use RFEDB for RFEEA
use RFEIB for RFEED

Defect occurs in
TMS470 Compiler versions 4.4.7 - 4.4.8

------------------------------------------------------------------------------
FIXED  SDSCM00024800
------------------------------------------------------------------------------

Summary            : Diassembler generates application error on certain
		     executables

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Disassembler (dis)

------------------------------------------------------------------------------
FIXED  SDSCM00024821
------------------------------------------------------------------------------

Summary            : Assembler does not generate error for MOV instruction with
		     32-bit immediate in ARM mode

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Assembler

Description: 
Assembler does not generate error for MOV instruction with 32-bit
immediate for Cortex in ARM mode

For example, MOV R2, #0xFFFFFFFF is not supported but assembler
silently assembles this as MOV R2, #0xFFFF

Defect occurs in
TMS470 Compiler versions 4.4.8

------------------------------------------------------------------------------
FIXED  SDSCM00024877
------------------------------------------------------------------------------

Summary            : Undefined symbol _setjmp when using ARM's linker

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
The TI-supplied setjmp.h defines the macro "setjmp" incorrectly in EABI
mode.  This will result in an undefined symbol "_setjmp" error when 
attempting to use a non-TI EABI-compliant linker to link an object file
with a reference to setjmp which was compiled using the TI compiler.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.8

------------------------------------------------------------------------------
FIXED  SDSCM00024893
------------------------------------------------------------------------------

Summary            : RTS snprintf() copies one additional character to the
		     output array

Fixed in           : 4.4.9
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
When user tries to copy n character to a buffer by snprintf, or
vsnprintf, it copies n characters plus a NULL terminating character to 
the buffer.  According to the standard, it should copy n-1 plus a NULL 
terminating character to the buffer.

Defect occurs in
TMS470 Compiler versions 2.40 - 2.71, 4.4.0B1 - 4.4.8


------------------------------------------------------------------------------
11.  4.4.8 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00022218
------------------------------------------------------------------------------

Summary            : ldexp() does not work correctly

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
The RTS function ldexp(x, exp) should compute x * 2^exp.  Prior to this
change, this function returned non-zero values if the parameter x was
0.0.  It could also set errno to ERANGE if x was 0.0 and the final exponent
value was out of range.  The bit manipulation used to compute the
result failed to account for the special case bit representaion of 0.0,
causing this behavior.

Defect occurs in:
TMS470 Compiler versions 2.41.beta - 2.70, 4.1.0B1 - 4.1.5, 2.54.205 -
2.54.207, 2.54.110 - 2.54.119, 4.4.0B1 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00022293
------------------------------------------------------------------------------

Summary            : Compiler generating thumb instruction not accepted by
		     assembler

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The compiler generates an illegal LSRS instruction.

Defect occurs in:
TMS470 Compiler versions 4.4.5 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00023651
------------------------------------------------------------------------------

Summary            : RTS bug in strftime() routine

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The root cause of this problem is with strftime() function. It wrongly 
call mktime() before printing the time string out. mktime() could change
the time to some garbage value if the tm structure is not cleared or
wrongly set.

Defect occurs in:
TMS470 Compiler versions 2.40 - 2.70, 4.1.0B1 - 4.1.5, 4.4.0B1 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00023652
------------------------------------------------------------------------------

Summary            : Structure defined with volatile qualifier does not carry
		     "volatile" to its members

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : Parser

Description: 
If a struct/class type is defined to be qualified the compiler may not 
treat its members as qualified when the member data is used in a 
reference-only statement where no operation is being done and the 
referenced value is not used. 

Defect occurs in:
TMS470 Compiler versions 4.1.0 - 4.1.5, 4.4.6 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00023824
------------------------------------------------------------------------------

Summary            : Assembler assembles LDR instruction without error in
		     Thumb-2 mode

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : Assembler

Description: 
The assembler is accepting the instruction LDR Rx, #0 without error in 
Thumb2 mode. This format is not supported and assembler should produce 
error. 

Defect occurs in:
TMS470 Compiler versions 4.4.6 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00023946
------------------------------------------------------------------------------

Summary            : A pipeline optimized loop is missing a memory read
		     operation in the loop kernel.

Fixed in           : 4.4.8
Severity           : S3 - Minor
Affected Component : Assembler

Description: 
A structure field that is read one way but written another can be 
incorrectly transformed in a way that gives incorrect results,
especially in a pipelined loop but also other ways.  One example is a 
field in a base class that is accessed through an inlined derived-class
member function -- one reference starts at the derived class and does
two field references (one to reach the base class, the other to reach the 
field), while the other uses a pointer cast to the base class and does 
only one field reference.  Another example is an object with a pointer 
field that is set to point to another field in another object;	then
that common field can be reached through either object.

Defect occurs in:
TMS470 Compiler versions 2.40 - 2.70, 4.1.0B1 - 4.1.5, 4.4.0B1 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00024008
------------------------------------------------------------------------------

Summary            : Incorrect code generated for quest operator in the TMS470
		     compiler

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Conditional operations are incorrectly optimized in Thumb-2 mode with -o2 
and higher. 

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.7

------------------------------------------------------------------------------
FIXED  SDSCM00024015
------------------------------------------------------------------------------

Summary            : Optimizer removes code within loop when limit of loop is
		     greater than a certain value

Fixed in           : 4.4.8
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Optimizer removes code within "for" loop with -o2 and higher
optimization when loop index is unsigned long long and limit of loop is 
greater than 0xFFFFFFFE.  Specifically, if the loop's trip count is known 
and equal to the maximum unsigned int, and the loop index variable is wider 
than int.

Defect occurs in:
TMS470 Compiler versions 4.4.0B1 - 4.4.7


------------------------------------------------------------------------------
12.  4.4.7 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00020090
------------------------------------------------------------------------------

Summary            : All RTS static variables should be declared with the
		     _DATA_ACCESS modifier

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
This fix updates the atexit mechanism to add the missing _DATA_ACCESS 
qualifier to the globals introduced as part of the atexit handler. 

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00021846
------------------------------------------------------------------------------

Summary            : Comparison between bitfield and unsigned char fails when
		     optimization enabled

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Arithmetic comparisons of a very specific form -- "x > k" and "x <= k",
where k is an unsigned constant of a type smaller than int whose value
is the maximum for that type -- can be miscompiled.  The specific value
and test are important because the bug is in the transformation of "x > k" 
into "x >= k+1" and "x <= k" into "x < k+1".

------------------------------------------------------------------------------
FIXED  SDSCM00021849
------------------------------------------------------------------------------

Summary            : Structure test cases fail when optimization is enabled

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A whole-struct assignment -- "x = y" when both x and y are struct-typed
variables -- may be incorrectly compiled if the structs are small 
(typically 2*sizeof(int) or less) and contain embedded arrays.

Defect occurs in
TMS470 Compiler versions 2.41.beta - 2.68, 4.1.0B1 - 4.1.5, 2.54.205 -
2.54.207, 2.54.110 - 2.54.117, 4.4.0B1 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00021918
------------------------------------------------------------------------------

Summary            : ARM Compiler generates invalid assembly code for
		     VFPv2/VFPv3

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
Bug occurs when

1. compiling with vfp support
2. returning a structure by value
3. structure is small and contains float/double members

Under these condition the compiler will attempt to optimize the
structure return by placing the contents into registers. It will incorrectly
handle the float/double members and generate and ill-formed assembly operand

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00021921
------------------------------------------------------------------------------

Summary            : ARM compiler generates incorrect results for test case
		     which evaluates ++ and += left-hand side side effects

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
An expression like "f().x += y" or "f()->x += y" may be transformed
into an assignment that calls f() twice, which can produce incorrect results
if f() has side effects.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00021934
------------------------------------------------------------------------------

Summary            : Linker generates runtime error R6025

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00022258
------------------------------------------------------------------------------

Summary            : opt470 crashes when -o2 is enabled 

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A loop with odd control flow -- a do-forever loop whose body consisted
of a four-level IF, two of whose clauses ended in "break" and two in 
"continue" -- provoked an optimiser crash.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00022760
------------------------------------------------------------------------------

Summary            : Placement of linker generated section handler_table should
		     be controllable by user

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 
The placement of linker generated section handler_table cannot be 
controlled by the user. It defaults to being placed in the first MEMORY
region defined in the linker command file. The following changes are
made to fix this issue

1. Changed the name of the handler table section to __TI_handler_table.
This is to make sure that the section name does not conflict with the 
user sections.

2. The linker was upaded to accept placement specification for the 
section __TI_handler_table.

3. The linker generated handler table should be in its own section. It 
cannot be combined with any other section. Linker will ensure this.

Defect occurs in
TMS470 Compiler versions 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00022829
------------------------------------------------------------------------------

Summary            : Some string functions in RTS library implemented using 
                     undefined C code

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

------------------------------------------------------------------------------
FIXED  SDSCM00022948
------------------------------------------------------------------------------

Summary            : Line number information for CRET instruction is lost when
		     compiled with optimization

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Code Generator

Description: 
The compiler may sometimes lose line number information for
instructions such as CRET that are generated with optimization. In such 
cases, user attempts to set breakpoint at the source line that generates 
the CRET instruction will instead be set on the previous C source line.

Defect occurs in
TMS470 Compiler versions 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00023015
------------------------------------------------------------------------------

Summary            : Dwarf type merging causes linker crash with segmentation
		     fault

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : COFF Linker

Description: 
When this bug happens, it usually takes a long time to link before it 
finally uses up all memory. 

Defect occurs in
TMS470 Compiler versions 4.4.4 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00023253
------------------------------------------------------------------------------

Summary            : Linker does not always perform zero initialization or user
		     requested form of cinit compression

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 
Zero initialization may not occur in EABI mode if the SECTIONS 
specification for the .bss section contains '.' assignments or
expressions other than input section match specifications.	
The linker has been updated to address this issue.

Defect occurs in
TMS470 Compiler versions 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00023266
------------------------------------------------------------------------------

Summary            : End pointer incorrect for strtol, strtoll

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Runtime Support Libraries (RTS)

Description: 
The functions strtol() and strtoll() have a parameter, char **endptr,
which should point to the first invalid character found in the input string
on return from the call.  In other words, endptr should inform the caller
of the point at which the conversion of the input string stopped.  In 
the case of a hex string conversion, the input string may be preceded
with "0x", but this is not required.  Therefore, an input string of the form
"0xz" converted to base 16 should return zero as the long (or long
long) value, and endptr should point to the 'x' character.  The error in the
code caused endptr to point to the '0' character on return.	

Defect occurs in
TMS470 Compiler versions 2.40 - 2.69, 4.1.0B1 - 4.1.5, 2.54.203 -
2.54.207, 2.54.03 - 2.54.119, 2.202.03e - 2.202.09e, 4.4.0B1 - 4.4.6

------------------------------------------------------------------------------
FIXED  SDSCM00023574
------------------------------------------------------------------------------

Summary            : ofd470 will not correctly handle some EABI-compliant
		     MontaVista archives

Fixed in           : 4.4.7
Severity           : S2 - Major
Affected Component : Object File Dump Utility (ofd)

Description: 
The nm470, ar470, ofd470 utilities and the linker will fail to read
some non-TI EABI-compliant library archives and generate a 'corrupt header' 
error.	This is due to what we expect the default values of unused
fields in the file names archive member.  The update relaxes some tests we 
use to determine if an archive header is valid.

Defect occurs in
TMS470 Compiler versions 4.4.0B1 - 4.4.6


------------------------------------------------------------------------------
13.  4.4.6 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00020600
------------------------------------------------------------------------------

Summary            : Remove calls to "malloc" from atexit

Fixed in           : 4.4.6
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

Description: 
The RTS function atexit references malloc. Therefore any application 
registering atexit functions has the malloc source linked in. 
This change updates the RTS to remove any reference to malloc from atexit. 
When registering atexit functions the users will no longer have the penalty 
of having the malloc source linked in. However, the maximum number of atexit 
functions that can be registered going forth is 32 which is the minimum 
required by the C standard. Users requiring more than that have to update 
atexit.c in the RTS source and rebuild the RTS.

Defect occurs in
TMS470 Compiler versions 4.3.0B1, 4.4.0B1 - 4.4.5

------------------------------------------------------------------------------
FIXED  SDSCM00020993
------------------------------------------------------------------------------

Summary            : Linker hangs

Fixed in           : 4.4.6
Severity           : S2 - Major
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00021143
------------------------------------------------------------------------------

Summary            : Compiler performs incorrect calculation if a temp variable
		     was used to hold the result of a
		     subtraction

Fixed in           : 4.4.6
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
A pair of statements like "tmp = B - A;  A = A - tmp;" may compile 
incorrectly.  The two combine to form "A - (B - A)";  internally, both 
A's are flagged with the same number, and when the expression is 
simplified to "2*A - B" that internal number is mistakenly applied to
2*A which is erroneously replaced with A.

Defect occurs in
TMS470 Compiler versions 2.166e - 2.171e, 2.209e, 2.40 - 2.67, 4.1.0B1
- 4.1.5, 2.54.02 - 2.54.207, 2.54.03 - 2.54.117, 2.202.03e - 2.202.08e,
4.4.0B1 - 4.4.5

------------------------------------------------------------------------------
FIXED  SDSCM00021271
------------------------------------------------------------------------------

Summary            : linker generates INTERNAL ERROR when split placement
		     specified on a UNION containing uninitialized members

Fixed in           : 4.4.6
Severity           : S2 - Major
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00021394
------------------------------------------------------------------------------

Summary            : Definitions for limits of integer types in stdint.h does
		     not conform to standard

Fixed in           : 4.4.6
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
According to C99 standard (7.18.2 paragraph 2) each macro that defines
the min/max values for the types declared in <stdint.h> must be

'suitable for use in #if preprocessing directives, and ... shall have
the same type as would an expression that is an object of the
corresponding type converted according to the integer promotion.'

The  implementation of these macros did not meet the C99 requirements
because they use casts (generating errors if used in #if directives)
and the casts were not to appropriate types for the values represented
when promoted.

Rewrote these macros to remove the casts and choose appropriately
formed constant values that will have the type as required when
evaluated in an expression.

Workaround: 
Edit the RTS header file stdint.h to change the affected macro
definitions as follows

/* 7.18.2 Limits of specified width integer types */

    #define  INT8_MAX	0x7f
    #define  INT8_MIN	(-INT8_MAX-1)
    #define UINT8_MAX	0xff

    #define  INT16_MAX	0x7fff
    #define  INT16_MIN	(-INT16_MAX-1)
    #define UINT16_MAX	0xffff

    #define  INT32_MAX	0x7fffffff
    #define  INT32_MIN	(-INT32_MAX-1)
    #define UINT32_MAX	0xffffffff

#if defined(__TMS320C55X__) || defined(_TMS320C6X)
    #define  INT40_MAX	0x7fffffffff
    #define  INT40_MIN	(-INT40_MAX-1)
    #define UINT40_MAX	0xffffffffff
#endif

#if defined(__TMS470__) || defined(_TMS320C6X) ||
defined(__TMS320C28X__)
    #define  INT64_MAX	0x7fffffffffffffff
    #define  INT64_MIN	(-INT64_MAX-1)
    #define UINT64_MAX	0xffffffffffffffff
#endif


------------------------------------------------------------------------------
14.  4.4.5 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00020191
------------------------------------------------------------------------------

Summary            : The compiler is not generating expected results with
		     optimization

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
The optimiser may deduce an incorrect result for a division when the 
types are unsigned, the numerator is a large known constant, and the 
denominator is unknown.  In attempting to estimate the division result
as ranging from numerator to -numerator, it'll end up believing the result
is the original numerator.  Depending on how that result is used within
the function, subsequent statements may be transformed incorrectly.

------------------------------------------------------------------------------
FIXED  SDSCM00020444
------------------------------------------------------------------------------

Summary            : Structure contents are not corectly displayed in watch
		     window

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : Linker

Description: 
The bug is caused by wrong type merging.  It only affects STABS debugging,
not DWARF debug.

------------------------------------------------------------------------------
FIXED  SDSCM00020591
------------------------------------------------------------------------------

Summary            : NOLOAD section type within a GROUP does not work correctly

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : Linker

Description: 
Restored linker to treat NOLOAD sections as unitialized data

NOTE: The ELF file format does not support NOLOAD section flags.  As a
result the NOLOAD keywords to do not directly map from COFF to
ELF.  Currently sections specified with NOLOAD will be treated
as uninitialized data in the output file.  When using NOLOAD in
partial links the resulting output files will not contain information
that designate a section as NOLOAD.  These sections will be treated
as uninitialize data sections in subsequent links.

------------------------------------------------------------------------------
FIXED  SDSCM00020655
------------------------------------------------------------------------------

Summary            : Linker does not produce an error message when memory
		     sections overlap

Fixed in           : 4.4.5
Severity           : S3 - Minor
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00020659
------------------------------------------------------------------------------

Summary            : Disassembler generates segmentation fault

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : Disassembler (dis)

Description: 
The TMS470 disassembler, dis470.exe, could crash when processing labels
that are greater than 80 chars.

------------------------------------------------------------------------------
FIXED  SDSCM00020661
------------------------------------------------------------------------------

Summary            : Assembler generates error for valid MOV(shifted register)
		     synonym instructions

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : Assembler

------------------------------------------------------------------------------
FIXED  SDSCM00020915
------------------------------------------------------------------------------

Summary            : Assembler does not generate error for SUBS instruction for
		     return from exception

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : Assembler

Description: 
We now emit an error for SUBS(PC return link) instruction for Cortex M3
architecture.

------------------------------------------------------------------------------
FIXED  SDSCM00020930
------------------------------------------------------------------------------

Summary            : linker does not always check for bad usage of memory range
		     in placement instruction

Fixed in           : 4.4.5
Severity           : S2 - Major
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00021142
------------------------------------------------------------------------------

Summary            : Optimiser may improperly truncate assignment to bitfield if
		     implicit widening cast

Fixed in           : 4.4.5
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)


------------------------------------------------------------------------------
15.  4.4.4 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00018797
------------------------------------------------------------------------------

Summary            : Compiler assigns wrong value to variable 

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
The SDIV and UDIV instructions on R4 are only available in THUMB mode.
We optimize ARM mode divides by switching into THUMB mode, executing 
SDIV/UDIV and then switching back into ARM mode. This is okay, except
if predication occurs.

If predication occurs, we must issue the mode switching instructions 
unconditionally. This is required so that the SDIV/UDIV instructions
can be correctly interpreted by the hardware. 

------------------------------------------------------------------------------
FIXED  SDSCM00018851
------------------------------------------------------------------------------

Summary            : cg470 generates undefined assembly symbols 

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Code Generator

------------------------------------------------------------------------------
FIXED  SDSCM00019013
------------------------------------------------------------------------------

Summary            : The compiler incorrectly replaces a MOV, CMPZ instruction 
                     pair with a ADDS #0.

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
The compiler incorrectly replaces a MOV, CMPZ instruction pair with a 
ADDS #0. Since the CMPZ instruction is effectively done in hardware via
a SUB this can cause certain cases to not be handled correctly.

------------------------------------------------------------------------------
FIXED  SDSCM00019871
------------------------------------------------------------------------------

Summary            : Library header files cause parser error with -pdse 195
		     switch

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Runtime Support Libraries (RTS)

Description: 
The run time libraries includes a use fo the _AEABI_PORTABILITY_LEVEL 
macro, intended for use with AEABI.  However, the use of this macro is 
such that with the -pdse 195 switch will generate a parser error, since
the macro is undefined.  This is correct for AEABI mode, based on  the 
AEABI standard, however this should not create an error in non-aeabi
mode.

There is also the following unused macros in the Dinkunware C header 
files that will also cause the same undefined macro error with the
-pdse 195 switch.  These macros should be included in the source.  
The macros are:
_ALT_NS, _WIN32_C_LIB, __GNUC__, _MSC_VER

------------------------------------------------------------------------------
FIXED  SDSCM00019955
------------------------------------------------------------------------------

Summary            : lnk470 fails run placement for UNION

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00019983
------------------------------------------------------------------------------

Summary            : Optimizer assigns incorrect value to variable with -o3

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Optimizer

Description: 
References to global variables which are clustered under a common base 
pointer may be lost if compiler transformations create multiple copies
of the base pointer.  (Clustering is only performed for TMS470 at -o3.)

------------------------------------------------------------------------------
FIXED  SDSCM00020012
------------------------------------------------------------------------------

Summary            : atexit() calls malloc()

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Runtime Support Libraries (RTS)

Description: 
The function atexit was changed to allow any arbitrary number of 
functions to be registered. However, that fix added the requirement 
that users allocate a heap when atexit was used. This could cause 
issues for small sized programs where the heap was never used.

This change fixes the issue by using a hybrid approach whereby we use a
statically allocated global datastructure until we need more than the 
minimum governed by the C standard. Thereafter, we switch to using the 
heap.

------------------------------------------------------------------------------
FIXED  SDSCM00020060
------------------------------------------------------------------------------

Summary            : Linker generates internal error during build

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Linker

Description: 
The crash occurs because we try to get data out of an object which does 
not exist.  A related problem, in which absolute addresess of the same value 
caused the linker's trampoline generator to get confused, is also fixed.

------------------------------------------------------------------------------
FIXED  SDSCM00020378
------------------------------------------------------------------------------

Summary            : Linker generates when trying to create holes using . +=
		     <symbol>

Fixed in           : 4.4.4
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00020452
------------------------------------------------------------------------------

Summary            : Same software built on same PC with different commands
		     results in different assembly

Fixed in           : 4.4.4
Severity           : 1 Production Stop
Affected Component : C/C++ Compiler

Description: 
There is an array representing pipeline state that was sometimes 
uninitialized. In such cases, depending on what the uninitialized value
was, there were slight differences in code generated on different 
machines. Fixed by always initializing the array to zero. Now the code 
generated for the test case is deterministic.


------------------------------------------------------------------------------
16.  4.4.3 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00018502
------------------------------------------------------------------------------

Summary            : In EABI mode, compiler looks for "c_int00" while linker
		     uses "_c_int00" as default entry point

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
The TI bare metal ABI defines the symbol _c_int00 to be the only entry 
point into a application compiled with the TI compiler. This is 
irrespective of the ABI chosen by the user. 

The issue was that if the user wrote c_int00 in "C" under our legacy 
ABI's it was automatically converted into _c_int00. In EABI mode, this 
function's name will remain c_int00 since the HLL prefix is skipped in 
EABI.

For the user, there is a EABI migration requirement that even in "C" 
files they name this application entry function "_c_int00". They can 
typically do this as follows

#if __TI_EABI_SUPPORT__
void _c_int00()
#else
void c_int00()
#endif

Within the compiler, we were not correctly recognizing this symbol in 
codegen. This fix updates codegen to properly recognize _c_int00 as the
entry function to a application in any ABI mode and skip the frame 
generation for this function.

------------------------------------------------------------------------------
FIXED  SDSCM00018773
------------------------------------------------------------------------------

Summary            : ARM assembler needs to accept LDRD/STRD with complete pair
		     specificied in UAL mode.

Fixed in           : 4.4.3
Severity           : 3 Non-Critical
Affected Component : Assembler

Description: 
The assembler will now accept LDRD/STRD rd,rd2,<addr> in arm mode if rd
is an even numbered register and rd2 is consecutive to rd2.

------------------------------------------------------------------------------
FIXED  SDSCM00018861
------------------------------------------------------------------------------

Summary            : Optimizer generates incorrect code for -o3 and eabi

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
The optimiser may incorrectly place a use of a variable ahead of its 
assignment if that variable is a parameter of an inlined function and
it is declared "const."  This problem is most likely to occur when the 
parameter is an integer, is used as an index into an array, and the use
occurs within a loop and is repeated.

------------------------------------------------------------------------------
FIXED  SDSCM00018892
------------------------------------------------------------------------------

Summary            : Linker symbol in linker command file gets assigned
		     incorrect value

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Linker

Description: 
Linker symbol in linker command file gets assigned incorrect value.

For example

  _Mem_Pool_End = .;
  _MEM_POOL_SIZE = . - _Mem_Pool_Start;

gets assigned the correct value.
 
But
  
  _Mem_Pool_End = .;
  _MEM_POOL_SIZE = _Mem_Pool_End - _Mem_Pool_Start;

does not get assigned the correct value.

------------------------------------------------------------------------------
FIXED  SDSCM00019050
------------------------------------------------------------------------------

Summary            : Assembler generates error for MOV instruction with certain
		     immediates

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Assembler

Description: 
The assembler did not accept MOV instr. with 16-bit imm. operands (for
Thumb2 arm state). It would accept them when written as MOVW. Modified
assembler to accept MOV (wide) with 16-bit imm. even when written just
as MOV. 

------------------------------------------------------------------------------
FIXED  SDSCM00019258
------------------------------------------------------------------------------

Summary            : Diagnostic report prints garbage at the end of certain
		     messages

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Code Generator

Description: 
This bug manifests as garbage  printed at the end of an error or 
warning message, in cases where the last line of the printed message
has only one valid character

------------------------------------------------------------------------------
FIXED  SDSCM00019375
------------------------------------------------------------------------------

Summary            : Assembler incorrectly handles encodes LDRD instructions as
		     LDR without any warning or error

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Assembler

Description: 
The thumb2 assembler incorrectly accepts an incorrect, 2 operand LDRD
or STRD instruction without a warning or error.  It will encode a
LDRD/STRD Rd,<addr> instruction as a LDR or STR instruction.

------------------------------------------------------------------------------
FIXED  SDSCM00019396
------------------------------------------------------------------------------

Summary            : Optimizer generates incorrect code for left shift operation
		     with -mf=3 option

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Optimizer

Description: 
An expression like (x<<4)/25, at higher levels of optimisation, may 
produce the wrong answer if x<<4 shifts 1-bits further than be held in 
x's type.  The key requirements are a shift-off-the-end and a division
by a constant integer;  their combination leads to the wrong answer.

------------------------------------------------------------------------------
FIXED  SDSCM00019399
------------------------------------------------------------------------------

Summary            : Missing DWARF information for thumb2 function calls

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Code Generator

Description: 
Dwarf branch ID information was missing for thumb-2 calls.

------------------------------------------------------------------------------
FIXED  SDSCM00019409
------------------------------------------------------------------------------

Summary            : Linker generates fatal error #10246

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Linker

Description: 
Linker is aborting with an internal error when one or more UNION
members are empty output sections.

------------------------------------------------------------------------------
FIXED  SDSCM00019563
------------------------------------------------------------------------------

Summary            : Optimizer generates incorrect code with -mf=3 and higher

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Optimizer

Description: 
A variable of an unsigned type narrower than int, especially a local 
static or a global, that is used in a conditional test in a way that 
depends upon the wraparound behavior of unsigned types, may be
mishandled in such a way as to lose the wraparound.

------------------------------------------------------------------------------
FIXED  SDSCM00019569
------------------------------------------------------------------------------

Summary            : lnk470 creates empty .args section with --args=0
		     command-line option

Fixed in           : 4.4.3
Severity           : 3 Non-Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00019659
------------------------------------------------------------------------------

Summary            : Linker does not correctly overlay sections within UNION
		     statement

Fixed in           : 4.4.3
Severity           : 2 Critical
Affected Component : Linker

Description: 
When a UNION is a member of a GROUP, its members are being placed 
contiguously in memory instead of all starting at the same address.


------------------------------------------------------------------------------
17.  4.4.2 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00018551
------------------------------------------------------------------------------

Summary            : Linker generates internal error when encountering symbols
                     defined multiple times
Fixed in           : 4.4.2
Severity           : 2 Critical
Affected Component : Linker

Description: 
Linker generates an error when symbol has been defined in
linker command file as well as one of the object files being linked.

With earlier version v4.1.x, linker only generates a warning about
symbol being redefined

------------------------------------------------------------------------------
FIXED  SDSCM00018728
------------------------------------------------------------------------------

Summary            : Procedure for rebuilding runtime libraries does not work 
                     as documented
Fixed in           : 4.4.2
Severity           : 2 Critical
Affected Component : Runtime Support Libraries (RTS)

Description: 
Trying to build new libraries by following the procedure documented in
rtssrc_zip_README.txt does not work. 

Used perl and gmake as described in the readme. But it fails with the
following error

>gmake rtsv4_T_be_tiarm9abi.lib

"--fp_mode=strict	      -mt --abi=ti_arm9_abi" was unexpected at
this time.
gmake *** [rtsv4_T_be_tiarm9abi.lib] Error 255

------------------------------------------------------------------------------
FIXED  SDSCM00018760
------------------------------------------------------------------------------

Summary            : In "TIABI", static local variable of inline function should
		     be promoted to file level static instead of global
Fixed in           : 4.4.2
Severity           : 2 Critical
Affected Component : Parser

------------------------------------------------------------------------------
FIXED  SDSCM00019070
------------------------------------------------------------------------------

Summary            : Both STYP_DATA and STYP_BSS section header flags are set
                     for the same section
Fixed in           : 4.4.2
Severity           : 2 Critical
Affected Component : Linker

Description: 
An initialized section has both STYP_DATA and STYP_BSS section header flags
set.  As this is an initialized section, only STYP_DATA is expected to be set.


------------------------------------------------------------------------------
18.  4.4.1 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00016936
------------------------------------------------------------------------------

Summary            : improve etsi intrinsics robustness

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Code Generator

Description: 
Some macros in the etsi.h do not correctly model the application code. 

------------------------------------------------------------------------------
FIXED  SDSCM00017244
------------------------------------------------------------------------------

Summary            : Linker warns about .stack section with default size even
		     when boot code from rts is not linked in

Fixed in           : 4.4.1
Severity           : 3 Non-Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00018326
------------------------------------------------------------------------------

Summary            : Include file dependency information file generated with
		     -ppd option does not contain full path to object file

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
An issue where the path to the object file was not included in a 
dependency file when -ppd and -fr were used in conjunction has been
fixed.

------------------------------------------------------------------------------
FIXED  SDSCM00018473
------------------------------------------------------------------------------

Summary            : ARM assembler can incorrectly generate an error when
		     assembling UAL assembly for v6 and prior targets

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Assembler

Description: 
This fixes a bug where the assembler might report an error for a valid 
instruction when assembling Thumb UAL code for ARMv6 or earlier.

------------------------------------------------------------------------------
FIXED  SDSCM00018504
------------------------------------------------------------------------------

Summary            : Disassembler does not extract symbolic information from
		     .out file when load and run address of section are 
		     different

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Disassembler

Description: 
Symbol names are now properly displayed by the disassembler when load
and runtime addresses differ.

------------------------------------------------------------------------------
FIXED  SDSCM00018625
------------------------------------------------------------------------------

Summary            : Section length of auxiliary table entry within symbol 
                     table in COFF file is incorrect

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Linker

Description: 
Section symbol auxiliary entry values are now based on the input 
section.  This restores the behavior of auxiliary entries to what it
was in previous releases of the ARM compiler.

------------------------------------------------------------------------------
FIXED  SDSCM00018655
------------------------------------------------------------------------------

Summary            : Linker gets internal error (out of memory) if user
		     specifies .debug_info output section in LCF

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00018730
------------------------------------------------------------------------------

Summary            : DIV Thumb2 instruction incorrectly disassembled

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Disassembler

Description: 
The Cortex-R4/M3 UDIV and SDIV instructions are now correctly displayed
by the disassembler.

------------------------------------------------------------------------------
FIXED  SDSCM00018769
------------------------------------------------------------------------------

Summary            : Encoding for LDRD instruction incorrect

Fixed in           : 4.4.1
Severity           : 2 Critical
Affected Component : Assembler

Description: 
The Thumb-2 LDRD/STRD instructions were being encoded incorrectly the 
address had no offset, for example LDRD r0, r1, [r2].  This has now
been fixed.


------------------------------------------------------------------------------
19.  4.4.0 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00008189
------------------------------------------------------------------------------

Summary            : Include path specified using -i option can have max of 260
		     characters on Windows platform

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : Parser

Description: 
If the search path used by the compiler to search for include files 
exceeds 260 characters, it will not be able to find the file. This 
enhancement request is for the compiler to compress paths to eliminate 
duplicates, and also warn the user when the length of a path exceeds 
the platform limit.

------------------------------------------------------------------------------
FIXED  SDSCM00016907
------------------------------------------------------------------------------

Summary            : ARMv6 intrinsics don't enforce immediate operands

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : Parser

Description: 
Using one of the ARMv6 multimedia intrinsics now returns a
comprehensible error message instead of an internal compiler or 
assembler error

------------------------------------------------------------------------------
FIXED  SDSCM00017351
------------------------------------------------------------------------------

Summary            : Disallow --gcc in C++ mode

Fixed in           : 4.4.0
Severity           : 3 Non-Critical
Affected Component : Parser

------------------------------------------------------------------------------
FIXED  SDSCM00017781
------------------------------------------------------------------------------

Summary            : Assembler generates internal error when compiled for Thumb2

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : Assembler

Description: 
This fix resolves an issue where the assembler could crash when 
processing 16-bit hint instructions for Thumb-2.  

------------------------------------------------------------------------------
FIXED  SDSCM00017784
------------------------------------------------------------------------------

Summary            : TMS470 pc assembler crash and spurious warnings in thumb2
		     mode

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
This fix resolves a bug that could cause the assembler to crash or 
produce spurious warnings when assembling ARMv6 multimedia instructions
using unified assembly language syntax.

------------------------------------------------------------------------------
FIXED  SDSCM00018089
------------------------------------------------------------------------------

Summary            : Linker should collect unmentioned subsections under base
		     name output scn when linking with
		     '-ar'

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00018127
------------------------------------------------------------------------------

Summary            : Arm assembler does not flag as an error a BLX conditional
		     to a target address instruction

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : Assembler

------------------------------------------------------------------------------
FIXED  SDSCM00018337
------------------------------------------------------------------------------

Summary            : linker does not accept RUN_START(_sym) link-time symbol
		     definition on a UNION

Fixed in           : 4.4.0
Severity           : 2 Critical
Affected Component : Linker


------------------------------------------------------------------------------
20.  4.4.0B3 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00016913
------------------------------------------------------------------------------

Summary            : ARM disassembler doesn't handle data properly in Thumb-2

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : Disassembler

------------------------------------------------------------------------------
FIXED  SDSCM00016922
------------------------------------------------------------------------------

Summary            : Having two function names foo and _foo that differ in their
		     name by the leading underscore crashes the optimizer

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : Optimizer

Description: 
The artificial situation of having two functions whose names differ by 
only an initial underscore (ie, foo and _foo) in the same file may
cause the optimiser to crash.

Workaround: 
Technically (that is, according the C language standard) identifiers 
beginning with an underscore are reserved for the C implementation, so
we are not obligated to produce a correct result with this program.  The 
functions should be renamed.

------------------------------------------------------------------------------
FIXED  SDSCM00016956
------------------------------------------------------------------------------

Summary            : Optimizer generating wrong code for assignment of variable

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
Certain expressions of the form "A.b op= ... A.b ..." will lead the 
optimiser to promote A.b to a register in a way that leaves a temporary
variable used before it is defined.

------------------------------------------------------------------------------
FIXED  SDSCM00017080
------------------------------------------------------------------------------

Summary            : Some static variables are not defined when optimization is
		     enabled

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : Optimizer

Description: 
A non-static local aggregate variable whose initialisation contains the
address of a static local variable may cause a compilation failure.

------------------------------------------------------------------------------
FIXED  SDSCM00017107
------------------------------------------------------------------------------

Summary            : Parser generates internal error when processing certain C++
		     files

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : C/C++ Compiler

------------------------------------------------------------------------------
FIXED  SDSCM00017276
------------------------------------------------------------------------------

Summary            : Linker generates warning "LOAD placement required for
		     initialized object .stack9"

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00017279
------------------------------------------------------------------------------

Summary            : memcpy and memset object files from RTS are pulled into the
		     link even when not referenced

Fixed in           : 4.4.0B3
Severity           : 3 Non-Critical
Affected Component : Linker

Description: 
RTS function modifications have been made to avoid linking in unneeded 
RTS functions.

------------------------------------------------------------------------------
FIXED  SDSCM00017488
------------------------------------------------------------------------------

Summary            : Linker is not resolving links to 16bit code correctly

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : Linker

Description: 
The linker was not correctly resolving the address to a 16-bit cinit
section.

------------------------------------------------------------------------------
FIXED  SDSCM00017668
------------------------------------------------------------------------------

Summary            : The compiler generates a U-DIV library call instead of a
		     correct I-DIV call

Fixed in           : 4.4.0B3
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
The code generator is changing an expression of the form (A * (B * C)) into
((A * B) * C).  In some cases, the codegen uses the type of (B * C) for
the type of the new expression.  This can cause a bug if this expression
is part of a larger divide or shift-right expression.  It could result
in the wrong DIV run-time library call being generated.


------------------------------------------------------------------------------
21.  4.4.0B2 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00015816
------------------------------------------------------------------------------

Summary            : MCR/MRC disassembly incorrect for Cortex

Fixed in           : 4.4.0B2
Severity           : 2 Critical
Affected Component : Disassembler

------------------------------------------------------------------------------
FIXED  SDSCM00016296
------------------------------------------------------------------------------

Summary            : Assignments to a 'register volatile' variable without any
		     corresponding use get eliminated

Fixed in           : 4.4.0B2
Severity           : 2 Critical
Affected Component : Code Generator

Description: 
The TMS470 compiler no longer eliminates accesses to register volatile
variables without corresponding uses.

------------------------------------------------------------------------------
FIXED  SDSCM00016404
------------------------------------------------------------------------------

Summary            : Assembler generates segmentation fault

Fixed in           : 4.4.0B2
Severity           : 2 Critical
Affected Component : Assembler

------------------------------------------------------------------------------
FIXED  SDSCM00016519
------------------------------------------------------------------------------

Summary            : Incorrect relocation of BLX instruction after a partial
		     link

Fixed in           : 4.4.0B2
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
22.  4.4.0B1 Fixed Defects
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSsq36817
------------------------------------------------------------------------------

Summary: .set to floating point value may cause cross-host differences

Description:
Defining an absolute symbol in terms of a floating-point constant is
not supported by the object file format generated by the assembler.
All absolute symbols MUST be defined with integer values.

------------------------------------------------------------------------------
FIXED  SDSsq38818
------------------------------------------------------------------------------

Summary: assembler misses label immediately before macro definition

Description:
The assembler may not include a label in the object file if it is 
declared immediately before a macro definition.

------------------------------------------------------------------------------
FIXED  SDSsq43405
------------------------------------------------------------------------------

Summary: Undefined symbol linker error:std::_nothrow   

------------------------------------------------------------------------------
FIXED  SDSsq44766
------------------------------------------------------------------------------

Summary: Linker does not generated XML info for trampolines or veneer 
         functions

Description:
When using the -xml_link_info linker option, the linker does not 
generate XML information for trampolines or linker-generated veneer 
functions.  This information appears in the regular ASCII map file.

------------------------------------------------------------------------------
FIXED  SDSsq44787
------------------------------------------------------------------------------

Summary: function inlining cause wrong constant propagation

Description:
The optimiser's parameter-specialisation pass may incorrectly conclude
that a function's parameter is always passed the same value, under
particular circumstances including one call that passes a global variable
and another that passes a dereference of a pointer-to-void.

------------------------------------------------------------------------------
FIXED  SDSsq44806
------------------------------------------------------------------------------

Summary: Loop inversion optimization problem with -o2 

Description:
At optimisation levels -o2 or -o3, a loop with a pointer-typed index
variable, and an iteration range that is not divisible by the loop
increment, may incorrectly iterate one extra time.  For example, a loop
of char*x from &a to &a+4 by 16;  it should only iterate once.

------------------------------------------------------------------------------
FIXED  SDSsq44811
------------------------------------------------------------------------------

Summary: optimizer passes wrong memory dependency information to codegen

Description:
The optimiser may fail to note the dependence between two accesses when
the offset is negative, ie, a read and write of x[-1].

------------------------------------------------------------------------------
FIXED  SDSsq44815
------------------------------------------------------------------------------

Summary: Constant folding in optimizer is wrong for a unsigned short bitfield

Description:
The optimiser may mishandle an embedded assignment to a bitfield whose
type is narrower than int.  For example, "if ((a.b >>= 1) != 100" where
b is a bitfield.  Only C++ with EABI can exhibit the problem;  C only
allows "int" as a bitfield type, and non-EABI C++ promotes the field to
int.

------------------------------------------------------------------------------
FIXED  SDSsq44833
------------------------------------------------------------------------------

Summary: optimizer remove the assignment to a global variable

Description:
The optimiser may erroneously remove assignments to global variables from
functions whose only exit is a throw, when compiling C++ code in EABI
mode with exceptions enabled.

------------------------------------------------------------------------------
FIXED  SDSsq44864
------------------------------------------------------------------------------

Summary: Optimizer generates wrong code for function calls involving state 
         change

Description:
Optimizer may not preserve register contents for function calls 
involving mode changes from 32 BIS to 16 BIS.

------------------------------------------------------------------------------
FIXED  SDSsq44867
------------------------------------------------------------------------------

Summary: IF statement is wrongly removed

Description:
The expression "(a/b)%K", where a, b, and K are all unsigned and K is a
literal integer, when used as the predicate of an IF, may be incorrectly
determined never to equal zero, causing the IF to fold away.  The problem
only affects such expressions when used as conditional predicates, not
when calculating their values.

------------------------------------------------------------------------------
FIXED  SDSsq44897
------------------------------------------------------------------------------

Summary: Optimizer removes field node for STREF node

Description:
When compiling for ARM Neon, an expression that computes a minimum or
maximum of at least one structure access may lose the field part of the
access.  Requirements:  --neon, -o2 or -o3, expression equivalent to
MIN/MAX, structure access (. or ->) as one argument to MIN/MAX.

------------------------------------------------------------------------------
FIXED  SDSsq44976
------------------------------------------------------------------------------

Summary: Optimizer crashes in thumb/neon mode

Description:
Certain code patterns that lead to "a = b = c" situations where a, b, and
c are all small structures may cause optimiser aborts for ARM or Thumb
in Neon mode only.

------------------------------------------------------------------------------
FIXED  SDSsq45020
------------------------------------------------------------------------------

Summary: No CODE16 or CODE32 symbols are generated for veneers

Description:
Linker generated veneers do not create CODE16 or CODE32 symbols for 
the veneer code.  This can cause problems in the disassembler and 
debugger since they may set the code-state of the veneer on code 
placed next to the veneer.

------------------------------------------------------------------------------
FIXED  SDSsq45403
------------------------------------------------------------------------------

Summary: BOOT table is different for test case, based on where sections are

Description:
Hex file contains differences in boot table, based on where certain 
object file sections are placed.

------------------------------------------------------------------------------
FIXED  SDSCM00008178
------------------------------------------------------------------------------

Summary            : Incorrect handling of static initialization of const
		     variables

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Optimizer

Description: 
Static initialization of const variables of an enum type are not done 
correctly if optimizer is used. 

Workaround: 
Use int-typed variables instead of enum-typed variables, or avoid
adding qualifiers (const, volatile, restrict, etc) to enum-typed variables.

------------------------------------------------------------------------------
FIXED  SDSCM00008220
------------------------------------------------------------------------------

Summary            : Linker gen copy tables - copy_in does not handle copies
		     with 0 records

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00008240
------------------------------------------------------------------------------

Summary            : The atexit() call in the RTS exit.c file increases
		     code-size.

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
The atexit() routine is placed in exit.c which has exit(), abort(). The
routins,exit() and abort() are necessary for almost all applications,
however atexit() is only needed when the user registers atexit
functions.  Having them all in one file will make the linker link in
the atexit() routine into every application which results in
unnecessary code.  The fix is to split the atexit() out into a single
file and have it shared across all targets.

------------------------------------------------------------------------------
FIXED  SDSCM00008296
------------------------------------------------------------------------------

Summary            : format changed for DW_OP_plus_uconst from hex to dec 
		     affects scripts

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : OFD Utility

Description: 
Changed format in OFD XML from hex to dec breaks scripts.

------------------------------------------------------------------------------
FIXED  SDSCM00008344
------------------------------------------------------------------------------

Summary            : Wrong use of -b linker switch can cause linker crash.

Fixed in           : 4.4.0B1
Severity           : 3 Non-Critical
Affected Component : Linker

Description: 
If the -b linker switch is used after listing the object files the 
linker will try to generate a warning.	However, the call to the 
linker warning routine can cause a linker crash.

Workaround: 
Use the shell, cl470, for linking or use -b correctly before any object
files.

------------------------------------------------------------------------------
FIXED  SDSCM00008643
------------------------------------------------------------------------------

Summary            : Linker complains about compiler generated '.template'
		     section

Fixed in           : 4.4.0B1
Severity           : 3 Non-Critical
Affected Component : Linker

Description: 
Fixed the linker to not emit missing SECTIONS specification warning for
sections that do not get assigned to memory. E.g. .template sections

------------------------------------------------------------------------------
FIXED  SDSCM00009857
------------------------------------------------------------------------------

Summary            : XML options dump not showing LINKER options

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Shell

Description: 
XML option description produced by the compiler has two <TOOL tag="COMPILER"> 
entities while the second should read <TOOL tag="LINKER">.

------------------------------------------------------------------------------
FIXED  SDSCM00010512
------------------------------------------------------------------------------

Summary            : Deeply derived template function causes SIGSEGV

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Code Generator

Description: 
Compiler segfaults when compiling a file with a very long mangled name
(greater than 32K chars in length)

------------------------------------------------------------------------------
FIXED  SDSCM00011094
------------------------------------------------------------------------------

Summary            : Internal error from parser for function redeclaration with
		     incompatible name linkage

Fixed in           : 4.4.0B1
Severity           : 3 Non-Critical
Affected Component : Parser

Description: 
The compiler (parser) previously aborted on some error cases involving
the redeclaration of a function with internal linkage first declared with
extern "C" name linkage.  For example
 
  extern "C" namespace N {
    extern void f();
    static void f();	  // Error incompatible linkage
  }
  namespace N {
    static void f() {}	  // Previously triggered an abort.
  }

------------------------------------------------------------------------------
FIXED  SDSCM00012307
------------------------------------------------------------------------------

Summary            : Need a macro to reflect the command-line state of the
		     --runtime option

Fixed in           : 4.4.0B1
Severity           : 1 Production Stop
Affected Component : C/C++ Compiler

Description: 
The compiler will predefine the following macros based on which default
run-time library header file path is chosen.  There are 2 possible 
default library paths with the compiler toolset, found in the include
directory rts/ or lib/.  The rts directory contains the legacy C header
files.	The lib directory contains the C and C++ header files from the
Dinkumware libraries.  The compiler will set the header file directory
based on the value of the --runtime switch.  If --runtime=rts switch is set,
or the switch is not used, the following macro is defined

	__TI_RUNTIME_RTS__

If the --runtime=cpp switch is set, the following macros are defined

	__TI_RUNTIME_DNK__
	__TI_RUNTIME_CPP__

------------------------------------------------------------------------------
FIXED  SDSCM00013010
------------------------------------------------------------------------------

Summary            : Offset out of range for very large switch statement

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
For a test case with a large switch statement, the compiler could
potentially hoist too many instructions between the ADR instruction 
corresponding to the load of the switch table label and the label itself 
pushing the label out of range of the ADR. 

------------------------------------------------------------------------------
FIXED  SDSCM00013011
------------------------------------------------------------------------------

Summary            : Precompiled headers --pch do not work on PC compiler tools

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Parser

------------------------------------------------------------------------------
FIXED  SDSCM00013257
------------------------------------------------------------------------------

Summary            : When interlinking ARM and Thumb2 code the linker sometimes
		     patches BL to BLX incorrectly

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00013414
------------------------------------------------------------------------------

Summary            : The codegen incorrectly determines CZB branch is a valid
		     instruction in thumb2 mode.

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Code Generator

------------------------------------------------------------------------------
FIXED  SDSCM00013472
------------------------------------------------------------------------------

Summary            : cpy_tbl.h should guard against multiple inclusions and C++
		     name mangling

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00013906
------------------------------------------------------------------------------

Summary            : Assembler generates illegal mnemonic error for SVC
		     instruction

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Assembler

------------------------------------------------------------------------------
FIXED  SDSCM00014006
------------------------------------------------------------------------------

Summary            : Compiler emits incorect Dwarf type name for C++ "string"
		     variables

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : C/C++ Compiler

------------------------------------------------------------------------------
FIXED  SDSCM00014045
------------------------------------------------------------------------------

Summary            : Optimizer allocating variable at offset on stack that does
		     not satisfy alignment requirements

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : C/C++ Compiler

Description: 
When arranging to share stack space among aggregate (array or struct)
objects that are defined in disjoint scopes, the optimiser may fail to 
properly align one that comes from an inner scope.  The problem arises 
when both outer and inner scopes define aggregates, a sub-object in an 
inner-scope aggregate requires 64-bit alignment, and the overall alignment
of the outer-scope objects is only aligned to 32 bits.

------------------------------------------------------------------------------
FIXED  SDSCM00014149
------------------------------------------------------------------------------

Summary            : Demangler formats DOS line endings incorrectly

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Demangler

------------------------------------------------------------------------------
FIXED  SDSCM00014252
------------------------------------------------------------------------------

Summary            : strip470 generates Segmentation fault on .obj files
		     compiled for TI ARM7 ABI

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Strip Utility

Description: 
Fixed strip470's ability to properly strip .obj files compiled for TI ARM7 
ABI without crashing.

------------------------------------------------------------------------------
FIXED ISSUE  SDSCM00014412
------------------------------------------------------------------------------

Summary            : Array bounds read / improper decoding in ARM NEON
		     disassembler
Fixed in           : 4.4.0B1
Affected Component : Disassembler

Description: 
Disassembler is not decoding the NEON instruction "F9E3F4CD" properly. 
It is causing an array bounds read in the disassembler which will
either result in incorrect disassembly and/or a seg fault depending on
the host/compiler combination.

------------------------------------------------------------------------------
FIXED  SDSCM00014525
------------------------------------------------------------------------------

Summary            : Precompiled headers do not work

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : C/C++ Compiler

------------------------------------------------------------------------------
FIXED  SDSCM00015496
------------------------------------------------------------------------------

Summary            : Assembler assembles LDR instruction without error

Fixed in           : 4.4.0B1
Severity           : 2 Critical
Affected Component : Assembler

Description: 
The assembler is accepting this form of the instruction as an alias for
LDR Rx,[R15,#0].  This alias should not be allowed.

Workaround: 
The instruction is being accepted by the assembler as an alias for LDR
Rx,[R15,#0].  


------------------------------------------------------------------------------
23. Current Known Issues
------------------------------------------------------------------------------

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008203
------------------------------------------------------------------------------

Summary            : Assembler crash with wrong syntax in thumb asm code
Affected Component : Assembler

Description: 

The assembler will crash with the following wrong thumb syntax

BLT 0x8c

the correct syntax is 

BLT #0x8c

but the assembler shouldn't crash.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008248
------------------------------------------------------------------------------

Summary            : Compilers on PC will not work without TMP set
Affected Component : C/C++ Compiler
                                                                                
Description:
When compiling on the PC, the code generator cannot find the icode
file produced by the parser if the environment variable TMP is not
set.  If TMP is set, then all appears well.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008251
------------------------------------------------------------------------------

Summary            : Printf format '%#04x' fills zeros into wrong location
Affected Component : Code Generator

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008276
------------------------------------------------------------------------------

Summary            : Linker accepts illegal address ranges and truncates to a
		     valid address
Affected Component : Linker

Description: 

Linker accepts illegal address ranges and truncates to a valid address 
without any warnings.

For example if the following syntax is used in a command file

ROMDATA (RI)  origin=0x001df0000 length=0x00020fe0 

The begin address for ROMDATA has got 9 (!) digits. Obviously, the 
linker reads this address from the end and reads only 8 digits. 

So the following address is used for ROMDATA origin=0x01df0000. 

Unfortunately, the linker does not print out any warnings. 

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008340
------------------------------------------------------------------------------

Summary            : directory name with '(' character causes linker error
Affected Component : Shell
										Description:
CCS3.1 will report an error linking if the project path contains a '(' in a
directory name.  The linker error does not occur from the command line.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008410
------------------------------------------------------------------------------

Summary            : Assembler crashes when using constant operand to BEQ
Affected Component : Assembler

Description: 

When you try to use a constant operand to a BEQ instruction (and maybe 
others), the assembler crashes.  I don't believe we support this 
operand type for BEQ, but the assembler should generate an error 
instead of crash.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008465
------------------------------------------------------------------------------

Summary            : Language Conformance Codegen crash because of void pointer
		     dereference
Affected Component : Parser

Description: Dereferencing a void pointer is illegal in ANSI C. The parser 
should flag this as an error. Instead it passes the code to the codegen which
then fails to match the code, and generates internal error.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008534
------------------------------------------------------------------------------

Summary            : Linker -xml_link_info option doesn't work when in a 
                     command file Affected 
Component          : Linker
                                                                                Description:
The option --xml_link_info=file.xml does not work when it is placed inside a
linker command file.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008537
------------------------------------------------------------------------------

Summary            : assembler expression ~(0x80000000) evaulates as 0x80000000
Affected Component : Code Generator

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008543
------------------------------------------------------------------------------

Summary            : Forward reference in .space generates an internal error
Affected Component : Assembler

Description: 
If you attempt to assemble

 .space 0+a
b
a .set 1

the assembler will generate an internal error.

If you change the code to

 .space a
b
a .set 1

the correct error message is generated, 'Absolute, well-defined 
integer value expected'

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008556
------------------------------------------------------------------------------

Summary            : Trampolines not included in XML map file
Affected Component : Linker

Description: 
The XML map file does not include trampolines info, even when
the standard text map file does.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008721
------------------------------------------------------------------------------

Summary            : Linker unexpectedly adds STYP_DATA flag into a text
sectionAffected Component : Linker                                                                                 
Description: The linker should not allow a zero-length input section to affect
the characteristics of the output section in which it is allocated.
                                                                                
------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008928
------------------------------------------------------------------------------

Summary            : Extern inline functions are not supported in C/C++
		     Compiler
Affected Component : Parser

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008930
------------------------------------------------------------------------------

Summary            : C++ allows enumerators larger than 'int' 
Affected Component : Parser

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00008931
------------------------------------------------------------------------------

Summary            : bit fields > 32 bit  are not supported although they're
		     legal in C++
Affected Component : Parser

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00010718
------------------------------------------------------------------------------

Summary            : bad input causes ARM assembler to crash
Affected Component : Assembler

Description: 
Assembly file with bad input causes the assembler to crash

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00012798
------------------------------------------------------------------------------

Summary            : Linker map file does not print "beta" or "alpha" with
		     version number
Affected Component : Linker

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00013456
------------------------------------------------------------------------------

Summary            : fgets in _IONBF mode does not respect size limit
Affected Component : Runtime Support Libraries (RTS)
                                                                                
Description:
The second argument to fgets() is the maximum number of chars to read.  In
_IONBF mode, fgets() reads until end-of-line, potentially overrunning the
input buffer.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00014430
------------------------------------------------------------------------------

Summary            : calloc doesn't check arguments to make sure the requested
                     size is reasonable
Affected Component : Runtime Support Libraries (RTS)
                                                                                
Description:
The function calloc() is required to return a pointer to memory representing
"nelem" copies of "size" bytes, or NULL if the request cannot be satisfied.
However, for some values of "nelem" and "size" (specifically when the result
of nelem*size wraps around), calloc can return a pointer to an object that is 
not large enough, rather than NULL.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00016145
------------------------------------------------------------------------------

Summary            : Incorrect padding of wider-than-int bit-field initializers
Affected Component : Code Generator

Description: 
In EABI mode, where 64-bit bit-field container types are allowed, the
codegen does not properly pad bit-fields wider than 32 bits.  This is
particularly noticable when the bit-field is preceeded by a one-bit
field.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00016909
------------------------------------------------------------------------------

Summary            : Assembler fails when an unaligned .field is used
Affected Component : Assembler

Description: 
A .field directive can cause the assembler to crash if it is not
preceded by a .align directive.  This is due to how fields are placed
and the interaction with jump expansion.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00016910
------------------------------------------------------------------------------

Summary            : Assembler doesnt restrict D register usage for VFP/NEON
Affected Component : Assembler

Description: 
The assembler does not make sure that only the first 16 D registers are
used for VFPv2 and VFPv3D16.  It also allows D regs in a list that
expects S registers and allows more than 16 registers in a FLDM/FSTM
register list.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00017607
------------------------------------------------------------------------------

Summary            : The -ppd switch does not work with .cdecls or .include 
                     directive in assembly source files
Affected Component : C/C++ Compiler

Description: 
Logically, if a file is included into another file then that included
file becomes a dependency for the one that includes it. Then, if -ppd
option is used in compiler invocation it shall generate proper
dependency information. Compiler does this for #include in C files but
it does not happen for .cdecls in assembly files.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00018347
------------------------------------------------------------------------------

Summary            : No linker warning when input section alignment overrides
		     user specified alignment
Affected Component : Linker

Description: 
The older linker would generate this error if an input section
alignment was greater than a user's specified alignment

>> warning Output section ".bss"'s user specified run alignment of 4 is
	    overridden to be 2048 by the required alignment of the
            input section in "file.obj"
 
The new linker does not generate any warning.  

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00018691
------------------------------------------------------------------------------

Summary            : Linker gives misleading warning when dot expressions used
		     in SECTION directive for .stack
		     section
Affected Component : Linker

Description: 
Linker gives the warning

warning creating ".stack" section with default size of 0x800; use the
-stack option to change the default size

even when the application does not link in boot code from RTS lib.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00019815
------------------------------------------------------------------------------

Summary            : Compiler should not generate any error output when using
		     -qq and -pdf
Affected Component : C/C++ Compiler

Description: 
Compiler sends error messages to STDOUT with -qq and -pdf.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00020565
------------------------------------------------------------------------------

Summary            : Dwarf information is incorrect for indirect calls and
		     returns for ARM7 TI_ARM9_ABI
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00021302
------------------------------------------------------------------------------

Summary            : Format of constants in disassembly not consistent between
		     16 and 32 bit instructions for Thumb2
Affected Component : Disassembler (dis)

Description: 
CCS disassembly window shows constants in 16 bit instructions as hex
values and constants in 32 bit instructions as decimal values. The
problem appears with the dis470 tool.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00021881
------------------------------------------------------------------------------

Summary            : Assembler does not recognize macros without .thumb
		     directive
Affected Component : Assembler

Description: 
Assembly source file with macros such as the following does not
assemble correctly when invoked with asm470, but does with cl470.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00022824
------------------------------------------------------------------------------

Summary            : Assembler not checking illegal registers of all Thumb-2
		     instructions
Affected Component : Assembler

Description: Some registers are illegal for certain Thumb-2 instructions.
The assembler needs to catch them and issue and error message.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00023294
------------------------------------------------------------------------------

Summary            : Linker accepts --abi=eabi option and gives misleading error
Affected Component : Linker

Description: 
If --abi=eabi option is passed to the linker, it accepts it (even
though it is a shell option not a linker option) and gives misleading
error when COFF and ELF object files are mixed together in the link.
The error message should be clear and point to the actual problem.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00023596
------------------------------------------------------------------------------

Summary            : Linker generates incorrect address in constant table entry
Affected Component : Linker

Description: 
The linker could set the LSB of an address in a constant table when that 
address should refer to a data object.  The conditions where this could 
happen are:

1. If there is an access to a variable with an offset that is either one less 
than the beginning of an array or one past the end of the array:  
i.e array[-1] or array["the size of the array"].  
Note, the optimizer can create an array[-1] reference at the beginning of 
certain loops.

2.This address location must be included in a constant table location.

3. This address location (one previous or one past the array) must reference 
thumb code.

4. The data location of the variable and the referenced thumb code must be in 
the same output section.  For example, if that variable is constant, you would 
need this in your linker command file:

.app:
{  *(.text)
   *(.const)
}
 

Workaround:
Separate the code and data into separate output sections.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00024275
------------------------------------------------------------------------------

Summary            : Linker handling of dual mode changes with object file that
		     should not affect mode
Affected Component : ELF Linker

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00025027
------------------------------------------------------------------------------

Summary            : Assembler does not flag the use of .arm and .thumbfunc
		     directive in same assembly file
Affected Component : Assembler

Description: 
Incorrect use of .arm and .thumbfunc directives in assembly does not produce 
any errors. 

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00025347
------------------------------------------------------------------------------

Summary            : Format different between TI and ARM on NEON instructions
Affected Component : Assembler

Description: 
Neon support only follows the "ARM Architecture Reference Manual, Advanced
SIMD Extension and VFPv3 supplement, Issue A, Beta Release, December 2004".
Assembler support for later mnemonic changes are not included.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00028175
------------------------------------------------------------------------------

Summary            : Assembler accepts UDIV and SDIV instructions with invalid
		     destination registers
Affected Component : Assembler

Description: 
According to ARM DDI 0406A, SP or PC should not be used as destination
registers in SDIV and UDIV instructions. 
 
------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00029461
------------------------------------------------------------------------------

Summary            : compiler and optimizer segmentation faults
Affected Component : C/C++ Compiler (cl)

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00029483
------------------------------------------------------------------------------

Summary            : asm470 crash on bad asm instruction
Affected Component : Disassembler (dis)

Description: 
The assembler will crash on the incorrectly formated instruction:

 MOV R0 #0

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00030097
------------------------------------------------------------------------------

Summary            : wrong placement of .align leads to assembler crash
Affected Component : Assembler

Description: 
Attached testcase shows an assembler crash when placing the .align
directive in the wrong place. The .align directive should be placed
before the label.
This code leads to the message below
	nop
	.thumbfunc __delay_
__delay_
	.asmfunc
	.align 4
	lsr	r0,r0,#2

loop
       subs    r0,r0,#1
	bge	loop
	bx	lr
	.endasmfunc

"delay.asm", INTERNAL ERROR! __delay_ defined differently in each pass

This may be a serious problem.	Please contact customer support with a
description of the problem and a sample of the sourcefile that caused
this
message to appear.

>> Compilation failure

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00030598
------------------------------------------------------------------------------

Summary            : Copy table output sections are not supported
Affected Component : ELF Linker

Description: 
Update a linker command file to place the decompression routines from
the rts library

.decompress
{
   rts*.lib<copy*.obj>( *(.text) )
}

The linker does not honor this placement and will place the copy table
in the default location.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00030738
------------------------------------------------------------------------------

Summary            : Interlisting comments for an asm() statement may
		     incorrectly show it comes from an inline function
Affected Component : C/C++ Compiler (cl)
