Table of Contents
This section documents Sourcery CodeBench Lite changes for each released revision.
New Sourcery CodeBench Lite branding. Sourcery G++ has been renamed to Sourcery CodeBench. This change affects the names of the default installation directory and installer-created shortcuts, but no internal pathnames or tool names within the installation directory have been changed.
Internal compiler error with NEON intrinsics. A compiler bug has been fixed that caused internal compiler errors when using certain NEON intrinsics.
GCC version 4.6.
Sourcery CodeBench Lite for ARM EABI is now based on GCC
version 4.6. For more information about changes from GCC
version 4.5 that was included in previous releases, see
http://gcc.gnu.org/gcc-4.6/changes.html
.
ARM VFP9-S errata workaround. A compiler workaround for ARM Errata Notice GENC-010704 (760019: Canceled FDIV or FSQRT can be executed twice) has been implemented.
Map file name demangling bug fix.
GCC now properly passes the
--demangle
and --no-demangle
options to the linker to control map file output. The default
behavior on all hosts is now to demangle C++ names.
GCC stack usage improvement.
GCC now generates better code for stack allocation in some
cases when compiling with -fno-strict-aliasing
.
Binutils version 2.21. Sourcery CodeBench Lite for ARM EABI is now based on binutils version 2.21.
Assembler crash.
The assembler now warns when there is line information for
the *ABS*
section, rather than crash.
This can occur when the .offset
directive is
used incorrectly.
CS3 bug fix for Xilinx Zynq-7000. A bug that caused undefined symbol errors in the CS3 library when linking programs for the Xilinx Zynq-7000 has been fixed.
Fix for crash in GDB maint print arch
.
A bug in the GDB command maint print arch
that sometimes caused GDB to crash has been fixed.
GDB interrupt handling bug fix. A bug in GDB has been fixed that caused it to sometimes fail to interrupt lengthy single-step operations (as by a Ctrl+C when using GDB from the command line).
Fix GDB crash during connection to debug agent. A bug has been fixed that caused GDB to crash while connecting to any debug agent through standard IO where the debug agent had detected an early error and terminated the communication.
Improved disassembler performance in the debugger. GDB's disassembler has been improved to use more efficient memory access on remote targets.
Fix GDB crash in debugging Thumb assembly routines. A bug in GDB has been fixed that caused a crash when debugging Thumb assembly routines that switch stacks by writing the stack pointer in the function prologue.
Debug Sprite option defaults. The Sourcery CodeBench Debug Sprite now uses default option values specified in board configuration files. Options included in the device URL override the default values.
Changes to host operating system requirements. The minimum required Microsoft Windows OS needed to run Sourcery CodeBench Lite is now Windows XP (SP1).
Variable Length Array (VLA) alignment bug. A compiler bug that resulted in incorrectly aligned variable length arrays (VLA) in leaf functions has been fixed.
Cortex-R5 support.
Sourcery G++ now includes support for ARM Cortex-R5
processors. To compile for these processors,
use -mcpu=cortex-r5
.
Inline assembly and volatile fields.
A bug has been fixed that caused the compiler to incorrectly
reject inline asm
statements referring to volatile
class/struct fields with errors such as error: output
number 1 not directly addressable
.
Fixed-point arithmetic support. Experimental compiler support has been added for fixed-point arithmetic on ARM, as described in the draft ISO/IEC technical report TR 18037. Specialized instructions defined in recent architecture versions for performing saturating arithmetic, etc. are used when available, but are not a prerequisite for using the new language features. See Section 3.5, “Fixed-Point Arithmetic” for further details.
C++ constructor bug fix. A compiler bug has been fixed that caused incorrect code for C++ constructors for some class hierarchies that use virtual inheritance and include empty classes. At runtime, the incorrect constructors resulted in memory corruption or other errors.
Thumb debug information fix. A compiler bug that resulted in incorrect debug information for Thumb code has been fixed. The incorrect information prevented single stepping through some code.
Internal compiler error with pointer casting. A compiler bug has been fixed that caused internal compiler errors when accessing double-word memory locations with casted pointers under ARM mode.
Unaligned access support.
The compiler now generates more efficient code for accessing
packed data structures and for copying small blocks of
unaligned data when targeting architectures that permit
unaligned word/halfword accesses. This feature can be
controlled by the -munaligned-access
and
-mno-unaligned-access
options, and is enabled
by default for ARMv6 processors and above, except for ARMv6-M.
Internal compiler error under Thumb mode. A compiler bug has been fixed that caused internal compiler errors when generating Thumb code.
Xilinx Zynq-7000 board support. Sourcery G++ Lite now includes CS3 board support for the Xilinx Zynq-7000.
Debugging M-profile targets with third-party GDB stubs.
A bug in GDB has been fixed that caused the error
Remote 'g' packet reply is too long
with ARMv6-M and ARMv7-M targets.
The error was reported when connecting to some third-party GDB
stubs, including SEGGER GDB Server and OpenOCD, but did not affect
the Sourcery G++ Debug Sprite.
GCC fixes for -fstrict-volatile-bitfields
.
GCC now honors -fstrict-volatile-bitfields
when a bitfield is not declared volatile initially, but an
object including bit fields is cast to volatile.
Also, a bug was fixed that caused incorrect code to be generated
for some stores to volatile bit fields when
-fstrict-volatile-bitfields
is enabled.
Compiler optimization improvements. The compiler has been enhanced with a number of optimization improvements, including:
Internal compiler error with NEON intrinsics. A compiler bug has been fixed that caused internal compiler errors when using certain NEON intrinsics.
GCC version 4.5.2. Sourcery G++ Lite for ARM EABI is now based on GCC version 4.5.2.
GCC code generation bug for casts to volatile
types.
A compiler bug has been fixed that sometimes caused incorrect code
for references to pointers to types with volatile
casts.
Incorrect optimization fix. An optimizer bug that in rare cases caused incorrect code to be generated for complex AND and OR expressions containing redundant subexpressions has been fixed.
Incorrect C++ warning fixed. A bug in GCC has been fixed that caused spurious warnings about lambda expressions in C++ code that does not use them.
GCC fixes for NEON in big-endian mode.
Several compiler bugs have been fixed that could lead to
incorrect code when using NEON in big-endian mode. The problems
only manifested when using the auto-vectorizer (enabled by
default at the -O3
optimization level) with
the -mvectorize-with-neon-quad
option.
Incorrect code for built-in comparison functions.
A bug has been fixed that sometimes caused GCC's built-in
comparison functions,
such as __builtin_isgreaterequal
, to
incorrectly raise exceptions when invoked on unordered
floating-point arguments.
C++ exception handling. A defect in the implementation of the EH-ABI specification has been fixed. The defect affected the catching of pointer types in code generated by the ARM RealView® compiler but using the Sourcery G++ runtime libraries. The fix also retains backward compatibility with existing GCC-compiled code.
GCC bug where accesses to volatile structure fields are optimized away. A bug has been fixed where accesses to volatile fields of a structure were sometimes incorrectly optimized away if the structure instance was defined as non-volatile.
Internal compiler error fixes.
Two bugs have been fixed that caused compiler crashes in rare cases.
The first bug involved code with multiple comparison operations,
and the second one involved char
to int
conversion.
Thumb-2 assembler validation fix.
The assembler now correctly rejects Thumb-2
ADD
, ADDS
,
SUB
, and SUBS
instructions that have an invalid shift operand.
Previously, invalid shift values were accepted and
generated unpredictable instructions.
Objdump fix for multiple input files. The Objdump utility did not produce correct disassembly when processing multiple input files. This has been fixed.
CS3 interrupt handlers. CS3 now provides separate ISR functions for each core processor exception, rather than aliasing them all to a single interrupt handler. This provides more useful backtrace information in the debugger.
GCC fix for duplicated symbols. A GCC optimizer bug that caused multiple definitions of local symbols has been fixed. Code affected by the bug was rejected by the assembler.
NEON code generation fix.
A GCC bug has been fixed that resulted in an assembler error
VFP/Neon double precision register expected
.
Static data size improvement at -Os
.
When optimizing for size, the compiler no longer implicitly
adds padding bytes to align static and local arrays on
word boundaries.
This fixes static data size regressions introduced since GCC 4.4.
The additional alignment is still used when optimizing for speed.
New -fstrict-volatile-bitfields
option.
The compiler has a new
option, -fstrict-volatile-bitfields
, which
forces access to a volatile structure member using the width
that conforms to its type.
This option is enabled by default to conform to the ARM EABI.
Refer to the GCC manual for details.
Internal compiler error fixes.
A bug has been fixed that caused the compiler to crash
on code containing a typedef
alias
for __builtin_va_list
with option
-femit-struct-debug-baseonly
.
A second bug has been fixed that caused a crash
when compiling code using C99 variable-length arrays.
Additionally, a compiler crash on code using
64-bit integer multiplications with NEON vectorization enabled
has also been fixed.
NEON narrowing-move instructions.
The compiler now supports narrowing-move instructions
when auto-vectorizing for NEON. Loops accessing arrays of
char
or short
values are now more
likely to be vectorized.
Improved support for atomic memory builtins. The compiler support for built-in atomic memory access operations on ARMv7 targets has been improved. These builtins are documented in the GCC manual.
Linker debug information fix.
A bug in linker processing of debug information has been
fixed. The bug sometimes prevented the Sourcery G++ debugger from
displaying source code if the executable was linked
with the --gc-sections
option.
Absolute branch bug fixes. A bug that caused the assembler to crash on a branch to an absolute address has been fixed. Linker handling of the resulting relocations has also been improved. Previously this caused an invalid switch to ARM mode on ARMv7-M devices.
VMOV
instruction bug fix.
A bug that caused the assembler to incorrectly reject
certain valid immediate operands for the VMOV
instruction has been fixed.
Debugger warnings quieted.
GDB no longer prints RMT ERROR
diagnostics
on connection to the Sourcery G++ Debug Sprite.
In spite of the alarming appearance of the messages, they were
not actually indicative of a serious problem.
Changes to Sourcery G++ version numbering. Sourcery G++ product and Lite toolchains now uniformly use a version numbering scheme of the form 2011.09-69. The major and minor parts of the version number, in this case 2011.09, identify the release branch, while the final component is a build number within the branch. There are also new preprocessor macros defined by the compiler for the version number components so that you may conditionalize code for Sourcery G++ or particular Sourcery G++ versions. Details are available in the Sourcery G++ Knowledge Base.
GCC fix for reference to undefined label. A bug in the optimizer that caused GCC to emit references to undefined labels has been fixed.
Precision improvement with vectorization enabled.
The GCC auto-vectorizer no longer uses
NEON floating-point instructions unless the
-funsafe-math-optimizations
option (implied
by -ffast-math
) is specified. This is because
NEON hardware does not fully support the IEEE 754 standard for
floating-point arithmetic. In particular, very small quantities
may be flushed to zero.
Alignment attributes. A bug has been fixed that caused the compiler to ignore alignment attributes of C++ static member variables where the attribute was present on the definition, but not the declaration.
naked
attribute semantics.
The naked
function attribute now also implies the
noinline
and noclone
attributes.
This fixes bugs resulting from invalid optimizations of functions
with this attribute.
Stack corruption bug fix.
A bug in GCC has been fixed that caused stack corruption
in functions with the interrupt
attribute.
GCC bug fix for push multiple instruction generation.
A bug has been fixed that caused GCC to generate incorrect
push multiple instructions, causing an assembler warning
register range not in ascending order
.
Thumb-2 internal compiler error fix. A bug has been fixed that caused the compiler to crash when compiling Thumb-2 code using 64-bit integer arithmetic.
Compiler optimization improvements. The compiler has been enhanced with a number of optimization improvements, including:
Preprocessor symbols for floating-point calling convention.
Built-in preprocessor symbols __ARM_PCS
and
__ARM_PCS_VFP
are now defined to indicate
the current floating-point calling convention.
GCC version 4.5.1.
Sourcery G++ Lite for ARM EABI is now based on GCC version 4.5.1.
For more information about changes from GCC version 4.4 that was
included in previous releases, see
http://gcc.gnu.org/gcc-4.5/changes.html
.
New -Wdouble-promotion
warning
option.
The compiler has a new
option, -Wdouble-promotion
, which enables
warnings about implicit promotions of float
values to double
. This option is useful when
compiling code for processors (such as ARM Cortex-M4) that
have hardware support for single-precision floating-point
arithmetic only, where unintentional use of double precision
results in dramatically slower code.
Linker bug fix.
A bug that caused the linker error relocation
truncated to fit: R_ARM_THM_JUMP24
when linking
some Thumb-2 applications has been fixed.
Assembler PC-relative store fix. A bug that caused the assembler to reject some valid PC-relative store instructions has been fixed. It now issues a warning instead for architectures where these instructions are deprecated.
ARMv7-A linker bug fix.
A bug in the linker support for --fix-cortex-a8
,
which is enabled by default when linking ARMv7-A objects, has been
fixed. Programs affected by the bug sometimes crashed with
segmentation fault or illegal instruction errors.
Smaller C++ programs with -g
.
An assembler bug has been fixed that caused unnecessary references
to exception-handling routines from C++ programs when debug
information is enabled. For programs that do not otherwise
use exceptions, this change results in smaller code size.
Additional validation in the assembler.
The assembler now diagnoses an error, instead of producing
an invalid object file, when directives such as
.hidden
are missing operands.
Assembler PC-relative load fix.
An assembler bug that caused the assembler to reject some
references to global symbols has been fixed. This
bug affected Thumb instructions of the form
ldr r0,
.
symbol
Strip bug fix.
A bug in the strip
and
objcopy
utilities, which resulted in
stripped object files that the linker could not recognize,
has been fixed.
Binutils update. The binutils package has been updated to version 2.20.51.20100809 from the FSF trunk. This update includes numerous bug fixes.
Additional alignment in CS3-defined linker scripts.
Sourcery G++ now ensures 8-byte alignment at additional points
in CS3-defined linker scripts. Previously, placing a symbol
in certain sections broke the initialization of
the .data
and/or .bss
sections.
Newlib update. The Newlib package has been updated to version 1.18.0, with additions from the community CVS trunk as of 2010-08-12. This update provides additional wide-character functions, along with other bug fixes and enhancements.
malloc
fix.
A bug that sometimes caused free
to
dereference an invalid address has been fixed. The bug was
caused by incorrect handling
within malloc
of calls
to sbrk
from outside
of malloc
.
Improved support for debugging RealView® C++ programs . GDB has been enhanced to handle some debug information contained in binaries produced by the ARM RealView® compiler. Formerly, GDB sometimes crashed on programs which use C++ templates. Another bug has been fixed that caused GDB to fail to place breakpoints in binaries produced by the ARM RealView® compiler when the source file location for the breakpoint was specified as an absolute pathname.
GDB update.
The included version of GDB has been updated to
7.2.50.20100908. This update adds numerous bug fixes and
new features, including improved C++ language support,
a new command to save breakpoints to a file,
a new
convenience variable $_thread
that holds
the number of the current thread, among many other
improvements.
GDB crash fix.
A bug has been fixed that caused GDB to crash on launch if
the environment variable CYGPATH
is set
to a program that does not exist or cannot be executed.
Debug Sprite abnormal termination bug fix. The Sourcery G++ Debug Sprite no longer terminates abnormally if GDB is killed while the target is waiting for semihosted I/O to complete. The bug was only triggered when running GDB on a Windows host.
Semihosting support for gettimeofday
.
The Sourcery G++ Debug Sprite now provides a semihosted implementation
of the gettimeofday
C library function.