This section documents Sourcery G++ Lite changes for each released revision.
Internal compiler error with Cortex-A9.
A bug has been fixed that caused internal compiler errors when
compiling with -mcpu=cortex-A9
.
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.
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.
Overloaded function resolution. The C++ compiler now correctly diagnoses an error when the second operand of a comma expression is an unresolved set of overloaded functions. Previously, it incorrectly used the context of the comma expression to resolve the function.
Fix for backtrace
function in dynamically-linked executables.
The backtrace
function now reports
backtraces for dynamically-linked executables. Previously,
this function worked only with statically-linked
executables, i.e., executables linked with
-static
.
Pointer-to-member functions.
A bug has been fixed that caused the C++ compiler to crash
when compiling a pointer-to-member function reference
without an explicit &
operator. This
syntax is allowed only when the
-fms-extensions
command-line option is
used.
Assembler fix for -mauto-it
.
A bug in the assembler that caused incorrect assembly
of branches has been fixed. The bug only occurred when
automatically generating IT instructions using
-mauto-it
.
Fix for dlopen
in statically-linked executables.
A bug has been fixed that made statically-linked programs
crash when calling dlopen
with
RTLD_GLOBAL
to request global availability
of symbols from the shared module.
Overlay sections.
arm-none-linux-gnueabi-readelf now correctly recognizes
section headers for ARM_DEBUGOVERLAY
and ARM_OVERLAYSECTION
sections.
Linker bug fix.
A bug that caused the linker to crash when
.ARM.exidx
sections were discarded by a
linker script has been fixed.
Incorrect placement of 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 avoid processor errata) to be placed in data sections has been fixed.
New option for automatically generating IT blocks.
The assembler now allows use of conditional Thumb-2 instructions without
requiring explicit IT instructions.
Use the -mauto-it
command-line option to enable this
automatic generation of IT instructions.
Optimized memcpy
.
The implementation of memcpy
has
been optimized to increase performance on ARM targets that
support prefetch instructions.
Optimized memory and string routines.
The implementations of memcpy
,
memset
, strcmp
,
strcpy
, and strlen
have been optimized to increase performance on ARM targets.
Reduced compilation time. Compilation and build times when using Sourcery G++ Lite are now slightly faster. This performance improvement is the result of building the compilers and other host tools with a recent version of Sourcery G++, rather than an older GCC version.
Support for GLIBC backtrace
function.
Sourcery G++ Lite now supports the GLIBC backtrace
function on ARM GNU/Linux targets.
For more information, see the section called “GLIBC Backtrace Support”.
Assembler bug fix. A bug in the assembler that caused duplicate and missing mapping symbols has been fixed. The bug caused incorrect objdump output and incorrect byte-swapping for BE8 configurations.
Stack backtracing and C++ exception handling.
Improvements have been made to the linker in support of
C++ runtime exception handling and stack backtracing.
A problem that caused crashes during the backtrace of C routines
that were not compiled with the -fexceptions
option has been fixed.
In addition, the linker generates more compact stack unwinding
tables which can lead to smaller executables.
Incorrect linker-generated functions.
A bug that caused some linker-generated functions (such as stubs
to support interworking from ARM mode to Thumb mode) to contain only
nop
instructions instead of correct code sequences
has been fixed.
Assembler diagnostics for invalid instructions.
The assembler now issues diagnostics for invalid
ADR
and ADRL
instructions.
Formerly, these invalid instructions were silently mis-assembled.
This assembler bug did not affect correct code.
Sprite's failure to reset the target.
A bug has been fixed that sometimes caused the Sourcery G++
Debug Sprite to fail to reset the target when using the
multiple sequential connection feature (enabled via the
-m
command-line option). This problem was
specific to running the Debug Sprite on Microsoft Windows
hosts.
Disassembler bug fix. A bug has been fixed that caused incorrect disassembly of some object files with multiple sections whose symbol tables included symbols in the middle of functions. These typically resulted from hand-written assembly.
Linker crash with very large applications.
A linker bug that caused a crash when linking very large
applications with the --fix-cortex-a8
command-line option has been fixed.
arm-none-linux-gnueabi-objcopy bug fix.
A bug has been fixed that caused
arm-none-linux-gnueabi-objcopy to issue an error
when generating output in the Intel HEX format and using
--change-section-lma
to change section
addresses.
Linker script search path.
The bug in the linker has been fixed that caused it not to
follow its documented behavior for searching for linker
scripts named with the -T
option. Now
scripts are looked up first in the current directory, then
in library directories specified with -L
command-line options, and finally in the default system
linker script directory.
Errors when inserting breakpoints.
A GDB bug has been fixed that caused errors of the form
`
when setting a breakpoint on function
' found in
filename
psymtab but not in symtab
function
.
This error commonly occurred when setting breakpoints on functions
provided by the C library.
Cortex-A8 erratum workaround enabled for ARMv7-A.
The workaround for the erratum in Cortex-A8 processors mentioned
below is now enabled by default if you are targeting the ARMv7-A
architecture profile. The workaround can be disabled by passing
the --no-fix-cortex-a8
option to the linker.
Internal compiler error when optimizing.
A bug has been fixed that caused internal compiler
error: in build2_stat
when compiling.
Erratum workaround for Cortex-A8 processors.
The linker now implements a workaround for an erratum
in Cortex-A8 processors. If you are targeting an
affected part and wish to use the workaround, pass the
--fix-cortex-a8
option to the linker.
Please contact ARM for further details of the erratum.
Maximum code alignment increased.
The maximum allowed code alignment has been increased from
32 to 64 bytes. This change affects the .p2align
and .align
directives in GAS and the
-falign-functions
GCC option.
Corruption of block-scope variables. A compiler optimization bug that sometimes caused corruption of stack-allocated variables has been fixed. The bug affected variables declared in a local block scope in functions containing multiple non-overlapping lexical block scopes, a technique commonly used by programmers to reduce stack frame size. In some rare cases, other optimizations performed by the compiler were ignoring the local extent of such block-scope variables.
ARM EABI attributes. An assembler bug that resulted in some object files generated from hand-written assembly being incorrectly tagged as using VFP instructions has been fixed. This tagging was harmless for objects linked with Sourcery G++ tools and libraries, but may have affected third-party tools and libraries.
Incorrect code when using -falign-labels
.
A bug that caused the compiler to generate incorrect code
for switch
statements when the
-falign-labels
option is used has been fixed.
ARMv4T library selection.
Compiler options such as -mcpu=arm740t
,
specifying an ARMv4T CPU, now cause the compiler to link
with the ARMv4T libraries without
requiring -march=armv4t
to be specified as
well.
Core files in GDB. A bug in GDB has been fixed that caused incorrect values for CPSR (the status register) to be displayed when debugging core files. In some cases, this bug could also cause the gcore command to crash GDB.
Loop optimization improvements.
A new option, -fpromote-loop-indices
, has
been added to the compiler. Specifying this option enables an
optimization that improves the performance of loops with index
variables of integer types narrower than the target machine
word size, such as char or short.
This optimization also applies to int on 64-bit
targets.
Support for VFP and Advanced SIMD (NEON) register display. The Sourcery G++ debugger can now display VFP and Advanced SIMD registers when debugging Linux applications with gdbserver. This may require a kernel patch; see the section called “Target Kernel Requirements” for details.
Extraneous linker error messages.
A linker bug that caused extraneous error messages of the form
Dwarf Error: Offset (507) greater than or equal to
.debug_str size (421).
has been corrected. This bug did not
affect the correctness of output binaries.
Assembler marking of data.
Data generated using the assembler directives
.ascii
, .asciz
,
.dc.d
, .dc.s
, .dc.x
,
.dcb
, .dcb.b
, .dcb.d
,
.dcb.l
, .dcb.s
,
.dcb.w
, .dcb.x
, .ds
,
.ds.b
, .ds.d
, .ds.l
,
.ds.p
, .ds.s
, .ds.w
,
.ds.x
, .double
,
.fill
, .float
,
.incbin
, .single
,
.space
, .skip
,
.string
, .string8
,
.string16
, .string32
,
.string64
, and .zero
is now
correctly marked by the assembler as data rather than code.
This fixes incorrect byte-swapping of such data when linking
for BE8 configurations.
VFP ABI support. Sourcery G++ now supports the VFP variant of the Procedure Call Standard for the ARM® Architecture (AAPCS) in addition to the default soft-float ABI. The VFP ABI uses VFP registers to pass function arguments and return values, resulting in faster floating-point code. Code compiled with the VFP ABI is not compatible with the soft-float ABI libraries provided with Sourcery G++ Lite; however, VFP ABI libraries for little-endian ARM v7-A processors are now available as add-ons for Sourcery G++ Professional Edition. For further information about floating-point compiler, ABI and library support in Sourcery G++, refer to the section called “Enabling Hardware Floating Point”.
Improved vectorization.
Automatic vectorization for NEON now uses the fused
multiply-add (VMLA
) and fused
multiply-subtract (VMLS
) instructions.
These fused instructions are faster than the equivalent
two-instruction sequence consisting of a multiply followed
by an add or subtract.
GDB quit error.
A bug in GDB has been fixed that
caused quit to report Quitting:
You can't do that without a process to debug.
when
debugging a core dump file.
Out-of-bounds accesses to stack arrays.
A bug has been fixed that caused internal compiler errors
when some code involving out-of-bounds accesses to
stack-allocated arrays was compiled with
the -mthumb
option. Such code is not valid
C; although it is now accepted by the compiler and no
diagnostic is issued, it has undefined behavior if executed.
Thread cancellation in aio_suspend
.
A bug in the Thumb-2 version of
aio_suspend
has been fixed that caused
programs to crash if the calling thread was canceled.
Linking big-endian programs for ARMv7-A.
When linking for ARMv7-A targets with -mbig-endian
,
Sourcery G++ now implicitly assumes BE8 mode, rather than BE32.
GCC version 4.3.3.
Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.3.3.
This is a bug fix update to GCC.
For more information about changes from GCC version 4.3.2 that was
included in previous releases, see
http://gcc.gnu.org/gcc-4.3/changes.html
.
Improved NOP generation for Thumb-2 cores. The assembler now generates Thumb-2/ARMv6K architectural NOP instructions when alignment padding is required in code sections.
ARM atomic memory operations.
Support has been added for atomic memory operations in ARM
Linux applications via built-in functions (for example,
__sync_fetch_and_add
). Please refer to the GCC
manual (Atomic Builtins) for further information.
Internal compiler error with -O3
or -fpredictive-commoning
.
A bug has been fixed that caused internal compiler errors
when compiling some code with -O3
or -fpredictive-commoning
.
CS3 board and processor support. CS3 board and processor support has been cleaned up to remove entries that are not appropriate for or supported by Sourcery G++ Lite on ARM GNU/Linux targets. This includes processors for which Sourcery G++ Lite does not include appropriate run-time libraries. In addition, CS3 support files for boards and processors that do not have an MMU to support running the Linux kernel have been removed. These changes are intended to simplify processor and board selection.
C++ named operators bug fix.
A bug has been fixed that caused the compiler to crash in
some cases when the C++ operators and_eq
,
bitand
, bitor
, compl
,
not_eq
, or_eq
and
xor_eq
were used in contexts where the
preprocessor converts their names to strings.
Debug information for anonymous structure types. A GCC bug in the generation of debug information for anonymous structure types in C++ code has been fixed. The bug caused printing the type information for such structures in the debugger (via the ptype command) to fail with an error message.
timer_delete
bug.
A bug has been fixed that caused some programs to crash or
hang after calling timer_delete
.
Linker errors on non-ELF input.
A bug has been fixed that caused internal errors from the
linker when linking non-ELF input files (with the
-b
or --format
linker
options).
Undefined weak references in shared libraries. A linker bug has been fixed affecting calls from Thumb code in shared libraries to functions that are undefined weak references when the shared library is linked. Such calls executed as nops whether or not the functions were defined at run time. This affected thread-related code in the Thumb-2 versions of the standard C++ library provided with Sourcery G++, causing some multithreaded C++ programs to crash.
Improved code generation. The compiler has been improved to generate better code for an integer multiplication whose result feeds into an addition.
Installer fails during upgrade. The Sourcery G++ installer for Microsoft Windows hosts could fail during an upgrade while waiting for the previous version to be uninstalled. This bug has been fixed.
Performance improvements. Tuning parameters for ARM code generation have been adjusted to improve performance of the generated code.
Uninstaller removed by upgrade. The uninstaller could be incorrectly deleted during an upgrade on Microsoft Windows hosts. This bug has been fixed.
Remote debugging connection auto-retry. The target remote command within GDB now uses a configurable auto-retry timeout when establishing TCP connections. This is useful in avoiding race conditions when the remote GDB stub or GDB server is launched simultaneously with GDB. The auto-retry behavior is enabled by default; refer to the GDB manual for details.
CMP
Thumb-2 instruction.
The assembler no longer issues an error about
CMP
instructions in which the second
argument is the stack pointer (r13
), as
these are valid instructions. However, use of the stack
pointer in this context is deprecated in the current ARM
architecture specification and the assembler now warns about
the deprecated use.
DMB
, DSB
, and
ISB
instructions on ARMv6-M.
The assembler now accepts the DMB
,
DSB
, and ISB
instructions on ARMv6-M CPUs, including Cortex-M0 and
Cortex-M1. These instructions were incorrectly rejected on
these CPUs in previous releases.
Thumb half-precision floating point bug fix. A compiler bug has been fixed that formerly caused incorrect code to be generated in Thumb mode for functions using half-precision floating-point constants. The bug did not affect Thumb-2 code.
Improved code generation. The compiler has been improved to generate better code for integer multiplication by certain constants.
Thumb-2 switch
code generation bug fix.
A bug has been fixed that caused incorrect Thumb-2 code to
be generated for some switch
statements.
This affected code in the libraries provided with
Sourcery G++ that handles cleanup
attributes
and POSIX thread cancellation.
Internal compiler errors when optimizing. A defect that occasionally caused internal compiler errors when partial redundancy elimination (PRE) optimization was enabled has been corrected.
Install directory pathnames. Bugs in the install and uninstall scripts for Linux hosts that caused errors or incorrect behavior when the Sourcery G++ install directory pathname contains whitespace characters have been fixed.
Internal compiler error with large NEON types. A bug has been fixed that caused internal compiler errors when compiling code using NEON types at least 32 bytes wide.
Temporary files on Microsoft Windows.
On Microsoft Windows hosts, Sourcery G++ Lite now uses the standard
Windows algorithm to choose the directory in which to place
temporary files. This change eliminates a crash that
occurred if none of the TEMP
,
TMP
, or TMPDIR
variables were
set to a suitable directory.
Vectorized shift fix.
A bug has been fixed that caused incorrect code for loops
containing a right shift by a constant. The bug affected
code compiled with -mfpu=neon
and loop vectorization enabled with -O3
or
-ftree-vectorize
.
Incorrect code for nested functions. A bug in GCC that caused the compiler to generate incorrect code for nested functions has been fixed. The bug resulted in incorrect stack alignments in the affected functions.
Binutils update. The binutils package has been updated to version 2.19.51.20090205 from the FSF trunk. This update includes numerous bug fixes.
sched_setaffinity
bug fix.
A bug has been fixed that caused the Thumb-2 version of
sched_setaffinity
to fail
inappropriately with EFAULT
.
ARM build attributes conformance improvements. Several ARM EABI 2.07 conformance issues relating to the handling of build attributes in the assembler and linker have been fixed. All build attribute types are now recognized, and can now be declared by name, in addition to by number. Support for merging attributes in the linker has been improved, and the linking of incompatible objects is now detected and rejected in more cases.
Internal compiler error
with -fremove-local-statics
.
An internal compiler error that occurred when using
the -fremove-local-statics
option has been
fixed. The error occurred when compiling code with
function-local static
array or structure
variables.
GDB update. The included version of GDB has been updated to 6.8.50.20081022. This update includes numerous bug fixes.
Linker crash on incompatible input files. Some third-party compilers, including ARM RealView® 4.0, produce a build attribute marking output files that are not compatible with the ABI for the ARM Architecture. This attribute sometimes caused the linker to crash. The linker now correctly issues an error message.
Bug fix for assembly listing.
A bug that caused the assembler to produce corrupted
listings (via the -a
option) on Windows
hosts has been fixed.
Optimizer bug fix.
A bug that caused an unrecognizable insn
internal compiler error when compiling at optimization levels
above -O0
has been fixed.
VFP compiler fix.
A compiler bug that resulted in
internal compiler error: output_operand: invalid expression as operand
when generating VFP code has been fixed.
GDB display of source. A bug has been fixed that prevented GDB from locating debug information in some cases. The debugger failed to display source code for or step into the affected functions.
Bug fix for libSegFault.so
.
Binaries linked with libSegFault.so
now
produce a correct backtrace when a segmentation fault
occurs. Formerly, the location of the fault was shown
incorrectly.
GDB segment warning.
Some compilers produce binaries including uninitialized data
regions, such as the stack and heap. GDB incorrectly
displayed the warning Loadable segment
"
for such binaries; the warning has now
been fixed.
name
" outside of ELF
segments
Misaligned NEON memory accesses.
A bug has been fixed that caused the compiler to use aligned
NEON load/store instructions to access misaligned data when
autovectorizing certain loops. The bug affected code compiled
with -mfpu=neon
and loop vectorization enabled
with -O3
or -ftree-vectorize
.
Sprite crash on error. A bug has been fixed which sometimes caused the Sourcery G++ Debug Sprite to crash when it attempted to send an error message to GDB.
Persistent remote server connections. A GDB bug has been fixed that caused the target extended-remote command to fail to tell the remote server to make the connection persistent across program invocations.
Definition of va_list.
In order to conform to the ABI for the ARM Architecture, the
definition of the type of va_list (defined in
stdarg.h
) has been
changed. This change impacts only the mangled names of C++
entities. For example, the mangled name of a C++ function
taking an argument of type va_list, or
va_list *, or another type involving
va_list has changed. Since this is an
incompatible change, you must recompile and relink any
modules defining or using affected
va_list-typed entities.
Thumb-2 assembler fixes.
The Thumb-2 encodings of QADD
,
QDADD
, QSUB
, and
QDSUB
have been corrected. Previous versions
of the assembler generated incorrect object files for these
instructions. The assembler now accepts the
ORN
, QASX
, QSAX
,
RRX
, SHASX
, SHSAX
,
SSAX
, USAX
, UHASX
,
UQSAX
, and USAX
mnemonics. The
assembler now detects and issues errors for invalid uses of
register 13 (the stack pointer) and register 15 (the program
counter) in many instructions.
Printing casted values in GDB.
A GDB bug that caused incorrect output for expressions
containing casts, such as in the
print *(Type *)ptr
command, has been fixed.
Bug fix for objcopy/strip. An objcopy bug that corrupted COMDAT groups when creating new binaries has been fixed. This bug also affected strip -g.
Improved support for debugging RealView® objects . GDB support for programs compiled by the ARM RealView® compiler has been improved.
Binutils support for DWARF Version 3. The addr2line command now supports binaries containing DWARF 3 debugging information. The ld command can display error messages with source locations for input files containing DWARF 3 debugging information.
NEON improvements.
Several improvements and bug fixes have been made to the
NEON Advanced SIMD Extension support in GCC. A problem that
caused the autovectorizer to fail in some circumstances has
been fixed. Also, many of the intrinsics available via the
arm_neon.h
header file
now have improved error checking for out-of-bounds arguments,
and the vget_lane
intrinsics that return signed
values now produce improved code.
NEON compiler fix.
A compiler bug that resulted in incorrect NEON code being
generated has been fixed. Typically the incorrect code
occurred when NEON intrinsics were used inside small
if
statements.
Connecting to the target using a pipe.
A bug in GDB's
target remote | program
command has been fixed. When launching the specified
program
failed, the bug caused
GDB to crash, hang, or give a message
Error: No Error
.
Mixed-case NEON register aliases.
An assembler bug that prevented NEON register aliases from being
created with mixed-case names using the .dn
and
.qn
directives has been fixed. Previously only
aliases created with all-lowercase or all-uppercase names
worked correctly.
Janus 2CC support.
GCC now includes a work-around for a hardware bug in Avalent
Janus 2CC cores. To compile and link for these cores, use
the -mfix-janus-2cc
compiler option. If
you are using the linker directly use the
--fix-janus-2cc
linker option.
ARM exception handling bug fix. A bug in the runtime library has been fixed that formerly caused throwing an unexpected exception in C++ to crash instead of calling the unexpected exception handler. The bug only affected C++ code compiled by non-GNU compilers such as ARM RealView®.
Mangling of NEON type names. A bug in the algorithm used by the C++ compiler for mangling the names of NEON types, such as int8x16_t, has been fixed. These mangled names are used internally in object files to encode type information in addition to the programmer-visible names of the C++ variables and functions. The new mangled name encoding is more compact and conforms to the ARM C++ ABI.
Errors after loading the debugged program. An intermittent GDB bug has been fixed. The bug could cause a GDB internal error after the load command.
Half-precision floating point. Sourcery G++ now includes support for half-precision floating point via the __fp16 type in C and C++. The compiler can generate code using either hardware support or library routines. For more information, see the section called “Half-Precision Floating Point”.
GDB update.
The included version of GDB has been updated to
6.8.50.20080821. This update adds numerous bug fixes and
new features, including support for decimal floating point,
improved Thumb mode
support, the new find command to
search memory, the new /m
(mixed
source and assembly) option to the
disassemble command, and the new
macro define command to define C
preprocessor macros interactively.
Uppercase operands to IT instructions.
The assembler now accepts both uppercase and lowercase operands
for the IT
family of instructions.
NEON autovectorizer fix.
A compiler bug that caused generation of bad VLD1
instructions has been fixed. The bug affected code compiled with
-mfpu=neon -ftree-vectorize
.
Remote debugging improvements. The gdbserver utility now supports a more efficient communications protocol that can reduce latency during remote debugging. The protocol optimizations are enabled automatically when gdbserver operates over a TCP connection. Refer to the GDB manual for more information.
Output files removed on error. When GCC encounters an error, it now consistently removes any incomplete output files that it may have created.
ARMv7 offset out of range errors.
An assembler bug that resulted in
offset out of range
errors when compiling for
ARMv7 processors has been fixed.
Thumb-2 MUL
encoding.
In Thumb-2 mode, the assembler now encodes MUL
as a 16-bit instruction (rather than as a 32-bit
instruction) when possible. This fix results in smaller
code, with no loss of performance.
ARM C++ ABI utility functions.
Vector utility functions required by the ARM C++ ABI no
longer crash when passed null pointers. The affected
functions are __aeabi_vec_dtor_cookie
,
__aeabi_vec_delete
,
__aeabi_vec_delete3
, and
__aeabi_vec_delete3_nodtor
.
In addition, on GNU/Linux systems, the ARM C++ ABI utility
functions are now exported from the
libstdc++.so
shared library.
These functions are not intended for use by application
programmers; they are only called by compiler-generated
code. They are not presently used by the GNU C++ compiler,
but are used by some other compilers, including ARM's
RealView®
compiler.
GCC version 4.3.2.
Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.3.2.
For more information about changes from GCC version 4.2 that was
included in previous releases, see
http://gcc.gnu.org/gcc-4.3/changes.html
.
Smaller Thumb-2 code.
When optimizing for size (i.e., when -Os
is
in use), GCC now generates the 16-bit MULS
Thumb-2 multiply instruction instead of the 32-bit
MUL
instruction.
Thumb-2 RBIT
encoding.
An assembler bug that resulted in incorrect encoding of the
Thumb-2 RBIT
instruction has been fixed.
Sprite communication improvements. The Sourcery G++ Debug Sprite now uses a more efficient protocol for communicating with GDB. This can result in less latency when debugging, especially when running the Sprite on a remote machine over a network connection.
Marvell Feroceon compiler bug fix. A bug that caused an internal compiler error when optimizing for Marvell Feroceon CPUs has been fixed.
Misaligned accesses to packed structures fix. A bug that caused GCC to generate misaligned accesses to packed structures has been fixed.
Bug fix for objdump on Windows.
An objdump bug that caused the -S
option
not to work on Windows in some cases has been fixed.
Disassembler bug fix. A bug in the disassembler has been fixed that formerly caused objdump to crash when processing raw binary files, or other executables with an empty symbol table.
NEON assembler symbols.
An assembler bug that caused spurious undefined symbols to be
generated has been fixed. The mov d0, d1
instruction
would incorrectly cause an undefined symbol d1
to be created.
Profiling bug fix.
A bug that caused incorrect behavior and crashes when running code
compiled for gprof profiling
(-pg
) has been fixed.
GDB info registers crash fix. Executing info registers after executing flushregs no longer crashes GDB.
GDB and Ctrl+C on Windows . GDB no longer crashes when you press Ctrl+C twice during remote debugging to give up waiting for the target.
ARM Cortex-A9 processor support.
The compiler can now generate code optimized for the
ARM Cortex-A9 processor. This is enabled by the
the -mcpu=cortex-a9
command-line option.
MOVW and MOVT relocations.
A linker error that resulted in incorrect offsets when processing
relocations on MOVW
and MOVT
instructions
referencing mergeable string sections has been fixed.
Improved argument-passing code. The compiler can now generate more efficient code for certain functions whose arguments must be sign-extended to conform with language or ABI conventions. The required conversion was formerly being performed both in the called function and at all call sites; now the redundant conversion has been eliminated for functions that can only be called within the compilation unit where they are defined.
Multi-process mode for gdbserver.
The gdbserver utility has a new command-line option,
--multi
, that allows you to use it to debug multiple
program instances. Refer to the Debugger manual for more information.
GDB qOffsets
crash fix.
GDB no longer crashes when a remote stub provides load
offsets for an unlinked object file.
Linker error allocating ELF segments. A bug where the linker produces an incorrect error message with segments at the top of the address space has been fixed.
GCC stack size limit increased. On Windows hosts, the maximum stack size for the GCC executable has been increased. This means that more complex programs can be compiled.
Stack overflows in printf
.
Some stack overflows in printf
-family
functions have been fixed. These overflows occurred with
format strings with very large precision values such as
%1.300000000s
, and with some invalid format
strings.
Invalid object file after strip.
A bug in the assembler has been fixed that formerly caused
.set
constructs to emit symbol
expression
symbol
in the
wrong section. This in turn caused inconsistent behavior
after stripping the symbol table.
GCC update. The GCC package has been updated to version 4.2.3. This version includes numerous bug fixes since GCC 4.2.
License checking on Linux.
Sourcery G++'s license-checking logic now includes a workaround
for a kernel bug present in some versions of Linux. This bug
formerly caused failures with an error message from the
cs-license
component.
Cortex-R4F and VFPv3-D16.
Sourcery G++ now supports the ARM Cortex-R4F CPU
and the VFPv3-D16 floating-point coprocessor. These can
be selected with -mcpu=cortex-r4f
and
-mfpu=vfpv3-d16
, respectively.
Overlapping operands for long multiply instructions.
An incorrect assembler warning has been removed in the case of
overlapping source and destination operands for
UMULL
, SMULL
, UMLAL
and SMLAL
instructions on ARMv6 processors.
Size optimization bug.
A code generation bug that caused corruption of function
arguments when compiling with -Os
has been
fixed. The corruption occurred as part of the sibling call
optimization.
C++ library ABI fix.
GCC 4.2.1's std::type_info
was not fully
compatible with earlier versions. The ordering of four
virtual functions has been fixed in this update.
Improved gdbserver thread support.
The GNU/Linux remote debug agent,
gdbserver, no longer fails when two
threads call pthread_create
at the same
time. It also supports limited thread debugging when
symbols for libpthread.so
are not
available.
GDB support for user-defined prefixed commands. The GDB define and document commands, which allow you to add new commands to the GDB command-line interface, now support creating commands within an existing prefix such as target. Hooks for prefixed commands are also supported. Refer to the Debugger manual for more information.
GDB update. The included version of GDB has been updated to 6.7.20080107. This update includes numerous bug fixes.
UNC pathname bug fix.
A bug has been fixed that caused linker errors on Windows
hosts when running a Sourcery G++ toolchain installed in a UNC
path
(\\
).
host
\directory
Linker crash on invalid input files.
Some older versions of GCC generated object files with
invalid mergeable string sections when compiling with
-fmerge-all-constants
. This bug was fixed
in Sourcery G++ as of version 4.1-43. However, since system
libraries included with some GNU/Linux distributions were
affected by this bug, the linker has now been changed to
accept object files with such invalid sections, rather than
crash or produce an error message.
GDB search path bug fix.
A bug in GDB has been fixed that formerly resulted in an internal
error when setting solib-search-path
or
solib-absolute-prefix
after establishing a
connection to a remote target.
Binutils update. The binutils package has been updated to version 2.18.50.20080215 from the FSF trunk. This update includes numerous bug fixes.
Race fixes in setuid
.
Several bugs in multi-threaded setuid
have been fixed. The bugs led to threads with incorrect
privileges and hangs at thread exit. The
setgid
, seteuid
,
setegid
, setreuid
,
setregid
,
setresuid
, and
setresgid
functions were also affected.
gdbserver support for execution wrappers.
gdbserver has a new command-line option,
--wrapper
, which specifies a wrapper for any
programs run by gdbserver. The specified wrapper can
prepare the system and environment for the new program.
Read-only variables.
The C++ compiler now places variables whose types are
instantiations of template classes in a read-only data
section if they are declared const
and
initialized with a constant value. This changes reduces the
RAM usage of affected applications.
CodeSourcery Common Startup Code Sequence. Support for CS3, a unified startup scheme is included.
Volatile postincrement and postdecrement bug fix. A code generation bug that caused postincrement or postdecrement of a volatile object to reread the modified value from that object in some contexts has been fixed. The bug affected code performing a comparison of the postincrement or postdecrement expression with a constant, or that was optimized to comparison with a constant.
Support for debugging with FlashPro3. Support has been added for debugging with the Actel FlashPro3 JTAG device on Windows hosts. This works only with Actel Cortex-M1 FPGAs.
C++ class debug information.
The flag -femit-class-debug-always
is now disabled by default. The flag produces
duplicate C++ class debug information as a
work-around for older debuggers.
Improved breakpoints in constructors and template functions. GDB now supports breakpoints on source code locations that have several code addresses associated with them. Setting a breakpoint on a constructor automatically associates the breakpoint with all constructor bodies generated by GCC. If you set a breakpoint on a line of a templated function, GDB breaks at the indicated line in all instantiations of the templated function.
GDB printf %p.
GDB's printf command now supports the
"%p"
format specifier.
Widening multiply instructions for ARMv6 and later.
GCC now makes use of the 32-to-64-bit widening multiply instructions
(umull
, smull
, umlal
, and
smlal
) when generating code for ARMv6 and later.
A bug had caused these instructions to be used for ARMv3 to
ARMv5 only.
GDB update. The included version of GDB has been updated to 6.6.20070821. This update includes numerous bug fixes.
Assembler code file name suffixes.
GCC now recognizes .sx
as well as
.S
as a file name suffix indicating
assembler code which must be preprocessed.
The alternate suffix may be useful in conjunction with other
program development tools on Windows that do not distinguish
case on filenames and treat .S
the same
as .s
, which GCC uses to indicate assembler
code without preprocessing.
Preprocessing assembly code.
The compiler driver passes -I
options to the
assembler, so that #include
directives
(processed by the preprocessor) and .include
directives (processed by the assembler) use the same search
path.
Dynamically-initialized const
variables.
Dynamically-initialized namespace-scope C++ variables are no
longer placed in read-only data sections, even when marked
const
. These variables must be modified at
startup, so they cannot be placed in ROM, even though their
values cannot change once initialized.
Register allocation bug fix. A register allocation bug has been fixed. Under rare circumstances, the bug caused incorrect code generation.
iWMMXt bug fix. A GCC bug affecting code generation for iWMMXt processors has been fixed. The bug caused internal compiler errors when compiling some functions with large stack frames.
NEON coprocessor system registers.
The assembler now accepts the MVFR0
and
MVFR1
coprocessor registers in
fmrx
and fmxr
instructions.
Disabling diagnostics for use of system header and
library directories.
The warnings for use of options such as
-I/usr/include
when cross compiling can be
disabled with a new option
-Wno-poison-system-directories
. This
option is intended for use in chroot environments when such
directories contain the correct headers and libraries for
the target system rather than the host.
Default linker script.
GCC no longer uses the simulator linker script by default.
To avoid a link failure, you must specify a linker script
explicitly with the -T
command-line option,
or via the item on the
menu in the Sourcery G++ IDE.
Debugging of statically-linked threaded programs.
GDB and EGLIBC now support thread debugging when using GCC's
-static
option. Existing statically-linked
programs must be relinked after upgrading EGLIBC for this
fix.
Thumb-2 doubleword writeback addressing modes.
An assembler bug that caused writeback addressing modes for
ldrd
and strd
to be
incorrectly encoded has been fixed.
Stricter check for anonymous unions. G++ now issues an error about invalid code that uses the same name for a member of an anonymous union and an entity in the surrounding namespace. For example, you will now get an error about code like:
int i; static union { int i; };
because both the global variable and the anonymous union
member are named i
. To make this code
valid you must change one of the declarations to use a
different name.
GCC update. The GCC package has been updated to version 4.2.1. This version includes numerous bug fixes since GCC 4.2.
Smaller code for C++ destructors.
G++ now generates more compact code to handle the
destruction of C++ objects declared at namespace scope or
declared within a function scope using the
static
keyword.
Robustness on Microsoft Windows. Defects that sometimes caused GDB to become non-responsive on Microsoft Windows have been eliminated.
Debug information for thread-local variables. GCC now generates accurate debug information for thread-local variables.
Binutils update.
The binutils package has been updated to the 2007-08-19
version of the pre-2.18 FSF trunk. This contains many
new improvements and bug fixes. For more information,
refer to the manuals for the individual utilities, and
to the binutils web site at
http://www.gnu.org/software/binutils/
.
Debugging information fix. GCC no longer generates invalid debugging information for sections with no contents. The invalid debugging information caused the GNU/Linux prelinker to crash.
Calls to undefined weak symbols.
The linker now implements semantics that comply to the ARM EABI for
R_ARM_CALL
and T_ARM_THM_CALL
relocations against undefined weak symbols. These now result
in a jump to the next instruction.
Thread synchronization no longer uses swp
.
All of the thread synchronization functions (such as
pthread_mutex_lock
) have been changed to
avoid using the swp
instruction. This instruction
is deprecated in ARM V6 and executes very slowly on recent CPUs.
Instead, the synchronization functions now use kernel-provided
instruction sequences that are optimal for the processor in use.
Thumb-2 shift instruction aliases.
The assembler now accepts mov
with shifted
operands as an alias for Thumb-2 shift instructions.
For example mov r0, r1, lsl r2
is encoded as
lsl r0, r1, r2
.
Thumb-2 branches to shared libraries.
The linker can now generate PLT stubs for
R_ARM_THM_JUMP24
and
R_ARM_THM_JUMP19
relocations.
This occurs when Thumb-2 branch instructions refer to
symbols imported from shared libraries.
Inlined function debugging fix. GDB now backtraces correctly when stopped at the first instruction of an inlined function. Earlier versions would sometimes encounter internal errors in this situation.
Assembler skipping \
characters.
A bug is fixed where the assembler would skip \
characters when they appeared at certain positions in the
input file. This bug primarily affected assembler macros.
Improved diagnostics for region overflow. The linker will now give more helpful diagnostics when the object files being linked are too big for one of the memory regions defined in the linker script.
EABI object attribute merging. The linker now properly merges EABI object attributes into its output file.
Thumb-2 exception return instructions.
An assembler bug that caused subs pc, lr, #const
and
movs pc, lr
to be incorrectly encoded has been fixed.
Tag_ABI_PCS_wchar_t object attributes.
Objects generated with -fshort-wchar
are
now given the correct Tag_ABI_PCS_wchar_t
EABI object attribute annotations.
Spurious compiler warnings eliminated.
GCC no longer emits warnings when linker-specific
command-line options are provided in combination with modes
that do not perform linking, such as with the
-c
flag.
Debugging of inlined functions. GDB now supports inlined functions. GDB can include inlined functions in the stack trace; display inlined functions' arguments and local variables; and step into, over, and out of inlined functions.
Uppercase special register names.
The assembler now accepts both uppercase and lowercase
special register names when assembling msr
and mrs
instructions for the Microcontroller
profile of the ARM Architecture.
Debugger access to out-of-bounds memory.
GDB turns on inaccessible-by-default
by
default, disallowing access to memory outside the regions
specified in a board configuration.
Call shortening bug fix.
GCC no longer overrides __attribute__((long_call))
on
calls to locally-defined functions when the function is weak,
or when it is in a different section from the caller.
Binutils update. The binutils package has been updated from version 2.17 to the pre-2.18 FSF trunk. This is a significant update with many improvements and bug fixes.
Changes to the assembler (as) include:
New linker (ld) features include:
--default-script
has been added to give more precise control over linker script
processing.
-Bsymbolic-functions
,
--dynamic-list
,
--dynamic-list-cpp-new
, and
--dynamic-list-data
to control symbols
that should be dynamically linked.
--print-gc-sections
option lists
sections removed by garbage collection.
Other changes include:
--extract-symbol
option to extract only
symbol table information from the input file.
For more information, refer to the manuals for the individual
utilities, and the binutils web site at
http://www.gnu.org/software/binutils/
.
GDB update. The included version of GDB has been updated to 6.6.50.20070620. This update includes numerous bug fixes.
Thread cancellation bug fix. A bug in EGLIBC causing thread cancellation to fail when running under Linux kernels 2.6.18 and later has been fixed.
Forced alignment of array variables.
A new option -falign-arrays
has been added to
the compiler. Specifying this option sets the minimum alignment
for array variables to be the largest power of two less than or
equal to their total storage size, or the biggest alignment used
on the machine, whichever is smaller. This option may be helpful
when compiling legacy code that uses type punning on arrays that
does not strictly conform to the C standard.
ARM EABI compliance. Objects produced by Sourcery G++ are now marked as ARM ELF version 5 rather than ARM ELF version 4. This reflects compliance with recent revisions of the ARM EABI. Sourcery G++ still accepts objects marked with version 4.
Smaller C++ applications.
The C++ runtime library has been modified so that using
namespace-scope objects with destructors does not pull in
unnecessary support functions. Therefore, statically linked
C++ applications compiled with
-fno-exceptions
are substantially smaller.
ARMv6-M floating-point bug fix. A bug affecting conversion of wider floating-point types to subnormal float values on ARMv6-M processors has been fixed.
NEON coprocessor system registers.
The assembler now accepts the MVFR0
and
MVFR1
coprocessor registers in
fmrx
and fmxr
instructions.
Disabling diagnostics for use of system header and
library directories.
The warnings for use of options such as
-I/usr/include
when cross compiling can be
disabled with a new option
-Wno-poison-system-directories
. This
option is intended for use in chroot environments when such
directories contain the correct headers and libraries for
the target system rather than the host.
Thumb-2 doubleword writeback addressing modes.
An assembler bug that caused writeback addressing modes for
ldrd
and strd
to be
incorrectly encoded has been fixed.
Thumb-2 shift instruction aliases.
The assembler now accepts mov
with shifted
operands as an alias for Thumb-2 shift instructions.
For example mov r0, r1, lsl r2
is encoded as
lsl r0, r1, r2
.
Thumb-2 branches to shared libraries.
The linker can now generate PLT stubs for
R_ARM_THM_JUMP24
and
R_ARM_THM_JUMP19
relocations.
This occurs when Thumb-2 branch instructions refer to
symbols imported from shared libraries.
EABI object attribute merging. The linker now properly merges EABI object attributes into its output file.
Thumb-2 exception return instructions.
An assembler bug that caused subs pc, lr, #const
and
movs pc, lr
to be incorrectly encoded has been fixed.
Tag_ABI_PCS_wchar_t object attributes.
Objects generated with -fshort-wchar
are
now given the correct Tag_ABI_PCS_wchar_t
EABI object attribute annotations.
Uppercase special register names.
The assembler now accepts both uppercase and lowercase
special register names when assembling msr
and mrs
instructions for the Microcontroller
profile of the ARM Architecture.
Disassembly of overlapping sections. A bug in the disassembler that caused code to be displayed as data (and vice-versa) in files with overlapping sections has been fixed. This mainly affects the objdump utility.
Installer hangs while refreshing environment.
The Sourcery G++ installer for Microsoft Windows
now updates the PATH
environment
variable without waiting for open applications to
acknowledge the update. This change prevents open
applications from blocking the installer's progress.
Improved assembler diagnostics for 8-bit offsets.
The assembler now correctly diagnoses out-of-range offsets to
instructions such as LDRD
as 8-bit rather
than half-word offsets.
Less disk space required for installation. Sourcery G++ Lite packages are smaller because multiple copies of files have been replaced with hard and/or symbolic links when possible. Both the size of the installer images and the amount of disk space required for an installed package have been reduced.
Thumb register corruption fix. A bug in the compiler that could cause register corruption in Thumb mode has been fixed. The compiler was formerly emitting code to restore registers on function return that was not interrupt safe.
__aeabi_lcmp.
An error in the libgcc implementation of
__aeabi_lcmp
that caused
incorrect results to be returned has been fixed. This is a support
routine defined by the ARM EABI. GCC does not normally use this
routine directly, however it may be used by third-party code.
The \@
assembler pseudo-variable.
A bug in the assembler that caused uses of the \@
pseudo-variable to be mis-parsed as comments has been fixed.
Crash when generating vector code.
A bug that sometimes caused the compiler to crash when invoked with
the -ftree-vectorize
option has been fixed.
Propagation of Thumb symbol attributes.
Symbols referring to Thumb functions on ARM targets now
have their Thumb attribute correctly propagated to any aliases
defined with .set
or .symver
.
Linking of non-ELF images. A linker bug that could cause a crash when linking non-ELF objects for ARM targets has been fixed.
Invalid load instructions.
A bug in the compiler which caused it to generate invalid
assembly (e.g. ldrd r0, [#0, r2]
)
has been fixed.
VFPv3/NEON debug information. A bug in the compiler which caused it to generate incorrect debug information for code using VFPv3/NEON registers has been fixed. The debugger is now able unable to locate and display values held in these registers.
ARMv6-M system instructions.
An assembler bug that caused some ARMv6-M system instructions to
be incorrectly rejected has been fixed. The affected instructions
are msr
, mrs
,
yield
, wfi
,
wfe
and sev
.
Assembly of Thumb-2 load/store multiple instructions.
The Thumb-2 ldm
and stm
assembly mnemonics are now assembled to ldr
and str
instructions when a single register is
transferred, as specified in the Thumb-2 Architecture Supplement.
Conditional Thumb-2 branch instructions. A linker bug that could cause objects involving conditional Thumb-2 branch instructions to be incorrectly rejected has been fixed.
Alignment bug fix. A bug has been fixed that formerly caused incorrect code to be generated in some situations for copying structure arguments being passed by value. The incorrect code caused alignment errors on stack accesses on some targets.
Thumb-2 runtime libraries.
Sourcery G++ now includes runtime libraries built as Thumb-2 code
for use on ARMv7 systems. These can be found in the
libc/thumb2/
directory.
Marvell Feroceon support.
Sourcery G++ Lite now generates code optimized for Marvell Feroceon CPUs
when the mcpu=marvell-f
option is specified.
This option also selects runtime libraries optimized for
this processor.
Assembly of SRS instructions.
An assembler bug that resulted in incorrect encoding of the
Thumb-2 SRS
instruction has been fixed.
In addition the assembler supports explicit specification of
the base register, as accepted by other ARM toolchains.
VFP disassembly crash.
A bug that caused crashes when disassembling some forms of the VFP
fmrx
and fmxr
instructions
has been fixed.
Improved debugging for optimized code. GDB's ability to print and change variables' values in optimized code is improved. GDB now tracks variable scopes more accurately, making better use of the detailed debugging information produced by Sourcery G++ compilers.
Improved handling of Windows paths in GDB. GDB now properly recognizes the names of source files that were passed to the compiler using an absolute path on Windows. You may refer to the file either by its base name (without any leading directory components), by the exact path passed to the compiler, or by its absolute path.
ARM Cortex-R4 performance improvements.
Sourcery G++ Lite now generates faster code when compiling for the
ARM Cortex-R4 processor by scheduling instructions for the
processor's pipelines. To generate code
for this processor, use the -mcpu=cortex-r4
command-line option.
GDB update. The included version of GDB has been updated to 6.6.50.20070228. This update includes numerous bug fixes and improved support for C++ pointers to members.
Assembling Thumb store-multiple instructions.
The assembler now issues an error message instead of crashing on
load/store multiple instructions that incorrectly use Thumb-2
addressing modes (e.g., ldmdb
) in legacy Thumb
syntax mode. If you want to use these address modes, you should use
unified syntax mode instead.
ARM Cortex-A8 performance improvements.
Sourcery G++ Lite now generates faster code when compiling for the
ARM Cortex-A8 processor by scheduling instructions for the
processor's dual-issue pipelines. To generate code
for this processor, use the -mcpu=cortex-a8
command-line option.
GCC version 4.2.
Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.2.
For more information about changes from GCC version 4.1 that was
included in previous releases, see
http://gcc.gnu.org/gcc-4.2/changes.html
.
Fix --gc-sections and C++ exceptions.
A bug in the --gc-sections
linker option has been
fixed. Previously this would incorrectly remove unwinding tables,
breaking C++ applications that use exceptions.
Symbols defined in linker scripts. A bug is fixed that caused the linker to crash in some
circumstances when a linker script defined a symbol in an output
section. Typically usage is where the script contained a
__DATA_LOAD = LOADADDR(.data)
statement in the
.data
section.
ARM NEON store intrinsics bug fix.
A compiler bug that incorrectly caused calls to ARM NEON
store intrinsics (such as vst1_u8
) to be
optimized away has been fixed.
Improvements to ARM NEON support. The ARM NEON support in GCC has been enhanced to comply with new rules for containerized vector types specified in the ARM procedure call standard. Additionally, the compiler now rejects implicit conversions between NEON polynomial vector types and NEON integer vector types of the same layout.
Complex numbers bug fix. A bug that could lead to incorrect code generation for code using complex numbers has been fixed.
Use of system header and library directories diagnosed.
The compiler and linker now diagnose the incorrect use of
native system header and library directories for
cross-compilation. This typically arises from options such
as -I/usr/X11R6/include
hard-coded in build
scripts written without a view to cross-compilation.
Initialization priorities.
The constructor
and
destructor
function attributes now accept
an optional priority argument. Constructors with small
priorities are run before those with larger priorities; the
opposite is true for destructors. For example:
void f __attribute__((constructor(500))); void f() { /* Perform initialization. */ }
defines a function f
with priority
500. This function will be run before constructors with
larger priorities. Constructor and destructors with no
explicit priority argument have priority 65535, the maximum
permitted value.
Thumb-2 IT block code generation error fixed. A bug in Thumb-2 code generation has been fixed. This bug would result in missing IT instructions, causing the assembler to reject the code.
iWMMXt compiler errors. A compiler bug that caused invalid assembly when generating iWMMXt code has been fixed.
Thumb-2 stack decrement misassembly.
An assembler bug that resulted in incorrect encoding of the
32-bit Thumb-2 form of the sub sp, sp, #const
instruction has been fixed. Previously this was misassembled as
subs
.
Naked functions.
Functions marked with __attribute__((naked))
no longer contain prologue and epilogue code.
Please refer to the GCC manual for the proper use of this
attribute.
Destructor execution order.
Prioritized destructors (whether specified with the
destructor
function attribute in C or the
init_priority
variable attribute in C++)
are now executed in the correct order. Previous releases
ran the destructors in an indeterminate order.
Fix addr2line defect. The binary utility addr2line now operates correctly on 64-bit targets with DWARF2 debug information.
Thumb-2 assembler infinite loop. An assembler bug that would cause it to enter an infinite loop when processing some Thumb-2 assembly has been fixed.
Assembler warnings about overlapping multiplication operands.
The assembler no longer warns about overlapping Rd
and Rm
operands when assembling
mul
and mla
instructions
for the ARM architecture version six or above.
Improve handling of corrupt debug information. The binary utility readelf now copes more gracefully with corrupted DWARF 2 information.
Smaller C++ programs. Rarely-used functions in the C++ runtime library have been isolated into separate object files so that they will not be included unless needed. As a result, most statically linked C++ programs are smaller.
Preserve volatile accesses. Reads from volatile memory are no longer incorrectly optimized away at higher optimization levels.
Implicit conversions between generic vector types.
Implicit conversions between generic vector types are now
only permitted when the two vectors in question have the same number
of elements and compatible element types. (Note that the restriction
involves compatible element types, not
implicitly-convertible element types: thus, a vector type with element
type int
may not be implicitly converted to a vector
type with element type unsigned int
.)
This restriction, which is in line with specifications for SIMD
architectures such as AltiVec, may be relaxed using the
flag -flax-vector-conversions
.
This flag is intended only as a compatibility measure and should not
be used for new code.
type_info comparison fix. Comparison of type_info objects now uses pointer comparison where possible.
C++ forced unwinding fixes. Some bugs relating to forced unwinding through C++ code have been fixed.
Support for additional Stellaris boards. Linker scripts are provided for the 6xx and 8xx series Stellaris boards.
Linux support for USB Debug Sprite. A new driver is included to allow the Sourcery G++ Lite USB Debug Sprite to run on Linux hosts. See Chapter 3, Sourcery G++ Lite for ARM GNU/Linux for additional information.
Linker scripts. A bug is fixed where an erroneous linker script would cause a linker crash. An error message is now produced.
Newlib memory use improvements. The memory overhead of linking with newlib is reduced. Applications that use only a minimal set of library features may now require significantly less memory.
Compiler alias analysis.
The type-based alias analysis performed by the compiler when compiling
with -O2
or with -fstrict-aliasing
is
now more conservative. The more aggressive analysis used in previous
versions sometimes resulted in incorrect code generation.
Fully relocatable preprocessor. When cross-compiling, the default preprocessor search path includes only the directories present in the installed toolchain. This speeds up the preprocessor and prevents the unintentional use of unrelated files and directories on the machine where it is installed.
Support for new-style symbol hashing.
Support has been added in binutils and the prelinker
for new-style (also known as DT_GNU_HASH
)
symbol hashing. This can dramatically speed up symbol
resolution time and is particularly applicable in environments
where full prelinking is not possible (for example where
shared libraries are dynamically opened at
runtime). The new-style hashing may be enabled by passing
--hash-style=gnu
to the linker.
Prelinker update. The prelinker has been updated to the current upstream sources and some bugs affecting operation have been fixed.
Improved support for ROM debugging. GDB now determines ROM regions automatically from the memory map included in target configuration files. This information is used to determine when hardware breakpoints should automatically be used (for instance the step, next and finish commands). Separate ROM configurations have been removed from the Eclipse debugger menu. The Eclipse GUI has been extended to provide improved support for debugging programs in ROM, when a memory map is not automatically available.
Rename Windows executables. The Windows host tools make.exe and rm.exe are now named cs-make.exe and cs-rm.exe. This change avoids conflicts with tools provided by other distributors.
iWMMXt bug fixes. Some bugs involving incorrect code generation and internal compiler errors when generating iWMMXt code have been fixed.
Cortex-M3 startup code.
The ARMv7-M startup code (armv7m-crt0.o
) incorrectly
contained ARM code. This has been replaced with Thumb-2 code.
ARM EABI coverage testing support. Coverage testing using GCOV is now supported for the ARM EABI target. Please refer to the GNU C Compiler Manual (HTML) for more information on coverage testing.
Windows debugging fix. In recent releases of Sourcery G++ Lite, the GDB target remote | command would hang on Windows. This affected both command line and Eclipse debugging when using the Sourcery G++ Lite Debug Sprite.
Stellaris USB Debug Sprite improvements. The former USB Debug Stub, armswd, is now known as the USB Debug Sprite, and has been renamed to arm-stellaris-eabi-sprite. In addition, its initialization sequence has been updated to recognize the r1p1 release of the Cortex-M3 processor.
Incompatible changes to Stellaris linker scripts.
Sourcery G++ Lite now supports linking executables to run from RAM as well
as ROM. As part of this change, there are now separate RAM and ROM
versions of the linker scripts for each supported board, and the former
ROM-based versions have been renamed. For example, if you were
formerly linking with -T lm3s10x.ld
, you should now use
-T lm3s10x-rom.ld
to get the same behavior.
Eclipse debuggers. Eclipse configurations for debugging arm-none-eabi applications using the GDB simulator and remote debug stubs have been added.
iWMMXt2 support. The assembler and disassembler now support iWMMXt2 instructions.
NEON intrinsics support.
GCC now supports NEON intrinsics defined in the
arm_neon.h
header.
These are the same intrinsics supported by the ARM
RealView®
compiler and are documented in the 'ARM NEON Intrinsics'
section of the GCC manual.
ARMv4t linux multilib. Linux configurations now support ARMv4t CPUs.
Linker scripts. Several problems with the linker scripts for bare-metal targets have been fixed.
Binutils update. The binutils in this release is based on the final binutils 2.17 release.
GDB update. The included version of GDB has been upgraded to 6.5.50.20060822. This includes numerous bug fixes from the previous version.
GDB support for flash memory. The GDB load command can now write to flash memory, if the remote debugging stub contains appropriate support.
Compiler support for NEON. Initial GCC support for autovectorization and generation of NEON SIMD instructions has been added.
Bare metal Cortex-M3 configurations. Bare metal configurations now support generating images for use on ARMv7-M devices (eg. Cortex-M3).
iWMMXt support in GLIBC.
GLIBC's setjmp
and
longjmp
now support saving and restoring
iWMMXt registers on hardware with those registers. This
requires a kernel reporting
iwmmxt
in the
Features
entry in
/proc/cpuinfo
.
iWMMXt exception handling support. Exception handling now restores the values of iWMMXt registers correctly.
Corrected IPC functions.
A bug in GLIBC's msgctl
,
semctl
, and shmctl
functions has been corrected.
GCC update. This release is based on GCC 4.1.1.
Fully relocatable compiler. The compiler now searches for its components only in the directory where it has been installed, and no longer also searches pathnames matching the directory where it was configured. This speeds up the compiler and prevents problems with unintentionally finding unrelated files or directories on the machine where it has been installed.
Stack permission marking for ARM GNU/Linux. Non-executable stacks can provide increased security against some forms of buffer overflow attacks. The tools involved must coordinate the annotation of required stack permissions, either executable, or non-executable. For ARM GNU/Linux targets the compiler now outputs annotations indicating the required stack permissions.
Stabs debugging information support.
Using the Stabs debugging format (available with
-gstabs
or -gstabs+
) now works
in conjunction with -mthumb
. CodeSourcery
recommends the default DWARF debugging format (available with
-g
) as DWARF is a more comprehensive debugging format.
Stellaris linker scripts in IDE. Linker scripts may now be selected via a drop-down menu in Eclipse.
Stellaris linker scripts for 3xx series CPUs. The linker scripts for 3xx Series CPUs now place the ISR vector at address zero, as required by all Cortex-M3 cores.
Stellaris USB Debug Sprite improvements. Bug fixes and new features include:
continue
command from GDB.
-q
command-line option.
Stellaris USB Debug Sprite improvements. Program images exceeding 4K can now be uploaded to flash memory.
Additional Stellaris boards supported. The Stellaris 301, 310, 315, and 316 CPUs are now supported. Linker scripts have been added for these boards.
Stellaris USB Debug Sprite improvements. Several bug fixes and enhancements were made to the USB Debug Stub. In particular:
open
,
read
, and lseek
were
fixed.
isatty
,
rename
, unlink
, and
system
.
Runtime libraries. Support for ARMv7 including Cortex-M3 and pure Thumb-2.
Assembler. Support for NEON and VFPv3, including unified NEON/VFP syntax.