Sourcery G++ Lite Release Notes

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

Changes in Sourcery G++ Lite 4.2-72

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.

Changes in Sourcery G++ Lite 4.2-50

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.

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.

Optimized memcpy and memmove Optimized implementations of memcpy and memmove have been added for E500 targets.

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.

E500 vectorization support.  When compiling for E500 targets, the -ftree-vectorize flag now enables automatic vectorization of loops.

Large stack frame fix.  A bug that caused GCC to generate incorrect code for functions with large stack frames on E500 targets has been fixed.

E500 interrupt safety fix.  A bug that caused GCC to generate function epilogues that were not interrupt safe on E500 targets has been fixed.

Improved inline memset, memcpy, and memmove for E500.  GCC can now use E500 vector instructions when generating inline code for memset, memcpy, or memmove on E500 targets.

Changes in Sourcery G++ Lite 4.2-31

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.

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.

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.

Crash when generating vector code.  A bug that sometimes caused the compiler to crash when invoked with the -ftree-vectorize option 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.

ABI markings for Power Architecture binaries.  GCC and Binutils now mark Power Architecture binaries according to their floating point and vector calling conventions. The linker reads this information and warns when mismatched object files are linked together. For example, the linker warns if -msoft-float objects are linked to a -mhard-float C library. GDB uses the same information to correctly call functions from the command line and display return values after finish.

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.

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.

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.

Debugger access to AltiVec and SPE registers.  GDB can display AltiVec and SPE registers when using gdbserver on configurations with these auxiliary processors.

GCC version 4.2.  Sourcery G++ Lite for Power 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.

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

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.

Changes in Sourcery G++ Lite 4.1-69

Segmentation fault in memset A segmentation fault in memset has been fixed. The problem occurs on some 8xx series PowerPC CPUs when executing a dcbz instruction, because 8xx processors are unable to report page faults correctly in this case. The problematic dcbz instruction is avoided on affected processors.

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.

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.

Changes in Sourcery G++ Lite 4.1-59

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.

E500 floating-point bug fix.  Some bugs affecting comparisons of NaNs on E500 processors have been fixed.

Software floating-point bug fix.  A bug affecting conversion of wider floating-point types to subnormal float values when using software floating point has been fixed.

Changes in Sourcery G++ Lite 4.1-56

Linux Host Requirements.  The lowest version of Linux that is required for the Linux hosted toolchain is now RedHat 7.3. Previous versions required RedHat 8.0 or later.

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.

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.

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 4.1-51

No significant changes.  There are no significant changes for Power GNU/Linux in this release.

Changes in Sourcery G++ Lite 4.1-47

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.

Changes in Sourcery G++ Lite 4.1-46

Initial release.  This is the initial release for Power GNU/Linux.