blob: fc055c2fdb8a9a90ac07cf03fe440d0ef3a833c3 [file] [log] [blame]
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Appendix A. Sourcery G++ Lite Release Notes</title><link rel="stylesheet" href="cs.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.74.0"><meta name="description" content=" This appendix contains information about changes in this release of Sourcery G++ Lite for ARM GNU/Linux. You should read through these notes to learn about new features and bug fixes."><link rel="home" href="index.html" title="Sourcery G++ Lite"><link rel="up" href="index.html" title="Sourcery G++ Lite"><link rel="prev" href="ch06s03.html" title="6.3. Manuals for GNU Toolchain Components"><link rel="next" href="chap-license.html" title="Appendix B. Sourcery G++ Lite Licenses"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. Sourcery G++ Lite Release Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s03.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="chap-license.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="chap-release"></a>Appendix A. Sourcery G++ Lite Release Notes</h2></div><div><div class="abstract"><p class="title"><b></b></p><p>
This appendix contains information about changes in this
release of Sourcery G++ Lite for ARM GNU/Linux. You should read
through these notes to learn about new features and bug fixes.
</p></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="chap-release.html#sec-release-notes">A.1. Changes in Sourcery G++ Lite for ARM GNU/Linux</a></span></dt></dl></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sec-release-notes"></a>A.1. Changes in Sourcery G++ Lite for ARM GNU/Linux</h2></div></div></div><p>
This section documents Sourcery G++ Lite changes for each released revision.
</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id281187"></a>A.1.1. Changes in Sourcery G++ Lite 2011.03-41</h3></div></div></div><p><b>Variable Length Array (VLA) alignment bug. </b>
A compiler bug that resulted in incorrectly aligned variable length
arrays (VLA) in leaf functions has been fixed.
</p><p><b>Cortex-R5 support. </b>
Sourcery G++ now includes support for ARM Cortex-R5
processors. To compile for these processors,
use <code class="option">-mcpu=cortex-r5</code>.
</p><p><b>Inline assembly and volatile fields. </b>
A bug has been fixed that caused the compiler to incorrectly
reject inline <code class="code">asm</code> statements referring to volatile
class/struct fields with errors such as <code class="literal">error: output
number 1 not directly addressable</code>.
</p><p><b>Fixed-point arithmetic support. </b>
Experimental compiler support has been added for fixed-point
arithmetic on ARM, as described in the draft ISO/IEC technical
report TR 18037. Specialized instructions defined in recent
architecture versions for performing saturating arithmetic,
etc. are used when available, but are not a prerequisite for
using the new language features. See
<a class="xref" href="sec-arm-fixed-point.html" title="3.10. Fixed-Point Arithmetic">Section 3.10, &#8220;Fixed-Point Arithmetic&#8221;</a> for further details.
</p><p><b>C++ constructor bug fix. </b>
A compiler bug has been fixed that caused incorrect code for C++
constructors for some class hierarchies that use virtual inheritance
and include empty classes. At runtime, the incorrect constructors
resulted in memory corruption or other errors.
</p><p><b>Thumb debug information fix. </b>
A compiler bug that resulted in incorrect debug information
for Thumb code has been fixed. The incorrect information
prevented single stepping through some code.
</p><p><b>Internal compiler error with pointer casting. </b>
A compiler bug has been fixed that caused internal compiler
errors when accessing double-word memory locations with
casted pointers under ARM mode.
</p><p><b>Unaligned access support. </b>
The compiler now generates more efficient code for accessing
packed data structures and for copying small blocks of
unaligned data when targeting architectures that permit
unaligned word/halfword accesses. This feature can be
controlled by the <code class="option">-munaligned-access</code> and
<code class="option">-mno-unaligned-access</code> options, and is enabled
by default for ARMv6 processors and above, except for ARMv6-M.
</p><p><b>Internal compiler error under Thumb mode. </b>
A compiler bug has been fixed that caused internal compiler
errors when generating Thumb code.
</p><p><b>EGLIBC version 2.13. </b>
Sourcery G++ Lite for ARM GNU/Linux now includes EGLIBC version 2.13
library which is based on GNU C Library version 2.13.
For more information about changes, see
<code class="uri">http://www.eglibc.org/news#eglibc_2_13</code>.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id281510"></a>A.1.2. Changes in Sourcery G++ Lite 2011.03-18</h3></div></div></div><p><b>GCC fixes for <code class="option">-fstrict-volatile-bitfields</code></b>
GCC now honors <code class="option">-fstrict-volatile-bitfields</code>
when a bitfield is not declared volatile initially, but an
object including bit fields is cast to volatile.
Also, a bug was fixed that caused incorrect code to be generated
for some stores to volatile bit fields when
<code class="option">-fstrict-volatile-bitfields</code> is enabled.
</p><p><b>Compiler optimization improvements. </b>
The compiler has been enhanced with a number of optimization
improvements, including:
</p><div class="itemizedlist"><ul type="disc"><li>
Smaller and faster code for compound conditionals.
</li><li>
Removal of superfluous sign and zero extensions.
</li><li>
Improved code for multiply-and-accumulate operations on ARM.
</li></ul></div><p>
</p><p><b>Internal compiler error with NEON intrinsics. </b>
A compiler bug has been fixed that caused internal compiler
errors when using certain NEON intrinsics.
</p><p><b>GCC version 4.5.2. </b>
Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.5.2.
</p><p><b>GCC code generation bug for casts to <code class="code">volatile</code>
types. </b>
A compiler bug has been fixed that sometimes caused incorrect code
for references to pointers to types with <code class="code">volatile</code> casts.
</p><p><b>Incorrect optimization fix. </b>
An optimizer bug that in rare cases caused incorrect code to
be generated for complex AND and OR expressions containing
redundant subexpressions has been fixed.
</p><p><b>Incorrect C++ warning fixed. </b>
A bug in GCC has been fixed that caused spurious warnings
about lambda expressions in C++ code that does not use them.
</p><p><b>GCC fixes for NEON in big-endian mode. </b>
Several compiler bugs have been fixed that could lead to
incorrect code when using NEON in big-endian mode. The problems
only manifested when using the auto-vectorizer (enabled by
default at the <code class="option">-O3</code> optimization level) with
the <code class="option">-mvectorize-with-neon-quad</code> option.
</p><p><b>GCC fix for thread-local storage. </b>
A compiler optimization bug has been fixed that affected
accesses to thread-local storage. The bug resulted in
assembler errors of the form <code class="literal">symbol `.LPIC2' is
already defined</code>.
</p><p><b>Incorrect code for built-in comparison functions. </b>
A bug has been fixed that sometimes caused GCC's built-in
comparison functions,
such as <code class="function">__builtin_isgreaterequal</code>, to
incorrectly raise exceptions when invoked on unordered
floating-point arguments.
</p><p><b>C++ exception handling. </b>
A defect in the implementation of the EH-ABI specification
has been fixed. The defect affected the catching of pointer
types in code generated by the ARM <span class="trademark">RealView</span>® compiler but using
the Sourcery G++ runtime libraries. The fix also retains
backward compatibility with existing GCC-compiled code.
</p><p><b>GCC bug where accesses to volatile structure fields are optimized away. </b>
A bug has been fixed where accesses to volatile fields of a structure
were sometimes incorrectly optimized away if the structure instance
was defined as non-volatile.
</p><p><b>Internal compiler error fixes. </b>
Two bugs have been fixed that caused compiler crashes in rare cases.
The first bug involved code with multiple comparison operations,
and the second one involved <code class="type">char</code> to <code class="type">int</code>
conversion.
</p><p><b>Thumb-2 assembler validation fix. </b>
The assembler now correctly rejects Thumb-2
<code class="literal">ADD</code>, <code class="literal">ADDS</code>,
<code class="literal">SUB</code>, and <code class="literal">SUBS</code>
instructions that have an invalid shift operand.
Previously, invalid shift values were accepted and
generated unpredictable instructions.
</p><p><b>Objdump fix for multiple input files. </b>
The Objdump utility did not produce correct disassembly
when processing multiple input files. This has been fixed.
</p><p><b><code class="function">popen</code> bug fix. </b>
GLIBC's <code class="function">popen</code> function no longer causes a
deadlock situation when invoked from more than one thread.
</p><p><b><code class="function">strstr</code> and
<code class="function">strcasestr</code> bug fixes. </b>
A problem has been fixed that caused GLIBC's
<code class="function">strstr</code> and <code class="function">strcasestr</code>
functions to return wrong results on certain inputs.
</p><p><b>Linux kernel headers update. </b>
Linux kernel header files have been updated to version
2.6.38.
</p><p><b>Improved GDB startup times when debugging remote
targets
</b>
GDB has been enhanced to reduce the startup times when working
with remote targets via GDBServer, especially when the target uses
a large number of shared libraries.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id282310"></a>A.1.3. Changes in Sourcery G++ Lite 2010.09-50</h3></div></div></div><p><b>GCC fix for duplicated symbols. </b>
A GCC optimizer bug that caused multiple definitions of
local symbols has been fixed. Code affected by the bug
was rejected by the assembler.
</p><p><b>NEON code generation fix. </b>
A GCC bug has been fixed that resulted in an assembler error
<code class="literal">VFP/Neon double precision register expected</code>.
</p><p><b>Static data size improvement at <code class="option">-Os</code></b>
When optimizing for size, the compiler no longer implicitly
adds padding bytes to align static and local arrays on
word boundaries.
This fixes static data size regressions introduced since GCC 4.4.
The additional alignment is still used when optimizing for speed.
</p><p><b>New <code class="option">-fstrict-volatile-bitfields</code> option. </b>
The compiler has a new
option, <code class="option">-fstrict-volatile-bitfields</code>, which
forces access to a volatile structure member using the width
that conforms to its type.
<span>
This option is enabled by default to conform to the ARM EABI.
</span>
Refer to the GCC manual for details.
</p><p><b>Internal compiler error fixes. </b>
A bug has been fixed that caused the compiler to crash
on code containing a <code class="literal">typedef</code> alias
for <code class="type">__builtin_va_list</code> with option
<code class="option">-femit-struct-debug-baseonly</code>.
<span>
This bug affected compiling the Linux kernel.
</span>
A second bug has been fixed that caused a crash
when compiling code using C99 variable-length arrays.
<span>
Additionally, a compiler crash on code using
64-bit integer multiplications with NEON vectorization enabled
has also been fixed.
</span>
</p><p><b>NEON narrowing-move instructions. </b>
The compiler now supports narrowing-move instructions
when auto-vectorizing for NEON. Loops accessing arrays of
<code class="type">char</code> or <code class="type">short</code> values are now more
likely to be vectorized.
</p><p><b>Improved support for atomic memory builtins. </b>
The compiler support for built-in atomic memory access
operations on ARMv7 targets has been improved.
These builtins are documented in the GCC manual.
</p><p><b>Improved thread-local storage access. </b>
Sourcery G++ Lite now implements the TLS Descriptor access model,
which provides faster access to thread-local storage from
shared libraries and position-independent executables.
This GCC option, which is enabled by default,
additionally requires support from the dynamic loader.
Code built with older versions of Sourcery G++ continues to
work with the included loader.
For more information, refer to
<a class="xref" href="sec-dynamic-loader-version.html" title="3.5. Target Dynamic Loader Requirements">Section 3.5, &#8220;Target Dynamic Loader Requirements&#8221;</a>.
</p><p><b>Linker debug information fix. </b>
A bug in linker processing of debug information has been
fixed. The bug sometimes prevented the Sourcery G++ debugger from
displaying source code if the executable was linked
with the <code class="option">--gc-sections</code> option.
</p><p><b>Absolute branch bug fixes. </b>
A bug that caused the assembler to crash on a branch
to an absolute address has been fixed. Linker handling of the
resulting relocations has also been improved. Previously this
caused an invalid switch to ARM mode on ARMv7-M devices.
</p><p><b><code class="code">VMOV</code> instruction bug fix. </b>
A bug that caused the assembler to incorrectly reject
certain valid immediate operands for the <code class="code">VMOV</code>
instruction has been fixed.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id282678"></a>A.1.4. Changes in Sourcery G++ Lite 2010.09-29</h3></div></div></div><p><b>Changes to Sourcery G++ version numbering. </b>
Sourcery G++ product and Lite toolchains now uniformly use
a version numbering scheme of the form 2011.03-41.
The major and minor parts of the version number, in this
case 2011.03, identify the release branch,
while the final component is a build number within the branch.
There are also new preprocessor macros defined by the compiler
for the version number components so that you may conditionalize
code for Sourcery G++ or particular Sourcery G++ versions.
Details are available in the
<a class="ulink" href="https://support.codesourcery.com/GNUToolchain/kbentry1" target="_top">
Sourcery G++ Knowledge Base</a>.
</p><p><b>GCC fix for reference to undefined label. </b>
A bug in the optimizer that caused GCC to emit references
to undefined labels has been fixed.
</p><p><b>Precision improvement with vectorization enabled. </b>
The GCC auto-vectorizer no longer uses
NEON floating-point instructions unless the
<code class="option">-funsafe-math-optimizations</code> option (implied
by <code class="option">-ffast-math</code>) is specified. This is because
NEON hardware does not fully support the IEEE 754 standard for
floating-point arithmetic. In particular, very small quantities
may be flushed to zero.
</p><p><b>Alignment attributes. </b>
A bug has been fixed that caused the compiler to ignore
alignment attributes of C++ static member variables where
the attribute was present on the definition, but not the
declaration.
</p><p><b><code class="code">naked</code> attribute semantics. </b>
The <code class="code">naked</code> function attribute now also implies the
<code class="code">noinline</code> and <code class="code">noclone</code> attributes.
This fixes bugs resulting from invalid optimizations of functions
with this attribute.
</p><p><b>Stack corruption bug fix. </b>
A bug in GCC has been fixed that caused stack corruption
in functions with the <code class="code">interrupt</code> attribute.
</p><p><b>GCC bug fix for push multiple instruction generation. </b>
A bug has been fixed that caused GCC to generate incorrect
push multiple instructions, causing an assembler warning
<code class="literal">register range not in ascending order</code>.
</p><p><b>Thumb-2 internal compiler error fix. </b>
A bug has been fixed that caused the compiler to crash
when compiling Thumb-2 code using 64-bit integer arithmetic.
</p><p><b>Compiler optimization improvements. </b>
The compiler has been enhanced with a number of optimization
improvements, including:
</p><div class="itemizedlist"><ul type="disc"><li>
More efficient assignment for structures containing bitfields.
</li><li>
Better code for initializing C++ arrays with explicit
element initializers.
</li><li>
Improved logic for eliminating/combining redundant comparisons in
code with nested conditionals.
</li><li>
Better selection of loop variables, resulting in fewer
temporaries and more efficient register usage.
</li><li>
More optimization of references to globals in
position-independent code.
</li><li>
Various Thumb code generation improvements.
</li><li>
Better code when constant addresses are used as arguments to
inline assembly statements.
</li><li>
Better code for copying small constant strings.
</li><li>
Improved tuning for Cortex-M4 processors.
</li><li>
Cortex-A9 specific tuning for VFP and NEON instructions.
</li><li>
Use of more NEON features.
</li></ul></div><p>
</p><p><b>Preprocessor symbols for floating-point calling convention. </b>
Built-in preprocessor symbols <code class="symbol">__ARM_PCS</code> and
<code class="symbol">__ARM_PCS_VFP</code> are now defined to indicate
the current floating-point calling convention.
</p><p><b>GCC version 4.5.1. </b>
Sourcery G++ Lite for ARM GNU/Linux is now based on GCC version 4.5.1.
For more information about changes from GCC version 4.4 that was
included in previous releases, see
<code class="uri">http://gcc.gnu.org/gcc-4.5/changes.html</code>.
</p><p><b>C++ locale support. </b>
The C++ standard library now includes locale support.
</p><p><b>New <code class="option">-Wdouble-promotion</code> warning
option. </b>
The compiler has a new
option, <code class="option">-Wdouble-promotion</code>, which enables
warnings about implicit promotions of <code class="type">float</code>
values to <code class="type">double</code>. This option is useful when
compiling code for processors (such as ARM Cortex-M4) that
have hardware support for single-precision floating-point
arithmetic only, where unintentional use of double precision
results in dramatically slower code.
</p><p><b>Linker bug fix. </b>
A bug that caused the linker error <code class="literal">relocation
truncated to fit: R_ARM_THM_JUMP24</code> when linking
some Thumb-2 applications has been fixed.
</p><p><b>Assembler PC-relative store fix. </b>
A bug that caused the assembler to reject some valid
PC-relative store instructions has been fixed. It now
issues a warning instead for architectures where these
instructions are deprecated.
</p><p><b>ARMv7-A linker bug fix. </b>
A bug in the linker support for <code class="option">--fix-cortex-a8</code>,
which is enabled by default when linking ARMv7-A objects, has been
fixed. Programs affected by the bug sometimes crashed with
segmentation fault or illegal instruction errors.
</p><p><b>Smaller C++ programs with <code class="option">-g</code></b>
An assembler bug has been fixed that caused unnecessary references
to exception-handling routines from C++ programs when debug
information is enabled. For programs that do not otherwise
use exceptions, this change results in smaller code size.
</p><p><b>Additional validation in the assembler. </b>
The assembler now diagnoses an error, instead of producing
an invalid object file, when directives such as
<code class="literal">.hidden</code> are missing operands.
</p><p><b>Assembler PC-relative load fix. </b>
An assembler bug that caused the assembler to reject some
references to global symbols has been fixed. This
bug affected Thumb instructions of the form
<code class="literal">ldr r0, <em class="replaceable"><code>symbol</code></em></code>.
</p><p><b>Strip bug fix. </b>
A bug in the <code class="command">strip</code> and
<code class="command">objcopy</code> utilities, which resulted in
stripped object files that the linker could not recognize,
has been fixed.
</p><p><b>Binutils update. </b>
The binutils package has been updated to version
2.20.51.20100809 from the FSF trunk. This update includes
numerous bug fixes.
</p><p><b>More efficient process creation functions. </b>
The <code class="function">system</code> and
<code class="function">popen</code> functions provided by GLIBC have
been improved to require less memory when memory overcommit
is disabled in the Linux kernel.
</p><p><b>Optimized string and memory functions. </b>
The performance of GLIBC's string and memory functions, including
<code class="function">strstr</code> and <code class="function">memmem</code>,
have been significantly improved for large inputs.
</p><p><b>Linux kernel headers update. </b>
Linux kernel header files have been updated to version
2.6.35.2.
</p><p><b>
Improved support for debugging <span class="trademark">
RealView</span>® C++ programs
</b>
GDB has been enhanced to handle some debug information
contained in binaries produced by the
ARM <span class="trademark">RealView</span>®
compiler. Formerly, GDB sometimes crashed on programs
which use C++ templates.
Another bug has been fixed that caused GDB to fail to place
breakpoints in binaries produced by the
ARM <span class="trademark">RealView</span>®
compiler when the source file location for the breakpoint was
specified as an absolute pathname.
</p><p><b>GDB update. </b>
The included version of GDB has been updated to
7.2.50.20100908. This update adds numerous bug fixes and
new features, including improved C++ language support,
a new command to save breakpoints to a file,
a new
convenience variable <code class="varname">$_thread</code> that holds
the number of the current thread, among many other
improvements.
</p><p><b>GDB crash fix. </b>
A bug has been fixed that caused GDB to crash on launch if
the environment variable <code class="literal">CYGPATH</code> is set
to a program that does not exist or cannot be executed.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id283824"></a>A.1.5. Changes in Older Releases</h3></div></div></div><p>
For information about changes in older releases of
Sourcery G++ Lite for ARM GNU/Linux,
please refer to the Getting Started guide packaged with those
releases.
</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch06s03.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="chap-license.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">6.3. Manuals for GNU Toolchain Components </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix B. Sourcery G++ Lite Licenses</td></tr></table></div></body></html>