The GNU compiler collection (GCC) has just been updated to 4.7.3. The full large and extensive changelog can be found via the GCC release page.
Caveats from the update can be found below.
-fconserve-spaceflag has been deprecated. The flag had no effect for most targets: only targets without a global
.bsssection and without support for switchable sections. Furthermore, the flag only had an effect for G++, where it could result in wrong semantics (please refer to the GCC manual for further details). The flag will be removed in GCC 4.8
- Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.7. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed.
All GCC ports for the following processor architectures have been declared obsolete:
- picoChip (
The following ports for individual systems on particular architectures have been obsoleted:
- IRIX 6.5 (mips-sgi-irix6.5)
- MIPS OpenBSD (mips*-*-openbsd*)
- Solaris 8 (*-*-solaris2.8). Details can be found in the announcement.
- Tru64 UNIX V5.1 (alpha*-dec-osf5.1*)
- picoChip (
- On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A, ARMv7-R, or ARMv7-M, the new option
-munaligned-accessis active by default, which for some sources generates code that accesses memory on unaligned addresses. This requires the kernel of those systems to enable such accesses (controlled by CP15 register
c1, refer to ARM documentation). Alternatively, or for compatibility with kernels where unaligned accesses are not supported, all code has to be compiled with
-mno-unaligned-access. Upstream Linux kernel releases have automatically and unconditionally supported unaligned accesses as emitted by GCC due to this option being active since version 2.6.28.
- Support on ARM for the legacy floating-point accelerator (FPA) and the mixed-endian floating-point format that it used has been obsoleted. The ports that still use this format have been obsoleted as well. Many legacy ARM ports already provide an alternative that uses the VFP floating-point format. The obsolete ports will be deleted in the next release.The obsolete ports with alternatives are:
- arm*-*-rtems (use arm*-*-rtemseabi)
- arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
- arm*-*-elf (use arm*-*-eabi)
- arm*-*-uclinux* (use arm*-*-uclinux*eabi)
Note, however, that these alternatives are not binary compatible with their legacy counterparts (although some can support running legacy applications).
The obsolete ports that currently lack a modern alternative are:
New ports that support more recent versions of the architecture are welcome.
- Support for the Maverick co-processor on ARM has been obsoleted. Code to support it will be deleted in the next release.
- Support has been removed for Unix International threads on Solaris 2, so the
--enable-threads=solarisconfigure option and the
-threadscompiler option don’t work any longer.
- Support has been removed for the Solaris BSD Compatibility Package, which lives in
/usr/ucblib. It has been removed from Solaris 11, and was only intended as a migration aid from SunOS 4 to SunOS 5. The
-compat-bsdcompiler option is not recognized any longer.
- The AVR port’s libgcc has been improved and its multilib structure has been enhanced. As a result, all objects contributing to an application must either be compiled with GCC versions up to 4.6.x or with GCC versions 4.7.1 or later. If the compiler is used with AVR Libc, you need a version that supports the new layout, i.e. implements #35407.
- The AVR port’s
-mshort-callscommand-line option has been deprecated. It will be removed in the GCC 4.8 release. See
-mrelaxfor a replacement.
- The AVR port only references startup code that clears
.bssand the common section resp. initializes the
.rodatasection provided respective sections (or subsections thereof) are not empty, seePR18145. Applications that put all static storage objects into non-standard sections and / or define all static storage objects in assembler modules, must reference
__do_copy_databy hand or undefine the symbol(s) by means of
- The ARM port’s
-mwords-little-endianoption has been deprecated. It will be removed in a future release.
- Support has been removed for the NetWare x86 configuration obsoleted in GCC 4.6.
- It is no longer possible to use the
"l"constraint in MIPS16
- GCC versions 4.7.0 and 4.7.1 had changes to the C++ standard library which affected the ABI in C++11 mode: a data member was added to
std::listchanging its size and altering the definitions of some member functions, and
std::pair‘s move constructor was non-trivial which altered the calling convention for functions with
std::pairarguments or return types. The ABI incompatibilities have been fixed for GCC version 4.7.2 but as a result C++11 code compiled with GCC 4.7.0 or 4.7.1 may be incompatible with C++11 code compiled with different GCC versions and with C++98/C++03 code compiled with any version.
- On ARM, a bug has been fixed in GCC’s implementation of the AAPCS rules for the layout of vectors that could lead to wrong code being generated. Vectors larger than 8 bytes in size are now by default aligned to an 8-byte boundary. This is an ABI change: code that makes explicit use of vector types may be incompatible with binary objects built with older versions of GCC. Auto-vectorized code is not affected by this change. (This change affects GCC versions 4.7.2 and later.)