Sourcery G++ Lite Release Notes

This section documents Sourcery G++ Lite changes for each released revision.

Changes in Sourcery G++ Lite 2009q1-163

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.

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.

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.

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.

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.

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.

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.

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.

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.

arm-uclinuxeabi-objcopy bug fix.  A bug has been fixed that caused arm-uclinuxeabi-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.

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.

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.

Internal compiler error when optimizing.  A bug has been fixed that caused internal compiler error: in build2_stat when compiling.

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.

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.

Changes in Sourcery G++ Lite 2009q1-118

GCC version 4.3.3.  Sourcery G++ Lite for ARM uClinux 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.

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 uClinux targets. This includes processors for which Sourcery G++ Lite does not include appropriate run-time libraries. In addition, CS3 support for boards based on Cortex-M3 processors has been removed as these boards are not sufficiently powerful to run uClinux. 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.

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.

uClibc splice, vmsplice and tee functions.  uClibc now provides the functions splice, vmsplice and tee.

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.

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.

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.

Changes in Sourcery G++ Lite 2008q3-68

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.

Workaround for Cortex-M3 CPU errata.  Errata present in some Cortex-M3 cores can cause data corruption when overlapping registers are used in LDRD instructions. The compiler avoids generating these problematic instructions when the -mfix-cortex-m3-ldrd or -mcpu=cortex-m3 command-line options are used. The Sourcery G++ runtime libraries have also been updated to include this workaround.

GDB segment warning.  Some compilers produce binaries including uninitialized data regions, such as the stack and heap. GDB incorrectly displayed the warning Loadable segment "name" outside of ELF segments for such binaries; the warning has now been fixed.

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.

Changes in Sourcery G++ Lite 2008q3-42

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.

Improvements to elf2flt utility.  The elf2flt utility, automatically run by Sourcery G++ when linking uClinux applications, is now compatible with the linker option --gc-sections. Previously, applications linked with --gc-sections terminated at startup with an illegal instruction error.

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.

LinuxThreads support.  The included uClibc now supports the LinuxThreads implementation of POSIX threads for the ARMv4T multilib. Please note that this feature is not yet supported by the ARMv6-M Thumb and ARMv7 Thumb-2 multilibs.

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

Changes in Sourcery G++ Lite 2008q3-9

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.

Memory access errors when setting breakpoints.  A GDB bug that caused spurious "Cannot access memory" errors has been fixed. The errors occurred when setting breakpoints after the program being debugged exited or was killed.

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

Changes in Sourcery G++ Lite 2008q1-152

Printing global variables in GDB.  A GDB bug that caused errors in printing values of global variables in the debugger has been fixed. GDB was formerly computing addresses of such variables incorrectly; in some cases, this resulted in incorrect values being printed, while in others, it resulted in memory access errors in the remote gdbserver.

Changes in Sourcery G++ Lite 2008q1-126

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.

GDB info registers crash fix.  Executing info registers after executing flushregs no longer crashes GDB.

Changes in Sourcery G++ Lite 2008q1-102

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.

Invalid object file after strip.  A bug in the assembler has been fixed that formerly caused .set symbol expression constructs to emit 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.

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.

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.

Improvements to flthdr utility.  The flthdr utility has been improved so that it no longer depends on external utility programs. In particular, the compression and decompression options now work correctly on Windows.

Changes in Sourcery G++ Lite 2007q3-51

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.

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.

Changes in Sourcery G++ Lite 2007q3-33

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.

uClibc memcpy and memmove functions.  A bug that caused the uClibc implementations of memcpy and memmove to return incorrect values has been fixed.

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 Properties item on the Project menu in the Sourcery G++ IDE.

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.

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.

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.

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:

  • On MIPS targets, support for additional processors and the SmartMIPS and DSP Release 2 extensions has been added.

New linker (ld) features include:

  • A new command-line option --default-script has been added to give more precise control over linker script processing.
  • There are new command-line options -Bsymbolic-functions, --dynamic-list, --dynamic-list-cpp-new, and --dynamic-list-data to control symbols that should be dynamically linked.
  • The new --print-gc-sections option lists sections removed by garbage collection.

Other changes include:

  • The objcopy utility has a new --extract-symbol option to extract only symbol table information from the input file.
  • The gprof utility now allows input files to have histogram records for several memory ranges, provided those ranges are disjoint.

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.

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.

Changes in Sourcery G++ Lite 2007q1-21

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.

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.

Changes in Sourcery G++ Lite 2007q1-10

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.

Changes in Sourcery G++ Lite 2007q1-3

Initial release.  This is the initial release for ARM uClinux.