Table of Contents
This section documents Sourcery G++ Lite changes for each released revision.
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
.
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.
Changes to Sourcery G++ version numbering. Sourcery G++ product and Lite toolchains now uniformly use a version numbering scheme of the form 2010.09-58. The major and minor parts of the version number, in this case 2010.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 uClinux 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.
Linux kernel headers update. Linux kernel header files have been updated to version 2.6.35.2.
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.
Improved NEON code generation for 0.0 constants. The compiler now generates better code for loading double float 0.0 constants on processors supporting NEON instructions.
Incorrect linker-generated functions. A bug that caused some linker-generated functions (including stubs to support interworking from ARM mode to Thumb mode and stubs to implement long branches) to jump to invalid offsets has been fixed.
Improved support for debugging RealView® programs with inlined functions . GDB has been enhanced to better handle debug information for inlined functions contained in binaries produced by the ARM RealView® compiler. Formerly, local variables in inner function scopes would become unavailable at calls to static inline functions. GDB now also includes inlined functions in the stack trace in binaries produced by RealView® versions earlier than 4.0. In addition, GDB's support for stepping over inline functions in programs built with such compilers has been improved.
Improved code generation for if
statements.
The compiler can now generate better code for if
statements when the then and else clauses contain similar code.
Assembler encoding bug fixes.
Several bugs in the assembler have been fixed that
caused selection of incorrect encodings for some
instructions that have multiple encodings. The
incorrect encodings are not believed to have affected
runtime behavior but were not in conformance with
the canonical encodings specified by the ARM
ARM. The objdump
command has also
been fixed to decode such instructions correctly.
ARMv7-A performance improvements.
The compiler has been enhanced to produce faster code for the
ARM architecture, particularly for ARMv7-A cores, when compiling
using the -O2
option. This results in a
significant improvement in performance relative to CodeSourcery's
2009q3 releases.
Linker performance improvement. A bug in the linker that caused applications with many input files to link slowly has been fixed.
IPSR register.
A bug in the Sourcery G++ Debug Sprite that caused only five
bits of the M-profile IPSR
register to be
displayed in the debugger has been fixed.
Weak symbols. An assembler bug has been fixed that caused incorrect code to be generated for references to weak symbols when a default definition is also provided in the same file.
Optimization of ARM NEON
vdupq_n*
intrinsics.
The compiler now generates better code for
vdupq_n*
intrinsics to load
particular constants.
Linker bug fix for --section-start
.
A linker bug that caused --section-start
to fail to work as documented if the section is defined
in multiple object files has been fixed.
GCC inline assembly bug fixes. A bug that caused NEON/VFP registers specified in the clobber list of inline assembly statements to be saved and restored incorrectly has been fixed. Another bug that caused incorrect code when double-precision or quad-precision registers were specified in the clobber list has also been fixed.
Assembler segmentation fault fix.
A bug has been fixed that caused the assembler
to crash when processing some data filling directives,
such as .fill 0, 0, 0
.
Linker bug with Cortex-A8 erratum fix.
A bug in the --fix-cortex-a8
linker option,
which is enabled by default when linking ARMv7-A objects,
has been fixed. The bug could cause the linker to generate
incorrect shared libraries.
Improved code generation for Cortex-A5.
The compiler has been enhanced to provide instruction
scheduling for Cortex-A5 cores. To take advantage of this,
use the -mcpu=cortex-a5
command-line option.
Improved support for debugging RealView® programs . GDB has been enhanced to handle some debug information contained in binaries produced by the ARM RealView® compiler. Formerly, GDB sometimes crashed on these programs and libraries.
Better use of NEON instructions on Cortex-A8. The compiler now generates better code when optimizing for the Cortex-A8 by being less eager to use NEON instructions.
Assembler segmentation fault fix. A bug has been fixed that caused the assembler to crash when assembling some Thumb-only instructions in ARM mode. The assembler now gives an error on all incorrect uses of Thumb-only instructions in ARM mode.
GCC internal compiler error.
A bug has been fixed that caused GCC to crash when
compiling some C++ code using templates at
-O2
or -O3
.
GCC internal compiler error with optimize
attribute.
A bug has been fixed that caused the compiler to crash
when invoked with the -O0
or
-O1
option on code using the
optimize
attribute to specify higher
optimization levels for individual functions.
C++ array initializer optimization. The compiler now generates better code for some non-constant array initializations in C++.
Support for ARM Cortex-M4 cores.
Sourcery G++ now includes support for ARM Cortex-M4 cores.
Use the -mcpu=cortex-m4
command-line option.
Debugging preprocessed source code. A compiler bug has been fixed that caused debug output to erroneously contain the name of the intermediate preprocessed file.
Thumb-2 size optimization improvements.
The compiler has been enhanced to produce smaller code for the
ARM architecture, particularly for Thumb-2 mode, when compiling
using the -Os
option. This results in a
significant improvement in code size relative to CodeSourcery's
2009q3 releases.
GDB update. The included version of GDB has been updated to 7.0.50.20100218. This update adds numerous bug fixes and new features, including improved C++ language support, automatic caching of stack memory, and Position Independent Executable (PIE) support.
Incorrect symbol addresses bug fix. A bug in the linker that caused it to assign incorrect addresses to symbols has been fixed. The bug occurred when the input objects contained sections not explicitly mentioned in the linker script.
Linker fix for data-only sections. A bug has been fixed that caused the linker to incorrectly mark parts of the output as containing code, rather than data, when linking data-only sections not explicitly tagged as such. The bug resulted in incorrect disassembly.
C++ name-mangling of va_list
.
The compiler no longer issues the mangling of
'va_list' has changed
warnings for references
to std::va_list
within system header files.
Static constructor and destructor ordering fixes. The linker now correctly ensures that static destructors with priorities are executed after destructors without priorities. Another linker bug that caused incorrect static constructor and destructor ordering with partial linking involved has been fixed.
GDB asynchronous mode fix.
GDB can now be used from the command line in asynchronous mode
with remote targets. Previously, GDB did not accept user input
while asynchronous commands (such as
continue &
) were running.
GDB interrupt handling bug fix. A bug in GDB has been fixed that caused it to sometimes fail to indicate that the target had stopped after being interrupted. The bug affected clients using GDB's MI front end.
GDB and programs linked with
the --gc-sections
linker option.
GDB has been improved to better handle debug information
found in programs and libraries linked with
the --gc-sections
option. GDB formerly
selected the wrong debug information in some cases,
resulting in incorrect behavior when stepping over a
function or displaying local variables, for example.
GDB memory find bug fix.
A bug in GDB's find
command has been fixed.
The bug caused searches on large memory areas to fail or
report matches at incorrect addresses.
Frame manipulation bug fix. A bug in GDB has been fixed that caused frame manipulation commands to report an internal error in some cases when used on arbitrary stack frames specified by an address.
Read watchpoints bug fix. A GDB bug has been fixed that caused watchpoints set to trigger on memory reads to be silently ignored in some cases.
GDB load improvement.
GDB now automatically initializes ARM Cortex-M devices to
Thumb mode on the load
command. This is
helpful, for example, when an incorrect program image was
previously flashed onto the board, causing it to enter an
invalid state on reset.
Setting thread-specific breakpoints in GDB.
A bug in GDB has been fixed that caused a syntax error for
the break
*
command.
expression
thread
threadnum
Backtracing through noreturn functions.
A compiler bug that made it impossible to obtain a backtrace
through functions declared with the noreturn
attribute has been fixed. This fix makes it possible for the
debugger to present a useful stack backtrace for applications
that call abort
.
Improved code generation for Cortex-A9.
The compiler has been enhanced to provide better instruction
scheduling for Cortex-A9 cores. To take advantage of this,
use the -mcpu=cortex-a9
command-line option.
Improved NEON code generation.
GCC's code generation for NEON targets
(e.g., when compiling with -mfpu=neon
)
has been improved.
In particular, the compiler can now make use of NEON
instructions for many 64-bit integer operations.
Indirect function call optimization. The instruction sequence used to implement calls via a function pointer has been improved to give better branch-prediction performance on some processors.
Thumb-2 function call optimization. The compiler has been enhanced to generate improved code on Thumb-2 targets for functions that return via calls to other functions.
vcvt
assembly bug fix.
A bug that caused vcvt.s32.f64
instructions
to be misassembled as vcvtr.s32.f64
has been
fixed.
Additional error checks in the assembler.
The assembler has been improved to perform a number of
additional checks for invalid inputs.
In particular, it now diagnoses additional invalid uses of the
PC and SP registers, as specified in the ARM documentation.
The assembler now also rejects invalid NEON alignment qualifiers,
such as vld1.8 {d0}, [r0, :128]
and vld1.8 {q0}, [r0, :256]
.
Branches between ARM and Thumb fix. An assembler bug that caused incorrect branches between ARM and Thumb code in different sections has been fixed.
Assembler segmentation fault fix.
A bug has been fixed that caused the assembler to crash
when processing code containing invalid Thumb-mode instructions
such as ldr r0, 0
. The assembler now produces an
error message in such cases.
Assembler fix for Thumb-2.
A bug that caused the assembler to reject some valid Thumb-2
strexd
instructions has been fixed.
NEON assembler fix.
The assembler now correctly handles the three-operand form of NEON
logic instructions, such as
vorr.i32 q0, q0, #0xff
Warning for deprecated instructions.
The assembler now issues warnings about uses of
swp
or swpb
instructions on architectures where they have been
deprecated.
Disassembler bug fix. A bug in the disassembler has been fixed that caused incorrect output for data objects, including literal pools and the interrupt vector.
Optimizer bug fix.
A bug in GCC that caused internal compiler errors
at -O2
or above has been fixed. The bug also
occurred at other optimization levels when
the -fpromote-loop-indices
command-line
option was used.
Debug Sprite multiple connections fix.
When started with the -m
option,
the Sourcery G++ Debug Sprite no longer exits if the
connection to GDB is lost when sending a response.
Instead, it goes back to waiting for another connection.
Watchpoint fix. A bug in the Sourcery G++ Debug Sprite that sometimes prevented watchpoints on Cortex-M targets from functioning has been fixed.
Out-of-range branch error. A compiler bug has been fixed that caused out-of-range branch errors from the assembler. The bug only affected code compiled in Thumb-2 mode.
Linker relocation diagnostics. A bug that caused the linker to incorrectly diagnose overflows for some valid relocations has been fixed.
Thumb-2 internal compiler error fix. A bug that caused an internal compiler error when building the QT library for Thumb-2 has been fixed.
Thumb-2 multiply fix.
A bug that caused an invalid muls
instruction
to be generated in certain circumstances has been fixed. This
affected code compiled for Thumb-2, and resulted in an error
from the assembler.
Internal compiler error fix.
A bug that caused an internal compiler error when using
-fno-omit-frame-pointer
to compile code for Thumb-2
has been fixed.
GDB crash fix. A GDB bug has been fixed that caused GDB to crash when unloading shared libraries or switching executables.
@
fix.
A bug has been fixed in the processing of
FILE
@
command-line options by GCC, GDB, and other tools.
The bug caused any options in
FILE
FILE
following a blank line
to be ignored.
Preprocessor error handling.
The preprocessor now treats failing to find a file referenced
via #include
as a fatal error.
NEON improvements. The compiler now generates improved NEON vector code when copying memory or storing constants to memory using the NEON coprocessor. The compiler also generates better code for accessing data arrays that are not known to have 64-bit alignment. In addition, a bug that caused internal compiler errors when compiling for Thumb-2 with NEON enabled has been fixed, as has another bug that caused some vector shift NEON operations to be wrongly rejected.
ELF file corruption with strip
.
A bug that caused strip
to corrupt unusual
ELF files has been fixed.
GDB support for Cygwin pathnames. A bug in GDB's translation of Cygwin pathnames has been fixed.
Compiler errors with float32_t
.
A bug has been fixed that caused compiler errors when using the
float32_t
type from arm_neon.h
.
Support for ARM Cortex-A5 cores.
Sourcery G++ now includes basic support for ARM Cortex-A5 cores.
Use the -mcpu=cortex-a5
command-line option.
Static variables and asm
statements bug fix.
A bug in GCC that caused functions containing static variables
and asm
statements to be miscompiled
at -O2
or above has been fixed. The bug also
occurred at other optimization levels when
the -fremove-local-statics
command-line
option was used.
Warnings for naked functions.
A compiler bug that resulted in incorrect warnings about
missing return statements in non-void functions declared with
the naked
attribute has been fixed.
Optimizer bug fix.
A bug in GCC that caused functions with complex loop nests to
be miscompiled at -O2
or above has been
fixed. The bug also occurred at other optimization levels
when the -fpromote-loop-indices
command-line
option was used.
VFPv4 support.
Sourcery G++ now includes support for VFPv4, VFPv4-D16 and
NEON-VFPv4 coprocessors. Use the -mfpu=vfpv4
,
-mfpu=vfpv4-d16
or
-mfpu=neon-vfpv4
options, respectively.
GCC internal compiler error. A bug has been fixed that caused the compiler to crash when optimizing code that casts between structure types and the type of the first field.
ELF Program Headers.
The linker now better diagnoses errors in the usage of
FILEHDR
and PHDRS
keywords in PHDRS
command of linker
scripts. Refer to the linker manual for more information.
Improved optimization for ARM.
GCC now automatically enables loop unrolling and
-fpromote-loop-indices
when
-O2
or -O3
is specified.
Loop unrolling is limited at -O2
to
control code growth. These changes improve performance by
more than 5%.
VFP assembly mnemonics.
The assembler now accepts unified assembly mnemonics for
VFP instructions (e.g. VADD.f32 s0, s0
)
in legacy syntax mode.
ARM Cortex-R4F assembler bug fix.
The assembler now correctly recognizes the
-mcpu=cortex-r4f
command-line option to
select the Cortex-R4F processor.
VFP half-precision extensions.
Sourcery G++ now includes support for VFP coprocessors with
half-precision floating-point extensions. This can be enabled
with the -mfpu=vfpv3-d16-fp16
or
-mfpu=vfpv3-fp16
command-line options.
Linux kernel headers update. Linux kernel header files have been updated to version 2.6.30.
Optimizer improvements. When optimizing for speed, the compiler now uses improved heuristics to limit certain types of optimizations that may adversely affect both code size and speed. This change also makes it possible to produce better code when optimizing for space rather than speed.
Improved optimization for Thumb-2.
GCC now supports instruction scheduling for Thumb-2 code.
This optimization is enabled when compiling with
-O2
, -O3
, or
-Os
, and can improve performance
substantially.
ARM VFP assembler bug fix.
The assembler now correctly assembles the
vmls
, vnmla
and
vnmls
mnemonics. Previously these were
incorrectly assembled to different instructions.
GDB finish
internal error.
A bug has been fixed that caused a GDB internal error when
using the finish
command. The bug occurred
when debugging optimized code.
Mixed PIC and non-PIC code.
The elf2flt
utility, automatically run by
Sourcery G++ when linking uClinux applications, now gives an
error when an attempt is made to link mixed PIC and non-PIC
code, which is not supported on uClinux targets. Formerly,
it silently produced an invalid executable in such cases.
GDB update. The included version of GDB has been updated to 6.8.50.20090630. This update adds numerous bug fixes and new features, including support for multi-byte and wide character sets and improved C++ template support.
New assembler directive .inst
.
The assembler now accepts the new .inst
directive to generate an instruction from its integer encoding.
GDB and third-party compilers. Some bugs that caused GDB to crash when debugging programs compiled with third-party tools have been fixed. These bugs did not affect programs built with Sourcery G++.
Remote debugging hardware watchpoint bug fix. A GDB bug has been fixed that caused hardware watchpoint hits to be incorrectly reported in some cases.
Internal error in assembler.
An assembler bug that caused an internal error when
.thumb
or .arm
appears after an
invalid instruction has been fixed.
GDB internal warning fix.
A GDB bug has been fixed that caused warnings of the form
warning: (Internal error: pc
.
address
in read in psymtab, but not in symtab.)
Improved bit counting operation.
The __builtin_ctz
built-in function,
which returns the number of trailing zero bits in a value,
has been improved to use a shorter instruction sequence for
ARMv6T2 and later.
Out-of-range branch errors.
A Thumb-2 code generation defect in the compiler that caused
branch out of range
errors from the
assembler has been eliminated.
Binutils update. The binutils package has been updated to version 2.19.51.20090709 from the FSF trunk. This update includes numerous bug fixes.
Assembler validation improvements.
The assembler now issues a warning when a section finishes with
an unclosed IT instruction block at the end of the input file.
It also now rejects unwinding directives that appear
outside of a .fnstart
/.fnend
pair.
Additionally, 32-bit Thumb instructions are now correctly rejected
when assembling for cores that do not support these instructions.
Assembler validations fix.
A bug in the assembler that caused some addw
and
subw
instructions with SP or PC as operand to be
wrongly rejected has been fixed.
-mauto-it
assembler option replaced with
-mimplicit-it
.
The -mauto-it
command-line option to the
assembler has been replaced with a more general
-mimplicit-it
option to control the behavior
of the assembler when conditional instructions appear outside
an IT instruction block. If you were previously using
-mauto-it
, you should now use
-mimplicit-it=always
. Other
-mimplicit-it
modes allow you to separately
control implicit IT instruction insertion behavior in ARM
and Thumb-2 code. For more information, refer to the
assembler manual.
In addition to renaming the option,
a number of bugs in the implicit IT generation have been fixed.
GDB backwards compatibility fix. A bug has been fixed that caused GDB to crash when loading symbols from binaries built by very old versions of GCC.
Debug information for variadic functions. A compiler bug that resulted in incorrect debug information for functions with variable arguments has been fixed.
Overlay sections.
arm-uclinuxeabi-readelf
now correctly recognizes
section headers for ARM_DEBUGOVERLAY
and ARM_OVERLAYSECTION
sections.
Code generation improvements. The compiler has been changed to make better use of VFP registers in mixed integer and floating-point code, resulting in faster code.
Register variable corruption.
A compiler bug has been fixed that caused incorrect code to be
generated when the frame pointer or other special-use registers
are used as explicit local register variables, introduced via the
asm
keyword on their declarations.
Startup code debugging fixes.
Two GDB bugs have been fixed that caused errors when
debugging startup code. One bug caused an internal error
message; the other caused the error Cannot find
bounds of current function
.
Assembler fix for mixed Thumb and ARM mode. A bug in the assembler has been fixed where mapping symbols were sometimes incorrectly placed at section boundaries. This could lead to incorrect disassembly in some cases.
C++ exception matching.
A C++ conformance defect has been fixed. According to
clause 15.3 of the standard, given a derived class
D
with base B
, a thrown D
*
object is not caught by a handler with type B
*&
(that is, a reference to pointer B
).
The compiler formerly treated this case incorrectly as if
the handler had type B *
, which does catch
D *
.
-fremove-local-statics
optimization.
The -fremove-local-statics
optimization is
now enabled by default at -O2
and higher
optimization levels.
Elimination of spurious warnings about NULL
.
The C++ compiler no longer issues spurious warnings about
comparisons between pointers to members and
NULL
.
Vectorizer improvements.
The compiler now generates improved code for accesses to static
nested array variables
(e.g. static int foo[8][8];
).
Linker bug fix.
A bug that caused the linker to crash when
.ARM.exidx
sections were discarded by a
linker script has been fixed.
Configuration file required for Debug Sprite. When invoking the Sourcery G++ Debug Sprite from the command line, it is now required to specify a board configuration file argument. This change eliminates a source of confusion and errors resulting from accidental omission of the configuration file argument, since recent improvements to debugger functionality depend on properties specified in the configuration file. Refer to Chapter 5, “Sourcery G++ Debug Sprite” for more details on invoking the Sourcery G++ Debug Sprite from the command line.
uClibc upgrade. uClibc has been updated to version 0.9.30 plus additional updates from the uclibc.org repository as of June 2009. Programs linked with uClibc shared libraries from a previous version of Sourcery G++ must be recompiled to run with the new version of uClibc.
GCC version 4.4.1.
Sourcery G++ Lite for ARM uClinux is now based on GCC version 4.4.1.
For more information about changes from GCC version 4.3 that was
included in previous releases, see
http://gcc.gnu.org/gcc-4.4/changes.html
.
Watchpoint support. The Sourcery G++ Debug Sprite now implements watchpoints on all currently-supported debugging devices.
Linker map address sorting.
The map generated by the linker -Map
option
now lists symbols sorted by address.