OSDN Git Service

* c-typeck.c (build_c_cast): Use TYPE_MAIN_VARIANT when checking
[pf3gnuchains/gcc-fork.git] / gcc / invoke.texi
index 8052be1..b035149 100644 (file)
@@ -1,4 +1,5 @@
-@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+@c 2000, 2001 Free Software Foundation, Inc.
 @c This is part of the GCC manual.
 @c For copying conditions, see the file gcc.texi.
 
@@ -114,8 +115,9 @@ only one of these two forms, whichever one is not the default.
 * Invoking G++::       Compiling C++ programs.
 * C Dialect Options::   Controlling the variant of C language compiled.
 * C++ Dialect Options:: Variations on C++.
+* Objective-C Dialect Options:: Variations on Objective-C.
 * Language Independent Options:: Controlling how diagnostics should be
-                        formatted. 
+                        formatted.
 * Warning Options::     How picky should the compiler be?
 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
 * Optimize Options::    How much optimization?
@@ -165,17 +167,18 @@ in the following sections.
 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
 @gccoptlist{
 -fno-access-control  -fcheck-new  -fconserve-space @gol
--fdollars-in-identifiers  -fno-elide-constructors @gol
+-fno-const-strings  -fdollars-in-identifiers @gol
+-fno-elide-constructors @gol
 -fno-enforce-eh-specs  -fexternal-templates @gol
 -falt-external-templates @gol
 -ffor-scope  -fno-for-scope  -fno-gnu-keywords  -fhonor-std @gol
--fhuge-objects  -fno-implicit-templates @gol
+-fno-implicit-templates @gol
 -fno-implicit-inline-templates @gol
 -fno-implement-inlines  -fms-extensions @gol
--fname-mangling-version-@var{n}  -fno-operator-names @gol
+-fno-nonansi-builtins  -fno-operator-names @gol
 -fno-optional-diags  -fpermissive @gol
--frepo  -fno-rtti  -fsquangle  -ftemplate-depth-@var{n} @gol
--fuse-cxa-atexit  -fvtable-thunks  -nostdinc++ @gol
+-frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
+-fuse-cxa-atexit  -fvtable-gc  -fno-weak  -nostdinc++ @gol
 -fno-default-inline  -Wctor-dtor-privacy @gol
 -Wnon-virtual-dtor  -Wreorder @gol
 -Weffc++  -Wno-deprecated @gol
@@ -183,6 +186,13 @@ in the following sections.
 -Woverloaded-virtual  -Wno-pmf-conversions @gol
 -Wsign-promo  -Wsynth}
 
+@item Objective-C Language Options
+@xref{Objective-C Dialect Options,,Options Controlling Objective-C Dialect}.
+@gccoptlist{
+-fconstant-string-class=@var{class name} @gol
+-fgnu-runtime  -fnext-runtime  -gen-decls @gol
+-Wno-protocol  -Wselector}
+
 @item Language Independent Options
 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
 @gccoptlist{
@@ -195,19 +205,19 @@ in the following sections.
 -fsyntax-only  -pedantic  -pedantic-errors @gol
 -w  -W  -Wall  -Waggregate-return @gol
 -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
--Wconversion  -Wdisabled-optimization -Werror @gol
+-Wconversion  -Wdisabled-optimization  -Werror @gol
 -Wfloat-equal  -Wformat  -Wformat=2 @gol
--Wformat-nonliteral -Wformat-security @gol
--Wid-clash-@var{len}  -Wimplicit -Wimplicit-int  @gol
+-Wformat-nonliteral  -Wformat-security @gol
+-Wimplicit  -Wimplicit-int  @gol
 -Wimplicit-function-declaration @gol
 -Werror-implicit-function-declaration @gol
 -Wimport  -Winline @gol
 -Wlarger-than-@var{len}  -Wlong-long @gol
--Wmain  -Wmissing-declarations @gol
+-Wmain  -Wmissing-braces  -Wmissing-declarations @gol
 -Wmissing-format-attribute  -Wmissing-noreturn @gol
--Wmultichar  -Wno-format-extra-args -Wno-format-y2k @gol
+-Wmultichar  -Wno-format-extra-args  -Wno-format-y2k @gol
 -Wno-import  -Wpacked  -Wpadded @gol
--Wparentheses -Wpointer-arith  -Wredundant-decls @gol
+-Wparentheses  -Wpointer-arith  -Wredundant-decls @gol
 -Wreturn-type  -Wsequence-point  -Wshadow @gol
 -Wsign-compare  -Wswitch  -Wsystem-headers @gol
 -Wtrigraphs  -Wundef  -Wuninitialized @gol
@@ -217,14 +227,17 @@ in the following sections.
 
 @item C-only Warning Options
 @gccoptlist{
--Wbad-function-cast -Wmissing-prototypes -Wnested-externs @gol
--Wstrict-prototypes -Wtraditional}
+-Wbad-function-cast  -Wmissing-prototypes  -Wnested-externs @gol
+-Wstrict-prototypes  -Wtraditional}
 
 @item Debugging Options
 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
 @gccoptlist{
--a  -ax  -d@var{letters}  -fdump-unnumbered -fdump-translation-unit=@var{file} @gol
--fdump-class-layout=@var{file} -fpretend-float -fprofile-arcs  -ftest-coverage @gol
+-a  -ax  -d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
+-fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
+-fdump-ast-original@r{[}-@var{n}@r{]} -fdump-ast-optimized@r{[}-@var{n}@r{]} @gol
+-fmem-report  -fpretend-float @gol
+-fprofile-arcs  -ftest-coverage  -ftime-report @gol
 -g  -g@var{level}  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2 @gol
 -ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+ @gol
 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
@@ -240,12 +253,14 @@ in the following sections.
 -fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections  -fdce @gol
 -fdelayed-branch  -fdelete-null-pointer-checks @gol
 -fexpensive-optimizations  -ffast-math  -ffloat-store @gol
--fforce-addr  -fforce-mem  -ffunction-sections  -fgcse  @gol
+-fforce-addr  -fforce-mem  -ffunction-sections @gol
+-fgcse  -fgcse-lm  -fgcse-sm @gol
 -finline-functions  -finline-limit=@var{n}  -fkeep-inline-functions @gol
 -fkeep-static-consts  -fmove-all-movables @gol
 -fno-default-inline  -fno-defer-pop @gol
--fno-function-cse   -fno-guess-branch-probability
+-fno-function-cse  -fno-guess-branch-probability @gol
 -fno-inline  -fno-math-errno  -fno-peephole @gol
+-funsafe-math-optimizations -fno-trapping-math @gol
 -fomit-frame-pointer  -foptimize-register-move @gol
 -foptimize-sibling-calls  -freduce-all-givs @gol
 -fregmove  -frename-registers @gol
@@ -254,6 +269,7 @@ in the following sections.
 -fsingle-precision-constant  -fssa @gol
 -fstrength-reduce  -fstrict-aliasing  -fthread-jumps  -ftrapv @gol
 -funroll-all-loops  -funroll-loops  @gol
+--param @var{name}=@var{value}
 -O  -O0  -O1  -O2  -O3  -Os}
 
 @item Preprocessor Options
@@ -265,7 +281,7 @@ in the following sections.
 -idirafter @var{dir} @gol
 -include @var{file}  -imacros @var{file} @gol
 -iprefix @var{file}  -iwithprefix @var{dir} @gol
--iwithprefixbefore @var{dir}  -isystem @var{dir} -isystem-c++ @var{dir} @gol
+-iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  -P  -remap @gol
 -trigraphs  -undef  -U@var{macro}  -Wp\,@var{option}}
 
@@ -299,9 +315,9 @@ in the following sections.
 @emph{M680x0 Options}
 @gccoptlist{
 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
--m68060  -mcpu32 -m5200  -m68881  -mbitfield  -mc68000  -mc68020   @gol
--mfpa -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
--malign-int -mstrict-align}
+-m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020   @gol
+-mfpa  -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
+-malign-int  -mstrict-align}
 
 @emph{M68hc1x Options}
 @gccoptlist{
@@ -319,11 +335,11 @@ in the following sections.
 -mcmodel=@var{code model} @gol
 -m32  -m64 @gol
 -mapp-regs  -mbroken-saverestore  -mcypress @gol
--mepilogue -mfaster-structs -mflat @gol
+-mepilogue  -mfaster-structs  -mflat @gol
 -mfpu  -mhard-float  -mhard-quad-float @gol
 -mimpure-text  -mlive-g0  -mno-app-regs @gol
--mno-epilogue -mno-faster-structs -mno-flat  -mno-fpu @gol
--mno-impure-text -mno-stack-bias  -mno-unaligned-doubles @gol
+-mno-epilogue  -mno-faster-structs  -mno-flat  -mno-fpu @gol
+-mno-impure-text  -mno-stack-bias  -mno-unaligned-doubles @gol
 -msoft-float  -msoft-quad-float  -msparclite  -mstack-bias @gol
 -msupersparc  -munaligned-doubles  -mv8}
 
@@ -345,37 +361,28 @@ in the following sections.
 
 @emph{ARM Options}
 @gccoptlist{
--mapcs-frame -mno-apcs-frame @gol
--mapcs-26 -mapcs-32 @gol
--mapcs-stack-check -mno-apcs-stack-check @gol
--mapcs-float -mno-apcs-float @gol
--mapcs-reentrant -mno-apcs-reentrant @gol
--msched-prolog -mno-sched-prolog @gol
--mlittle-endian -mbig-endian -mwords-little-endian @gol
--malignment-traps -mno-alignment-traps @gol
--msoft-float -mhard-float -mfpe @gol
--mthumb-interwork -mno-thumb-interwork @gol
--mcpu= -march= -mfpe=  @gol
--mstructure-size-boundary= @gol
--mbsd -mxopen -mno-symrename @gol
+-mapcs-frame  -mno-apcs-frame @gol
+-mapcs-26  -mapcs-32 @gol
+-mapcs-stack-check  -mno-apcs-stack-check @gol
+-mapcs-float  -mno-apcs-float @gol
+-mapcs-reentrant  -mno-apcs-reentrant @gol
+-msched-prolog  -mno-sched-prolog @gol
+-mlittle-endian  -mbig-endian  -mwords-little-endian @gol
+-malignment-traps  -mno-alignment-traps @gol
+-msoft-float  -mhard-float  -mfpe @gol
+-mthumb-interwork  -mno-thumb-interwork @gol
+-mcpu=@var{name}  -march=@var{name}  -mfpe=@var{name}  @gol
+-mstructure-size-boundary=@var{n} @gol
+-mbsd -mxopen  -mno-symrename @gol
 -mabort-on-noreturn @gol
--mlong-calls -mno-long-calls @gol
--mnop-fun-dllimport -mno-nop-fun-dllimport @gol
--msingle-pic-base -mno-single-pic-base @gol
--mpic-register=}
-
-@emph{Thumb Options}
-@gccoptlist{
--mtpcs-frame -mno-tpcs-frame @gol
--mtpcs-leaf-frame -mno-tpcs-leaf-frame @gol
--mlittle-endian  -mbig-endian @gol
--mthumb-interwork -mno-thumb-interwork @gol
--mstructure-size-boundary= @gol
--mnop-fun-dllimport -mno-nop-fun-dllimport @gol
--mcallee-super-interworking -mno-callee-super-interworking @gol
--mcaller-super-interworking -mno-caller-super-interworking @gol
--msingle-pic-base -mno-single-pic-base @gol
--mpic-register=}
+-mlong-calls  -mno-long-calls @gol
+-msingle-pic-base  -mno-single-pic-base @gol
+-mpic-register=@var{reg} @gol
+-mnop-fun-dllimport @gol
+-mpoke-function-name @gol
+-mthumb  -marm @gol
+-mtpcs-frame  -mtpcs-leaf-frame @gol
+-mcaller-super-interworking  -mcallee-super-interworking }
 
 @emph{MN10200 Options}
 @gccoptlist{
@@ -436,45 +443,43 @@ in the following sections.
 
 @emph{MIPS Options}
 @gccoptlist{
--mabicalls  -mcpu=@var{cpu type}
+-mabicalls  -mcpu=@var{cpu type} @gol
 -membedded-data  -muninit-const-in-rodata @gol
 -membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64 @gol
 -mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1 @gol
--mips2  -mips3 -mips4 -mlong64  -mlong32 -mlong-calls  -mmemcpy @gol
+-mips2  -mips3  -mips4  -mlong64  -mlong32  -mlong-calls  -mmemcpy @gol
 -mmips-as  -mmips-tfile  -mno-abicalls @gol
--mno-embedded-data  -mno-uninit-const-in-rodata  -mno-embedded-pic @gol
--mno-gpopt  -mno-long-calls @gol
+-mno-embedded-data  -mno-uninit-const-in-rodata @gol
+-mno-embedded-pic  -mno-gpopt  -mno-long-calls @gol
 -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats @gol
 -mrnames  -msoft-float @gol
 -m4650  -msingle-float  -mmad @gol
 -mstats  -EL  -EB  -G @var{num}  -nocpp @gol
--mabi=32 -mabi=n32 -mabi=64 -mabi=eabi @gol
--mfix7000 -mno-crt0}
+-mabi=32  -mabi=n32  -mabi=64  -mabi=eabi @gol
+-mfix7000  -mno-crt0}
 
 @emph{i386 Options}
 @gccoptlist{
--mcpu=@var{cpu type} -march=@var{cpu type} @gol
+-mcpu=@var{cpu type}  -march=@var{cpu type} @gol
 -mintel-syntax -mieee-fp  -mno-fancy-math-387 @gol
 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
 -mno-wide-multiply  -mrtd  -malign-double @gol
--mreg-alloc=@var{list}  -mregparm=@var{num} @gol
--malign-jumps=@var{num}  -malign-loops=@var{num} @gol
--malign-functions=@var{num} -mpreferred-stack-boundary=@var{num} @gol
--mthreads -mno-align-stringops -minline-all-stringops @gol
--mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
--m96bit-long-double}
+-mpreferred-stack-boundary=@var{num} @gol
+-mthreads  -mno-align-stringops  -minline-all-stringops @gol
+-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
+-m96bit-long-double  -mregparm=@var{num}  -momit-leaf-frame-pointer}
 
 @emph{HPPA Options}
 @gccoptlist{
 -march=@var{architecture type} @gol
--mbig-switch  -mdisable-fpregs  -mdisable-indexing   @gol
--mfast-indirect-calls -mgas  -mjump-in-delay   @gol
+-mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
+-mfast-indirect-calls  -mgas  -mjump-in-delay @gol
 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
--mno-jump-in-delay  -mno-long-load-store   @gol
+-mno-jump-in-delay  -mno-long-load-store @gol
 -mno-portable-runtime  -mno-soft-float @gol
--mno-space-regs  -msoft-float  -mpa-risc-1-0   @gol
--mpa-risc-1-1  -mpa-risc-2-0 -mportable-runtime @gol
+-mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
+-mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
 -mschedule=@var{cpu type}  -mspace-regs}
 
 @emph{Intel 960 Options}
@@ -490,13 +495,13 @@ in the following sections.
 
 @emph{DEC Alpha Options}
 @gccoptlist{
--mfp-regs  -mno-fp-regs -mno-soft-float  -msoft-float @gol
--malpha-as -mgas @gol
+-mfp-regs  -mno-fp-regs  -mno-soft-float  -msoft-float @gol
+-malpha-as  -mgas @gol
 -mieee  -mieee-with-inexact  -mieee-conformant @gol
 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
 -mtrap-precision=@var{mode}  -mbuild-constants @gol
 -mcpu=@var{cpu type} @gol
--mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @gol
+-mbwx  -mno-bwx  -mcix  -mno-cix  -mmax  -mno-max @gol
 -mmemory-latency=@var{time}}
 
 @emph{Clipper Options}
@@ -505,7 +510,7 @@ in the following sections.
 
 @emph{H8/300 Options}
 @gccoptlist{
--mrelax  -mh -ms -mint32  -malign-300}
+-mrelax  -mh  -ms  -mint32  -malign-300}
 
 @emph{SH Options}
 @gccoptlist{
@@ -529,43 +534,44 @@ in the following sections.
 
 @emph{TMS320C3x/C4x Options}
 @gccoptlist{
--mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol
--mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol
--mrpts=@var{count}  -mrptb -mdb -mloop-unsigned @gol
--mparallel-insns -mparallel-mpy -mpreserve-float}
+-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
+-mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
+-mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
+-mparallel-insns  -mparallel-mpy  -mpreserve-float}
 
 @emph{V850 Options}
 @gccoptlist{
--mlong-calls -mno-long-calls -mep -mno-ep @gol
--mprolog-function -mno-prolog-function -mspace @gol
--mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol
--mv850 -mbig-switch}
+-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
+-mprolog-function  -mno-prolog-function  -mspace @gol
+-mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
+-mv850  -mbig-switch}
 
 @emph{NS32K Options}
 @gccoptlist{
--m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add @gol
--msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb @gol
--mbitfield -mnobitfield -mhimem -mnohimem}
+-m32032  -m32332  -m32532  -m32081  -m32381 @gol
+-mmult-add  -mnomult-add  -msoft-float  -mrtd  -mnortd @gol
+-mregparam  -mnoregparam  -msb  -mnosb @gol
+-mbitfield  -mnobitfield  -mhimem  -mnohimem}
 
 @emph{AVR Options}
 @gccoptlist{
--mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol
--mcall-prologues -mno-tablejump -mtiny-stack}
+-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
+-mcall-prologues  -mno-tablejump  -mtiny-stack}
 
 @emph{MCore Options}
 @gccoptlist{
--mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates  @gol
--mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol
--m4byte-functions -mno-4byte-functions -mcallgraph-data @gol
--mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol
--mlittle-endian -mbig-endian -m210 -m340 -mstack-increment}
+-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
+-mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
+-m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
+-mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
+-mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
 
 @emph{IA-64 Options}
 @gccoptlist{
--mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
--mvolatile-asm-stop -mb-step -mregister-names -mno-sdata @gol
--mconstant-gp -mauto-pic -minline-divide-min-latency @gol
--minline-divide-max-throughput -mno-dwarf2-asm @gol
+-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
+-mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata @gol
+-mconstant-gp  -mauto-pic  -minline-divide-min-latency @gol
+-minline-divide-max-throughput  -mno-dwarf2-asm @gol
 -mfixed-range=@var{register range}}
 
 @item Code Generation Options
@@ -578,12 +584,12 @@ in the following sections.
 -fno-common  -fno-ident  -fno-gnu-linker @gol
 -fpcc-struct-return  -fpic  -fPIC @gol
 -freg-struct-return  -fshared-data  -fshort-enums @gol
--fshort-double  -fvolatile  -fvolatile-global -fvolatile-static @gol
+-fshort-double  -fvolatile @gol
+-fvolatile-global  -fvolatile-static @gol
 -fverbose-asm  -fpack-struct  -fstack-check @gol
 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
 -fargument-alias  -fargument-noalias @gol
--fargument-noalias-global @gol
--fleading-underscore}
+-fargument-noalias-global  -fleading-underscore}
 @end table
 
 @menu
@@ -592,8 +598,9 @@ in the following sections.
                         or preprocessed source.
 * C Dialect Options::   Controlling the variant of C language compiled.
 * C++ Dialect Options:: Variations on C++.
+* Objective-C Dialect Options:: Variations on Objective-C.
 * Language Independent Options:: Controlling how diagnostics should be
-                        formatted. 
+                        formatted.
 * Warning Options::     How picky should the compiler be?
 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
 * Optimize Options::    How much optimization?
@@ -859,7 +866,7 @@ C (when compiling C code), or of standard C++ (when compiling C++ code),
 such as the @code{asm} and @code{typeof} keywords, and
 predefined macros such as @code{unix} and @code{vax} that identify the
 type of system you are using.  It also enables the undesirable and
-rarely used ISO trigraph feature.  For the C compiler, 
+rarely used ISO trigraph feature.  For the C compiler,
 it disables recognition of C++ style @samp{//} comments as well as
 the @code{inline} keyword.
 
@@ -889,7 +896,7 @@ affected.
 
 @item -std=
 Determine the language standard.  A value for this option must be provided;
-possible values are 
+possible values are
 
 @table @samp
 @item iso9899:1990
@@ -968,6 +975,13 @@ and faster, but since the function calls no longer appear as such, you
 cannot set a breakpoint on those calls, nor can you change the behavior
 of the functions by linking with a different library.
 
+In C++, @samp{-fno-builtin} is always in effect.  The @samp{-fbuiltin}
+option has no effect.  Therefore, in C++, the only way to get the
+optimization benefits of builtin functions is to call the function
+using the @samp{__builtin_} prefix.  The GNU C++ Standard Library uses
+builtin functions to implement many functions (like
+@code{std::strchr}), so that you automatically get efficient code.
+
 @item -fhosted
 @cindex hosted environment
 
@@ -1228,6 +1242,17 @@ two definitions were merged.
 This option is no longer useful on most targets, now that support has
 been added for putting variables into BSS without making them common.
 
+@item -fno-const-strings
+Give string constants type @code{char *} instead of type @code{const
+char *}.  By default, G++ uses type @code{const char *} as required by
+the standard.  Even if you use @samp{-fno-const-strings}, you cannot
+actually modify the value of a string constant, unless you also use
+@samp{-fwritable-strings}.
+
+This option might be removed in a future release of G++.  For maximum
+portability, you should structure your code so that it works with
+string constants that have type @code{const char *}.
+
 @item -fdollars-in-identifiers
 Accept @samp{$} in identifiers.  You can also explicitly prohibit use of
 @samp{$} with the option @samp{-fno-dollars-in-identifiers}.  (GNU C allows
@@ -1278,7 +1303,7 @@ otherwise be invalid, or have different behavior.
 
 @item -fno-gnu-keywords
 Do not recognize @code{typeof} as a keyword, so that code can use this
-word as an identifier. You can use the keyword @code{__typeof__} instead.  
+word as an identifier. You can use the keyword @code{__typeof__} instead.
 @samp{-ansi} implies @samp{-fno-gnu-keywords}.
 
 @item -fhonor-std
@@ -1288,16 +1313,6 @@ by default, ignore @code{namespace-declarations},
 @code{using-declarations}, @code{using-directives}, and
 @code{namespace-names}, if they involve @code{std}.
 
-@item -fhuge-objects
-Support virtual function calls for objects that exceed the size
-representable by a @samp{short int}.  Users should not use this flag by
-default; if you need to use it, the compiler will tell you so.
-
-This flag is not useful when compiling with -fvtable-thunks.
-
-Like all options that change the ABI, all C++ code, @emph{including
-libgcc} must be built with the same setting of this option.
-
 @item -fno-implicit-templates
 Never emit code for non-inline templates which are instantiated
 implicitly (i.e. by use); only emit code for explicit instantiations.
@@ -1317,19 +1332,10 @@ errors if these functions are not inlined everywhere they are called.
 Disable pedantic warnings about constructs used in MFC, such as implicit
 int and getting a pointer to member function via non-standard syntax.
 
-@item -fname-mangling-version-@var{n}
-Control the way in which names are mangled.  Version 0 is compatible
-with versions of g++ before 2.8.  Version 1 is the default.  Version 1
-will allow correct mangling of function templates.  For example, 
-version 0 mangling does not mangle foo<int, double> and foo<int, char>
-given this declaration:
-
-@example
-template <class T, class U> void foo(T t);
-@end example
-
-Like all options that change the ABI, all C++ code, @emph{including
-libgcc} must be built with the same setting of this option.
+@item -fno-nonansi-builtins
+Disable builtin declarations of functions that are not mandated by
+ANSI/ISO C.  These include @code{ffs}, @code{alloca}, @code{_exit},
+@code{index}, @code{bzero}, @code{conjf}, and other related functions.
 
 @item -fno-operator-names
 Do not treat the operator name keywords @code{and}, @code{bitand},
@@ -1360,17 +1366,9 @@ of the language, you can save some space by using this flag.  Note that
 exception handling uses the same information, but it will generate it as
 needed.
 
-@item -fsquangle
-@itemx -fno-squangle
-@samp{-fsquangle} will enable a compressed form of name mangling for
-identifiers. In particular, it helps to shorten very long names by recognizing
-types and class names which occur more than once, replacing them with special
-short ID codes.  This option also requires any C++ libraries being used to
-be compiled with this option as well.  The compiler has this disabled (the
-equivalent of @samp{-fno-squangle}) by default.
-
-Like all options that change the ABI, all C++ code, @emph{including
-libgcc.a} must be built with the same setting of this option.
+@item -fstats
+Emit statistics about front-end processing at the end of the compilation.
+This information is generally only useful to the G++ development team.
 
 @item -ftemplate-depth-@var{n}
 Set the maximum instantiation depth for template classes to @var{n}.
@@ -1385,21 +1383,22 @@ This option is required for fully standards-compliant handling of static
 destructors, but will only work if your C library supports
 @code{__cxa_atexit}.
 
-@item -fvtable-thunks
-Use @samp{thunks} to implement the virtual function dispatch table
-(@samp{vtable}).  The traditional (cfront-style) approach to
-implementing vtables was to store a pointer to the function and two
-offsets for adjusting the @samp{this} pointer at the call site.  Newer
-implementations store a single pointer to a @samp{thunk} function which
-does any necessary adjustment and then calls the target function.
+@item -fvtable-gc
+Emit special relocations for vtables and virtual function references
+so that the linker can identify unused virtual functions and zero out
+vtable slots that refer to them.  This is most useful with
+@samp{-ffunction-sections} and @samp{-Wl,--gc-sections}, in order to
+also discard the functions themselves.
 
-This option also enables a heuristic for controlling emission of
-vtables; if a class has any non-inline virtual functions, the vtable
-will be emitted in the translation unit containing the first one of
-those.
+This optimization requires GNU as and GNU ld.  Not all systems support
+this option.  @samp{-Wl,--gc-sections} is ignored without @samp{-static}.
 
-Like all options that change the ABI, all C++ code, @emph{including
-libgcc.a} must be built with the same setting of this option.
+@item -fno-weak
+Do not use weak symbol support, even if it is provided by the linker.
+By default, G++ will use weak symbols if they are available.  This
+option exists only for testing, and should not be used by end-users;
+it will result in inferior code and has no benefits.  This option may
+be removed in a future release of G++.
 
 @item -nostdinc++
 Do not search for header files in the standard directories specific to
@@ -1475,18 +1474,34 @@ but disables the helpful warning.
 @item -Wold-style-cast (C++ only)
 Warn if an old-style (C-style) cast is used within a C++ program.  The
 new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and
-@samp{const_cast}) are less vulnerable to unintended effects.
+@samp{const_cast}) are less vulnerable to unintended effects, and much
+easier to grep for.
 
 @item -Woverloaded-virtual (C++ only)
 @cindex overloaded virtual fn, warning
 @cindex warning for overloaded virtual fn
-Warn when a derived class function declaration may be an error in
-defining a virtual function.  In a derived class, the
-definitions of virtual functions must match the type signature of a
-virtual function declared in the base class.  With this option, the
-compiler warns when you define a function with the same name as a
-virtual function, but with a type signature that does not match any
-declarations from the base class.
+Warn when a function declaration hides virtual functions from a
+base class.  For example, in:
+
+@smallexample
+struct A @{
+  virtual void f();
+@};
+
+struct B: public A @{
+  void f(int);
+@};
+@end smallexample
+
+the @code{A} class version of @code{f} is hidden in @code{B}, and code
+like this:
+
+@smallexample
+B* b;
+b->f();
+@end smallexample
+
+will fail to compile.
 
 @item -Wno-pmf-conversions (C++ only)
 Disable the diagnostic for converting a bound pointer to member function
@@ -1521,6 +1536,59 @@ In this example, g++ will synthesize a default @samp{A& operator =
 (const A&);}, while cfront will use the user-defined @samp{operator =}.
 @end table
 
+@node Objective-C Dialect Options
+@section Options Controlling Objective-C Dialect
+
+@cindex compiler options, Objective-C
+@cindex Objective-C options, command line
+@cindex options, Objective-C
+This section describes the command-line options that are only meaningful
+for Objective-C programs; but you can also use most of the GNU compiler
+options regardless of what language your program is in.  For example,
+you might compile a file @code{some_class.m} like this:
+
+@example
+gcc -g -fgnu-runtime -O -c some_class.m
+@end example
+
+@noindent
+In this example, only @samp{-fgnu-runtime} is an option meant only for
+Objective-C programs; you can use the other options with any language
+supported by GCC.
+
+Here is a list of options that are @emph{only} for compiling Objective-C
+programs:
+
+@table @gcctabopt
+@item -fconstant-string-class=@var{class name}
+Use @var{class name} as the name of the class to instantiate for each
+literal string specified with the syntax @code{@@"..."}.  The default
+class name is @code{NXConstantString}.
+
+@item -fgnu-runtime
+Generate object code compatible with the standard GNU Objective-C
+runtime.  This is the default for most types of systems.
+
+@item -fnext-runtime
+Generate output compatible with the NeXT runtime.  This is the default
+for NeXT-based systems, including Darwin and Mac OS X.
+
+@item -gen-decls
+Dump interface declarations for all classes seen in the source file to a
+file named @file{@var{sourcename}.decl}.
+
+@item -Wno-protocol
+Do not warn if methods required by a protocol are not implemented
+in the class adopting it.
+
+@item -Wselector
+Warn if a selector has multiple methods of different types defined.
+
+@c not documented because only avail via -Wp
+@c @item -print-objc-runtime-info
+
+@end table
+
 @node Language Independent Options
 @section Options to Control Diagnostic Messages Formatting
 @cindex options to control diagnostics formatting
@@ -1533,14 +1601,14 @@ below can be used to control the diagnostic messages formatting
 algorithm, e.g. how many characters per line, how often source location
 information should be reported.  Right now, only the C++ front-end can
 honor these options.  However it is expected, in the near future, that
-the remaining front-ends would be able to digest them correctly. 
+the remaining front-ends would be able to digest them correctly.
 
 @table @gcctabopt
 @item -fmessage-length=@var{n}
 Try to format error messages so that they fit on lines of about @var{n}
 characters.  The default is 72 characters for g++ and 0 for the rest of
 the front-ends supported by GCC.  If @var{n} is zero, then no
-line-wrapping will be done; each error message will appear on a single 
+line-wrapping will be done; each error message will appear on a single
 line.
 
 @item -fdiagnostics-show-location=once
@@ -1549,7 +1617,7 @@ reporter to emit @emph{once} source location information; that is, in
 case the message is too long to fit on a single physical line and has to
 be wrapped, the source location won't be emitted (as prefix) again,
 over and over, in subsequent continuation lines.  This is the default
-behaviour. 
+behaviour.
 
 @item -fdiagnostics-show-location=every-line
 Only meaningful in line-wrapping mode.  Instructs the diagnostic
@@ -1614,6 +1682,16 @@ some instances, but would require considerable additional work and would
 be quite different from @samp{-pedantic}.  We don't have plans to
 support such a feature in the near future.
 
+Where the standard specified with @option{-std} represents a GNU
+extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
+corresponding @dfn{base standard}, the version of ISO C on which the GNU
+extended dialect is based.  Warnings from @option{-pedantic} are given
+where they are required by the base standard.  (It would not make sense
+for such warnings to be given only for features not in the specified GNU
+C dialect, since by definition the GNU dialects of C include all
+features the compiler supports with the given option, and there would be
+nothing to warn about.)
+
 @item -pedantic-errors
 Like @samp{-pedantic}, except that errors are produced rather than
 warnings.
@@ -1706,6 +1784,16 @@ Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
 function with external linkage, returning int, taking either zero
 arguments, two, or three arguments of appropriate types.
 
+@item -Wmissing-braces
+Warn if an aggregate or union initializer is not fully bracketed.  In
+the following example, the initializer for @samp{a} is not fully
+bracketed, but that for @samp{b} is fully bracketed.
+
+@smallexample
+int a[2][2] = @{ 0, 1, 2, 3 @};
+int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
+@end smallexample
+
 @item -Wmultichar
 Warn if a multicharacter constant (@samp{'FOOF'}) is used.  Usually they
 indicate a typo in the user's code, as they have implementation-defined
@@ -1805,7 +1893,7 @@ D. Hugh Redelmeier
 @item -Wreturn-type
 Warn whenever a function is defined with a return-type that defaults to
 @code{int}.  Also warn about any @code{return} statement with no
-return-value in a function whose return-type is not @code{void}. 
+return-value in a function whose return-type is not @code{void}.
 
 For C++, a function without return type always produces a diagnostic
 message, even when @samp{-Wno-return-type} is specified. The only
@@ -2064,7 +2152,8 @@ probably mistaken.
 
 @item -Wtraditional (C only)
 Warn about certain constructs that behave differently in traditional and
-ISO C.
+ISO C.  Also warn about ISO C constructs that have no traditional C
+equivalent, and/or problematic constructs which should be avoided.
 
 @itemize @bullet
 @item
@@ -2094,9 +2183,9 @@ The `U' integer constant suffix, or the `F' or `L' floating point
 constant suffixes.  (Traditonal C does support the `L' suffix on integer
 constants.)  Note, these suffixes appear in macros defined in the system
 headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
-Use of these macros can lead to spurious warnings as they do not
-necessarily reflect whether the code in question is any less portable to
-traditional C given that suitable backup definitions are provided.
+Use of these macros in user code might normally lead to spurious
+warnings, however gcc's integrated preprocessor has enough context to
+avoid warning in these cases.
 
 @item
 A function declared external in one block and then used after the end of
@@ -2131,18 +2220,20 @@ omitted.  This is done under the assumption that the zero initializer in
 user code appears conditioned on e.g. @code{__STDC__} to avoid missing
 initializer warnings and relies on default initialization to zero in the
 traditional C case.
+
+@item
+Conversions by prototypes between fixed/floating point values and vice
+versa.  The absence of these prototypes when compiling with traditional
+C would cause serious problems.  This is a subset of the possible
+conversion warnings, for the full set use @samp{-Wconversion}.
 @end itemize
 
 @item -Wundef
 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
 
 @item -Wshadow
-Warn whenever a local variable shadows another local variable.
-
-@item -Wid-clash-@var{len}
-Warn whenever two distinct identifiers match in the first @var{len}
-characters.  This may help you prepare a program that will compile
-with certain obsolete, brain-damaged compilers.
+Warn whenever a local variable shadows another local variable, parameter or
+global variable or whenever a built-in function is shadowed.
 
 @item -Wlarger-than-@var{len}
 Warn whenever an object of larger than @var{len} bytes is defined.
@@ -2241,7 +2332,7 @@ appropriate may not be detected.  This option has no effect unless
 
 @item -Wpacked
 Warn if a structure is given the packed attribute, but the packed
-attribute has no effect on the layout or size of the structure.  
+attribute has no effect on the layout or size of the structure.
 Such structures may be mis-aligned for little benefit.  For
 instance, in this code, the variable @code{f.x} in @code{struct bar}
 will be misaligned even though @code{struct bar} does not itself
@@ -2286,7 +2377,7 @@ are circumstances under which part of the affected line can be executed,
 so care should be taken when removing apparently-unreachable code.
 
 For instance, when a function is inlined, a warning may mean that the
-line is unreachable in only one inlined copy of the function.  
+line is unreachable in only one inlined copy of the function.
 
 This option is not made part of @samp{-Wall} because in a debugging
 version of a program there is often substantial code which checks
@@ -2452,6 +2543,14 @@ Eventually GNU @code{gprof} should be extended to process this data.
 Makes the compiler print out each function name as it is compiled, and
 print some statistics about each pass when it finishes.
 
+@item -ftime-report
+Makes the compiler print some statistics about the time consumed by each
+pass when it finishes.
+
+@item -fmem-report
+Makes the compiler print some statistics about permanent memory
+allocation when it finishes.
+
 @item -ax
 Generate extra code to profile basic blocks.  Your executable will
 produce output that is a superset of that produced when @samp{-a} is
@@ -2577,7 +2676,7 @@ block and arc execution counts from the information in the
 Says to make debugging dumps during compilation at times specified by
 @var{letters}.  This is used for debugging the compiler.  The file names
 for most of the dumps are made by appending a pass number and a word to
-the source file name (e.g.  @file{foo.c.00.rtl} or @file{foo.c.01.sibling}). 
+the source file name (e.g.  @file{foo.c.00.rtl} or @file{foo.c.01.sibling}).
 Here are the possible letters for use in @var{letters}, and their meanings:
 
 @table @samp
@@ -2609,7 +2708,7 @@ Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.04.addressof}.
 Dump after global register allocation, to @file{@var{file}.19.greg}.
 @item o
 Dump after post-reload CSE and other optimizations, to @file{@var{file}.20.postreload}.
-@item G      
+@item G
 Dump after GCSE, to @file{@var{file}.08.gcse}.
 @item i
 Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
@@ -2625,7 +2724,7 @@ Dump after local register allocation, to @file{@var{file}.18.lreg}.
 Dump after loop optimization, to @file{@var{file}.09.loop}.
 @item M
 Dump after performing the machine dependent reorganisation pass, to
-@file{@var{file}.28.mach}. 
+@file{@var{file}.28.mach}.
 @item n
 Dump after register renumbering, to @file{@var{file}.23.rnreg}.
 @item N
@@ -2637,7 +2736,7 @@ Dump after the second instruction scheduling pass, to
 @file{@var{file}.25.sched2}.
 @item s
 Dump after CSE (including the jump optimization that sometimes follows
-CSE), to @file{@var{file}.03.cse}. 
+CSE), to @file{@var{file}.03.cse}.
 @item S
 Dump after the first instruction scheduling pass, to
 @file{@var{file}.17.sched}.
@@ -2679,14 +2778,46 @@ numbers and line number note output.  This makes it more feasible to
 use diff on debugging dumps for compiler invocations with different
 options, in particular with and without -g.
 
-@item -fdump-translation-unit=@var{file} (C and C++ only)
+@item -fdump-translation-unit (C and C++ only)
+@item -fdump-translation-unit-@var{number} (C and C++ only)
 Dump a representation of the tree structure for the entire translation
-unit to @var{file}.
+unit to a file. The file name is made by appending @file{.tu} to the
+source file name. If the -@var{number} form is used, @var{number}
+controls the details of the dump as described for the -fdump-tree options.
+
+@item -fdump-class-hierarchy (C++ only)
+@item -fdump-class-hierarchy-@var{number} (C++ only)
+Dump a representation of each class's hierarchy and virtual function
+table layout to a file. The file name is made by appending @file{.class}
+to the source file name. If the -@var{number} form is used, @var{number}
+controls the details of the dump as described for the -fdump-tree
+options.
+
+@item -fdump-ast-@var{switch} (C++ only)
+@item -fdump-ast-@var{switch}-@var{number} (C++ only)
+Control the dumping at various stages of processing the abstract syntax
+tree to a file. The file name is generated by appending a switch
+specific suffix to the source file name. If the -@var{number} form is
+used, @var{number} is a bit mask which controls the details of the
+dump. The following bits are meaningful (these are not set symbolically,
+as the primary function of these dumps is for debugging gcc itself):
 
-@item -fdump-class_layout=@var{file} (C++ only)
-@item -fdump-class_layout (C++ only)
-Dump a representation of each class's heirarchy to @var{file}, or
-@code{stderr} if not specified.
+@table @samp
+@item bit0 (1)
+Print the address of each node. Usually this is not meaningful as it
+changes according to the environment and source file.
+@item bit1 (2)
+Inhibit dumping of members of a scope or body of a function, unless they
+are reachable by some other path.
+@end table
+
+The following tree dumps are possible:
+@table @samp
+@item original
+Dump before any tree based optimization, to @file{@var{file}.original}.
+@item optimized
+Dump after all tree based optimization, to @file{@var{file}.optimized}.
+@end table
 
 @item -fpretend-float
 When running a cross-compiler, pretend that the target machine uses the
@@ -2748,6 +2879,18 @@ components where gcc expects to find them, or you can set the environment
 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
 Don't forget the trailing '/'.
 @xref{Environment Variables}.
+
+@item -dumpmachine
+Print the compiler's target machine (for example,
+@samp{i686-pc-linux-gnu})---and don't do anything else.
+
+@item -dumpversion
+Print the compiler version (for example, @samp{3.0})---and don't do
+anything else.
+
+@item -dumpspecs
+Print the compiler's built-in specs---and don't do anything else.  (This
+is used when GCC itself is being built.)  @xref{Spec Files}.
 @end table
 
 @node Optimize Options
@@ -2907,13 +3050,13 @@ assembler code in its own right.
 @item -finline-limit=@var{n}
 By default, gcc limits the size of functions that can be inlined.  This flag
 allows the control of this limit for functions that are explicitly marked as
-inline (ie marked with the inline keyword or defined within the class 
-definition in c++).  @var{n} is the size of functions that can be inlined in 
+inline (ie marked with the inline keyword or defined within the class
+definition in c++).  @var{n} is the size of functions that can be inlined in
 number of pseudo instructions (not counting parameter handling).  The default
 value of n is 10000.  Increasing this value can result in more inlined code at
 the cost of compilation time and memory consumption.  Decreasing usually makes
-the compilation faster and less code will be inlined (which presumably 
-means slower programs).  This option is particularly useful for programs that 
+the compilation faster and less code will be inlined (which presumably
+means slower programs).  This option is particularly useful for programs that
 use inlining heavily such as those based on recursive templates with c++.
 
 @emph{Note:} pseudo instruction represents, in this particular context, an
@@ -2944,11 +3087,10 @@ that alter the assembler output may be confused by the optimizations
 performed when this option is not used.
 
 @item -ffast-math
-This option allows GCC to violate some ISO or IEEE rules and/or
-specifications in the interest of optimizing code for speed.  For
-example, it allows the compiler to assume arguments to the @code{sqrt}
-function are non-negative numbers and that no floating-point values
-are NaNs.
+Sets @samp{-fno-math-errno}, @samp{-funsafe-math-optimizations},
+and @samp{-fno-trapping-math}.
+
+This option causes the preprocessor macro __FAST_MATH__ to be defined.
 
 This option should never be turned on by any @samp{-O} option since
 it can result in incorrect output for programs which depend on
@@ -2961,8 +3103,39 @@ with a single instruction, e.g., sqrt.  A program that relies on
 IEEE exceptions for math error handling may want to use this flag
 for speed while maintaining IEEE arithmetic compatibility.
 
+This option should never be turned on by any @samp{-O} option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+
 The default is @samp{-fmath-errno}.  The @samp{-ffast-math} option
 sets @samp{-fno-math-errno}.
+
+@item -funsafe-math-optimizations
+Allow optimizations for floating-point arithmetic that (a) assume
+that arguments and results are valid and (b) may violate IEEE or
+ANSI standards.
+
+This option should never be turned on by any @samp{-O} option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+
+The default is @samp{-fno-unsafe-math-optimizations}.  The
+@samp{-ffast-math} option sets @samp{-funsafe-math-optimizations}.
+
+@item -fno-trapping-math
+Compile code assuming that floating-point operations cannot generate
+user-visible traps.  Setting this option may allow faster code
+if one relies on ``non-stop'' IEEE arithmetic, for example.
+
+This option should never be turned on by any @samp{-O} option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+
+The default is @samp{-ftrapping-math}.  The @samp{-ffast-math}
+option sets @samp{-fno-trapping-math}.
 @end table
 
 @c following causes underfulls.. they don't look great, but we deal.
@@ -3013,6 +3186,18 @@ Run the loop optimizer twice.
 Perform a global common subexpression elimination pass.
 This pass also performs global constant and copy propagation.
 
+@item -fgcse-lm
+When -fgcse-lm is enabled, global common subexpression elimination will
+attempt to move loads which are only killed by stores into themselves. This
+allows a loop containing a load/store sequence to be changed to a load outside
+the loop, and a copy/store within the loop.
+
+@item -fgcse-sm
+When -fgcse-sm is enabled, A store motion pass is run after global common
+subexpression elimination. This pass will attempt to move stores out of loops.
+When used in conjunction with -fgcse-lm, loops containing a load/store sequence
+can be changed to a load before the loop and a store after the loop.
+
 @item -fdelete-null-pointer-checks
 Use global dataflow analysis to identify and eliminate useless null
 pointer checks.  Programs which rely on NULL pointer dereferences @emph{not}
@@ -3157,11 +3342,11 @@ object of one type is assumed never to reside at the same address as an
 object of a different type, unless the types are almost the same.  For
 example, an @code{unsigned int} can alias an @code{int}, but not a
 @code{void*} or a @code{double}.  A character type may alias any other
-type.  
+type.
 
 Pay special attention to code like this:
 @example
-union a_union @{ 
+union a_union @{
   int i;
   double d;
 @};
@@ -3178,7 +3363,7 @@ recently written to (called ``type-punning'') is common.  Even with
 is accessed through the union type.  So, the code above will work as
 expected.  However, this code might not:
 @example
-int f() @{ 
+int f() @{
   a_union t;
   int* ip;
   t.d = 3.0;
@@ -3245,7 +3430,7 @@ If @var{n} is not specified, use a machine-dependent default.
 @item -fssa
 Perform optimizations in static single assignment form.  Each function's
 flow graph is translated into SSA form, optimizations are performed, and
-the flow graph is translated back from SSA form.  User's should not
+the flow graph is translated back from SSA form.  Users should not
 specify this option, since it is not yet ready for production use.
 
 @item -fdce
@@ -3262,6 +3447,46 @@ of registers left over after register allocation.  This optimization
 will most benefit processors with lots of registers.  It can, however,
 make debugging impossible, since variables will no longer stay in
 a ``home register''.
+
+@item --param @var{name}=@var{value}
+In some places, GCC uses various constants to control the amount of
+optimization that is done.  For example, GCC will not inline functions
+that contain more that a certain number of instructions.  You can
+control some of these constants on the command-line using the
+@samp{--param} option.
+
+In each case, the @var{value} is a integer.  The allowable choices for
+@var{name} are given in the following table:
+
+@table @gcctabopt
+@item max-delay-slot-insn-search
+The maximum number of instructions to consider when looking for an
+instruction to fill a delay slot.  If more than this arbitrary number of
+instructions is searched, the time savings from filling the delay slot
+will be minimal so stop searching.  Increasing values mean more
+aggressive optimization, making the compile time increase with probably
+small improvement in executable run time.
+
+@item max-delay-slot-live-search
+When trying to fill delay slots, the maximum number of instructions to
+consider when searching for a block with valid live register
+information.  Increasing this arbitrarily chosen value means more
+aggressive optimization, increasing the compile time.  This parameter
+should be removed when the delay slot code is rewritten to maintain the
+control-flow graph.
+
+@item max-gcse-memory
+The approximate maximum amount of memory that will be allocated in
+order to perform the global common subexpression elimination
+optimization.  If more memory than specified is required, the
+optimization will not be done.
+
+@item max-inline-insns
+If an function contains more than this many instructions, it
+will not be inlined.  This option is precisely equivalent to
+@samp{-finline-limit}.
+
+@end table
 @end table
 
 @node Preprocessor Options
@@ -3364,8 +3589,10 @@ Instead of outputting the result of preprocessing, output a rule
 suitable for @code{make} describing the dependencies of the main source
 file.  The preprocessor outputs one @code{make} rule containing the
 object file name for that source file, a colon, and the names of all the
-included files.  If there are many included files then the rule is split
-into several lines using @samp{\}-newline.
+included files.  Unless overridden explicitly, the object file name
+consists of the basename of the source file with any suffix replaced with
+object file suffix. If there are many included files then the
+rule is split into several lines using @samp{\}-newline.
 
 @samp{-M} implies @samp{-E}.
 
@@ -3595,10 +3822,13 @@ Options}.
 
 @cindex Libraries
 @item -l@var{library}
-Search the library named @var{library} when linking.
+@itemx -l @var{library}
+Search the library named @var{library} when linking.  (The second
+alternative with the library as a separate argument is only for
+POSIX compliance and is not recommended.)
 
 It makes a difference where in the command you write this option; the
-linker searches processes libraries and object files in the order they
+linker searches and processes libraries and object files in the order they
 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
 to functions in @samp{z}, those functions may not be loaded.
@@ -3682,7 +3912,7 @@ libraries.  On other systems, this option has no effect.
 @item -shared
 Produce a shared object which can then be linked with other objects to
 form an executable.  Not all systems support this option.  For predictable
-results, you must also specify the same set of options that were used to 
+results, you must also specify the same set of options that were used to
 generate code (@samp{-fpic}, @samp{-fPIC}, or model suboptions)
 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
 needs to build supplementary stub code for constructors to work. On
@@ -3757,8 +3987,10 @@ libraries and for parts of the compiler:
 Add the directory @var{dir} to the head of the list of directories to be
 searched for header files.  This can be used to override a system header
 file, substituting your own version, since these directories are
-searched before the system header file directories.  If you use more
-than one @samp{-I} option, the directories are scanned in left-to-right
+searched before the system header file directories.  However, you should
+not use this option to add directories that contain vendor-supplied
+system header files (use @samp{-isystem} for that). If you use more than
+one @samp{-I} option, the directories are scanned in left-to-right
 order; the standard system directories come after.
 
 @item -I-
@@ -3853,7 +4085,7 @@ character on the line and it can be one of the following:
 @table @code
 @item %@var{command}
 Issues a @var{command} to the spec file processor.  The commands that can
-appear here are: 
+appear here are:
 
 @table @code
 @item %include <@var{file}>
@@ -3886,7 +4118,7 @@ character, in which case the text will be appended to the spec.
 @item [@var{suffix}]:
 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
 and up to the next directive or blank line are considered to make up the
-spec string for the indicated suffix.  When the compiler encounters an 
+spec string for the indicated suffix.  When the compiler encounters an
 input file with the named suffix, it will processes the spec string in
 order to work out how to compile that file.  For example:
 
@@ -3933,7 +4165,7 @@ possible to override earlier entries using this technique.
 
 GCC has the following spec strings built into it.  Spec files can
 override these strings or create their own.  Note that individual
-targets can also add their own spec strings to this list. 
+targets can also add their own spec strings to this list.
 
 @smallexample
 asm          Options to pass to the assembler
@@ -3947,7 +4179,8 @@ lib          Libraries to include on the command line to the linker
 libgcc       Decides which GCC support library to pass to the linker
 linker       Sets the name of the linker
 predefines   Defines to be passed to the C preprocessor
-signed_char  Defines to pass to CPP to say whether @code{char} is signed by default
+signed_char  Defines to pass to CPP to say whether @code{char} is signed
+             by default
 startfile    Object files to include at the start of the link
 @end smallexample
 
@@ -3974,7 +4207,7 @@ it is possible to generate quite complex command lines.
 Here is a table of all defined @samp{%}-sequences for spec
 strings.  Note that spaces are not generated automatically around the
 results of expanding these sequences.  Therefore you can concatenate them
-together or combine them with constant text in a single argument. 
+together or combine them with constant text in a single argument.
 
 @table @code
 @item %%
@@ -3996,13 +4229,13 @@ the last period).
 Marks the argument containing or following the @samp{%d} as a
 temporary file name, so that that file will be deleted if GCC exits
 successfully.  Unlike @samp{%g}, this contributes no text to the
-argument. 
+argument.
 
 @item %g@var{suffix}
 Substitute a file name that has suffix @var{suffix} and is chosen
 once per compilation, and mark the argument in the same way as
 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
-name is now chosen in a way that is hard to predict even when previously 
+name is now chosen in a way that is hard to predict even when previously
 chosen file names are known.  For example, @samp{%g.s ... %g.o ... %g.s}
 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
@@ -4026,7 +4259,7 @@ simply substituted with a file name chosen for the previous @samp{%u},
 without regard to any appended suffix.
 
 @item %j@var{SUFFIX}
-Substitutes the name of the HOST_BIT_BUCKET, if any, and if it is 
+Substitutes the name of the HOST_BIT_BUCKET, if any, and if it is
 writable, and if save-temps is off; otherwise, substitute the name
 of a temporary file, just like @samp{%u}.  This temporary file is not
 meant for communication between processes, but rather as a junk
@@ -4068,7 +4301,7 @@ current target machine.  Use this when running @code{cpp}.
 Like @samp{%p}, but puts @samp{__} before and after the name of each
 predefined macro, except for macros that start with @samp{__} or with
 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
-C.  
+C.
 
 @item %I
 Substitute a @samp{-iprefix} option made from GCC_EXEC_PREFIX.
@@ -4076,7 +4309,7 @@ Substitute a @samp{-iprefix} option made from GCC_EXEC_PREFIX.
 @item %s
 Current argument is the name of a library or startup file of some sort.
 Search for that file in a standard list of directories and substitute
-the full name found. 
+the full name found.
 
 @item %e@var{str}
 Print @var{str} as an error message.  @var{str} is terminated by a newline.
@@ -4133,7 +4366,7 @@ command line passed to the linker.  Typically it will make use of the
 @item %D
 Dump out a @samp{-L} option for each directory that GCC believes might
 contain startup files.  If the target supports multilibs then the
-current multilib directory will be prepended to each of these paths. 
+current multilib directory will be prepended to each of these paths.
 
 @item %M
 Output the multilib directory with directory seperators replaced with
@@ -4142,20 +4375,20 @@ Output the multilib directory with directory seperators replaced with
 
 @item %L
 Process the @code{lib} spec.  This is a spec string for deciding which
-libraries should be included on the command line to the linker. 
+libraries should be included on the command line to the linker.
 
 @item %G
 Process the @code{libgcc} spec.  This is a spec string for deciding
-which GCC support library should be included on the command line to the linker. 
+which GCC support library should be included on the command line to the linker.
 
 @item %S
 Process the @code{startfile} spec.  This is a spec for deciding which
 object files should be the first ones passed to the linker.  Typically
-this might be a file named @file{crt0.o}. 
+this might be a file named @file{crt0.o}.
 
 @item %E
 Process the @code{endfile} spec.  This is a spec string that specifies
-the last object files that will be passed to the linker.  
+the last object files that will be passed to the linker.
 
 @item %C
 Process the @code{cpp} spec.  This is used to construct the arguments
@@ -4163,7 +4396,7 @@ to be passed to the C preprocessor.
 
 @item %c
 Process the @code{signed_char} spec.  This is intended to be used
-to tell cpp whether a char is signed.  It typically has the definition: 
+to tell cpp whether a char is signed.  It typically has the definition:
 @smallexample
 %@{funsigned-char:-D__CHAR_UNSIGNED__@}
 @end smallexample
@@ -4191,14 +4424,14 @@ and would output the command line option @samp{-foo}.
 
 @item %W@{@code{S}@}
 Like %@{@code{S}@} but mark last argument supplied within as a file to be
-deleted on failure. 
+deleted on failure.
 
 @item %@{@code{S}*@}
 Substitutes all the switches specified to GCC whose names start
 with @code{-S}, but which also take an argument.  This is used for
 switches like @samp{-o, -D, -I}, etc.  GCC considers @samp{-o foo} as being
 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
-text, including the space.  Thus two arguments would be generated. 
+text, including the space.  Thus two arguments would be generated.
 
 @item %@{^@code{S}*@}
 Like %@{@code{S}*@}, but don't put a blank between a switch and its
@@ -4220,7 +4453,7 @@ string after this option will not.
 Substitutes @code{X} if one or more switches whose names start with
 @code{-S} are specified to GCC.  Note that the tail part of the
 @code{-S} option (i.e. the part matched by the @samp{*}) will be substituted
-for each occurrence of @samp{%*} within @code{X}. 
+for each occurrence of @samp{%*} within @code{X}.
 
 @item %@{@code{S}:@code{X}@}
 Substitutes @code{X}, but only if the @samp{-S} switch was given to GCC.
@@ -4265,7 +4498,7 @@ jim.d         -bar -boggle
 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or
 %@{!@code{S}:@code{X}@} construct may contain other nested @samp{%} constructs
 or spaces, or even newlines.  They are processed as usual, as described
-above. 
+above.
 
 The @samp{-O, -f, -m, and -W} switches are handled specifically in these
 constructs.  If another value of @samp{-O} or the negated form of a @samp{-f, -m, or
@@ -4283,7 +4516,7 @@ compiler's spec to say which switches take arguments.  But this cannot
 be done in a consistent fashion.  GCC cannot even decide which input
 files have been specified without knowing which switches take arguments,
 and it must know which input files to compile in order to tell which
-compilers to run). 
+compilers to run).
 
 GCC also knows implicitly that arguments starting in @samp{-l} are to be
 treated as compiler output files, and passed to the linker in their
@@ -4413,7 +4646,6 @@ that macro, which enables you to change the defaults.
 * Convex Options::
 * AMD29K Options::
 * ARM Options::
-* Thumb Options::
 * MN10200 Options::
 * MN10300 Options::
 * M32R/D Options::
@@ -4499,7 +4731,7 @@ CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
 Generate output for a 520X "coldfire" family cpu.  This is the default
 when the compiler is configured for 520X-based systems.
 
-Use this option for microcontroller with a 5200 core, including 
+Use this option for microcontroller with a 5200 core, including
 the MCF5202, MCF5203, MCF5204 and MCF5202.
 
 
@@ -4564,7 +4796,7 @@ The @code{rtd} instruction is supported by the 68010, 68020, 68030,
 
 @item -malign-int
 @itemx -mno-align-int
-Control whether GCC aligns @code{int}, @code{long}, @code{long long}, 
+Control whether GCC aligns @code{int}, @code{long}, @code{long long},
 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
 boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
 Aligning variables on 32-bit boundaries produces code that runs somewhat
@@ -4594,7 +4826,7 @@ the system.
 @cindex M68hc1x options
 
 These are the @samp{-m} options defined for the 68hc11 and 68hc12
-microcontrollers.  The default values for these options depends on 
+microcontrollers.  The default values for these options depends on
 which style of microcontroller was selected when the compiler was configured;
 the defaults for the most common choices are given below.
 
@@ -4834,7 +5066,7 @@ handlers.
 @end table
 
 These @samp{-m} switches are supported in addition to the above
-on SPARC V9 processors in 64 bit environments.
+on SPARC V9 processors in 64-bit environments.
 
 @table @gcctabopt
 @item -mlittle-endian
@@ -4842,9 +5074,9 @@ Generate code for a processor running in little-endian mode.
 
 @item -m32
 @itemx -m64
-Generate code for a 32 bit or 64 bit environment.
-The 32 bit environment sets int, long and pointer to 32 bits.
-The 64 bit environment sets int to 32 bits and long and pointer
+Generate code for a 32-bit or 64-bit environment.
+The 32-bit environment sets int, long and pointer to 32 bits.
+The 64-bit environment sets int to 32 bits and long and pointer
 to 64 bits.
 
 @item -mcmodel=medlow
@@ -4866,9 +5098,9 @@ Pointers are 64 bits.
 
 @item -mcmodel=embmedany
 Generate code for the Medium/Anywhere code model for embedded systems:
-assume a 32 bit text and a 32 bit data segment, both starting anywhere
+assume a 32-bit text and a 32-bit data segment, both starting anywhere
 (determined at link time).  Register %g4 points to the base of the
-data segment.  Pointers still 64 bits.
+data segment.  Pointers are still 64 bits.
 Programs are statically linked, PIC is not supported.
 
 @item -mstack-bias
@@ -5086,6 +5318,8 @@ and conforming to the function calling standards for the APCS 32-bit
 option.  This option replaces the @samp{-m6} option of previous releases
 of the compiler.
 
+@ignore
+@c not currently implemented
 @item -mapcs-stack-check
 @kindex -mapcs-stack-check
 @kindex -mno-apcs-stack-check
@@ -5097,6 +5331,7 @@ called, depending upon the amount of stack space required.  The run time
 system is required to provide these functions.  The default is
 @samp{-mno-apcs-stack-check}, since this produces smaller code.
 
+@c not currently implemented
 @item -mapcs-float
 @kindex -mapcs-float
 @kindex -mno-apcs-float
@@ -5107,17 +5342,18 @@ arithmetic is going to be performed by the code.  The default is
 @samp{-mno-apcs-float}, since integer only code is slightly increased in
 size if @samp{-mapcs-float} is used.
 
+@c not currently implemented
 @item -mapcs-reentrant
 @kindex -mapcs-reentrant
 @kindex -mno-apcs-reentrant
-Generate reentrant, position independent code.  This is the equivalent
-to specifying the @samp{-fpic} option.  The default is
+Generate reentrant, position independent code.  The default is
 @samp{-mno-apcs-reentrant}.
+@end ignore
 
 @item -mthumb-interwork
 @kindex -mthumb-interwork
 @kindex -mno-thumb-interwork
-Generate code which supports calling between the ARM and THUMB
+Generate code which supports calling between the ARM and Thumb
 instruction sets.  Without this option the two instruction sets cannot
 be reliably used inside one program.  The default is
 @samp{-mno-thumb-interwork}, since slightly larger code is generated
@@ -5183,38 +5419,34 @@ address is aligned to a word boundary.
 
 This option is ignored when compiling for ARM architecture 4 or later,
 since these processors have instructions to directly access half-word
-objects in memory. 
-        
+objects in memory.
+
 @item -mno-alignment-traps
 @kindex -mno-alignment-traps
 Generate code that assumes that the MMU will not trap unaligned
 accesses.  This produces better code when the target instruction set
-does not have half-word memory operations (implementations prior to
-ARMv4). 
+does not have half-word memory operations (i.e. implementations prior to
+ARMv4).
 
 Note that you cannot use this option to access unaligned word objects,
 since the processor will only fetch one 32-bit aligned object from
-memory. 
+memory.
 
 The default setting for most targets is -mno-alignment-traps, since
 this produces better code when there are no half-word memory
-instructions available. 
+instructions available.
 
 @item -mshort-load-bytes
+@itemx -mno-short-load-words
 @kindex -mshort-load-bytes
-This is a deprecated alias for @samp{-malignment-traps}.
+@kindex -mno-short-load-words
+These are deprecated aliases for @samp{-malignment-traps}.
 
 @item -mno-short-load-bytes
+@itemx -mshort-load-words
 @kindex -mno-short-load-bytes
-This is a deprecated alias for @samp{-mno-alignment-traps}.
-
-@item -mshort-load-words
 @kindex -mshort-load-words
-This is a deprecated alias for @samp{-mno-alignment-traps}.
-
-@item -mno-short-load-words
-@kindex -mno-short-load-words
-This is a deprecated alias for @samp{-malignment-traps}.
+This are deprecated aliases for @samp{-mno-alignment-traps}.
 
 @item -mbsd
 @kindex -mbsd
@@ -5238,12 +5470,13 @@ compiler is built for cross-compilation.
 @item -mcpu=<name>
 @kindex -mcpu=
 This specifies the name of the target ARM processor.  GCC uses this name
-to determine what kind of instructions it can use when generating
+to determine what kind of instructions it can emit when generating
 assembly code.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
 arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
 arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
-arm9, arm920, arm920t, arm9tdmi.
+arm9, arm9e, arm920, arm920t, arm940t, arm9tdmi, arm10tdmi, arm1020t,
+xscale.
 
 @itemx -mtune=<name>
 @kindex -mtune=
@@ -5253,16 +5486,16 @@ restricting which instructions can be used, it specifies that GCC should
 tune the performance of the code as if the target were of the type
 specified in this option, but still choosing the instructions that it
 will generate based on the cpu specified by a @samp{-mcpu=} option.
-For some arm implementations better performance can be obtained by using
+For some ARM implementations better performance can be obtained by using
 this option.
 
 @item -march=<name>
 @kindex -march=
 This specifies the name of the target ARM architecture.  GCC uses this
-name to determine what kind of instructions it can use when generating
+name to determine what kind of instructions it can emit when generating
 assembly code.  This option can be used in conjunction with or instead
 of the @samp{-mcpu=} option.  Permissible names are: armv2, armv2a,
-armv3, armv3m, armv4, armv4t, armv5.
+armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5te.
 
 @item -mfpe=<number>
 @itemx -mfp=<number>
@@ -5270,7 +5503,7 @@ armv3, armv3m, armv4, armv4t, armv5.
 @kindex -mfp=
 This specifies the version of the floating point emulation available on
 the target.  Permissible values are 2 and 3.  @samp{-mfp=} is a synonym
-for @samp{-mfpe=} to support older versions of GCC.
+for @samp{-mfpe=}, for compatibility with older versions of GCC.
 
 @item -mstructure-size-boundary=<n>
 @kindex -mstructure-size-boundary
@@ -5282,14 +5515,14 @@ can produce faster, more efficient code, but can also increase the size
 of the program.  The two values are potentially incompatible.  Code
 compiled with one value cannot necessarily expect to work with code or
 libraries compiled with the other value, if they exchange information
-using structures or unions.  Programmers are encouraged to use the 32
-value as future versions of the toolchain may default to this value.
+using structures or unions.
 
 @item -mabort-on-noreturn
 @kindex -mabort-on-noreturn
 @kindex -mnoabort-on-noreturn
-Generate a call to the function abort at the end of a noreturn function.
-It will be executed if the function tries to return.
+Generate a call to the function @code{abort} at the end of a
+@code{noreturn} function.  It will be executed if the function tries to
+return.
 
 @item -mlong-calls
 @itemx -mno-long-calls
@@ -5297,7 +5530,7 @@ Tells the compiler to perform function calls by first loading the
 address of the function into a register and then performing a subroutine
 call on this register.  This switch is needed if the target function
 will lie outside of the 64 megabyte addressing range of the offset based
-version of subroutine call instruction. 
+version of subroutine call instruction.
 
 Even if this switch is enabled, not all function calls will be turned
 into long calls.  The heuristic is that static functions, functions
@@ -5311,15 +5544,15 @@ the scope of a @samp{#pragma long_calls} directive, will always be
 turned into long calls.
 
 This feature is not enabled by default.  Specifying
-@samp{--no-long-calls} will restore the default behaviour, as will
+@samp{-mno-long-calls} will restore the default behaviour, as will
 placing the function calls within the scope of a @samp{#pragma
 long_calls_off} directive.  Note these switches have no effect on how
 the compiler generates code to handle function calls via function
-pointers.  
+pointers.
 
 @item -mnop-fun-dllimport
 @kindex -mnop-fun-dllimport
-Disable the support for the @emph{dllimport} attribute.
+Disable support for the @emph{dllimport} attribute.
 
 @item -msingle-pic-base
 @kindex -msingle-pic-base
@@ -5333,62 +5566,47 @@ before execution begins.
 Specify the register to be used for PIC addressing.  The default is R10
 unless stack-checking is enabled, when R9 is used.
 
-@end table
+@item -mpoke-function-name
+@kindex -mpoke-function-name
+Write the name of each function into the text section, directly
+preceding the function prologue.  The generated code is similar to this:
 
-@node Thumb Options
-@subsection Thumb Options
-@cindex Thumb Options
+@smallexample
+     t0
+         .ascii "arm_poke_function_name", 0
+         .align
+     t1
+         .word 0xff000000 + (t1 - t0)
+     arm_poke_function_name
+         mov     ip, sp
+         stmfd   sp!, @{fp, ip, lr, pc@}
+         sub     fp, ip, #4
+@end smallexample
 
-@table @gcctabopt
+When performing a stack backtrace, code can inspect the value of
+@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
+location @code{pc - 12} and the top 8 bits are set, then we know that
+there is a function name embedded immediately preceding this location
+and has length @code{((pc[-3]) & 0xff000000)}.
 
-@item -mthumb-interwork
-@kindex -mthumb-interwork
-@kindex -mno-thumb-interwork
-Generate code which supports calling between the THUMB and ARM
-instruction sets.  Without this option the two instruction sets cannot
-be reliably used inside one program.  The default is
-@samp{-mno-thumb-interwork}, since slightly smaller code is generated
-with this option.
+@item -mthumb
+@kindex -mthumb
+Generate code for the 16-bit Thumb instruction set.  The default is to
+use the 32-bit ARM instruction set.
 
 @item -mtpcs-frame
 @kindex -mtpcs-frame
 @kindex -mno-tpcs-frame
 Generate a stack frame that is compliant with the Thumb Procedure Call
 Standard for all non-leaf functions.  (A leaf function is one that does
-not call any other functions).  The default is @samp{-mno-apcs-frame}. 
+not call any other functions.)  The default is @samp{-mno-tpcs-frame}.
 
 @item -mtpcs-leaf-frame
 @kindex -mtpcs-leaf-frame
 @kindex -mno-tpcs-leaf-frame
 Generate a stack frame that is compliant with the Thumb Procedure Call
 Standard for all leaf functions.  (A leaf function is one that does
-not call any other functions).  The default is @samp{-mno-apcs-leaf-frame}. 
-
-@item -mlittle-endian
-@kindex -mlittle-endian
-Generate code for a processor running in little-endian mode.  This is
-the default for all standard configurations.
-
-@item -mbig-endian
-@kindex -mbig-endian
-Generate code for a processor running in big-endian mode.
-
-@item -mstructure-size-boundary=<n>
-@kindex -mstructure-size-boundary
-The size of all structures and unions will be rounded up to a multiple
-of the number of bits set by this option.  Permissible values are 8 and
-32.  The default value varies for different toolchains.  For the COFF
-targeted toolchain the default value is 8.  Specifying the larger number
-can produced faster, more efficient code, but can also increase the size
-of the program.  The two values are potentially incompatible.  Code
-compiled with one value cannot necessarily expect to work with code or
-libraries compiled with the other value, if they exchange information
-using structures or unions.  Programmers are encouraged to use the 32
-value as future versions of the toolchain may default to this value.
-
-@item -mnop-fun-dllimport
-@kindex -mnop-fun-dllimport
-Disable the support for the @emph{dllimport} attribute.
+not call any other functions.)  The default is @samp{-mno-apcs-leaf-frame}.
 
 @item -mcallee-super-interworking
 @kindex -mcallee-super-interworking
@@ -5404,17 +5622,6 @@ execute correctly regardless of whether the target code has been
 compiled for interworking or not.  There is a small overhead in the cost
 of executing a function pointer if this option is enabled.
 
-@item -msingle-pic-base
-@kindex -msingle-pic-base
-Treat the register used for PIC addressing as read-only, rather than
-loading it in the prologue for each function.  The run-time system is
-responsible for initialising this register with an appropriate value
-before execution begins.
-
-@item -mpic-register=<reg>
-@kindex -mpic-register=
-Specify the register to be used for PIC addressing.  The default is R10.
-
 @end table
 
 @node MN10200 Options
@@ -5428,7 +5635,7 @@ Indicate to the linker that it should perform a relaxation optimization pass
 to shorten branches, calls and absolute memory addresses.  This option only
 has an effect when used on the command line for the final link step.
 
-This option makes symbolic debugging impossible. 
+This option makes symbolic debugging impossible.
 @end table
 
 @node MN10300 Options
@@ -5457,7 +5664,7 @@ Indicate to the linker that it should perform a relaxation optimization pass
 to shorten branches, calls and absolute memory addresses.  This option only
 has an effect when used on the command line for the final link step.
 
-This option makes symbolic debugging impossible. 
+This option makes symbolic debugging impossible.
 @end table
 
 
@@ -5478,12 +5685,12 @@ The addressability of a particular object can be set with the
 @code{model} attribute.
 
 @item -mcode-model=medium
-Assume objects may be anywhere in the 32 bit address space (the compiler
+Assume objects may be anywhere in the 32-bit address space (the compiler
 will generate @code{seth/add3} instructions to load their addresses), and
 assume all subroutines are reachable with the @code{bl} instruction.
 
 @item -mcode-model=large
-Assume objects may be anywhere in the 32 bit address space (the compiler
+Assume objects may be anywhere in the 32-bit address space (the compiler
 will generate @code{seth/add3} instructions to load their addresses), and
 assume subroutines may not be reachable with the @code{bl} instruction
 (the compiler will generate the much slower @code{seth/add3/jl}
@@ -5851,19 +6058,19 @@ specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601),
 and 64-bit PowerPC architecture machine types, with an appropriate,
 generic processor model assumed for scheduling purposes.@refill
 
-Specifying any of the following options: 
+Specifying any of the following options:
 @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
-@samp{-mcpu=power}, or @samp{-mcpu=power2}  
-enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option; 
+@samp{-mcpu=power}, or @samp{-mcpu=power2}
+enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option;
 @samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
 All of @samp{-mcpu=rs64a}, @samp{-mcpu=602}, @samp{-mcpu=603},
 @samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=620}, @samp{-mcpu=630},
 @samp{-mcpu=740}, and @samp{-mcpu=750}
-enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.  
+enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
 Exactly similarly, all of @samp{-mcpu=403},
-@samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc} 
+@samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc}
 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
-@samp{-mcpu=common} disables both the 
+@samp{-mcpu=common} disables both the
 @samp{-mpower} and @samp{-mpowerpc} options.@refill
 
 AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
@@ -6277,7 +6484,7 @@ root instructions).  @samp{r6000} is the default @var{cpu type} at this
 ISA level.
 
 @item -mips3
-Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
+Issue instructions from level 3 of the MIPS ISA (64-bit instructions).
 @samp{r4000} is the default @var{cpu type} at this ISA level.
 
 @item -mips4
@@ -6444,7 +6651,7 @@ when executing, and thus may be preferred for some embedded systems.
 @itemx -mno-uninit-const-in-rodata
 When used together with -membedded-data, it will always store uninitialized
 const variables in the read-only data section.
-  
+
 @item -msingle-float
 @itemx -mdouble-float
 The @samp{-msingle-float} switch tells gcc to assume that the floating
@@ -6522,18 +6729,18 @@ These @samp{-m} options are defined for the i386 family of computers:
 Assume the defaults for the machine type @var{cpu type} when scheduling
 instructions.  The choices for @var{cpu type} are @samp{i386},
 @samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium},
-@samp{pentiumpro}, @samp{k6}, and @samp{athlon}
+@samp{pentiumpro}, @samp{pentium4}, @samp{k6}, and @samp{athlon}
 
 While picking a specific @var{cpu type} will schedule things appropriately
 for that particular chip, the compiler will not generate any code that
 does not run on the i386 without the @samp{-march=@var{cpu type}} option
 being used.  @samp{i586} is equivalent to @samp{pentium} and @samp{i686}
-is equivalent to @samp{pentiumpro}.  @samp{k6} is the AMD chip as
-opposed to the Intel ones.
+is equivalent to @samp{pentiumpro}.  @samp{k6} and @samp{athlon} are the
+AMD chips as opposed to the Intel ones.
 
 @item -march=@var{cpu type}
 Generate instructions for the machine type @var{cpu type}.  The choices
-for @var{cpu type} are the same as for @samp{-mcpu}.  Moreover, 
+for @var{cpu type} are the same as for @samp{-mcpu}.  Moreover,
 specifying @samp{-march=@var{cpu type}} implies @samp{-mcpu=@var{cpu type}}.
 
 @item -m386
@@ -6580,7 +6787,7 @@ Some 387 emulators do not support the @code{sin}, @code{cos} and
 @code{sqrt} instructions for the 387.  Specify this option to avoid
 generating those instructions. This option is the default on FreeBSD.
 As of revision 2.6.1, these instructions are not generated unless you
-also use the @samp{-ffast-math} switch.
+also use the @samp{-funsafe-math-optimizations} switch.
 
 @item -malign-double
 @itemx -mno-align-double
@@ -6600,7 +6807,7 @@ impossible to reach with 12 byte long doubles in the array accesses.
 @strong{Warning:} if you use the @samp{-m128bit-long-double} switch, the
 structures and arrays containing @code{long double} will change their size as
 well as function calling convention for function taking @code{long double}
-will be modified. 
+will be modified.
 
 @item -m96bit-long-double
 @itemx -m96bit-long-double
@@ -6616,7 +6823,7 @@ These options are meaningful only on System V Release 3.
 @item -mno-wide-multiply
 @itemx -mwide-multiply
 Control whether GCC uses the @code{mul} and @code{imul} that produce
-64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
+64-bit results in @code{eax:edx} from 32-bit operands to do @code{long
 long} multiplies and 32-bit division by constants.
 
 @item -mrtd
@@ -6644,13 +6851,6 @@ In addition, seriously incorrect code will result if you call a
 function with too many arguments.  (Normally, extra arguments are
 harmlessly ignored.)
 
-@item -mreg-alloc=@var{regs}
-Control the default allocation order of integer registers.  The
-string @var{regs} is a series of letters specifying a register.  The
-supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
-@code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
-@code{D} allocate EDI; @code{B} allocate EBP.
-
 @item -mregparm=@var{num}
 Control how many registers are used to pass integer arguments.  By
 default, no registers are used to pass arguments, and at most 3
@@ -6663,26 +6863,6 @@ function by using the function attribute @samp{regparm}.
 value, including any libraries.  This includes the system libraries and
 startup modules.
 
-@item -malign-loops=@var{num}
-Align loops to a 2 raised to a @var{num} byte boundary.  If
-@samp{-malign-loops} is not specified, the default is 2 unless
-gas 2.8 (or later) is being used in which case the default is
-to align the loop on a 16 byte boundary if it is less than 8
-bytes away.
-
-@item -malign-jumps=@var{num}
-Align instructions that are only jumped to to a 2 raised to a @var{num}
-byte boundary.  If @samp{-malign-jumps} is not specified, the default is
-2 if optimizing for a 386, and 4 if optimizing for a 486 unless
-gas 2.8 (or later) is being used in which case the default is
-to align the instruction on a 16 byte boundary if it is less
-than 8 bytes away.
-
-@item -malign-functions=@var{num}
-Align the start of functions to a 2 raised to @var{num} byte boundary.
-If @samp{-malign-functions} is not specified, the default is 2 if optimizing
-for a 386, and 4 if optimizing for a 486.
-
 @item -mpreferred-stack-boundary=@var{num}
 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
 byte boundary.  If @samp{-mpreferred-stack-boundary} is not specified,
@@ -6696,7 +6876,7 @@ Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
 penalties if it is not 16 byte aligned.
 
 To ensure proper alignment of this values on the stack, the stack boundary
-must be as aligned as that required by any value stored on the stack. 
+must be as aligned as that required by any value stored on the stack.
 Further, every function must be generated such that it keeps the stack
 aligned.  Thus calling a function compiled with a higher preferred
 stack boundary from a function compiled with a lower preferred stack
@@ -6725,10 +6905,10 @@ increase in code size. This switch implies -mno-push-args.
 
 @item -mthreads
 @kindex -mthreads
-Support thread-safe exception handling on @samp{Mingw32}. Code that relies 
-on thread-safe exception handling must compile and link all code with the 
-@samp{-mthreads} option. When compiling, @samp{-mthreads} defines 
-@samp{-D_MT}; when linking, it links in a special thread helper library 
+Support thread-safe exception handling on @samp{Mingw32}. Code that relies
+on thread-safe exception handling must compile and link all code with the
+@samp{-mthreads} option. When compiling, @samp{-mthreads} defines
+@samp{-D_MT}; when linking, it links in a special thread helper library
 @samp{-lmingwthrd} which cleans up per thread exception handling data.
 
 @item -mno-align-stringops
@@ -6743,6 +6923,14 @@ By default GCC inlines string operations only when destination is known to be
 aligned at least to 4 byte boundary. This enables more inlining, increase code
 size, but may improve performance of code that depends on fast memcpy, strlen
 and memset for short lengths.
+
+@item -momit-leaf-frame-pointer
+@kindex -momit-leaf-frame-pointer
+Don't keep the frame pointer in a register for leaf functions.  This
+avoids the instructions to save, set up and restore frame pointers and
+makes an extra register available in leaf functions.  The option
+@samp{-fomit-frame-pointer} removes the frame pointer for all functions
+which might make debugging harder.
 @end table
 
 @node HPPA Options
@@ -6763,7 +6951,7 @@ other way around.
 
 PA 2.0 support currently requires gas snapshot 19990413 or later.  The
 next release of binutils (current is 2.9.1) will probably contain PA 2.0
-support.  
+support.
 
 @item -mpa-risc-1-0
 @itemx -mpa-risc-1-1
@@ -6816,8 +7004,8 @@ Enable the use of assembler directives only GAS understands.
 
 @item -mschedule=@var{cpu type}
 Schedule code according to the constraints for the machine type
-@var{cpu type}.  The choices for @var{cpu type} are @samp{700} 
-@samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}.  Refer to 
+@var{cpu type}.  The choices for @var{cpu type} are @samp{700}
+@samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}.  Refer to
 @file{/usr/lib/sched.models} on an HP-UX system to determine the
 proper scheduling option for your machine.
 
@@ -6936,7 +7124,7 @@ These @samp{-m} options are defined for the DEC Alpha implementations:
 @itemx -msoft-float
 Use (do not use) the hardware floating-point instructions for
 floating-point operations.  When @option{-msoft-float} is specified,
-functions in @file{libgcc1.c} will be used to perform floating-point
+functions in @file{libgcc.a} will be used to perform floating-point
 operations.  Unless they are replaced by routines that emulate the
 floating-point operations, or compiled in such a way as to call such
 emulations routines, these routines will issue floating-point
@@ -6996,8 +7184,8 @@ IEEE @var{inexact flag}.  Turning on this option causes the generated
 code to implement fully-compliant IEEE math.  The option is a shorthand
 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
 @samp{-mieee-conformant},
-@samp{-mfp-trap-mode=sui}, 
-and @samp{-mtrap-precision=i}.  
+@samp{-mfp-trap-mode=sui},
+and @samp{-mtrap-precision=i}.
 On some Alpha implementations the resulting code may execute
 significantly slower than the code generated by default.  Since there
 is very little code that depends on the @var{inexact flag}, you should
@@ -7259,7 +7447,7 @@ Compile code for the processor in big endian mode.
 Compile code for the processor in little endian mode.
 
 @item -mdalign
-Align doubles at 64 bit boundaries.  Note that this changes the calling
+Align doubles at 64-bit boundaries.  Note that this changes the calling
 conventions, and thus some functions from the standard C library will
 not work unless you recompile it first with -mdalign.
 
@@ -7361,7 +7549,7 @@ memory access.
 @item -mbk
 @itemx -mno-bk
 Allow (disallow) allocation of general integer operands into the block
-count register BK. 
+count register BK.
 
 @item -mdb
 @itemx -mno-db
@@ -7501,7 +7689,7 @@ area can hold up to 64 kilobytes.
 @item -mzda=@var{n}
 Put static or global variables whose size is @var{n} bytes or less into
 the first 32 kilobytes of memory.
+
 @item -mv850
 Specify that the target processor is the V850.
 
@@ -7716,7 +7904,7 @@ Change only the low 8 bits of the stack pointer.
 @cindex MCore options
 
 These are the @samp{-m} options defined for the Motorola M*Core
-processors.  
+processors.
 
 @table @gcctabopt
 
@@ -7901,7 +8089,7 @@ exceptions.  For some targets, this implies GNU CC will generate frame
 unwind information for all functions, which can produce significant data
 size overhead, although it does not affect execution.  If you do not
 specify this option, GNU CC will enable it by default for languages like
-C++ which normally require exception handling, and disable itfor
+C++ which normally require exception handling, and disable it for
 languages like C that do not normally require it.  However, you may need
 to enable this option when compiling C code that needs to interoperate
 properly with exception handlers written in C++.  You may also wish to
@@ -7954,7 +8142,7 @@ shared between processes running the same program, while private data
 exists in one copy per process.
 
 @item -fno-common
-Allocate even uninitialized global variables in the data section of the
+In C, allocate even uninitialized global variables in the data section of the
 object file, rather than generating them as common blocks.  This has the
 effect that if the same variable is declared (without @code{extern}) in
 two different compilations, you will get an error when you link them.
@@ -8153,8 +8341,10 @@ function, so the call site information may not be available to the
 profiling functions otherwise.)
 
 @example
-void __cyg_profile_func_enter (void *this_fn, void *call_site);
-void __cyg_profile_func_exit  (void *this_fn, void *call_site);
+void __cyg_profile_func_enter (void *this_fn,
+                               void *call_site);
+void __cyg_profile_func_exit  (void *this_fn,
+                               void *call_site);
 @end example
 
 The first argument is the address of the start of the current function,
@@ -8458,7 +8648,7 @@ with @samp{-q}.
 
 The output from @code{protoize} or @code{unprotoize} replaces the
 original source file.  The original file is renamed to a name ending
-with @samp{.save} (for DOS, the saved filename ends in @samp{.sav} 
+with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
 for DOS) file already exists, then the source file is simply discarded.
 
@@ -8494,7 +8684,7 @@ the @var{compilation-options}, they are ignored.
 
 @item -C
 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
-systems) instead of @samp{.c}.  This is convenient if you are converting 
+systems) instead of @samp{.c}.  This is convenient if you are converting
 a C program to C++.  This option applies only to @code{protoize}.
 
 @item -g
@@ -8563,4 +8753,3 @@ exist, because otherwise they won't get converted.
 
 @xref{Protoize Caveats}, for more information on how to use
 @code{protoize} successfully.
-