g++ man page on MirBSD

Man page or keyword search:  
man Server   6113 pages
apropos Keyword Search (all sections)
Output format
MirBSD logo
[printable version]



GCC(1)			       GNU			   GCC(1)

NAME
     mgcc, c++ - GNU project C and C++ compiler

SYNOPSIS
     gcc [-c|-S|-E] [-std=standard]
	 [-g] [-pg] [-Olevel]
	 [-Wwarn...] [-pedantic]
	 [-Idir...] [-Ldir...]
	 [-Dmacro[=defn]...] [-Umacro]
	 [-foption...] [-mmachine-option...]
	 [-o outfile] infile...

     Only the most useful options are listed here; see below for
     the remainder.  g++ accepts mostly the same options as gcc.

DESCRIPTION
     When you invoke GCC, it normally does preprocessing, compi-
     lation, assembly and linking.  The ``overall options'' allow
     you to stop this process at an intermediate stage.	 For
     example, the -c option says not to run the linker.	 Then the
     output consists of object files output by the assembler.

     Other options are passed on to one stage of processing.
     Some options control the preprocessor and others the com-
     piler itself.  Yet other options control the assembler and
     linker; most of these are not documented here, since you
     rarely need to use any of them.

     Most of the command line options that you can use with GCC
     are useful for C programs; when an option is only useful
     with another language (usually C++), the explanation says so
     explicitly.  If the description for a particular option does
     not mention a source language, you can use that option with
     all supported languages.

     The gcc program accepts options and file names as operands.
     Many options have multi-letter names; therefore multiple
     single-letter options may not be grouped: -dr is very dif-
     ferent from -d -r.

     You can mix options and other arguments.  For the most part,
     the order you use doesn't matter.	Order does matter when
     you use several options of the same kind; for example, if
     you specify -L more than once, the directories are searched
     in the order specified.

     Many options have long names starting with -f or with
     -W---for example, -fforce-mem, -fstrength-reduce, -Wformat
     and so on.	 Most of these have both positive and negative
     forms; the negative form of -ffoo would be -fno-foo.  This
     manual documents only one of these two forms, whichever one
     is not the default.

gcc-3.4.6		   2011-08-18				1

GCC(1)			       GNU			   GCC(1)

OPTIONS
     Option Summary

     Here is a summary of all the options, grouped by type.
     Explanations are in the following sections.

     Overall Options
	 -c  -S	 -E  -o file  -pipe  -pass-exit-codes -x language
	 -v  -###  --help  --target-help  --version

     C Language Options
	 -ansi	-std=standard  -aux-info filename -fno-asm
	 -fno-builtin  -fno-builtin-function -fhosted  -ffree-
	 standing  -fms-extensions -trigraphs  -no-integrated-cpp
	 -traditional  -traditional-cpp -fallow-single-precision
	 -fcond-mismatch -fsigned-bitfields  -fsigned-char
	 -funsigned-bitfields  -funsigned-char -fwritable-strings

     C++ Language Options
	 -fabi-version=n  -fno-access-control  -fcheck-new
	 -fconserve-space  -fno-const-strings
	 -fno-elide-constructors -fno-enforce-eh-specs
	 -ffor-scope  -fno-for-scope  -fno-gnu-keywords
	 -fno-implicit-templates -fno-implicit-inline-templates
	 -fno-implement-inlines	 -fms-extensions
	 -fno-nonansi-builtins	-fno-operator-names
	 -fno-optional-diags  -fpermissive -frepo  -fno-rtti
	 -fstats  -ftemplate-depth-n -fuse-cxa-atexit  -fno-weak
	 -nostdinc++ -fno-default-inline  -Wabi
	 -Wctor-dtor-privacy -Wnon-virtual-dtor	 -Wreorder
	 -Weffc++  -Wno-deprecated -Wno-non-template-friend
	 -Wold-style-cast -Woverloaded-virtual
	 -Wno-pmf-conversions -Wsign-promo

     Objective-C Language Options
	 -fconstant-string-class=class-name -fgnu-runtime
	 -fnext-runtime -fno-nil-receivers -fobjc-exceptions
	 -freplace-objc-classes -fzero-link -gen-decls
	 -Wno-protocol	-Wselector -Wundeclared-selector

     Language Independent Options
	 -fmessage-length=n
	 -fdiagnostics-show-location=[once|every-line]

     Warning Options
	 -fsyntax-only	-pedantic  -pedantic-errors -w	-Wextra
	 -Wall	-Waggregate-return -Wbounded -Wcast-align
	 -Wcast-qual  -Wchar-subscripts	 -Wcomment -Wconversion
	 -Wno-deprecated-declarations -Wdisabled-optimization
	 -Wno-div-by-zero  -Wendif-labels -Werror
	 -Werror-maybe-reset
	 -Werror-implicit-function-declaration -Wfloat-equal

gcc-3.4.6		   2011-08-18				2

GCC(1)			       GNU			   GCC(1)

	 -Wformat  -Wformat=2 -Wno-format-extra-args
	 -Wformat-nonliteral -Wformat-security	-Wformat-y2k
	 -Wimplicit  -Wimplicit-function-declaration
	 -Wimplicit-int -Wimport  -Wno-import  -Winit-self  -Win-
	 line -Wno-invalid-offsetof  -Winvalid-pch
	 -Wlarger-than-len  -Wlong-long -Wmain	-Wmissing-braces
	 -Wmissing-field-initializers -Wmissing-format-attribute
	 -Wmissing-noreturn -Wno-multichar  -Wnonnull  -Wpacked
	 -Wpadded -Wparentheses	 -Wpointer-arith
	 -Wredundant-decls -Wreturn-type  -Wsequence-point
	 -Wshadow -Wsign-compare  -Wstack-larger-than-len
	 -Wstack-protector  -Wstrict-aliasing -Wswitch
	 -Wswitch-default  -Wswitch-enum -Wsystem-headers
	 -Wtrampolines -Wtrigraphs  -Wundef  -Wuninitialized
	 -Wunknown-pragmas  -Wunreachable-code -Wunused
	 -Wunused-function  -Wunused-label  -Wunused-parameter
	 -Wunused-value	 -Wunused-variable  -Wwrite-strings

     C-only Warning Options
	 -Wbad-function-cast  -Wmissing-declarations
	 -Wmissing-prototypes  -Wnested-externs
	 -Wold-style-definition -Wstrict-prototypes  -Wtradi-
	 tional -Wdeclaration-after-statement

     Debugging Options
	 -dletters  -dumpspecs	-dumpmachine  -dumpversion
	 -fdump-unnumbered  -fdump-translation-unit[-n]
	 -fdump-class-hierarchy[-n] -fdump-tree-original[-n]
	 -fdump-tree-optimized[-n] -fdump-tree-inlined[-n]
	 -feliminate-dwarf2-dups -feliminate-unused-debug-types
	 -feliminate-unused-debug-symbols -fmem-report
	 -fprofile-arcs -frandom-seed=string -fsched-verbose=n
	 -ftest-coverage  -ftime-report -g  -glevel  -gcoff
	 -gdwarf-2 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff
	 -gxcoff+ -p  -pg  -print-file-name=library
	 -print-libgcc-file-name -print-multi-directory
	 -print-multi-lib -print-prog-name=program
	 -print-search-dirs  -Q -save-temps  -time

     Optimization Options
	 -falign-functions=n  -falign-jumps=n -falign-labels=n
	 -falign-loops=n -fbranch-probabilities -fprofile-values
	 -fvpt -fbranch-target-load-optimize
	 -fbranch-target-load-optimize2 -fcaller-saves
	 -fcprop-registers -fcse-follow-jumps  -fcse-skip-blocks
	 -fdata-sections -fdelayed-branch
	 -fdelete-null-pointer-checks -fexpensive-optimizations
	 -ffast-math  -ffloat-store -fforce-addr  -fforce-mem
	 -ffunction-sections -fgcse  -fgcse-lm	-fgcse-sm
	 -fgcse-las  -floop-optimize -fcrossjumping
	 -fif-conversion  -fif-conversion2 -finline-functions
	 -finline-limit=n  -fkeep-inline-functions


gcc-3.4.6		   2011-08-18				3

GCC(1)			       GNU			   GCC(1)

	 -fkeep-static-consts  -fmerge-constants
	 -fmerge-all-constants -fmove-all-movables  -fnew-ra
	 -fno-branch-count-reg -fno-default-inline
	 -fno-defer-pop -fno-function-cse
	 -fno-guess-branch-probability -fno-inline
	 -fno-math-errno  -fno-peephole	 -fno-peephole2
	 -funsafe-math-optimizations  -ffinite-math-only
	 -fno-trapping-math  -fno-zero-initialized-in-bss
	 -fomit-frame-pointer  -foptimize-register-move
	 -foptimize-sibling-calls  -fprefetch-loop-arrays
	 -fprofile-generate -fprofile-use -freduce-all-givs
	 -fregmove  -frename-registers -freorder-blocks
	 -freorder-functions -frerun-cse-after-loop
	 -frerun-loop-opt -frounding-math -fschedule-insns
	 -fschedule-insns2 -fno-sched-interblock  -fno-sched-spec
	 -fsched-spec-load -fsched-spec-load-dangerous
	 -fsched-stalled-insns=n -sched-stalled-insns-dep=n
	 -fsched2-use-superblocks -fsched2-use-traces
	 -fsignaling-nans -fsingle-precision-constant
	 -fstrength-reduce  -fstrict-aliasing  -ftracer
	 -fthread-jumps -funroll-all-loops  -funroll-loops
	 -fpeel-loops -funswitch-loops	-fold-unroll-loops
	 -fold-unroll-all-loops --param name=value -O  -O0  -O1
	 -O2  -O3  -Os

     Preprocessor Options
	 -Aquestion=answer -A-question[=answer] -C  -dD	 -dI  -dM
	 -dN -Dmacro[=defn]  -E	 -H -idirafter dir -include file
	 -imacros file -iprefix file  -iwithprefix dir -iwithpre-
	 fixbefore dir	-isystem dir -M	 -MM  -MF  -MG	-MP  -MQ
	 -MT  -nostdinc -P  -fworking-directory	 -remap -tri-
	 graphs	 -undef	 -Umacro  -Wp,option -Xpreprocessor
	 option

     Assembler Option
	 -Wa,option  -Xassembler option

     Linker Options
	 object-file-name  -llibrary -nostartfiles  -node-
	 faultlibs  -nostdlib -pie -s  -static	-static-libgcc
	 -shared  -shared-libgcc  -symbolic -Wl,option	-Xlinker
	 option -u symbol

     Directory Options
	 -Bprefix  -Idir  -I-  -Ldir  -specs=file

     Target Options
	 -V version  -b machine

     Machine Dependent Options
	 M680x0 Options -m68000	 -m68020  -m68020-40  -m68020-60
	 -m68030  -m68040 -m68060  -mcpu32  -m5200  -m68881


gcc-3.4.6		   2011-08-18				4

GCC(1)			       GNU			   GCC(1)

	 -mbitfield  -mc68000  -mc68020 -mnobitfield  -mrtd
	 -mshort  -msoft-float	-mpcrel -malign-int
	 -mstrict-align	 -msep-data  -mno-sep-data
	 -mshared-library-id=n	-mid-shared-library
	 -mno-id-shared-library

	 M68hc1x Options -m6811	 -m6812	 -m68hc11  -m68hc12
	 -m68hcs12 -mauto-incdec  -minmax  -mlong-calls	 -mshort
	 -msoft-reg-count=count

	 VAX Options -mg  -mgnu	 -munix

	 SPARC Options -mcpu=cpu-type -mtune=cpu-type
	 -mcmodel=code-model -m32  -m64	 -mapp-regs
	 -mno-app-regs -mfaster-structs	 -mno-faster-structs
	 -mflat	 -mno-flat  -mfpu  -mno-fpu -mhard-float
	 -msoft-float -mhard-quad-float	 -msoft-quad-float
	 -mimpure-text	-mno-impure-text  -mlittle-endian
	 -mstack-bias  -mno-stack-bias -munaligned-doubles
	 -mno-unaligned-doubles -mv8plus  -mno-v8plus  -mvis
	 -mno-vis -mcypress  -mf930  -mf934 -msparclite	 -msuper-
	 sparc	-mv8 -threads -pthreads

	 ARM Options -mapcs-frame  -mno-apcs-frame -mapcs-26
	 -mapcs-32 -mapcs-stack-check  -mno-apcs-stack-check
	 -mapcs-float  -mno-apcs-float -mapcs-reentrant
	 -mno-apcs-reentrant -msched-prolog  -mno-sched-prolog
	 -mlittle-endian  -mbig-endian	-mwords-little-endian
	 -malignment-traps  -mno-alignment-traps -msoft-float
	 -mhard-float  -mfpe -mthumb-interwork
	 -mno-thumb-interwork -mcpu=name  -march=name  -mfpe=name
	 -mstructure-size-boundary=n -mabort-on-noreturn
	 -mlong-calls  -mno-long-calls -msingle-pic-base
	 -mno-single-pic-base -mpic-register=reg
	 -mnop-fun-dllimport -mcirrus-fix-invalid-insns
	 -mno-cirrus-fix-invalid-insns -mpoke-function-name
	 -mthumb  -marm -mtpcs-frame  -mtpcs-leaf-frame
	 -mcaller-super-interworking  -mcallee-super-interworking

	 MN10300 Options -mmult-bug  -mno-mult-bug -mam33
	 -mno-am33 -mam33-2  -mno-am33-2 -mno-crt0  -mrelax

	 M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
	 -mno-align-loops -missue-rate=number
	 -mbranch-cost=number -mmodel=code-size-model-type
	 -msdata=sdata-type -mno-flush-func -mflush-func=name
	 -mno-flush-trap -mflush-trap=number -G num

	 RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-
	 type -mpower  -mno-power  -mpower2  -mno-power2
	 -mpowerpc  -mpowerpc64	 -mno-powerpc -maltivec
	 -mno-altivec -mpowerpc-gpopt  -mno-powerpc-gpopt


gcc-3.4.6		   2011-08-18				5

GCC(1)			       GNU			   GCC(1)

	 -mpowerpc-gfxopt  -mno-powerpc-gfxopt -mnew-mnemonics
	 -mold-mnemonics -mfull-toc   -mminimal-toc
	 -mno-fp-in-toc	 -mno-sum-in-toc -m64  -m32  -mxl-compat
	 -mno-xl-compat	 -mpe -malign-power  -malign-natural
	 -msoft-float  -mhard-float  -mmultiple	 -mno-multiple
	 -mstring  -mno-string	-mupdate  -mno-update
	 -mfused-madd  -mno-fused-madd	-mbit-align
	 -mno-bit-align -mstrict-align	-mno-strict-align
	 -mrelocatable -mno-relocatable	 -mrelocatable-lib
	 -mno-relocatable-lib -mtoc  -mno-toc  -mlittle
	 -mlittle-endian  -mbig	 -mbig-endian -mdynamic-no-pic
	 -mprioritize-restricted-insns=priority
	 -msched-costly-dep=dependence_type
	 -minsert-sched-nops=scheme -mcall-sysv	 -mcall-netbsd
	 -maix-struct-return  -msvr4-struct-return -mabi=altivec
	 -mabi=no-altivec -mabi=spe  -mabi=no-spe -misel=yes
	 -misel=no -mspe=yes  -mspe=no -mfloat-gprs=yes
	 -mfloat-gprs=no -mprototype  -mno-prototype -msim
	 -mmvme	 -mads	-myellowknife  -memb  -msdata -msdata=opt
	 -mvxworks  -mwindiss  -G num  -pthread

	 Darwin Options -all_load  -allowable_client  -arch
	 -arch_errors_fatal -arch_only	-bind_at_load  -bundle
	 -bundle_loader -client_name  -compatibility_version
	 -current_version -dependency-file  -dylib_file
	 -dylinker_install_name -dynamic  -dynamiclib
	 -exported_symbols_list -filelist  -flat_namespace
	 -force_cpusubtype_ALL -force_flat_namespace
	 -headerpad_max_install_names -image_base  -init
	 -install_name	-keep_private_externs -multi_module
	 -multiply_defined  -multiply_defined_unused -noall_load
	 -nofixprebinding -nomultidefs	-noprebind  -noseglink-
	 edit -pagezero_size  -prebind
	 -prebind_all_twolevel_modules -private_bundle
	 -read_only_relocs  -sectalign -sectobjectsymbols  -why-
	 load  -seg1addr -sectcreate  -sectobjectsymbols  -sec-
	 torder -seg_addr_table	 -seg_addr_table_filename
	 -seglinkedit -segprot	-segs_read_only_addr
	 -segs_read_write_addr -single_module  -static
	 -sub_library  -sub_umbrella -twolevel_namespace
	 -umbrella  -undefined -unexported_symbols_list
	 -weak_reference_mismatches -whatsloaded

	 MIPS Options -EL  -EB	-march=arch  -mtune=arch -mips1
	 -mips2	 -mips3	 -mips4	 -mips32  -mips32r2  -mips64
	 -mips16  -mno-mips16  -mabi=abi  -mabicalls
	 -mno-abicalls -mxgot  -mno-xgot  -membedded-pic
	 -mno-embedded-pic -mgp32  -mgp64  -mfp32  -mfp64
	 -mhard-float  -msoft-float -msingle-float
	 -mdouble-float	 -mint64  -mlong64  -mlong32 -Gnum
	 -membedded-data  -mno-embedded-data
	 -muninit-const-in-rodata  -mno-uninit-const-in-rodata


gcc-3.4.6		   2011-08-18				6

GCC(1)			       GNU			   GCC(1)

	 -msplit-addresses  -mno-split-addresses
	 -mexplicit-relocs  -mno-explicit-relocs -mrnames
	 -mno-rnames -mcheck-zero-division
	 -mno-check-zero-division -mmemcpy  -mno-memcpy
	 -mlong-calls  -mno-long-calls -mmad  -mno-mad
	 -mfused-madd  -mno-fused-madd	-nocpp -mfix-sb1
	 -mno-fix-sb1  -mflush-func=func -mno-flush-func
	 -mbranch-likely  -mno-branch-likely

	 i386 and x86-64 Options -mtune=cpu-type  -march=cpu-type
	 -mfpmath=unit -masm=dialect  -mno-fancy-math-387
	 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
	 -mno-wide-multiply  -mrtd  -malign-double
	 -mpreferred-stack-boundary=num -mmmx  -msse  -msse2
	 -msse3 -m3dnow -mthreads  -mno-align-stringops
	 -minline-all-stringops -mpush-args
	 -maccumulate-outgoing-args  -m128bit-long-double
	 -m96bit-long-double  -mregparm=num
	 -momit-leaf-frame-pointer -mno-red-zone
	 -mno-tls-direct-seg-refs -mcmodel=code-model -m32  -m64

	 HPPA Options -march=architecture-type -mbig-switch
	 -mdisable-fpregs  -mdisable-indexing
	 -mfast-indirect-calls	-mgas  -mgnu-ld	  -mhp-ld
	 -mjump-in-delay -mlinker-opt -mlong-calls
	 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
	 -mno-disable-indexing	-mno-fast-indirect-calls
	 -mno-gas -mno-jump-in-delay  -mno-long-load-store
	 -mno-portable-runtime	-mno-soft-float -mno-space-regs
	 -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0
	 -mportable-runtime -mschedule=cpu-type	 -mspace-regs
	 -msio	-mwsio -nolibdld  -static  -threads

	 Intel 960 Options -mcpu-type  -masm-compat
	 -mclean-linkage -mcode-align  -mcomplex-addr
	 -mleaf-procedures -mic-compat	-mic2.0-compat
	 -mic3.0-compat -mintel-asm  -mno-clean-linkage
	 -mno-code-align -mno-complex-addr  -mno-leaf-procedures
	 -mno-old-align	 -mno-strict-align  -mno-tail-call
	 -mnumerics  -mold-align  -msoft-float	-mstrict-align
	 -mtail-call

	 DEC Alpha Options -mno-fp-regs	 -msoft-float  -malpha-as
	 -mgas -mieee  -mieee-with-inexact  -mieee-conformant
	 -mfp-trap-mode=mode  -mfp-rounding-mode=mode
	 -mtrap-precision=mode	-mbuild-constants -mcpu=cpu-type
	 -mtune=cpu-type -mbwx	-mmax  -mfix  -mcix -mfloat-vax
	 -mfloat-ieee -mexplicit-relocs	 -msmall-data
	 -mlarge-data -msmall-text  -mlarge-text
	 -mmemory-latency=time

	 DEC Alpha/VMS Options -mvms-return-codes


gcc-3.4.6		   2011-08-18				7

GCC(1)			       GNU			   GCC(1)

	 H8/300 Options -mrelax	 -mh  -ms  -mn	-mint32
	 -malign-300

	 SH Options -m1	 -m2  -m2e  -m3	 -m3e -m4-nofpu
	 -m4-single-only  -m4-single  -m4 -m5-64media
	 -m5-64media-nofpu -m5-32media	-m5-32media-nofpu
	 -m5-compact  -m5-compact-nofpu -mb  -ml  -mdalign  -mre-
	 lax -mbigtable	 -mfmovd  -mhitachi  -mnomacsave -mieee
	 -misize  -mpadstruct  -mspace -mprefergot  -musermode

	 System V Options -Qy  -Qn  -YP,paths  -Ym,dir

	 ARC Options -EB  -EL -mmangle-cpu  -mcpu=cpu
	 -mtext=text-section -mdata=data-section
	 -mrodata=readonly-data-section

	 TMS320C3x/C4x Options -mcpu=cpu  -mbig	 -msmall  -mreg-
	 parm  -mmemparm -mfast-fix  -mmpyi  -mbk  -mti
	 -mdp-isr-reload -mrpts=count  -mrptb  -mdb
	 -mloop-unsigned -mparallel-insns  -mparallel-mpy
	 -mpreserve-float

	 V850 Options -mlong-calls  -mno-long-calls  -mep
	 -mno-ep -mprolog-function  -mno-prolog-function  -mspace
	 -mtda=n  -msda=n  -mzda=n -mapp-regs  -mno-app-regs
	 -mdisable-callt  -mno-disable-callt -mv850e1 -mv850e
	 -mv850	 -mbig-switch

	 NS32K Options -m32032	-m32332	 -m32532  -m32081
	 -m32381 -mmult-add  -mnomult-add  -msoft-float	 -mrtd
	 -mnortd -mregparam  -mnoregparam  -msb	 -mnosb -mbit-
	 field	-mnobitfield  -mhimem  -mnohimem

	 AVR Options -mmcu=mcu	-msize	-minit-stack=n
	 -mno-interrupts -mcall-prologues  -mno-tablejump
	 -mtiny-stack

	 MCore Options -mhardlit  -mno-hardlit	-mdiv  -mno-div
	 -mrelax-immediates -mno-relax-immediates
	 -mwide-bitfields  -mno-wide-bitfields -m4byte-functions
	 -mno-4byte-functions  -mcallgraph-data
	 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
	 -mno-lsim -mlittle-endian  -mbig-endian  -m210	 -m340
	 -mstack-increment

	 MMIX Options -mlibfuncs  -mno-libfuncs	 -mepsilon
	 -mno-epsilon  -mabi=gnu -mabi=mmixware	 -mzero-extend
	 -mknuthdiv  -mtoplevel-symbols -melf  -mbranch-predict
	 -mno-branch-predict  -mbase-addresses
	 -mno-base-addresses  -msingle-exit  -mno-single-exit

	 IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as


gcc-3.4.6		   2011-08-18				8

GCC(1)			       GNU			   GCC(1)

	 -mgnu-ld  -mno-pic -mvolatile-asm-stop	 -mb-step
	 -mregister-names  -mno-sdata -mconstant-gp  -mauto-pic
	 -minline-float-divide-min-latency
	 -minline-float-divide-max-throughput
	 -minline-int-divide-min-latency
	 -minline-int-divide-max-throughput
	 -minline-sqrt-min-latency -minline-sqrt-max-throughput
	 -mno-dwarf2-asm -mearly-stop-bits
	 -mfixed-range=register-range -mtls-size=tls-size
	 -mtune=cpu-type -mt -pthread -milp32 -mlp64

	 D30V Options -mextmem	-mextmemory  -monchip
	 -mno-asm-optimize -masm-optimize  -mbranch-cost=n
	 -mcond-exec=n

	 S/390 and zSeries Options -mtune=cpu-type  -march=cpu-
	 type -mhard-float  -msoft-float  -mbackchain
	 -mno-backchain -msmall-exec  -mno-small-exec  -mmvcle
	 -mno-mvcle -m64  -m31	-mdebug	 -mno-debug  -mesa
	 -mzarch  -mfused-madd	-mno-fused-madd

	 CRIS Options -mcpu=cpu	 -march=cpu  -mtune=cpu
	 -mmax-stack-frame=n  -melinux-stacksize=n -metrax4
	 -metrax100  -mpdebug  -mcc-init  -mno-side-effects
	 -mstack-align	-mdata-align  -mconst-align -m32-bit
	 -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
	 -melf	-maout	-melinux  -mlinux  -sim	 -sim2
	 -mmul-bug-workaround  -mno-mul-bug-workaround

	 PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0
	 -m40  -m45  -m10 -mbcopy  -mbcopy-builtin  -mint32
	 -mno-int16 -mint16  -mno-int32	 -mfloat32  -mno-float64
	 -mfloat64  -mno-float32  -mabshi  -mno-abshi
	 -mbranch-expensive  -mbranch-cheap -msplit  -mno-split
	 -munix-asm  -mdec-asm

	 Xstormy16 Options -msim

	 Xtensa Options -mconst16 -mno-const16 -mfused-madd
	 -mno-fused-madd -mtext-section-literals
	 -mno-text-section-literals -mtarget-align
	 -mno-target-align -mlongcalls	-mno-longcalls

	 FRV Options -mgpr-32  -mgpr-64	 -mfpr-32  -mfpr-64
	 -mhard-float  -msoft-float -malloc-cc	-mfixed-cc
	 -mdword  -mno-dword -mdouble  -mno-double -mmedia
	 -mno-media  -mmuladd  -mno-muladd -mlibrary-pic  -macc-4
	 -macc-8 -mpack	 -mno-pack  -mno-eflags	 -mcond-move
	 -mno-cond-move -mscc  -mno-scc	 -mcond-exec
	 -mno-cond-exec -mvliw-branch  -mno-vliw-branch
	 -mmulti-cond-exec  -mno-multi-cond-exec
	 -mnested-cond-exec -mno-nested-cond-exec  -mtomcat-stats


gcc-3.4.6		   2011-08-18				9

GCC(1)			       GNU			   GCC(1)

	 -mcpu=cpu

     Code Generation Options
	 -fcall-saved-reg  -fcall-used-reg -ffixed-reg	-fexcep-
	 tions -fnon-call-exceptions  -funwind-tables
	 -fasynchronous-unwind-tables -finhibit-size-directive
	 -finstrument-functions -fno-common  -fident  -fno-ident
	 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
	 -freg-struct-return  -fshared-data  -fshort-enums
	 -fshort-double	 -fshort-wchar -fverbose-asm
	 -fpack-struct	-fstack-check -fstack-limit-register=reg
	 -fstack-limit-symbol=sym -fstack-protector
	 -fstack-protector-all -fargument-alias
	 -fargument-noalias -fargument-noalias-global
	 -fleading-underscore -ftls-model=model -ftrampolines
	 -ftrapv  -fwrapv  -fbounds-check

     Options Controlling the Kind of Output

     Compilation can involve up to four stages: preprocessing,
     compilation proper, assembly and linking, always in that
     order.  GCC is capable of preprocessing and compiling
     several files either into several assembler input files, or
     into one assembler input file; then each assembler input
     file produces an object file, and linking combines all the
     object files (those newly compiled, and those specified as
     input) into an executable file.

     For any given input file, the file name suffix determines
     what kind of compilation is done:

     file.c
	 C source code which must be preprocessed.

     file.i
	 C source code which should not be preprocessed.

     file.ii
	 C++ source code which should not be preprocessed.

     file.m
	 Objective-C source code.  Note that you must link with
	 the library libobjc.a to make an Objective-C program
	 work.

     file.mi
	 Objective-C source code which should not be prepro-
	 cessed.

     file.h
	 C or C++ header file to be turned into a precompiled
	 header.

gcc-3.4.6		   2011-08-18			       10

GCC(1)			       GNU			   GCC(1)

     file.cc
     file.cp
     file.cxx
     file.cpp
     file.CPP
     file.c++
     file.C
	 C++ source code which must be preprocessed.  Note that
	 in .cxx, the last two letters must both be literally x.
	 Likewise, .C refers to a literal capital C.

     file.hh
     file.H
	 C++ header file to be turned into a precompiled header.

     file.f
     file.for
     file.FOR
	 Fortran source code which should not be preprocessed.

     file.F
     file.fpp
     file.FPP
	 Fortran source code which must be preprocessed (with the
	 traditional preprocessor).

     file.r
	 Fortran source code which must be preprocessed with a
	 RATFOR preprocessor (not included with GCC).

     file.ads
	 Ada source code file which contains a library unit
	 declaration (a declaration of a package, subprogram, or
	 generic, or a generic instantiation), or a library unit
	 renaming declaration (a package, generic, or subprogram
	 renaming declaration).	 Such files are also called
	 specs.

     file.adb
	 Ada source code file containing a library unit body (a
	 subprogram or package body).  Such files are also called
	 bodies.

     file.s
	 Assembler code.

     file.S
	 Assembler code which must be preprocessed.

     other
	 An object file to be fed straight into linking. Any file
	 name with no recognized suffix is treated this way.

gcc-3.4.6		   2011-08-18			       11

GCC(1)			       GNU			   GCC(1)

     You can specify the input language explicitly with the -x
     option:

     -x language
	 Specify explicitly the language for the following input
	 files (rather than letting the compiler choose a default
	 based on the file name suffix).  This option applies to
	 all following input files until the next -x option.
	 Possible values for language are:

		 c  c-header  cpp-output
		 c++  c++-header  c++-cpp-output
		 objective-c  objective-c-header  objc-cpp-output
		 assembler  assembler-with-cpp
		 ada
		 f77  f77-cpp-input  ratfor
		 java
		 treelang

     -x none
	 Turn off any specification of a language, so that subse-
	 quent files are handled according to their file name
	 suffixes (as they are if -x has not been used at all).

     -pass-exit-codes
	 Normally the gcc program will exit with the code of 1 if
	 any phase of the compiler returns a non-success return
	 code.	If you specify -pass-exit-codes, the gcc program
	 will instead return with numerically highest error pro-
	 duced by any phase that returned an error indication.

     If you only want some of the stages of compilation, you can
     use -x (or filename suffixes) to tell gcc where to start,
     and one of the options -c, -S, or -E to say where gcc is to
     stop.  Note that some combinations (for example, -x cpp-
     output -E) instruct gcc to do nothing at all.

     -c	 Compile or assemble the source files, but do not link.
	 The linking stage simply is not done.	The ultimate out-
	 put is in the form of an object file for each source
	 file.

	 By default, the object file name for a source file is
	 made by replacing the suffix .c, .i, .s, etc., with .o.

	 Unrecognized input files, not requiring compilation or
	 assembly, are ignored.

     -S	 Stop after the stage of compilation proper; do not
	 assemble.  The output is in the form of an assembler
	 code file for each non-assembler input file specified.

gcc-3.4.6		   2011-08-18			       12

GCC(1)			       GNU			   GCC(1)

	 By default, the assembler file name for a source file is
	 made by replacing the suffix .c, .i, etc., with .s.

	 Input files that don't require compilation are ignored.

     -E	 Stop after the preprocessing stage; do not run the com-
	 piler proper.	The output is in the form of preprocessed
	 source code, which is sent to the standard output.

	 Input files which don't require preprocessing are
	 ignored.

     -o file
	 Place output in file file.  This applies regardless to
	 whatever sort of output is being produced, whether it be
	 an executable file, an object file, an assembler file or
	 preprocessed C code.

	 If you specify -o when compiling more than one input
	 file, or you are producing an executable file as output,
	 all the source files on the command line will be com-
	 piled at once.

	 If -o is not specified, the default is to put an execut-
	 able file in a.out, the object file for source.suffix in
	 source.o, its assembler file in source.s, and all
	 preprocessed C source on standard output.

     -v	 Print (on standard error output) the commands executed
	 to run the stages of compilation.  Also print the ver-
	 sion number of the compiler driver program and of the
	 preprocessor and the compiler proper.

     -###
	 Like -v except the commands are not executed and all
	 command arguments are quoted.	This is useful for shell
	 scripts to capture the driver-generated command lines.

     -pipe
	 Use pipes rather than temporary files for communication
	 between the various stages of compilation.  This fails
	 to work on some systems where the assembler is unable to
	 read from a pipe; but the GNU assembler has no trouble.

     --help
	 Print (on the standard output) a description of the com-
	 mand line options understood by gcc.  If the -v option
	 is also specified then --help will also be passed on to
	 the various processes invoked by gcc, so that they can
	 display the command line options they accept.	If the
	 -Wextra option is also specified then command line
	 options which have no documentation associated with them

gcc-3.4.6		   2011-08-18			       13

GCC(1)			       GNU			   GCC(1)

	 will also be displayed.

     --target-help
	 Print (on the standard output) a description of target
	 specific command line options for each tool.

     --version
	 Display the version number and copyrights of the invoked
	 GCC.

     Compiling C++ Programs

     C++ source files conventionally use one of the suffixes .C,
     .cc, .cpp, .CPP, .c++, .cp, or .cxx; C++ header files often
     use .hh or .H; and preprocessed C++ files use the suffix
     .ii.  GCC recognizes files with these names and compiles
     them as C++ programs even if you call the compiler the same
     way as for compiling C programs (usually with the name gcc).

     However, C++ programs often require class libraries as well
     as a compiler that understands the C++ language---and under
     some circumstances, you might want to compile programs or
     header files from standard input, or otherwise without a
     suffix that flags them as C++ programs.  You might also like
     to precompile a C header file with a .h extension to be used
     in C++ compilations.  g++ is a program that calls GCC with
     the default language set to C++, and automatically specifies
     linking against the C++ library.  On many systems, g++ is
     also installed with the name c++.

     When you compile C++ programs, you may specify many of the
     same command-line options that you use for compiling pro-
     grams in any language; or command-line options meaningful
     for C and related languages; or options that are meaningful
     only for C++ programs.

     Options Controlling C Dialect

     The following options control the dialect of C (or languages
     derived from C, such as C++ and Objective-C) that the com-
     piler accepts:

     -ansi
	 In C mode, support all ISO C90 programs.  In C++ mode,
	 remove GNU extensions that conflict with ISO C++.

	 This turns off certain features of GCC that are incompa-
	 tible with ISO C90 (when compiling C code), or of stan-
	 dard C++ (when compiling C++ code), such as the "asm"
	 and "typeof" keywords, and predefined macros such as
	 "unix" and "vax" that identify the type of system you
	 are using.  It also enables the undesirable and rarely

gcc-3.4.6		   2011-08-18			       14

GCC(1)			       GNU			   GCC(1)

	 used ISO trigraph feature.  For the C compiler, it dis-
	 ables recognition of C++ style // comments as well as
	 the "inline" keyword.

	 The alternate keywords "__asm__", "__extension__",
	 "__inline__" and "__typeof__" continue to work despite
	 -ansi.	 You would not want to use them in an ISO C pro-
	 gram, of course, but it is useful to put them in header
	 files that might be included in compilations done with
	 -ansi.	 Alternate predefined macros such as "__unix__"
	 and "__vax__" are also available, with or without -ansi.

	 The -ansi option does not cause non-ISO programs to be
	 rejected gratuitously.	 For that, -pedantic is required
	 in addition to -ansi.

	 The macro "__STRICT_ANSI__" is predefined when the -ansi
	 option is used.  Some header files may notice this macro
	 and refrain from declaring certain functions or defining
	 certain macros that the ISO standard doesn't call for;
	 this is to avoid interfering with any programs that
	 might use these names for other things.

	 Functions which would normally be built in but do not
	 have semantics defined by ISO C (such as "alloca" and
	 "ffs") are not built-in functions with -ansi is used.

     -std=
	 Determine the language standard.  This option is
	 currently only supported when compiling C or C++.  A
	 value for this option must be provided; possible values
	 are

	 c89
	 iso9899:1990
	     ISO C90 (same as -ansi).

	 iso9899:199409
	     ISO C90 as modified in amendment 1.

	 c99
	 c9x
	 iso9899:1999
	 iso9899:199x
	     ISO C99.  Note that this standard is not yet fully
	     supported; see
	     <http://gcc.gnu.org/gcc-3.4/c99status.html> for more
	     information.  The names c9x and iso9899:199x are
	     deprecated.

	 gnu89
	     Default, ISO C90 plus GNU extensions (including some

gcc-3.4.6		   2011-08-18			       15

GCC(1)			       GNU			   GCC(1)

	     C99 features).

	 gnu99
	 gnu9x
	     ISO C99 plus GNU extensions.  When ISO C99 is fully
	     implemented in GCC, this will become the default.
	     The name gnu9x is deprecated.

	 c++98
	     The 1998 ISO C++ standard plus amendments.

	 gnu++98
	     The same as -std=c++98 plus GNU extensions.  This is
	     the default for C++ code.

	 Even when this option is not specified, you can still
	 use some of the features of newer standards in so far as
	 they do not conflict with previous C standards.  For
	 example, you may use "__restrict__" even when -std=c99
	 is not specified.

	 The -std options specifying some version of ISO C have
	 the same effects as -ansi, except that features that
	 were not in ISO C90 but are in the specified version
	 (for example, // comments and the "inline" keyword in
	 ISO C99) are not disabled.

     -aux-info filename
	 Output to the given filename prototyped declarations for
	 all functions declared and/or defined in a translation
	 unit, including those in header files.	 This option is
	 silently ignored in any language other than C.

	 Besides declarations, the file indicates, in comments,
	 the origin of each declaration (source file and line),
	 whether the declaration was implicit, prototyped or
	 unprototyped (I, N for new or O for old, respectively,
	 in the first character after the line number and the
	 colon), and whether it came from a declaration or a
	 definition (C or F, respectively, in the following char-
	 acter).  In the case of function definitions, a
	 K&R-style list of arguments followed by their declara-
	 tions is also provided, inside comments, after the
	 declaration.

     -fno-asm
	 Do not recognize "asm", "inline" or "typeof" as a key-
	 word, so that code can use these words as identifiers.
	 You can use the keywords "__asm__", "__inline__" and
	 "__typeof__" instead.	-ansi implies -fno-asm.

	 In C++, this switch only affects the "typeof" keyword,

gcc-3.4.6		   2011-08-18			       16

GCC(1)			       GNU			   GCC(1)

	 since "asm" and "inline" are standard keywords.  You may
	 want to use the -fno-gnu-keywords flag instead, which
	 has the same effect.  In C99 mode (-std=c99 or
	 -std=gnu99), this switch only affects the "asm" and
	 "typeof" keywords, since "inline" is a standard keyword
	 in ISO C99.

     -fno-builtin
     -fno-builtin-function
	 Don't recognize built-in functions that do not begin
	 with __builtin_ as prefix.

	 GCC normally generates special code to handle certain
	 built-in functions more efficiently; for instance, calls
	 to "alloca" may become single instructions that adjust
	 the stack directly, and calls to "memcpy" may become
	 inline copy loops.  The resulting code is often both
	 smaller 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.

	 With the -fno-builtin-function option only the built-in
	 function function is disabled.	 function must not begin
	 with __builtin_.  If a function is named this is not
	 built-in in this version of GCC, this option is ignored.
	 There is no corresponding -fbuiltin-function option; if
	 you wish to enable built-in functions selectively when
	 using -fno-builtin or -ffreestanding, you may define
	 macros such as:

		 #define abs(n)		 __builtin_abs ((n))
		 #define strcpy(d, s)	 __builtin_strcpy ((d), (s))

     -fhosted
	 Assert that compilation takes place in a hosted environ-
	 ment.	This implies -fbuiltin.	 A hosted environment is
	 one in which the entire standard library is available,
	 and in which "main" has a return type of "int".  Exam-
	 ples are nearly everything except a kernel. This is
	 equivalent to -fno-freestanding.

     -ffreestanding
	 Assert that compilation takes place in a freestanding
	 environment.  This implies -fno-builtin.  A freestanding
	 environment is one in which the standard library may not
	 exist, and program startup may not necessarily be at
	 "main".  The most obvious example is an OS kernel. This
	 is equivalent to -fno-hosted.

     -fms-extensions
	 Accept some non-standard constructs used in Microsoft

gcc-3.4.6		   2011-08-18			       17

GCC(1)			       GNU			   GCC(1)

	 header files.

     -trigraphs
	 Support ISO C trigraphs.  The -ansi option (and -std
	 options for strict ISO C conformance) implies -tri-
	 graphs.

     -no-integrated-cpp
	 Performs a compilation in two passes: preprocessing and
	 compiling.  This option allows a user supplied "cc1",
	 "cc1plus", or "cc1obj" via the -B option. The user sup-
	 plied compilation step can then add in an additional
	 preprocessing step after normal preprocessing but before
	 compiling. The default is to use the integrated cpp
	 (internal cpp)

	 The semantics of this option will change if "cc1",
	 "cc1plus", and "cc1obj" are merged.

     -traditional
     -traditional-cpp
	 Formerly, these options caused GCC to attempt to emulate
	 a pre-standard C compiler.  They are now only supported
	 with the -E switch. The preprocessor continues to sup-
	 port a pre-standard mode.  See the GNU CPP manual for
	 details.

     -fcond-mismatch
	 Allow conditional expressions with mismatched types in
	 the second and third arguments.  The value of such an
	 expression is void.  This option is not supported for
	 C++.

     -funsigned-char
	 Let the type "char" be unsigned, like "unsigned char".

	 Each kind of machine has a default for what "char"
	 should be.  It is either like "unsigned char" by default
	 or like "signed char" by default.

	 Ideally, a portable program should always use "signed
	 char" or "unsigned char" when it depends on the signed-
	 ness of an object. But many programs have been written
	 to use plain "char" and expect it to be signed, or
	 expect it to be unsigned, depending on the machines they
	 were written for.  This option, and its inverse, let you
	 make such a program work with the opposite default.

	 The type "char" is always a distinct type from each of
	 "signed char" or "unsigned char", even though its
	 behavior is always just like one of those two.

gcc-3.4.6		   2011-08-18			       18

GCC(1)			       GNU			   GCC(1)

     -fsigned-char
	 Let the type "char" be signed, like "signed char".

	 Note that this is equivalent to -fno-unsigned-char,
	 which is the negative form of -funsigned-char.	 Like-
	 wise, the option -fno-signed-char is equivalent to
	 -funsigned-char.

     -fsigned-bitfields
     -funsigned-bitfields
     -fno-signed-bitfields
     -fno-unsigned-bitfields
	 These options control whether a bit-field is signed or
	 unsigned, when the declaration does not use either
	 "signed" or "unsigned".  By default, such a bit-field is
	 signed, because this is consistent: the basic integer
	 types such as "int" are signed types.

     -fwritable-strings
	 Store string constants in the writable data segment and
	 don't uniquize them.  This is for compatibility with old
	 programs which assume they can write into string con-
	 stants.

	 Writing into string constants is a very bad idea; ``con-
	 stants'' should be constant.

	 This option is deprecated.

     Options Controlling C++ Dialect

     This section describes the command-line options that are
     only meaningful for 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
     "firstClass.C" like this:

	     g++ -g -frepo -O -c firstClass.C

     In this example, only -frepo is an option meant only for C++
     programs; you can use the other options with any language
     supported by GCC.

     Here is a list of options that are only for compiling C++
     programs:

     -fabi-version=n
	 Use version n of the C++ ABI.	Version 2 is the version
	 of the C++ ABI that first appeared in G++ 3.4.	 Version
	 1 is the version of the C++ ABI that first appeared in
	 G++ 3.2.  Version 0 will always be the version that con-
	 forms most closely to the C++ ABI specification.

gcc-3.4.6		   2011-08-18			       19

GCC(1)			       GNU			   GCC(1)

	 Therefore, the ABI obtained using version 0 will change
	 as ABI bugs are fixed.

	 The default is version 2.

     -fno-access-control
	 Turn off all access checking.	This switch is mainly
	 useful for working around bugs in the access control
	 code.

     -fcheck-new
	 Check that the pointer returned by "operator new" is
	 non-null before attempting to modify the storage allo-
	 cated.	 This check is normally unnecessary because the
	 C++ standard specifies that "operator new" will only
	 return 0 if it is declared throw(), in which case the
	 compiler will always check the return value even without
	 this option.  In all other cases, when "operator new"
	 has a non-empty exception specification, memory exhaus-
	 tion is signalled by throwing "std::bad_alloc".  See
	 also new (nothrow).

     -fconserve-space
	 Put uninitialized or runtime-initialized global vari-
	 ables into the common segment, as C does.  This saves
	 space in the executable at the cost of not diagnosing
	 duplicate definitions.	 If you compile with this flag
	 and your program mysteriously crashes after "main()" has
	 completed, you may have an object that is being des-
	 troyed twice because 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.

     -fno-const-strings
	 Give string constants type "char *" instead of type
	 "const char *".  By default, G++ uses type "const char
	 *" as required by the standard.  Even if you use
	 -fno-const-strings, you cannot actually modify the value
	 of a string constant, unless you also use
	 -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
	 "const char *".

     -fno-elide-constructors
	 The C++ standard allows an implementation to omit creat-
	 ing a temporary which is only used to initialize another
	 object of the same type. Specifying this option disables

gcc-3.4.6		   2011-08-18			       20

GCC(1)			       GNU			   GCC(1)

	 that optimization, and forces G++ to call the copy con-
	 structor in all cases.

     -fno-enforce-eh-specs
	 Don't check for violation of exception specifications at
	 runtime.  This option violates the C++ standard, but may
	 be useful for reducing code size in production builds,
	 much like defining NDEBUG.  The compiler will still
	 optimize based on the exception specifications.

     -ffor-scope
     -fno-for-scope
	 If -ffor-scope is specified, the scope of variables
	 declared in a for-init-statement is limited to the for
	 loop itself, as specified by the C++ standard. If
	 -fno-for-scope is specified, the scope of variables
	 declared in a for-init-statement extends to the end of
	 the enclosing scope, as was the case in old versions of
	 G++, and other (traditional) implementations of C++.

	 The default if neither flag is given to follow the stan-
	 dard, but to allow and give a warning for old-style code
	 that would otherwise be invalid, or have different
	 behavior.

     -fno-gnu-keywords
	 Do not recognize "typeof" as a keyword, so that code can
	 use this word as an identifier.  You can use the keyword
	 "__typeof__" instead. -ansi implies -fno-gnu-keywords.

     -fno-implicit-templates
	 Never emit code for non-inline templates which are
	 instantiated implicitly (i.e. by use); only emit code
	 for explicit instantiations.

     -fno-implicit-inline-templates
	 Don't emit code for implicit instantiations of inline
	 templates, either. The default is to handle inlines dif-
	 ferently so that compiles with and without optimization
	 will need the same set of explicit instantiations.

     -fno-implement-inlines
	 To save space, do not emit out-of-line copies of inline
	 functions controlled by #pragma implementation.  This
	 will cause linker errors if these functions are not
	 inlined everywhere they are called.

     -fms-extensions
	 Disable pedantic warnings about constructs used in MFC,
	 such as implicit int and getting a pointer to member
	 function via non-standard syntax.

gcc-3.4.6		   2011-08-18			       21

GCC(1)			       GNU			   GCC(1)

     -fno-nonansi-builtins
	 Disable built-in declarations of functions that are not
	 mandated by ANSI/ISO C.  These include "ffs", "alloca",
	 "_exit", "index", "bzero", "conjf", and other related
	 functions.

     -fno-operator-names
	 Do not treat the operator name keywords "and", "bitand",
	 "bitor", "compl", "not", "or" and "xor" as synonyms as
	 keywords.

     -fno-optional-diags
	 Disable diagnostics that the standard says a compiler
	 does not need to issue.  Currently, the only such diag-
	 nostic issued by G++ is the one for a name having multi-
	 ple meanings within a class.

     -fpermissive
	 Downgrade some diagnostics about nonconformant code from
	 errors to warnings.  Thus, using -fpermissive will allow
	 some nonconforming code to compile.

     -frepo
	 Enable automatic template instantiation at link time.
	 This option also implies -fno-implicit-templates.

     -fno-rtti
	 Disable generation of information about every class with
	 virtual functions for use by the C++ runtime type iden-
	 tification features (dynamic_cast and typeid).	 If you
	 don't use those parts 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.

     -fstats
	 Emit statistics about front-end processing at the end of
	 the compilation. This information is generally only use-
	 ful to the G++ development team.

     -ftemplate-depth-n
	 Set the maximum instantiation depth for template classes
	 to n. A limit on the template instantiation depth is
	 needed to detect endless recursions during template
	 class instantiation.  ANSI/ISO C++ conforming programs
	 must not rely on a maximum depth greater than 17.

     -fuse-cxa-atexit
	 Register destructors for objects with static storage
	 duration with the "__cxa_atexit" function rather than
	 the "atexit" function. This option is required for fully
	 standards-compliant handling of static destructors, but

gcc-3.4.6		   2011-08-18			       22

GCC(1)			       GNU			   GCC(1)

	 will only work if your C library supports
	 "__cxa_atexit".

     -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 test-
	 ing, 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++.

     -nostdinc++
	 Do not search for header files in the standard direc-
	 tories specific to C++, but do still search the other
	 standard directories.	(This option is used when build-
	 ing the C++ library.)

     In addition, these optimization, warning, and code genera-
     tion options have meanings only for C++ programs:

     -fno-default-inline
	 Do not assume inline for functions defined inside a
	 class scope.
	   Note that these functions will have linkage like
	 inline functions; they just won't be inlined by default.

     -Wabi (C++ only)
	 Warn when G++ generates code that is probably not compa-
	 tible with the vendor-neutral C++ ABI.	 Although an
	 effort has been made to warn about all such cases, there
	 are probably some cases that are not warned about, even
	 though G++ is generating incompatible code.  There may
	 also be cases where warnings are emitted even though the
	 code that is generated will be compatible.

	 You should rewrite your code to avoid these warnings if
	 you are concerned about the fact that code generated by
	 G++ may not be binary compatible with code generated by
	 other compilers.

	 The known incompatibilities at this point include:

	 *   Incorrect handling of tail-padding for bit-fields.
	     G++ may attempt to pack data into the same byte as a
	     base class.  For example:

		     struct A { virtual void f(); int f1 : 1; };
		     struct B : public A { int f2 : 1; };

	     In this case, G++ will place "B::f2" into the same
	     byte as"A::f1"; other compilers will not.	You can
	     avoid this problem by explicitly padding "A" so that

gcc-3.4.6		   2011-08-18			       23

GCC(1)			       GNU			   GCC(1)

	     its size is a multiple of the byte size on your
	     platform; that will cause G++ and other compilers to
	     layout "B" identically.

	 *   Incorrect handling of tail-padding for virtual
	     bases.  G++ does not use tail padding when laying
	     out virtual bases.	 For example:

		     struct A { virtual void f(); char c1; };
		     struct B { B(); char c2; };
		     struct C : public A, public virtual B {};

	     In this case, G++ will not place "B" into the tail-
	     padding for "A"; other compilers will.  You can
	     avoid this problem by explicitly padding "A" so that
	     its size is a multiple of its alignment (ignoring
	     virtual base classes); that will cause G++ and other
	     compilers to layout "C" identically.

	 *   Incorrect handling of bit-fields with declared
	     widths greater than that of their underlying types,
	     when the bit-fields appear in a union.  For example:

		     union U { int i : 4096; };

	     Assuming that an "int" does not have 4096 bits, G++
	     will make the union too small by the number of bits
	     in an "int".

	 *   Empty classes can be placed at incorrect offsets.
	     For example:

		     struct A {};

		     struct B {
		       A a;
		       virtual void f ();
		     };

		     struct C : public B, public A {};

	     G++ will place the "A" base class of "C" at a
	     nonzero offset; it should be placed at offset zero.
	     G++ mistakenly believes that the "A" data member of
	     "B" is already at offset zero.

	 *   Names of template functions whose types involve
	     "typename" or template template parameters can be
	     mangled incorrectly.

		     template <typename Q>
		     void f(typename Q::X) {}

gcc-3.4.6		   2011-08-18			       24

GCC(1)			       GNU			   GCC(1)

		     template <template <typename> class Q>
		     void f(typename Q<int>::X) {}

	     Instantiations of these templates may be mangled
	     incorrectly.

     -Wctor-dtor-privacy (C++ only)
	 Warn when a class seems unusable because all the con-
	 structors or destructors in that class are private, and
	 it has neither friends nor public static member func-
	 tions.

     -Wnon-virtual-dtor (C++ only)
	 Warn when a class appears to be polymorphic, thereby
	 requiring a virtual destructor, yet it declares a non-
	 virtual one. This warning is enabled by -Wall.

     -Wreorder (C++ only)
	 Warn when the order of member initializers given in the
	 code does not match the order in which they must be exe-
	 cuted.	 For instance:

		 struct A {
		   int i;
		   int j;
		   A(): j (0), i (1) { }
		 };

	 The compiler will rearrange the member initializers for
	 i and j to match the declaration order of the members,
	 emitting a warning to that effect.  This warning is
	 enabled by -Wall.

     The following -W... options are not affected by -Wall.

     -Weffc++ (C++ only)
	 Warn about violations of the following style guidelines
	 from Scott Meyers' Effective C++ book:

	 *   Item 11:  Define a copy constructor and an assign-
	     ment operator for classes with dynamically allocated
	     memory.

	 *   Item 12:  Prefer initialization to assignment in
	     constructors.

	 *   Item 14:  Make destructors virtual in base classes.

	 *   Item 15:  Have "operator=" return a reference to
	     *this.

	 *   Item 23:  Don't try to return a reference when you

gcc-3.4.6		   2011-08-18			       25

GCC(1)			       GNU			   GCC(1)

	     must return an object.

	 Also warn about violations of the following style guide-
	 lines from Scott Meyers' More Effective C++ book:

	 *   Item 6:  Distinguish between prefix and postfix
	     forms of increment and decrement operators.

	 *   Item 7:  Never overload "&&", "||", or ",".

	 When selecting this option, be aware that the standard
	 library headers do not obey all of these guidelines; use
	 grep -v to filter out those warnings.

     -Wno-deprecated (C++ only)
	 Do not warn about usage of deprecated features.

     -Wno-non-template-friend (C++ only)
	 Disable warnings when non-templatized friend functions
	 are declared within a template.  Since the advent of
	 explicit template specification support in G++, if the
	 name of the friend is an unqualified-id (i.e., friend
	 foo(int)), the C++ language specification demands that
	 the friend declare or define an ordinary, nontemplate
	 function.  (Section 14.5.3).  Before G++ implemented
	 explicit specification, unqualified-ids could be inter-
	 preted as a particular specialization of a templatized
	 function.  Because this non-conforming behavior is no
	 longer the default behavior for G++,
	 -Wnon-template-friend allows the compiler to check
	 existing code for potential trouble spots and is on by
	 default. This new compiler behavior can be turned off
	 with -Wno-non-template-friend which keeps the conformant
	 compiler code but disables the helpful warning.

     -Wold-style-cast (C++ only)
	 Warn if an old-style (C-style) cast to a non-void type
	 is used within a C++ program.	The new-style casts
	 (static_cast, reinterpret_cast, and const_cast) are less
	 vulnerable to unintended effects and much easier to
	 search for.

     -Woverloaded-virtual (C++ only)
	 Warn when a function declaration hides virtual functions
	 from a base class.  For example, in:

		 struct A {
		   virtual void f();
		 };

gcc-3.4.6		   2011-08-18			       26

GCC(1)			       GNU			   GCC(1)

		 struct B: public A {
		   void f(int);
		 };

	 the "A" class version of "f" is hidden in "B", and code
	 like:

		 B* b;
		 b->f();

	 will fail to compile.

     -Wno-pmf-conversions (C++ only)
	 Disable the diagnostic for converting a bound pointer to
	 member function to a plain pointer.

     -Wsign-promo (C++ only)
	 Warn when overload resolution chooses a promotion from
	 unsigned or enumerated type to a signed type, over a
	 conversion to an unsigned type of the same size.  Previ-
	 ous versions of G++ would try to preserve unsignedness,
	 but the standard mandates the current behavior.

		 struct A {
		   operator int ();
		   A& operator = (int);
		 };

		 main ()
		 {
		   A a,b;
		   a = b;
		 }

	 In this example, G++ will synthesize a default A& opera-
	 tor = (const A&);, while cfront will use the user-
	 defined operator =.

     Options Controlling Objective-C Dialect

     (NOTE: This manual does not describe the Objective-C
     language itself.  See <http://gcc.gnu.org/readings.html> for
     references.)

     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 "some_class.m" like this:

	     gcc -g -fgnu-runtime -O -c some_class.m

gcc-3.4.6		   2011-08-18			       27

GCC(1)			       GNU			   GCC(1)

     In this example, -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 only for compiling
     Objective-C programs:

     -fconstant-string-class=class-name
	 Use class-name as the name of the class to instantiate
	 for each literal string specified with the syntax
	 "@"..."".  The default class name is "NXConstantString"
	 if the GNU runtime is being used, and "NSConstantString"
	 if the NeXT runtime is being used (see below).	 The
	 -fconstant-cfstrings option, if also present, will over-
	 ride the -fconstant-string-class setting and cause
	 "@"..."" literals to be laid out as constant CoreFounda-
	 tion strings.

     -fgnu-runtime
	 Generate object code compatible with the standard GNU
	 Objective-C runtime.  This is the default for most types
	 of systems.

     -fnext-runtime
	 Generate output compatible with the NeXT runtime.  This
	 is the default for NeXT-based systems, including Darwin
	 and Mac OS X.	The macro "__NEXT_RUNTIME__" is prede-
	 fined if (and only if) this option is used.

     -fno-nil-receivers
	 Assume that all Objective-C message dispatches (e.g.,
	 "[receiver message:arg]") in this translation unit
	 ensure that the receiver is not "nil".	 This allows for
	 more efficient entry points in the runtime to be used.
	 Currently, this option is only available in conjunction
	 with the NeXT runtime on Mac OS X 10.3 and later.

     -fobjc-exceptions
	 Enable syntactic support for structured exception han-
	 dling in Objective-C, similar to what is offered by C++
	 and Java.  Currently, this option is only available in
	 conjunction with the NeXT runtime on Mac OS X 10.3 and
	 later.

gcc-3.4.6		   2011-08-18			       28

GCC(1)			       GNU			   GCC(1)

		   @try {
		     ...
			@throw expr;
		     ...
		   }
		   @catch (AnObjCClass *exc) {
		     ...
		       @throw expr;
		     ...
		       @throw;
		     ...
		   }
		   @catch (AnotherClass *exc) {
		     ...
		   }
		   @catch (id allOthers) {
		     ...
		   }
		   @finally {
		     ...
		       @throw expr;
		     ...
		   }

	 The @throw statement may appear anywhere in an
	 Objective-C or Objective-C++ program; when used inside
	 of a @catch block, the @throw may appear without an
	 argument (as shown above), in which case the object
	 caught by the @catch will be rethrown.

	 Note that only (pointers to) Objective-C objects may be
	 thrown and caught using this scheme.  When an object is
	 thrown, it will be caught by the nearest @catch clause
	 capable of handling objects of that type, analogously to
	 how "catch" blocks work in C++ and Java.  A "@catch(id
	 ...)" clause (as shown above) may also be provided to
	 catch any and all Objective-C exceptions not caught by
	 previous @catch clauses (if any).

	 The @finally clause, if present, will be executed upon
	 exit from the immediately preceding "@try ... @catch"
	 section.  This will happen regardless of whether any
	 exceptions are thrown, caught or rethrown inside the
	 "@try ... @catch" section, analogously to the behavior
	 of the "finally" clause in Java.

	 There are several caveats to using the new exception
	 mechanism:

	 *   Although currently designed to be binary compatible
	     with "NS_HANDLER"-style idioms provided by the
	     "NSException" class, the new exceptions can only be

gcc-3.4.6		   2011-08-18			       29

GCC(1)			       GNU			   GCC(1)

	     used on Mac OS X 10.3 (Panther) and later systems,
	     due to additional functionality needed in the (NeXT)
	     Objective-C runtime.

	 *   As mentioned above, the new exceptions do not sup-
	     port handling types other than Objective-C objects.
	     Furthermore, when used from Objective-C++, the
	     Objective-C exception model does not interoperate
	     with C++ exceptions at this time.	This means you
	     cannot @throw an exception from Objective-C and
	     "catch" it in C++, or vice versa (i.e., "throw ...
	     @catch").

	 The -fobjc-exceptions switch also enables the use of
	 synchronization blocks for thread-safe execution:

		   @synchronized (ObjCClass *guard) {
		     ...
		   }

	 Upon entering the @synchronized block, a thread of exe-
	 cution shall first check whether a lock has been placed
	 on the corresponding "guard" object by another thread.
	 If it has, the current thread shall wait until the other
	 thread relinquishes its lock.	Once "guard" becomes
	 available, the current thread will place its own lock on
	 it, execute the code contained in the @synchronized
	 block, and finally relinquish the lock (thereby making
	 "guard" available to other threads).

	 Unlike Java, Objective-C does not allow for entire
	 methods to be marked @synchronized.  Note that throwing
	 exceptions out of @synchronized blocks is allowed, and
	 will cause the guarding object to be unlocked properly.

     -freplace-objc-classes
	 Emit a special marker instructing ld(1) not to stati-
	 cally link in the resulting object file, and allow
	 dyld(1) to load it in at run time instead.  This is used
	 in conjunction with the Fix-and-Continue debugging mode,
	 where the object file in question may be recompiled and
	 dynamically reloaded in the course of program execution,
	 without the need to restart the program itself.
	 Currently, Fix-and-Continue functionality is only avail-
	 able in conjunction with the NeXT runtime on Mac OS X
	 10.3 and later.

     -fzero-link
	 When compiling for the NeXT runtime, the compiler ordi-
	 narily replaces calls to "objc_getClass("...")" (when
	 the name of the class is known at compile time) with
	 static class references that get initialized at load

gcc-3.4.6		   2011-08-18			       30

GCC(1)			       GNU			   GCC(1)

	 time, which improves run-time performance.  Specifying
	 the -fzero-link flag suppresses this behavior and causes
	 calls to "objc_getClass("...")" to be retained.  This is
	 useful in Zero-Link debugging mode, since it allows for
	 individual class implementations to be modified during
	 program execution.

     -gen-decls
	 Dump interface declarations for all classes seen in the
	 source file to a file named sourcename.decl.

     -Wno-protocol
	 If a class is declared to implement a protocol, a warn-
	 ing is issued for every method in the protocol that is
	 not implemented by the class.	The default behavior is
	 to issue a warning for every method not explicitly
	 implemented in the class, even if a method implementa-
	 tion is inherited from the superclass.	 If you use the
	 "-Wno-protocol" option, then methods inherited from the
	 superclass are considered to be implemented, and no
	 warning is issued for them.

     -Wselector
	 Warn if multiple methods of different types for the same
	 selector are found during compilation.	 The check is
	 performed on the list of methods in the final stage of
	 compilation.  Additionally, a check is performed for
	 each selector appearing in a "@selector(...)" expres-
	 sion, and a corresponding method for that selector has
	 been found during compilation.	 Because these checks
	 scan the method table only at the end of compilation,
	 these warnings are not produced if the final stage of
	 compilation is not reached, for example because an error
	 is found during compilation, or because the
	 "-fsyntax-only" option is being used.

     -Wundeclared-selector
	 Warn if a "@selector(...)" expression referring to an
	 undeclared selector is found.	A selector is considered
	 undeclared if no method with that name has been declared
	 before the "@selector(...)" expression, either expli-
	 citly in an @interface or @protocol declaration, or
	 implicitly in an @implementation section.  This option
	 always performs its checks as soon as a "@selector(...)"
	 expression is found, while "-Wselector" only performs
	 its checks in the final stage of compilation.	This also
	 enforces the coding style convention that methods and
	 selectors must be declared before being used.

     -print-objc-runtime-info
	 Generate C header describing the largest structure that
	 is passed by value, if any.

gcc-3.4.6		   2011-08-18			       31

GCC(1)			       GNU			   GCC(1)

     Options to Control Diagnostic Messages Formatting

     Traditionally, diagnostic messages have been formatted
     irrespective of the output device's aspect (e.g. its width,
     ...).  The options described 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 dig-
     est them correctly.

     -fmessage-length=n
	 Try to format error messages so that they fit on lines
	 of about n characters.	 The default is 72 characters for
	 g++ and 0 for the rest of the front ends supported by
	 GCC.  If n is zero, then no line-wrapping will be done;
	 each error message will appear on a single line.

     -fdiagnostics-show-location=once
	 Only meaningful in line-wrapping mode.	 Instructs the
	 diagnostic messages reporter to emit once source loca-
	 tion 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 pre-
	 fix) again, over and over, in subsequent continuation
	 lines.	 This is the default behavior.

     -fdiagnostics-show-location=every-line
	 Only meaningful in line-wrapping mode.	 Instructs the
	 diagnostic messages reporter to emit the same source
	 location information (as prefix) for physical lines that
	 result from the process of breaking a message which is
	 too long to fit on a single line.

     Options to Request or Suppress Warnings

     Warnings are diagnostic messages that report constructions
     which are not inherently erroneous but which are risky or
     suggest there may have been an error.

     You can request many specific warnings with options begin-
     ning -W, for example -Wimplicit to request warnings on
     implicit declarations.  Each of these specific warning
     options also has a negative form beginning -Wno- to turn off
     warnings; for example, -Wno-implicit.  This manual lists
     only one of the two forms, whichever is not the default.

     The following options control the amount and kinds of warn-
     ings produced by GCC; for further, language-specific options
     also refer to C++ Dialect Options and Objective-C Dialect
     Options.

gcc-3.4.6		   2011-08-18			       32

GCC(1)			       GNU			   GCC(1)

     -fsyntax-only
	 Check the code for syntax errors, but don't do anything
	 beyond that.

     -pedantic
	 Issue all the warnings demanded by strict ISO C and ISO
	 C++; reject all programs that use forbidden extensions,
	 and some other programs that do not follow ISO C and ISO
	 C++.  For ISO C, follows the version of the ISO C stan-
	 dard specified by any -std option used.

	 Valid ISO C and ISO C++ programs should compile properly
	 with or without this option (though a rare few will
	 require -ansi or a -std option specifying the required
	 version of ISO C).  However, without this option, cer-
	 tain GNU extensions and traditional C and C++ features
	 are supported as well.	 With this option, they are
	 rejected.

	 -pedantic does not cause warning messages for use of the
	 alternate keywords whose names begin and end with __.
	 Pedantic warnings are also disabled in the expression
	 that follows "__extension__".	However, only system
	 header files should use these escape routes; application
	 programs should avoid them.

	 Some users try to use -pedantic to check programs for
	 strict ISO C conformance.  They soon find that it does
	 not do quite what they want: it finds some non-ISO prac-
	 tices, but not all---only those for which ISO C requires
	 a diagnostic, and some others for which diagnostics have
	 been added.

	 A feature to report any failure to conform to ISO C
	 might be useful in some instances, but would require
	 considerable additional work and would be quite dif-
	 ferent from -pedantic.	 We don't have plans to support
	 such a feature in the near future.

	 Where the standard specified with -std represents a GNU
	 extended dialect of C, such as gnu89 or gnu99, there is
	 a corresponding base standard, the version of ISO C on
	 which the GNU extended dialect is based.  Warnings from
	 -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.)

     -pedantic-errors
	 Like -pedantic, except that errors are produced rather

gcc-3.4.6		   2011-08-18			       33

GCC(1)			       GNU			   GCC(1)

	 than warnings.

     -w	 Inhibit all warning messages.

     -Wno-import
	 Inhibit warning messages about the use of #import.

     -Wchar-subscripts
	 Warn if an array subscript has type "char".  This is a
	 common cause of error, as programmers often forget that
	 this type is signed on some machines.

     -Wcomment
	 Warn whenever a comment-start sequence /* appears in a
	 /* comment, or whenever a Backslash-Newline appears in a
	 // comment.

     -Wformat
	 Check calls to "printf" and "scanf", etc., to make sure
	 that the arguments supplied have types appropriate to
	 the format string specified, and that the conversions
	 specified in the format string make sense.  This
	 includes standard functions, and others specified by
	 format attributes, in the "printf", "scanf", "strftime"
	 and "strfmon" (an X/Open extension, not in the C stan-
	 dard) families.

	 The formats are checked against the format features sup-
	 ported by GNU libc version 2.2.  These include all ISO
	 C90 and C99 features, as well as features from the Sin-
	 gle Unix Specification and some BSD and GNU extensions.
	 Other library implementations may not support all these
	 features; GCC does not support warning about features
	 that go beyond a particular library's limitations.  How-
	 ever, if -pedantic is used with -Wformat, warnings will
	 be given about format features not in the selected stan-
	 dard version (but not for "strfmon" formats, since those
	 are not in any version of the C standard).

	 Since -Wformat also checks for null format arguments for
	 several functions, -Wformat also implies -Wnonnull.

	 -Wformat is included in -Wall.	 For more control over
	 some aspects of format checking, the options
	 -Wformat-y2k, -Wno-format-extra-args,
	 -Wno-format-zero-length, -Wformat-nonliteral,
	 -Wformat-security, and -Wformat=2 are available, but are
	 not included in -Wall.

     -Wformat-y2k
	 If -Wformat is specified, also warn about "strftime"
	 formats which may yield only a two-digit year.

gcc-3.4.6		   2011-08-18			       34

GCC(1)			       GNU			   GCC(1)

     -Wno-format-extra-args
	 If -Wformat is specified, do not warn about excess argu-
	 ments to a "printf" or "scanf" format function.  The C
	 standard specifies that such arguments are ignored.

	 Where the unused arguments lie between used arguments
	 that are specified with $ operand number specifications,
	 normally warnings are still given, since the implementa-
	 tion could not know what type to pass to "va_arg" to
	 skip the unused arguments.  However, in the case of
	 "scanf" formats, this option will suppress the warning
	 if the unused arguments are all pointers, since the Sin-
	 gle Unix Specification says that such unused arguments
	 are allowed.

     -Wno-format-zero-length
	 If -Wformat is specified, do not warn about zero-length
	 formats. The C standard specifies that zero-length for-
	 mats are allowed.

     -Wformat-nonliteral
	 If -Wformat is specified, also warn if the format string
	 is not a string literal and so cannot be checked, unless
	 the format function takes its format arguments as a
	 "va_list".

     -Wformat-security
	 If -Wformat is specified, also warn about uses of format
	 functions that represent possible security problems.  At
	 present, this warns about calls to "printf" and "scanf"
	 functions where the format string is not a string
	 literal and there are no format arguments, as in "printf
	 (foo);".  This may be a security hole if the format
	 string came from untrusted input and contains %n.  (This
	 is currently a subset of what -Wformat-nonliteral warns
	 about, but in future warnings may be added to
	 -Wformat-security that are not included in
	 -Wformat-nonliteral.)

     -Wformat=2
	 Enable -Wformat plus format checks not included in
	 -Wformat.  Currently equivalent to -Wformat
	 -Wformat-nonliteral -Wformat-security -Wformat-y2k.

     -Wnonnull
	 Warn about passing a null pointer for arguments marked
	 as requiring a non-null value by the "nonnull" function
	 attribute.

	 -Wnonnull is included in -Wall and -Wformat.  It can be
	 disabled with the -Wno-nonnull option.

gcc-3.4.6		   2011-08-18			       35

GCC(1)			       GNU			   GCC(1)

     -Winit-self (C, C++, and Objective-C only)
	 Warn about uninitialized variables which are initialized
	 with themselves. Note this option can only be used with
	 the -Wuninitialized option, which in turn only works
	 with -O1 and above.

	 For example, GCC will warn about "i" being uninitialized
	 in the following snippet only when -Winit-self has been
	 specified:

		 int f()
		 {
		   int i = i;
		   return i;
		 }

     -Wimplicit-int
	 Warn when a declaration does not specify a type.

     -Wimplicit-function-declaration
     -Werror-implicit-function-declaration
	 Give a warning (or error) whenever a function is used
	 before being declared.

     -Wimplicit
	 Same as -Wimplicit-int and
	 -Wimplicit-function-declaration.

     -Wmain
	 Warn if the type of main is suspicious.  main should be
	 a function with external linkage, returning int, taking
	 either zero arguments, two, or three arguments of
	 appropriate types.

     -Wmissing-braces
	 Warn if an aggregate or union initializer is not fully
	 bracketed.  In the following example, the initializer
	 for a is not fully bracketed, but that for b is fully
	 bracketed.

		 int a[2][2] = { 0, 1, 2, 3 };
		 int b[2][2] = { { 0, 1 }, { 2, 3 } };

     -Wparentheses
	 Warn if parentheses are omitted in certain contexts,
	 such as when there is an assignment in a context where a
	 truth value is expected, or when operators are nested
	 whose precedence people often get confused about.

	 Also warn about constructions where there may be confu-
	 sion to which "if" statement an "else" branch belongs.
	 Here is an example of such a case:

gcc-3.4.6		   2011-08-18			       36

GCC(1)			       GNU			   GCC(1)

		 {
		   if (a)
		     if (b)
		       foo ();
		   else
		     bar ();
		 }

	 In C, every "else" branch belongs to the innermost pos-
	 sible "if" statement, which in this example is "if (b)".
	 This is often not what the programmer expected, as
	 illustrated in the above example by indentation the pro-
	 grammer chose.	 When there is the potential for this
	 confusion, GCC will issue a warning when this flag is
	 specified. To eliminate the warning, add explicit braces
	 around the innermost "if" statement so there is no way
	 the "else" could belong to the enclosing "if".	 The
	 resulting code would look like this:

		 {
		   if (a)
		     {
		       if (b)
			 foo ();
		       else
			 bar ();
		     }
		 }

     -Wsequence-point
	 Warn about code that may have undefined semantics
	 because of violations of sequence point rules in the C
	 standard.

	 The C standard defines the order in which expressions in
	 a C program are evaluated in terms of sequence points,
	 which represent a partial ordering between the execution
	 of parts of the program: those executed before the
	 sequence point, and those executed after it.  These
	 occur after the evaluation of a full expression (one
	 which is not part of a larger expression), after the
	 evaluation of the first operand of a "&&", "||", "? :"
	 or "," (comma) operator, before a function is called
	 (but after the evaluation of its arguments and the
	 expression denoting the called function), and in certain
	 other places. Other than as expressed by the sequence
	 point rules, the order of evaluation of subexpressions
	 of an expression is not specified.  All these rules
	 describe only a partial order rather than a total order,
	 since, for example, if two functions are called within
	 one expression with no sequence point between them, the
	 order in which the functions are called is not

gcc-3.4.6		   2011-08-18			       37

GCC(1)			       GNU			   GCC(1)

	 specified.  However, the standards committee have ruled
	 that function calls do not overlap.

	 It is not specified when between sequence points modifi-
	 cations to the values of objects take effect.	Programs
	 whose behavior depends on this have undefined behavior;
	 the C standard specifies that ``Between the previous and
	 next sequence point an object shall have its stored
	 value modified at most once by the evaluation of an
	 expression.  Furthermore, the prior value shall be read
	 only to determine the value to be stored.''.  If a pro-
	 gram breaks these rules, the results on any particular
	 implementation are entirely unpredictable.

	 Examples of code with undefined behavior are "a = a++;",
	 "a[n] = b[n++]" and "a[i++] = i;".  Some more compli-
	 cated cases are not diagnosed by this option, and it may
	 give an occasional false positive result, but in general
	 it has been found fairly effective at detecting this
	 sort of problem in programs.

	 The present implementation of this option only works for
	 C programs.  A future implementation may also work for
	 C++ programs.

	 The C standard is worded confusingly, therefore there is
	 some debate over the precise meaning of the sequence
	 point rules in subtle cases. Links to discussions of the
	 problem, including proposed formal definitions, may be
	 found on the GCC readings page, at
	 <http://gcc.gnu.org/readings.html>.

     -Wreturn-type
	 Warn whenever a function is defined with a return-type
	 that defaults to "int".  Also warn about any "return"
	 statement with no return-value in a function whose
	 return-type is not "void".

	 For C++, a function without return type always produces
	 a diagnostic message, even when -Wno-return-type is
	 specified.  The only exceptions are main and functions
	 defined in system headers.

     -Wswitch
	 Warn whenever a "switch" statement has an index of
	 enumerated type and lacks a "case" for one or more of
	 the named codes of that enumeration.  (The presence of a
	 "default" label prevents this warning.)  "case" labels
	 outside the enumeration range also provoke warnings when
	 this option is used.

     -Wswitch-default


gcc-3.4.6		   2011-08-18			       38

GCC(1)			       GNU			   GCC(1)

	 Warn whenever a "switch" statement does not have a
	 "default" case.

     -Wswitch-enum
	 Warn whenever a "switch" statement has an index of
	 enumerated type and lacks a "case" for one or more of
	 the named codes of that enumeration.  "case" labels out-
	 side the enumeration range also provoke warnings when
	 this option is used.

     -Wtrigraphs
	 Warn if any trigraphs are encountered that might change
	 the meaning of the program (trigraphs within comments
	 are not warned about).

     -Wunused-function
	 Warn whenever a static function is declared but not
	 defined or a non\-inline static function is unused.

     -Wunused-label
	 Warn whenever a label is declared but not used.

	 To suppress this warning use the unused attribute.

     -Wunused-parameter
	 Warn whenever a function parameter is unused aside from
	 its declaration.

	 To suppress this warning use the unused attribute.

     -Wunused-variable
	 Warn whenever a local variable or non-constant static
	 variable is unused aside from its declaration

	 To suppress this warning use the unused attribute.

     -Wunused-value
	 Warn whenever a statement computes a result that is
	 explicitly not used.

	 To suppress this warning cast the expression to void.

     -Wunused
	 All the above -Wunused options combined.

	 In order to get a warning about an unused function
	 parameter, you must either specify -Wextra -Wunused
	 (note that -Wall implies -Wunused), or separately
	 specify -Wunused-parameter.

     -Wuninitialized
	 Warn if an automatic variable is used without first

gcc-3.4.6		   2011-08-18			       39

GCC(1)			       GNU			   GCC(1)

	 being initialized or if a variable may be clobbered by a
	 "setjmp" call.

	 These warnings are possible only in optimizing compila-
	 tion, because they require data flow information that is
	 computed only when optimizing.	 If you don't specify -O,
	 you simply won't get these warnings.

	 If you want to warn about code which uses the uninitial-
	 ized value of the variable in its own initializer, use
	 the -Winit-self option.

	 These warnings occur only for variables that are candi-
	 dates for register allocation.	 Therefore, they do not
	 occur for a variable that is declared "volatile", or
	 whose address is taken, or whose size is other than 1,
	 2, 4 or 8 bytes.  Also, they do not occur for struc-
	 tures, unions or arrays, even when they are in regis-
	 ters.

	 Note that there may be no warning about a variable that
	 is used only to compute a value that itself is never
	 used, because such computations may be deleted by data
	 flow analysis before the warnings are printed.

	 These warnings are made optional because GCC is not
	 smart enough to see all the reasons why the code might
	 be correct despite appearing to have an error.	 Here is
	 one example of how this can happen:

		 {
		   int x;
		   switch (y)
		     {
		     case 1: x = 1;
		       break;
		     case 2: x = 4;
		       break;
		     case 3: x = 5;
		     }
		   foo (x);
		 }

	 If the value of "y" is always 1, 2 or 3, then "x" is
	 always initialized, but GCC doesn't know this.	 Here is
	 another common case:

gcc-3.4.6		   2011-08-18			       40

GCC(1)			       GNU			   GCC(1)

		 {
		   int save_y;
		   if (change_y) save_y = y, y = new_y;
		   ...
		   if (change_y) y = save_y;
		 }

	 This has no bug because "save_y" is used only if it is
	 set.

	 This option also warns when a non-volatile automatic
	 variable might be changed by a call to "longjmp".  These
	 warnings as well are possible only in optimizing compi-
	 lation.

	 The compiler sees only the calls to "setjmp".	It cannot
	 know where "longjmp" will be called; in fact, a signal
	 handler could call it at any point in the code.  As a
	 result, you may get a warning even when there is in fact
	 no problem because "longjmp" cannot in fact be called at
	 the place which would cause a problem.

	 Some spurious warnings can be avoided if you declare all
	 the functions you use that never return as "noreturn".

     -Wunknown-pragmas
	 Warn when a #pragma directive is encountered which is
	 not understood by GCC.	 If this command line option is
	 used, warnings will even be issued for unknown pragmas
	 in system header files.  This is not the case if the
	 warnings were only enabled by the -Wall command line
	 option.

     -Wstrict-aliasing
	 This option is only active when -fstrict-aliasing is
	 active. It warns about code which might break the strict
	 aliasing rules that the compiler is using for optimiza-
	 tion. The warning does not catch all cases, but does
	 attempt to catch the more common pitfalls. It is
	 included in -Wall.

     -Wall
	 All of the above -W options combined.	This enables all
	 the warnings about constructions that some users con-
	 sider questionable, and that are easy to avoid (or
	 modify to prevent the warning), even in conjunction with
	 macros.  This also enables some language-specific warn-
	 ings described in C++ Dialect Options and Objective-C
	 Dialect Options.

     The following -W... options are not implied by -Wall. Some
     of them warn about constructions that users generally do not

gcc-3.4.6		   2011-08-18			       41

GCC(1)			       GNU			   GCC(1)

     consider questionable, but which occasionally you might wish
     to check for; others warn about constructions that are
     necessary or hard to avoid in some cases, and there is no
     simple way to modify the code to suppress the warning.

     -Wextra
	 (This option used to be called -W.  The older name is
	 still supported, but the newer name is more descrip-
	 tive.)	 Print extra warning messages for these events:

	 *   A function can return either with or without a
	     value.  (Falling off the end of the function body is
	     considered returning without a value.)  For example,
	     this function would evoke such a warning:

		     foo (a)
		     {
		       if (a > 0)
			 return a;
		     }

	 *   An expression-statement or the left-hand side of a
	     comma expression contains no side effects. To
	     suppress the warning, cast the unused expression to
	     void. For example, an expression such as x[i,j] will
	     cause a warning, but x[(void)i,j] will not.

	 *   An unsigned value is compared against zero with < or
	     >=.

	 *   A comparison like x<=y<=z appears; this is
	     equivalent to (x<=y ? 1 : 0) <= z, which is a dif-
	     ferent interpretation from that of ordinary
	     mathematical notation.

	 *   Storage-class specifiers like "static" are not the
	     first things in a declaration.  According to the C
	     Standard, this usage is obsolescent.

	 *   The return type of a function has a type qualifier
	     such as "const". Such a type qualifier has no
	     effect, since the value returned by a function is
	     not an lvalue.  (But don't warn about the GNU exten-
	     sion of "volatile void" return types.  That exten-
	     sion will be warned about if -pedantic is speci-
	     fied.)

	 *   If -Wall or -Wunused is also specified, warn about
	     unused arguments.

	 *   A comparison between signed and unsigned values
	     could produce an incorrect result when the signed

gcc-3.4.6		   2011-08-18			       42

GCC(1)			       GNU			   GCC(1)

	     value is converted to unsigned. (But don't warn if
	     -Wno-sign-compare is also specified.)

	 *   An aggregate has an initializer which does not ini-
	     tialize all members. This warning can be indepen-
	     dently controlled by -Wmissing-field-initializers.

	 *   A function parameter is declared without a type
	     specifier in K&R-style functions:

		     void foo(bar) { }

	 *   An empty body occurs in an if or else statement.

	 *   A pointer is compared against integer zero with <,
	     <=, >, or >=.

	 *   A variable might be changed by longjmp or vfork.

	 *   Any of several floating-point events that often
	     indicate errors, such as overflow, underflow, loss
	     of precision, etc.

	 *   (C++ only) An enumerator and a non-enumerator both
	     appear in a conditional expression.

	 *   (C++ only) A non-static reference or non-static
	     const member appears in a class without construc-
	     tors.

	 *   (C++ only) Ambiguous virtual bases.

	 *   (C++ only) Subscripting an array which has been
	     declared register.

	 *   (C++ only) Taking the address of a variable which
	     has been declared register.

	 *   (C++ only) A base class is not initialized in a
	     derived class' copy constructor.

     -Wno-div-by-zero
	 Do not warn about compile-time integer division by zero.
	 Floating point division by zero is not warned about, as
	 it can be a legitimate way of obtaining infinities and
	 NaNs.

     -Wsystem-headers
	 Print warning messages for constructs found in system
	 header files. Warnings from system headers are normally
	 suppressed, on the assumption that they usually do not
	 indicate real problems and would only make the compiler

gcc-3.4.6		   2011-08-18			       43

GCC(1)			       GNU			   GCC(1)

	 output harder to read.	 Using this command line option
	 tells GCC to emit warnings from system headers as if
	 they occurred in user code.  However, note that using
	 -Wall in conjunction with this option will not warn
	 about unknown pragmas in system headers---for that,
	 -Wunknown-pragmas must also be used.

     -Wfloat-equal
	 Warn if floating point values are used in equality com-
	 parisons.

	 The idea behind this is that sometimes it is convenient
	 (for the programmer) to consider floating-point values
	 as approximations to infinitely precise real numbers.
	 If you are doing this, then you need to compute (by
	 analyzing the code, or in some other way) the maximum or
	 likely maximum error that the computation introduces,
	 and allow for it when performing comparisons (and when
	 producing output, but that's a different problem).  In
	 particular, instead of testing for equality, you would
	 check to see whether the two values have ranges that
	 overlap; and this is done with the relational operators,
	 so equality comparisons are probably mistaken.

     -Wtraditional (C only)
	 Warn about certain constructs that behave differently in
	 traditional and ISO C.	 Also warn about ISO C constructs
	 that have no traditional C equivalent, and/or prob-
	 lematic constructs which should be avoided.

	 *   Macro parameters that appear within string literals
	     in the macro body. In traditional C macro replace-
	     ment takes place within string literals, but does
	     not in ISO C.

	 *   In traditional C, some preprocessor directives did
	     not exist. Traditional preprocessors would only con-
	     sider a line to be a directive if the # appeared in
	     column 1 on the line.  Therefore -Wtraditional warns
	     about directives that traditional C understands but
	     would ignore because the # does not appear as the
	     first character on the line.  It also suggests you
	     hide directives like #pragma not understood by trad-
	     itional C by indenting them.  Some traditional
	     implementations would not recognize #elif, so it
	     suggests avoiding it altogether.

	 *   A function-like macro that appears without argu-
	     ments.

	 *   The unary plus operator.

gcc-3.4.6		   2011-08-18			       44

GCC(1)			       GNU			   GCC(1)

	 *   The U integer constant suffix, or the F or L float-
	     ing point constant suffixes.  (Traditional C does
	     support the L suffix on integer constants.)  Note,
	     these suffixes appear in macros defined in the sys-
	     tem headers of most modern systems, e.g. the
	     _MIN/_MAX macros in "<limits.h>". Use of these mac-
	     ros in user code might normally lead to spurious
	     warnings, however GCC's integrated preprocessor has
	     enough context to avoid warning in these cases.

	 *   A function declared external in one block and then
	     used after the end of the block.

	 *   A "switch" statement has an operand of type "long".

	 *   A non-"static" function declaration follows a
	     "static" one. This construct is not accepted by some
	     traditional C compilers.

	 *   The ISO type of an integer constant has a different
	     width or signedness from its traditional type.  This
	     warning is only issued if the base of the constant
	     is ten.  I.e. hexadecimal or octal values, which
	     typically represent bit patterns, are not warned
	     about.

	 *   Usage of ISO string concatenation is detected.

	 *   Initialization of automatic aggregates.

	 *   Identifier conflicts with labels.	Traditional C
	     lacks a separate namespace for labels.

	 *   Initialization of unions.	If the initializer is
	     zero, the warning is omitted.  This is done under
	     the assumption that the zero initializer in user
	     code appears conditioned on e.g. "__STDC__" to avoid
	     missing initializer warnings and relies on default
	     initialization to zero in the traditional C case.

	 *   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
	     -Wconversion.

	 *   Use of ISO C style function definitions.  This warn-
	     ing intentionally is not issued for prototype
	     declarations or variadic functions because these ISO
	     C features will appear in your code when using
	     libiberty's traditional C compatibility macros,

gcc-3.4.6		   2011-08-18			       45

GCC(1)			       GNU			   GCC(1)

	     "PARAMS" and "VPARAMS".  This warning is also
	     bypassed for nested functions because that feature
	     is already a GCC extension and thus not relevant to
	     traditional C compatibility.

     -Wdeclaration-after-statement (C only)
	 Warn when a declaration is found after a statement in a
	 block.	 This construct, known from C++, was introduced
	 with ISO C99 and is by default allowed in GCC.	 It is
	 not supported by ISO C90 and was not supported by GCC
	 versions before GCC 3.0.

     -Wundef
	 Warn if an undefined identifier is evaluated in an #if
	 directive.

     -Wendif-labels
	 Warn whenever an #else or an #endif are followed by
	 text.

     -Wshadow
	 Warn whenever a local variable shadows another local
	 variable, parameter or global variable or whenever a
	 built-in function is shadowed.

     -Wlarger-than-len
	 Warn whenever an object of larger than len bytes is
	 defined.

     -Wpointer-arith
	 Warn about anything that depends on the ``size of'' a
	 function type or of "void".  GNU C assigns these types a
	 size of 1, for convenience in calculations with "void *"
	 pointers and pointers to functions.

     -Wbad-function-cast (C only)
	 Warn whenever a function call is cast to a non-matching
	 type. For example, warn if "int malloc()" is cast to
	 "anything *".

     -Wbounded
	 Activate Anil Madhavapeddys bounds checker. This per-
	 forms basic checks on functions which accept buffers and
	 sizes.	 An extra attribute, __bounded__, has been added
	 to mark functions that can be checked.

	 It only works with statically allocated fixed-size
	 buffers. Since it is applied at compile-time, dynami-
	 cally allocated memory buffers and non-constant argu-
	 ments are ignored.

	 If -Wbounded is specified together with -Wformat,

gcc-3.4.6		   2011-08-18			       46

GCC(1)			       GNU			   GCC(1)

	 additional checks are performed on sscanf(3) format
	 strings. The %s fields are checked for incorrect bound
	 lengths by checking the size of the buffer associated
	 with the format argument.

     -Wcast-qual
	 Warn whenever a pointer is cast so as to remove a type
	 qualifier from the target type.  For example, warn if a
	 "const char *" is cast to an ordinary "char *".

     -Wcast-align
	 Warn whenever a pointer is cast such that the required
	 alignment of the target is increased.	For example, warn
	 if a "char *" is cast to an "int *" on machines where
	 integers can only be accessed at two- or four-byte boun-
	 daries.

     -Wwrite-strings
	 When compiling C, give string constants the type "const
	 char[length]" so that copying the address of one into a
	 non-"const" "char *" pointer will get a warning; when
	 compiling C++, warn about the deprecated conversion from
	 string constants to "char *". These warnings will help
	 you find at compile time code that can try to write into
	 a string constant, but only if you have been very care-
	 ful about using "const" in declarations and prototypes.
	 Otherwise, it will just be a nuisance; this is why we
	 did not make -Wall request these warnings.

     -Wconversion
	 Warn if a prototype causes a type conversion that is
	 different from what would happen to the same argument in
	 the absence of a prototype.  This includes conversions
	 of fixed point to floating and vice versa, and conver-
	 sions changing the width or signedness of a fixed point
	 argument except when the same as the default promotion.

	 Also, warn if a negative integer constant expression is
	 implicitly converted to an unsigned type.  For example,
	 warn about the assignment "x = -1" if "x" is unsigned.
	 But do not warn about explicit casts like "(unsigned)
	 -1".

     -Wsign-compare
	 Warn when a comparison between signed and unsigned
	 values could produce an incorrect result when the signed
	 value is converted to unsigned. This warning is also
	 enabled by -Wextra; to get the other warnings of -Wextra
	 without this warning, use -Wextra -Wno-sign-compare.

     -Waggregate-return
	 Warn if any functions that return structures or unions

gcc-3.4.6		   2011-08-18			       47

GCC(1)			       GNU			   GCC(1)

	 are defined or called.	 (In languages where you can
	 return an array, this also elicits a warning.)

     -Wstrict-prototypes (C only)
	 Warn if a function is declared or defined without speci-
	 fying the argument types.  (An old-style function defin-
	 ition is permitted without a warning if preceded by a
	 declaration which specifies the argument types.)

     -Wold-style-definition (C only)
	 Warn if an old-style function definition is used.  A
	 warning is given even if there is a previous prototype.

     -Wmissing-prototypes (C only)
	 Warn if a global function is defined without a previous
	 prototype declaration.	 This warning is issued even if
	 the definition itself provides a prototype.  The aim is
	 to detect global functions that fail to be declared in
	 header files.

     -Wmissing-declarations (C only)
	 Warn if a global function is defined without a previous
	 declaration. Do so even if the definition itself pro-
	 vides a prototype. Use this option to detect global
	 functions that are not declared in header files.

     -Wmissing-field-initializers
	 Warn if a structure's initializer has some fields miss-
	 ing.  For example, the following code would cause such a
	 warning, because "x.h" is implicitly zero:

		 struct s { int f, g, h; };
		 struct s x = { 3, 4 };

	 This option does not warn about designated initializers,
	 so the following modification would not trigger a warn-
	 ing:

		 struct s { int f, g, h; };
		 struct s x = { .f = 3, .g = 4 };

	 This warning is included in -Wextra.  To get other -Wex-
	 tra warnings without this one, use -Wextra
	 -Wno-missing-field-initializers.

     -Wmissing-noreturn
	 Warn about functions which might be candidates for
	 attribute "noreturn". Note these are only possible can-
	 didates, not absolute ones.  Care should be taken to
	 manually verify functions actually do not ever return
	 before adding the "noreturn" attribute, otherwise subtle
	 code generation bugs could be introduced.  You will not

gcc-3.4.6		   2011-08-18			       48

GCC(1)			       GNU			   GCC(1)

	 get a warning for "main" in hosted C environments.

     -Wmissing-format-attribute
	 If -Wformat is enabled, also warn about functions which
	 might be candidates for "format" attributes.  Note these
	 are only possible candidates, not absolute ones.  GCC
	 will guess that "format" attributes might be appropriate
	 for any function that calls a function like "vprintf" or
	 "vscanf", but this might not always be the case, and
	 some functions for which "format" attributes are
	 appropriate may not be detected.  This option has no
	 effect unless -Wformat is enabled (possibly by -Wall).

     -Wno-multichar
	 Do not warn if a multicharacter constant ('FOOF') is
	 used. Usually they indicate a typo in the user's code,
	 as they have implementation-defined values, and should
	 not be used in portable code.

     -Wno-deprecated-declarations
	 Do not warn about uses of functions, variables, and
	 types marked as deprecated by using the "deprecated"
	 attribute. (@pxref{Function Attributes}, @pxref{Variable
	 Attributes}, @pxref{Type Attributes}.)

     -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. Such structures may be mis-aligned for
	 little benefit.  For instance, in this code, the vari-
	 able "f.x" in "struct bar" will be misaligned even
	 though "struct bar" does not itself have the packed
	 attribute:

		 struct foo {
		   int x;
		   char a, b, c, d;
		 } __attribute__((packed));
		 struct bar {
		   char z;
		   struct foo f;
		 };

     -Wpadded
	 Warn if padding is included in a structure, either to
	 align an element of the structure or to align the whole
	 structure.  Sometimes when this happens it is possible
	 to rearrange the fields of the structure to reduce the
	 padding and so make the structure smaller.

     -Wredundant-decls
	 Warn if anything is declared more than once in the same

gcc-3.4.6		   2011-08-18			       49

GCC(1)			       GNU			   GCC(1)

	 scope, even in cases where multiple declaration is valid
	 and changes nothing.

     -Wnested-externs (C only)
	 Warn if an "extern" declaration is encountered within a
	 function.

     -Wunreachable-code
	 Warn if the compiler detects that code will never be
	 executed.

	 This option is intended to warn when the compiler
	 detects that at least a whole line of source code will
	 never be executed, because some condition is never
	 satisfied or because it is after a procedure that never
	 returns.

	 It is possible for this option to produce a warning even
	 though there 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.

	 This option is not made part of -Wall because in a
	 debugging version of a program there is often substan-
	 tial code which checks correct functioning of the pro-
	 gram and is, hopefully, unreachable because the program
	 does work.  Another common use of unreachable code is to
	 provide behavior which is selectable at compile-time.

     -Winline
	 Warn if a function can not be inlined and it was
	 declared as inline. Even with this option, the compiler
	 will not warn about failures to inline functions
	 declared in system headers.

	 The compiler uses a variety of heuristics to determine
	 whether or not to inline a function.  For example, the
	 compiler takes into account the size of the function
	 being inlined and the the amount of inlining that has
	 already been done in the current function.  Therefore,
	 seemingly insignificant changes in the source program
	 can cause the warnings produced by -Winline to appear or
	 disappear.

     -Wno-invalid-offsetof (C++ only)
	 Suppress warnings from applying the offsetof macro to a
	 non-POD type.	According to the 1998 ISO C++ standard,
	 applying offsetof to a non-POD type is undefined.  In

gcc-3.4.6		   2011-08-18			       50

GCC(1)			       GNU			   GCC(1)

	 existing C++ implementations, however, offsetof typi-
	 cally gives meaningful results even when applied to cer-
	 tain kinds of non-POD types. (Such as a simple struct
	 that fails to be a POD type only by virtue of having a
	 constructor.)	This flag is for users who are aware that
	 they are writing nonportable code and who have deli-
	 berately chosen to ignore the warning about it.

	 The restrictions on offsetof may be relaxed in a future
	 version of the C++ standard.

     -Winvalid-pch
	 Warn if a precompiled header is found in the search path
	 but can't be used.

     -Wlong-long
	 Warn if long long type is used.  This is default.  To
	 inhibit the warning messages, use -Wno-long-long.  Flags
	 -Wlong-long and -Wno-long-long are taken into account
	 only when -pedantic flag is used.

     -Wdisabled-optimization
	 Warn if a requested optimization pass is disabled.  This
	 warning does not generally indicate that there is any-
	 thing wrong with your code; it merely indicates that
	 GCC's optimizers were unable to handle the code effec-
	 tively.  Often, the problem is that your code is too big
	 or too complex; GCC will refuse to optimize programs
	 when the optimization itself is likely to take inordi-
	 nate amounts of time.

     -Wstack-larger-than-len
	 Warn whenever a function uses more than len bytes of
	 stack or local storage size.  Set len to 0 to disable.

     -Wstack-protector
	 Warn when not issuing stack smashing protection for some
	 reason.

     -Wtrampolines
	 Warn when emitting trampolines.

     -Werror
	 Make all warnings into errors.

     -Werror-maybe-reset
	 Act like -Wno-error if the GCC_NO_WERROR environment
	 variable is set to anything other than 0 or empty.

     -fhonour-copts
	 If GCC_HONOUR_COPTS is set to 1, abort if this option is
	 not given at least once, and warn if it is given more

gcc-3.4.6		   2011-08-18			       51

GCC(1)			       GNU			   GCC(1)

	 than once. If GCC_HONOUR_COPTS is set to 2, abort if
	 this option is not given exactly once. If
	 GCC_HONOUR_COPTS is set to 0 or unset, warn if this
	 option is not given exactly once. The warning is quelled
	 if GCC_HONOUR_COPTS is set to s. This flag and environ-
	 ment variable only affect the C language.

     Options for Debugging Your Program or GCC

     GCC has various special options that are used for debugging
     either your program or GCC:

     -g	 Produce debugging information in the operating system's
	 native format (stabs, COFF, XCOFF, or DWARF).	GDB can
	 work with this debugging information.

	 On most systems that use stabs format, -g enables use of
	 extra debugging information that only GDB can use; this
	 extra information makes debugging work better in GDB but
	 will probably make other debuggers crash or refuse to
	 read the program.  If you want to control for certain
	 whether to generate the extra information, use -gstabs+,
	 -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).

	 Unlike most other C compilers, GCC allows you to use -g
	 with -O.  The shortcuts taken by optimized code may
	 occasionally produce surprising results: some variables
	 you declared may not exist at all; flow of control may
	 briefly move where you did not expect it; some state-
	 ments may not be executed because they compute constant
	 results or their values were already at hand; some
	 statements may execute in different places because they
	 were moved out of loops.

	 Nevertheless it proves possible to debug optimized out-
	 put.  This makes it reasonable to use the optimizer for
	 programs that might have bugs.

	 The following options are useful when GCC is generated
	 with the capability for more than one debugging format.

     -ggdb
	 Produce debugging information for use by GDB.	This
	 means to use the most expressive format available (DWARF
	 2, stabs, or the native format if neither of those are
	 supported), including GDB extensions if at all possible.

     -gstabs
	 Produce debugging information in stabs format (if that
	 is supported), without GDB extensions.	 This is the for-
	 mat used by DBX on most BSD systems.  On MIPS, Alpha and
	 System V Release 4 systems this option produces stabs

gcc-3.4.6		   2011-08-18			       52

GCC(1)			       GNU			   GCC(1)

	 debugging output which is not understood by DBX or SDB.
	 On System V Release 4 systems this option requires the
	 GNU assembler.

     -feliminate-unused-debug-symbols
	 Produce debugging information in stabs format (if that
	 is supported), for only symbols that are actually used.

     -gstabs+
	 Produce debugging information in stabs format (if that
	 is supported), using GNU extensions understood only by
	 the GNU debugger (GDB).  The use of these extensions is
	 likely to make other debuggers crash or refuse to read
	 the program.

     -gcoff
	 Produce debugging information in COFF format (if that is
	 supported). This is the format used by SDB on most Sys-
	 tem V systems prior to System V Release 4.

     -gxcoff
	 Produce debugging information in XCOFF format (if that
	 is supported). This is the format used by the DBX
	 debugger on IBM RS/6000 systems.

     -gxcoff+
	 Produce debugging information in XCOFF format (if that
	 is supported), using GNU extensions understood only by
	 the GNU debugger (GDB).  The use of these extensions is
	 likely to make other debuggers crash or refuse to read
	 the program, and may cause assemblers other than the GNU
	 assembler (GAS) to fail with an error.

     -gdwarf-2
	 Produce debugging information in DWARF version 2 format
	 (if that is supported).  This is the format used by DBX
	 on IRIX 6.

     -gvms
	 Produce debugging information in VMS debug format (if
	 that is supported).  This is the format used by DEBUG on
	 VMS systems.

     -glevel
     -ggdblevel
     -gstabslevel
     -gcofflevel
     -gxcofflevel
     -gvmslevel
	 Request debugging information and also use level to
	 specify how much information.	The default level is 2.

gcc-3.4.6		   2011-08-18			       53

GCC(1)			       GNU			   GCC(1)

	 Level 1 produces minimal information, enough for making
	 backtraces in parts of the program that you don't plan
	 to debug.  This includes descriptions of functions and
	 external variables, but no information about local vari-
	 ables and no line numbers.

	 Level 3 includes extra information, such as all the
	 macro definitions present in the program.  Some
	 debuggers support macro expansion when you use -g3.

	 Note that in order to avoid confusion between DWARF1
	 debug level 2, and DWARF2 -gdwarf-2 does not accept a
	 concatenated debug level.  Instead use an additional
	 -glevel option to change the debug level for DWARF2.

     -feliminate-dwarf2-dups
	 Compress DWARF2 debugging information by eliminating
	 duplicated information about each symbol.  This option
	 only makes sense when generating DWARF2 debugging infor-
	 mation with -gdwarf-2.

     -p	 Generate extra code to write profile information suit-
	 able for the analysis program prof.  You must use this
	 option when compiling the source files you want data
	 about, and you must also use it when linking.

     -pg Generate extra code to write profile information suit-
	 able for the analysis program gprof.  You must use this
	 option when compiling the source files you want data
	 about, and you must also use it when linking.

     -Q	 Makes the compiler print out each function name as it is
	 compiled, and print some statistics about each pass when
	 it finishes.

     -ftime-report
	 Makes the compiler print some statistics about the time
	 consumed by each pass when it finishes.

     -fmem-report
	 Makes the compiler print some statistics about permanent
	 memory allocation when it finishes.

     -fprofile-arcs
	 Add code so that program flow arcs are instrumented.
	 During execution the program records how many times each
	 branch and call is executed and how many times it is
	 taken or returns.  When the compiled program exits it
	 saves this data to a file called auxname.gcda for each
	 source file. The data may be used for profile-directed
	 optimizations (-fbranch-probabilities), or for test cov-
	 erage analysis (-ftest-coverage). Each object file's

gcc-3.4.6		   2011-08-18			       54

GCC(1)			       GNU			   GCC(1)

	 auxname is generated from the name of the output file,
	 if explicitly specified and it is not the final execut-
	 able, otherwise it is the basename of the source file.
	 In both cases any suffix is removed (e.g.  foo.gcda for
	 input file dir/foo.c, or dir/foo.gcda for output file
	 specified as -o dir/foo.o).

	 @bulCompile the source files with -fprofile-arcs plus
	     optimization and code generation options. For test
	     coverage analysis, use the additional
	     -ftest-coverage option. You do not need to profile
	     every source file in a program.

     vmmfu@u-3p	    @cvmmfu
	     Link your object files with -lgcov or -fprofile-arcs
	     (the latter implies the former).

	 @dwnRun the program on a representative workload to gen-
	     erate the arc profile information. This may be
	     repeated any number of times. You can run concurrent
	     instances of your program, and provided that the
	     file system supports locking, the data files will be
	     correctly updated. Also "fork" calls are detected
	     and correctly handled (double counting will not hap-
	     pen).

	 @exoFor profile-directed optimizations, compile the
	     source files again with the same optimization and
	     code generation options plus -fbranch-probabilities.

	 @fypFor test coverage analysis, use gcov to produce
	     human readable information from the .gcno and .gcda
	     files. Refer to the gcov documentation for further
	     information.

	 With -fprofile-arcs, for each function of your program
	 GCC creates a program flow graph, then finds a spanning
	 tree for the graph. Only arcs that are not on the span-
	 ning tree have to be instrumented: the compiler adds
	 code to count the number of times that these arcs are
	 executed.  When an arc is the only exit or only entrance
	 to a block, the instrumentation code can be added to the
	 block; otherwise, a new basic block must be created to
	 hold the instrumentation code.

     -ftest-coverage
	 Produce a notes file that the gcov code-coverage utility
	 can use to show program coverage. Each source file's
	 note file is called auxname.gcno. Refer to the
	 -fprofile-arcs option above for a description of auxname
	 and instructions on how to generate test coverage data.
	 Coverage data will match the source files more closely,

gcc-3.4.6		   2011-08-18			       55

GCC(1)			       GNU			   GCC(1)

	 if you do not optimize.

     -dletters
	 Says to make debugging dumps during compilation at times
	 specified by 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 dumpname.
	 dumpname is generated from the name of the output file,
	 if explicitly specified and it is not an executable,
	 otherwise it is the basename of the source file. In both
	 cases any suffix is removed (e.g.  foo.01.rtl or
	 foo.02.sibling). Here are the possible letters for use
	 in letters, and their meanings:

	 A   Annotate the assembler output with miscellaneous
	     debugging information.

	 b   Dump after computing branch probabilities, to
	     file.12.bp.

	 B   Dump after block reordering, to file.31.bbro.

	 c   Dump after instruction combination, to the file
	     file.20.combine.

	 C   Dump after the first if conversion, to the file
	     file.14.ce1. Also dump after the second if conver-
	     sion, to the file file.21.ce2.

	 d   Dump after branch target load optimization, to to
	     file.32.btl. Also dump after delayed branch schedul-
	     ing, to file.36.dbr.

	 D   Dump all macro definitions, at the end of prepro-
	     cessing, in addition to normal output.

	 E   Dump after the third if conversion, to file.30.ce3.

	 f   Dump after control and data flow analysis, to
	     file.11.cfg. Also dump after life analysis, to
	     file.19.life.

	 F   Dump after purging "ADDRESSOF" codes, to
	     file.07.addressof.

	 g   Dump after global register allocation, to
	     file.25.greg.

	 G   Dump after GCSE, to file.08.gcse. Also dump after
	     jump bypassing and control flow optimizations, to
	     file.10.bypass.

gcc-3.4.6		   2011-08-18			       56

GCC(1)			       GNU			   GCC(1)

	 h   Dump after finalization of EH handling code, to
	     file.03.eh.

	 i   Dump after sibling call optimizations, to
	     file.02.sibling.

	 j   Dump after the first jump optimization, to
	     file.04.jump.

	 k   Dump after conversion from registers to stack, to
	     file.34.stack.

	 l   Dump after local register allocation, to
	     file.24.lreg.

	 L   Dump after loop optimization passes, to file.09.loop
	     and file.16.loop2.

	 M   Dump after performing the machine dependent reorgan-
	     ization pass, to file.35.mach.

	 n   Dump after register renumbering, to file.29.rnreg.

	 N   Dump after the register move pass, to
	     file.22.regmove.

	 o   Dump after post-reload optimizations, to
	     file.26.postreload.

	 r   Dump after RTL generation, to file.01.rtl.

	 R   Dump after the second scheduling pass, to
	     file.33.sched2.

	 s   Dump after CSE (including the jump optimization that
	     sometimes follows CSE), to file.06.cse.

	 S   Dump after the first scheduling pass, to
	     file.23.sched.

	 t   Dump after the second CSE pass (including the jump
	     optimization that sometimes follows CSE), to
	     file.18.cse2.

	 T   Dump after running tracer, to file.15.tracer.

	 u   Dump after null pointer elimination pass to
	     file.05.null.

	 U   Dump callgraph and unit-at-a-time optimization
	     file.00.unit.

gcc-3.4.6		   2011-08-18			       57

GCC(1)			       GNU			   GCC(1)

	 V   Dump after the value profile transformations, to
	     file.13.vpt.

	 w   Dump after the second flow pass, to file.27.flow2.

	 z   Dump after the peephole pass, to file.28.peephole2.

	 Z   Dump after constructing the web, to file.17.web.

	 a   Produce all the dumps listed above.

	 H   Produce a core dump whenever an error occurs.

	 m   Print statistics on memory usage, at the end of the
	     run, to standard error.

	 p   Annotate the assembler output with a comment indi-
	     cating which pattern and alternative was used.  The
	     length of each instruction is also printed.

	 P   Dump the RTL in the assembler output as a comment
	     before each instruction. Also turns on -dp annota-
	     tion.

	 v   For each of the other indicated dump files (except
	     for file.01.rtl), dump a representation of the con-
	     trol flow graph suitable for viewing with VCG to
	     file.pass.vcg.

	 x   Just generate RTL for a function instead of compil-
	     ing it.  Usually used with r.

	 y   Dump debugging information during parsing, to stan-
	     dard error.

     -fdump-unnumbered
	 When doing debugging dumps (see -d option above),
	 suppress instruction numbers and line number note out-
	 put.  This makes it more feasible to use diff on debug-
	 ging dumps for compiler invocations with different
	 options, in particular with and without -g.

     -fdump-translation-unit (C and C++ only)
     -fdump-translation-unit-options (C and C++ only)
	 Dump a representation of the tree structure for the
	 entire translation unit to a file.  The file name is
	 made by appending .tu to the source file name.	 If the
	 -options form is used, options controls the details of
	 the dump as described for the -fdump-tree options.

     -fdump-class-hierarchy (C++ only)
     -fdump-class-hierarchy-options (C++ only)

gcc-3.4.6		   2011-08-18			       58

GCC(1)			       GNU			   GCC(1)

	 Dump a representation of each class's hierarchy and vir-
	 tual function table layout to a file.	The file name is
	 made by appending .class to the source file name.  If
	 the -options form is used, options controls the details
	 of the dump as described for the -fdump-tree options.

     -fdump-tree-switch (C++ only)
     -fdump-tree-switch-options (C++ only)
	 Control the dumping at various stages of processing the
	 intermediate language tree to a file.	The file name is
	 generated by appending a switch specific suffix to the
	 source file name.  If the -options form is used, options
	 is a list of - separated options that control the
	 details of the dump. Not all options are applicable to
	 all dumps, those which are not meaningful will be
	 ignored. The following options are available

	 address
	     Print the address of each node.  Usually this is not
	     meaningful as it changes according to the environ-
	     ment and source file. Its primary use is for tying
	     up a dump file with a debug environment.

	 slim
	     Inhibit dumping of members of a scope or body of a
	     function merely because that scope has been reached.
	     Only dump such items when they are directly reach-
	     able by some other path.

	 all Turn on all options.

	 The following tree dumps are possible:

	 original
	     Dump before any tree based optimization, to
	     file.original.

	 optimized
	     Dump after all tree based optimization, to
	     file.optimized.

	 inlined
	     Dump after function inlining, to file.inlined.

     -frandom-seed=string
	 This option provides a seed that GCC uses when it would
	 otherwise use random numbers.	It is used to generate
	 certain symbol names that have to be different in every
	 compiled file. It is also used to place unique stamps in
	 coverage data files and the object files that produce
	 them. You can use the -frandom-seed option to produce
	 reproducibly identical object files.

gcc-3.4.6		   2011-08-18			       59

GCC(1)			       GNU			   GCC(1)

	 The string should be different for every file you com-
	 pile.

     -fsched-verbose=n
	 On targets that use instruction scheduling, this option
	 controls the amount of debugging output the scheduler
	 prints.  This information is written to standard error,
	 unless -dS or -dR is specified, in which case it is out-
	 put to the usual dump listing file, .sched or .sched2
	 respectively.	However for n greater than nine, the out-
	 put is always printed to standard error.

	 For n greater than zero, -fsched-verbose outputs the
	 same information as -dRS.  For n greater than one, it
	 also output basic block probabilities, detailed ready
	 list information and unit/insn info.  For n greater than
	 two, it includes RTL at abort point, control-flow and
	 regions info.	And for n over four, -fsched-verbose also
	 includes dependence info.

     -save-temps
	 Store the usual ``temporary'' intermediate files per-
	 manently; place them in the current directory and name
	 them based on the source file.	 Thus, compiling foo.c
	 with -c -save-temps would produce files foo.i and foo.s,
	 as well as foo.o.  This creates a preprocessed foo.i
	 output file even though the compiler now normally uses
	 an integrated preprocessor.

     -time
	 Report the CPU time taken by each subprocess in the com-
	 pilation sequence.  For C source files, this is the com-
	 piler proper and assembler (plus the linker if linking
	 is done).  The output looks like this:

		 # cc1 0.12 0.01
		 # as 0.00 0.01

	 The first number on each line is the ``user time,'' that
	 is time spent executing the program itself.  The second
	 number is ``system time,'' time spent executing operat-
	 ing system routines on behalf of the program. Both
	 numbers are in seconds.

     -print-file-name=library
	 Print the full absolute name of the library file library
	 that would be used when linking---and don't do anything
	 else.	With this option, GCC does not compile or link
	 anything; it just prints the file name.

     -print-multi-directory
	 Print the directory name corresponding to the multilib

gcc-3.4.6		   2011-08-18			       60

GCC(1)			       GNU			   GCC(1)

	 selected by any other switches present in the command
	 line.	This directory is supposed to exist in
	 GCC_EXEC_PREFIX.

     -print-multi-lib
	 Print the mapping from multilib directory names to com-
	 piler switches that enable them.  The directory name is
	 separated from the switches by ;, and each switch starts
	 with an @} instead of the @samp{-, without spaces
	 between multiple switches.  This is supposed to ease
	 shell-processing.

     -print-prog-name=program
	 Like -print-file-name, but searches for a program such
	 as cpp.

     -print-libgcc-file-name
	 Same as -print-file-name=libgcc.a.

	 This is useful when you use -nostdlib or -nodefaultlibs
	 but you do want to link with libgcc.a.	 You can do

		 gcc -nostdlib <files>... `gcc -print-libgcc-file-name`

     -print-search-dirs
	 Print the name of the configured installation directory
	 and a list of program and library directories gcc will
	 search---and don't do anything else.

	 This is useful when gcc prints the error message instal-
	 lation problem, cannot exec cpp0: No such file or direc-
	 tory. To resolve this you either need to put cpp0 and
	 the other compiler components where gcc expects to find
	 them, or you can set the environment variable
	 GCC_EXEC_PREFIX to the directory where you installed
	 them. Don't forget the trailing '/'.

     -dumpmachine
	 Print the compiler's target machine (for example,
	 i686-pc-linux-gnu)---and don't do anything else.

     -dumpversion
	 Print the compiler version (for example, 3.0)---and
	 don't do anything else.

     -dumpspecs
	 Print the compiler's built-in specs---and don't do any-
	 thing else.  (This is used when GCC itself is being
	 built.)

     -feliminate-unused-debug-types
	 Normally, when producing DWARF2 output, GCC will emit

gcc-3.4.6		   2011-08-18			       61

GCC(1)			       GNU			   GCC(1)

	 debugging information for all types declared in a compi-
	 lation unit, regardless of whether or not they are actu-
	 ally used in that compilation unit.  Sometimes this is
	 useful, such as if, in the debugger, you want to cast a
	 value to a type that is not actually used in your pro-
	 gram (but is declared).  More often, however, this
	 results in a significant amount of wasted space. With
	 this option, GCC will avoid producing debug symbol out-
	 put for types that are nowhere used in the source file
	 being compiled.

     Options That Control Optimization

     These options control various sorts of optimizations.

     Without any optimization option, the compiler's goal is to
     reduce the cost of compilation and to make debugging produce
     the expected results.  Statements are independent: if you
     stop the program with a breakpoint between statements, you
     can then assign a new value to any variable or change the
     program counter to any other statement in the function and
     get exactly the results you would expect from the source
     code.

     Turning on optimization flags makes the compiler attempt to
     improve the performance and/or code size at the expense of
     compilation time and possibly the ability to debug the pro-
     gram.

     The compiler performs optimization based on the knowledge it
     has of the program.  Using the -funit-at-a-time flag will
     allow the compiler to consider information gained from later
     functions in the file when compiling a function.  Compiling
     multiple files at once to a single output file (and using
     -funit-at-a-time) will allow the compiler to use information
     gained from all of the files when compiling each of them.

     Not all optimizations are controlled directly by a flag.
     Only optimizations that have a flag are listed.

     -O
     -O1 Optimize.  Optimizing compilation takes somewhat more
	 time, and a lot more memory for a large function.

	 With -O, the compiler tries to reduce code size and exe-
	 cution time, without performing any optimizations that
	 take a great deal of compilation time.

	 -O turns on the following optimization flags:
	 -fdefer-pop -fmerge-constants -fthread-jumps
	 -floop-optimize -fif-conversion -fif-conversion2
	 -fdelayed-branch -fguess-branch-probability

gcc-3.4.6		   2011-08-18			       62

GCC(1)			       GNU			   GCC(1)

	 -fcprop-registers

	 -O also turns on -fomit-frame-pointer on machines where
	 doing so does not interfere with debugging.

     -O2 Optimize even more.  GCC performs nearly all supported
	 optimizations that do not involve a space-speed trade-
	 off.  The compiler does not perform loop unrolling or
	 function inlining when you specify -O2. As compared to
	 -O, this option increases both compilation time and the
	 performance of the generated code.

	 In MirOS, some security-tradeoff optimisations are not
	 enabled at this level.

	 -O2 turns on all optimization flags specified by -O.  It
	 also turns on the following optimization flags:
	 -fforce-mem -foptimize-sibling-calls -fstrength-reduce
	 -fcse-follow-jumps  -fcse-skip-blocks
	 -frerun-cse-after-loop	 -frerun-loop-opt -fgcse
	 -fgcse-lm  -fgcse-sm  -fgcse-las
	 -fexpensive-optimizations -fregmove -fschedule-insns
	 -fschedule-insns2 -fsched-interblock  -fsched-spec
	 -fcaller-saves -fpeephole2 -freorder-blocks
	 -freorder-functions -funit-at-a-time -falign-functions
	 -falign-jumps -falign-loops  -falign-labels -fcrossjump-
	 ing

	 Please note the warning under -fgcse about invoking -O2
	 on programs that use computed gotos.

     -O3 Optimize yet more.  -O3 turns on all optimizations
	 specified by -O2 and also turns on the
	 -finline-functions, -fdelete-null-pointer-checks,
	 -fstrict-aliasing, -fweb, -frename-registers and
	 -funswitch-loops options.

     -O0 Do not optimize.  This is the default.

     -Os Optimize for size.  -Os enables all -O2 optimizations
	 that do not typically increase code size.  It also per-
	 forms further optimizations designed to reduce code
	 size.

	 -Os disables the following optimization flags:
	 -falign-functions  -falign-jumps  -falign-loops
	 -falign-labels	 -freorder-blocks  -fprefetch-loop-arrays

	 If you use multiple -O options, with or without level
	 numbers, the last such option is the one that is effec-
	 tive.

gcc-3.4.6		   2011-08-18			       63

GCC(1)			       GNU			   GCC(1)

     FSF releases default to -fident instead of -fno-ident like
     MirOS releases; furthermore, they enable trampolines by
     default instead of requiring -ftrampolines, do not have
     stack protection, bounds checking, stack frame size limit
     warnings; the optimisation options
     -fdelete-null-pointer-checks and -fstrict-aliasing are
     enabled at -O2 and -Os already in FSF versions instead of at
     -O3 only like in MirOS versions.

     Options of the form -fflag specify machine-independent
     flags.  Most flags have both positive and negative forms;
     the negative form of -ffoo would be -fno-foo.  In the table
     below, only one of the forms is listed---the one you typi-
     cally will use.  You can figure out the other form by either
     removing no- or adding it.

     The following options control specific optimizations.  They
     are either activated by -O options or are related to ones
     that are.	You can use the following flags in the rare cases
     when ``fine-tuning'' of optimizations to be performed is
     desired.

     -fno-default-inline
	 Do not make member functions inline by default merely
	 because they are defined inside the class scope (C++
	 only).	 Otherwise, when you specify -O, member functions
	 defined inside class scope are compiled inline by
	 default; i.e., you don't need to add inline in front of
	 the member function name.

     -fno-defer-pop
	 Always pop the arguments to each function call as soon
	 as that function returns.  For machines which must pop
	 arguments after a function call, the compiler normally
	 lets arguments accumulate on the stack for several func-
	 tion calls and pops them all at once.

	 Disabled at levels -O, -O2, -O3, -Os.

     -fforce-mem
	 Force memory operands to be copied into registers before
	 doing arithmetic on them.  This produces better code by
	 making all memory references potential common subexpres-
	 sions.	 When they are not common subexpressions,
	 instruction combination should eliminate the separate
	 register-load.

	 Enabled at levels -O2, -O3, -Os.

     -fforce-addr
	 Force memory address constants to be copied into regis-
	 ters before doing arithmetic on them.	This may produce

gcc-3.4.6		   2011-08-18			       64

GCC(1)			       GNU			   GCC(1)

	 better code just as -fforce-mem may.

     -fomit-frame-pointer
	 Don't keep the frame pointer in a register for functions
	 that don't need one.  This avoids the instructions to
	 save, set up and restore frame pointers; it also makes
	 an extra register available in many functions.	 It also
	 makes debugging impossible on some machines.

	 On some machines, such as the VAX, this flag has no
	 effect, because the standard calling sequence automati-
	 cally handles the frame pointer and nothing is saved by
	 pretending it doesn't exist.  The machine-description
	 macro "FRAME_POINTER_REQUIRED" controls whether a target
	 machine supports this flag.

	 Enabled at levels -O, -O2, -O3, -Os.

     -foptimize-sibling-calls
	 Optimize sibling and tail recursive calls.

	 Enabled at levels -O2, -O3, -Os.

     -fno-inline
	 Don't pay attention to the "inline" keyword.  Normally
	 this option is used to keep the compiler from expanding
	 any functions inline. Note that if you are not optimiz-
	 ing, no functions can be expanded inline.

     -finline-functions
	 Integrate all simple functions into their callers.  The
	 compiler heuristically decides which functions are sim-
	 ple enough to be worth integrating in this way.

	 If all calls to a given function are integrated, and the
	 function is declared "static", then the function is nor-
	 mally not output as assembler code in its own right.

	 Enabled at level -O3.

     -finline-limit=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 (i.e.,
	 marked with the inline keyword or defined within the
	 class definition in c++).  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 600. 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

gcc-3.4.6		   2011-08-18			       65

GCC(1)			       GNU			   GCC(1)

	 means slower programs).  This option is particularly
	 useful for programs that use inlining heavily such as
	 those based on recursive templates with C++.

	 Inlining is actually controlled by a number of parame-
	 ters, which may be specified individually by using
	 --param name=value. The -finline-limit=n option sets
	 some of these parameters as follows:

	  @item max-inline-insns-single
	   is set to I<n>/2.
	  @item max-inline-insns-auto
	   is set to I<n>/2.
	  @item min-inline-insns
	   is set to 130 or I<n>/4, whichever is smaller.
	  @item max-inline-insns-rtl
	   is set to I<n>.

	 See below for a documentation of the individual parame-
	 ters controlling inlining.

	 Note: pseudo instruction represents, in this particular
	 context, an abstract measurement of function's size.  In
	 no way, it represents a count of assembly instructions
	 and as such its exact meaning might change from one
	 release to an another.

     -fkeep-inline-functions
	 Even if all calls to a given function are integrated,
	 and the function is declared "static", nevertheless out-
	 put a separate run-time callable version of the func-
	 tion.	This switch does not affect "extern inline" func-
	 tions.

     -fkeep-static-consts
	 Emit variables declared "static const" when optimization
	 isn't turned on, even if the variables aren't refer-
	 enced.

	 GCC enables this option by default.  If you want to
	 force the compiler to check if the variable was refer-
	 enced, regardless of whether or not optimization is
	 turned on, use the -fno-keep-static-consts option.

     -fmerge-constants
	 Attempt to merge identical constants (string constants
	 and floating point constants) across compilation units.

	 This option is the default for optimized compilation if
	 the assembler and linker support it.  Use
	 -fno-merge-constants to inhibit this behavior.

gcc-3.4.6		   2011-08-18			       66

GCC(1)			       GNU			   GCC(1)

	 Enabled at levels -O, -O2, -O3, -Os.

     -fmerge-all-constants
	 Attempt to merge identical constants and identical vari-
	 ables.

	 This option implies -fmerge-constants.	 In addition to
	 -fmerge-constants this considers e.g. even constant ini-
	 tialized arrays or initialized constant variables with
	 integral or floating point types.  Languages like C or
	 C++ require each non-automatic variable to have distinct
	 location, so using this option will result in non-
	 conforming behavior.

     -fnew-ra
	 Use a graph coloring register allocator.  Currently this
	 option is meant only for testing.  Users should not
	 specify this option, since it is not yet ready for pro-
	 duction use.

     -fno-branch-count-reg
	 Do not use ``decrement and branch'' instructions on a
	 count register, but instead generate a sequence of
	 instructions that decrement a register, compare it
	 against zero, then branch based upon the result. This
	 option is only meaningful on architectures that support
	 such instructions, which include x86, PowerPC, IA-64 and
	 S/390.

	 The default is -fbranch-count-reg, enabled when
	 -fstrength-reduce is enabled.

     -fno-function-cse
	 Do not put function addresses in registers; make each
	 instruction that calls a constant function contain the
	 function's address explicitly.

	 This option results in less efficient code, but some
	 strange hacks that alter the assembler output may be
	 confused by the optimizations performed when this option
	 is not used.

	 The default is -ffunction-cse

     -fno-zero-initialized-in-bss
	 If the target supports a BSS section, GCC by default
	 puts variables that are initialized to zero into BSS.
	 This can save space in the resulting code.

	 This option turns off this behavior because some pro-
	 grams explicitly rely on variables going to the data
	 section.  E.g., so that the resulting executable can

gcc-3.4.6		   2011-08-18			       67

GCC(1)			       GNU			   GCC(1)

	 find the beginning of that section and/or make assump-
	 tions based on that.

	 The default is -fzero-initialized-in-bss.

     -fstrength-reduce
	 Perform the optimizations of loop strength reduction and
	 elimination of iteration variables.

	 Enabled at levels -O2, -O3, -Os.

     -fthread-jumps
	 Perform optimizations where we check to see if a jump
	 branches to a location where another comparison subsumed
	 by the first is found.	 If so, the first branch is
	 redirected to either the destination of the second
	 branch or a point immediately following it, depending on
	 whether the condition is known to be true or false.

	 Enabled at levels -O, -O2, -O3, -Os.

     -fcse-follow-jumps
	 In common subexpression elimination, scan through jump
	 instructions when the target of the jump is not reached
	 by any other path.  For example, when CSE encounters an
	 "if" statement with an "else" clause, CSE will follow
	 the jump when the condition tested is false.

	 Enabled at levels -O2, -O3, -Os.

     -fcse-skip-blocks
	 This is similar to -fcse-follow-jumps, but causes CSE to
	 follow jumps which conditionally skip over blocks.  When
	 CSE encounters a simple "if" statement with no else
	 clause, -fcse-skip-blocks causes CSE to follow the jump
	 around the body of the "if".

	 Enabled at levels -O2, -O3, -Os.

     -frerun-cse-after-loop
	 Re-run common subexpression elimination after loop
	 optimizations has been performed.

	 Enabled at levels -O2, -O3, -Os.

     -frerun-loop-opt
	 Run the loop optimizer twice.

	 Enabled at levels -O2, -O3, -Os.

     -fgcse
	 Perform a global common subexpression elimination pass.

gcc-3.4.6		   2011-08-18			       68

GCC(1)			       GNU			   GCC(1)

	 This pass also performs global constant and copy propa-
	 gation.

	 Note: When compiling a program using computed gotos, a
	 GCC extension, you may get better runtime performance if
	 you disable the global common subexpression elimination
	 pass by adding -fno-gcse to the command line.

	 Enabled at levels -O2, -O3, -Os.

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

	 Enabled by default when gcse is enabled.

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

	 Enabled by default when gcse is enabled.

     -fgcse-las
	 When -fgcse-las is enabled, the global common subexpres-
	 sion elimination pass eliminates redundant loads that
	 come after stores to the same memory location (both par-
	 tial and full redundancies).

	 Enabled by default when gcse is enabled.

     -floop-optimize
	 Perform loop optimizations: move constant expressions
	 out of loops, simplify exit test conditions and option-
	 ally do strength-reduction and loop unrolling as well.

	 Enabled at levels -O, -O2, -O3, -Os.

     -fcrossjumping
	 Perform cross-jumping transformation. This transforma-
	 tion unifies equivalent code and save code size. The
	 resulting code may or may not perform better than
	 without cross-jumping.

	 Enabled at levels -O, -O2, -O3, -Os.


gcc-3.4.6		   2011-08-18			       69

GCC(1)			       GNU			   GCC(1)

     -fif-conversion
	 Attempt to transform conditional jumps into branch-less
	 equivalents.  This include use of conditional moves,
	 min, max, set flags and abs instructions, and some
	 tricks doable by standard arithmetics.	 The use of con-
	 ditional execution on chips where it is available is
	 controlled by "if-conversion2".

	 Enabled at levels -O, -O2, -O3, -Os.

     -fif-conversion2
	 Use conditional execution (where available) to transform
	 conditional jumps into branch-less equivalents.

	 Enabled at levels -O, -O2, -O3, -Os.

     -fdelete-null-pointer-checks
	 Use global dataflow analysis to identify and eliminate
	 useless checks for null pointers.  The compiler assumes
	 that dereferencing a null pointer would have halted the
	 program.  If a pointer is checked after it has already
	 been dereferenced, it cannot be null.

	 In some environments, this assumption is not true, and
	 programs can safely dereference null pointers.	 Use
	 -fno-delete-null-pointer-checks to disable this optimi-
	 zation for programs which depend on that behavior.

	 Enabled at level -O3.

     -fexpensive-optimizations
	 Perform a number of minor optimizations that are rela-
	 tively expensive.

	 Enabled at levels -O2, -O3, -Os.

     -foptimize-register-move
     -fregmove
	 Attempt to reassign register numbers in move instruc-
	 tions and as operands of other simple instructions in
	 order to maximize the amount of register tying.  This is
	 especially helpful on machines with two-operand instruc-
	 tions.

	 Note -fregmove and -foptimize-register-move are the same
	 optimization.

	 Enabled at levels -O2, -O3, -Os.

     -fdelayed-branch
	 If supported for the target machine, attempt to reorder
	 instructions to exploit instruction slots available

gcc-3.4.6		   2011-08-18			       70

GCC(1)			       GNU			   GCC(1)

	 after delayed branch instructions.

	 Enabled at levels -O, -O2, -O3, -Os.

     -fschedule-insns
	 If supported for the target machine, attempt to reorder
	 instructions to eliminate execution stalls due to
	 required data being unavailable.  This helps machines
	 that have slow floating point or memory load instruc-
	 tions by allowing other instructions to be issued until
	 the result of the load or floating point instruction is
	 required.

	 Enabled at levels -O2, -O3, -Os.

     -fschedule-insns2
	 Similar to -fschedule-insns, but requests an additional
	 pass of instruction scheduling after register allocation
	 has been done.	 This is especially useful on machines
	 with a relatively small number of registers and where
	 memory load instructions take more than one cycle.

	 Enabled at levels -O2, -O3, -Os.

     -fno-sched-interblock
	 Don't schedule instructions across basic blocks.  This
	 is normally enabled by default when scheduling before
	 register allocation, i.e. with -fschedule-insns or at
	 -O2 or higher.

     -fno-sched-spec
	 Don't allow speculative motion of non-load instructions.
	 This is normally enabled by default when scheduling
	 before register allocation, i.e. with -fschedule-insns
	 or at -O2 or higher.

     -fsched-spec-load
	 Allow speculative motion of some load instructions.
	 This only makes sense when scheduling before register
	 allocation, i.e. with -fschedule-insns or at -O2 or
	 higher.

     -fsched-spec-load-dangerous
	 Allow speculative motion of more load instructions.
	 This only makes sense when scheduling before register
	 allocation, i.e. with -fschedule-insns or at -O2 or
	 higher.

     -fsched-stalled-insns=n
	 Define how many insns (if any) can be moved prematurely
	 from the queue of stalled insns into the ready list,
	 during the second scheduling pass.

gcc-3.4.6		   2011-08-18			       71

GCC(1)			       GNU			   GCC(1)

     -fsched-stalled-insns-dep=n
	 Define how many insn groups (cycles) will be examined
	 for a dependency on a stalled insn that is candidate for
	 premature removal from the queue of stalled insns.  Has
	 an effect only during the second scheduling pass, and
	 only if -fsched-stalled-insns is used and its value is
	 not zero.

     -fsched2-use-superblocks
	 When scheduling after register allocation, do use super-
	 block scheduling algorithm.  Superblock scheduling
	 allows motion across basic block boundaries resulting on
	 faster schedules.  This option is experimental, as not
	 all machine descriptions used by GCC model the CPU
	 closely enough to avoid unreliable results from the
	 algorithm.

	 This only makes sense when scheduling after register
	 allocation, i.e. with -fschedule-insns2 or at -O2 or
	 higher.

     -fsched2-use-traces
	 Use -fsched2-use-superblocks algorithm when scheduling
	 after register allocation and additionally perform code
	 duplication in order to increase the size of superblocks
	 using tracer pass.  See -ftracer for details on trace
	 formation.

	 This mode should produce faster but significantly longer
	 programs.  Also without "-fbranch-probabilities" the
	 traces constructed may not match the reality and hurt
	 the performance.  This only makes sense when scheduling
	 after register allocation, i.e. with -fschedule-insns2
	 or at -O2 or higher.

     -fcaller-saves
	 Enable values to be allocated in registers that will be
	 clobbered by function calls, by emitting extra instruc-
	 tions to save and restore the registers around such
	 calls.	 Such allocation is done only when it seems to
	 result in better code than would otherwise be produced.

	 This option is always enabled by default on certain
	 machines, usually those which have no call-preserved
	 registers to use instead.

	 Enabled at levels -O2, -O3, -Os.

     -fmove-all-movables
	 Forces all invariant computations in loops to be moved
	 outside the loop.

gcc-3.4.6		   2011-08-18			       72

GCC(1)			       GNU			   GCC(1)

     -freduce-all-givs
	 Forces all general-induction variables in loops to be
	 strength-reduced.

	 Note: When compiling programs written in Fortran,
	 -fmove-all-movables and -freduce-all-givs are enabled by
	 default when you use the optimizer.

	 These options may generate better or worse code; results
	 are highly dependent on the structure of loops within
	 the source code.

	 These two options are intended to be removed someday,
	 once they have helped determine the efficacy of various
	 approaches to improving loop optimizations.

	 Please contact <gcc@gcc.gnu.org>, and describe how use
	 of these options affects the performance of your produc-
	 tion code. Examples of code that runs slower when these
	 options are enabled are very valuable.

     -fno-peephole
     -fno-peephole2
	 Disable any machine-specific peephole optimizations.
	 The difference between -fno-peephole and -fno-peephole2
	 is in how they are implemented in the compiler; some
	 targets use one, some use the other, a few use both.

	 -fpeephole is enabled by default. -fpeephole2 enabled at
	 levels -O2, -O3, -Os.

     -fno-guess-branch-probability
	 Do not guess branch probabilities using a randomized
	 model.

	 Sometimes GCC will opt to use a randomized model to
	 guess branch probabilities, when none are available from
	 either profiling feedback (-fprofile-arcs) or
	 __builtin_expect.  This means that different runs of the
	 compiler on the same program may produce different
	 object code.

	 In a hard real-time system, people don't want different
	 runs of the compiler to produce code that has different
	 behavior; minimizing non-determinism is of paramount
	 import.  This switch allows users to reduce
	 non-determinism, possibly at the expense of inferior
	 optimization.

	 The default is -fguess-branch-probability at levels -O,
	 -O2, -O3, -Os.


gcc-3.4.6		   2011-08-18			       73

GCC(1)			       GNU			   GCC(1)

     -freorder-blocks
	 Reorder basic blocks in the compiled function in order
	 to reduce number of taken branches and improve code
	 locality.

	 Enabled at levels -O2, -O3.

     -freorder-functions
	 Reorder basic blocks in the compiled function in order
	 to reduce number of taken branches and improve code
	 locality. This is implemented by using special subsec-
	 tions ".text.hot" for most frequently executed functions
	 and ".text.unlikely" for unlikely executed functions.
	 Reordering is done by the linker so object file format
	 must support named sections and linker must place them
	 in a reasonable way.

	 Also profile feedback must be available in to make this
	 option effective.  See -fprofile-arcs for details.

	 Enabled at levels -O2, -O3, -Os.

     -fstrict-aliasing
	 Allows the compiler to assume the strictest aliasing
	 rules applicable to the language being compiled.  For C
	 (and C++), this activates optimizations based on the
	 type of expressions.  In particular, an 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 "unsigned int" can
	 alias an "int", but not a "void*" or a "double".  A
	 character type may alias any other type.

	 Pay special attention to code like this:

		 union a_union {
		   int i;
		   double d;
		 };

		 int f() {
		   a_union t;
		   t.d = 3.0;
		   return t.i;
		 }

	 The practice of reading from a different union member
	 than the one most recently written to (called
	 ``type-punning'') is common.  Even with
	 -fstrict-aliasing, type-punning is allowed, provided the
	 memory is accessed through the union type.  So, the code
	 above will work as expected.  However, this code might

gcc-3.4.6		   2011-08-18			       74

GCC(1)			       GNU			   GCC(1)

	 not:

		 int f() {
		   a_union t;
		   int* ip;
		   t.d = 3.0;
		   ip = &t.i;
		   return *ip;
		 }

	 Every language that wishes to perform language-specific
	 alias analysis should define a function that computes,
	 given an "tree" node, an alias set for the node.  Nodes
	 in different alias sets are not allowed to alias.  For
	 an example, see the C front-end function
	 "c_get_alias_set".

	 Enabled at level -O3.

     -falign-functions
     -falign-functions=n
	 Align the start of functions to the next power-of-two
	 greater than n, skipping up to n bytes.  For instance,
	 -falign-functions=32 aligns functions to the next
	 32-byte boundary, but -falign-functions=24 would align
	 to the next 32-byte boundary only if this can be done by
	 skipping 23 bytes or less.

	 -fno-align-functions and -falign-functions=1 are
	 equivalent and mean that functions will not be aligned.

	 Some assemblers only support this flag when n is a power
	 of two; in that case, it is rounded up.

	 If n is not specified or is zero, use a machine-
	 dependent default.

	 Enabled at levels -O2, -O3.

     -falign-labels
     -falign-labels=n
	 Align all branch targets to a power-of-two boundary,
	 skipping up to n bytes like -falign-functions.	 This
	 option can easily make code slower, because it must
	 insert dummy operations for when the branch target is
	 reached in the usual flow of the code.

	 -fno-align-labels and -falign-labels=1 are equivalent
	 and mean that labels will not be aligned.

	 If -falign-loops or -falign-jumps are applicable and are
	 greater than this value, then their values are used

gcc-3.4.6		   2011-08-18			       75

GCC(1)			       GNU			   GCC(1)

	 instead.

	 If n is not specified or is zero, use a machine-
	 dependent default which is very likely to be 1, meaning
	 no alignment.

	 Enabled at levels -O2, -O3.

     -falign-loops
     -falign-loops=n
	 Align loops to a power-of-two boundary, skipping up to n
	 bytes like -falign-functions.	The hope is that the loop
	 will be executed many times, which will make up for any
	 execution of the dummy operations.

	 -fno-align-loops and -falign-loops=1 are equivalent and
	 mean that loops will not be aligned.

	 If n is not specified or is zero, use a machine-
	 dependent default.

	 Enabled at levels -O2, -O3.

     -falign-jumps
     -falign-jumps=n
	 Align branch targets to a power-of-two boundary, for
	 branch targets where the targets can only be reached by
	 jumping, skipping up to n bytes like -falign-functions.
	 In this case, no dummy operations need be executed.

	 -fno-align-jumps and -falign-jumps=1 are equivalent and
	 mean that loops will not be aligned.

	 If n is not specified or is zero, use a machine-
	 dependent default.

	 Enabled at levels -O2, -O3.

     -frename-registers
	 Attempt to avoid false dependencies in scheduled code by
	 making use of registers left over after register alloca-
	 tion.	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''.

     -fweb
	 Constructs webs as commonly used for register allocation
	 purposes and assign each web individual pseudo register.
	 This allows the register allocation pass to operate on
	 pseudos directly, but also strengthens several other
	 optimization passes, such as CSE, loop optimizer and

gcc-3.4.6		   2011-08-18			       76

GCC(1)			       GNU			   GCC(1)

	 trivial dead code remover.  It can, however, make debug-
	 ging impossible, since variables will no longer stay in
	 a ``home register''.

	 Enabled at level -O3.

     -fno-cprop-registers
	 After register allocation and post-register allocation
	 instruction splitting, we perform a copy-propagation
	 pass to try to reduce scheduling dependencies and occa-
	 sionally eliminate the copy.

	 Disabled at levels -O, -O2, -O3, -Os.

     -fprofile-generate
	 Enable options usually used for instrumenting applica-
	 tion to produce profile useful for later recompilation
	 with profile feedback based optimization.  You must use
	 "-fprofile-generate" both when compiling and when link-
	 ing your program.

	 The following options are enabled: "-fprofile-arcs",
	 "-fprofile-values", "-fvpt".

     -fprofile-use
	 Enable profile feedback directed optimizations, and
	 optimizations generally profitable only with profile
	 feedback available.

	 The following options are enabled:
	 "-fbranch-probabilities", "-fvpt", "-funroll-loops",
	 "-fpeel-loops", "-ftracer".

     The following options control compiler behavior regarding
     floating point arithmetic.	 These options trade off between
     speed and correctness.  All must be specifically enabled.

     -ffloat-store
	 Do not store floating point variables in registers, and
	 inhibit other options that might change whether a float-
	 ing point value is taken from a register or memory.

	 This option prevents undesirable excess precision on
	 machines such as the 68000 where the floating registers
	 (of the 68881) keep more precision than a "double" is
	 supposed to have.  Similarly for the x86 architecture.
	 For most programs, the excess precision does only good,
	 but a few programs rely on the precise definition of
	 IEEE floating point.  Use -ffloat-store for such pro-
	 grams, after modifying them to store all pertinent
	 intermediate computations into variables.

gcc-3.4.6		   2011-08-18			       77

GCC(1)			       GNU			   GCC(1)

     -ffast-math
	 Sets -fno-math-errno, -funsafe-math-optimizations,
	 -fno-trapping-math, -ffinite-math-only,
	 -fno-rounding-math and -fno-signaling-nans.

	 This option causes the preprocessor macro
	 "__FAST_MATH__" to be defined.

	 This option should never be turned on by any -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.

     -fno-math-errno
	 Do not set ERRNO after calling math functions that are
	 executed with a single instruction, e.g., sqrt.  A pro-
	 gram that relies on IEEE exceptions for math error han-
	 dling may want to use this flag for speed while main-
	 taining IEEE arithmetic compatibility.

	 This option should never be turned on by any -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 -fmath-errno.

     -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.  When used at
	 link-time, it may include libraries or startup files
	 that change the default FPU control word or other simi-
	 lar optimizations.

	 This option should never be turned on by any -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 -fno-unsafe-math-optimizations.

     -ffinite-math-only
	 Allow optimizations for floating-point arithmetic that
	 assume that arguments and results are not NaNs or
	 +-Infs.

	 This option should never be turned on by any -O option
	 since it can result in incorrect output for programs
	 which depend on an exact implementation of IEEE or ISO
	 rules/specifications.

gcc-3.4.6		   2011-08-18			       78

GCC(1)			       GNU			   GCC(1)

	 The default is -fno-finite-math-only.

     -fno-trapping-math
	 Compile code assuming that floating-point operations
	 cannot generate user-visible traps.  These traps include
	 division by zero, overflow, underflow, inexact result
	 and invalid operation.	 This option implies
	 -fno-signaling-nans.  Setting this option may allow fas-
	 ter code if one relies on ``non-stop'' IEEE arithmetic,
	 for example.

	 This option should never be turned on by any -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 -ftrapping-math.

     -frounding-math
	 Disable transformations and optimizations that assume
	 default floating point rounding behavior.  This is
	 round-to-zero for all floating point to integer conver-
	 sions, and round-to-nearest for all other arithmetic
	 truncations.  This option should be specified for pro-
	 grams that change the FP rounding mode dynamically, or
	 that may be executed with a non-default rounding mode.
	 This option disables constant folding of floating point
	 expressions at compile-time (which may be affected by
	 rounding mode) and arithmetic transformations that are
	 unsafe in the presence of sign-dependent rounding modes.

	 The default is -fno-rounding-math.

	 This option is experimental and does not currently
	 guarantee to disable all GCC optimizations that are
	 affected by rounding mode. Future versions of GCC may
	 provide finer control of this setting using C99's
	 "FENV_ACCESS" pragma.	This command line option will be
	 used to specify the default state for "FENV_ACCESS".

     -fsignaling-nans
	 Compile code assuming that IEEE signaling NaNs may gen-
	 erate user-visible traps during floating-point opera-
	 tions.	 Setting this option disables optimizations that
	 may change the number of exceptions visible with signal-
	 ing NaNs.  This option implies -ftrapping-math.

	 This option causes the preprocessor macro
	 "__SUPPORT_SNAN__" to be defined.

	 The default is -fno-signaling-nans.


gcc-3.4.6		   2011-08-18			       79

GCC(1)			       GNU			   GCC(1)

	 This option is experimental and does not currently
	 guarantee to disable all GCC optimizations that affect
	 signaling NaN behavior.

     -fsingle-precision-constant
	 Treat floating point constant as single precision con-
	 stant instead of implicitly converting it to double pre-
	 cision constant.

     The following options control optimizations that may improve
     performance, but are not enabled by any -O options.  This
     section includes experimental options that may produce bro-
     ken code.

     -fbranch-probabilities
	 After running a program compiled with -fprofile-arcs,
	 you can compile it a second time using
	 -fbranch-probabilities, to improve optimizations based
	 on the number of times each branch was taken.	When the
	 program compiled with -fprofile-arcs exits it saves arc
	 execution counts to a file called sourcename.gcda for
	 each source file  The information in this data file is
	 very dependent on the structure of the generated code,
	 so you must use the same source code and the same optim-
	 ization options for both compilations.

	 With -fbranch-probabilities, GCC puts a REG_BR_PROB note
	 on each JUMP_INSN and CALL_INSN. These can be used to
	 improve optimization.	Currently, they are only used in
	 one place: in reorg.c, instead of guessing which path a
	 branch is mostly to take, the REG_BR_PROB values are
	 used to exactly determine which path is taken more
	 often.

     -fprofile-values
	 If combined with -fprofile-arcs, it adds code so that
	 some data about values of expressions in the program is
	 gathered.

	 With -fbranch-probabilities, it reads back the data
	 gathered from profiling values of expressions and adds
	 REG_VALUE_PROFILE notes to instructions for their later
	 usage in optimizations.

     -fvpt
	 If combined with -fprofile-arcs, it instructs the com-
	 piler to add a code to gather information about values
	 of expressions.

	 With -fbranch-probabilities, it reads back the data
	 gathered and actually performs the optimizations based
	 on them. Currently the optimizations include

gcc-3.4.6		   2011-08-18			       80

GCC(1)			       GNU			   GCC(1)

	 specialization of division operation using the knowledge
	 about the value of the denominator.

     -fnew-ra
	 Use a graph coloring register allocator.  Currently this
	 option is meant for testing, so we are interested to
	 hear about miscompilations with -fnew-ra.

     -ftracer
	 Perform tail duplication to enlarge superblock size.
	 This transformation simplifies the control flow of the
	 function allowing other optimizations to do better job.

     -funit-at-a-time
	 Parse the whole compilation unit before starting to pro-
	 duce code. This allows some extra optimizations to take
	 place but consumes more memory.

     -funroll-loops
	 Unroll loops whose number of iterations can be deter-
	 mined at compile time or upon entry to the loop.
	 -funroll-loops implies -frerun-cse-after-loop.	 It also
	 turns on complete loop peeling (i.e. complete removal of
	 loops with small constant number of iterations). This
	 option makes code larger, and may or may not make it run
	 faster.

     -funroll-all-loops
	 Unroll all loops, even if their number of iterations is
	 uncertain when the loop is entered.  This usually makes
	 programs run more slowly. -funroll-all-loops implies the
	 same options as -funroll-loops.

     -fpeel-loops
	 Peels the loops for that there is enough information
	 that they do not roll much (from profile feedback).  It
	 also turns on complete loop peeling (i.e. complete remo-
	 val of loops with small constant number of iterations).

     -funswitch-loops
	 Move branches with loop invariant conditions out of the
	 loop, with duplicates of the loop on both branches
	 (modified according to result of the condition).

     -fold-unroll-loops
	 Unroll loops whose number of iterations can be deter-
	 mined at compile time or upon entry to the loop, using
	 the old loop unroller whose loop recognition is based on
	 notes from frontend.  -fold-unroll-loops implies both
	 -fstrength-reduce and -frerun-cse-after-loop.	This
	 option makes code larger, and may or may not make it run
	 faster.

gcc-3.4.6		   2011-08-18			       81

GCC(1)			       GNU			   GCC(1)

     -fold-unroll-all-loops
	 Unroll all loops, even if their number of iterations is
	 uncertain when the loop is entered. This is done using
	 the old loop unroller whose loop recognition is based on
	 notes from frontend.  This usually makes programs run
	 more slowly. -fold-unroll-all-loops implies the same
	 options as -fold-unroll-loops.

     -funswitch-loops
	 Move branches with loop invariant conditions out of the
	 loop, with duplicates of the loop on both branches
	 (modified according to result of the condition).

     -funswitch-loops
	 Move branches with loop invariant conditions out of the
	 loop, with duplicates of the loop on both branches
	 (modified according to result of the condition).

     -fprefetch-loop-arrays
	 If supported by the target machine, generate instruc-
	 tions to prefetch memory to improve the performance of
	 loops that access large arrays.

	 Disabled at level -Os.

     -ffunction-sections
     -fdata-sections
	 Place each function or data item into its own section in
	 the output file if the target supports arbitrary sec-
	 tions.	 The name of the function or the name of the data
	 item determines the section's name in the output file.

	 Use these options on systems where the linker can per-
	 form optimizations to improve locality of reference in
	 the instruction space.	 Most systems using the ELF
	 object format and SPARC processors running Solaris 2
	 have linkers with such optimizations.	AIX may have
	 these optimizations in the future.

	 Only use these options when there are significant bene-
	 fits from doing so.  When you specify these options, the
	 assembler and linker will create larger object and exe-
	 cutable files and will also be slower. You will not be
	 able to use "gprof" on all systems if you specify this
	 option and you may have problems with debugging if you
	 specify both this option and -g.

     -fbranch-target-load-optimize
	 Perform branch target register load optimization before
	 prologue / epilogue threading. The use of target regis-
	 ters can typically be exposed only during reload, thus
	 hoisting loads out of loops and doing inter-block

gcc-3.4.6		   2011-08-18			       82

GCC(1)			       GNU			   GCC(1)

	 scheduling needs a separate optimization pass.

     -fbranch-target-load-optimize2
	 Perform branch target register load optimization after
	 prologue / epilogue threading.

     --param name=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 --param
	 option.

	 The names of specific parameters, and the meaning of the
	 values, are tied to the internals of the compiler, and
	 are subject to change without notice in future releases.

	 In each case, the value is an integer.	 The allowable
	 choices for name are given in the following table:

	 max-crossjump-edges
	     The maximum number of incoming edges to consider for
	     crossjumping. The algorithm used by -fcrossjumping
	     is O(N^2) in the number of edges incoming to each
	     block.  Increasing values mean more aggressive
	     optimization, making the compile time increase with
	     probably small improvement in executable size.

	 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 improve-
	     ment in executable run time.

	 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.

	 max-gcse-memory
	     The approximate maximum amount of memory that will
	     be allocated in order to perform the global common

gcc-3.4.6		   2011-08-18			       83

GCC(1)			       GNU			   GCC(1)

	     subexpression elimination optimization.  If more
	     memory than specified is required, the optimization
	     will not be done.

	 max-gcse-passes
	     The maximum number of passes of GCSE to run.

	 max-pending-list-length
	     The maximum number of pending dependencies schedul-
	     ing will allow before flushing the current state and
	     starting over.  Large functions with few branches or
	     calls can create excessively large lists which need-
	     lessly consume memory and resources.

	 max-inline-insns-single
	     Several parameters control the tree inliner used in
	     gcc. This number sets the maximum number of instruc-
	     tions (counted in GCC's internal representation) in
	     a single function that the tree inliner will con-
	     sider for inlining.  This only affects functions
	     declared inline and methods implemented in a class
	     declaration (C++). The default value is 500.

	 max-inline-insns-auto
	     When you use -finline-functions (included in -O3), a
	     lot of functions that would otherwise not be con-
	     sidered for inlining by the compiler will be inves-
	     tigated.  To those functions, a different (more res-
	     trictive) limit compared to functions declared
	     inline can be applied. The default value is 100.

	 large-function-insns
	     The limit specifying really large functions.  For
	     functions greater than this limit inlining is con-
	     strained by --param large-function-growth. This
	     parameter is useful primarily to avoid extreme com-
	     pilation time caused by non-linear algorithms used
	     by the backend. This parameter is ignored when
	     -funit-at-a-time is not used. The default value is
	     3000.

	 large-function-growth
	     Specifies maximal growth of large function caused by
	     inlining in percents. This parameter is ignored when
	     -funit-at-a-time is not used. The default value is
	     200.

	 inline-unit-growth
	     Specifies maximal overall growth of the compilation
	     unit caused by inlining. This parameter is ignored
	     when -funit-at-a-time is not used. The default value
	     is 150.

gcc-3.4.6		   2011-08-18			       84

GCC(1)			       GNU			   GCC(1)

	 max-inline-insns-rtl
	     For languages that use the RTL inliner (this happens
	     at a later stage than tree inlining), you can set
	     the maximum allowable size (counted in RTL instruc-
	     tions) for the RTL inliner with this parameter. The
	     default value is 600.

	 max-unrolled-insns
	     The maximum number of instructions that a loop
	     should have if that loop is unrolled, and if the
	     loop is unrolled, it determines how many times the
	     loop code is unrolled.

	 max-average-unrolled-insns
	     The maximum number of instructions biased by proba-
	     bilities of their execution that a loop should have
	     if that loop is unrolled, and if the loop is
	     unrolled, it determines how many times the loop code
	     is unrolled.

	 max-unroll-times
	     The maximum number of unrollings of a single loop.

	 max-peeled-insns
	     The maximum number of instructions that a loop
	     should have if that loop is peeled, and if the loop
	     is peeled, it determines how many times the loop
	     code is peeled.

	 max-peel-times
	     The maximum number of peelings of a single loop.

	 max-completely-peeled-insns
	     The maximum number of insns of a completely peeled
	     loop.

	 max-completely-peel-times
	     The maximum number of iterations of a loop to be
	     suitable for complete peeling.

	 max-unswitch-insns
	     The maximum number of insns of an unswitched loop.

	 max-unswitch-level
	     The maximum number of branches unswitched in a sin-
	     gle loop.

	 hot-bb-count-fraction
	     Select fraction of the maximal count of repetitions
	     of basic block in program given basic block needs to
	     have to be considered hot.

gcc-3.4.6		   2011-08-18			       85

GCC(1)			       GNU			   GCC(1)

	 hot-bb-frequency-fraction
	     Select fraction of the maximal frequency of execu-
	     tions of basic block in function given basic block
	     needs to have to be considered hot

	 tracer-dynamic-coverage
	 tracer-dynamic-coverage-feedback
	     This value is used to limit superblock formation
	     once the given percentage of executed instructions
	     is covered.  This limits unnecessary code size
	     expansion.

	     The tracer-dynamic-coverage-feedback is used only
	     when profile feedback is available.  The real pro-
	     files (as opposed to statically estimated ones) are
	     much less balanced allowing the threshold to be
	     larger value.

	 tracer-max-code-growth
	     Stop tail duplication once code growth has reached
	     given percentage.	This is rather hokey argument, as
	     most of the duplicates will be eliminated later in
	     cross jumping, so it may be set to much higher
	     values than is the desired code growth.

	 tracer-min-branch-ratio
	     Stop reverse growth when the reverse probability of
	     best edge is less than this threshold (in percent).

	 tracer-min-branch-ratio
	 tracer-min-branch-ratio-feedback
	     Stop forward growth if the best edge do have proba-
	     bility lower than this threshold.

	     Similarly to tracer-dynamic-coverage two values are
	     present, one for compilation for profile feedback
	     and one for compilation without.  The value for com-
	     pilation with profile feedback needs to be more con-
	     servative (higher) in order to make tracer effec-
	     tive.

	 max-cse-path-length
	     Maximum number of basic blocks on path that cse con-
	     siders.

	 max-last-value-rtl
	     The maximum size measured as number of RTLs that can
	     be recorded in an expression in combiner for a
	     pseudo register as last known value of that regis-
	     ter.  The default is 10000.

	 ggc-min-expand

gcc-3.4.6		   2011-08-18			       86

GCC(1)			       GNU			   GCC(1)

	     GCC uses a garbage collector to manage its own
	     memory allocation.	 This parameter specifies the
	     minimum percentage by which the garbage collector's
	     heap should be allowed to expand between collec-
	     tions. Tuning this may improve compilation speed; it
	     has no effect on code generation.

	     The default is 30% + 70% * (RAM/1GB) with an upper
	     bound of 100% when RAM >= 1GB.  If "getrlimit" is
	     available, the notion of "RAM" is the smallest of
	     actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.
	     If GCC is not able to calculate RAM on a particular
	     platform, the lower bound of 30% is used.	Setting
	     this parameter and ggc-min-heapsize to zero causes a
	     full collection to occur at every opportunity.  This
	     is extremely slow, but can be useful for debugging.

	 ggc-min-heapsize
	     Minimum size of the garbage collector's heap before
	     it begins bothering to collect garbage.  The first
	     collection occurs after the heap expands by ggc-
	     min-expand% beyond ggc-min-heapsize.  Again, tuning
	     this may improve compilation speed, and has no
	     effect on code generation.

	     The default is RAM/8, with a lower bound of 4096
	     (four megabytes) and an upper bound of 131072 (128
	     megabytes).  If "getrlimit" is available, the notion
	     of "RAM" is the smallest of actual RAM, RLIMIT_RSS,
	     RLIMIT_DATA and RLIMIT_AS.	 If GCC is not able to
	     calculate RAM on a particular platform, the lower
	     bound is used.  Setting this parameter very large
	     effectively disables garbage collection.  Setting
	     this parameter and ggc-min-expand to zero causes a
	     full collection to occur at every opportunity.

	 max-reload-search-insns
	     The maximum number of instruction reload should look
	     backward for equivalent register.	Increasing values
	     mean more aggressive optimization, making the com-
	     pile time increase with probably slightly better
	     performance.  The default value is 100.

	 max-cselib-memory-location
	     The maximum number of memory locations cselib should
	     take into acount. Increasing values mean more
	     aggressive optimization, making the compile time
	     increase with probably slightly better performance.
	     The default value is 500.

	 reorder-blocks-duplicate
	 reorder-blocks-duplicate-feedback

gcc-3.4.6		   2011-08-18			       87

GCC(1)			       GNU			   GCC(1)

	     Used by basic block reordering pass to decide
	     whether to use unconditional branch or duplicate the
	     code on its destination.  Code is duplicated when
	     its estimated size is smaller than this value multi-
	     plied by the estimated size of unconditional jump in
	     the hot spots of the program.

	     The reorder-block-duplicate-feedback is used only
	     when profile feedback is available and may be set to
	     higher values than reorder-block-duplicate since
	     information about the hot spots is more accurate.

     Options Controlling the Preprocessor

     These options control the C preprocessor, which is run on
     each C source file before actual compilation.

     If you use the -E option, nothing is done except preprocess-
     ing. Some of these options make sense only together with -E
     because they cause the preprocessor output to be unsuitable
     for actual compilation.

     -Wp,option
	 You can use -Wp,option to bypass the compiler driver and
	 pass option directly through to the preprocessor.  If
	 option contains commas, it is split into multiple
	 options at the commas.	 However, many options are modi-
	 fied, translated or interpreted by the compiler driver
	 before being passed to the preprocessor, and -Wp forci-
	 bly bypasses this phase.  The preprocessor's direct
	 interface is undocumented and subject to change, so
	 whenever possible you should avoid using -Wp and let the
	 driver handle the options instead.

     -Xpreprocessor option
	 Pass option as an option to the preprocessor.	You can
	 use this to supply system-specific preprocessor options
	 which GCC does not know how to recognize.

	 If you want to pass an option that takes an argument,
	 you must use -Xpreprocessor twice, once for the option
	 and once for the argument.

     -D name
	 Predefine name as a macro, with definition 1.

     -D name=definition
	 Predefine name as a macro, with definition definition.
	 The contents of definition are tokenized and processed
	 as if they appeared during translation phase three in a
	 #define directive.  In particular, the definition will
	 be truncated by embedded newline characters.

gcc-3.4.6		   2011-08-18			       88

GCC(1)			       GNU			   GCC(1)

	 If you are invoking the preprocessor from a shell or
	 shell-like program you may need to use the shell's quot-
	 ing syntax to protect characters such as spaces that
	 have a meaning in the shell syntax.

	 If you wish to define a function-like macro on the com-
	 mand line, write its argument list with surrounding
	 parentheses before the equals sign (if any).
	 Parentheses are meaningful to most shells, so you will
	 need to quote the option.  With sh and csh,
	 -D'name(args...)=definition' works.

	 -D and -U options are processed in the order they are
	 given on the command line.  All -imacros file and
	 -include file options are processed after all -D and -U
	 options.

     -U name
	 Cancel any previous definition of name, either built in
	 or provided with a -D option.

     -undef
	 Do not predefine any system-specific or GCC-specific
	 macros.  The standard predefined macros remain defined.

     -I dir
	 Add the directory dir to the list of directories to be
	 searched for header files. Directories named by -I are
	 searched before the standard system include directories.
	 If the directory dir is a standard system include direc-
	 tory, the option is ignored to ensure that the default
	 search order for system directories and the special
	 treatment of system headers are not defeated .

     -o file
	 Write output to file.	This is the same as specifying
	 file as the second non-option argument to cpp.	 gcc has
	 a different interpretation of a second non-option argu-
	 ment, so you must use -o to specify the output file.

     -Wall
	 Turns on all optional warnings which are desirable for
	 normal code. At present this is -Wcomment, -Wtrigraphs,
	 -Wmultichar and a warning about integer promotion caus-
	 ing a change of sign in "#if" expressions.  Note that
	 many of the preprocessor's warnings are on by default
	 and have no options to control them.

     -Wcomment
     -Wcomments
	 Warn whenever a comment-start sequence /* appears in a
	 /* comment, or whenever a backslash-newline appears in a

gcc-3.4.6		   2011-08-18			       89

GCC(1)			       GNU			   GCC(1)

	 // comment. (Both forms have the same effect.)

     -Wtrigraphs
	 @anchor{Wtrigraphs} Most trigraphs in comments cannot
	 affect the meaning of the program. However, a trigraph
	 that would form an escaped newline (??/ at the end of a
	 line) can, by changing where the comment begins or ends.
	 Therefore, only trigraphs that would form escaped new-
	 lines produce warnings inside a comment.

	 This option is implied by -Wall.  If -Wall is not given,
	 this option is still enabled unless trigraphs are
	 enabled.  To get trigraph conversion without warnings,
	 but get the other -Wall warnings, use -trigraphs -Wall
	 -Wno-trigraphs.

     -Wtraditional
	 Warn about certain constructs that behave differently in
	 traditional and ISO C.	 Also warn about ISO C constructs
	 that have no traditional C equivalent, and problematic
	 constructs which should be avoided.

     -Wimport
	 Warn the first time #import is used.

     -Wundef
	 Warn whenever an identifier which is not a macro is
	 encountered in an #if directive, outside of defined.
	 Such identifiers are replaced with zero.

     -Wunused-macros
	 Warn about macros defined in the main file that are
	 unused.  A macro is used if it is expanded or tested for
	 existence at least once. The preprocessor will also warn
	 if the macro has not been used at the time it is rede-
	 fined or undefined.

	 Built-in macros, macros defined on the command line, and
	 macros defined in include files are not warned about.

	 Note: If a macro is actually used, but only used in
	 skipped conditional blocks, then CPP will report it as
	 unused.  To avoid the warning in such a case, you might
	 improve the scope of the macro's definition by, for
	 example, moving it into the first skipped block. Alter-
	 natively, you could provide a dummy use with something
	 like:

		 #if defined the_macro_causing_the_warning
		 #endif

     -Wendif-labels


gcc-3.4.6		   2011-08-18			       90

GCC(1)			       GNU			   GCC(1)

	 Warn whenever an #else or an #endif are followed by
	 text. This usually happens in code of the form

		 #if FOO
		 ...
		 #else FOO
		 ...
		 #endif FOO

	 The second and third "FOO" should be in comments, but
	 often are not in older programs.  This warning is on by
	 default.

     -Werror
	 Make all warnings into hard errors.  Source code which
	 triggers warnings will be rejected.

     -Werror-maybe-reset
	 Act like -Wno-error if the GCC_NO_WERROR environment
	 variable is set to anything other than 0 or empty.

     -Wsystem-headers
	 Issue warnings for code in system headers.  These are
	 normally unhelpful in finding bugs in your own code,
	 therefore suppressed.	If you are responsible for the
	 system library, you may want to see them.

     -w	 Suppress all warnings, including those which GNU CPP
	 issues by default.

     -pedantic
	 Issue all the mandatory diagnostics listed in the C
	 standard.  Some of them are left out by default, since
	 they trigger frequently on harmless code.

     -pedantic-errors
	 Issue all the mandatory diagnostics, and make all manda-
	 tory diagnostics into errors.	This includes mandatory
	 diagnostics that GCC issues without -pedantic but treats
	 as warnings.

     -M	 Instead of outputting the result of preprocessing, out-
	 put a rule suitable for make describing the dependencies
	 of the main source file.  The preprocessor outputs one
	 make rule containing the object file name for that
	 source file, a colon, and the names of all the included
	 files, including those coming from -include or -imacros
	 command line options.

	 Unless specified explicitly (with -MT or -MQ), the
	 object file name consists of the basename of the source
	 file with any suffix replaced with object file suffix.

gcc-3.4.6		   2011-08-18			       91

GCC(1)			       GNU			   GCC(1)

	 If there are many included files then the rule is split
	 into several lines using \-newline. The rule has no com-
	 mands.

	 This option does not suppress the preprocessor's debug
	 output, such as -dM.  To avoid mixing such debug output
	 with the dependency rules you should explicitly specify
	 the dependency output file with -MF, or use an environ-
	 ment variable like DEPENDENCIES_OUTPUT.  Debug output
	 will still be sent to the regular output stream as nor-
	 mal.

	 Passing -M to the driver implies -E, and suppresses
	 warnings with an implicit -w.

     -MM Like -M but do not mention header files that are found
	 in system header directories, nor header files that are
	 included, directly or indirectly, from such a header.

	 This implies that the choice of angle brackets or double
	 quotes in an #include directive does not in itself
	 determine whether that header will appear in -MM depen-
	 dency output.	This is a slight change in semantics from
	 GCC versions 3.0 and earlier.

	 @anchor{dashMF}

     -MF file
	 When used with -M or -MM, specifies a file to write the
	 dependencies to.  If no -MF switch is given the prepro-
	 cessor sends the rules to the same place it would have
	 sent preprocessed output.

	 When used with the driver options -MD or -MMD, -MF over-
	 rides the default dependency output file.

     -MG In conjunction with an option such as -M requesting
	 dependency generation, -MG assumes missing header files
	 are generated files and adds them to the dependency list
	 without raising an error.  The dependency filename is
	 taken directly from the "#include" directive without
	 prepending any path.  -MG also suppresses preprocessed
	 output, as a missing header file renders this useless.

	 This feature is used in automatic updating of makefiles.

     -MP This option instructs CPP to add a phony target for each
	 dependency other than the main file, causing each to
	 depend on nothing.  These dummy rules work around errors
	 make gives if you remove header files without updating
	 the Makefile to match.

gcc-3.4.6		   2011-08-18			       92

GCC(1)			       GNU			   GCC(1)

	 This is typical output:

		 test.o: test.c test.h

		 test.h:

     -MT target
	 Change the target of the rule emitted by dependency gen-
	 eration.  By default CPP takes the name of the main
	 input file, including any path, deletes any file suffix
	 such as .c, and appends the platform's usual object suf-
	 fix.  The result is the target.

	 An -MT option will set the target to be exactly the
	 string you specify.  If you want multiple targets, you
	 can specify them as a single argument to -MT, or use
	 multiple -MT options.

	 For example, -MT '$(objpfx)foo.o' might give

		 $(objpfx)foo.o: foo.c

     -MQ target
	 Same as -MT, but it quotes any characters which are spe-
	 cial to Make.	-MQ '$(objpfx)foo.o' gives

		 $$(objpfx)foo.o: foo.c

	 The default target is automatically quoted, as if it
	 were given with -MQ.

     -MD -MD is equivalent to -M -MF file, except that -E is not
	 implied.  The driver determines file based on whether an
	 -o option is given.  If it is, the driver uses its argu-
	 ment but with a suffix of .d, otherwise it take the
	 basename of the input file and applies a .d suffix.

	 If -MD is used in conjunction with -E, any -o switch is
	 understood to specify the dependency output file (but
	 @pxref{dashMF,,-MF}), but if used without -E, each -o is
	 understood to specify a target object file.

	 Since -E is not implied, -MD can be used to generate a
	 dependency output file as a side-effect of the compila-
	 tion process.

     -MMD
	 Like -MD except mention only user header files, not sys-
	 tem -header files.

     -fpch-deps
	 When using precompiled headers, this flag will cause the

gcc-3.4.6		   2011-08-18			       93

GCC(1)			       GNU			   GCC(1)

	 dependency-output flags to also list the files from the
	 precompiled header's dependencies.  If not specified
	 only the precompiled header would be listed and not the
	 files that were used to create it because those files
	 are not consulted when a precompiled header is used.

     -x c
     -x c++
     -x objective-c
     -x assembler-with-cpp
	 Specify the source language: C, C++, Objective-C, or
	 assembly.  This has nothing to do with standards confor-
	 mance or extensions; it merely selects which base syntax
	 to expect.  If you give none of these options, cpp will
	 deduce the language from the extension of the source
	 file: .c, .cc, .m, or .S.  Some other common extensions
	 for C++ and assembly are also recognized.  If cpp does
	 not recognize the extension, it will treat the file as
	 C; this is the most generic mode.

	 Note: Previous versions of cpp accepted a -lang option
	 which selected both the language and the standards con-
	 formance level. This option has been removed, because it
	 conflicts with the -l option.

     -std=standard
     -ansi
	 Specify the standard to which the code should conform.
	 Currently CPP knows about C and C++ standards; others
	 may be added in the future.

	 standard may be one of:

	 "iso9899:1990"
	 "c89"
	     The ISO C standard from 1990.  c89 is the customary
	     shorthand for this version of the standard.

	     The -ansi option is equivalent to -std=c89.

	 "iso9899:199409"
	     The 1990 C standard, as amended in 1994.

	 "iso9899:1999"
	 "c99"
	 "iso9899:199x"
	 "c9x"
	     The revised ISO C standard, published in December
	     1999.  Before publication, this was known as C9X.

	 "gnu89"
	     The 1990 C standard plus GNU extensions.  This is

gcc-3.4.6		   2011-08-18			       94

GCC(1)			       GNU			   GCC(1)

	     the default.

	 "gnu99"
	 "gnu9x"
	     The 1999 C standard plus GNU extensions.

	 "c++98"
	     The 1998 ISO C++ standard plus amendments.

	 "gnu++98"
	     The same as -std=c++98 plus GNU extensions.  This is
	     the default for C++ code.

     -I- Split the include path.  Any directories specified with
	 -I options before -I- are searched only for headers
	 requested with "#include "file""; they are not searched
	 for "#include <file>".	 If additional directories are
	 specified with -I options after the -I-, those direc-
	 tories are searched for all #include directives.

	 In addition, -I- inhibits the use of the directory of
	 the current file directory as the first search directory
	 for "#include "file"".

     -nostdinc
	 Do not search the standard system directories for header
	 files. Only the directories you have specified with -I
	 options (and the directory of the current file, if
	 appropriate) are searched.

     -nostdinc++
	 Do not search for header files in the C++-specific stan-
	 dard directories, but do still search the other standard
	 directories.  (This option is used when building the C++
	 library.)

     -include file
	 Process file as if "#include "file"" appeared as the
	 first line of the primary source file.	 However, the
	 first directory searched for file is the preprocessor's
	 working directory instead of the directory containing
	 the main source file.	If not found there, it is
	 searched for in the remainder of the "#include "...""
	 search chain as normal.

	 If multiple -include options are given, the files are
	 included in the order they appear on the command line.

     -imacros file
	 Exactly like -include, except that any output produced
	 by scanning file is thrown away.  Macros it defines
	 remain defined. This allows you to acquire all the

gcc-3.4.6		   2011-08-18			       95

GCC(1)			       GNU			   GCC(1)

	 macros from a header without also processing its
	 declarations.

	 All files specified by -imacros are processed before all
	 files specified by -include.

     -idirafter dir
	 Search dir for header files, but do it after all direc-
	 tories specified with -I and the standard system direc-
	 tories have been exhausted.  dir is treated as a system
	 include directory.

     -iprefix prefix
	 Specify prefix as the prefix for subsequent -iwithprefix
	 options.  If the prefix represents a directory, you
	 should include the final /.

     -iwithprefix dir
     -iwithprefixbefore dir
	 Append dir to the prefix specified previously with
	 -iprefix, and add the resulting directory to the include
	 search path.  -iwithprefixbefore puts it in the same
	 place -I would; -iwithprefix puts it where -idirafter
	 would.

     -isystem dir
	 Search dir for header files, after all directories
	 specified by -I but before the standard system direc-
	 tories.  Mark it as a system directory, so that it gets
	 the same special treatment as is applied to the standard
	 system directories.

     -fdollars-in-identifiers
	 @anchor{fdollars-in-identifiers} Accept $ in identif-
	 iers.

     -fpreprocessed
	 Indicate to the preprocessor that the input file has
	 already been preprocessed.  This suppresses things like
	 macro expansion, trigraph conversion, escaped newline
	 splicing, and processing of most directives. The prepro-
	 cessor still recognizes and removes comments, so that
	 you can pass a file preprocessed with -C to the compiler
	 without problems.  In this mode the integrated prepro-
	 cessor is little more than a tokenizer for the front
	 ends.

	 -fpreprocessed is implicit if the input file has one of
	 the extensions .i, .ii or .mi.	 These are the extensions
	 that GCC uses for preprocessed files created by
	 -save-temps.


gcc-3.4.6		   2011-08-18			       96

GCC(1)			       GNU			   GCC(1)

     -ftabstop=width
	 Set the distance between tab stops.  This helps the
	 preprocessor report correct column numbers in warnings
	 or errors, even if tabs appear on the line.  If the
	 value is less than 1 or greater than 100, the option is
	 ignored.  The default is 8.

     -fexec-charset=charset
	 Set the execution character set, used for string and
	 character constants.  The default is UTF-8.  charset can
	 be any encoding supported by the system's "iconv"
	 library routine.

     -fwide-exec-charset=charset
	 Set the wide execution character set, used for wide
	 string and character constants.  The default is UTF-32
	 or UTF-16, whichever corresponds to the width of
	 "wchar_t".  As with -ftarget-charset, charset can be any
	 encoding supported by the system's "iconv" library rou-
	 tine; however, you will have problems with encodings
	 that do not fit exactly in "wchar_t".

     -finput-charset=charset
	 Set the input character set, used for translation from
	 the character set of the input file to the source char-
	 acter set used by GCC. If the locale does not specify,
	 or GCC cannot get this information from the locale, the
	 default is UTF-8. This can be overridden by either the
	 locale or this command line option. Currently the com-
	 mand line option takes precedence if there's a conflict.
	 charset can be any encoding supported by the system's
	 "iconv" library routine.

     -fworking-directory
	 Enable generation of linemarkers in the preprocessor
	 output that will let the compiler know the current work-
	 ing directory at the time of preprocessing.  When this
	 option is enabled, the preprocessor will emit, after the
	 initial linemarker, a second linemarker with the current
	 working directory followed by two slashes.  GCC will use
	 this directory, when it's present in the preprocessed
	 input, as the directory emitted as the current working
	 directory in some debugging information formats.  This
	 option is implicitly enabled if debugging information is
	 enabled, but this can be inhibited with the negated form
	 -fno-working-directory.  If the -P flag is present in
	 the command line, this option has no effect, since no
	 "#line" directives are emitted whatsoever.

     -fno-show-column
	 Do not print column numbers in diagnostics.  This may be
	 necessary if diagnostics are being scanned by a program

gcc-3.4.6		   2011-08-18			       97

GCC(1)			       GNU			   GCC(1)

	 that does not understand the column numbers, such as
	 dejagnu.

     -A predicate=answer
	 Make an assertion with the predicate predicate and
	 answer answer.	 This form is preferred to the older form
	 -A predicate(answer), which is still supported, because
	 it does not use shell special characters.

     -A -predicate=answer
	 Cancel an assertion with the predicate predicate and
	 answer answer.

     -dCHARS
	 CHARS is a sequence of one or more of the following
	 characters, and must not be preceded by a space.  Other
	 characters are interpreted by the compiler proper, or
	 reserved for future versions of GCC, and so are silently
	 ignored.  If you specify characters whose behavior con-
	 flicts, the result is undefined.

	 M   Instead of the normal output, generate a list of
	     #define directives for all the macros defined during
	     the execution of the preprocessor, including prede-
	     fined macros.  This gives you a way of finding out
	     what is predefined in your version of the preproces-
	     sor. Assuming you have no file foo.h, the command

		     touch foo.h; cpp -dM foo.h

	     will show all the predefined macros.

	 D   Like M except in two respects: it does not include
	     the predefined macros, and it outputs both the
	     #define directives and the result of preprocessing.
	     Both kinds of output go to the standard output file.

	 N   Like D, but emit only the macro names, not their
	     expansions.

	 I   Output #include directives in addition to the result
	     of preprocessing.

     -P	 Inhibit generation of linemarkers in the output from the
	 preprocessor. This might be useful when running the
	 preprocessor on something that is not C code, and will
	 be sent to a program which might be confused by the
	 linemarkers.

     -C	 Do not discard comments.  All comments are passed
	 through to the output file, except for comments in pro-
	 cessed directives, which are deleted along with the

gcc-3.4.6		   2011-08-18			       98

GCC(1)			       GNU			   GCC(1)

	 directive.

	 You should be prepared for side effects when using -C;
	 it causes the preprocessor to treat comments as tokens
	 in their own right. For example, comments appearing at
	 the start of what would be a directive line have the
	 effect of turning that line into an ordinary source
	 line, since the first token on the line is no longer a
	 #.

     -CC Do not discard comments, including during macro expan-
	 sion.	This is like -C, except that comments contained
	 within macros are also passed through to the output file
	 where the macro is expanded.

	 In addition to the side-effects of the -C option, the
	 -CC option causes all C++-style comments inside a macro
	 to be converted to C-style comments.  This is to prevent
	 later use of that macro from inadvertently commenting
	 out the remainder of the source line.

	 The -CC option is generally used to support lint com-
	 ments.

     -traditional-cpp
	 Try to imitate the behavior of old-fashioned C prepro-
	 cessors, as opposed to ISO C preprocessors.

     -trigraphs
	 Process trigraph sequences. These are three-character
	 sequences, all starting with ??, that are defined by ISO
	 C to stand for single characters.  For example, ??/
	 stands for \, so '??/n' is a character constant for a
	 newline.  By default, GCC ignores trigraphs, but in
	 standard-conforming modes it converts them.  See the
	 -std and -ansi options.

	 The nine trigraphs and their replacements are

		 Trigraph:	 ??(  ??)  ??<	??>  ??=  ??/  ??'  ??!	 ??-
		 Replacement:	   [	]    {	  }    #    \	 ^    |	   ~

     -remap
	 Enable special code to work around file systems which
	 only permit very short file names, such as MS-DOS.

     --help
     --target-help
	 Print text describing all the command line options
	 instead of preprocessing anything.

     -v	 Verbose mode.	Print out GNU CPP's version number at the

gcc-3.4.6		   2011-08-18			       99

GCC(1)			       GNU			   GCC(1)

	 beginning of execution, and report the final form of the
	 include path.

     -H	 Print the name of each header file used, in addition to
	 other normal activities.  Each name is indented to show
	 how deep in the #include stack it is.	Precompiled
	 header files are also printed, even if they are found to
	 be invalid; an invalid precompiled header file is
	 printed with ...x and a valid one with ...! .

     -version
     --version
	 Print out GNU CPP's version number.  With one dash,
	 proceed to preprocess as normal.  With two dashes, exit
	 immediately.

     Passing Options to the Assembler

     You can pass options to the assembler.

     -Wa,option
	 Pass option as an option to the assembler.  If option
	 contains commas, it is split into multiple options at
	 the commas.

     -Xassembler option
	 Pass option as an option to the assembler.  You can use
	 this to supply system-specific assembler options which
	 GCC does not know how to recognize.

	 If you want to pass an option that takes an argument,
	 you must use -Xassembler twice, once for the option and
	 once for the argument.

     Options for Linking

     These options come into play when the compiler links object
     files into an executable output file.  They are meaningless
     if the compiler is not doing a link step.

     object-file-name
	 A file name that does not end in a special recognized
	 suffix is considered to name an object file or library.
	 (Object files are distinguished from libraries by the
	 linker according to the file contents.)  If linking is
	 done, these object files are used as input to the
	 linker.

     -c
     -S
     -E	 If any of these options is used, then the linker is not
	 run, and object file names should not be used as

gcc-3.4.6		   2011-08-18			      100

GCC(1)			       GNU			   GCC(1)

	 arguments.

     -llibrary
     -l library
	 Search the library named library when linking.	 (The
	 second alternative with the library as a separate argu-
	 ment is only for POSIX compliance and is not recom-
	 mended.)

	 It makes a difference where in the command you write
	 this option; the linker searches and processes libraries
	 and object files in the order they are specified.  Thus,
	 foo.o -lz bar.o searches library z after file foo.o but
	 before bar.o.	If bar.o refers to functions in z, those
	 functions may not be loaded.

	 The linker searches a standard list of directories for
	 the library, which is actually a file named
	 liblibrary.a.	The linker then uses this file as if it
	 had been specified precisely by name.

	 The directories searched include several standard system
	 directories plus any that you specify with -L.

	 Normally the files found this way are library
	 files---archive files whose members are object files.
	 The linker handles an archive file by scanning through
	 it for members which define symbols that have so far
	 been referenced but not defined.  But if the file that
	 is found is an ordinary object file, it is linked in the
	 usual fashion.	 The only difference between using an -l
	 option and specifying a file name is that -l surrounds
	 library with lib and .a and searches several direc-
	 tories.

     -lobjc
	 You need this special case of the -l option in order to
	 link an Objective-C program.

     -nostartfiles
	 Do not use the standard system startup files when link-
	 ing. The standard system libraries are used normally,
	 unless -nostdlib or -nodefaultlibs is used.

     -nodefaultlibs
	 Do not use the standard system libraries when linking.
	 Only the libraries you specify will be passed to the
	 linker. The standard startup files are used normally,
	 unless -nostartfiles is used.	The compiler may generate
	 calls to memcmp, memset, and memcpy for System V (and
	 ISO C) environments or to bcopy and bzero for BSD
	 environments.	These entries are usually resolved by

gcc-3.4.6		   2011-08-18			      101

GCC(1)			       GNU			   GCC(1)

	 entries in libc.  These entry points should be supplied
	 through some other mechanism when this option is speci-
	 fied.

     -nostdlib
	 Do not use the standard system startup files or
	 libraries when linking. No startup files and only the
	 libraries you specify will be passed to the linker.  The
	 compiler may generate calls to memcmp, memset, and
	 memcpy for System V (and ISO C) environments or to bcopy
	 and bzero for BSD environments.  These entries are usu-
	 ally resolved by entries in libc.  These entry points
	 should be supplied through some other mechanism when
	 this option is specified.

	 One of the standard libraries bypassed by -nostdlib and
	 -nodefaultlibs is libgcc.a, a library of internal sub-
	 routines that GCC uses to overcome shortcomings of par-
	 ticular machines, or special needs for some languages.

	 In most cases, you need libgcc.a even when you want to
	 avoid other standard libraries.  In other words, when
	 you specify -nostdlib or -nodefaultlibs you should usu-
	 ally specify -lgcc as well. This ensures that you have
	 no unresolved references to internal GCC library subrou-
	 tines.	 (For example, __main, used to ensure C++ con-
	 structors will be called.)

     -pie
	 Produce a position independent executable on targets
	 which support it. For predictable results, you must also
	 specify the same set of options that were used to gen-
	 erate code (-fpie, -fPIE, or model suboptions) when you
	 specify this option.

     -s	 Remove all symbol table and relocation information from
	 the executable.

     -static
	 On systems that support dynamic linking, this prevents
	 linking with the shared libraries.  On other systems,
	 this option has no effect.

     -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
	 generate code (-fpic, -fPIC, or model suboptions) when
	 you specify this option.[1]

     -shared-libgcc


gcc-3.4.6		   2011-08-18			      102

GCC(1)			       GNU			   GCC(1)

     -static-libgcc
	 On systems that provide libgcc as a shared library,
	 these options force the use of either the shared or
	 static version respectively. If no shared version of
	 libgcc was built when the compiler was configured, these
	 options have no effect.

	 There are several situations in which an application
	 should use the shared libgcc instead of the static ver-
	 sion.	The most common of these is when the application
	 wishes to throw and catch exceptions across different
	 shared libraries.  In that case, each of the libraries
	 as well as the application itself should use the shared
	 libgcc.

	 Therefore, the G++ and GCJ drivers automatically add
	 -shared-libgcc whenever you build a shared library or a
	 main executable, because C++ and Java programs typically
	 use exceptions, so this is the right thing to do.

	 If, instead, you use the GCC driver to create shared
	 libraries, you may find that they will not always be
	 linked with the shared libgcc. If GCC finds, at its con-
	 figuration time, that you have a non-GNU linker or a GNU
	 linker that does not support option --eh-frame-hdr, it
	 will link the shared version of libgcc into shared
	 libraries by default.	Otherwise, it will take advantage
	 of the linker and optimize away the linking with the
	 shared version of libgcc, linking with the static ver-
	 sion of libgcc by default.  This allows exceptions to
	 propagate through such shared libraries, without incur-
	 ring relocation costs at library load time.

	 However, if a library or main executable is supposed to
	 throw or catch exceptions, you must link it using the
	 G++ or GCJ driver, as appropriate for the languages used
	 in the program, or using the option -shared-libgcc, such
	 that it is linked with the shared libgcc.

     -symbolic
	 Bind references to global symbols when building a shared
	 object.  Warn about any unresolved references (unless
	 overridden by the link editor option -Xlinker -z
	 -Xlinker defs).  Only a few systems support this option.

     -Xlinker option
	 Pass option as an option to the linker.  You can use
	 this to supply system-specific linker options which GCC
	 does not know how to recognize.

	 If you want to pass an option that takes an argument,
	 you must use -Xlinker twice, once for the option and

gcc-3.4.6		   2011-08-18			      103

GCC(1)			       GNU			   GCC(1)

	 once for the argument. For example, to pass -assert
	 definitions, you must write -Xlinker -assert -Xlinker
	 definitions.  It does not work to write -Xlinker
	 "-assert definitions", because this passes the entire
	 string as a single argument, which is not what the
	 linker expects.

     -Wl,option
	 Pass option as an option to the linker.  If option con-
	 tains commas, it is split into multiple options at the
	 commas.

     -u symbol
	 Pretend the symbol symbol is undefined, to force linking
	 of library modules to define it.  You can use -u multi-
	 ple times with different symbols to force loading of
	 additional library modules.

     Options for Directory Search

     These options specify directories to search for header
     files, for libraries and for parts of the compiler:

     -Idir
	 Add the directory dir to the head of the list of direc-
	 tories 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.  However, you should
	 not use this option to add directories that contain
	 vendor-supplied system header files (use -isystem for
	 that).	 If you use more than one -I option, the direc-
	 tories are scanned in left-to-right order; the standard
	 system directories come after.

	 If a standard system include directory, or a directory
	 specified with -isystem, is also specified with -I, the
	 -I option will be ignored.  The directory will still be
	 searched but as a system directory at its normal posi-
	 tion in the system include chain. This is to ensure that
	 GCC's procedure to fix buggy system headers and the ord-
	 ering for the include_next directive are not inadver-
	 tently changed. If you really need to change the search
	 order for system directories, use the -nostdinc and/or
	 -isystem options.

     -I- Any directories you specify with -I options before the
	 -I- option are searched only for the case of #include
	 "file"; they are not searched for #include <file>.

	 If additional directories are specified with -I options
	 after the -I-, these directories are searched for all

gcc-3.4.6		   2011-08-18			      104

GCC(1)			       GNU			   GCC(1)

	 #include directives.  (Ordinarily all -I directories are
	 used this way.)

	 In addition, the -I- option inhibits the use of the
	 current directory (where the current input file came
	 from) as the first search directory for #include "file".
	 There is no way to override this effect of -I-.  With
	 -I. you can specify searching the directory which was
	 current when the compiler was invoked.	 That is not
	 exactly the same as what the preprocessor does by
	 default, but it is often satisfactory.

	 -I- does not inhibit the use of the standard system
	 directories for header files.	Thus, -I- and -nostdinc
	 are independent.

     -Ldir
	 Add directory dir to the list of directories to be
	 searched for -l.

     -Bprefix
	 This option specifies where to find the executables,
	 libraries, include files, and data files of the compiler
	 itself.

	 The compiler driver program runs one or more of the sub-
	 programs cpp, cc1, as and ld.	It tries prefix as a pre-
	 fix for each program it tries to run, both with and
	 without machine/version/.

	 For each subprogram to be run, the compiler driver first
	 tries the -B prefix, if any.  If that name is not found,
	 or if -B was not specified, the driver tries two stan-
	 dard prefixes, which are /usr/lib/gcc/ and
	 /usr/local/lib/gcc/.  If neither of those results in a
	 file name that is found, the unmodified program name is
	 searched for using the directories specified in your
	 PATH environment variable.

	 The compiler will check to see if the path provided by
	 the -B refers to a directory, and if necessary it will
	 add a directory separator character at the end of the
	 path.

	 -B prefixes that effectively specify directory names
	 also apply to libraries in the linker, because the com-
	 piler translates these options into -L options for the
	 linker.  They also apply to includes files in the
	 preprocessor, because the compiler translates these
	 options into -isystem options for the preprocessor.  In
	 this case, the compiler appends include to the prefix.

gcc-3.4.6		   2011-08-18			      105

GCC(1)			       GNU			   GCC(1)

	 The run-time support file libgcc.a can also be searched
	 for using the -B prefix, if needed.  If it is not found
	 there, the two standard prefixes above are tried, and
	 that is all.  The file is left out of the link if it is
	 not found by those means.

	 Another way to specify a prefix much like the -B prefix
	 is to use the environment variable GCC_EXEC_PREFIX.

	 As a special kludge, if the path provided by -B is
	 [dir/]stageN/, where N is a number in the range 0 to 9,
	 then it will be replaced by [dir/]include.  This is to
	 help with boot-strapping the compiler.

     -specs=file
	 Process file after the compiler reads in the standard
	 specs file, in order to override the defaults that the
	 gcc driver program uses when determining what switches
	 to pass to cc1, cc1plus, as, ld, etc.	More than one
	 -specs=file can be specified on the command line, and
	 they are processed in order, from left to right.

     Specifying Target Machine and Compiler Version

     The usual way to run GCC is to run the executable called
     gcc, or <machine>-gcc when cross-compiling, or
     <machine>-gcc-<version> to run a version other than the one
     that was installed last.  Sometimes this is inconvenient, so
     GCC provides options that will switch to another cross-
     compiler or version.

     -b machine
	 The argument machine specifies the target machine for
	 compilation.

	 The value to use for machine is the same as was speci-
	 fied as the machine type when configuring GCC as a
	 cross-compiler.  For example, if a cross-compiler was
	 configured with configure i386v, meaning to compile for
	 an 80386 running System V, then you would specify -b
	 i386v to run that cross compiler.

     -V version
	 The argument version specifies which version of GCC to
	 run. This is useful when multiple versions are
	 installed.  For example, version might be 2.0, meaning
	 to run GCC version 2.0.

     The -V and -b options work by running the
     <machine>-gcc-<version> executable, so there's no real rea-
     son to use them if you can just run that directly.

gcc-3.4.6		   2011-08-18			      106

GCC(1)			       GNU			   GCC(1)

     Hardware Models and Configurations

     Earlier we discussed the standard option -b which chooses
     among different installed compilers for completely different
     target machines, such as VAX vs. 68000 vs. 80386.

     In addition, each of these target machine types can have its
     own special options, starting with -m, to choose among vari-
     ous hardware models or configurations---for example, 68010
     vs 68020, floating coprocessor or none.  A single installed
     version of the compiler can compile for any model or confi-
     guration, according to the options specified.

     Some configurations of the compiler also support additional
     special options, usually for compatibility with other com-
     pilers on the same platform.

     These options are defined by the macro "TARGET_SWITCHES" in
     the machine description.  The default for the options is
     also defined by that macro, which enables you to change the
     defaults.

     M680x0 Options

     These are the -m options defined for the 68000 series.  The
     default values for these options depends on which style of
     68000 was selected when the compiler was configured; the
     defaults for the most common choices are given below.

     -m68000
     -mc68000
	 Generate output for a 68000.  This is the default when
	 the compiler is configured for 68000-based systems.

	 Use this option for microcontrollers with a 68000 or
	 EC000 core, including the 68008, 68302, 68306, 68307,
	 68322, 68328 and 68356.

     -m68020
     -mc68020
	 Generate output for a 68020.  This is the default when
	 the compiler is configured for 68020-based systems.

     -m68881
	 Generate output containing 68881 instructions for float-
	 ing point. This is the default for most 68020 systems
	 unless --nfp was specified when the compiler was config-
	 ured.

     -m68030
	 Generate output for a 68030.  This is the default when
	 the compiler is configured for 68030-based systems.

gcc-3.4.6		   2011-08-18			      107

GCC(1)			       GNU			   GCC(1)

     -m68040
	 Generate output for a 68040.  This is the default when
	 the compiler is configured for 68040-based systems.

	 This option inhibits the use of 68881/68882 instructions
	 that have to be emulated by software on the 68040.  Use
	 this option if your 68040 does not have code to emulate
	 those instructions.

     -m68060
	 Generate output for a 68060.  This is the default when
	 the compiler is configured for 68060-based systems.

	 This option inhibits the use of 68020 and 68881/68882
	 instructions that have to be emulated by software on the
	 68060.	 Use this option if your 68060 does not have code
	 to emulate those instructions.

     -mcpu32
	 Generate output for a CPU32.  This is the default when
	 the compiler is configured for CPU32-based systems.

	 Use this option for microcontrollers with a CPU32 or
	 CPU32+ core, including the 68330, 68331, 68332, 68333,
	 68334, 68336, 68340, 68341, 68349 and 68360.

     -m5200
	 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 the MCF5202, MCF5203, MCF5204 and MCF5202.

     -m68020-40
	 Generate output for a 68040, without using any of the
	 new instructions. This results in code which can run
	 relatively efficiently on either a 68020/68881 or a
	 68030 or a 68040.  The generated code does use the 68881
	 instructions that are emulated on the 68040.

     -m68020-60
	 Generate output for a 68060, without using any of the
	 new instructions. This results in code which can run
	 relatively efficiently on either a 68020/68881 or a
	 68030 or a 68040.  The generated code does use the 68881
	 instructions that are emulated on the 68060.

     -msoft-float
	 Generate output containing library calls for floating
	 point. Warning: the requisite libraries are not avail-
	 able for all m68k targets.  Normally the facilities of

gcc-3.4.6		   2011-08-18			      108

GCC(1)			       GNU			   GCC(1)

	 the machine's usual C compiler are used, but this can't
	 be done directly in cross-compilation.	 You must make
	 your own arrangements to provide suitable library func-
	 tions for cross-compilation.  The embedded targets
	 m68k-*-aout and m68k-*-coff do provide software floating
	 point support.

     -mshort
	 Consider type "int" to be 16 bits wide, like "short
	 int".

     -mnobitfield
	 Do not use the bit-field instructions.	 The -m68000,
	 -mcpu32 and -m5200 options imply -mnobitfield.

     -mbitfield
	 Do use the bit-field instructions.  The -m68020 option
	 implies -mbitfield.  This is the default if you use a
	 configuration designed for a 68020.

     -mrtd
	 Use a different function-calling convention, in which
	 functions that take a fixed number of arguments return
	 with the "rtd" instruction, which pops their arguments
	 while returning.  This saves one instruction in the
	 caller since there is no need to pop the arguments
	 there.

	 This calling convention is incompatible with the one
	 normally used on Unix, so you cannot use it if you need
	 to call libraries compiled with the Unix compiler.

	 Also, you must provide function prototypes for all func-
	 tions that take variable numbers of arguments (including
	 "printf"); otherwise incorrect code will be generated
	 for calls to those functions.

	 In addition, seriously incorrect code will result if you
	 call a function with too many arguments.  (Normally,
	 extra arguments are harmlessly ignored.)

	 The "rtd" instruction is supported by the 68010, 68020,
	 68030, 68040, 68060 and CPU32 processors, but not by the
	 68000 or 5200.

     -malign-int
     -mno-align-int
	 Control whether GCC aligns "int", "long", "long long",
	 "float", "double", and "long double" variables on a
	 32-bit boundary (-malign-int) or a 16-bit boundary
	 (-mno-align-int). Aligning variables on 32-bit boun-
	 daries produces code that runs somewhat faster on

gcc-3.4.6		   2011-08-18			      109

GCC(1)			       GNU			   GCC(1)

	 processors with 32-bit busses at the expense of more
	 memory.

	 Warning: if you use the -malign-int switch, GCC will
	 align structures containing the above types  differently
	 than most published application binary interface specif-
	 ications for the m68k.

     -mpcrel
	 Use the pc-relative addressing mode of the 68000
	 directly, instead of using a global offset table.  At
	 present, this option implies -fpic, allowing at most a
	 16-bit offset for pc-relative addressing.  -fPIC is not
	 presently supported with -mpcrel, though this could be
	 supported for 68020 and higher processors.

     -mno-strict-align
     -mstrict-align
	 Do not (do) assume that unaligned memory references will
	 be handled by the system.

     -msep-data
	 Generate code that allows the data segment to be located
	 in a different area of memory from the text segment.
	 This allows for execute in place in an environment
	 without virtual memory management.  This option implies
	 -fPIC.

     -mno-sep-data
	 Generate code that assumes that the data segment follows
	 the text segment. This is the default.

     -mid-shared-library
	 Generate code that supports shared libraries via the
	 library ID method. This allows for execute in place and
	 shared libraries in an environment without virtual
	 memory management.  This option implies -fPIC.

     -mno-id-shared-library
	 Generate code that doesn't assume ID based shared
	 libraries are being used. This is the default.

     -mshared-library-id=n
	 Specified the identification number of the ID based
	 shared library being compiled.	 Specifying a value of 0
	 will generate more compact code, specifying other values
	 will force the allocation of that number to the current
	 library but is no more space or time efficient than
	 omitting this option.

     M68hc1x Options

gcc-3.4.6		   2011-08-18			      110

GCC(1)			       GNU			   GCC(1)

     These are the -m options defined for the 68hc11 and 68hc12
     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 com-
     mon choices are given below.

     -m6811
     -m68hc11
	 Generate output for a 68HC11.	This is the default when
	 the compiler is configured for 68HC11-based systems.

     -m6812
     -m68hc12
	 Generate output for a 68HC12.	This is the default when
	 the compiler is configured for 68HC12-based systems.

     -m68S12
     -m68hcs12
	 Generate output for a 68HCS12.

     -mauto-incdec
	 Enable the use of 68HC12 pre and post auto-increment and
	 auto-decrement addressing modes.

     -minmax
     -nominmax
	 Enable the use of 68HC12 min and max instructions.

     -mlong-calls
     -mno-long-calls
	 Treat all calls as being far away (near).  If calls are
	 assumed to be far away, the compiler will use the "call"
	 instruction to call a function and the "rtc" instruction
	 for returning.

     -mshort
	 Consider type "int" to be 16 bits wide, like "short
	 int".

     -msoft-reg-count=count
	 Specify the number of pseudo-soft registers which are
	 used for the code generation.	The maximum number is 32.
	 Using more pseudo-soft register may or may not result in
	 better code depending on the program. The default is 4
	 for 68HC11 and 2 for 68HC12.

     VAX Options

     These -m options are defined for the VAX:

     -munix
	 Do not output certain jump instructions ("aobleq" and so

gcc-3.4.6		   2011-08-18			      111

GCC(1)			       GNU			   GCC(1)

	 on) that the Unix assembler for the VAX cannot handle
	 across long ranges.

     -mgnu
	 Do output those jump instructions, on the assumption
	 that you will assemble with the GNU assembler.

     -mg Output code for g-format floating point numbers instead
	 of d-format.

     SPARC Options

     These -m options are supported on the SPARC:

     -mno-app-regs
     -mapp-regs
	 Specify -mapp-regs to generate output using the global
	 registers 2 through 4, which the SPARC SVR4 ABI reserves
	 for applications.  This is the default, except on
	 Solaris.

	 To be fully SVR4 ABI compliant at the cost of some per-
	 formance loss, specify -mno-app-regs.	You should com-
	 pile libraries and system software with this option.

     -mfpu
     -mhard-float
	 Generate output containing floating point instructions.
	 This is the default.

     -mno-fpu
     -msoft-float
	 Generate output containing library calls for floating
	 point. Warning: the requisite libraries are not avail-
	 able for all SPARC targets.  Normally the facilities of
	 the machine's usual C compiler are used, but this cannot
	 be done directly in cross-compilation.	 You must make
	 your own arrangements to provide suitable library func-
	 tions for cross-compilation.  The embedded targets
	 sparc-*-aout and sparclite-*-* do provide software
	 floating point support.

	 -msoft-float changes the calling convention in the out-
	 put file; therefore, it is only useful if you compile
	 all of a program with this option.  In particular, you
	 need to compile libgcc.a, the library that comes with
	 GCC, with -msoft-float in order for this to work.

     -mhard-quad-float
	 Generate output containing quad-word (long double)
	 floating point instructions.

gcc-3.4.6		   2011-08-18			      112

GCC(1)			       GNU			   GCC(1)

     -msoft-quad-float
	 Generate output containing library calls for quad-word
	 (long double) floating point instructions.  The func-
	 tions called are those specified in the SPARC ABI.  This
	 is the default.

	 As of this writing, there are no SPARC implementations
	 that have hardware support for the quad-word floating
	 point instructions.  They all invoke a trap handler for
	 one of these instructions, and then the trap handler
	 emulates the effect of the instruction.  Because of the
	 trap handler overhead, this is much slower than calling
	 the ABI library routines.  Thus the -msoft-quad-float
	 option is the default.

     -mno-flat
     -mflat
	 With -mflat, the compiler does not generate save/restore
	 instructions and will use a ``flat'' or single register
	 window calling convention. This model uses %i7 as the
	 frame pointer and is compatible with the normal register
	 window model.	Code from either may be intermixed. The
	 local registers and the input registers (0--5) are still
	 treated as ``call saved'' registers and will be saved on
	 the stack as necessary.

	 With -mno-flat (the default), the compiler emits
	 save/restore instructions (except for leaf functions)
	 and is the normal mode of operation.

	 These options are deprecated and will be deleted in a
	 future GCC release.

     -mno-unaligned-doubles
     -munaligned-doubles
	 Assume that doubles have 8 byte alignment.  This is the
	 default.

	 With -munaligned-doubles, GCC assumes that doubles have
	 8 byte alignment only if they are contained in another
	 type, or if they have an absolute address.  Otherwise,
	 it assumes they have 4 byte alignment. Specifying this
	 option avoids some rare compatibility problems with code
	 generated by other compilers.	It is not the default
	 because it results in a performance loss, especially for
	 floating point code.

     -mno-faster-structs
     -mfaster-structs
	 With -mfaster-structs, the compiler assumes that struc-
	 tures should have 8 byte alignment.  This enables the
	 use of pairs of "ldd" and "std" instructions for copies

gcc-3.4.6		   2011-08-18			      113

GCC(1)			       GNU			   GCC(1)

	 in structure assignment, in place of twice as many "ld"
	 and "st" pairs. However, the use of this changed align-
	 ment directly violates the SPARC ABI.	Thus, it's
	 intended only for use on targets where the developer
	 acknowledges that their resulting code will not be
	 directly in line with the rules of the ABI.

     -mimpure-text
	 -mimpure-text, used in addition to -shared, tells the
	 compiler to not pass -z text to the linker when linking
	 a shared object.  Using this option, you can link
	 position-dependent code into a shared object.

	 -mimpure-text suppresses the ``relocations remain
	 against allocatable but non-writable sections'' linker
	 error message. However, the necessary relocations will
	 trigger copy-on-write, and the shared object is not
	 actually shared across processes.  Instead of using
	 -mimpure-text, you should compile all source code with
	 -fpic or -fPIC.

	 This option is only available on SunOS and Solaris.

     -mv8
     -msparclite
	 These two options select variations on the SPARC archi-
	 tecture. These options are deprecated and will be
	 deleted in a future GCC release. They have been replaced
	 with -mcpu=xxx.

     -mcypress
     -msupersparc
     -mf930
     -mf934
	 These four options select the processor for which the
	 code is optimized. These options are deprecated and will
	 be deleted in a future GCC release. They have been
	 replaced with -mcpu=xxx.

     -mcpu=cpu_type
	 Set the instruction set, register set, and instruction
	 scheduling parameters for machine type cpu_type.  Sup-
	 ported values for cpu_type are v7, cypress, v8, super-
	 sparc, sparclite, f930, f934, hypersparc, sparclite86x,
	 sparclet, tsc701, v9, ultrasparc, and ultrasparc3.

	 Default instruction scheduling parameters are used for
	 values that select an architecture and not an implemen-
	 tation.  These are v7, v8, sparclite, sparclet, v9.

	 Here is a list of each supported architecture and their
	 supported implementations.

gcc-3.4.6		   2011-08-18			      114

GCC(1)			       GNU			   GCC(1)

		     v7:	     cypress
		     v8:	     supersparc, hypersparc
		     sparclite:	     f930, f934, sparclite86x
		     sparclet:	     tsc701
		     v9:	     ultrasparc, ultrasparc3

	 By default (unless configured otherwise), GCC generates
	 code for the V7 variant of the SPARC architecture.  With
	 -mcpu=cypress, the compiler additionally optimizes it
	 for the Cypress CY7C602 chip, as used in the
	 SPARCStation/SPARCServer 3xx series.  This is also
	 appropriate for the older SPARCStation 1, 2, IPX etc.

	 With -mcpu=v8, GCC generates code for the V8 variant of
	 the SPARC architecture.  The only difference from V7
	 code is that the compiler emits the integer multiply and
	 integer divide instructions which exist in SPARC-V8 but
	 not in SPARC-V7.  With -mcpu=supersparc, the compiler
	 additionally optimizes it for the SuperSPARC chip, as
	 used in the SPARCStation 10, 1000 and 2000 series.

	 With -mcpu=sparclite, GCC generates code for the SPAR-
	 Clite variant of the SPARC architecture.  This adds the
	 integer multiply, integer divide step and scan ("ffs")
	 instructions which exist in SPARClite but not in
	 SPARC-V7. With -mcpu=f930, the compiler additionally
	 optimizes it for the Fujitsu MB86930 chip, which is the
	 original SPARClite, with no FPU.  With -mcpu=f934, the
	 compiler additionally optimizes it for the Fujitsu
	 MB86934 chip, which is the more recent SPARClite with
	 FPU.

	 With -mcpu=sparclet, GCC generates code for the SPARClet
	 variant of the SPARC architecture.  This adds the
	 integer multiply, multiply/accumulate, integer divide
	 step and scan ("ffs") instructions which exist in SPAR-
	 Clet but not in SPARC-V7.  With -mcpu=tsc701, the com-
	 piler additionally optimizes it for the TEMIC SPARClet
	 chip.

	 With -mcpu=v9, GCC generates code for the V9 variant of
	 the SPARC architecture.  This adds 64-bit integer and
	 floating-point move instructions, 3 additional
	 floating-point condition code registers and conditional
	 move instructions.  With -mcpu=ultrasparc, the compiler
	 additionally optimizes it for the Sun UltraSPARC I/II
	 chips.	 With -mcpu=ultrasparc3, the compiler addition-
	 ally optimizes it for the Sun UltraSPARC III chip.

     -mtune=cpu_type
	 Set the instruction scheduling parameters for machine
	 type cpu_type, but do not set the instruction set or

gcc-3.4.6		   2011-08-18			      115

GCC(1)			       GNU			   GCC(1)

	 register set that the option -mcpu=cpu_type would.

	 The same values for -mcpu=cpu_type can be used for
	 -mtune=cpu_type, but the only useful values are those
	 that select a particular cpu implementation.  Those are
	 cypress, supersparc, hypersparc, f930, f934,
	 sparclite86x, tsc701, ultrasparc, and ultrasparc3.

     -mv8plus
     -mno-v8plus
	 With -mv8plus, GCC generates code for the SPARC-V8+ ABI.
	 The difference from the V8 ABI is that the global and
	 out registers are considered 64-bit wide.  This is
	 enabled by default on Solaris in 32-bit mode for all
	 SPARC-V9 processors.

     -mvis
     -mno-vis
	 With -mvis, GCC generates code that takes advantage of
	 the UltraSPARC Visual Instruction Set extensions.  The
	 default is -mno-vis.

     These -m options are supported in addition to the above on
     SPARC-V9 processors in 64-bit environments:

     -mlittle-endian
	 Generate code for a processor running in little-endian
	 mode. It is only available for a few configurations and
	 most notably not on Solaris and Linux.

     -m32
     -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 to 64 bits.

     -mcmodel=medlow
	 Generate code for the Medium/Low code model: 64-bit
	 addresses, programs must be linked in the low 32 bits of
	 memory.  Programs can be statically or dynamically
	 linked.

     -mcmodel=medmid
	 Generate code for the Medium/Middle code model: 64-bit
	 addresses, programs must be linked in the low 44 bits of
	 memory, the text and data segments must be less than 2GB
	 in size and the data segment must be located within 2GB
	 of the text segment.

     -mcmodel=medany
	 Generate code for the Medium/Anywhere code model: 64-bit

gcc-3.4.6		   2011-08-18			      116

GCC(1)			       GNU			   GCC(1)

	 addresses, programs may be linked anywhere in memory,
	 the text and data segments must be less than 2GB in size
	 and the data segment must be located within 2GB of the
	 text segment.

     -mcmodel=embmedany
	 Generate code for the Medium/Anywhere code model for
	 embedded systems: 64-bit addresses, the text and data
	 segments must be less than 2GB in size, both starting
	 anywhere in memory (determined at link time).	The glo-
	 bal register %g4 points to the base of the data segment.
	 Programs are statically linked and PIC is not supported.

     -mstack-bias
     -mno-stack-bias
	 With -mstack-bias, GCC assumes that the stack pointer,
	 and frame pointer if present, are offset by -2047 which
	 must be added back when making stack frame references.
	 This is the default in 64-bit mode. Otherwise, assume no
	 such offset is present.

     These switches are supported in addition to the above on
     Solaris:

     -threads
	 Add support for multithreading using the Solaris threads
	 library.  This option sets flags for both the preproces-
	 sor and linker.  This option does not affect the thread
	 safety of object code produced by the compiler or that
	 of libraries supplied with it.

     -pthreads
	 Add support for multithreading using the POSIX threads
	 library.  This option sets flags for both the preproces-
	 sor and linker.  This option does not affect the thread
	 safety of object code produced	 by the compiler or that
	 of libraries supplied with it.

     ARM Options

     These -m options are defined for Advanced RISC Machines
     (ARM) architectures:

     -mapcs-frame
	 Generate a stack frame that is compliant with the ARM
	 Procedure Call Standard for all functions, even if this
	 is not strictly necessary for correct execution of the
	 code.	Specifying -fomit-frame-pointer with this option
	 will cause the stack frames not to be generated for leaf
	 functions.  The default is -mno-apcs-frame.

     -mapcs


gcc-3.4.6		   2011-08-18			      117

GCC(1)			       GNU			   GCC(1)

	 This is a synonym for -mapcs-frame.

     -mapcs-26
	 Generate code for a processor running with a 26-bit pro-
	 gram counter, and conforming to the function calling
	 standards for the APCS 26-bit option.

	 This option is deprecated.  Future releases of the GCC
	 will only support generating code that runs in apcs-32
	 mode.

     -mapcs-32
	 Generate code for a processor running with a 32-bit pro-
	 gram counter, and conforming to the function calling
	 standards for the APCS 32-bit option.

	 This flag is deprecated.  Future releases of GCC will
	 make this flag unconditional.

     -mthumb-interwork
	 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 pro-
	 gram.	The default is -mno-thumb-interwork, since
	 slightly larger code is generated when -mthumb-interwork
	 is specified.

     -mno-sched-prolog
	 Prevent the reordering of instructions in the function
	 prolog, or the merging of those instruction with the
	 instructions in the function's body.  This means that
	 all functions will start with a recognizable set of
	 instructions (or in fact one of a choice from a small
	 set of different function prologues), and this informa-
	 tion can be used to locate the start if functions inside
	 an executable piece of code.  The default is
	 -msched-prolog.

     -mhard-float
	 Generate output containing floating point instructions.
	 This is the default.

     -msoft-float
	 Generate output containing library calls for floating
	 point. Warning: the requisite libraries are not avail-
	 able for all ARM targets.  Normally the facilities of
	 the machine's usual C compiler are used, but this cannot
	 be done directly in cross-compilation.	 You must make
	 your own arrangements to provide suitable library func-
	 tions for cross-compilation.

	 -msoft-float changes the calling convention in the

gcc-3.4.6		   2011-08-18			      118

GCC(1)			       GNU			   GCC(1)

	 output file; therefore, it is only useful if you compile
	 all of a program with this option.  In particular, you
	 need to compile libgcc.a, the library that comes with
	 GCC, with -msoft-float in order for this to work.

     -mlittle-endian
	 Generate code for a processor running in little-endian
	 mode.	This is the default for all standard configura-
	 tions.

     -mbig-endian
	 Generate code for a processor running in big-endian
	 mode; the default is to compile code for a little-endian
	 processor.

     -mwords-little-endian
	 This option only applies when generating code for big-
	 endian processors. Generate code for a little-endian
	 word order but a big-endian byte order.  That is, a byte
	 order of the form 32107654.  Note: this option should
	 only be used if you require compatibility with code for
	 big-endian ARM processors generated by versions of the
	 compiler prior to 2.8.

     -malignment-traps
	 Generate code that will not trap if the MMU has align-
	 ment traps enabled. On ARM architectures prior to ARMv4,
	 there were no instructions to access half-word objects
	 stored in memory.  However, when reading from memory a
	 feature of the ARM architecture allows a word load to be
	 used, even if the address is unaligned, and the proces-
	 sor core will rotate the data as it is being loaded.
	 This option tells the compiler that such misaligned
	 accesses will cause a MMU trap and that it should
	 instead synthesize the access as a series of byte
	 accesses.  The compiler can still use word accesses to
	 load half-word data if it knows that the address is
	 aligned to a word boundary.

	 This option has no effect when compiling for ARM archi-
	 tecture 4 or later, since these processors have instruc-
	 tions to directly access half-word objects in memory.

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

gcc-3.4.6		   2011-08-18			      119

GCC(1)			       GNU			   GCC(1)

	 The default setting is -malignment-traps, since this
	 produces code that will also run on processors imple-
	 menting ARM architecture version 6 or later.

	 This option is deprecated and will be removed in the
	 next release of GCC.

     -mcpu=name
	 This specifies the name of the target ARM processor.
	 GCC uses this name to determine what kind of instruc-
	 tions it can emit when generating assembly code.  Per-
	 missible 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, arm9e, arm920, arm920t, arm926ejs, arm940t,
	 arm9tdmi, arm10tdmi, arm1020t, arm1026ejs, arm1136js,
	 arm1136jfs ,xscale, iwmmxt, ep9312.

     -mtune=name
	 This option is very similar to the -mcpu= option, except
	 that instead of specifying the actual target processor
	 type, and hence 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 -mcpu=
	 option. For some ARM implementations better performance
	 can be obtained by using this option.

     -march=name
	 This specifies the name of the target ARM architecture.
	 GCC uses this name to determine what kind of instruc-
	 tions it can emit when generating assembly code.  This
	 option can be used in conjunction with or instead of the
	 -mcpu= option.	 Permissible names are: armv2, armv2a,
	 armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5te,
	 armv6j, iwmmxt, ep9312.

     -mfpe=number
     -mfp=number
	 This specifies the version of the floating point emula-
	 tion available on the target.	Permissible values are 2
	 and 3.	 -mfp= is a synonym for -mfpe=, for compatibility
	 with older versions of GCC.

     -mstructure-size-boundary=n
	 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

gcc-3.4.6		   2011-08-18			      120

GCC(1)			       GNU			   GCC(1)

	 toolchain the default value is 8.  Specifying the larger
	 number 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.

     -mabort-on-noreturn
	 Generate a call to the function "abort" at the end of a
	 "noreturn" function.  It will be executed if the func-
	 tion tries to return.

     -mlong-calls
     -mno-long-calls
	 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.

	 Even if this switch is enabled, not all function calls
	 will be turned into long calls.  The heuristic is that
	 static functions, functions which have the short-call
	 attribute, functions that are inside the scope of a
	 #pragma no_long_calls directive and functions whose
	 definitions have already been compiled within the
	 current compilation unit, will not be turned into long
	 calls.	 The exception to this rule is that weak function
	 definitions, functions with the long-call attribute or
	 the section attribute, and functions that are within the
	 scope of a #pragma long_calls directive, will always be
	 turned into long calls.

	 This feature is not enabled by default.  Specifying
	 -mno-long-calls will restore the default behavior, as
	 will placing the function calls within the scope of a
	 #pragma long_calls_off directive.  Note these switches
	 have no effect on how the compiler generates code to
	 handle function calls via function pointers.

     -mnop-fun-dllimport
	 Disable support for the "dllimport" attribute.

     -msingle-pic-base
	 Treat the register used for PIC addressing as read-only,
	 rather than loading it in the prologue for each func-
	 tion.	The run-time system is responsible for initializ-
	 ing this register with an appropriate value before exe-
	 cution begins.

gcc-3.4.6		   2011-08-18			      121

GCC(1)			       GNU			   GCC(1)

     -mpic-register=reg
	 Specify the register to be used for PIC addressing.  The
	 default is R10 unless stack-checking is enabled, when R9
	 is used.

     -mcirrus-fix-invalid-insns
	 Insert NOPs into the instruction stream to in order to
	 work around problems with invalid Maverick instruction
	 combinations.	This option is only valid if the
	 -mcpu=ep9312 option has been used to enable generation
	 of instructions for the Cirrus Maverick floating point
	 co-processor.	This option is not enabled by default,
	 since the problem is only present in older Maverick
	 implementations.  The default can be re-enabled by use
	 of the -mno-cirrus-fix-invalid-insns switch.

     -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:

		      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

	 When performing a stack backtrace, code can inspect the
	 value of "pc" stored at "fp + 0".  If the trace function
	 then looks at location "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
	 "((pc[-3]) & 0xff000000)".

     -mthumb
	 Generate code for the 16-bit Thumb instruction set.  The
	 default is to use the 32-bit ARM instruction set.

     -mtpcs-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 func-
	 tions.)  The default is -mno-tpcs-frame.

     -mtpcs-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.)

gcc-3.4.6		   2011-08-18			      122

GCC(1)			       GNU			   GCC(1)

	 The default is -mno-apcs-leaf-frame.

     -mcallee-super-interworking
	 Gives all externally visible functions in the file being
	 compiled an ARM instruction set header which switches to
	 Thumb mode before executing the rest of the function.
	 This allows these functions to be called from non-
	 interworking code.

     -mcaller-super-interworking
	 Allows calls via function pointers (including virtual
	 functions) to 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.

     MN10300 Options

     These -m options are defined for Matsushita MN10300 archi-
     tectures:

     -mmult-bug
	 Generate code to avoid bugs in the multiply instructions
	 for the MN10300 processors.  This is the default.

     -mno-mult-bug
	 Do not generate code to avoid bugs in the multiply
	 instructions for the MN10300 processors.

     -mam33
	 Generate code which uses features specific to the AM33
	 processor.

     -mno-am33
	 Do not generate code which uses features specific to the
	 AM33 processor.  This is the default.

     -mno-crt0
	 Do not link in the C run-time initialization object
	 file.

     -mrelax
	 Indicate to the linker that it should perform a relaxa-
	 tion 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.

     M32R/D Options

gcc-3.4.6		   2011-08-18			      123

GCC(1)			       GNU			   GCC(1)

     These -m options are defined for Renesas M32R/D architec-
     tures:

     -m32r2
	 Generate code for the M32R/2.

     -m32rx
	 Generate code for the M32R/X.

     -m32r
	 Generate code for the M32R.  This is the default.

     -mmodel=small
	 Assume all objects live in the lower 16MB of memory (so
	 that their addresses can be loaded with the "ld24"
	 instruction), and assume all subroutines are reachable
	 with the "bl" instruction. This is the default.

	 The addressability of a particular object can be set
	 with the "model" attribute.

     -mmodel=medium
	 Assume objects may be anywhere in the 32-bit address
	 space (the compiler will generate "seth/add3" instruc-
	 tions to load their addresses), and assume all subrou-
	 tines are reachable with the "bl" instruction.

     -mmodel=large
	 Assume objects may be anywhere in the 32-bit address
	 space (the compiler will generate "seth/add3" instruc-
	 tions to load their addresses), and assume subroutines
	 may not be reachable with the "bl" instruction (the com-
	 piler will generate the much slower "seth/add3/jl"
	 instruction sequence).

     -msdata=none
	 Disable use of the small data area.  Variables will be
	 put into one of .data, bss, or .rodata (unless the "sec-
	 tion" attribute has been specified). This is the
	 default.

	 The small data area consists of sections .sdata and
	 .sbss. Objects may be explicitly put in the small data
	 area with the "section" attribute using one of these
	 sections.

     -msdata=sdata
	 Put small global and static data in the small data area,
	 but do not generate special code to reference them.

     -msdata=use
	 Put small global and static data in the small data area,

gcc-3.4.6		   2011-08-18			      124

GCC(1)			       GNU			   GCC(1)

	 and generate special instructions to reference them.

     -G num
	 Put global and static objects less than or equal to num
	 bytes into the small data or bss sections instead of the
	 normal data or bss sections.  The default value of num
	 is 8. The -msdata option must be set to one of sdata or
	 use for this option to have any effect.

	 All modules should be compiled with the same -G num
	 value. Compiling with different values of num may or may
	 not work; if it doesn't the linker will give an error
	 message---incorrect code will not be generated.

     -mdebug
	 Makes the M32R specific code in the compiler display
	 some statistics that might help in debugging programs.

     -malign-loops
	 Align all loops to a 32-byte boundary.

     -mno-align-loops
	 Do not enforce a 32-byte alignment for loops.	This is
	 the default.

     -missue-rate=number
	 Issue number instructions per cycle.  number can only be
	 1 or 2.

     -mbranch-cost=number
	 number can only be 1 or 2.  If it is 1 then branches
	 will be preferred over conditional code, if it is 2,
	 then the opposite will apply.

     -mflush-trap=number
	 Specifies the trap number to use to flush the cache.
	 The default is 12.  Valid numbers are between 0 and 15
	 inclusive.

     -mno-flush-trap
	 Specifies that the cache cannot be flushed by using a
	 trap.

     -mflush-func=name
	 Specifies the name of the operating system function to
	 call to flush the cache.  The default is _flush_cache,
	 but a function call will only be used if a trap is not
	 available.

     -mno-flush-func
	 Indicates that there is no OS function for flushing the
	 cache.

gcc-3.4.6		   2011-08-18			      125

GCC(1)			       GNU			   GCC(1)

     IBM RS/6000 and PowerPC Options

     These -m options are defined for the IBM RS/6000 and
     PowerPC:

     -mpower
     -mno-power
     -mpower2
     -mno-power2
     -mpowerpc
     -mno-powerpc
     -mpowerpc-gpopt
     -mno-powerpc-gpopt
     -mpowerpc-gfxopt
     -mno-powerpc-gfxopt
     -mpowerpc64
     -mno-powerpc64
	 GCC supports two related instruction set architectures
	 for the RS/6000 and PowerPC.  The POWER instruction set
	 are those instructions supported by the rios chip set
	 used in the original RS/6000 systems and the PowerPC
	 instruction set is the architecture of the Motorola
	 MPC5xx, MPC6xx, MPC8xx microprocessors, and the IBM 4xx
	 microprocessors.

	 Neither architecture is a subset of the other.	 However
	 there is a large common subset of instructions supported
	 by both.  An MQ register is included in processors sup-
	 porting the POWER architecture.

	 You use these options to specify which instructions are
	 available on the processor you are using.  The default
	 value of these options is determined when configuring
	 GCC.  Specifying the -mcpu=cpu_type overrides the
	 specification of these options.  We recommend you use
	 the -mcpu=cpu_type option rather than the options listed
	 above.

	 The -mpower option allows GCC to generate instructions
	 that are found only in the POWER architecture and to use
	 the MQ register. Specifying -mpower2 implies -power and
	 also allows GCC to generate instructions that are
	 present in the POWER2 architecture but not the original
	 POWER architecture.

	 The -mpowerpc option allows GCC to generate instructions
	 that are found only in the 32-bit subset of the PowerPC
	 architecture. Specifying -mpowerpc-gpopt implies
	 -mpowerpc and also allows GCC to use the optional
	 PowerPC architecture instructions in the General Purpose
	 group, including floating-point square root.  Specifying
	 -mpowerpc-gfxopt implies -mpowerpc and also allows GCC

gcc-3.4.6		   2011-08-18			      126

GCC(1)			       GNU			   GCC(1)

	 to use the optional PowerPC architecture instructions in
	 the Graphics group, including floating-point select.

	 The -mpowerpc64 option allows GCC to generate the addi-
	 tional 64-bit instructions that are found in the full
	 PowerPC64 architecture and to treat GPRs as 64-bit, dou-
	 bleword quantities.  GCC defaults to -mno-powerpc64.

	 If you specify both -mno-power and -mno-powerpc, GCC
	 will use only the instructions in the common subset of
	 both architectures plus some special AIX common-mode
	 calls, and will not use the MQ register.  Specifying
	 both -mpower and -mpowerpc permits GCC to use any
	 instruction from either architecture and to allow use of
	 the MQ register; specify this for the Motorola MPC601.

     -mnew-mnemonics
     -mold-mnemonics
	 Select which mnemonics to use in the generated assembler
	 code.	With -mnew-mnemonics, GCC uses the assembler
	 mnemonics defined for the PowerPC architecture.  With
	 -mold-mnemonics it uses the assembler mnemonics defined
	 for the POWER architecture.  Instructions defined in
	 only one architecture have only one mnemonic; GCC uses
	 that mnemonic irrespective of which of these options is
	 specified.

	 GCC defaults to the mnemonics appropriate for the archi-
	 tecture in use.  Specifying -mcpu=cpu_type sometimes
	 overrides the value of these option.  Unless you are
	 building a cross-compiler, you should normally not
	 specify either -mnew-mnemonics or -mold-mnemonics, but
	 should instead accept the default.

     -mcpu=cpu_type
	 Set architecture type, register usage, choice of mnemon-
	 ics, and instruction scheduling parameters for machine
	 type cpu_type. Supported values for cpu_type are 401,
	 403, 405, 405fp, 440, 440fp, 505, 601, 602, 603, 603e,
	 604, 604e, 620, 630, 740, 7400, 7450, 750, 801, 821,
	 823, 860, 970, 8540, common, ec603e, G3, G4, G5, power,
	 power2, power3, power4, power5, powerpc, powerpc64,
	 rios, rios1, rios2, rsc, and rs64a.

	 -mcpu=common selects a completely generic processor.
	 Code generated under this option will run on any POWER
	 or PowerPC processor. GCC will use only the instructions
	 in the common subset of both architectures, and will not
	 use the MQ register.  GCC assumes a generic processor
	 model for scheduling purposes.

	 -mcpu=power, -mcpu=power2, -mcpu=powerpc, and

gcc-3.4.6		   2011-08-18			      127

GCC(1)			       GNU			   GCC(1)

	 -mcpu=powerpc64 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.

	 The other options specify a specific processor.  Code
	 generated under those options will run best on that pro-
	 cessor, and may not run at all on others.

	 The -mcpu options automatically enable or disable the
	 following options: -maltivec, -mhard-float, -mmfcrf,
	 -mmultiple, -mnew-mnemonics, -mpower, -mpower2,
	 -mpowerpc64, -mpowerpc-gpopt, -mpowerpc-gfxopt,
	 -mstring.  The particular options set for any particular
	 CPU will vary between compiler versions, depending on
	 what setting seems to produce optimal code for that CPU;
	 it doesn't necessarily reflect the actual hardware's
	 capabilities.	If you wish to set an individual option
	 to a particular value, you may specify it after the
	 -mcpu option, like -mcpu=970 -mno-altivec.

	 On AIX, the -maltivec and -mpowerpc64 options are not
	 enabled or disabled by the -mcpu option at present,
	 since AIX does not have full support for these options.
	 You may still enable or disable them individually if
	 you're sure it'll work in your environment.

     -mtune=cpu_type
	 Set the instruction scheduling parameters for machine
	 type cpu_type, but do not set the architecture type,
	 register usage, or choice of mnemonics, as
	 -mcpu=cpu_type would.	The same values for cpu_type are
	 used for -mtune as for -mcpu.	If both are specified,
	 the code generated will use the architecture, registers,
	 and mnemonics set by -mcpu, but the scheduling parame-
	 ters set by -mtune.

     -maltivec
     -mno-altivec
	 These switches enable or disable the use of built-in
	 functions that allow access to the AltiVec instruction
	 set.  You may also need to set -mabi=altivec to adjust
	 the current ABI with AltiVec ABI enhancements.

     -mabi=spe
	 Extend the current ABI with SPE ABI extensions.  This
	 does not change the default ABI, instead it adds the SPE
	 ABI extensions to the current ABI.

     -mabi=no-spe
	 Disable Booke SPE ABI extensions for the current ABI.

gcc-3.4.6		   2011-08-18			      128

GCC(1)			       GNU			   GCC(1)

     -misel=yes/no
     -misel
	 This switch enables or disables the generation of ISEL
	 instructions.

     -mspe=yes/no
     -mspe
	 This switch enables or disables the generation of SPE
	 simd instructions.

     -mfloat-gprs=yes/no
     -mfloat-gprs
	 This switch enables or disables the generation of float-
	 ing point operations on the general purpose registers
	 for architectures that support it.  This option is
	 currently only available on the MPC8540.

     -mfull-toc
     -mno-fp-in-toc
     -mno-sum-in-toc
     -mminimal-toc
	 Modify generation of the TOC (Table Of Contents), which
	 is created for every executable file.	The -mfull-toc
	 option is selected by default.	 In that case, GCC will
	 allocate at least one TOC entry for each unique non-
	 automatic variable reference in your program.	GCC will
	 also place floating-point constants in the TOC.  How-
	 ever, only 16,384 entries are available in the TOC.

	 If you receive a linker error message that saying you
	 have overflowed the available TOC space, you can reduce
	 the amount of TOC space used with the -mno-fp-in-toc and
	 -mno-sum-in-toc options. -mno-fp-in-toc prevents GCC
	 from putting floating-point constants in the TOC and
	 -mno-sum-in-toc forces GCC to generate code to calculate
	 the sum of an address and a constant at run-time instead
	 of putting that sum into the TOC.  You may specify one
	 or both of these options.  Each causes GCC to produce
	 very slightly slower and larger code at the expense of
	 conserving TOC space.

	 If you still run out of space in the TOC even when you
	 specify both of these options, specify -mminimal-toc
	 instead.  This option causes GCC to make only one TOC
	 entry for every file.	When you specify this option, GCC
	 will produce code that is slower and larger but which
	 uses extremely little TOC space.  You may wish to use
	 this option only on files that contain less frequently
	 executed code.

     -maix64
     -maix32


gcc-3.4.6		   2011-08-18			      129

GCC(1)			       GNU			   GCC(1)

	 Enable 64-bit AIX ABI and calling convention: 64-bit
	 pointers, 64-bit "long" type, and the infrastructure
	 needed to support them. Specifying -maix64 implies
	 -mpowerpc64 and -mpowerpc, while -maix32 disables the
	 64-bit ABI and implies -mno-powerpc64.	 GCC defaults to
	 -maix32.

     -mxl-compat
     -mno-xl-compat
	 Produce code that conforms more closely to IBM XLC
	 semantics when using AIX-compatible ABI.  Pass
	 floating-point arguments to prototyped functions beyond
	 the register save area (RSA) on the stack in addition to
	 argument FPRs.	 Do not assume that most significant dou-
	 ble in 128 bit long double value is properly rounded
	 when comparing values.

	 The AIX calling convention was extended but not ini-
	 tially documented to handle an obscure K&R C case of
	 calling a function that takes the address of its argu-
	 ments with fewer arguments than declared.  AIX XL com-
	 pilers access floating point arguments which do not fit
	 in the RSA from the stack when a subroutine is compiled
	 without optimization.	Because always storing floating-
	 point arguments on the stack is inefficient and rarely
	 needed, this option is not enabled by default and only
	 is necessary when calling subroutines compiled by AIX XL
	 compilers without optimization.

     -mpe
	 Support IBM RS/6000 SP Parallel Environment (PE).  Link
	 an application written to use message passing with spe-
	 cial startup code to enable the application to run.  The
	 system must have PE installed in the standard location
	 (/usr/lpp/ppe.poe/), or the specs file must be overrid-
	 den with the -specs= option to specify the appropriate
	 directory location.  The Parallel Environment does not
	 support threads, so the -mpe option and the -pthread
	 option are incompatible.

     -malign-natural
     -malign-power
	 On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
	 -malign-natural overrides the ABI-defined alignment of
	 larger types, such as floating-point doubles, on their
	 natural size-based boundary. The option -malign-power
	 instructs GCC to follow the ABI-specified alignment
	 rules.	 GCC defaults to the standard alignment defined
	 in the ABI.

     -msoft-float
     -mhard-float


gcc-3.4.6		   2011-08-18			      130

GCC(1)			       GNU			   GCC(1)

	 Generate code that does not use (uses) the floating-
	 point register set. Software floating point emulation is
	 provided if you use the -msoft-float option, and pass
	 the option to GCC when linking.

     -mmultiple
     -mno-multiple
	 Generate code that uses (does not use) the load multiple
	 word instructions and the store multiple word instruc-
	 tions.	 These instructions are generated by default on
	 POWER systems, and not generated on PowerPC systems.  Do
	 not use -mmultiple on little endian PowerPC systems,
	 since those instructions do not work when the processor
	 is in little endian mode.  The exceptions are PPC740 and
	 PPC750 which permit the instructions usage in little
	 endian mode.

     -mstring
     -mno-string
	 Generate code that uses (does not use) the load string
	 instructions and the store string word instructions to
	 save multiple registers and do small block moves.  These
	 instructions are generated by default on POWER systems,
	 and not generated on PowerPC systems.	Do not use
	 -mstring on little endian PowerPC systems, since those
	 instructions do not work when the processor is in little
	 endian mode. The exceptions are PPC740 and PPC750 which
	 permit the instructions usage in little endian mode.

     -mupdate
     -mno-update
	 Generate code that uses (does not use) the load or store
	 instructions that update the base register to the
	 address of the calculated memory location.  These
	 instructions are generated by default.	 If you use
	 -mno-update, there is a small window between the time
	 that the stack pointer is updated and the address of the
	 previous frame is stored, which means code that walks
	 the stack frame across interrupts or signals may get
	 corrupted data.

     -mfused-madd
     -mno-fused-madd
	 Generate code that uses (does not use) the floating
	 point multiply and accumulate instructions.  These
	 instructions are generated by default if hardware float-
	 ing is used.

     -mno-bit-align
     -mbit-align
	 On System V.4 and embedded PowerPC systems do not (do)
	 force structures and unions that contain bit-fields to

gcc-3.4.6		   2011-08-18			      131

GCC(1)			       GNU			   GCC(1)

	 be aligned to the base type of the bit-field.

	 For example, by default a structure containing nothing
	 but 8 "unsigned" bit-fields of length 1 would be aligned
	 to a 4 byte boundary and have a size of 4 bytes.  By
	 using -mno-bit-align, the structure would be aligned to
	 a 1 byte boundary and be one byte in size.

     -mno-strict-align
     -mstrict-align
	 On System V.4 and embedded PowerPC systems do not (do)
	 assume that unaligned memory references will be handled
	 by the system.

     -mrelocatable
     -mno-relocatable
	 On embedded PowerPC systems generate code that allows
	 (does not allow) the program to be relocated to a dif-
	 ferent address at runtime.  If you use -mrelocatable on
	 any module, all objects linked together must be compiled
	 with -mrelocatable or -mrelocatable-lib.

     -mrelocatable-lib
     -mno-relocatable-lib
	 On embedded PowerPC systems generate code that allows
	 (does not allow) the program to be relocated to a dif-
	 ferent address at runtime.  Modules compiled with
	 -mrelocatable-lib can be linked with either modules com-
	 piled without -mrelocatable and -mrelocatable-lib or
	 with modules compiled with the -mrelocatable options.

     -mno-toc
     -mtoc
	 On System V.4 and embedded PowerPC systems do not (do)
	 assume that register 2 contains a pointer to a global
	 area pointing to the addresses used in the program.

     -mlittle
     -mlittle-endian
	 On System V.4 and embedded PowerPC systems compile code
	 for the processor in little endian mode.  The
	 -mlittle-endian option is the same as -mlittle.

     -mbig
     -mbig-endian
	 On System V.4 and embedded PowerPC systems compile code
	 for the processor in big endian mode.	The -mbig-endian
	 option is the same as -mbig.

     -mdynamic-no-pic
	 On Darwin and Mac OS X systems, compile code so that it
	 is not relocatable, but that its external references are

gcc-3.4.6		   2011-08-18			      132

GCC(1)			       GNU			   GCC(1)

	 relocatable.  The resulting code is suitable for appli-
	 cations, but not shared libraries.

     -mprioritize-restricted-insns=priority
	 This option controls the priority that is assigned to
	 dispatch-slot restricted instructions during the second
	 scheduling pass.  The argument priority takes the value
	 0/1/2 to assign no/highest/second-highest priority to
	 dispatch slot restricted instructions.

     -msched-costly-dep=dependence_type
	 This option controls which dependences are considered
	 costly by the target during instruction scheduling.  The
	 argument dependence_type takes one of the following
	 values: no: no dependence is costly, all: all depen-
	 dences are costly, true_store_to_load: a true dependence
	 from store to load is costly, store_to_load: any depen-
	 dence from store to load is costly, number: any depen-
	 dence which latency >= number is costly.

     -minsert-sched-nops=scheme
	 This option controls which nop insertion scheme will be
	 used during the second scheduling pass. The argument
	 scheme takes one of the following values: no: Don't
	 insert nops. pad: Pad with nops any dispatch group which
	 has vacant issue slots, according to the scheduler's
	 grouping. regroup_exact: Insert nops to force costly
	 dependent insns into separate groups.	Insert exactly as
	 many nops as needed to force an insn to a new group,
	 according to the estimated processor grouping. number:
	 Insert nops to force costly dependent insns into
	 separate groups.  Insert number nops to force an insn to
	 a new group.

     -mcall-sysv
	 On System V.4 and embedded PowerPC systems compile code
	 using calling conventions that adheres to the March 1995
	 draft of the System V Application Binary Interface,
	 PowerPC processor supplement.	This is the default
	 unless you configured GCC using powerpc-*-eabiaix.

     -mcall-sysv-eabi
	 Specify both -mcall-sysv and -meabi options.

     -mcall-sysv-noeabi
	 Specify both -mcall-sysv and -mno-eabi options.

     -mcall-solaris
	 On System V.4 and embedded PowerPC systems compile code
	 for the Solaris operating system.

     -mcall-linux


gcc-3.4.6		   2011-08-18			      133

GCC(1)			       GNU			   GCC(1)

	 On System V.4 and embedded PowerPC systems compile code
	 for the Linux-based GNU system.

     -mcall-gnu
	 On System V.4 and embedded PowerPC systems compile code
	 for the Hurd-based GNU system.

     -mcall-netbsd
	 On System V.4 and embedded PowerPC systems compile code
	 for the NetBSD operating system.

     -maix-struct-return
	 Return all structures in memory (as specified by the AIX
	 ABI).

     -msvr4-struct-return
	 Return structures smaller than 8 bytes in registers (as
	 specified by the SVR4 ABI).

     -mabi=altivec
	 Extend the current ABI with AltiVec ABI extensions.
	 This does not change the default ABI, instead it adds
	 the AltiVec ABI extensions to the current ABI.

     -mabi=no-altivec
	 Disable AltiVec ABI extensions for the current ABI.

     -mprototype
     -mno-prototype
	 On System V.4 and embedded PowerPC systems assume that
	 all calls to variable argument functions are properly
	 prototyped.  Otherwise, the compiler must insert an
	 instruction before every non prototyped call to set or
	 clear bit 6 of the condition code register (CR) to indi-
	 cate whether floating point values were passed in the
	 floating point registers in case the function takes a
	 variable arguments.  With -mprototype, only calls to
	 prototyped variable argument functions will set or clear
	 the bit.

     -msim
	 On embedded PowerPC systems, assume that the startup
	 module is called sim-crt0.o and that the standard C
	 libraries are libsim.a and libc.a.  This is the default
	 for powerpc-*-eabisim. configurations.

     -mmvme
	 On embedded PowerPC systems, assume that the startup
	 module is called crt0.o and the standard C libraries are
	 libmvme.a and libc.a.

     -mads


gcc-3.4.6		   2011-08-18			      134

GCC(1)			       GNU			   GCC(1)

	 On embedded PowerPC systems, assume that the startup
	 module is called crt0.o and the standard C libraries are
	 libads.a and libc.a.

     -myellowknife
	 On embedded PowerPC systems, assume that the startup
	 module is called crt0.o and the standard C libraries are
	 libyk.a and libc.a.

     -mvxworks
	 On System V.4 and embedded PowerPC systems, specify that
	 you are compiling for a VxWorks system.

     -mwindiss
	 Specify that you are compiling for the WindISS simula-
	 tion environment.

     -memb
	 On embedded PowerPC systems, set the PPC_EMB bit in the
	 ELF flags header to indicate that eabi extended reloca-
	 tions are used.

     -meabi
     -mno-eabi
	 On System V.4 and embedded PowerPC systems do (do not)
	 adhere to the Embedded Applications Binary Interface
	 (eabi) which is a set of modifications to the System V.4
	 specifications.  Selecting -meabi means that the stack
	 is aligned to an 8 byte boundary, a function "__eabi" is
	 called to from "main" to set up the eabi environment,
	 and the -msdata option can use both "r2" and "r13" to
	 point to two separate small data areas.  Selecting
	 -mno-eabi means that the stack is aligned to a 16 byte
	 boundary, do not call an initialization function from
	 "main", and the -msdata option will only use "r13" to
	 point to a single small data area.  The -meabi option is
	 on by default if you configured GCC using one of the
	 powerpc*-*-eabi* options.

     -msdata=eabi
	 On System V.4 and embedded PowerPC systems, put small
	 initialized "const" global and static data in the
	 .sdata2 section, which is pointed to by register "r2".
	 Put small initialized non-"const" global and static data
	 in the .sdata section, which is pointed to by register
	 "r13".	 Put small uninitialized global and static data
	 in the .sbss section, which is adjacent to the .sdata
	 section.  The -msdata=eabi option is incompatible with
	 the -mrelocatable option.  The -msdata=eabi option also
	 sets the -memb option.

     -msdata=sysv

gcc-3.4.6		   2011-08-18			      135

GCC(1)			       GNU			   GCC(1)

	 On System V.4 and embedded PowerPC systems, put small
	 global and static data in the .sdata section, which is
	 pointed to by register "r13".	Put small uninitialized
	 global and static data in the .sbss section, which is
	 adjacent to the .sdata section. The -msdata=sysv option
	 is incompatible with the -mrelocatable option.

     -msdata=default
     -msdata
	 On System V.4 and embedded PowerPC systems, if -meabi is
	 used, compile code the same as -msdata=eabi, otherwise
	 compile code the same as -msdata=sysv.

     -msdata-data
	 On System V.4 and embedded PowerPC systems, put small
	 global and static data in the .sdata section.	Put small
	 uninitialized global and static data in the .sbss sec-
	 tion.	Do not use register "r13" to address small data
	 however.  This is the default behavior unless other
	 -msdata options are used.

     -msdata=none
     -mno-sdata
	 On embedded PowerPC systems, put all initialized global
	 and static data in the .data section, and all uninitial-
	 ized data in the .bss section.

     -G num
	 On embedded PowerPC systems, put global and static items
	 less than or equal to num bytes into the small data or
	 bss sections instead of the normal data or bss section.
	 By default, num is 8.	The -G num switch is also passed
	 to the linker. All modules should be compiled with the
	 same -G num value.

     -mregnames
     -mno-regnames
	 On System V.4 and embedded PowerPC systems do (do not)
	 emit register names in the assembly language output
	 using symbolic forms.

     -mlongcall
     -mno-longcall
	 Default to making all function calls via pointers, so
	 that functions which reside further than 64 megabytes
	 (67,108,864 bytes) from the current location can be
	 called.  This setting can be overridden by the "short-
	 call" function attribute, or by "#pragma longcall(0)".

	 Some linkers are capable of detecting out-of-range calls
	 and generating glue code on the fly.  On these systems,
	 long calls are unnecessary and generate slower code.  As

gcc-3.4.6		   2011-08-18			      136

GCC(1)			       GNU			   GCC(1)

	 of this writing, the AIX linker can do this, as can the
	 GNU linker for PowerPC/64.  It is planned to add this
	 feature to the GNU linker for 32-bit PowerPC systems as
	 well.

	 On Mach-O (Darwin) systems, this option directs the com-
	 piler emit to the glue for every direct call, and the
	 Darwin linker decides whether to use or discard it.

	 In the future, we may cause GCC to ignore all longcall
	 specifications when the linker is known to generate
	 glue.

     -pthread
	 Adds support for multithreading with the pthreads
	 library. This option sets flags for both the preproces-
	 sor and linker.

	 Use this on MirOS to compile and link threaded code,
	 isolating the program from operating system details.

     Darwin Options

     These options are defined for all architectures running the
     Darwin operating system.  They are useful for compatibility
     with other Mac OS compilers.

     -all_load
	 Loads all members of static archive libraries. See man
	 ld(1) for more information.

     -arch_errors_fatal
	 Cause the errors having to do with files that have the
	 wrong architecture to be fatal.

     -bind_at_load
	 Causes the output file to be marked such that the
	 dynamic linker will bind all undefined references when
	 the file is loaded or launched.

     -bundle
	 Produce a Mach-o bundle format file. See man ld(1) for
	 more information.

     -bundle_loader executable
	 This specifies the executable that will be loading the
	 build output file being linked. See man ld(1) for more
	 information.

     -allowable_client	client_name
     -arch_only
     -client_name


gcc-3.4.6		   2011-08-18			      137

GCC(1)			       GNU			   GCC(1)

     -compatibility_version
     -current_version
     -dependency-file
     -dylib_file
     -dylinker_install_name
     -dynamic
     -dynamiclib
     -exported_symbols_list
     -filelist
     -flat_namespace
     -force_cpusubtype_ALL
     -force_flat_namespace
     -headerpad_max_install_names
     -image_base
     -init
     -install_name
     -keep_private_externs
     -multi_module
     -multiply_defined
     -multiply_defined_unused
     -noall_load
     -nofixprebinding
     -nomultidefs
     -noprebind
     -noseglinkedit
     -pagezero_size
     -prebind
     -prebind_all_twolevel_modules
     -private_bundle
     -read_only_relocs
     -sectalign
     -sectobjectsymbols
     -whyload
     -seg1addr
     -sectcreate
     -sectobjectsymbols
     -sectorder
     -seg_addr_table
     -seg_addr_table_filename
     -seglinkedit
     -segprot
     -segs_read_only_addr
     -segs_read_write_addr
     -single_module
     -static
     -sub_library
     -sub_umbrella
     -twolevel_namespace
     -umbrella
     -undefined
     -unexported_symbols_list
     -weak_reference_mismatches


gcc-3.4.6		   2011-08-18			      138

GCC(1)			       GNU			   GCC(1)

     -whatsloaded
	 These options are available for Darwin linker. Darwin
	 linker man page describes them in detail.

     MIPS Options

     -EB Generate big-endian code.

     -EL Generate little-endian code.  This is the default for
	 mips*el-*-* configurations.

     -march=arch
	 Generate code that will run on arch, which can be the
	 name of a generic MIPS ISA, or the name of a particular
	 processor. The ISA names are: mips1, mips2, mips3,
	 mips4, mips32, mips32r2, and mips64. The processor names
	 are: 4kc, 4kp, 5kc, 20kc, m4k, r2000, r3000, r3900,
	 r4000, r4400, r4600, r4650, r6000, r8000, rm7000,
	 rm9000, orion, sb1, vr4100, vr4111, vr4120, vr4300,
	 vr5000, vr5400 and vr5500. The special value from-abi
	 selects the most compatible architecture for the
	 selected ABI (that is, mips1 for 32-bit ABIs and mips3
	 for 64-bit ABIs).

	 In processor names, a final 000 can be abbreviated as k
	 (for example, -march=r2k).  Prefixes are optional, and
	 vr may be written r.

	 GCC defines two macros based on the value of this
	 option.  The first is _MIPS_ARCH, which gives the name
	 of target architecture, as a string.  The second has the
	 form _MIPS_ARCH_foo, where foo is the capitalized value
	 of _MIPS_ARCH. For example, -march=r2000 will set
	 _MIPS_ARCH to "r2000" and define the macro
	 _MIPS_ARCH_R2000.

	 Note that the _MIPS_ARCH macro uses the processor names
	 given above.  In other words, it will have the full pre-
	 fix and will not abbreviate 000 as k.	In the case of
	 from-abi, the macro names the resolved architecture
	 (either "mips1" or "mips3").  It names the default
	 architecture when no -march option is given.

     -mtune=arch
	 Optimize for arch.  Among other things, this option con-
	 trols the way instructions are scheduled, and the per-
	 ceived cost of arithmetic operations.	The list of arch
	 values is the same as for -march.

	 When this option is not used, GCC will optimize for the
	 processor specified by -march.	 By using -march and
	 -mtune together, it is possible to generate code that

gcc-3.4.6		   2011-08-18			      139

GCC(1)			       GNU			   GCC(1)

	 will run on a family of processors, but optimize the
	 code for one particular member of that family.

	 -mtune defines the macros _MIPS_TUNE and _MIPS_TUNE_foo,
	 which work in the same way as the -march ones described
	 above.

     -mips1
	 Equivalent to -march=mips1.

     -mips2
	 Equivalent to -march=mips2.

     -mips3
	 Equivalent to -march=mips3.

     -mips4
	 Equivalent to -march=mips4.

     -mips32
	 Equivalent to -march=mips32.

     -mips32r2
	 Equivalent to -march=mips32r2.

     -mips64
	 Equivalent to -march=mips64.

     -mips16
     -mno-mips16
	 Use (do not use) the MIPS16 ISA.

     -mabi=32
     -mabi=o64
     -mabi=n32
     -mabi=64
     -mabi=eabi
	 Generate code for the given ABI.

	 Note that the EABI has a 32-bit and a 64-bit variant.
	 GCC normally generates 64-bit code when you select a
	 64-bit architecture, but you can use -mgp32 to get
	 32-bit code instead.

     -mabicalls
     -mno-abicalls
	 Generate (do not generate) SVR4-style position-
	 independent code. -mabicalls is the default for
	 SVR4-based systems.

     -mxgot
     -mno-xgot


gcc-3.4.6		   2011-08-18			      140

GCC(1)			       GNU			   GCC(1)

	 Lift (do not lift) the usual restrictions on the size of
	 the global offset table.

	 GCC normally uses a single instruction to load values
	 from the GOT. While this is relatively efficient, it
	 will only work if the GOT is smaller than about 64k.
	 Anything larger will cause the linker to report an error
	 such as:

		 relocation truncated to fit: R_MIPS_GOT16 foobar

	 If this happens, you should recompile your code with
	 -mxgot. It should then work with very large GOTs,
	 although it will also be less efficient, since it will
	 take three instructions to fetch the value of a global
	 symbol.

	 Note that some linkers can create multiple GOTs.  If you
	 have such a linker, you should only need to use -mxgot
	 when a single object file accesses more than 64k's worth
	 of GOT entries.  Very few do.

	 These options have no effect unless GCC is generating
	 position independent code.

     -membedded-pic
     -mno-embedded-pic
	 Generate (do not generate) position-independent code
	 suitable for some embedded systems.  All calls are made
	 using PC relative addresses, and all data is addressed
	 using the $gp register.  No more than 65536 bytes of
	 global data may be used.  This requires GNU as and GNU
	 ld, which do most of the work.

     -mgp32
	 Assume that general-purpose registers are 32 bits wide.

     -mgp64
	 Assume that general-purpose registers are 64 bits wide.

     -mfp32
	 Assume that floating-point registers are 32 bits wide.

     -mfp64
	 Assume that floating-point registers are 64 bits wide.

     -mhard-float
	 Use floating-point coprocessor instructions.

     -msoft-float
	 Do not use floating-point coprocessor instructions.
	 Implement floating-point calculations using library

gcc-3.4.6		   2011-08-18			      141

GCC(1)			       GNU			   GCC(1)

	 calls instead.

     -msingle-float
	 Assume that the floating-point coprocessor only supports
	 single-precision operations.

     -mdouble-float
	 Assume that the floating-point coprocessor supports
	 double-precision operations.  This is the default.

     -mint64
	 Force "int" and "long" types to be 64 bits wide.  See
	 -mlong32 for an explanation of the default and the way
	 that the pointer size is determined.

     -mlong64
	 Force "long" types to be 64 bits wide.	 See -mlong32 for
	 an explanation of the default and the way that the
	 pointer size is determined.

     -mlong32
	 Force "long", "int", and pointer types to be 32 bits
	 wide.

	 The default size of "int"s, "long"s and pointers depends
	 on the ABI.  All the supported ABIs use 32-bit "int"s.
	 The n64 ABI uses 64-bit "long"s, as does the 64-bit
	 EABI; the others use 32-bit "long"s.  Pointers are the
	 same size as "long"s, or the same size as integer regis-
	 ters, whichever is smaller.

     -G num
	 Put global and static items less than or equal to num
	 bytes into the small data or bss section instead of the
	 normal data or bss section. This allows the data to be
	 accessed using a single instruction.

	 All modules should be compiled with the same -G num
	 value.

     -membedded-data
     -mno-embedded-data
	 Allocate variables to the read-only data section first
	 if possible, then next in the small data section if pos-
	 sible, otherwise in data.  This gives slightly slower
	 code than the default, but reduces the amount of RAM
	 required when executing, and thus may be preferred for
	 some embedded systems.

     -muninit-const-in-rodata
     -mno-uninit-const-in-rodata
	 Put uninitialized "const" variables in the read-only

gcc-3.4.6		   2011-08-18			      142

GCC(1)			       GNU			   GCC(1)

	 data section. This option is only meaningful in conjunc-
	 tion with -membedded-data.

     -msplit-addresses
     -mno-split-addresses
	 Enable (disable) use of the "%hi()" and "%lo()" assem-
	 bler relocation operators.  This option has been super-
	 ceded by -mexplicit-relocs but is retained for backwards
	 compatibility.

     -mexplicit-relocs
     -mno-explicit-relocs
	 Use (do not use) assembler relocation operators when
	 dealing with symbolic addresses.  The alternative,
	 selected by -mno-explicit-relocs, is to use assembler
	 macros instead.

	 -mexplicit-relocs is usually the default if GCC was con-
	 figured to use an assembler that supports relocation
	 operators. However, there are two exceptions:

	 *   GCC is not yet able to generate explicit relocations
	     for the combination of -mabi=64 and -mno-abicalls.
	     This will be addressed in a future release.

	 *   The combination of -mabicalls and
	     -fno-unit-at-a-time implies -mno-explicit-relocs
	     unless explicitly overridden. This is because, when
	     generating abicalls, the choice of relocation
	     depends on whether a symbol is local or global.  In
	     some rare cases, GCC will not be able to decide this
	     until the whole compilation unit has been read.

     -mrnames
     -mno-rnames
	 Generate (do not generate) code that refers to registers
	 using their software names.  The default is -mno-rnames,
	 which tells GCC to use hardware names like $4 instead of
	 software names like a0.  The only assembler known to
	 support -rnames is the Algorithmics assembler.

     -mcheck-zero-division
     -mno-check-zero-division
	 Trap (do not trap) on integer division by zero.  The
	 default is -mcheck-zero-division.

     -mmemcpy
     -mno-memcpy
	 Force (do not force) the use of "memcpy()" for non-
	 trivial block moves.  The default is -mno-memcpy, which
	 allows GCC to inline most constant-sized copies.

gcc-3.4.6		   2011-08-18			      143

GCC(1)			       GNU			   GCC(1)

     -mlong-calls
     -mno-long-calls
	 Disable (do not disable) use of the "jal" instruction.
	 Calling functions using "jal" is more efficient but
	 requires the caller and callee to be in the same 256
	 megabyte segment.

	 This option has no effect on abicalls code.  The default
	 is -mno-long-calls.

     -mmad
     -mno-mad
	 Enable (disable) use of the "mad", "madu" and "mul"
	 instructions, as provided by the R4650 ISA.

     -mfused-madd
     -mno-fused-madd
	 Enable (disable) use of the floating point multiply-
	 accumulate instructions, when they are available.  The
	 default is -mfused-madd.

	 When multiply-accumulate instructions are used, the
	 intermediate product is calculated to infinite precision
	 and is not subject to the FCSR Flush to Zero bit.  This
	 may be undesirable in some circumstances.

     -nocpp
	 Tell the MIPS assembler to not run its preprocessor over
	 user assembler files (with a .s suffix) when assembling
	 them.

     -mfix-sb1
     -mno-fix-sb1
	 Work around certain SB-1 CPU core errata. (This flag
	 currently works around the SB-1 revision 2 ``F1'' and
	 ``F2'' floating point errata.)

     -mflush-func=func
     -mno-flush-func
	 Specifies the function to call to flush the I and D
	 caches, or to not call any such function.  If called,
	 the function must take the same arguments as the common
	 "_flush_func()", that is, the address of the memory
	 range for which the cache is being flushed, the size of
	 the memory range, and the number 3 (to flush both
	 caches).  The default depends on the target GCC was con-
	 figured for, but commonly is either _flush_func or
	 __cpu_flush.

     -mbranch-likely
     -mno-branch-likely
	 Enable or disable use of Branch Likely instructions,

gcc-3.4.6		   2011-08-18			      144

GCC(1)			       GNU			   GCC(1)

	 regardless of the default for the selected architecture.
	 By default, Branch Likely instructions may be generated
	 if they are supported by the selected architecture.  An
	 exception is for the MIPS32 and MIPS64 architectures and
	 processors which implement those architectures; for
	 those, Branch Likely instructions will not be generated
	 by default because the MIPS32 and MIPS64 architectures
	 specifically deprecate their use.

     Intel 386 and AMD x86-64 Options

     These -m options are defined for the i386 and x86-64 family
     of computers:

     -mtune=cpu-type
	 Tune to cpu-type everything applicable about the gen-
	 erated code, except for the ABI and the set of available
	 instructions.	The choices for cpu-type are:

	 i386
	     Original Intel's i386 CPU.

	 i486
	     Intel's i486 CPU.	(No scheduling is implemented for
	     this chip.)

	 i586, pentium
	     Intel Pentium CPU with no MMX support.

	 pentium-mmx
	     Intel PentiumMMX CPU based on Pentium core with MMX
	     instruction set support.

	 i686, pentiumpro
	     Intel PentiumPro CPU.

	 pentium2
	     Intel Pentium2 CPU based on PentiumPro core with MMX
	     instruction set support.

	 pentium3, pentium3m
	     Intel Pentium3 CPU based on PentiumPro core with MMX
	     and SSE instruction set support.

	 pentium-m
	     Low power version of Intel Pentium3 CPU with MMX,
	     SSE and SSE2 instruction set support.  Used by Cen-
	     trino notebooks.

	 pentium4, pentium4m
	     Intel Pentium4 CPU with MMX, SSE and SSE2 instruc-
	     tion set support.

gcc-3.4.6		   2011-08-18			      145

GCC(1)			       GNU			   GCC(1)

	 prescott
	     Improved version of Intel Pentium4 CPU with MMX,
	     SSE, SSE2 and SSE3 instruction set support.

	 nocona
	     Improved version of Intel Pentium4 CPU with 64-bit
	     extensions, MMX, SSE, SSE2 and SSE3 instruction set
	     support.

	 k6  AMD K6 CPU with MMX instruction set support.

	 k6-2, k6-3
	     Improved versions of AMD K6 CPU with MMX and 3dNOW!
	     instruction set support.

	 athlon, athlon-tbird
	     AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
	     SSE prefetch instructions support.

	 athlon-4, athlon-xp, athlon-mp
	     Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced
	     3dNOW! and full SSE instruction set support.

	 k8, opteron, athlon64, athlon-fx
	     AMD K8 core based CPUs with x86-64 instruction set
	     support.  (This supersets MMX, SSE, SSE2, 3dNOW!,
	     enhanced 3dNOW! and 64-bit instruction set exten-
	     sions.)

	 winchip-c6
	     IDT Winchip C6 CPU, dealt in same way as i486 with
	     additional MMX instruction set support.

	 winchip2
	     IDT Winchip2 CPU, dealt in same way as i486 with
	     additional MMX and 3dNOW! instruction set support.

	 c3  Via C3 CPU with MMX and 3dNOW!  instruction set sup-
	     port.  (No scheduling is implemented for this chip.)

	 c3-2
	     Via C3-2 CPU with MMX and SSE instruction set sup-
	     port.  (No scheduling is implemented for this chip.)

	 While picking a specific 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 -march=cpu-type option being used.

     -march=cpu-type
	 Generate instructions for the machine type cpu-type.
	 The choices for cpu-type are the same as for -mtune.


gcc-3.4.6		   2011-08-18			      146

GCC(1)			       GNU			   GCC(1)

	 Moreover, specifying -march=cpu-type implies
	 -mtune=cpu-type.

     -mcpu=cpu-type
	 A deprecated synonym for -mtune.

     -m386
     -m486
     -mpentium
     -mpentiumpro
	 These options are synonyms for -mtune=i386, -mtune=i486,
	 -mtune=pentium, and -mtune=pentiumpro respectively.
	 These synonyms are deprecated.

     -mfpmath=unit
	 Generate floating point arithmetics for selected unit
	 unit.	The choices for unit are:

	 387 Use the standard 387 floating point coprocessor
	     present majority of chips and emulated otherwise.
	     Code compiled with this option will run almost
	     everywhere. The temporary results are computed in
	     80bit precision instead of precision specified by
	     the type resulting in slightly different results
	     compared to most of other chips. See -ffloat-store
	     for more detailed description.

	     This is the default choice for i386 compiler.

	 sse Use scalar floating point instructions present in
	     the SSE instruction set. This instruction set is
	     supported by Pentium3 and newer chips, in the AMD
	     line by Athlon-4, Athlon-xp and Athlon-mp chips.
	     The earlier version of SSE instruction set supports
	     only single precision arithmetics, thus the double
	     and extended precision arithmetics is still done
	     using 387.	 Later version, present only in Pentium4
	     and the future AMD x86-64 chips supports double pre-
	     cision arithmetics too.

	     For i387 you need to use -march=cpu-type, -msse or
	     -msse2 switches to enable SSE extensions and make
	     this option effective.  For x86-64 compiler, these
	     extensions are enabled by default.

	     The resulting code should be considerably faster in
	     the majority of cases and avoid the numerical insta-
	     bility problems of 387 code, but may break some
	     existing code that expects temporaries to be 80bit.

	     This is the default choice for the x86-64 compiler.

gcc-3.4.6		   2011-08-18			      147

GCC(1)			       GNU			   GCC(1)

	 sse,387
	     Attempt to utilize both instruction sets at once.
	     This effectively double the amount of available
	     registers and on chips with separate execution units
	     for 387 and SSE the execution resources too.  Use
	     this option with care, as it is still experimental,
	     because the GCC register allocator does not model
	     separate functional units well resulting in instable
	     performance.

     -masm=dialect
	 Output asm instructions using selected dialect. Sup-
	 ported choices are intel or att (the default one).

     -mieee-fp
     -mno-ieee-fp
	 Control whether or not the compiler uses IEEE floating
	 point comparisons.  These handle correctly the case
	 where the result of a comparison is unordered.

     -msoft-float
	 Generate output containing library calls for floating
	 point. Warning: the requisite libraries are not part of
	 GCC. Normally the facilities of the machine's usual C
	 compiler are used, but this can't be done directly in
	 cross-compilation.  You must make your own arrangements
	 to provide suitable library functions for
	 cross-compilation.

	 On machines where a function returns floating point
	 results in the 80387 register stack, some floating point
	 opcodes may be emitted even if -msoft-float is used.

     -mno-fp-ret-in-387
	 Do not use the FPU registers for return values of func-
	 tions.

	 The usual calling convention has functions return values
	 of types "float" and "double" in an FPU register, even
	 if there is no FPU.  The idea is that the operating sys-
	 tem should emulate an FPU.

	 The option -mno-fp-ret-in-387 causes such values to be
	 returned in ordinary CPU registers instead.

     -mno-fancy-math-387
	 Some 387 emulators do not support the "sin", "cos" and
	 "sqrt" instructions for the 387.  Specify this option to
	 avoid generating those instructions.  This option is the
	 default on FreeBSD, OpenBSD and NetBSD.  This option is
	 overridden when -march indicates that the target cpu
	 will always have an FPU and so the instruction will not

gcc-3.4.6		   2011-08-18			      148

GCC(1)			       GNU			   GCC(1)

	 need emulation.  As of revision 2.6.1, these instruc-
	 tions are not generated unless you also use the
	 -funsafe-math-optimizations switch.

     -malign-double
     -mno-align-double
	 Control whether GCC aligns "double", "long double", and
	 "long long" variables on a two word boundary or a one
	 word boundary.	 Aligning "double" variables on a two
	 word boundary will produce code that runs somewhat fas-
	 ter on a Pentium at the expense of more memory.

	 Warning: if you use the -malign-double switch, struc-
	 tures containing the above types will be aligned dif-
	 ferently than the published application binary interface
	 specifications for the 386 and will not be binary compa-
	 tible with structures in code compiled without that
	 switch.

     -m96bit-long-double
     -m128bit-long-double
	 These switches control the size of "long double" type.
	 The i386 application binary interface specifies the size
	 to be 96 bits, so -m96bit-long-double is the default in
	 32 bit mode.

	 Modern architectures (Pentium and newer) would prefer
	 "long double" to be aligned to an 8 or 16 byte boundary.
	 In arrays or structures conforming to the ABI, this
	 would not be possible.	 So specifying a
	 -m128bit-long-double will align "long double" to a 16
	 byte boundary by padding the "long double" with an addi-
	 tional 32 bit zero.

	 In the x86-64 compiler, -m128bit-long-double is the
	 default choice as its ABI specifies that "long double"
	 is to be aligned on 16 byte boundary.

	 Notice that neither of these options enable any extra
	 precision over the x87 standard of 80 bits for a "long
	 double".

	 Warning: if you override the default value for your tar-
	 get ABI, the structures and arrays containing "long dou-
	 ble" variables will change their size as well as func-
	 tion calling convention for function taking "long dou-
	 ble" will be modified.	 Hence they will not be binary
	 compatible with arrays or structures in code compiled
	 without that switch.

     -msvr3-shlib
     -mno-svr3-shlib


gcc-3.4.6		   2011-08-18			      149

GCC(1)			       GNU			   GCC(1)

	 Control whether GCC places uninitialized local variables
	 into the "bss" or "data" segments.  -msvr3-shlib places
	 them into "bss".  These options are meaningful only on
	 System V Release 3.

     -mrtd
	 Use a different function-calling convention, in which
	 functions that take a fixed number of arguments return
	 with the "ret" num instruction, which pops their argu-
	 ments while returning.	 This saves one instruction in
	 the caller since there is no need to pop the arguments
	 there.

	 You can specify that an individual function is called
	 with this calling sequence with the function attribute
	 stdcall.  You can also override the -mrtd option by
	 using the function attribute cdecl.

	 Warning: this calling convention is incompatible with
	 the one normally used on Unix, so you cannot use it if
	 you need to call libraries compiled with the Unix com-
	 piler.

	 Also, you must provide function prototypes for all func-
	 tions that take variable numbers of arguments (including
	 "printf"); otherwise incorrect code will be generated
	 for calls to those functions.

	 In addition, seriously incorrect code will result if you
	 call a function with too many arguments.  (Normally,
	 extra arguments are harmlessly ignored.)

     -mregparm=num
	 Control how many registers are used to pass integer
	 arguments.  By default, no registers are used to pass
	 arguments, and at most 3 registers can be used.  You can
	 control this behavior for a specific function by using
	 the function attribute regparm.

	 Warning: if you use this switch, and num is nonzero,
	 then you must build all modules with the same value,
	 including any libraries.  This includes the system
	 libraries and startup modules.

     -mpreferred-stack-boundary=num
	 Attempt to keep the stack boundary aligned to a 2 raised
	 to num byte boundary.	If -mpreferred-stack-boundary is
	 not specified, the default is 4 (16 bytes or 128 bits),
	 except when optimizing for code size (-Os), in which
	 case the default is the minimum correct alignment (4
	 bytes for x86, and 8 bytes for x86-64).

gcc-3.4.6		   2011-08-18			      150

GCC(1)			       GNU			   GCC(1)

	 On Pentium and PentiumPro, "double" and "long double"
	 values should be aligned to an 8 byte boundary (see
	 -malign-double) or suffer significant run time perfor-
	 mance penalties.  On Pentium III, the Streaming SIMD
	 Extension (SSE) data type "__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. Further, every func-
	 tion 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 boundary will most likely misalign
	 the stack.  It is recommended that libraries that use
	 callbacks always use the default setting.

	 This extra alignment does consume extra stack space, and
	 generally increases code size.	 Code that is sensitive
	 to stack space usage, such as embedded systems and
	 operating system kernels, may want to reduce the pre-
	 ferred alignment to -mpreferred-stack-boundary=2.

     -mmmx
     -mno-mmx
     -msse
     -mno-sse
     -msse2
     -mno-sse2
     -msse3
     -mno-sse3
     -m3dnow
     -mno-3dnow
	 These switches enable or disable the use of built-in
	 functions that allow direct access to the MMX, SSE,
	 SSE2, SSE3 and 3Dnow extensions of the instruction set.

	 To have SSE/SSE2 instructions generated automatically
	 from floating-point code, see -mfpmath=sse.

     -mpush-args
     -mno-push-args
	 Use PUSH operations to store outgoing parameters.  This
	 method is shorter and usually equally fast as method
	 using SUB/MOV operations and is enabled by default.  In
	 some cases disabling it may improve performance because
	 of improved scheduling and reduced dependencies.

     -maccumulate-outgoing-args
	 If enabled, the maximum amount of space required for
	 outgoing arguments will be computed in the function pro-
	 logue.	 This is faster on most modern CPUs because of

gcc-3.4.6		   2011-08-18			      151

GCC(1)			       GNU			   GCC(1)

	 reduced dependencies, improved scheduling and reduced
	 stack usage when preferred stack boundary is not equal
	 to 2.	The drawback is a notable increase in code size.
	 This switch implies -mno-push-args.

     -mthreads
	 Support thread-safe exception handling on Mingw32.  Code
	 that relies on thread-safe exception handling must com-
	 pile and link all code with the -mthreads option.  When
	 compiling, -mthreads defines -D_MT; when linking, it
	 links in a special thread helper library -lmingwthrd
	 which cleans up per thread exception handling data.

     -mno-align-stringops
	 Do not align destination of inlined string operations.
	 This switch reduces code size and improves performance
	 in case the destination is already aligned, but GCC
	 doesn't know about it.

     -minline-all-stringops
	 By default GCC inlines string operations only when des-
	 tination is known to be aligned at least to 4 byte boun-
	 dary.	This enables more inlining, increase code size,
	 but may improve performance of code that depends on fast
	 memcpy, strlen and memset for short lengths.

     -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
	 -fomit-frame-pointer removes the frame pointer for all
	 functions which might make debugging harder.

     -mtls-direct-seg-refs
     -mno-tls-direct-seg-refs
	 Controls whether TLS variables may be accessed with
	 offsets from the TLS segment register (%gs for 32-bit,
	 %fs for 64-bit), or whether the thread base pointer must
	 be added.  Whether or not this is legal depends on the
	 operating system, and whether it maps the segment to
	 cover the entire TLS area.

	 For systems that use GNU libc, the default is on.

     These -m switches are supported in addition to the above on
     AMD x86-64 processors in 64-bit environments.

     -m32
     -m64
	 Generate code for a 32-bit or 64-bit environment. The
	 32-bit environment sets int, long and pointer to 32 bits

gcc-3.4.6		   2011-08-18			      152

GCC(1)			       GNU			   GCC(1)

	 and generates code that runs on any i386 system. The
	 64-bit environment sets int to 32 bits and long and
	 pointer to 64 bits and generates code for AMD's x86-64
	 architecture.

     -mno-red-zone
	 Do not use a so called red zone for x86-64 code.  The
	 red zone is mandated by the x86-64 ABI, it is a 128-byte
	 area beyond the location of the stack pointer that will
	 not be modified by signal or interrupt handlers and
	 therefore can be used for temporary data without adjust-
	 ing the stack pointer.	 The flag -mno-red-zone disables
	 this red zone.

     -mcmodel=small
	 Generate code for the small code model: the program and
	 its symbols must be linked in the lower 2 GB of the
	 address space.	 Pointers are 64 bits. Programs can be
	 statically or dynamically linked.  This is the default
	 code model.

     -mcmodel=kernel
	 Generate code for the kernel code model.  The kernel
	 runs in the negative 2 GB of the address space. This
	 model has to be used for Linux kernel code.

     -mcmodel=medium
	 Generate code for the medium model: The program is
	 linked in the lower 2 GB of the address space but sym-
	 bols can be located anywhere in the address space.  Pro-
	 grams can be statically or dynamically linked, but
	 building of shared libraries are not supported with the
	 medium model.

     -mcmodel=large
	 Generate code for the large model: This model makes no
	 assumptions about addresses and sizes of sections.
	 Currently GCC does not implement this model.

     HPPA Options

     These -m options are defined for the HPPA family of comput-
     ers:

     -march=architecture-type
	 Generate code for the specified architecture.	The
	 choices for architecture-type are 1.0 for PA 1.0, 1.1
	 for PA 1.1, and 2.0 for PA 2.0 processors.  Refer to
	 /usr/lib/sched.models on an HP-UX system to determine
	 the proper architecture option for your machine.  Code
	 compiled for lower numbered architectures will run on
	 higher numbered architectures, but not the other way

gcc-3.4.6		   2011-08-18			      153

GCC(1)			       GNU			   GCC(1)

	 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.

     -mpa-risc-1-0
     -mpa-risc-1-1
     -mpa-risc-2-0
	 Synonyms for -march=1.0, -march=1.1, and -march=2.0
	 respectively.

     -mbig-switch
	 Generate code suitable for big switch tables.	Use this
	 option only if the assembler/linker complain about out
	 of range branches within a switch table.

     -mjump-in-delay
	 Fill delay slots of function calls with unconditional
	 jump instructions by modifying the return pointer for
	 the function call to be the target of the conditional
	 jump.

     -mdisable-fpregs
	 Prevent floating point registers from being used in any
	 manner.  This is necessary for compiling kernels which
	 perform lazy context switching of floating point regis-
	 ters.	If you use this option and attempt to perform
	 floating point operations, the compiler will abort.

     -mdisable-indexing
	 Prevent the compiler from using indexing address modes.
	 This avoids some rather obscure problems when compiling
	 MIG generated code under MACH.

     -mno-space-regs
	 Generate code that assumes the target has no space
	 registers.  This allows GCC to generate faster indirect
	 calls and use unscaled index address modes.

	 Such code is suitable for level 0 PA systems and ker-
	 nels.

     -mfast-indirect-calls
	 Generate code that assumes calls never cross space boun-
	 daries.  This allows GCC to emit code which performs
	 faster indirect calls.

	 This option will not work in the presence of shared
	 libraries or nested functions.

     -mlong-load-store


gcc-3.4.6		   2011-08-18			      154

GCC(1)			       GNU			   GCC(1)

	 Generate 3-instruction load and store sequences as some-
	 times required by the HP-UX 10 linker.	 This is
	 equivalent to the +k option to the HP compilers.

     -mportable-runtime
	 Use the portable calling conventions proposed by HP for
	 ELF systems.

     -mgas
	 Enable the use of assembler directives only GAS under-
	 stands.

     -mschedule=cpu-type
	 Schedule code according to the constraints for the
	 machine type cpu-type.	 The choices for cpu-type are 700
	 7100, 7100LC, 7200, 7300 and 8000.  Refer to
	 /usr/lib/sched.models on an HP-UX system to determine
	 the proper scheduling option for your machine.	 The
	 default scheduling is 8000.

     -mlinker-opt
	 Enable the optimization pass in the HP-UX linker.  Note
	 this makes symbolic debugging impossible.  It also
	 triggers a bug in the HP-UX 8 and HP-UX 9 linkers in
	 which they give bogus error messages when linking some
	 programs.

     -msoft-float
	 Generate output containing library calls for floating
	 point. Warning: the requisite libraries are not avail-
	 able for all HPPA targets.  Normally the facilities of
	 the machine's usual C compiler are used, but this cannot
	 be done directly in cross-compilation.	 You must make
	 your own arrangements to provide suitable library func-
	 tions for cross-compilation.  The embedded target
	 hppa1.1-*-pro does provide software floating point sup-
	 port.

	 -msoft-float changes the calling convention in the out-
	 put file; therefore, it is only useful if you compile
	 all of a program with this option.  In particular, you
	 need to compile libgcc.a, the library that comes with
	 GCC, with -msoft-float in order for this to work.

     -msio
	 Generate the predefine, "_SIO", for server IO.	 The
	 default is -mwsio.  This generates the predefines,
	 "__hp9000s700", "__hp9000s700__" and "_WSIO", for works-
	 tation IO.  These options are available under HP-UX and
	 HI-UX.

     -mgnu-ld


gcc-3.4.6		   2011-08-18			      155

GCC(1)			       GNU			   GCC(1)

	 Use GNU ld specific options.  This passes -shared to ld
	 when building a shared library.  It is the default when
	 GCC is configured, explicitly or implicitly, with the
	 GNU linker.  This option does not have any affect on
	 which ld is called, it only changes what parameters are
	 passed to that ld.  The ld that is called is determined
	 by the --with-ld configure option, GCC's program search
	 path, and finally by the user's PATH.	The linker used
	 by GCC can be printed using which `gcc
	 -print-prog-name=ld`.	This option is only available on
	 the 64 bit HP-UX GCC, i.e. configured with
	 hppa*64*-*-hpux*.

     -mhp-ld
	 Use HP ld specific options.  This passes -b to ld when
	 building a shared library and passes +Accept TypeM-
	 ismatch to ld on all links.  It is the default when GCC
	 is configured, explicitly or implicitly, with the HP
	 linker.  This option does not have any affect on which
	 ld is called, it only changes what parameters are passed
	 to that ld.  The ld that is called is determined by the
	 --with-ld configure option, GCC's program search path,
	 and finally by the user's PATH.  The linker used by GCC
	 can be printed using which `gcc -print-prog-name=ld`.
	 This option is only available on the 64 bit HP-UX GCC,
	 i.e. configured with hppa*64*-*-hpux*.

     -mlong-calls
	 Generate code that uses long call sequences.  This
	 ensures that a call is always able to reach linker gen-
	 erated stubs.	The default is to generate long calls
	 only when the distance from the call site to the begin-
	 ning of the function or translation unit, as the case
	 may be, exceeds a predefined limit set by the branch
	 type being used.  The limits for normal calls are
	 7,600,000 and 240,000 bytes, respectively for the PA 2.0
	 and PA 1.X architectures.  Sibcalls are always limited
	 at 240,000 bytes.

	 Distances are measured from the beginning of functions
	 when using the -ffunction-sections option, or when using
	 the -mgas and -mno-portable-runtime options together
	 under HP-UX with the SOM linker.

	 It is normally not desirable to use this option as it
	 will degrade performance.  However, it may be useful in
	 large applications, particularly when partial linking is
	 used to build the application.

	 The types of long calls used depends on the capabilities
	 of the assembler and linker, and the type of code being
	 generated.  The impact on systems that support long

gcc-3.4.6		   2011-08-18			      156

GCC(1)			       GNU			   GCC(1)

	 absolute calls, and long pic symbol-difference or pc-
	 relative calls should be relatively small. However, an
	 indirect call is used on 32-bit ELF systems in pic code
	 and it is quite long.

     -nolibdld
	 Suppress the generation of link options to search
	 libdld.sl when the -static option is specified on HP-UX
	 10 and later.

     -static
	 The HP-UX implementation of setlocale in libc has a
	 dependency on libdld.sl.  There isn't an archive version
	 of libdld.sl.	Thus, when the -static option is speci-
	 fied, special link options are needed to resolve this
	 dependency.

	 On HP-UX 10 and later, the GCC driver adds the necessary
	 options to link with libdld.sl when the -static option
	 is specified. This causes the resulting binary to be
	 dynamic.  On the 64-bit port, the linkers generate
	 dynamic binaries by default in any case.  The -nolibdld
	 option can be used to prevent the GCC driver from adding
	 these link options.

     -threads
	 Add support for multithreading with the dce thread
	 library under HP-UX.  This option sets flags for both
	 the preprocessor and linker.

     Intel 960 Options

     These -m options are defined for the Intel 960 implementa-
     tions:

     -mcpu-type
	 Assume the defaults for the machine type cpu-type for
	 some of the other options, including instruction
	 scheduling, floating point support, and addressing
	 modes.	 The choices for cpu-type are ka, kb, mc, ca, cf,
	 sa, and sb. The default is kb.

     -mnumerics
     -msoft-float
	 The -mnumerics option indicates that the processor does
	 support floating-point instructions.  The -msoft-float
	 option indicates that floating-point support should not
	 be assumed.

     -mleaf-procedures
     -mno-leaf-procedures
	 Do (or do not) attempt to alter leaf procedures to be

gcc-3.4.6		   2011-08-18			      157

GCC(1)			       GNU			   GCC(1)

	 callable with the "bal" instruction as well as "call".
	 This will result in more efficient code for explicit
	 calls when the "bal" instruction can be substituted by
	 the assembler or linker, but less efficient code in
	 other cases, such as calls via function pointers, or
	 using a linker that doesn't support this optimization.

     -mtail-call
     -mno-tail-call
	 Do (or do not) make additional attempts (beyond those of
	 the machine-independent portions of the compiler) to
	 optimize tail-recursive calls into branches.  You may
	 not want to do this because the detection of cases where
	 this is not valid is not totally complete.  The default
	 is -mno-tail-call.

     -mcomplex-addr
     -mno-complex-addr
	 Assume (or do not assume) that the use of a complex
	 addressing mode is a win on this implementation of the
	 i960.	Complex addressing modes may not be worthwhile on
	 the K-series, but they definitely are on the C-series.
	 The default is currently -mcomplex-addr for all proces-
	 sors except the CB and CC.

     -mcode-align
     -mno-code-align
	 Align code to 8-byte boundaries for faster fetching (or
	 don't bother). Currently turned on by default for
	 C-series implementations only.

     -mic-compat
     -mic2.0-compat
     -mic3.0-compat
	 Enable compatibility with iC960 v2.0 or v3.0.

     -masm-compat
     -mintel-asm
	 Enable compatibility with the iC960 assembler.

     -mstrict-align
     -mno-strict-align
	 Do not permit (do permit) unaligned accesses.

     -mold-align
	 Enable structure-alignment compatibility with Intel's
	 gcc release version 1.3 (based on gcc 1.37).  This
	 option implies -mstrict-align.

     -mlong-double-64
	 Implement type long double as 64-bit floating point
	 numbers. Without the option long double is implemented

gcc-3.4.6		   2011-08-18			      158

GCC(1)			       GNU			   GCC(1)

	 by 80-bit floating point numbers.  The only reason we
	 have it because there is no 128-bit long double support
	 in fp-bit.c yet.  So it is only useful for people using
	 soft-float targets.  Otherwise, we should recommend
	 against use of it.

     DEC Alpha Options

     These -m options are defined for the DEC Alpha implementa-
     tions:

     -mno-soft-float
     -msoft-float
	 Use (do not use) the hardware floating-point instruc-
	 tions for floating-point operations.  When -msoft-float
	 is specified, functions in libgcc.a will be used to per-
	 form 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 operations.   If you are compiling for an
	 Alpha without floating-point operations, you must ensure
	 that the library is built so as not to call them.

	 Note that Alpha implementations without floating-point
	 operations are required to have floating-point regis-
	 ters.

     -mfp-reg
     -mno-fp-regs
	 Generate code that uses (does not use) the floating-
	 point register set. -mno-fp-regs implies -msoft-float.
	 If the floating-point register set is not used, floating
	 point operands are passed in integer registers as if
	 they were integers and floating-point results are passed
	 in $0 instead of $f0.	This is a non-standard calling
	 sequence, so any function with a floating-point argument
	 or return value called by code compiled with
	 -mno-fp-regs must also be compiled with that option.

	 A typical use of this option is building a kernel that
	 does not use, and hence need not save and restore, any
	 floating-point registers.

     -mieee
	 The Alpha architecture implements floating-point
	 hardware optimized for maximum performance.  It is
	 mostly compliant with the IEEE floating point standard.
	 However, for full compliance, software assistance is
	 required.  This option generates code fully IEEE compli-
	 ant code except that the inexact-flag is not maintained
	 (see below). If this option is turned on, the

gcc-3.4.6		   2011-08-18			      159

GCC(1)			       GNU			   GCC(1)

	 preprocessor macro "_IEEE_FP" is defined during compila-
	 tion.	The resulting code is less efficient but is able
	 to correctly support denormalized numbers and excep-
	 tional IEEE values such as not-a-number and plus/minus
	 infinity.  Other Alpha compilers call this option
	 -ieee_with_no_inexact.

     -mieee-with-inexact
	 This is like -mieee except the generated code also main-
	 tains the IEEE inexact-flag.  Turning on this option
	 causes the generated code to implement fully-compliant
	 IEEE math.  In addition to "_IEEE_FP", "_IEEE_FP_EXACT"
	 is defined as a preprocessor macro.  On some Alpha
	 implementations the resulting code may execute signifi-
	 cantly slower than the code generated by default.  Since
	 there is very little code that depends on the inexact-
	 flag, you should normally not specify this option.
	 Other Alpha compilers call this option
	 -ieee_with_inexact.

     -mfp-trap-mode=trap-mode
	 This option controls what floating-point related traps
	 are enabled. Other Alpha compilers call this option
	 -fptm trap-mode. The trap mode can be set to one of four
	 values:

	 n   This is the default (normal) setting.  The only
	     traps that are enabled are the ones that cannot be
	     disabled in software (e.g., division by zero trap).

	 u   In addition to the traps enabled by n, underflow
	     traps are enabled as well.

	 su  Like su, but the instructions are marked to be safe
	     for software completion (see Alpha architecture
	     manual for details).

	 sui Like su, but inexact traps are enabled as well.

     -mfp-rounding-mode=rounding-mode
	 Selects the IEEE rounding mode.  Other Alpha compilers
	 call this option -fprm rounding-mode.	The rounding-mode
	 can be one of:

	 n   Normal IEEE rounding mode.	 Floating point numbers
	     are rounded towards the nearest machine number or
	     towards the even machine number in case of a tie.

	 m   Round towards minus infinity.

	 c   Chopped rounding mode.  Floating point numbers are
	     rounded towards zero.

gcc-3.4.6		   2011-08-18			      160

GCC(1)			       GNU			   GCC(1)

	 d   Dynamic rounding mode.  A field in the floating
	     point control register (fpcr, see Alpha architecture
	     reference manual) controls the rounding mode in
	     effect.  The C library initializes this register for
	     rounding towards plus infinity.  Thus, unless your
	     program modifies the fpcr, d corresponds to round
	     towards plus infinity.

     -mtrap-precision=trap-precision
	 In the Alpha architecture, floating point traps are
	 imprecise.  This means without software assistance it is
	 impossible to recover from a floating trap and program
	 execution normally needs to be terminated. GCC can gen-
	 erate code that can assist operating system trap
	 handlers in determining the exact location that caused a
	 floating point trap. Depending on the requirements of an
	 application, different levels of precisions can be
	 selected:

	 p   Program precision.	 This option is the default and
	     means a trap handler can only identify which program
	     caused a floating point exception.

	 f   Function precision.  The trap handler can determine
	     the function that caused a floating point exception.

	 i   Instruction precision.  The trap handler can deter-
	     mine the exact instruction that caused a floating
	     point exception.

	 Other Alpha compilers provide the equivalent options
	 called -scope_safe and -resumption_safe.

     -mieee-conformant
	 This option marks the generated code as IEEE conformant.
	 You must not use this option unless you also specify
	 -mtrap-precision=i and either -mfp-trap-mode=su or
	 -mfp-trap-mode=sui.  Its only effect is to emit the line
	 .eflag 48 in the function prologue of the generated
	 assembly file.	 Under DEC Unix, this has the effect that
	 IEEE-conformant math library routines will be linked in.

     -mbuild-constants
	 Normally GCC examines a 32- or 64-bit integer constant
	 to see if it can construct it from smaller constants in
	 two or three instructions.  If it cannot, it will output
	 the constant as a literal and generate code to load it
	 from the data segment at runtime.

	 Use this option to require GCC to construct all integer
	 constants using code, even if it takes more instructions
	 (the maximum is six).

gcc-3.4.6		   2011-08-18			      161

GCC(1)			       GNU			   GCC(1)

	 You would typically use this option to build a shared
	 library dynamic loader.  Itself a shared library, it
	 must relocate itself in memory before it can find the
	 variables and constants in its own data segment.

     -malpha-as
     -mgas
	 Select whether to generate code to be assembled by the
	 vendor-supplied assembler (-malpha-as) or by the GNU
	 assembler -mgas.

     -mbwx
     -mno-bwx
     -mcix
     -mno-cix
     -mfix
     -mno-fix
     -mmax
     -mno-max
	 Indicate whether GCC should generate code to use the
	 optional BWX, CIX, FIX and MAX instruction sets.  The
	 default is to use the instruction sets supported by the
	 CPU type specified via -mcpu= option or that of the CPU
	 on which GCC was built if none was specified.

     -mfloat-vax
     -mfloat-ieee
	 Generate code that uses (does not use) VAX F and G
	 floating point arithmetic instead of IEEE single and
	 double precision.

     -mexplicit-relocs
     -mno-explicit-relocs
	 Older Alpha assemblers provided no way to generate sym-
	 bol relocations except via assembler macros.  Use of
	 these macros does not allow optimal instruction schedul-
	 ing.  GNU binutils as of version 2.12 supports a new
	 syntax that allows the compiler to explicitly mark which
	 relocations should apply to which instructions.  This
	 option is mostly useful for debugging, as GCC detects
	 the capabilities of the assembler when it is built and
	 sets the default accordingly.

     -msmall-data
     -mlarge-data
	 When -mexplicit-relocs is in effect, static data is
	 accessed via gp-relative relocations.	When -msmall-data
	 is used, objects 8 bytes long or smaller are placed in a
	 small data area (the ".sdata" and ".sbss" sections) and
	 are accessed via 16-bit relocations off of the $gp
	 register.  This limits the size of the small data area
	 to 64KB, but allows the variables to be directly

gcc-3.4.6		   2011-08-18			      162

GCC(1)			       GNU			   GCC(1)

	 accessed via a single instruction.

	 The default is -mlarge-data.  With this option the data
	 area is limited to just below 2GB.  Programs that
	 require more than 2GB of data must use "malloc" or
	 "mmap" to allocate the data in the heap instead of in
	 the program's data segment.

	 When generating code for shared libraries, -fpic implies
	 -msmall-data and -fPIC implies -mlarge-data.

     -msmall-text
     -mlarge-text
	 When -msmall-text is used, the compiler assumes that the
	 code of the entire program (or shared library) fits in
	 4MB, and is thus reachable with a branch instruction.
	 When -msmall-data is used, the compiler can assume that
	 all local symbols share the same $gp value, and thus
	 reduce the number of instructions required for a func-
	 tion call from 4 to 1.

	 The default is -mlarge-text.

     -mcpu=cpu_type
	 Set the instruction set and instruction scheduling
	 parameters for machine type cpu_type.	You can specify
	 either the EV style name or the corresponding chip
	 number.  GCC supports scheduling parameters for the EV4,
	 EV5 and EV6 family of processors and will choose the
	 default values for the instruction set from the proces-
	 sor you specify.  If you do not specify a processor
	 type, GCC will default to the processor on which the
	 compiler was built.

	 Supported values for cpu_type are

	 ev4
	 ev45
	 21064
	     Schedules as an EV4 and has no instruction set
	     extensions.

	 ev5
	 21164
	     Schedules as an EV5 and has no instruction set
	     extensions.

	 ev56
	 21164a
	     Schedules as an EV5 and supports the BWX extension.

	 pca56

gcc-3.4.6		   2011-08-18			      163

GCC(1)			       GNU			   GCC(1)

	 21164pc
	 21164PC
	     Schedules as an EV5 and supports the BWX and MAX
	     extensions.

	 ev6
	 21264
	     Schedules as an EV6 and supports the BWX, FIX, and
	     MAX extensions.

	 ev67
	 21264a
	     Schedules as an EV6 and supports the BWX, CIX, FIX,
	     and MAX extensions.

     -mtune=cpu_type
	 Set only the instruction scheduling parameters for
	 machine type cpu_type.	 The instruction set is not
	 changed.

     -mmemory-latency=time
	 Sets the latency the scheduler should assume for typical
	 memory references as seen by the application.	This
	 number is highly dependent on the memory access patterns
	 used by the application and the size of the external
	 cache on the machine.

	 Valid options for time are

	 number
	     A decimal number representing clock cycles.

	 L1
	 L2
	 L3
	 main
	     The compiler contains estimates of the number of
	     clock cycles for ``typical'' EV4 & EV5 hardware for
	     the Level 1, 2 & 3 caches (also called Dcache,
	     Scache, and Bcache), as well as to main memory. Note
	     that L3 is only valid for EV5.

     DEC Alpha/VMS Options

     These -m options are defined for the DEC Alpha/VMS implemen-
     tations:

     -mvms-return-codes
	 Return VMS condition codes from main.	The default is to
	 return POSIX style condition (e.g. error) codes.

gcc-3.4.6		   2011-08-18			      164

GCC(1)			       GNU			   GCC(1)

     H8/300 Options

     These -m options are defined for the H8/300 implementations:

     -mrelax
	 Shorten some address references at link time, when pos-
	 sible; uses the linker option -relax.

     -mh Generate code for the H8/300H.

     -ms Generate code for the H8S.

     -mn Generate code for the H8S and H8/300H in the normal
	 mode.	This switch must be used either with -mh or -ms.

     -ms2600
	 Generate code for the H8S/2600.  This switch must be
	 used with -ms.

     -mint32
	 Make "int" data 32 bits by default.

     -malign-300
	 On the H8/300H and H8S, use the same alignment rules as
	 for the H8/300. The default for the H8/300H and H8S is
	 to align longs and floats on 4 byte boundaries.
	 -malign-300 causes them to be aligned on 2 byte boun-
	 daries. This option has no effect on the H8/300.

     SH Options

     These -m options are defined for the SH implementations:

     -m1 Generate code for the SH1.

     -m2 Generate code for the SH2.

     -m2e
	 Generate code for the SH2e.

     -m3 Generate code for the SH3.

     -m3e
	 Generate code for the SH3e.

     -m4-nofpu
	 Generate code for the SH4 without a floating-point unit.

     -m4-single-only
	 Generate code for the SH4 with a floating-point unit
	 that only supports single-precision arithmetic.

gcc-3.4.6		   2011-08-18			      165

GCC(1)			       GNU			   GCC(1)

     -m4-single
	 Generate code for the SH4 assuming the floating-point
	 unit is in single-precision mode by default.

     -m4 Generate code for the SH4.

     -mb Compile code for the processor in big endian mode.

     -ml Compile code for the processor in little endian mode.

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

     -mrelax
	 Shorten some address references at link time, when pos-
	 sible; uses the linker option -relax.

     -mbigtable
	 Use 32-bit offsets in "switch" tables.	 The default is
	 to use 16-bit offsets.

     -mfmovd
	 Enable the use of the instruction "fmovd".

     -mhitachi
	 Comply with the calling conventions defined by Renesas.

     -mnomacsave
	 Mark the "MAC" register as call-clobbered, even if -mhi-
	 tachi is given.

     -mieee
	 Increase IEEE-compliance of floating-point code.

     -misize
	 Dump instruction size and location in the assembly code.

     -mpadstruct
	 This option is deprecated.  It pads structures to multi-
	 ple of 4 bytes, which is incompatible with the SH ABI.

     -mspace
	 Optimize for space instead of speed.  Implied by -Os.

     -mprefergot
	 When generating position-independent code, emit function
	 calls using the Global Offset Table instead of the Pro-
	 cedure Linkage Table.

gcc-3.4.6		   2011-08-18			      166

GCC(1)			       GNU			   GCC(1)

     -musermode
	 Generate a library function call to invalidate instruc-
	 tion cache entries, after fixing up a trampoline.  This
	 library function call doesn't assume it can write to the
	 whole memory address space.  This is the default when
	 the target is "sh-*-linux*".

     Options for System V

     These additional options are available on System V Release 4
     for compatibility with other compilers on those systems:

     -G	 Create a shared object. It is recommended that -symbolic
	 or -shared be used instead.

     -Qy Identify the versions of each tool used by the compiler,
	 in a ".ident" assembler directive in the output.

     -Qn Refrain from adding ".ident" directives to the output
	 file (this is the default).

     -YP,dirs
	 Search the directories dirs, and no others, for
	 libraries specified with -l.

     -Ym,dir
	 Look in the directory dir to find the M4 preprocessor.
	 The assembler uses this option.

     TMS320C3x/C4x Options

     These -m options are defined for TMS320C3x/C4x implementa-
     tions:

     -mcpu=cpu_type
	 Set the instruction set, register set, and instruction
	 scheduling parameters for machine type cpu_type.  Sup-
	 ported values for cpu_type are c30, c31, c32, c40, and
	 c44.  The default is c40 to generate code for the
	 TMS320C40.

     -mbig-memory
     -mbig
     -msmall-memory
     -msmall
	 Generates code for the big or small memory model.  The
	 small memory model assumed that all data fits into one
	 64K word page.	 At run-time the data page (DP) register
	 must be set to point to the 64K page containing the .bss
	 and .data program sections.  The big memory model is the
	 default and requires reloading of the DP register for
	 every direct memory access.

gcc-3.4.6		   2011-08-18			      167

GCC(1)			       GNU			   GCC(1)

     -mbk
     -mno-bk
	 Allow (disallow) allocation of general integer operands
	 into the block count register BK.

     -mdb
     -mno-db
	 Enable (disable) generation of code using decrement and
	 branch, DBcond(D), instructions.  This is enabled by
	 default for the C4x.  To be on the safe side, this is
	 disabled for the C3x, since the maximum iteration count
	 on the C3x is 2^{23 + 1} (but who iterates loops more
	 than 2^{23} times on the C3x?).  Note that GCC will try
	 to reverse a loop so that it can utilize the decrement
	 and branch instruction, but will give up if there is
	 more than one memory reference in the loop.  Thus a loop
	 where the loop counter is decremented can generate
	 slightly more efficient code, in cases where the RPTB
	 instruction cannot be utilized.

     -mdp-isr-reload
     -mparanoid
	 Force the DP register to be saved on entry to an inter-
	 rupt service routine (ISR), reloaded to point to the
	 data section, and restored on exit from the ISR.  This
	 should not be required unless someone has violated the
	 small memory model by modifying the DP register, say
	 within an object library.

     -mmpyi
     -mno-mpyi
	 For the C3x use the 24-bit MPYI instruction for integer
	 multiplies instead of a library call to guarantee 32-bit
	 results.  Note that if one of the operands is a con-
	 stant, then the multiplication will be performed using
	 shifts and adds.  If the -mmpyi option is not specified
	 for the C3x, then squaring operations are performed
	 inline instead of a library call.

     -mfast-fix
     -mno-fast-fix
	 The C3x/C4x FIX instruction to convert a floating point
	 value to an integer value chooses the nearest integer
	 less than or equal to the floating point value rather
	 than to the nearest integer.  Thus if the floating point
	 number is negative, the result will be incorrectly trun-
	 cated an additional code is necessary to detect and
	 correct this case.  This option can be used to disable
	 generation of the additional code required to correct
	 the result.

     -mrptb


gcc-3.4.6		   2011-08-18			      168

GCC(1)			       GNU			   GCC(1)

     -mno-rptb
	 Enable (disable) generation of repeat block sequences
	 using the RPTB instruction for zero overhead looping.
	 The RPTB construct is only used for innermost loops that
	 do not call functions or jump across the loop boun-
	 daries.  There is no advantage having nested RPTB loops
	 due to the overhead required to save and restore the RC,
	 RS, and RE registers. This is enabled by default with
	 -O2.

     -mrpts=count
     -mno-rpts
	 Enable (disable) the use of the single instruction
	 repeat instruction RPTS.  If a repeat block contains a
	 single instruction, and the loop count can be guaranteed
	 to be less than the value count, GCC will emit a RPTS
	 instruction instead of a RPTB.	 If no value is speci-
	 fied, then a RPTS will be emitted even if the loop count
	 cannot be determined at compile time.	Note that the
	 repeated instruction following RPTS does not have to be
	 reloaded from memory each iteration, thus freeing up the
	 CPU buses for operands.  However, since interrupts are
	 blocked by this instruction, it is disabled by default.

     -mloop-unsigned
     -mno-loop-unsigned
	 The maximum iteration count when using RPTS and RPTB
	 (and DB on the C40) is 2^{31 + 1} since these instruc-
	 tions test if the iteration count is negative to ter-
	 minate the loop.  If the iteration count is unsigned
	 there is a possibility than the 2^{31 + 1} maximum
	 iteration count may be exceeded.  This switch allows an
	 unsigned iteration count.

     -mti
	 Try to emit an assembler syntax that the TI assembler
	 (asm30) is happy with.	 This also enforces compatibility
	 with the API employed by the TI C3x C compiler.  For
	 example, long doubles are passed as structures rather
	 than in floating point registers.

     -mregparm
     -mmemparm
	 Generate code that uses registers (stack) for passing
	 arguments to functions. By default, arguments are passed
	 in registers where possible rather than by pushing argu-
	 ments on to the stack.

     -mparallel-insns
     -mno-parallel-insns
	 Allow the generation of parallel instructions.	 This is
	 enabled by default with -O2.


gcc-3.4.6		   2011-08-18			      169

GCC(1)			       GNU			   GCC(1)

     -mparallel-mpy
     -mno-parallel-mpy
	 Allow the generation of MPY||ADD and MPY||SUB parallel
	 instructions, provided -mparallel-insns is also speci-
	 fied.	These instructions have tight register con-
	 straints which can pessimize the code generation of
	 large functions.

     V850 Options

     These -m options are defined for V850 implementations:

     -mlong-calls
     -mno-long-calls
	 Treat all calls as being far away (near).  If calls are
	 assumed to be far away, the compiler will always load
	 the functions address up into a register, and call
	 indirect through the pointer.

     -mno-ep
     -mep
	 Do not optimize (do optimize) basic blocks that use the
	 same index pointer 4 or more times to copy pointer into
	 the "ep" register, and use the shorter "sld" and "sst"
	 instructions.	The -mep option is on by default if you
	 optimize.

     -mno-prolog-function
     -mprolog-function
	 Do not use (do use) external functions to save and
	 restore registers at the prologue and epilogue of a
	 function.  The external functions are slower, but use
	 less code space if more than one function saves the same
	 number of registers.  The -mprolog-function option is on
	 by default if you optimize.

     -mspace
	 Try to make the code as small as possible.  At present,
	 this just turns on the -mep and -mprolog-function
	 options.

     -mtda=n
	 Put static or global variables whose size is n bytes or
	 less into the tiny data area that register "ep" points
	 to.  The tiny data area can hold up to 256 bytes in
	 total (128 bytes for byte references).

     -msda=n
	 Put static or global variables whose size is n bytes or
	 less into the small data area that register "gp" points
	 to.  The small data area can hold up to 64 kilobytes.

gcc-3.4.6		   2011-08-18			      170

GCC(1)			       GNU			   GCC(1)

     -mzda=n
	 Put static or global variables whose size is n bytes or
	 less into the first 32 kilobytes of memory.

     -mv850
	 Specify that the target processor is the V850.

     -mbig-switch
	 Generate code suitable for big switch tables.	Use this
	 option only if the assembler/linker complain about out
	 of range branches within a switch table.

     -mapp-regs
	 This option will cause r2 and r5 to be used in the code
	 generated by the compiler.  This setting is the default.

     -mno-app-regs
	 This option will cause r2 and r5 to be treated as fixed
	 registers.

     -mv850e1
	 Specify that the target processor is the V850E1.  The
	 preprocessor constants __v850e1__ and __v850e__ will be
	 defined if this option is used.

     -mv850e
	 Specify that the target processor is the V850E.  The
	 preprocessor constant __v850e__ will be defined if this
	 option is used.

	 If neither -mv850 nor -mv850e nor -mv850e1 are defined
	 then a default target processor will be chosen and the
	 relevant __v850*__ preprocessor constant will be
	 defined.

	 The preprocessor constants __v850 and __v851__ are
	 always defined, regardless of which processor variant is
	 the target.

     -mdisable-callt
	 This option will suppress generation of the CALLT
	 instruction for the v850e and v850e1 flavors of the v850
	 architecture.	The default is -mno-disable-callt which
	 allows the CALLT instruction to be used.

     ARC Options

     These options are defined for ARC implementations:

     -EL Compile code for little endian mode.  This is the
	 default.

gcc-3.4.6		   2011-08-18			      171

GCC(1)			       GNU			   GCC(1)

     -EB Compile code for big endian mode.

     -mmangle-cpu
	 Prepend the name of the cpu to all public symbol names.
	 In multiple-processor systems, there are many ARC vari-
	 ants with different instruction and register set charac-
	 teristics.  This flag prevents code compiled for one cpu
	 to be linked with code compiled for another. No facility
	 exists for handling variants that are ``almost identi-
	 cal''. This is an all or nothing option.

     -mcpu=cpu
	 Compile code for ARC variant cpu. Which variants are
	 supported depend on the configuration. All variants sup-
	 port -mcpu=base, this is the default.

     -mtext=text-section
     -mdata=data-section
     -mrodata=readonly-data-section
	 Put functions, data, and readonly data in text-section,
	 data-section, and readonly-data-section respectively by
	 default.  This can be overridden with the "section"
	 attribute.

     NS32K Options

     These are the -m options defined for the 32000 series.  The
     default values for these options depends on which style of
     32000 was selected when the compiler was configured; the
     defaults for the most common choices are given below.

     -m32032
     -m32032
	 Generate output for a 32032.  This is the default when
	 the compiler is configured for 32032 and 32016 based
	 systems.

     -m32332
     -m32332
	 Generate output for a 32332.  This is the default when
	 the compiler is configured for 32332-based systems.

     -m32532
     -m32532
	 Generate output for a 32532.  This is the default when
	 the compiler is configured for 32532-based systems.

     -m32081
	 Generate output containing 32081 instructions for float-
	 ing point. This is the default for all systems.

     -m32381


gcc-3.4.6		   2011-08-18			      172

GCC(1)			       GNU			   GCC(1)

	 Generate output containing 32381 instructions for float-
	 ing point.  This also implies -m32081.	 The 32381 is
	 only compatible with the 32332 and 32532 cpus.	 This is
	 the default for the pc532-netbsd configuration.

     -mmulti-add
	 Try and generate multiply-add floating point instruc-
	 tions "polyF" and "dotF".  This option is only available
	 if the -m32381 option is in effect.  Using these
	 instructions requires changes to register allocation
	 which generally has a negative impact on performance.
	 This option should only be enabled when compiling code
	 particularly likely to make heavy use of multiply-add
	 instructions.

     -mnomulti-add
	 Do not try and generate multiply-add floating point
	 instructions "polyF" and "dotF".  This is the default on
	 all platforms.

     -msoft-float
	 Generate output containing library calls for floating
	 point. Warning: the requisite libraries may not be
	 available.

     -mieee-compare
     -mno-ieee-compare
	 Control whether or not the compiler uses IEEE floating
	 point comparisons.  These handle correctly the case
	 where the result of a comparison is unordered. Warning:
	 the requisite kernel support may not be available.

     -mnobitfield
	 Do not use the bit-field instructions.	 On some machines
	 it is faster to use shifting and masking operations.
	 This is the default for the pc532.

     -mbitfield
	 Do use the bit-field instructions.  This is the default
	 for all platforms except the pc532.

     -mrtd
	 Use a different function-calling convention, in which
	 functions that take a fixed number of arguments return
	 pop their arguments on return with the "ret" instruc-
	 tion.

	 This calling convention is incompatible with the one
	 normally used on Unix, so you cannot use it if you need
	 to call libraries compiled with the Unix compiler.

	 Also, you must provide function prototypes for all

gcc-3.4.6		   2011-08-18			      173

GCC(1)			       GNU			   GCC(1)

	 functions that take variable numbers of arguments
	 (including "printf"); otherwise incorrect code will be
	 generated for calls to those functions.

	 In addition, seriously incorrect code will result if you
	 call a function with too many arguments.  (Normally,
	 extra arguments are harmlessly ignored.)

	 This option takes its name from the 680x0 "rtd" instruc-
	 tion.

     -mregparam
	 Use a different function-calling convention where the
	 first two arguments are passed in registers.

	 This calling convention is incompatible with the one
	 normally used on Unix, so you cannot use it if you need
	 to call libraries compiled with the Unix compiler.

     -mnoregparam
	 Do not pass any arguments in registers.  This is the
	 default for all targets.

     -msb
	 It is OK to use the sb as an index register which is
	 always loaded with zero.  This is the default for the
	 pc532-netbsd target.

     -mnosb
	 The sb register is not available for use or has not been
	 initialized to zero by the run time system.  This is the
	 default for all targets except the pc532-netbsd.  It is
	 also implied whenever -mhimem or -fpic is set.

     -mhimem
	 Many ns32000 series addressing modes use displacements
	 of up to 512MB. If an address is above 512MB then dis-
	 placements from zero can not be used. This option causes
	 code to be generated which can be loaded above 512MB.
	 This may be useful for operating systems or ROM code.

     -mnohimem
	 Assume code will be loaded in the first 512MB of virtual
	 address space. This is the default for all platforms.

     AVR Options

     These options are defined for AVR implementations:

     -mmcu=mcu
	 Specify ATMEL AVR instruction set or MCU type.

gcc-3.4.6		   2011-08-18			      174

GCC(1)			       GNU			   GCC(1)

	 Instruction set avr1 is for the minimal AVR core, not
	 supported by the C compiler, only for assembler programs
	 (MCU types: at90s1200, attiny10, attiny11, attiny12,
	 attiny15, attiny28).

	 Instruction set avr2 (default) is for the classic AVR
	 core with up to 8K program memory space (MCU types:
	 at90s2313, at90s2323, attiny22, at90s2333, at90s2343,
	 at90s4414, at90s4433, at90s4434, at90s8515, at90c8534,
	 at90s8535).

	 Instruction set avr3 is for the classic AVR core with up
	 to 128K program memory space (MCU types: atmega103,
	 atmega603, at43usb320, at76c711).

	 Instruction set avr4 is for the enhanced AVR core with
	 up to 8K program memory space (MCU types: atmega8,
	 atmega83, atmega85).

	 Instruction set avr5 is for the enhanced AVR core with
	 up to 128K program memory space (MCU types: atmega16,
	 atmega161, atmega163, atmega32, atmega323, atmega64,
	 atmega128, at43usb355, at94k).

     -msize
	 Output instruction sizes to the asm file.

     -minit-stack=N
	 Specify the initial stack address, which may be a symbol
	 or numeric value, __stack is the default.

     -mno-interrupts
	 Generated code is not compatible with hardware inter-
	 rupts. Code size will be smaller.

     -mcall-prologues
	 Functions prologues/epilogues expanded as call to
	 appropriate subroutines.  Code size will be smaller.

     -mno-tablejump
	 Do not generate tablejump insns which sometimes increase
	 code size.

     -mtiny-stack
	 Change only the low 8 bits of the stack pointer.

     MCore Options

     These are the -m options defined for the Motorola M*Core
     processors.

     -mhardlit


gcc-3.4.6		   2011-08-18			      175

GCC(1)			       GNU			   GCC(1)

     -mno-hardlit
	 Inline constants into the code stream if it can be done
	 in two instructions or less.

     -mdiv
     -mno-div
	 Use the divide instruction.  (Enabled by default).

     -mrelax-immediate
     -mno-relax-immediate
	 Allow arbitrary sized immediates in bit operations.

     -mwide-bitfields
     -mno-wide-bitfields
	 Always treat bit-fields as int-sized.

     -m4byte-functions
     -mno-4byte-functions
	 Force all functions to be aligned to a four byte boun-
	 dary.

     -mcallgraph-data
     -mno-callgraph-data
	 Emit callgraph information.

     -mslow-bytes
     -mno-slow-bytes
	 Prefer word access when reading byte quantities.

     -mlittle-endian
     -mbig-endian
	 Generate code for a little endian target.

     -m210
     -m340
	 Generate code for the 210 processor.

     IA-64 Options

     These are the -m options defined for the Intel IA-64 archi-
     tecture.

     -mbig-endian
	 Generate code for a big endian target.	 This is the
	 default for HP-UX.

     -mlittle-endian
	 Generate code for a little endian target.  This is the
	 default for AIX5 and GNU/Linux.

     -mgnu-as
     -mno-gnu-as


gcc-3.4.6		   2011-08-18			      176

GCC(1)			       GNU			   GCC(1)

	 Generate (or don't) code for the GNU assembler.  This is
	 the default.

     -mgnu-ld
     -mno-gnu-ld
	 Generate (or don't) code for the GNU linker.  This is
	 the default.

     -mno-pic
	 Generate code that does not use a global pointer regis-
	 ter.  The result is not position independent code, and
	 violates the IA-64 ABI.

     -mvolatile-asm-stop
     -mno-volatile-asm-stop
	 Generate (or don't) a stop bit immediately before and
	 after volatile asm statements.

     -mb-step
	 Generate code that works around Itanium B step errata.

     -mregister-names
     -mno-register-names
	 Generate (or don't) in, loc, and out register names for
	 the stacked registers.	 This may make assembler output
	 more readable.

     -mno-sdata
     -msdata
	 Disable (or enable) optimizations that use the small
	 data section.	This may be useful for working around
	 optimizer bugs.

     -mconstant-gp
	 Generate code that uses a single constant global pointer
	 value.	 This is useful when compiling kernel code.

     -mauto-pic
	 Generate code that is self-relocatable.  This implies
	 -mconstant-gp. This is useful when compiling firmware
	 code.

     -minline-float-divide-min-latency
	 Generate code for inline divides of floating point
	 values using the minimum latency algorithm.

     -minline-float-divide-max-throughput
	 Generate code for inline divides of floating point
	 values using the maximum throughput algorithm.

     -minline-int-divide-min-latency
	 Generate code for inline divides of integer values using

gcc-3.4.6		   2011-08-18			      177

GCC(1)			       GNU			   GCC(1)

	 the minimum latency algorithm.

     -minline-int-divide-max-throughput
	 Generate code for inline divides of integer values using
	 the maximum throughput algorithm.

     -minline-sqrt-min-latency
	 Generate code for inline square roots using the minimum
	 latency algorithm.

     -minline-sqrt-max-throughput
	 Generate code for inline square roots using the maximum
	 throughput algorithm.

     -mno-dwarf2-asm
     -mdwarf2-asm
	 Don't (or do) generate assembler code for the DWARF2
	 line number debugging info.  This may be useful when not
	 using the GNU assembler.

     -mearly-stop-bits
     -mno-early-stop-bits
	 Allow stop bits to be placed earlier than immediately
	 preceding the instruction that triggered the stop bit.
	 This can improve instruction scheduling, but does not
	 always do so.

     -mfixed-range=register-range
	 Generate code treating the given register range as fixed
	 registers. A fixed register is one that the register
	 allocator can not use.	 This is useful when compiling
	 kernel code.  A register range is specified as two
	 registers separated by a dash.	 Multiple register ranges
	 can be specified separated by a comma.

     -mtls-size=tls-size
	 Specify bit size of immediate TLS offsets.  Valid values
	 are 14, 22, and 64.

     -mtune=cpu-type
	 Tune the instruction scheduling for a particular CPU,
	 Valid values are itanium, itanium1, merced, itanium2,
	 and mckinley.

     -mt
     -pthread
	 Add support for multithreading using the POSIX threads
	 library.  This option sets flags for both the preproces-
	 sor and linker.  It does not affect the thread safety of
	 object code produced by the compiler or that of
	 libraries supplied with it.  These are HP-UX specific
	 flags.

gcc-3.4.6		   2011-08-18			      178

GCC(1)			       GNU			   GCC(1)

     -milp32
     -mlp64
	 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.  These are HP-UX specific
	 flags.

     D30V Options

     These -m options are defined for D30V implementations:

     -mextmem
	 Link the .text, .data, .bss, .strings, .rodata,
	 .rodata1, .data1 sections into external memory, which
	 starts at location 0x80000000.

     -mextmemory
	 Same as the -mextmem switch.

     -monchip
	 Link the .text section into onchip text memory, which
	 starts at location 0x0.  Also link .data, .bss,
	 .strings, .rodata, .rodata1, .data1 sections into onchip
	 data memory, which starts at location 0x20000000.

     -mno-asm-optimize
     -masm-optimize
	 Disable (enable) passing -O to the assembler when optim-
	 izing. The assembler uses the -O option to automatically
	 parallelize adjacent short instructions where possible.

     -mbranch-cost=n
	 Increase the internal costs of branches to n.	Higher
	 costs means that the compiler will issue more instruc-
	 tions to avoid doing a branch. The default is 2.

     -mcond-exec=n
	 Specify the maximum number of conditionally executed
	 instructions that replace a branch.  The default is 4.

     S/390 and zSeries Options

     These are the -m options defined for the S/390 and zSeries
     architecture.

     -mhard-float
     -msoft-float
	 Use (do not use) the hardware floating-point instruc-
	 tions and registers for floating-point operations.  When
	 -msoft-float is specified, functions in libgcc.a will be
	 used to perform floating-point operations.  When

gcc-3.4.6		   2011-08-18			      179

GCC(1)			       GNU			   GCC(1)

	 -mhard-float is specified, the compiler generates IEEE
	 floating-point instructions.  This is the default.

     -mbackchain
     -mno-backchain
	 Generate (or do not generate) code which maintains an
	 explicit backchain within the stack frame that points to
	 the caller's frame. This may be needed to allow debug-
	 ging using tools that do not understand DWARF-2 call
	 frame information.  The default is not to generate the
	 backchain.

     -msmall-exec
     -mno-small-exec
	 Generate (or do not generate) code using the "bras"
	 instruction to do subroutine calls. This only works
	 reliably if the total executable size does not exceed
	 64k.  The default is to use the "basr" instruction
	 instead, which does not have this limitation.

     -m64
     -m31
	 When -m31 is specified, generate code compliant to the
	 GNU/Linux for S/390 ABI.  When -m64 is specified, gen-
	 erate code compliant to the GNU/Linux for zSeries ABI.
	 This allows GCC in particular to generate 64-bit
	 instructions.	For the s390 targets, the default is
	 -m31, while the s390x targets default to -m64.

     -mzarch
     -mesa
	 When -mzarch is specified, generate code using the
	 instructions available on z/Architecture. When -mesa is
	 specified, generate code using the instructions avail-
	 able on ESA/390. Note that -mesa is not possible with
	 -m64. When generating code compliant to the GNU/Linux
	 for S/390 ABI, the default is -mesa.  When generating
	 code compliant to the GNU/Linux for zSeries ABI, the
	 default is -mzarch.

     -mmvcle
     -mno-mvcle
	 Generate (or do not generate) code using the "mvcle"
	 instruction to perform block moves.  When -mno-mvcle is
	 specified, use a "mvc" loop instead.  This is the
	 default.

     -mdebug
     -mno-debug
	 Print (or do not print) additional debug information
	 when compiling. The default is to not print debug infor-
	 mation.

gcc-3.4.6		   2011-08-18			      180

GCC(1)			       GNU			   GCC(1)

     -march=cpu-type
	 Generate code that will run on cpu-type, which is the
	 name of a system representing a certain processor type.
	 Possible values for cpu-type are g5, g6, z900, and z990.
	 When generating code using the instructions available on
	 z/Architecture, the default is -march=z900.  Otherwise,
	 the default is -march=g5.

     -mtune=cpu-type
	 Tune to cpu-type everything applicable about the gen-
	 erated code, except for the ABI and the set of available
	 instructions. The list of cpu-type values is the same as
	 for -march. The default is the value used for -march.

     -mfused-madd
     -mno-fused-madd
	 Generate code that uses (does not use) the floating
	 point multiply and accumulate instructions.  These
	 instructions are generated by default if hardware float-
	 ing point is used.

     CRIS Options

     These options are defined specifically for the CRIS ports.

     -march=architecture-type
     -mcpu=architecture-type
	 Generate code for the specified architecture.	The
	 choices for architecture-type are v3, v8 and v10 for
	 respectively ETRAX 4, ETRAX 100, and ETRAX 100 LX.
	 Default is v0 except for cris-axis-linux-gnu, where the
	 default is v10.

     -mtune=architecture-type
	 Tune to architecture-type everything applicable about
	 the generated code, except for the ABI and the set of
	 available instructions.  The choices for architecture-
	 type are the same as for -march=architecture-type.

     -mmax-stack-frame=n
	 Warn when the stack frame of a function exceeds n bytes.

     -melinux-stacksize=n
	 Only available with the cris-axis-aout target.	 Arranges
	 for indications in the program to the kernel loader that
	 the stack of the program should be set to n bytes.

     -metrax4
     -metrax100
	 The options -metrax4 and -metrax100 are synonyms for
	 -march=v3 and -march=v8 respectively.

gcc-3.4.6		   2011-08-18			      181

GCC(1)			       GNU			   GCC(1)

     -mmul-bug-workaround
     -mno-mul-bug-workaround
	 Work around a bug in the "muls" and "mulu" instructions
	 for CPU models where it applies.  This option is active
	 by default.

     -mpdebug
	 Enable CRIS-specific verbose debug-related information
	 in the assembly code.	This option also has the effect
	 to turn off the #NO_APP formatted-code indicator to the
	 assembler at the beginning of the assembly file.

     -mcc-init
	 Do not use condition-code results from previous instruc-
	 tion; always emit compare and test instructions before
	 use of condition codes.

     -mno-side-effects
	 Do not emit instructions with side-effects in addressing
	 modes other than post-increment.

     -mstack-align
     -mno-stack-align
     -mdata-align
     -mno-data-align
     -mconst-align
     -mno-const-align
	 These options (no-options) arranges (eliminate arrange-
	 ments) for the stack-frame, individual data and con-
	 stants to be aligned for the maximum single data access
	 size for the chosen CPU model.	 The default is to
	 arrange for 32-bit alignment.	ABI details such as
	 structure layout are not affected by these options.

     -m32-bit
     -m16-bit
     -m8-bit
	 Similar to the stack- data- and const-align options
	 above, these options arrange for stack-frame, writable
	 data and constants to all be 32-bit, 16-bit or 8-bit
	 aligned.  The default is 32-bit alignment.

     -mno-prologue-epilogue
     -mprologue-epilogue
	 With -mno-prologue-epilogue, the normal function prolo-
	 gue and epilogue that sets up the stack-frame are omit-
	 ted and no return instructions or return sequences are
	 generated in the code.	 Use this option only together
	 with visual inspection of the compiled code: no warnings
	 or errors are generated when call-saved registers must
	 be saved, or storage for local variable needs to be
	 allocated.

gcc-3.4.6		   2011-08-18			      182

GCC(1)			       GNU			   GCC(1)

     -mno-gotplt
     -mgotplt
	 With -fpic and -fPIC, don't generate (do generate)
	 instruction sequences that load addresses for functions
	 from the PLT part of the GOT rather than (traditional on
	 other architectures) calls to the PLT.	 The default is
	 -mgotplt.

     -maout
	 Legacy no-op option only recognized with the cris-axis-
	 aout target.

     -melf
	 Legacy no-op option only recognized with the cris-axis-
	 elf and cris-axis-linux-gnu targets.

     -melinux
	 Only recognized with the cris-axis-aout target, where it
	 selects a GNU/linux-like multilib, include files and
	 instruction set for -march=v8.

     -mlinux
	 Legacy no-op option only recognized with the cris-axis-
	 linux-gnu target.

     -sim
	 This option, recognized for the cris-axis-aout and
	 cris-axis-elf arranges to link with input-output func-
	 tions from a simulator library.  Code, initialized data
	 and zero-initialized data are allocated consecutively.

     -sim2
	 Like -sim, but pass linker options to locate initialized
	 data at 0x40000000 and zero-initialized data at
	 0x80000000.

     MMIX Options

     These options are defined for the MMIX:

     -mlibfuncs
     -mno-libfuncs
	 Specify that intrinsic library functions are being com-
	 piled, passing all values in registers, no matter the
	 size.

     -mepsilon
     -mno-epsilon
	 Generate floating-point comparison instructions that
	 compare with respect to the "rE" epsilon register.

     -mabi=mmixware

gcc-3.4.6		   2011-08-18			      183

GCC(1)			       GNU			   GCC(1)

     -mabi=gnu
	 Generate code that passes function parameters and return
	 values that (in the called function) are seen as regis-
	 ters $0 and up, as opposed to the GNU ABI which uses
	 global registers $231 and up.

     -mzero-extend
     -mno-zero-extend
	 When reading data from memory in sizes shorter than 64
	 bits, use (do not use) zero-extending load instructions
	 by default, rather than sign-extending ones.

     -mknuthdiv
     -mno-knuthdiv
	 Make the result of a division yielding a remainder have
	 the same sign as the divisor.	With the default,
	 -mno-knuthdiv, the sign of the remainder follows the
	 sign of the dividend.	Both methods are arithmetically
	 valid, the latter being almost exclusively used.

     -mtoplevel-symbols
     -mno-toplevel-symbols
	 Prepend (do not prepend) a : to all global symbols, so
	 the assembly code can be used with the "PREFIX" assembly
	 directive.

     -melf
	 Generate an executable in the ELF format, rather than
	 the default mmo format used by the mmix simulator.

     -mbranch-predict
     -mno-branch-predict
	 Use (do not use) the probable-branch instructions, when
	 static branch prediction indicates a probable branch.

     -mbase-addresses
     -mno-base-addresses
	 Generate (do not generate) code that uses base
	 addresses.  Using a base address automatically generates
	 a request (handled by the assembler and the linker) for
	 a constant to be set up in a global register.	The
	 register is used for one or more base address requests
	 within the range 0 to 255 from the value held in the
	 register.  The generally leads to short and fast code,
	 but the number of different data items that can be
	 addressed is limited.	This means that a program that
	 uses lots of static data may require
	 -mno-base-addresses.

     -msingle-exit
     -mno-single-exit
	 Force (do not force) generated code to have a single

gcc-3.4.6		   2011-08-18			      184

GCC(1)			       GNU			   GCC(1)

	 exit point in each function.

     PDP-11 Options

     These options are defined for the PDP-11:

     -mfpu
	 Use hardware FPP floating point.  This is the default.
	 (FIS floating point on the PDP-11/40 is not supported.)

     -msoft-float
	 Do not use hardware floating point.

     -mac0
	 Return floating-point results in ac0 (fr0 in Unix assem-
	 bler syntax).

     -mno-ac0
	 Return floating-point results in memory.  This is the
	 default.

     -m40
	 Generate code for a PDP-11/40.

     -m45
	 Generate code for a PDP-11/45.	 This is the default.

     -m10
	 Generate code for a PDP-11/10.

     -mbcopy-builtin
	 Use inline "movstrhi" patterns for copying memory.  This
	 is the default.

     -mbcopy
	 Do not use inline "movstrhi" patterns for copying
	 memory.

     -mint16
     -mno-int32
	 Use 16-bit "int".  This is the default.

     -mint32
     -mno-int16
	 Use 32-bit "int".

     -mfloat64
     -mno-float32
	 Use 64-bit "float".  This is the default.

     -mfloat32
     -mno-float64


gcc-3.4.6		   2011-08-18			      185

GCC(1)			       GNU			   GCC(1)

	 Use 32-bit "float".

     -mabshi
	 Use "abshi2" pattern.	This is the default.

     -mno-abshi
	 Do not use "abshi2" pattern.

     -mbranch-expensive
	 Pretend that branches are expensive.  This is for exper-
	 imenting with code generation only.

     -mbranch-cheap
	 Do not pretend that branches are expensive.  This is the
	 default.

     -msplit
	 Generate code for a system with split I&D.

     -mno-split
	 Generate code for a system without split I&D.	This is
	 the default.

     -munix-asm
	 Use Unix assembler syntax.  This is the default when
	 configured for pdp11-*-bsd.

     -mdec-asm
	 Use DEC assembler syntax.  This is the default when con-
	 figured for any PDP-11 target other than pdp11-*-bsd.

     Xstormy16 Options

     These options are defined for Xstormy16:

     -msim
	 Choose startup files and linker script suitable for the
	 simulator.

     FRV Options

     -mgpr-32
	 Only use the first 32 general purpose registers.

     -mgpr-64
	 Use all 64 general purpose registers.

     -mfpr-32
	 Use only the first 32 floating point registers.

     -mfpr-64
	 Use all 64 floating point registers

gcc-3.4.6		   2011-08-18			      186

GCC(1)			       GNU			   GCC(1)

     -mhard-float
	 Use hardware instructions for floating point operations.

     -msoft-float
	 Use library routines for floating point operations.

     -malloc-cc
	 Dynamically allocate condition code registers.

     -mfixed-cc
	 Do not try to dynamically allocate condition code regis-
	 ters, only use "icc0" and "fcc0".

     -mdword
	 Change ABI to use double word insns.

     -mno-dword
	 Do not use double word instructions.

     -mdouble
	 Use floating point double instructions.

     -mno-double
	 Do not use floating point double instructions.

     -mmedia
	 Use media instructions.

     -mno-media
	 Do not use media instructions.

     -mmuladd
	 Use multiply and add/subtract instructions.

     -mno-muladd
	 Do not use multiply and add/subtract instructions.

     -mlibrary-pic
	 Enable PIC support for building libraries

     -macc-4
	 Use only the first four media accumulator registers.

     -macc-8
	 Use all eight media accumulator registers.

     -mpack
	 Pack VLIW instructions.

     -mno-pack
	 Do not pack VLIW instructions.

gcc-3.4.6		   2011-08-18			      187

GCC(1)			       GNU			   GCC(1)

     -mno-eflags
	 Do not mark ABI switches in e_flags.

     -mcond-move
	 Enable the use of conditional-move instructions
	 (default).

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mno-cond-move
	 Disable the use of conditional-move instructions.

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mscc
	 Enable the use of conditional set instructions
	 (default).

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mno-scc
	 Disable the use of conditional set instructions.

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mcond-exec
	 Enable the use of conditional execution (default).

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mno-cond-exec
	 Disable the use of conditional execution.

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mvliw-branch
	 Run a pass to pack branches into VLIW instructions
	 (default).

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mno-vliw-branch
	 Do not run a pass to pack branches into VLIW instruc-
	 tions.

gcc-3.4.6		   2011-08-18			      188

GCC(1)			       GNU			   GCC(1)

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mmulti-cond-exec
	 Enable optimization of "&&" and "||" in conditional exe-
	 cution (default).

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mno-multi-cond-exec
	 Disable optimization of "&&" and "||" in conditional
	 execution.

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mnested-cond-exec
	 Enable nested conditional execution optimizations
	 (default).

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mno-nested-cond-exec
	 Disable nested conditional execution optimizations.

	 This switch is mainly for debugging the compiler and
	 will likely be removed in a future version.

     -mtomcat-stats
	 Cause gas to print out tomcat statistics.

     -mcpu=cpu
	 Select the processor type for which to generate code.
	 Possible values are simple, tomcat, fr500, fr400, fr300,
	 frv.

     Xtensa Options

     These options are supported for Xtensa targets:

     -mconst16
     -mno-const16
	 Enable or disable use of "CONST16" instructions for
	 loading constant values.  The "CONST16" instruction is
	 currently not a standard option from Tensilica.  When
	 enabled, "CONST16" instructions are always used in place
	 of the standard "L32R" instructions.  The use of
	 "CONST16" is enabled by default only if the "L32R"
	 instruction is not available.

gcc-3.4.6		   2011-08-18			      189

GCC(1)			       GNU			   GCC(1)

     -mfused-madd
     -mno-fused-madd
	 Enable or disable use of fused multiply/add and
	 multiply/subtract instructions in the floating-point
	 option.  This has no effect if the floating-point option
	 is not also enabled.  Disabling fused multiply/add and
	 multiply/subtract instructions forces the compiler to
	 use separate instructions for the multiply and
	 add/subtract operations.  This may be desirable in some
	 cases where strict IEEE 754-compliant results are
	 required: the fused multiply add/subtract instructions
	 do not round the intermediate result, thereby producing
	 results with more bits of precision than specified by
	 the IEEE standard.  Disabling fused multiply
	 add/subtract instructions also ensures that the program
	 output is not sensitive to the compiler's ability to
	 combine multiply and add/subtract operations.

     -mtext-section-literals
     -mno-text-section-literals
	 Control the treatment of literal pools.  The default is
	 -mno-text-section-literals, which places literals in a
	 separate section in the output file.  This allows the
	 literal pool to be placed in a data RAM/ROM, and it also
	 allows the linker to combine literal pools from separate
	 object files to remove redundant literals and improve
	 code size.  With -mtext-section-literals, the literals
	 are interspersed in the text section in order to keep
	 them as close as possible to their references.	 This may
	 be necessary for large assembly files.

     -mtarget-align
     -mno-target-align
	 When this option is enabled, GCC instructs the assembler
	 to automatically align instructions to reduce branch
	 penalties at the expense of some code density.	 The
	 assembler attempts to widen density instructions to
	 align branch targets and the instructions following call
	 instructions.	If there are not enough preceding safe
	 density instructions to align a target, no widening will
	 be performed.	The default is -mtarget-align.	These
	 options do not affect the treatment of auto-aligned
	 instructions like "LOOP", which the assembler will
	 always align, either by widening density instructions or
	 by inserting no-op instructions.

     -mlongcalls
     -mno-longcalls
	 When this option is enabled, GCC instructs the assembler
	 to translate direct calls to indirect calls unless it
	 can determine that the target of a direct call is in the
	 range allowed by the call instruction.	 This translation

gcc-3.4.6		   2011-08-18			      190

GCC(1)			       GNU			   GCC(1)

	 typically occurs for calls to functions in other source
	 files.	 Specifically, the assembler translates a direct
	 "CALL" instruction into an "L32R" followed by a "CALLX"
	 instruction. The default is -mno-longcalls.  This option
	 should be used in programs where the call target can
	 potentially be out of range.  This option is implemented
	 in the assembler, not the compiler, so the assembly code
	 generated by GCC will still show direct call
	 instructions---look at the disassembled object code to
	 see the actual instructions.  Note that the assembler
	 will use an indirect call for every cross-file call, not
	 just those that really will be out of range.

     Options for Code Generation Conventions

     These machine-independent options control the interface con-
     ventions used in code generation.

     Most of them have both positive and negative forms; the
     negative form of -ffoo would be -fno-foo.	In the table
     below, only one of the forms is listed---the one which is
     not the default.  You can figure out the other form by
     either removing no- or adding it.

     -fbounds-check
	 For front-ends that support it, generate additional code
	 to check that indices used to access arrays are within
	 the declared range.  This is currently only supported by
	 the Java and Fortran 77 front-ends, where this option
	 defaults to true and false respectively.

     -ftrapv
	 This option generates traps for signed overflow on addi-
	 tion, subtraction, multiplication operations.

     -fwrapv
	 This option instructs the compiler to assume that signed
	 arithmetic overflow of addition, subtraction and multi-
	 plication wraps around using twos-complement representa-
	 tion.	This flag enables some optimizations and disables
	 other.	 This option is enabled by default for the Java
	 front-end, as required by the Java language specifica-
	 tion.

     -fexceptions
	 Enable exception handling.  Generates extra code needed
	 to propagate exceptions.  For some targets, this implies
	 GCC will generate frame unwind information for all func-
	 tions, which can produce significant data size overhead,
	 although it does not affect execution.	 If you do not
	 specify this option, GCC will enable it by default for
	 languages like C++ which normally require exception

gcc-3.4.6		   2011-08-18			      191

GCC(1)			       GNU			   GCC(1)

	 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 disable this option if you
	 are compiling older C++ programs that don't use excep-
	 tion handling.

     -fnon-call-exceptions
	 Generate code that allows trapping instructions to throw
	 exceptions. Note that this requires platform-specific
	 runtime support that does not exist everywhere.  More-
	 over, it only allows trapping instructions to throw
	 exceptions, i.e. memory references or floating point
	 instructions.	It does not allow exceptions to be thrown
	 from arbitrary signal handlers such as "SIGALRM".

     -funwind-tables
	 Similar to -fexceptions, except that it will just gen-
	 erate any needed static data, but will not affect the
	 generated code in any other way. You will normally not
	 enable this option; instead, a language processor that
	 needs this handling would enable it on your behalf.

     -fasynchronous-unwind-tables
	 Generate unwind table in dwarf2 format, if supported by
	 target machine.  The table is exact at each instruction
	 boundary, so it can be used for stack unwinding from
	 asynchronous events (such as debugger or garbage collec-
	 tor).

     -fpcc-struct-return
	 Return ``short'' "struct" and "union" values in memory
	 like longer ones, rather than in registers.  This con-
	 vention is less efficient, but it has the advantage of
	 allowing intercallability between GCC-compiled files and
	 files compiled with other compilers, particularly the
	 Portable C Compiler (pcc).

	 The precise convention for returning structures in
	 memory depends on the target configuration macros.

	 Short structures and unions are those whose size and
	 alignment match that of some integer type.

	 Warning: code compiled with the -fpcc-struct-return
	 switch is not binary compatible with code compiled with
	 the -freg-struct-return switch. Use it to conform to a
	 non-default application binary interface.

     -freg-struct-return
	 Return "struct" and "union" values in registers when

gcc-3.4.6		   2011-08-18			      192

GCC(1)			       GNU			   GCC(1)

	 possible. This is more efficient for small structures
	 than -fpcc-struct-return.

	 If you specify neither -fpcc-struct-return nor
	 -freg-struct-return, GCC defaults to whichever conven-
	 tion is standard for the target.  If there is no stan-
	 dard convention, GCC defaults to -fpcc-struct-return,
	 except on targets where GCC is the principal compiler.
	 In those cases, we can choose the standard, and we chose
	 the more efficient register return alternative.

	 Warning: code compiled with the -freg-struct-return
	 switch is not binary compatible with code compiled with
	 the -fpcc-struct-return switch. Use it to conform to a
	 non-default application binary interface.

     -fshort-enums
	 Allocate to an "enum" type only as many bytes as it
	 needs for the declared range of possible values.
	 Specifically, the "enum" type will be equivalent to the
	 smallest integer type which has enough room.

	 Warning: the -fshort-enums switch causes GCC to generate
	 code that is not binary compatible with code generated
	 without that switch. Use it to conform to a non-default
	 application binary interface.

     -fshort-double
	 Use the same size for "double" as for "float".

	 Warning: the -fshort-double switch causes GCC to gen-
	 erate code that is not binary compatible with code gen-
	 erated without that switch. Use it to conform to a non-
	 default application binary interface.

     -fshort-wchar
	 Override the underlying type for wchar_t to be short
	 unsigned int instead of the default for the target.
	 This option is useful for building programs to run under
	 WINE.

	 Warning: the -fshort-wchar switch causes GCC to generate
	 code that is not binary compatible with code generated
	 without that switch. Use it to conform to a non-default
	 application binary interface.

     -fshared-data
	 Requests that the data and non-"const" variables of this
	 compilation be shared data rather than private data.
	 The distinction makes sense only on certain operating
	 systems, where shared data is shared between processes
	 running the same program, while private data exists in

gcc-3.4.6		   2011-08-18			      193

GCC(1)			       GNU			   GCC(1)

	 one copy per process.

     -fno-common
	 In C, allocate even uninitialized global variables in
	 the data section of the object file, rather than gen-
	 erating them as common blocks.	 This has the effect that
	 if the same variable is declared (without "extern") in
	 two different compilations, you will get an error when
	 you link them. The only reason this might be useful is
	 if you wish to verify that the program will work on
	 other systems which always work this way.

     -fident
	 The compiler does not store its version string in
	 objects by default. Use this option to turn back on the
	 GNU behaviour.

     -fno-ident
	 Ignore the #ident directive.

     -finhibit-size-directive
	 Don't output a ".size" assembler directive, or anything
	 else that would cause trouble if the function is split
	 in the middle, and the two halves are placed at loca-
	 tions far apart in memory.  This option is used when
	 compiling crtstuff.c; you should not need to use it for
	 anything else.

     -fverbose-asm
	 Put extra commentary information in the generated assem-
	 bly code to make it more readable.  This option is gen-
	 erally only of use to those who actually need to read
	 the generated assembly code (perhaps while debugging the
	 compiler itself).

	 -fno-verbose-asm, the default, causes the extra informa-
	 tion to be omitted and is useful when comparing two
	 assembler files.

     -fpic
	 Generate position-independent code (PIC) suitable for
	 use in a shared library, if supported for the target
	 machine.  Such code accesses all constant addresses
	 through a global offset table (GOT).  The dynamic loader
	 resolves the GOT entries when the program starts (the
	 dynamic loader is not part of GCC; it is part of the
	 operating system).  If the GOT size for the linked exe-
	 cutable exceeds a machine-specific maximum size, you get
	 an error message from the linker indicating that -fpic
	 does not work; in that case, recompile with -fPIC
	 instead.  (These maximums are 8k on the SPARC and 32k on
	 the m68k and RS/6000.	The 386 has no such limit.)

gcc-3.4.6		   2011-08-18			      194

GCC(1)			       GNU			   GCC(1)

	 Position-independent code requires special support, and
	 therefore works only on certain machines.  For the 386,
	 GCC supports PIC for System V but not for the Sun 386i.
	 Code generated for the IBM RS/6000 is always
	 position-independent.

     -fPIC
	 If supported for the target machine, emit position-
	 independent code, suitable for dynamic linking and
	 avoiding any limit on the size of the global offset
	 table.	 This option makes a difference on the m68k and
	 the SPARC.

	 Position-independent code requires special support, and
	 therefore works only on certain machines.

     -fpie
     -fPIE
	 These options are similar to -fpic and -fPIC, but gen-
	 erated position independent code can be only linked into
	 executables. Usually these options are used when -pie
	 GCC option will be used during linking.

     -ffixed-reg
	 Treat the register named reg as a fixed register; gen-
	 erated code should never refer to it (except perhaps as
	 a stack pointer, frame pointer or in some other fixed
	 role).

	 reg must be the name of a register.  The register names
	 accepted are machine-specific and are defined in the
	 "REGISTER_NAMES" macro in the machine description macro
	 file.

	 This flag does not have a negative form, because it
	 specifies a three-way choice.

     -fcall-used-reg
	 Treat the register named reg as an allocable register
	 that is clobbered by function calls.  It may be allo-
	 cated for temporaries or variables that do not live
	 across a call.	 Functions compiled this way will not
	 save and restore the register reg.

	 It is an error to used this flag with the frame pointer
	 or stack pointer. Use of this flag for other registers
	 that have fixed pervasive roles in the machine's execu-
	 tion model will produce disastrous results.

	 This flag does not have a negative form, because it
	 specifies a three-way choice.

gcc-3.4.6		   2011-08-18			      195

GCC(1)			       GNU			   GCC(1)

     -fcall-saved-reg
	 Treat the register named reg as an allocable register
	 saved by functions.  It may be allocated even for tem-
	 poraries or variables that live across a call.	 Func-
	 tions compiled this way will save and restore the regis-
	 ter reg if they use it.

	 It is an error to used this flag with the frame pointer
	 or stack pointer. Use of this flag for other registers
	 that have fixed pervasive roles in the machine's execu-
	 tion model will produce disastrous results.

	 A different sort of disaster will result from the use of
	 this flag for a register in which function values may be
	 returned.

	 This flag does not have a negative form, because it
	 specifies a three-way choice.

     -fpack-struct
	 Pack all structure members together without holes.

	 Warning: the -fpack-struct switch causes GCC to generate
	 code that is not binary compatible with code generated
	 without that switch. Additionally, it makes the code
	 suboptimal. Use it to conform to a non-default applica-
	 tion binary interface.

     -finstrument-functions
	 Generate instrumentation calls for entry and exit to
	 functions.  Just after function entry and just before
	 function exit, the following profiling functions will be
	 called with the address of the current function and its
	 call site.  (On some platforms,
	 "__builtin_return_address" does not work beyond the
	 current function, so the call site information may not
	 be available to the profiling functions otherwise.)

		 void __cyg_profile_func_enter (void *this_fn,
						void *call_site);
		 void __cyg_profile_func_exit  (void *this_fn,
						void *call_site);

	 The first argument is the address of the start of the
	 current function, which may be looked up exactly in the
	 symbol table.

	 This currently disables function inlining.  This res-
	 triction is expected to be removed in future releases.

	 A function may be given the attribute
	 "no_instrument_function", in which case this

gcc-3.4.6		   2011-08-18			      196

GCC(1)			       GNU			   GCC(1)

	 instrumentation will not be done.  This can be used, for
	 example, for the profiling functions listed above,
	 high-priority interrupt routines, and any functions from
	 which the profiling functions cannot safely be called
	 (perhaps signal handlers, if the profiling routines gen-
	 erate output or allocate memory).

     -fstack-check
	 Generate code to verify that you do not go beyond the
	 boundary of the stack.	 You should specify this flag if
	 you are running in an environment with multiple threads,
	 but only rarely need to specify it in a single-threaded
	 environment since stack overflow is automatically
	 detected on nearly all systems if there is only one
	 stack.

	 Note that this switch does not actually cause checking
	 to be done; the operating system must do that.	 The
	 switch causes generation of code to ensure that the
	 operating system sees the stack being extended.

     -fstack-limit-register=reg
     -fstack-limit-symbol=sym
     -fno-stack-limit
	 Generate code to ensure that the stack does not grow
	 beyond a certain value, either the value of a register
	 or the address of a symbol.  If the stack would grow
	 beyond the value, a signal is raised.	For most targets,
	 the signal is raised before the stack overruns the boun-
	 dary, so it is possible to catch the signal without tak-
	 ing special precautions.

	 For instance, if the stack starts at absolute address
	 0x80000000 and grows downwards, you can use the flags
	 -fstack-limit-symbol=__stack_limit and
	 -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack
	 limit of 128KB.  Note that this may only work with the
	 GNU linker.

     -fstack-protector
     -fstack-protector-all
	 Generate code to protect an application from a stack
	 smashing attack. The features are (1) the insertion of
	 random value next to the frame pointer to detect the
	 integrity of the stack, (2) the reordering of local
	 variables to place buffers after pointers to avoid the
	 corruption of pointers that could be used to further
	 corrupt arbitrary memory locations, (3) the copying of
	 pointers in function arguments to an area preceding
	 local variable buffers to prevent the corruption of
	 pointers that could be used to further corrupt arbitrary
	 memory locations, and the (4) omission of

gcc-3.4.6		   2011-08-18			      197

GCC(1)			       GNU			   GCC(1)

	 instrumentation code from some functions to decrease the
	 performance overhead.	If the integrity would be broken,
	 the program is aborted.  If stack-protector-all is
	 specified, instrumentation codes are generated at every
	 functions.

	 Stack consistency checks at run time are added by this
	 extension as well, in order to detect stack overflows,
	 and it will attempt to report the problem in the system
	 logs by calling syslog(3) with a LOG_CRIT priority mes-
	 sage: "stack overflow in function XXX", and abort the
	 faulting process.

	 Note that the stack protector relies on some support
	 code in libc. Stand-alone programs not linked against
	 libc must either provide their own support bits, or dis-
	 able SSP.

	 On MirOS, stack-protector-all is the default.

	 The ProPolice home page is at
	 <http://researchweb.watson.ibm.com/trl/projects/security/ssp/>.

     -ftrampolines
	 Allow the compiler to generate trampoline code. Since
	 trampolines require the stack to be executable, this is
	 commonly considered very bad code. In C, trampolines are
	 only needed for nested functions, which is a GCC exten-
	 sion to be deprecated soon.

	 On most MirOS architectures, trampoline code marks the
	 smallest possible area around the trampoline stub exe-
	 cutable using mprotect(2), since the stack area is by
	 default non-executable.

     -fargument-alias
     -fargument-noalias
     -fargument-noalias-global
	 Specify the possible relationships among parameters and
	 between parameters and global data.

	 -fargument-alias specifies that arguments (parameters)
	 may alias each other and may alias global
	 storage.-fargument-noalias specifies that arguments do
	 not alias each other, but may alias global
	 storage.-fargument-noalias-global specifies that argu-
	 ments do not alias each other and do not alias global
	 storage.

	 Each language will automatically use whatever option is
	 required by the language standard.  You should not need
	 to use these options yourself.

gcc-3.4.6		   2011-08-18			      198

GCC(1)			       GNU			   GCC(1)

     -fleading-underscore
	 This option and its counterpart,
	 -fno-leading-underscore, forcibly change the way C sym-
	 bols are represented in the object file.  One use is to
	 help link with legacy assembly code.

	 Warning: the -fleading-underscore switch causes GCC to
	 generate code that is not binary compatible with code
	 generated without that switch.	 Use it to conform to a
	 non-default application binary interface. Not all tar-
	 gets provide complete support for this switch.

     -ftls-model=model
	 Alter the thread-local storage model to be used. The
	 model argument should be one of "global-dynamic",
	 "local-dynamic", "initial-exec" or "local-exec".

	 The default without -fpic is "initial-exec"; with -fpic
	 the default is "global-dynamic".

ENVIRONMENT
     This section describes several environment variables that
     affect how GCC operates.  Some of them work by specifying
     directories or prefixes to use when searching for various
     kinds of files.  Some are used to specify other aspects of
     the compilation environment.

     Note that you can also specify places to search using
     options such as -B, -I and -L.  These take precedence over
     places specified using environment variables, which in turn
     take precedence over those specified by the configuration of
     GCC.

     LANG
     LC_CTYPE
     LC_MESSAGES
     LC_ALL
	 These environment variables control the way that GCC
	 uses localization information that allow GCC to work
	 with different national conventions.  GCC inspects the
	 locale categories LC_CTYPE and LC_MESSAGES if it has
	 been configured to do so.  These locale categories can
	 be set to any value supported by your installation.  A
	 typical value is en_GB.UTF-8 for English in the United
	 Kingdom encoded in UTF-8.

	 The LC_CTYPE environment variable specifies character
	 classification.  GCC uses it to determine the character
	 boundaries in a string; this is needed for some multi-
	 byte encodings that contain quote and escape characters
	 that would otherwise be interpreted as a string end or
	 escape.

gcc-3.4.6		   2011-08-18			      199

GCC(1)			       GNU			   GCC(1)

	 The LC_MESSAGES environment variable specifies the
	 language to use in diagnostic messages.

	 If the LC_ALL environment variable is set, it overrides
	 the value of LC_CTYPE and LC_MESSAGES; otherwise,
	 LC_CTYPE and LC_MESSAGES default to the value of the
	 LANG environment variable.  If none of these variables
	 are set, GCC defaults to traditional C English behavior.

     TMPDIR
	 If TMPDIR is set, it specifies the directory to use for
	 temporary files.  GCC uses temporary files to hold the
	 output of one stage of compilation which is to be used
	 as input to the next stage: for example, the output of
	 the preprocessor, which is the input to the compiler
	 proper.

     GCC_EXEC_PREFIX
	 If GCC_EXEC_PREFIX is set, it specifies a prefix to use
	 in the names of the subprograms executed by the com-
	 piler.	 No slash is added when this prefix is combined
	 with the name of a subprogram, but you can specify a
	 prefix that ends with a slash if you wish.

	 If GCC_EXEC_PREFIX is not set, GCC will attempt to fig-
	 ure out an appropriate prefix to use based on the path-
	 name it was invoked with.

	 If GCC cannot find the subprogram using the specified
	 prefix, it tries looking in the usual places for the
	 subprogram.

	 The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/
	 where prefix is the value of "prefix" when you ran the
	 configure script.

	 Other prefixes specified with -B take precedence over
	 this prefix.

	 This prefix is also used for finding files such as
	 crt0.o that are used for linking.

	 In addition, the prefix is used in an unusual way in
	 finding the directories to search for header files.  For
	 each of the standard directories whose name normally
	 begins with /usr/local/lib/gcc (more precisely, with the
	 value of GCC_INCLUDE_DIR), GCC tries replacing that
	 beginning with the specified prefix to produce an alter-
	 nate directory name.  Thus, with -Bfoo/, GCC will search
	 foo/bar where it would normally search
	 /usr/local/lib/bar. These alternate directories are
	 searched first; the standard directories come next.

gcc-3.4.6		   2011-08-18			      200

GCC(1)			       GNU			   GCC(1)

     COMPILER_PATH
	 The value of COMPILER_PATH is a colon-separated list of
	 directories, much like PATH.  GCC tries the directories
	 thus specified when searching for subprograms, if it
	 can't find the subprograms using GCC_EXEC_PREFIX.

     LIBRARY_PATH
	 The value of LIBRARY_PATH is a colon-separated list of
	 directories, much like PATH.  When configured as a
	 native compiler, GCC tries the directories thus speci-
	 fied when searching for special linker files, if it
	 can't find them using GCC_EXEC_PREFIX.	 Linking using
	 GCC also uses these directories when searching for ordi-
	 nary libraries for the -l option (but directories speci-
	 fied with -L come first).

     LANG
	 This variable is used to pass locale information to the
	 compiler.  One way in which this information is used is
	 to determine the character set to be used when character
	 literals, string literals and comments are parsed in C
	 and C++. When the compiler is configured to allow multi-
	 byte characters, the following values for LANG are
	 recognized:

	 C-JIS
	     Recognize JIS characters.

	 C-SJIS
	     Recognize SJIS characters.

	 C-EUCJP
	     Recognize EUCJP characters.

	 If LANG is not defined, or if it has some other value,
	 then the compiler will use mblen and mbtowc as defined
	 by the default locale to recognize and translate multi-
	 byte characters.

     Some additional environments variables affect the behavior
     of the preprocessor.

     CPATH
     C_INCLUDE_PATH
     CPLUS_INCLUDE_PATH
     OBJC_INCLUDE_PATH
	 Each variable's value is a list of directories separated
	 by a special character, much like PATH, in which to look
	 for header files. The special character,
	 "PATH_SEPARATOR", is target-dependent and determined at
	 GCC build time.  For Microsoft Windows-based targets it
	 is a semicolon, and for almost all other targets it is a

gcc-3.4.6		   2011-08-18			      201

GCC(1)			       GNU			   GCC(1)

	 colon.

	 CPATH specifies a list of directories to be searched as
	 if specified with -I, but after any paths given with -I
	 options on the command line.  This environment variable
	 is used regardless of which language is being prepro-
	 cessed.

	 The remaining environment variables apply only when
	 preprocessing the particular language indicated.  Each
	 specifies a list of directories to be searched as if
	 specified with -isystem, but after any paths given with
	 -isystem options on the command line.

	 In all these variables, an empty element instructs the
	 compiler to search its current working directory.  Empty
	 elements can appear at the beginning or end of a path.
	 For instance, if the value of CPATH is
	 ":/special/include", that has the same effect as
	 -I. -I/special/include.

     DEPENDENCIES_OUTPUT
	 If this variable is set, its value specifies how to out-
	 put dependencies for Make based on the non-system header
	 files processed by the compiler.  System header files
	 are ignored in the dependency output.

	 The value of DEPENDENCIES_OUTPUT can be just a file
	 name, in which case the Make rules are written to that
	 file, guessing the target name from the source file
	 name.	Or the value can have the form file target, in
	 which case the rules are written to file file using tar-
	 get as the target name.

	 In other words, this environment variable is equivalent
	 to combining the options -MM and -MF, with an optional
	 -MT switch too.

     SUNPRO_DEPENDENCIES
	 This variable is the same as DEPENDENCIES_OUTPUT (see
	 above), except that system header files are not ignored,
	 so it implies -M rather than -MM.  However, the depen-
	 dence on the main input file is omitted.

BUGS
     For instructions on reporting bugs, see
     <http://gcc.gnu.org/bugs.html>.  Use of the gccbug script to
     report bugs is recommended.

FOOTNOTES
     1.	 On some systems, gcc -shared needs to build supplemen-
	 tary stub code for constructors to work.  On multi-

gcc-3.4.6		   2011-08-18			      202

GCC(1)			       GNU			   GCC(1)

	 libbed systems, gcc -shared must select the correct sup-
	 port libraries to link against.  Failing to supply the
	 correct flags may lead to subtle defects.  Supplying
	 them in cases where they are not necessary is innocuous.

SEE ALSO
     gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), g77(1),
     as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) and the Info
     entries for gcc, cpp, g77, as, ld, binutils and gdb.

AUTHOR
     See the Info entry for gcc, or
     <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for
     contributors to GCC.

COPYRIGHT
     Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996,
     1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
     Software Foundation, Inc. Copyright (c) 1998-2004 Hiroaki
     Etoh, assigned to the FSF. Copyright (c) 2004-2007, 2009
     Thorsten Glaser, assigned to the FSF.

     Permission is granted to copy, distribute and/or modify this
     document under the terms of the GNU Free Documentation
     License, Version 1.2 or any later version published by the
     Free Software Foundation; with the Invariant Sections being
     ``GNU General Public License'' and ``Funding Free
     Software'', the Front-Cover texts being (a) (see below), and
     with the Back-Cover Texts being (b) (see below).  A copy of
     the license is included in the gfdl(7) man page.

     (a) The FSF's Front-Cover Text is:

	  A GNU Manual

     (b) The FSF's Back-Cover Text is:

	  You have freedom to copy and modify this GNU Manual, like GNU
	  software.  Copies published by the Free Software Foundation raise
	  funds for GNU development.

gcc-3.4.6		   2011-08-18			      203

[top]

List of man pages available for MirBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net