TMS470 C/C++ CODE GENERATION TOOLS
Defect History
4.5.2
May 2009


Table of Contents
-----------------
1. Known Issues
2. Fixed Issues in 4.5.2
3. Fixed Issues in 4.5.1
4. Fixed Issues in 4.5.0
5. Fixed Issues in 4.5.0B1


------------------------------------------------------------------------------
1. 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.

------------------------------------------------------------------------------
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  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  SDSCM00008361
------------------------------------------------------------------------------

Summary            : Link takes a long time to complete
Affected Component : Linker

------------------------------------------------------------------------------
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  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  SDSCM00016886
------------------------------------------------------------------------------

Summary            : Thumb interrupt handlers should begin in ARM mode
Affected Component : Code Generator

Description:
Thumb interrupt functions should begin in ARM mode because interrupt
functions are *only* entered via the interrupt handler table, which
begins in ARM mode.  (Except for M3, and so this doesn't apply for that
architecture.)

Currently, the interrupt function will begin in thumb mode and we will
generate a veneer for it with a different name.  So a user must use the
veneer name in the interrupt table.  However, because the function is
marked as an interrupt handler in the source, he should be using the
actual function name.

Thus, in our current implementation, the veneer should be given the
name of the function and some other non-global label should be used for
the thumb entry point into the function.

------------------------------------------------------------------------------
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  SDSCM00020785
------------------------------------------------------------------------------

Summary            : alchemy link ignores #pragma CODE_STATE (func,32) function
		     designation
Affected Component : Linker

Description: 
If I designate a function to be a 32 bit Arm func by using the #pragma
CODE_STATE (func,32) directive it gets re-defined as .thumbfunc
.state16 with the alchemy linker.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00024879
------------------------------------------------------------------------------

Summary            : SIGSEGV on invalid mnemonic
Affected Component : Assembler

Description: 
asm470 crashes with SIGSEGV on invalid mnemonic starting "blea"

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00024957
------------------------------------------------------------------------------

Summary            : OFD dump of aeabi build attribute gives incorrect
		     description
Affected Component : Object File Dump Utility (ofd)

Description: 
ofd470 dumps the build attributes of an object file with the
description of the build attribute's value following in parenthesis. 
However, the description for the tag Tag_ARM_ISA_use is incorrect.  It
should not be "(Producer Major Version + 1)"

------------------------------------------------------------------------------
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  SDSCM00028893
------------------------------------------------------------------------------

Summary            : Linker cannot resolve symbols defined with SHT_GROUP flag
		     from RVCT and TI
Affected Component : ELF Linker

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00029483
------------------------------------------------------------------------------

Summary            : asm470 crash on bad asm instruction
Affected Component : Disassembler (dis)

Description: 
The assember will crash with MOV R0 #0.

------------------------------------------------------------------------------
KNOWN ISSUE  SDSCM00030125
------------------------------------------------------------------------------

Summary            : Linker generates confusing error message and fails
Affected Component : C/C++ Compiler (cl)

Description: 
If a linker command file configures MEMORY for a particular address,
and then uses specific placement for an input SECTION at an address
that precedes the configured address, the following messages are issued

"lnk_specAddrMakesDefaultOverlaps.cmd", line 13 warning #10096-D
specified
   address lies outside memory map
error #10264 DEFAULT memory range overlaps existing memory range MEM
error #10010 errors encountered during linking; "z.out" not built

>> Compilation failure

The first warning indicates that the address used for specific
placement is not part of the MEMORY specified in the command file,
which is fine.	The new linker then attempts to create a DEFAULT
section to contain the input that was specifically placed.  This
DEFAULT section is created such that it begins at the address given for
specific placement and extends to the end of memory.  Since MEMORY
includes an output section that begins after the specific placement
address, the creation fails.  This causes the display of the message
involving the DEFAULT memory range, which the user knows nothing about.

------------------------------------------------------------------------------
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  SDSCM00030678
------------------------------------------------------------------------------

Summary            : Allow .cinit sections to have separate load and run
		     addresses
Affected Component : ELF Linker

Description: 
This is a request to allow separate load and run addresses of the
.cinit section in EABI mode.  The should also support the load/run
placement of the .ovly section.


------------------------------------------------------------------------------
2. Fixed Issues in 4.5.2
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00008525
------------------------------------------------------------------------------

Summary            : Float literal conversion to integers incorrectly saturates
		     at 32 bits

Fixed in           : 4.5.2
Severity           : S3 - Minor
Affected Component : Parser

Description: 

When a floating point constant with a value of larger than pow(2,32) is
converted (explicitly or implicitly) to a target integer type wider 
than 32 bits, the compiler will incorrectly saturate the value to 32 bits.
Values larger than (pow(2,32)-1) will be saturated incorrectly when
converting to a wide unsigned type, and values outside the range
(-pow(2,31))..(pow(2,31)-1) will be saturated incorrectly when
converting to a wide signed type.

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

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

Fixed in           : 4.5.2
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  SDSCM00028948
------------------------------------------------------------------------------

Summary            : Missing <cmath> entries

Fixed in           : 4.5.2
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  SDSCM00029192
------------------------------------------------------------------------------

Summary            : Parser truncates large float value

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

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

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.5.2
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            : Exception handling bug, std::terminate called instead of
                     bad_alloc

Fixed in           : 4.5.2
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 terminates.

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.5.2
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  SDSCM00029797
------------------------------------------------------------------------------

Summary            : Linker relocation overflow for BLX call to trampoline

Fixed in           : 4.5.2
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

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

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

Fixed in           : 4.5.2
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  SDSCM00030215
------------------------------------------------------------------------------

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

Fixed in           : 4.5.2
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  SDSCM00030299
------------------------------------------------------------------------------

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

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

This super 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  SDSCM00030301
------------------------------------------------------------------------------

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

Fixed in           : 4.5.2
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.5.2
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  SDSCM00030444
------------------------------------------------------------------------------

Summary            : Optimizer crash 

Fixed in           : 4.5.2
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.5.2
Severity           : S3 - Minor
Affected Component : C/C++ Compiler (cl)

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

Summary            : Optimizer terminates abnormally

Fixed in           : 4.5.2
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.5.2
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.5.2
Severity           : S2 - Major
Affected Component : ELF Linker

Description: 

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

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

Fixed in           : 4.5.2
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  SDSCM00030700
------------------------------------------------------------------------------

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

Fixed in           : 4.5.2
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 ELFABI

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

Description: 
When compiling in ELFABI 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.5.2
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.5.2
Severity           : S2 - Major
Affected Component : ELF Linker

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

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

Fixed in           : 4.5.2
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.5.2
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.5.2
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  SDSCM00031110
------------------------------------------------------------------------------

Summary            : Optimizer crash

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

Description: 
The optimiser may crash when processing code compiled with --exceptions
in EABI or ELFABI mode.

Defect occurs in:

TMS470 Compiler versions 4.5.0B1 - 4.5.1

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

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

Fixed in           : 4.5.2
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.5.2
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.5.2
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.5.2
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


------------------------------------------------------------------------------
3. Fixed Issues in 4.5.1
------------------------------------------------------------------------------

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

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

Fixed in           : 4.5.1
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.5.1
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. 

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

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

Fixed in           : 4.5.1
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.5.0 linker does not honor this
allocation. 

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

Summary            : Optimizer optimizes out destructor code in testcase

Fixed in           : 4.5.1
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  SDSCM00026536
------------------------------------------------------------------------------

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

Fixed in           : 4.5.1
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.

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

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

Fixed in           : 4.5.1
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.

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

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

Fixed in           : 4.5.1
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  SDSCM00026799
------------------------------------------------------------------------------

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

Fixed in           : 4.5.1
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.5.1
Severity           : S2 - Major
Affected Component : Linker

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

Summary            : Compiler needs to predefine __EDG_VERSION__

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

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

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

Fixed in           : 4.5.1
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  SDSCM00027550
------------------------------------------------------------------------------

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

Fixed in           : 4.5.1
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  SDSCM00027886
------------------------------------------------------------------------------

Summary            : BKPT instruction encoded incorrect in ARM mode

Fixed in           : 4.5.1
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.

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

Summary            : strip470 errors with ELF object files in EABI mode

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

Description: 
-p option is not meant to be used on unlinked executable object files. 
Use ofd470 to extract and compare raw data in object files.	       
	
------------------------------------------------------------------------------
FIXED  SDSCM00028442
------------------------------------------------------------------------------

Summary            : Error-Out of Memory-Optimizer Aborted

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

Description: 
A simple loop, with a known constant trip count, that makes many 
references to its loop variables, may be unrolled a lot, and those 
references may all propagate forward to create new expressions, and the
combination may overwhelm the optimiser and cause it to run out of
memory.

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

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

Fixed in           : 4.5.1
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.

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

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

Fixed in           : 4.5.1
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.  

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

Summary            : Incorrect disassembly for Thumb when subsections are used.

Fixed in           : 4.5.1
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.

------------------------------------------------------------------------------
FIXED  SDSCM00028855
------------------------------------------------------------------------------

Summary            : Compilation Failure - loop in class definition

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

Description: 
The optimiser may abort when compiling C++ code.  

------------------------------------------------------------------------------
FIXED  SDSCM00028922
------------------------------------------------------------------------------

Summary            : Optimizer terminates abnormally for all optimization levels
		     higher than -o0

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

Description: 
The optimiser may abort on functions containing "switch" statements
when the set of case labels is relatively small and compact, the switch has
a default case, the test expression is a simple variable or memory
reference, and the lowest label value isn't 0.

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

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

Fixed in           : 4.5.1
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.

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

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

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

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

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

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

Fixed in           : 4.5.1
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            : v4.50 optimiser removes an assignment

Fixed in           : 4.5.1
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.

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

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

Fixed in           : 4.5.1
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.

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

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

Fixed in           : 4.5.1
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.5.1
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.

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

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

Fixed in           : 4.5.1
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.

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

Summary            : BHS and BLO instructions encoded incorrectly by the
		     assembler

Fixed in           : 4.5.1
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'.


------------------------------------------------------------------------------
4. Fixed Issues in 4.5.0
------------------------------------------------------------------------------

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

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

Fixed in           : 4.5.0
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

Defect occurs in:
TMS470 Compiler versions 4.4.8 - 4.4.9, 4.5.0B1

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

Summary            : The -h linker option hides undefined references

Fixed in           : 4.5.0
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  SDSCM00025638
------------------------------------------------------------------------------

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

Fixed in           : 4.5.0
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.

Defect occurs in:
TMS470 Compiler versions 4.4.7 - 4.4.9, 4.5.0B1

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

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

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

Description: 
The -mf and -ms options made the shell add in the --size_speed_goal 
option, to the options passed to the parser, optimizer and codegen. 
Problem was, this chaining of --size_speed_goal option was being done 
incorrectly. The option was getting chained to the generic compile 
options rather than the override options. This is due to a coding bug, 
that is now fixed.

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

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

Summary            : Compiler crashes on zero-length array GCC extension

Fixed in           : 4.5.0
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. Fixed.

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

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

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

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

Description: 
Linker generates fatal error #10118 when linking in EABI mode and
linker command file uses split operator (>>) for .text section. 

The split operator (>>) tries to split some special routines in the 
library designed for EABI implementation. We should not allow this. Now
the split operator will be skipped for these special routines.

Defect occurs in:
TMS470 Compiler versions 4.4.8 - 4.4.9, 4.5.0B1

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

Summary            : Optimizer terminated abnormally with "-o3" option

Fixed in           : 4.5.0
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.

Defect occurs in:
TMS470 Compiler versions 2.166e - 2.172e, 2.209e, 2.40 - 2.71, 4.1.0B1
- 4.1.5, 2.54.02 - 2.54.208, 2.54.03 - 2.54.120, 2.202.03e - 2.202.09e,
4.4.0B1 - 4.4.9, 4.5.0B1

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

Summary            : BLX not assembled correctly in thumb2

Fixed in           : 4.5.0
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.

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.5.0
Severity           : S2 - Major
Affected Component : C/C++ Compiler (cl)

Description: 
Use of certain intrinsics -- _get_CPSR for ARM, _gmpy and the _efi ops 
for C6x, and _circ_init and _circ_end for C55+ -- in a non-trivial 
function (including through inlining) can read an uninitialised memory 
location in the optimiser, 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.5.0
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


------------------------------------------------------------------------------
5. Fixed Issues in 4.5.0B1
------------------------------------------------------------------------------

------------------------------------------------------------------------------
FIXED  SDSCM00017011
------------------------------------------------------------------------------

Summary            : Spurious redeclaration warning with -pm when mixing C and
		     C++ and BIOS header

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

Description: 
Compiler emits spurious incompatible type warnings with -pm. Fixed.

------------------------------------------------------------------------------
FIXED  SDSCM00017122
------------------------------------------------------------------------------

Summary            : pragma PACK is not supported, but is not rejected

Fixed in           : 4.5.0B1
Severity           : S2 - Major
Affected Component : Parser

Description: 
pragma PACK is accepted and acted upon even though the result is likely
to be incorrect code.

------------------------------------------------------------------------------
FIXED  SDSCM00018026
------------------------------------------------------------------------------

Summary            : Linker does not support embedded icode linking

Fixed in           : 4.5.0B1
Severity           : S2 - Major
Affected Component : Linker

------------------------------------------------------------------------------
FIXED  SDSCM00018300
------------------------------------------------------------------------------

Summary            : Long-long bitfield accessed incorrectly

Fixed in           : 4.5.0B1
Severity           : S2 - Major
Affected Component : Optimizer

Description: 
Long-long bitfields may be accessed incorrectly in circumstances where 
the alignment of long-long is less than the type width.  The known case
is TI-ABI mode (as opposed to EABI) for ARM.

------------------------------------------------------------------------------
FIXED  SDSCM00019700
------------------------------------------------------------------------------

Summary            : Buffer overflow after using setvbuf

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

Description: 
Note that this modification changes the size of the buffer allocated by
a call to setvbuf(some_fp, NULL, some_mode, BUFSIZ).  Previously,
BUFSIZ bytes would be allocated by this call from the heap.  Now
BUFSIZ+4 bytes are allocated.  This is the method that printf() uses to
allocate a buffer for stdout if one does not already exist, and it is
likely that other standard I/O routines use it as well for stdout,
stderr, and stdin.  This may cause problems in codes that have tight
constraints on heap size.  Note that if the buffer allocation in
printf() fails, then nothing is printed to stdout - the call simply
fails.	If this is a problem, then these buffers can be allocated prior
to use with a call like setvbuf(stdout, NULL, _IOFBF, REQUIRED_SIZE).

------------------------------------------------------------------------------
FIXED  SDSCM00020565
------------------------------------------------------------------------------

Summary            : Dwarf information is incorrect for indirect calls and
		     returns for ARM7 TI_ARM9_ABI

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

Description: 
Various ARM instructions that can be used as function return
instructions are missing debug information. This could cause the incorrect
information in profiling and debugging. Now this problem is fixed.

------------------------------------------------------------------------------
FIXED  SDSCM00021837
------------------------------------------------------------------------------

Summary            : C++ library output using streams may overrun the underlying
		     buffer

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

Description: 
When using C++ I/O streams for output, a buffer overrun condition may
occur, causing memory corruption or a program crash. This occurs when more
than BUFSIZ (usually 256) characters are written into the stream without
being flushed.  (Generally, for line buffered streams such as stdcout,
writing stdendl into the stream causes it to be flushed, so this condition
would only occur when more than 256 characters are written without any
intervening stdendl's).

------------------------------------------------------------------------------
FIXED  SDSCM00023440
------------------------------------------------------------------------------

Summary            : For some input section specifiers which use "glob" patterns, 
                     the linker may not correctly match input sections.

Fixed in           : 4.5.0B1
Severity           : S3 - Minor
Affected Component : ELF Linker

------------------------------------------------------------------------------
FIXED  SDSCM00023467
------------------------------------------------------------------------------

Summary            : Arithmetic comparisons incorrectly optimized
		     optimization

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

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  SDSCM00023596
------------------------------------------------------------------------------

Summary            : Linker generates incorrect address in constant table entry

Fixed in           : 4.5.0B1
Severity           : S2 - Major
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: 
To workaround this bug, separate the data and text.  

------------------------------------------------------------------------------
FIXED  SDSCM00023822
------------------------------------------------------------------------------

Summary            : Compiler takes 10 times longer to compile certain source
                     files

Fixed in           : 4.5.0B1
Severity           : S2 - Major
Affected Component : Codegen
