The latest release in the 4.3 release series is GCC 4.3.5.
long doubleas having the same format as
double. In earlier versions of GCC, they used the 68881
long doubleformat instead.
m68k-uclinuxtarget now uses the same calling conventions as
m68k-linux-gnu. You can select the original calling conventions by configuring for
m68k-uclinuxoldabiinstead. Note that
m68k-uclinuxoldabialso retains the original 80-bit
long doubleon ColdFire targets.
-fforce-memoption has been removed because it has had no effect in the last few GCC releases.
-msvr3-shliboption has been removed since it is no longer used.
Fastcallfor i386 has been changed not to pass aggregate arguments in registers, following Microsoft compilers.
armel-semi-aof, which are no longer recognized. We removed these targets without a deprecation period because we discovered that they have been unusable since GCC 4.0.0.
tic4x-*) has been removed. This support had been deprecated since GCC 4.0.0.
Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.3. 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:
The following aliases for processor architectures have been
declared obsolete. Users should use the indicated generic target
names instead, with compile-time options such as
-mcpu or configure-time options such as
--with-cpu to control the configuration more
All GCC ports for the following operating systems have been declared obsolete:
Also, those for some individual systems on particular architectures have been obsoleted:
i86-*-uwin*) (support for UWIN as a host was previously removed in 2001, leaving only the support for UWIN as a target now being deprecated)
-Wconversionoption has been modified. Its purpose now is to warn for implicit conversions that may alter a value. This new behavior is available for both C and C++. Warnings about conversions between signed and unsigned integers can be disabled by using
-Wno-sign-conversion. In C++, they are disabled by default unless
-Wsign-conversionis explicitly requested. The old behavior of
-Wconversion, that is, warn for prototypes causing a type conversion that is different from what would happen to the same argument in the absence of a prototype, has been moved to a new option
-Wtraditional-conversion, which is only available for C.
-m386, -m486, -mpentiumand
-mpentiumprotuning options have been removed because they were deprecated for more than 3 GCC major releases. Use
-mtune=pentiumproas a replacement.
-funsafe-math-optimizationsoption now automatically turns on
-fno-trapping-mathin addition to
-fno-signed-zeros, as it enables reassociation and thus may introduce or remove traps.
-ftree-vectorizeoption is now on by default under
-O3. In order to generate code for a SIMD extension, it has to be enabled as well: use
-maltivecfor PowerPC platforms and
-msse/-msse2for i?86 and x86_64.
long doublevariants of these functions (e.g.
sinl) are also handled. The
cabsfunctions with constant arguments were already optimized in prior GCC releases. Now they also use MPFR.
-frecord-gcc-switcheshas been added to GCC, although it is only enabled for some targets. The switch causes the command line that was used to invoke the compiler to be recorded into the object file that is being created. The exact format of this recording is target and binary file format dependent, but it usually takes the form of a note section containing ASCII text. The switch is related to the
-fverbose-asmswitch, but that one only records the information in the assembler output file as comments, so the information never reaches the object file.
--param large-stack-frame-growthcan be used to limit stack frame size growth caused by inlining.
bzerofunctions operate on is discovered and for cases of commonly used small sizes, specialized inline code is generated.
__builtin_expectno longer requires its argument to be a compile time constant.
-fvect-cost-model, was developed.
-finstrument-functions-exclude-file-list. They provide more control over which functions are annotated by the
intmay 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.
-Warray-boundshas been added and is now enabled by default for
-Wall. It produces warnings for array subscripts that can be determined at compile time to be always out of bounds.
-Wno-array-boundswill disable the warning.
destructorfunction attributes now accept optional priority arguments which control the order in which the constructor and destructor functions are run.
-Wignored-qualifiershave been added for finer control of the diverse warnings enabled by
alloc_sizehas been added to mark up
mallocstyle functions. For constant sized allocations this can be used to find out the size of the returned pointer using the
__builtin_object_size()function for buffer overflow checking and similar. This supplements the already built-in
callocconstant size handling.
0B, followed by a sequence of 0 and 1 digits.
__COUNTER__has been added. It expands to sequential integral values starting from 0. In conjunction with the
##operator, this provides a convenient means to generate unique identifiers.
-fdirectives-onlyhas been added. It enables a special preprocessing mode which improves the performance of applications like distcc and ccache.
x86_64-*-linux-gnu. The feature introduces new data types
_Decimal128with constant suffixes
-Wc++0x-compathas been added and is now enabled by default for
-Wall. It produces warnings for constructs whose meaning differs between ISO C++ 1998 and C++0x.
-Wparenthesesoption now works for C++ as it does for C. It warns if parentheses are omitted when operators with confusing precedence are nested. It also warns about ambiguous else statements. Since
-Wparenthesesis enabled by
-Wall, this may cause additional warnings with existing C++ code which uses
-Wall. These new warnings may be disabled by using
-Wmissing-declarationsnow works for C++ as it does for C.
-fvisibility-ms-compatflag was added, to make it easier to port larger projects using shared libraries from Microsoft's Visual Studio to ELF and Mach-O systems.
__attribute__((aligned(T)));works for C++ types.
whatimplementations give more elaborate exception strings for
std::sort, to give but four examples. These algorithms can be substituted for the normal (sequential) libstdc++ algorithms on a piecemeal basis, or all existing algorithms can be transformed via the
#include <ext/hash_set> __gnu_cxx::hash_set<int> s;Can be transformed (in order of preference) to:
#include <tr1/unordered_set> std::tr1::unordered_set<int> s;or
#include <backward/hash_set> __gnu_cxx::hash_set<int> s;Similar transformations apply to
-fexternal-blasoption has been added, which generates calls to BLAS routines for intrinsic matrix operations such as
matmulrather than using the built-in algorithms.
-fbacktraceor environment variable
GFORTRAN_ERROR_BACKTRACE; on glibc systems only) or a core dump (
GFORTRAN_ERROR_DUMPCORE) when a run-time error occured.
__GFORTRAN__when it runs the C preprocessor (CPP).
-finit-logicaloptions have been added, which can be used to initialize local variables.
LGAMMAhave been added, which calculate the Gamma function and its logarithm. Use
EXTERNAL gammaif you want to use your own gamma function.
-fbackslashGNU Fortran interprets backslashes as C-style escape characters.
jv-scantool has been removed. This tool never really worked properly. There is no replacement.
gcjhhas been rewritten. Some of its more obscure options no longer work, but are still recognized in an attempt at compatibility.
gjavahis a new program with similar functionality but different command-line options.
grmiregistryhave been rewritten.
grmidhas been added.
gjarreplaces the old
gjarsigner(used for signing jars),
gkeytool(used for key management),
gserialver(computes serialization UIDs), and
gtnameserv(also for CORBA) are now installed.
gc-analyzetool. They may be generated on out-of-memory conditions or on demand and are controlled by the new run time class
java.util.TimeZonecan now read files from
/usr/share/zoneinfoto provide correct, updated, timezone information. This means that packagers no longer have to update libgcj when a time zone change is published.
memcpy) and block set (
memset) was rewritten. GCC can now pick the best algorithm (loop, unrolled loop, instruction with
repprefix or a library call) based on the size of the block being copied and the CPU being optimized for. A new option
-minline-stringops-dynamicallyhas been added. With this option string operations of unknown size are expanded such that small blocks are copied by in-line code, while for large blocks a library call is used. This results in faster code than
-minline-all-stringopswhen the library implementation is capable of using cache hierarchy hints. The heuristic choosing the particular algorithm can be overwritten via
-mstringop-strategy. Newly also
memsetof values different from 0 is inlined.
cldinstruction before string operations. Both i386 and x86-64 ABI documents mandate the direction flag to be clear at the entry of a function. It is now invalid to set the flag in
asmstatement without reseting it afterward.
-mpc80have been added to allow explicit control of x87 floating point precision.
__float128(TFmode) IEEE quad type and corresponding TCmode IEEE complex quad type is available via the soft-fp library on
x86_64targets. This includes basic arithmetic operations (addition, subtraction, negation, multiplication and division) on
__float128real and TCmode complex values, the full set of IEEE comparisons between
__float128values, conversions to and from
long doublefloating point types, as well as conversions to and from
unsigned longinteger and
unsignedquad (TImode) integer types. Additionally, all operations generate the full set of IEEE exceptions and support the full set of IEEE rounding modes.
-mveclibabi=acmlis specified and you link to an ACML ABI compatible library.
cris-*-elftarget now includes support for CRIS v32, including libraries, through the
crisv32-*-elftarget defaults to generate code for CRIS v32.
crisv32-*-linux*target defaults to generate code for CRIS v32.
cris-*-aouttarget has been obsoleted.
swapwbrinstructions to implement the
__builtin_ffsfamily of functions.
__builtin_bswap32is now implemented using the
swapwbinstruction, when available.
m68k-uclinuxtargets have improved support for C++ constructors and destructors, and for shared libraries.
__builtin_clzis now implemented using the
ff1ColdFire instruction, when available.
-m68010option. 68010 code now uses
moveto zero volatile memory.
symbol(index.size*scale)addresses for indexed array accesses. Earlier compilers would always load the symbol into a base register first.
--with-archconfiguration option has been added. This option allows you to restrict a target to ColdFire or non-ColdFire processors.
__mcfv*__macro is now defined for all ColdFire targets. (Earlier versions of GCC only defined
__mcffpu__macros have been added.
__mc68010__when generating 68010 code.
-mhard-floathave been added. These options apply to both m68k and ColdFire targets.
-mno-rtdare now accepted as negative versions of
-fforce-addrhas been removed. It is now ignored by the compiler.
m68k-uclinuxtargets now try to avoid situations that lead to the load-time error:
BINFMT_FLAT: reloc outside program.
libjavanow support all three GNU/Linux ABIs: o32, n32 and n64. Every GNU/Linux configuration now builds these libraries by default.
-mno-sharedcode unless overridden by
mipsisa32*-linux-gnuconfigurations now generate hard-float code by default, just like other
mips*-linux-gnuconfigurations. You can build a soft-float version of any
mips*-linux-gnuconfiguration by passing
mips-wrs-vxworksnow supports run-time processes (RTPs).
-mtuneoptions no longer accept
24kas a processor name. Please use
-mtuneoptions now accept
34kf2_1as synonyms for
34kfrespectively. The options also accept
34kf1_1as synonyms for
GCC now supports the following configurations:
mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by default. Earlier releases also recognized this configuration, but they treated it in the same way as
mipsisa32*-linux-gnu*. Note that you can customize any
mips*-linux-gnu*configuration to a particular ISA or processor by passing an appropriate
mipsisa*-sde-elf*, which provides compatibility with MIPS Technologies' SDE toolchains. The configuration uses the SDE libraries by default, but you can use it like other newlib-based ELF configurations by passing
configure. It is the only configuration besides
mips64vr*-elf*to build MIPS16 as well as non-MIPS16 libraries.
mipsisa*-elfoabi*, which is similar to the general
mipsisa*-elf*configuration, but uses the o32 and o64 ABIs instead of the 32-bit and 64-bit forms of the EABI.
-mdspr2option. A new preprocessor macro called
__mips_dsp_revindicates the revision of the ASE in use.
syncinstructions to implement atomic built-in functions such as
__sync_fetch_and_add. The memory reference must be 4 bytes wide for 32-bit targets and either 4 or 8 bytes wide for 64-bit targets.
dclzinstructions to implement the
__builtin_ffsfamilies of functions.
__builtin___clear_cachefunction for flushing the instruction cache. GCC expands this function inline on MIPS32 revision 2 targets, otherwise it calls the function specified by
nomips16, for specifying which mode a function should use.
-minterlink-mips16makes non-MIPS16 code link-compatible with MIPS16 code.
-mhard-floatsupport should now work fairly reliably.
-fsection-anchorsnow works in MIPS16 mode. MIPS16 code compiled with
-fsection-anchorsis often smaller than code compiled with
-G8. However, please note that you must usually compile all objects in your application with the same
-Goption; see the documentation of
-mcode-readablespecifies which instructions are allowed to load from the code segment.
-mcode-readable=yesis the default and says that any instruction may load from the code segment. The other alternatives are
-mcode-readable=pcrel, which says that only PC-relative MIPS16 instructions may load from the code segment, and
-mcode-readable=no, which says that no instruction may do so. Please see the documentation for more details, including example uses.
There are three new options for controlling small data:
-mno-extern-sdata, which disables small-data accesses for externally-defined variables. Code compiled with
-mno-extern-sdatawill be link-compatible with any
-mno-local-sdata, which disables the use of small-data sections for data that is not externally visible. This option can be a useful way of reducing small-data usage in less performance-critical parts of an application.
-mno-gpopt, which disables the use of the
$gpregister while still honoring the
-Glimit when placing externally-visible data. This option implies
-mno-local-sdataand it can be useful in situations where
$gpdoes not necessarily hold the expected value.
-mbranch-costfor tweaking the perceived cost of branches.
.gnu_attributedirective, it will use that directive to record certain properties of the output code.
.gnu_attributeis new to GAS 2.18.
far, for overriding the command-line setting of
-mlong-callson a function-by-function basis.
-mfp64, which previously required a 64-bit target, now works with MIPS32 revision 2 targets as well. The
mipsisa*-sde-elf*configurations provide suitable library support.
-mmtoptions and passes them down to the assembler. It does nothing else with the options at present.
powerpc-*-linux*paired*target configuration. It is enabled by an associated
-mpairedoption and can be accessed using new built-in functions.
-march=z9-ecoption, the compiler will generate code making use of instructions provided by the decimal floating point facility and the floating point conversion facility (pfpo). Besides the instructions used to implement decimal floating point operations these facilities also contain instructions to move between general purpose and floating point registers and to modify and copy the sign-bit of floating point values.
-march=z9-ecoption is used the new
-mhard-dfp/-mno-hard-dfpoptions can be used to specify whether the decimal floating point hardware instructions will be used or not. If none of them is given the hardware support is enabled by default.
-mstack-guardoption can now be omitted when using stack checking via
-mstack-sizein order to let GCC choose a sensible stack guard value according to the frame size of each function.
a + b + carry < b.
Existing libstdc++ documentation has been edited and restructured into a single DocBook XML manual. The results can be viewed online here.
--help command-line option has
been extended so that it now takes an optional set of arguments.
These arguments restrict the information displayed to specific
classes of command-line options, and possibly only a subset of
those options. It is also now possible to replace the descriptive
text associated with each displayed option with an indication of
its current value, or for binary options, whether it has been
enabled or disabled.
Here are some examples. The following will display all the options controlling warning messages:
Whereas this will display all the undocumented, target specific options:
This sequence of commands will display the binary
optimizations that are enabled by
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts diff /tmp/O2-opts /tmp/O3-opts | grep enabled
--with-bugurlhave been added. These allow distributors of GCC to include a distributor-specific string in manuals and
--versionoutput and to specify the URL for reporting bugs in their versions of GCC.
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
-mcldoption has been added to automatically generate a
cldinstruction in the prologue of functions that use string instructions. This option is used for backward compatibility on some operating systems and can be enabled by default for 32-bit x86 targets by configuring GCC with the
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
Copyright (C) Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.